diff --git a/InSituLaboratory.Entities/DataParsingModelSqlSugar.cs b/InSituLaboratory.Entities/DataParsingModelSqlSugar.cs new file mode 100644 index 0000000..a4358fa --- /dev/null +++ b/InSituLaboratory.Entities/DataParsingModelSqlSugar.cs @@ -0,0 +1,49 @@ +using LiveCharts.Wpf; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace InSituLaboratory.Entities +{ + /// + /// 数据解析通用字段 + /// + [SugarTable("DataParsingModel")] + public class DataParsingModelSqlSugar + { + /// + /// 主键 + /// + [SugarColumn(ColumnName = "Id", IsIdentity = true, IsPrimaryKey = true)] + public int Id { get; set; } + + /// + /// 创建时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime CreateTime { get; set; } + + /// + /// 应答流水号 + /// + [SugarColumn(IsNullable = true)] + public string? ResponseNum { get; set; } + + /// + /// 应答ID + /// + [SugarColumn(IsNullable = true)] + public string? ResponseID { get; set; } + + /// + /// 应答结果 + /// + [SugarColumn(IsNullable = true)] + public string? ResponseResult { get; set; } + + } +} diff --git a/InSituLaboratory.Entities/InSituLaboratory.Entities.csproj b/InSituLaboratory.Entities/InSituLaboratory.Entities.csproj index cbdc03e..5ef6c26 100644 --- a/InSituLaboratory.Entities/InSituLaboratory.Entities.csproj +++ b/InSituLaboratory.Entities/InSituLaboratory.Entities.csproj @@ -9,6 +9,7 @@ + diff --git a/InSituLaboratory.Entities/tools.cs b/InSituLaboratory.Entities/tools.cs index 21c1583..ccf17a0 100644 --- a/InSituLaboratory.Entities/tools.cs +++ b/InSituLaboratory.Entities/tools.cs @@ -331,6 +331,51 @@ namespace InSituLaboratory.Entities } #endregion + #region 字节数组转16进制字符串 + /// + /// 字节数组转16进制字符串 + /// + /// + /// + public static string byteToHexStr(byte[] bytes) + { + string returnStr = ""; + if (bytes != null) + { + for (int i = 0; i < bytes.Length; i++) + { + returnStr += bytes[i].ToString("X2"); + } + } + return returnStr; + } + #endregion + + #region 16进制原码字符串转字节数组 + /// + /// 16进制原码字符串转字节数组 + /// + /// "AABBCC"或"AA BB CC"格式的字符串 + /// + public static byte[] ConvertHexStringToBytes(string hexString) + { + hexString = hexString.Replace(" ", ""); + if (hexString.Length % 2 != 0) + { + throw new ArgumentException("参数长度不正确"); + } + + byte[] returnBytes = new byte[hexString.Length / 2]; + for (int i = 0; i < returnBytes.Length; i++) + { + returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); + } + + return returnBytes; + } + #endregion + + #region 根据1/0 转换 True/False public static List O_C(string o_c) { diff --git a/InSituLaboratory/App.config b/InSituLaboratory/App.config index 5b7b499..43ef31c 100644 --- a/InSituLaboratory/App.config +++ b/InSituLaboratory/App.config @@ -5,9 +5,7 @@ - - - + diff --git a/InSituLaboratory/Common/DataParsing.cs b/InSituLaboratory/Common/DataParsing.cs index 99a6405..face188 100644 --- a/InSituLaboratory/Common/DataParsing.cs +++ b/InSituLaboratory/Common/DataParsing.cs @@ -1,6 +1,7 @@ using InSituLaboratory.Entities; using InSituLaboratory.Service; using Microsoft.EntityFrameworkCore; +using SqlSugar; using System; using System.Collections.Generic; using System.Linq; @@ -14,10 +15,10 @@ namespace InSituLaboratory.Common /// public class DataParsing { + //连接钥匙 + private static readonly string ConnStr = System.Configuration.ConfigurationManager.ConnectionStrings["db"].ConnectionString; - //public DataParsing() { } - - public DataParsingModel dataParsingModel = new DataParsingModel(); + public DataParsingModelSqlSugar dataParsingModel = new DataParsingModelSqlSugar(); //获取当前程序运行路径 private string Save_Path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"数据记录\"; @@ -26,7 +27,7 @@ namespace InSituLaboratory.Common public static DateTime Record_firstCode = DateTime.Now; //标志位头 - string flag = "7f"; + byte flag = 0x7f; //应答流水号 string ResponseNum = ""; @@ -58,6 +59,14 @@ namespace InSituLaboratory.Common tools.AddLgoToTXT("原始数据报文.txt", Save_Path + System.DateTime.Now.ToString("yyyy_MM_dd") + @"\", System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " ---- " + NR_TXT + "\r\n"); + //SqlSugar配置文件 + ConnectionConfig connectionConfig = new ConnectionConfig() + { + ConnectionString = ConnStr, + IsAutoCloseConnection = true, + DbType = DbType.Sqlite + }; + //转义 int j = 0; for (int i = 0; i < byteList.Count; i++) @@ -89,19 +98,26 @@ namespace InSituLaboratory.Common //定义转义后的list数组 List dataNew = new List(); - string Latter_TXT = ""; for (int i = 0; i < dataTemp.Length; i++) { dataNew.Add(dataTemp[i]); Latter_TXT += dataTemp[i].ToString("X2") + " "; } + + //数据域数组 + List bytes = new List(); + for (int i = 1; i < dataTemp.Length - 2; i++) + { + bytes.Add(dataTemp[i]); + } + tools.AddLgoToTXT("转义后数据报文.txt", Save_Path + System.DateTime.Now.ToString("yyyy_MM_dd") + @"\", System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " ---- " + Latter_TXT + "\r\n"); - nr_crc = tools.CRC(dataNew.ToArray(), 0, dataNew.Count - 1); + nr_crc = tools.CRC(bytes.ToArray(), 0, bytes.Count); ///包头包尾 crc校验 - if (((dataNew[0].ToString("X2") != flag) || (dataNew[byteList.Count - 1].ToString("X2")) != flag) || dataNew[14] != nr_crc) + if (((dataNew[0] != flag) || (dataNew[byteList.Count - 1]) != flag) || dataNew[14] != nr_crc) return; @@ -112,26 +128,37 @@ namespace InSituLaboratory.Common //应答流水号 dataParsingModel.ResponseNum = dataNew[9].ToString("X2") + dataNew[10].ToString("X2"); //应答ID - dataParsingModel.ResponseID = dataNew[11].ToString("X2") + dataNew[12].ToString("X2"); - //结果 - switch (dataNew[13].ToString("X2")) + if (dataNew[11].ToString("X2") + dataNew[12].ToString("X2") == "9100") { - case "0": + dataParsingModel.ResponseID = "9100-时序下发"; + } + else if (dataNew[11].ToString("X2") + dataNew[12].ToString("X2") == "9201") + { + dataParsingModel.ResponseID = "9201-局部控制开关"; + } + //结果 + switch (dataNew[13]) + { + case 0x00: dataParsingModel.ResponseResult = "成功/确认"; break; - case "1": + case 0x01: dataParsingModel.ResponseResult = "失败/不存在"; break; - case "2": + case 0x02: dataParsingModel.ResponseResult = "消息错误"; break; - case "3": + case 0x03: dataParsingModel.ResponseResult = "不支持"; break; default: break; } - //this.Insert(dataParsingModel); + + using (SqlSugarClient db = new SqlSugarClient(connectionConfig)) + { + db.Insertable(dataParsingModel).ExecuteCommand(); + } } } diff --git a/InSituLaboratory/InSituLaboratory.csproj b/InSituLaboratory/InSituLaboratory.csproj index 17f7937..885df68 100644 --- a/InSituLaboratory/InSituLaboratory.csproj +++ b/InSituLaboratory/InSituLaboratory.csproj @@ -27,6 +27,7 @@ + diff --git a/InSituLaboratory/ViewModels/Pages/RelayViewModel.cs b/InSituLaboratory/ViewModels/Pages/RelayViewModel.cs index fc34209..eb04857 100644 --- a/InSituLaboratory/ViewModels/Pages/RelayViewModel.cs +++ b/InSituLaboratory/ViewModels/Pages/RelayViewModel.cs @@ -15,6 +15,9 @@ using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows; +using System.Windows.Forms; +using System.Windows.Markup; using static System.Windows.Forms.VisualStyles.VisualStyleElement; namespace InSituLaboratory.ViewModels.Pages @@ -125,7 +128,7 @@ namespace InSituLaboratory.ViewModels.Pages SocketInfo.ConnectionMessage = "连接"; logModel = new LogModel(); logModel.CreateTime = DateTime.Now; - logModel.Remark = "客户端连接已关闭"; + logModel.Remark = "服务端连接已关闭"; _logService.Insert(logModel); this.Refresh(); } @@ -140,7 +143,7 @@ namespace InSituLaboratory.ViewModels.Pages logModel = new LogModel(); logModel.CreateTime = DateTime.Now; - logModel.Remark = "连接客户端成功"; + logModel.Remark = "连接服务端成功"; _logService.Insert(logModel); this.Refresh(); } @@ -148,7 +151,7 @@ namespace InSituLaboratory.ViewModels.Pages { logModel = new LogModel(); logModel.CreateTime = DateTime.Now; - logModel.Remark = "连接客户端失败"; + logModel.Remark = "连接服务端失败"; _logService.Insert(logModel); this.Refresh(); } @@ -165,86 +168,621 @@ namespace InSituLaboratory.ViewModels.Pages { //工控机 case "InComputer": - 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); + 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); + + 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); + } 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); + if (sysSensorModel.Light1 == "开") + { + 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); + } + 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); + if (sysSensorModel.Light2 == "开") + { + 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); + } + 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); + if (sysSensorModel.LightMachine == "开") + { + 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); + } + 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); + if (sysSensorModel.ADCP == "开") + { + 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); + } + 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); + if (sysSensorModel.CTD == "开") + { + 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); + } + 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); + if (sysSensorModel.SP == "开") + { + 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); + } + 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); + if (sysSensorModel.CH4 == "开") + { + 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); + } + 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); + if (sysSensorModel.CO2 == "开") + { + 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); + } + 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); + if (sysSensorModel.NetEquipment == "开") + { + 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); + } + this.Refresh(); break; //串口服务器 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 = "串口服务器已" + sysSensorModel.SerialPortServer; + _logService.Insert(logModel); + if (sysSensorModel.SerialPortServer == "开") + { + 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); + } + 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); + if (sysSensorModel.RamanAnalyzer == "开") + { + 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); + } + 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); + if (sysSensorModel.ZP == "开") + { + 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); + } + 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); + if (sysSensorModel.AcousticPositioning == "开") + { + 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); + } + 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); + if (sysSensorModel.Camera1 == "开") + { + 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); + } + 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); + if (sysSensorModel.Camera2 == "开") + { + 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); + } + 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); + if (sysSensorModel.ElectricSwitch2 == "开") + { + 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); + } + this.Refresh(); break; default: break; } - - } + + /// + /// 远程控制 + /// + /// 传感器识别码 + /// 操作 + 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 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 buffer = new List(); + 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); + } + } }