20230201_145_upperpc/InSituLaboratory/ViewModels/Pages/RelayViewModel.cs
2024-06-19 10:19:37 +08:00

1120 lines
46 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Azure;
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;
using InSituLaboratory.Service;
using InSituLaboratory.Service.Sensor;
using Prism.Commands;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics.Eventing.Reader;
using System.Linq;
using System.Text;
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
{
/// <summary>
/// 局部电源开关控制
/// </summary>
public class RelayViewModel : ViewModelBase
{
#region Entity
public ClientModel clientModel { get; set; } = new ClientModel();//Socket 通信类
public SysSensorModel sysSensorModel { get; set; } = new SysSensorModel(); // 传感器表
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 static SocketInfo SocketInfo { get; set; } = new SocketInfo()
{
IP = tools.GetAppSetting("IP"),
Port = Convert.ToInt32(tools.GetAppSetting("Port")),
ConnectionMessage = "连接"
};
#endregion
public DelegateCommand<object> RelayCommand { get; set; }
ILogService _logService;
ISensorService _sensorService;
public RelayViewModel(IRegionManager regionManager, ILogService logService, ISensorService sensorService) : base(regionManager)
{
this.PageTitle = "通信与电源控制";
_logService = logService;
_sensorService = sensorService;
PaginationModel.NavCommand = new DelegateCommand<object>(index =>
{
PaginationModel.PageIndex = int.Parse(index.ToString());
this.Refresh();
});
RelayCommand = new DelegateCommand<object>(DoRelay);
this.Refresh();
}
/// <summary>
/// 数据刷新
/// </summary>
public override void Refresh()
{
loglist.Clear();
//获取日志记录数据
var Loglist = _logService.GetLogData(SearchKey, PaginationModel.PageSize, PaginationModel.PageIndex, out int totalCount);
//获取传感器电源开关数据
var SysSensorlist = _sensorService.GeSysSensor();
//日志列表清单数据
int index = 0;
foreach (var item in Loglist)
{
index++;
loglist.Add(new LogModel
{
DataIdNum = index + (PaginationModel.PageIndex - 1) * PaginationModel.PageSize,
CreateTime = item.CreateTime,
Remark = item.Remark
});
}
//传感器电源开关数据
if (SysSensorlist.Count() != 0)
{
var data = _sensorService.GeSysSensor().FirstOrDefault();
sysSensorModel.Id = sysSensorModels.Id = data.Id;
sysSensorModel.CreateTime = sysSensorModels.CreateTime = data.CreateTime;
sysSensorModel.InComputer = sysSensorModels.InComputer = data.InComputer;
sysSensorModel.CMSpectrometry = sysSensorModels.CMSpectrometry = data.CMSpectrometry;
sysSensorModel.Light1 = sysSensorModels.Light1 = data.Light1;
sysSensorModel.Light2 = sysSensorModels.Light2 = data.Light2;
sysSensorModel.LightMachine = sysSensorModels.LightMachine = data.LightMachine;
sysSensorModel.ADCP = sysSensorModels.ADCP = data.ADCP;
sysSensorModel.CTD = sysSensorModels.CTD = data.CTD;
sysSensorModel.SP = sysSensorModels.SP = data.SP;
sysSensorModel.CH4 = sysSensorModels.CH4 = data.CH4;
sysSensorModel.CO2 = sysSensorModels.CO2 = data.CO2;
sysSensorModel.NetEquipment = sysSensorModels.NetEquipment = data.NetEquipment;
sysSensorModel.SerialPortServer = sysSensorModels.SerialPortServer = data.SerialPortServer;
sysSensorModel.RamanAnalyzer = sysSensorModels.RamanAnalyzer = data.RamanAnalyzer;
sysSensorModel.ZP = sysSensorModels.ZP = data.ZP;
sysSensorModel.AcousticPositioning = sysSensorModels.AcousticPositioning = data.AcousticPositioning;
sysSensorModel.Camera1 = sysSensorModels.Camera1 = data.Camera1;
sysSensorModel.Camera2 = sysSensorModels.Camera2 = data.Camera2;
sysSensorModel.ElectricSwitch2 = sysSensorModels.ElectricSwitch2 = data.ElectricSwitch2;
}
// 刷新分页组件的页码
PaginationModel.FillPageNumbers(totalCount);
}
/// <summary>
/// 通信连接
/// </summary>
/// <param name="o"></param>
public override void DoConnection(object o)
{
if (clientModel.IsConnected)
{
clientModel.DisConnect();
SocketInfo.ConnectionMessage = "连接";
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端连接已关闭";
_logService.Insert<LogModel>(logModel);
this.Refresh();
}
else
{
if (clientModel.DoConnect(SocketInfo))
{
//更新下App.config中的配置信息
tools.UpdateAppSettings("IP", SocketInfo.IP);
tools.UpdateAppSettings("Port", SocketInfo.Port.ToString());
SocketInfo.ConnectionMessage = "断开";
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "连接服务端成功";
_logService.Insert<LogModel>(logModel);
this.Refresh();
}
else
{
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "连接服务端失败";
_logService.Insert<LogModel>(logModel);
this.Refresh();
}
}
}
/// <summary>
/// 电源开关控制
/// </summary>
/// <param name="o"></param>
public void DoRelay(object o)
{
string[] msg = o.ToString().Split(',');
int switchNum = msg[1].Equals("True") ? 1 : 0;
string MessageContent = "";
switch (msg[0])
{
//工控机
case "InComputer":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.InComputer = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "工控机已" + sysSensorModel.InComputer;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.InComputer == "开")
{
Control(0x00, 0x01);
}
else
{
Control(0x00, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//色质联用
case "CMSpectrometry":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.CMSpectrometry = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "色质联用已" + sysSensorModel.CMSpectrometry;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.CMSpectrometry == "开")
{
Control(0x01, 0x01);
}
else
{
Control(0x01, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//备用串口1
case "Light1":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.Light1 = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "备用串口1已" + sysSensorModel.Light1;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.Light1 == "开")
{
Control(0x02, 0x01);
}
else
{
Control(0x02, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//备用串口2
case "Light2":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.Light2 = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "备用串口2已" + sysSensorModel.Light2;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.Light2 == "开")
{
Control(0x03, 0x01);
}
else
{
Control(0x03, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
// _logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//光通讯机
case "LightMachine":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.LightMachine = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "光通讯机已" + sysSensorModel.LightMachine;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.LightMachine == "开")
{
Control(0x04, 0x01);
}
else
{
Control(0x04, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//ADCP
case "ADCP":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.ADCP = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "ADCP已" + sysSensorModel.ADCP;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.ADCP == "开")
{
Control(0x05, 0x01);
}
else
{
Control(0x05, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//CTD
case "CTD":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.CTD = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "CTD已" + sysSensorModel.CTD;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.CTD == "开")
{
Control(0x06, 0x01);
}
else
{
Control(0x06, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//气相色谱仪
case "SP":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.SP = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "气相色谱仪已" + sysSensorModel.SP;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.SP == "开")
{
Control(0x07, 0x01);
}
else
{
Control(0x07, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//甲烷传感器
case "CH4":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.CH4 = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "甲烷传感器已" + sysSensorModel.CH4;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.CH4 == "开")
{
Control(0x08, 0x01);
}
else
{
Control(0x08, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//二氧化碳同位素分析仪
case "CO2":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.CO2 = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "二氧化碳同位素分析仪已" + sysSensorModel.CO2;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.CO2 == "开")
{
Control(0x09, 0x01);
}
else
{
Control(0x09, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//备用网口设备
case "NetEquipment":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.NetEquipment = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "备用网口设备已" + sysSensorModel.NetEquipment;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.NetEquipment == "开")
{
Control(0x0a, 0x01);
}
else
{
Control(0x0a, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//ICL
case "SerialPortServer":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.SerialPortServer = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "ICL已" + sysSensorModel.SerialPortServer;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.SerialPortServer == "开")
{
Control(0x0b, 0x01);
}
else
{
Control(0x0b, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//显微拉曼分析仪
case "RamanAnalyzer":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.RamanAnalyzer = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "显微拉曼分析仪已" + sysSensorModel.RamanAnalyzer;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.RamanAnalyzer == "开")
{
Control(0x0c, 0x01);
}
else
{
Control(0x0c, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//质谱仪
case "ZP":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.ZP = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "质谱仪已" + sysSensorModel.ZP;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.ZP == "开")
{
Control(0x0d, 0x01);
}
else
{
Control(0x0d, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
// 声学定位
case "AcousticPositioning":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.AcousticPositioning = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "声学定位已" + sysSensorModel.AcousticPositioning;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.AcousticPositioning == "开")
{
Control(0x0e, 0x01);
}
else
{
Control(0x0e, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//摄像1
case "Camera1":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.Camera1 = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "摄像1已" + sysSensorModel.Camera1;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.Camera1 == "开")
{
Control(0x0f, 0x01);
}
else
{
Control(0x0f, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
// _logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//摄像2
case "Camera2":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.Camera2 = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "摄像2已" + sysSensorModel.Camera2;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.Camera2 == "开")
{
Control(0x10, 0x01);
}
else
{
Control(0x10, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
// _logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
//电交换机2
case "ElectricSwitch2":
if (SocketInfo.ConnectionMessage == "断开")
{
sysSensorModel.Id = sysSensorModels.Id;
sysSensorModel.ElectricSwitch2 = msg[1].Equals("True") ? "开" : "关";
sysSensorModel.CreateTime = DateTime.Now;
_sensorService.Update(sysSensorModel);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "电交换机2已" + sysSensorModel.ElectricSwitch2;
_logService.Insert<LogModel>(logModel);
if (sysSensorModel.ElectricSwitch2 == "开")
{
Control(0x11, 0x01);
}
else
{
Control(0x11, 0x00);
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
//_logService.Insert<LogModel>(logModel);
}
this.Refresh();
break;
default:
break;
}
}
/// <summary>
/// 远程控制
/// </summary>
/// <param name="kind"> 传感器识别码</param>
/// <param name="operation">操作</param>
private void Control(byte kind, byte operation)
{
//标志位
byte head = 0x7f;
//crc
byte nr_crc = 0;
//消息体
byte[] byteaq = new byte[] { 0x92, 0x01, 0x10, 0x01, 0x00, 0x00, 0x00, 0x02, kind, operation };
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);
}
/// <summary>
/// 一键还原
/// </summary>
public override void DoReduction()
{
if (SocketInfo.ConnectionMessage == "断开")
{
List<string> data = new List<string>();
//从数据库中取出集合
var SysSensorlist = _sensorService.GeSysSensor();
foreach (var item in SysSensorlist)
{
#region data集合中
if (item.InComputer == "开")
{
data.Add("工控机");
}
if (item.CMSpectrometry == "开")
{
data.Add("色质联用");
}
if (item.Light1 == "开")
{
data.Add("备用串口1");
}
if (item.Light2 == "开")
{
data.Add("备用串口2");
}
if (item.LightMachine == "开")
{
data.Add("光通讯机");
}
if (item.ADCP == "开")
{
data.Add("ADCP");
}
if (item.CTD == "开")
{
data.Add("CTD");
}
if (item.SP == "开")
{
data.Add("SP");
}
if (item.CH4 == "开")
{
data.Add("CH4");
}
if (item.CO2 == "开")
{
data.Add("CO2");
}
if (item.NetEquipment == "开")
{
data.Add("备用网口设备");
}
if (item.SerialPortServer == "开")
{
data.Add("ICL");
}
if (item.RamanAnalyzer == "开")
{
data.Add("显微拉曼分析仪");
}
if (item.ZP == "开")
{
data.Add("质谱仪");
}
if (item.AcousticPositioning == "开")
{
data.Add("声学定位");
}
if (item.Camera1 == "开")
{
data.Add("摄像1");
}
if (item.Camera2 == "开")
{
data.Add("摄像2");
}
if (item.ElectricSwitch2 == "开")
{
data.Add("电交换机2");
}
#endregion
}
string opendata = "";
for (int i = 0; i < data.Count(); i++)
{
opendata += data[i];
opendata = opendata + "、";
}
if (System.Windows.Forms.MessageBox.Show("当前处于打开状态的设备有" + opendata + "确认需要一键还原吗?", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
if (System.Windows.Forms.MessageBox.Show("再次确定需要一键还原吗?", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
//消息体
byte[] byteaq = new byte[] { 0x93, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00 };
List<byte> buffer = Escape(byteaq);
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();
}
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
}
}
/// <summary>
/// 一键启动
/// </summary>
public override void DoStart()
{
if (SocketInfo.ConnectionMessage == "断开")
{
if (System.Windows.Forms.MessageBox.Show("确定一键启动吗?", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
//消息体
byte[] byteaq = new byte[] { 0x93, 0x01, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00 };
List<byte> buffer = Escape(byteaq);
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();
}
}
else
{
System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
logModel = new LogModel();
logModel.CreateTime = DateTime.Now;
logModel.Remark = "服务端未连接";
}
}
/// <summary>
/// 时间同步
/// </summary>
public override void DoSynchronization()
{
ulong senddate;
ulong year;
ulong month;
ulong day;
ulong hour;
ulong min;
ulong sec;
//定义消息体数组
byte[] byteaq = new byte[16];
DateTime dateTime = DateTime.Now;
year = (ulong)dateTime.Year * 10000000000UL;
month = (ulong)dateTime.Month * 100000000UL;
day = (ulong)dateTime.Day * 1000000UL;
hour = (ulong)dateTime.Hour * 10000UL;
min = (ulong)dateTime.Minute * 100UL;
sec = (ulong)dateTime.Second;
senddate = year + month + day + hour + min + sec;
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);
List<byte> buffer = Escape(byteaq);
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();
}
/// <summary>
/// 转义封装
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public List<byte> Escape(byte[] bytes)
{
//标志位
byte head = 0x7f;
//crc
byte nr_crc = 0;
nr_crc = tools.CRC(bytes.ToArray(), 0, bytes.Length);
///转义
int j = 0;
List<byte> tBuffer = bytes.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);
return buffer;
}
}
}