增加时间同步功能,并编写相应的前端页面展示功能
This commit is contained in:
parent
ac2f40337c
commit
f348af3c82
@ -1,6 +1,7 @@
|
||||
using InSituLaboratory.Entities;
|
||||
using InSituLaboratory.Entities.ExperimentalStationEntities;
|
||||
using InSituLaboratory.Entities.Sensor;
|
||||
using InSituLaboratory.Entities.SqlSugar;
|
||||
using InSituLaboratory.Entities.SysData;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -196,6 +197,13 @@ namespace InSituLaboratory.IService.Sensor
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
IEnumerable<SysSensorModel> GeSysSensor();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前运行时序状态
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
IEnumerable<CurrentSequentiual> GetCurrentSequentiual();
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
using InSituLaboratory.Entities;
|
||||
using InSituLaboratory.Entities.ExperimentalStationEntities;
|
||||
using InSituLaboratory.Entities.Sensor;
|
||||
using InSituLaboratory.Entities.SqlSugar;
|
||||
using InSituLaboratory.Entities.SysData;
|
||||
using InSituLaboratory.IService;
|
||||
using InSituLaboratory.IService.Sensor;
|
||||
@ -286,6 +287,15 @@ namespace InSituLaboratory.Service.Sensor
|
||||
{
|
||||
return this.Query<SysSensorModel>(m => true).OrderByDescending(n => n.CreateTime).AsNoTracking();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前运行时序状态
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<CurrentSequentiual> GetCurrentSequentiual()
|
||||
{
|
||||
return this.Query<CurrentSequentiual>(m => true).OrderByDescending(n => n.CreateTime).AsNoTracking();
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
@ -42,7 +42,7 @@ namespace InSituLaboratory.Common
|
||||
string ResponID = "";
|
||||
|
||||
//通用应答消息ID
|
||||
string MessageID = "1000";
|
||||
string MessageID = "0000";
|
||||
|
||||
//crc
|
||||
static byte nr_crc = 0;
|
||||
@ -209,10 +209,10 @@ namespace InSituLaboratory.Common
|
||||
currentSequentiual.DeviceNumber += "气相色谱仪 ";
|
||||
break;
|
||||
case 0x08:
|
||||
currentSequentiual.DeviceNumber += "甲烷传感器 ";
|
||||
currentSequentiual.DeviceNumber += "CH4 ";
|
||||
break;
|
||||
case 0x09:
|
||||
currentSequentiual.DeviceNumber += "二氧化碳同位素分析仪 ";
|
||||
currentSequentiual.DeviceNumber += "CO2 ";
|
||||
break;
|
||||
case 0x0a:
|
||||
currentSequentiual.DeviceNumber += "备用网口设备 ";
|
||||
@ -221,7 +221,7 @@ namespace InSituLaboratory.Common
|
||||
currentSequentiual.DeviceNumber += "ICL ";
|
||||
break;
|
||||
case 0x0c:
|
||||
currentSequentiual.DeviceNumber += "显微拉曼分析仪 ";
|
||||
currentSequentiual.DeviceNumber += "显微拉曼 ";
|
||||
break;
|
||||
case 0x0d:
|
||||
currentSequentiual.DeviceNumber += "质谱仪 ";
|
||||
@ -250,7 +250,7 @@ namespace InSituLaboratory.Common
|
||||
|
||||
|
||||
|
||||
//通用应答 消息ID:0x1000
|
||||
//通用应答 消息ID:0x0000
|
||||
if (MessageID == dataNew[1].ToString("X2") + dataNew[2].ToString("X2"))
|
||||
{
|
||||
dataParsingModel.CreateTime = System.DateTime.Now;
|
||||
|
||||
@ -3,6 +3,7 @@ using InSituLaboratory.Common;
|
||||
using InSituLaboratory.Controls;
|
||||
using InSituLaboratory.Entities;
|
||||
using InSituLaboratory.Entities.Sensor;
|
||||
using InSituLaboratory.Entities.SqlSugar;
|
||||
using InSituLaboratory.IService;
|
||||
using InSituLaboratory.IService.Sensor;
|
||||
using InSituLaboratory.Models.Sendsor;
|
||||
@ -20,6 +21,7 @@ using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Markup;
|
||||
using System.Windows.Media.Animation;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
||||
|
||||
namespace InSituLaboratory.ViewModels.Pages
|
||||
@ -30,12 +32,13 @@ namespace InSituLaboratory.ViewModels.Pages
|
||||
public class RelayViewModel : ViewModelBase
|
||||
{
|
||||
#region Entity
|
||||
public ClientModel clientModel { get; set; } = new ClientModel();
|
||||
public SysSensorModel sysSensorModel { get; set; } = new SysSensorModel();
|
||||
public SysSensorModels sysSensorModels { get; set; } = new SysSensorModels();
|
||||
public LogModel logModel { get; set; }
|
||||
public ClientModel clientModel { get; set; } = new ClientModel();//Socket 通信类
|
||||
public SysSensorModel sysSensorModel { get; set; } = new SysSensorModel(); // 传感器表
|
||||
public CurrentSequentiual CurrentSequentiual { get; set; } = new CurrentSequentiual(); //当前运行时序状态表
|
||||
public SysSensorModels sysSensorModels { get; set; } = new SysSensorModels(); //传感器表
|
||||
public LogModel logModel { get; set; } //日志记录表
|
||||
public ObservableCollection<LogModel> loglist { get; set; } = new ObservableCollection<LogModel>();
|
||||
public PaginationModel PaginationModel { get; set; } = new PaginationModel();
|
||||
public PaginationModel PaginationModel { get; set; } = new PaginationModel(); //分页组件
|
||||
public static SocketInfo SocketInfo { get; set; } = new SocketInfo()
|
||||
{
|
||||
IP = tools.GetAppSetting("IP"),
|
||||
@ -73,10 +76,17 @@ namespace InSituLaboratory.ViewModels.Pages
|
||||
public override void Refresh()
|
||||
{
|
||||
loglist.Clear();
|
||||
|
||||
//获取日志记录数据
|
||||
var Loglist = _logService.GetLogData(SearchKey, PaginationModel.PageSize, PaginationModel.PageIndex, out int totalCount);
|
||||
|
||||
//获取传感器电源开关数据
|
||||
var SysSensorlist = _sensorService.GeSysSensor();
|
||||
|
||||
///列表清单数据
|
||||
//获取当前运行时序状态表
|
||||
var CurrentSequentiualList = _sensorService.GetCurrentSequentiual();
|
||||
|
||||
//日志列表清单数据
|
||||
int index = 0;
|
||||
foreach (var item in Loglist)
|
||||
{
|
||||
@ -89,7 +99,7 @@ namespace InSituLaboratory.ViewModels.Pages
|
||||
});
|
||||
}
|
||||
|
||||
///状态监控
|
||||
//传感器电源开关数据
|
||||
if (SysSensorlist.Count() != 0)
|
||||
{
|
||||
var data = _sensorService.GeSysSensor().FirstOrDefault();
|
||||
@ -115,6 +125,16 @@ namespace InSituLaboratory.ViewModels.Pages
|
||||
sysSensorModel.ElectricSwitch2 = sysSensorModels.ElectricSwitch2 = data.ElectricSwitch2;
|
||||
}
|
||||
|
||||
//当前运行时序状态数据
|
||||
if (CurrentSequentiualList.Count() != 0)
|
||||
{
|
||||
var data = _sensorService.GetCurrentSequentiual().FirstOrDefault();
|
||||
|
||||
CurrentSequentiual.Number = data.Number;
|
||||
CurrentSequentiual.DeviceNumber = data.DeviceNumber;
|
||||
CurrentSequentiual.Status = data.Status;
|
||||
}
|
||||
|
||||
// 刷新分页组件的页码
|
||||
PaginationModel.FillPageNumbers(totalCount);
|
||||
}
|
||||
@ -1097,5 +1117,112 @@ namespace InSituLaboratory.ViewModels.Pages
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 时间同步
|
||||
/// </summary>
|
||||
public override void DoSynchronization()
|
||||
{
|
||||
ulong senddate;
|
||||
ulong year;
|
||||
ulong month;
|
||||
ulong day;
|
||||
ulong hour;
|
||||
ulong min;
|
||||
ulong sec;
|
||||
ulong minsec;
|
||||
|
||||
//定义消息体数组
|
||||
byte[] byteaq = new byte[16];
|
||||
DateTime dateTime = DateTime.Now;
|
||||
year = (ulong)dateTime.Year * 10000000000000UL;
|
||||
month = (ulong)dateTime.Month * 100000000000;
|
||||
day = (ulong)dateTime.Day * 1000000000L;
|
||||
hour = (ulong)dateTime.Hour * 10000000;
|
||||
min = (ulong)dateTime.Minute * 100000;
|
||||
sec = (ulong)dateTime.Second * 1000;
|
||||
minsec = (ulong)dateTime.Millisecond;
|
||||
senddate = year + month + day + hour + min + sec + minsec;
|
||||
|
||||
byteaq[0] = 0x90;
|
||||
byteaq[1] = 0x02;
|
||||
byteaq[2] = 0x10;
|
||||
byteaq[3] = 0x01;
|
||||
byteaq[4] = 0x00;
|
||||
byteaq[5] = 0x00;
|
||||
byteaq[6] = 0x00;
|
||||
byteaq[7] = 0x00;
|
||||
byteaq[8] = (byte)((senddate >> 56) & 0xff);
|
||||
byteaq[9] = (byte)((senddate >> 48) & 0xff);
|
||||
byteaq[10] = (byte)((senddate >> 40) & 0xff);
|
||||
byteaq[11] = (byte)((senddate >> 32) & 0xff);
|
||||
byteaq[12] = (byte)((senddate >> 24) & 0xff);
|
||||
byteaq[13] = (byte)((senddate >> 16) & 0xff);
|
||||
byteaq[14] = (byte)((senddate >> 8) & 0xff);
|
||||
byteaq[15] = (byte)(senddate & 0xff);
|
||||
|
||||
//标志位
|
||||
byte head = 0x7f;
|
||||
//crc
|
||||
byte nr_crc = 0;
|
||||
nr_crc = tools.CRC(byteaq.ToArray(), 0, byteaq.Length);
|
||||
|
||||
///转义
|
||||
int j = 0;
|
||||
List<byte> tBuffer = byteaq.ToList();
|
||||
tBuffer.Add(nr_crc);
|
||||
int length = tBuffer.ToArray().Length;
|
||||
byte[] newAnswer = tBuffer.ToArray();
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
if (newAnswer[i] == 0x7e || newAnswer[i] == 0x7f)
|
||||
{
|
||||
j++;
|
||||
}
|
||||
}
|
||||
byte[] newSendBuffer = new byte[length + j];
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
newSendBuffer[i] = newAnswer[i];
|
||||
}
|
||||
for (int i = 0; i < length + j; i++)
|
||||
{
|
||||
if (newSendBuffer[i] == 0x7e)
|
||||
{
|
||||
for (int k = length + j - 1; k > i + 1; k--)
|
||||
{
|
||||
newSendBuffer[k] = newSendBuffer[k - 1];
|
||||
}
|
||||
newSendBuffer[i + 1] = 0x01;
|
||||
}
|
||||
if (newSendBuffer[i] == 0x7f)
|
||||
{
|
||||
newSendBuffer[i] = 0x7e;
|
||||
for (int k = length + j - 1; k > i + 1; k--)
|
||||
{
|
||||
newSendBuffer[k] = newSendBuffer[k - 1];
|
||||
}
|
||||
newSendBuffer[i + 1] = 0x02;
|
||||
}
|
||||
}
|
||||
|
||||
List<byte> buffer = new List<byte>();
|
||||
buffer.Add(head);
|
||||
for (int i = 0; i < newSendBuffer.Length; i++)
|
||||
{
|
||||
buffer.Add(newSendBuffer[i]);
|
||||
}
|
||||
buffer.Add(head);
|
||||
|
||||
string list = tools.byteToHexStr(buffer.ToArray());
|
||||
byte[] bytea = tools.ConvertHexStringToBytes(list);
|
||||
clientModel.SendData(bytea);
|
||||
|
||||
logModel = new LogModel();
|
||||
logModel.CreateTime = DateTime.Now;
|
||||
logModel.Remark = "时间同步指令已下发";
|
||||
_logService.Insert<LogModel>(logModel);
|
||||
this.Refresh();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -62,6 +62,7 @@ namespace InSituLaboratory.ViewModels.Pages
|
||||
public DelegateCommand<object> ConnectionCommand { get; set; }
|
||||
public DelegateCommand ReductionCommand { get; set; } //一键还原
|
||||
public DelegateCommand StartCommand { get; set; }//一键启动
|
||||
public DelegateCommand SynchronizationCommand { get; set; }//时间同步
|
||||
|
||||
|
||||
#region 时序1-5 刷新 新增/编辑 删除 下发
|
||||
@ -107,6 +108,7 @@ namespace InSituLaboratory.ViewModels.Pages
|
||||
ConnectionCommand = new DelegateCommand<object>(DoConnection);
|
||||
ReductionCommand = new DelegateCommand(DoReduction);
|
||||
StartCommand = new DelegateCommand(DoStart);
|
||||
SynchronizationCommand = new DelegateCommand(DoSynchronization);
|
||||
|
||||
#region 时序1-5 刷新 新增/编辑 删除 下发
|
||||
|
||||
@ -155,6 +157,7 @@ namespace InSituLaboratory.ViewModels.Pages
|
||||
public virtual void DoConnection(object model) { }
|
||||
public virtual void DoReduction() { }
|
||||
public virtual void DoStart() { }
|
||||
public virtual void DoSynchronization() { }
|
||||
private string PageName { get; set; }
|
||||
|
||||
|
||||
|
||||
@ -87,12 +87,13 @@
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="120"/>
|
||||
<RowDefinition Height="120"/>
|
||||
<RowDefinition/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="2.5*"/>
|
||||
<ColumnDefinition Width="2.0*"/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<GroupBox Header="通信连接" Margin="15">
|
||||
@ -108,7 +109,7 @@
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="IP地址:" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
|
||||
<TextBox Grid.Column="1" Width="150" VerticalAlignment="Center" FontSize="16" Text="{Binding SocketInfo.IP }"/>
|
||||
<TextBox Grid.Column="1" Width="150" VerticalAlignment="Center" FontSize="16" Text="{Binding SocketInfo.IP }" Foreground="#CD9B9B"/>
|
||||
</Grid>
|
||||
<Grid Grid.Column="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
@ -116,7 +117,7 @@
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="端口号:" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
|
||||
<TextBox Grid.Column="1" Width="150" VerticalAlignment="Center" FontSize="16" Text="{Binding SocketInfo.Port}" Margin="10,0" />
|
||||
<TextBox Grid.Column="1" Width="150" VerticalAlignment="Center" FontSize="16" Text="{Binding SocketInfo.Port}" Margin="10,0" Foreground="#CD9B9B" />
|
||||
</Grid>
|
||||
<Button Grid.Column="2" Content="{Binding SocketInfo.ConnectionMessage }" Style="{StaticResource NormalButtonStyle}" Width="120" Height="30" Command="{Binding ConnectionCommand}"/>
|
||||
</Grid>
|
||||
@ -126,13 +127,57 @@
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Button Content="一键还原" Style="{StaticResource NormalButtonStyle}" Width="100" Height="30" Command="{Binding ReductionCommand}"/>
|
||||
<Button Grid.Column="1" Content="一键启动" Style="{StaticResource NormalButtonStyle}" Width="100" Height="30" Command="{Binding StartCommand}"/>
|
||||
<Button Content="一键还原" Style="{StaticResource NormalButtonStyle}" Width="80" Height="30" Command="{Binding ReductionCommand}"/>
|
||||
<Button Grid.Column="1" Content="一键启动" Style="{StaticResource NormalButtonStyle}" Width="80" Height="30" Command="{Binding StartCommand}"/>
|
||||
<Button Grid.Column="2" Content="时间同步" Style="{StaticResource NormalButtonStyle}" Width="80" Height="30" Command="{Binding SynchronizationCommand}"/>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
</Grid>
|
||||
<GroupBox Header="电源开关控制" Margin="15,1,15,5" Grid.Row="1">
|
||||
|
||||
<GroupBox Header="当前运行时序" Margin="15,1,15,10" Grid.Row="1">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="35"/>
|
||||
<RowDefinition/>
|
||||
<RowDefinition/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid Grid.Row="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="时序序号:" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
|
||||
<TextBlock Grid.Column="1" Text="{Binding CurrentSequentiual.Number}" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="17" Foreground="#CD9B9B"/>
|
||||
</Grid>
|
||||
<Grid Grid.Column="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="时序运行状态:" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
|
||||
<TextBlock Grid.Column="1" Text="{Binding CurrentSequentiual.Status}" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="17" Foreground="#CD9B9B" />
|
||||
</Grid>
|
||||
</Grid>
|
||||
<Grid Grid.Row="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="运行的设备编号:" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="17" Margin="47,0,0,0"/>
|
||||
<TextBlock Grid.Column="1" Text="{Binding CurrentSequentiual.DeviceNumber}" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="17" Foreground="#CD9B9B" Margin="-246,0,0,0"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Header="电源开关控制" Margin="15,1,15,5" Grid.Row="2">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="35"/>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user