From 635a578d55c8eac20c34552e20d8a491bf76cef5 Mon Sep 17 00:00:00 2001 From: MoYue <18168119590@163.com> Date: Wed, 19 Jun 2024 18:52:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=B6=E5=BA=8F=E4=B8=8B=E5=8F=91=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dialogs/ModifySequentialViewModel.cs | 175 ---------- .../Pages/SequentialDistributionViewModel.cs | 313 ++++++++++++------ 2 files changed, 213 insertions(+), 275 deletions(-) diff --git a/InSituLaboratory/ViewModels/Pages/Dialogs/ModifySequentialViewModel.cs b/InSituLaboratory/ViewModels/Pages/Dialogs/ModifySequentialViewModel.cs index 312a0e1..0e02b57 100644 --- a/InSituLaboratory/ViewModels/Pages/Dialogs/ModifySequentialViewModel.cs +++ b/InSituLaboratory/ViewModels/Pages/Dialogs/ModifySequentialViewModel.cs @@ -95,94 +95,6 @@ namespace InSituLaboratory.ViewModels.Pages.Dialogs set { _sensorID = value; - - //if (SequenceGroup == null) - //{ - // System.Windows.Forms.MessageBox.Show("配置为空!!! 请选择配置后,必须重新选择传感器设备!!!", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation); - //} - //else - //{ - // ///查询当前设备是否已存在数据库中 - // var select = _sequentialService.Query(m => m.SensorID == value && m.SequenceGroup == SequenceGroup && m.Sequential == kind && m.IsDelete == 0).ToList(); - - // if (select.Count() == 0) - // { - // //通过设备信息查询设备工作时长 - // workTime = _deviceSvice.GetDeviceByDeviceName(_sensorID); - - // this.ErrorList.Clear(); - // if (_sensorID == "质谱仪") - // { - // workInt = Convert.ToInt64(workTime) * 60 * 60; - // if (Convert.ToInt64(WorkTime) > workInt) - // { - // ErrorList.Add("WorkTime", new List { "质谱仪已超出最大工作时长" }); - // } - // else - // { - // ErrorList.Remove("WorkTime"); - // } - // } - // else if (_sensorID == "二氧化碳同位素分析仪") - // { - // workInt = Convert.ToInt64(workTime) * 60 * 60; - // if (Convert.ToInt64(WorkTime) > workInt) - // { - // ErrorList.Add("WorkTime", new List { "二氧化碳同位素分析仪已超出最大工作时长" }); - // } - // else - // { - // ErrorList.Remove("WorkTime"); - // } - // } - // else if (_sensorID == "甲烷同位素分析仪") - // { - // workInt = Convert.ToInt64(workTime) * 60 * 60; - // if (Convert.ToInt64(WorkTime) > workInt) - // { - // ErrorList.Add("WorkTime", new List { "甲烷同位素分析仪已超出最大工作时长" }); - // } - // else - // { - // ErrorList.Remove("WorkTime"); - // } - // } - // else if (_sensorID == "气相色谱仪") - // { - // workInt = Convert.ToInt64(workTime) * 60 * 60; - // if (Convert.ToInt64(WorkTime) > workInt) - // { - // ErrorList.Add("WorkTime", new List { "气相色谱仪已超出最大工作时长" }); - // } - // else - // { - // ErrorList.Remove("WorkTime"); - // } - // } - // else if (_sensorID == "基因测序仪") - // { - // workInt = Convert.ToInt64(workTime) * 60 * 60; - // if (Convert.ToInt64(WorkTime) > workInt) - // { - // ErrorList.Add("WorkTime", new List { "基因测序仪已超出最大工作时长" }); - // } - // else - // { - // ErrorList.Remove("WorkTime"); - // } - // } - // else - // { - // ErrorList.Remove("WorkTime"); - // } - // this.RaiseErrorsChanged("WorkTime"); - // } - // else - // { - // System.Windows.MessageBox.Show(kind + "中 配置" + SequenceGroup + " 已存在" + SensorID, "提示"); - // workTime = _deviceSvice.GetDeviceByDeviceName(_sensorID); - // } - //} } } @@ -198,77 +110,6 @@ namespace InSituLaboratory.ViewModels.Pages.Dialogs set { _workTime = value; - //this.ErrorList.Clear(); - //if (string.IsNullOrEmpty(value)) - //{ - // ErrorList.Add("WorkTime", new List { "工作时长不能为空" }); - //} - //else if (_sensorID == "质谱仪") - //{ - // workInt = Convert.ToInt64(workTime) * 60 * 60; - // if (Convert.ToInt64(value) > workInt) - // { - // ErrorList.Add("WorkTime", new List { "质谱仪已超出最大工作时长" }); - // } - // else - // { - // ErrorList.Remove("WorkTime"); - // } - //} - //else if (_sensorID == "二氧化碳同位素分析仪") - //{ - // workInt = Convert.ToInt64(workTime) * 60 * 60; - // if (Convert.ToInt64(value) > workInt) - // { - // ErrorList.Add("WorkTime", new List { "二氧化碳同位素分析仪已超出最大工作时长" }); - // } - // else - // { - // ErrorList.Remove("WorkTime"); - // } - //} - //else if (_sensorID == "甲烷同位素分析仪") - //{ - // workInt = Convert.ToInt64(workTime) * 60 * 60; - // if (Convert.ToInt64(value) > workInt) - // { - // ErrorList.Add("WorkTime", new List { "甲烷同位素分析仪已超出最大工作时长" }); - // } - // else - // { - // ErrorList.Remove("WorkTime"); - // } - //} - //else if (_sensorID == "气相色谱仪") - //{ - // workInt = Convert.ToInt64(workTime) * 60 * 60; - // if (Convert.ToInt64(value) > workInt) - // { - // ErrorList.Add("WorkTime", new List { "气相色谱仪已超出最大工作时长" }); - // } - // else - // { - // ErrorList.Remove("WorkTime"); - // } - //} - //else if (_sensorID == "基因测序仪") - //{ - // workInt = Convert.ToInt64(workTime) * 60 * 60; - // if (Convert.ToInt64(value) > workInt) - // { - // ErrorList.Add("WorkTime", new List { "基因测序仪已超出最大工作时长" }); - // } - // else - // { - // ErrorList.Remove("WorkTime"); - // } - //} - //else - //{ - // ErrorList.Remove("WorkTime"); - //} - //this.RaiseErrorsChanged("WorkTime"); - } } @@ -284,22 +125,6 @@ namespace InSituLaboratory.ViewModels.Pages.Dialogs set { _durationTime = value; - //ErrorList.Remove("DurationTime"); - //if (SequenceGroup != null) - //{ - // if (SysSequentialdata != null) - // { - // if (_durationTime != SysSequentialdata.DurationTime) - // { - // ErrorList.Add("DurationTime", new List { "当前配置已存在循环时长:" + SysSequentialdata.DurationTime + "s" + ",无法修改" }); - // } - // else - // { - // ErrorList.Remove("DurationTime"); - // } - // this.RaiseErrorsChanged("DurationTime"); - // } - //} } } diff --git a/InSituLaboratory/ViewModels/Pages/SequentialDistributionViewModel.cs b/InSituLaboratory/ViewModels/Pages/SequentialDistributionViewModel.cs index f346349..24ce710 100644 --- a/InSituLaboratory/ViewModels/Pages/SequentialDistributionViewModel.cs +++ b/InSituLaboratory/ViewModels/Pages/SequentialDistributionViewModel.cs @@ -209,105 +209,7 @@ namespace InSituLaboratory.ViewModels.Pages } else { - DateTime startTime = (DateTime)sequentStatusModel.SequentialStartTime1; - DateTime endTime = (DateTime)sequentStatusModel.SequentialEndTime1; - - ulong senddate; - ulong year; - ulong month; - ulong day; - ulong hour; - ulong min; - ulong sec; - - ulong sendenddate; - ulong endyear; - ulong endmonth; - ulong endday; - ulong endhour; - ulong endmin; - ulong endsec; - - //定义消息体数组 - byte[] byteaq = new byte[26]; - - year = (ulong)startTime.Year * 10000000000UL; - month = (ulong)startTime.Month * 100000000UL; - day = (ulong)startTime.Day * 1000000UL; - hour = (ulong)startTime.Hour * 10000UL; - min = (ulong)startTime.Minute * 100UL; - sec = (ulong)startTime.Second; - senddate = year + month + day + hour + min + sec; - - endyear = (ulong)endTime.Year * 10000000000UL; - endmonth = (ulong)endTime.Month * 100000000UL; - endday = (ulong)endTime.Day * 1000000UL; - endhour = (ulong)endTime.Hour * 10000UL; - endmin = (ulong)endTime.Minute * 100UL; - endsec = (ulong)endTime.Second; - sendenddate = endyear + endmonth + endday + endhour + endmin + endsec; - - //消息头 - byteaq[0] = 0x91; - byteaq[1] = 0x00; - byteaq[2] = 0x10; - byteaq[3] = 0x01; - byteaq[4] = 0x00; - byteaq[5] = 0x00; - byteaq[6] = 0x00; - byteaq[7] = 0x00; - - //时序组号 - byteaq[8] = 0x01; - - //操作类型 - byteaq[9] = 0x01; - - //开始时间 - byteaq[10] = (byte)((senddate >> 56) & 0xff); - byteaq[11] = (byte)((senddate >> 48) & 0xff); - byteaq[12] = (byte)((senddate >> 40) & 0xff); - byteaq[13] = (byte)((senddate >> 32) & 0xff); - byteaq[14] = (byte)((senddate >> 24) & 0xff); - byteaq[15] = (byte)((senddate >> 16) & 0xff); - byteaq[16] = (byte)((senddate >> 8) & 0xff); - byteaq[17] = (byte)(senddate & 0xff); - - //结束时间 - byteaq[18] = (byte)((sendenddate >> 56) & 0xff); - byteaq[19] = (byte)((sendenddate >> 48) & 0xff); - byteaq[20] = (byte)((sendenddate >> 40) & 0xff); - byteaq[21] = (byte)((sendenddate >> 32) & 0xff); - byteaq[22] = (byte)((sendenddate >> 24) & 0xff); - byteaq[23] = (byte)((sendenddate >> 16) & 0xff); - byteaq[24] = (byte)((sendenddate >> 8) & 0xff); - byteaq[25] = (byte)(sendenddate & 0xff); - - var datalist = _sysSequentialService.Query(m => m.StartTime == startTime && m.EndTime == endTime && m.IsDelete == 0 && m.Sequential == "时序1").OrderBy(n => n.SequenceGroup).ThenBy(s => s.CreateTime).ToArray(); - - //定义传感器个数 - int num = 0; - for (int i = 0; i < datalist.Length; i++) - { - if (datalist[1].SequenceGroup == datalist[i + 1].SequenceGroup) - { - - } - - - - - - } - - - - - - - - - + List buffer = encode((DateTime)sequentStatusModel.SequentialStartTime1, (DateTime)sequentStatusModel.SequentialEndTime1, 0x01, "时序1"); } } @@ -1209,7 +1111,7 @@ namespace InSituLaboratory.ViewModels.Pages /// /// 时序号 /// 操作类型 - public void dosend(byte x1,byte x2) + public void dosend(byte x1, byte x2) { //消息体 byte[] byteaq = new byte[] { 0x91, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, x1, x2 }; @@ -1219,5 +1121,216 @@ namespace InSituLaboratory.ViewModels.Pages byte[] bytea = tools.ConvertHexStringToBytes(list); RelayViewModel.clientModel.SendData(bytea); } + + + /// + /// 时序下发封装数据域 + /// + /// 时序开始时间 + /// 时序结束时间 + /// 时序组号 + /// 时序类型 + /// + public List encode(DateTime StartTime, DateTime EndTime, byte GroupNumber, string kind) + { + DateTime startTime = StartTime; + DateTime endTime = EndTime; + + ulong senddate; + ulong year; + ulong month; + ulong day; + ulong hour; + ulong min; + ulong sec; + + ulong sendenddate; + ulong endyear; + ulong endmonth; + ulong endday; + ulong endhour; + ulong endmin; + ulong endsec; + + //定义消息体数组 + List byteaq = new List(); + + year = (ulong)startTime.Year * 10000000000UL; + month = (ulong)startTime.Month * 100000000UL; + day = (ulong)startTime.Day * 1000000UL; + hour = (ulong)startTime.Hour * 10000UL; + min = (ulong)startTime.Minute * 100UL; + sec = (ulong)startTime.Second; + senddate = year + month + day + hour + min + sec; + + endyear = (ulong)endTime.Year * 10000000000UL; + endmonth = (ulong)endTime.Month * 100000000UL; + endday = (ulong)endTime.Day * 1000000UL; + endhour = (ulong)endTime.Hour * 10000UL; + endmin = (ulong)endTime.Minute * 100UL; + endsec = (ulong)endTime.Second; + sendenddate = endyear + endmonth + endday + endhour + endmin + endsec; + + //消息头 + byteaq.Add(0x91); + byteaq.Add(0x00); + byteaq.Add(0x10); + byteaq.Add(0x01); + byteaq.Add(0x00); + byteaq.Add(0x00); + byteaq.Add(0x00); + byteaq.Add(0x00); + + + //时序组号 + byteaq.Add(GroupNumber); + + //操作类型 + byteaq.Add(0x01); + + //开始时间 + byteaq.Add((byte)((senddate >> 56) & 0xff)); + byteaq.Add((byte)((senddate >> 48) & 0xff)); + byteaq.Add((byte)((senddate >> 40) & 0xff)); + byteaq.Add((byte)((senddate >> 32) & 0xff)); + byteaq.Add((byte)((senddate >> 24) & 0xff)); + byteaq.Add((byte)((senddate >> 16) & 0xff)); + byteaq.Add((byte)((senddate >> 8) & 0xff)); + byteaq.Add((byte)(senddate & 0xff)); + + + //结束时间 + byteaq.Add((byte)((sendenddate >> 56) & 0xff)); + byteaq.Add((byte)((sendenddate >> 48) & 0xff)); + byteaq.Add((byte)((sendenddate >> 40) & 0xff)); + byteaq.Add((byte)((sendenddate >> 32) & 0xff)); + byteaq.Add((byte)((sendenddate >> 24) & 0xff)); + byteaq.Add((byte)((sendenddate >> 16) & 0xff)); + byteaq.Add((byte)((sendenddate >> 8) & 0xff)); + byteaq.Add((byte)(sendenddate & 0xff)); + + + var datalist = _sysSequentialService.Query(m => m.StartTime == startTime && m.EndTime == endTime && m.IsDelete == 0 && m.Sequential == kind).OrderBy(n => n.SequenceGroup).ThenBy(s => s.CreateTime).ToArray(); + + //单体循环数量 + List b = new List(); + + //这个m 在每次SequenceGroup变化的时候记录一下 变化的节点 + //拿下一次的节点i - 上一次的节点m 就是当前的长度,同时把新的节点赋到m上 + //最后只要把总长度减去最后一个节点的长度,就是最后一个的长度 + int m = 0; + //先遍历 datalist 确定 SequenceGroup的种类和数量 + for (int i = 0; i < datalist.Length; i++) + { + if (i != 0 && datalist.Length >= 1) + { + if (datalist[i].SequenceGroup != datalist[i - 1].SequenceGroup) + { + b.Add(i - m); + m = i; + } + if (i == datalist.Length - 1) + { + b.Add(datalist.Length - m); + m = 0; + } + } + } + //b = new List() { 4, 3, 4, 6 }; + //3 3 2 1 + for (int i = 0; i < b.Count; i++) + { + //添加循环传感器的个数 + byteaq.Add((byte)b[i]); + + //定义一个循环间隔时长 + int d = 0; + //添加传感器识别码和工作时长 + for (int j = 0; j < b[i]; j++) + { + //去b[i - 1]之前的和 + int n = 0; + for (int k = 0; k < i; k++) + { + n += b[k]; + } + //获取传感器的ID 用字典获取 datalist[i == 0 ? j:n + j].SensorID + switch (datalist[i == 0 ? j : n + j].SensorID) + { + case "工控机": + byteaq.Add(0x00); + break; + case "色质联用": + byteaq.Add(0x01); + break; + case "备用串口1": + byteaq.Add(0x02); + break; + case "备用串口2": + byteaq.Add(0x03); + break; + case "光通讯机": + byteaq.Add(0x04); + break; + case "ADCP": + byteaq.Add(0x05); + break; + case "CTD": + byteaq.Add(0x06); + break; + case "气相色谱仪": + byteaq.Add(0x07); + break; + case "甲烷传感器": + byteaq.Add(0x08); + break; + case "二氧化碳同位素分析仪": + byteaq.Add(0x09); + break; + case "备用网口设备": + byteaq.Add(0x0a); + break; + case "ICL": + byteaq.Add(0x0b); + break; + case "显微拉曼分析仪": + byteaq.Add(0x0c); + break; + case "质谱仪": + byteaq.Add(0x0d); + break; + case "声学定位": + byteaq.Add(0x0e); + break; + case "摄像1": + byteaq.Add(0x0f); + break; + case "摄像2": + byteaq.Add(0x10); + break; + case "电交换机2": + byteaq.Add(0x11); + break; + default: + break; + } + + //定义接收工作时长 + int w = Convert.ToInt32(datalist[i == 0 ? j : n + j].WorkTime); + byteaq.Add((byte)(w & 0xFF)); + byteaq.Add((byte)((w & 0xFF00) >> 8)); + byteaq.Add((byte)((w & 0xFF0000) >> 16)); + byteaq.Add((byte)((w >> 24) & 0xFF)); + + //接收循环间隔时长 + d = Convert.ToInt32(datalist[i == 0 ? j : n + j].DurationTime); + } + byteaq.Add((byte)(d & 0xFF)); + byteaq.Add((byte)((d & 0xFF00) >> 8)); + byteaq.Add((byte)((d & 0xFF0000) >> 16)); + byteaq.Add((byte)((d >> 24) & 0xFF)); + } + return byteaq; + } } }