using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; using System.Threading.Tasks; using IStation.Untity; namespace IStation.DataDockingSocket { /// /// 处理数据辅助类 /// internal class MonitorMsgHelper { /// /// 是否是当前MSG,表示需要处理 /// /// /// public static bool IsNeedHandle(byte[] byteMessage) { if (byteMessage[0] == 0x01 && byteMessage[1] == 0x03 && byteMessage[2] == 0x42) { return true; } else { return false; } } /// /// /// /// internal static IEnumerable GetInstructionQuerys() { var appParas = AppParasHelper.GetInstance(); if (appParas == null) { NtLogHelper.Error("Socket 数据对接中,NT 缺少数据对接配置文件"); return null; } return appParas.InstructionQuerys; } /// /// 获取查询指令(监控值) /// /// public byte[] GetMonitorMsg监控值() { return new byte[] { 0x01, 0x03, 0x00, 0x19, 0x00, 0x21, 0x54, 0x15 }; } /// /// 获取查询指令(状态值):01-03-00-12-00-04-E4-0C /// /// public static byte[] GetMonitorMsg状态值() { return new byte[] { 0x01, 0x03, 0x00, 0x12, 0x00, 0x04, 0xE4, 0x0C }; } /// /// 读取消息(监控值) /// /// public static List HandleReceive(byte[] byteMessage) { var list = new List(); byte start = 0x1A; if (byteMessage == null) { NtLogHelper.Error($"数据解析失败!数据为空"); return null; } if (byteMessage.Count() < 70) { var byteMsg = BitConverter.ToString(byteMessage); NtLogHelper.Error($"数据解析失败!{byteMsg},长度不够, 长度为{byteMessage.Count()},正常长度71"); return null; } try { //显示消息 //string strMessage = BitConverter.ToString(byteMessage, 0, byteMessage.Length); //DisplayMessage(string.Format(" 收到的消息: {0} ", strMessage)); //DisplayMessage(string.Format(" 设备地址: {0} (0x{1})", byteMessage[0], Convert.ToString(byteMessage[0], 16))); //DisplayMessage(string.Format(" 功能码: {0} ", byteMessage[1])); string msg; var now = DateTime.Now; //当前管网压力 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1575030496453332992, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = (ByteMsgHelper.GetInt2Byte(byteMessage, 3, out msg) * 0.001).ToString() }); //变频频率 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1575030605857558528, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = (ByteMsgHelper.GetInt2Byte(byteMessage, 3 + (27 - start) * 2, out msg) * 0.1).ToString() }); //变频电流 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582301190702632960, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = (ByteMsgHelper.GetInt2Byte(byteMessage, 3 + (28 - start) * 2, out msg) * 0.1).ToString() }); //真空当前压力 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1575030435430404096, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = ((ByteMsgHelper.GetInt2Byte(byteMessage, 3 + (29 - start) * 2, out msg) * 0.001)*-1).ToString() }); //A相电压 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582301249292865536, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = Math.Round(ByteMsgHelper.GetDouble1(byteMessage, 3 + (30 - start) * 2, out msg), 2).ToString() }); //B相电压 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582301287175819264, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = Math.Round(ByteMsgHelper.GetDouble1(byteMessage, 3 + (32 - start) * 2, out msg), 2).ToString() }); //C相电压 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582301332780486656, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = Math.Round(ByteMsgHelper.GetDouble1(byteMessage, 3 + (34 - start) * 2, out msg), 2).ToString() }); //A相电流 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582301384118767616, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = Math.Round(ByteMsgHelper.GetDouble1(byteMessage, 3 + (36 - start) * 2, out msg), 3).ToString() }); //B相电流 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582301478792597504, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = Math.Round(ByteMsgHelper.GetDouble1(byteMessage, 3 + (38 - start) * 2, out msg), 3).ToString() }); //C相电流 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582301691439616000, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = Math.Round(ByteMsgHelper.GetDouble1(byteMessage, 3 + (40 - start) * 2, out msg), 3).ToString() }); //变频泵状态 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582303421711650816, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = ByteMsgHelper.GetInt2Byte(byteMessage, 3 + (42 - start) * 2, out msg).ToString() }); //真空泵状态 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582303241251721216, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = ByteMsgHelper.GetInt2Byte(byteMessage, 3 + (43 - start) * 2, out msg).ToString() }); ////电动阀开阀状态 //list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582301332780486656, RecordType = Model.eMonitorType.General, SrcTime = now, // SrcValue = string.Format("########电动阀开阀状态 -----> {0} 数据二进制{1}", GetInt2Byte(byteMessage, 3 + (44 - start) * 2, out msg).ToString() }); ////电动阀关阀状态 //list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582301332780486656, RecordType = Model.eMonitorType.General, SrcTime = now, // SrcValue = string.Format("########电动阀关阀状态 -----> {0} 数据二进制{1}", GetInt2Byte(byteMessage, 3 + (45 - start) * 2, out msg).ToString() }); //电磁阀状态 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582303081771700224, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = ByteMsgHelper.GetInt2Byte(byteMessage, 3 + (46 - start) * 2, out msg).ToString() }); //水位状态 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582303471342850048, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = ByteMsgHelper.GetInt2Byte(byteMessage, 3 + (47 - start) * 2, out msg).ToString() }); //超压状态 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582303606781120512, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = ByteMsgHelper.GetInt2Byte(byteMessage, 3 + (48 - start) * 2, out msg).ToString() }); //报警状态 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582303637420511232, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = ByteMsgHelper.GetInt2Byte(byteMessage, 3 + (49 - start) * 2, out msg).ToString() }); //变频器状态 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1582303671927050240, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = ByteMsgHelper.GetInt2Byte(byteMessage, 3 + (50 - start) * 2, out msg).ToString() }); //当前液位 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1575388386963886080, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = (ByteMsgHelper.GetInt2Byte(byteMessage, 3 + (51 - start) * 2, out msg) * 0.01).ToString() }); //瞬时流量 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1575030320913321984, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = (ByteMsgHelper.GetInt4Byte(byteMessage, 3 + (52 - start) * 2, out msg) * 0.001).ToString() }); //累计流量 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1584475350807744512, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = (ByteMsgHelper.GetInt4Byte(byteMessage, 3 + (54 - start) * 2, out msg) * 1.0).ToString() }); //累计流量有功功率 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1584475756476633088, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = Math.Round(ByteMsgHelper.GetDouble1(byteMessage, 3 + (56 - start) * 2, out msg), 2).ToString() }); } catch (Exception err) { var byteMsg = string.Join(',', byteMessage); NtLogHelper.Error($"数据解析异常!{byteMsg}" + $"错误提示:{err.Message}"); } return list; } /// /// 读取消息(状态值) /// /// private static List ReadMessage状态值(byte[] byteMessage) { var list = new List(); byte start = 0x12; if (byteMessage == null || byteMessage.Length < 8) { return null; } try { //显示消息 //string strMessage = BitConverter.ToString(byteMessage, 0, byteMessage.Length); //DisplayMessage(string.Format(" 收到的消息: {0} ", strMessage)); //DisplayMessage(string.Format(" 设备地址: {0} (0x{1})", byteMessage[0], Convert.ToString(byteMessage[0], 16))); //DisplayMessage(string.Format(" 功能码: {0} ", byteMessage[1])); string msg; var now = DateTime.Now; //液位量程 //list.Add(new Model.MonitorDataDockingReceiveRecord() //{ // SysId = , // RecordType = Model.eMonitorType.General, // SrcTime = now, // SrcValue = (GetInt2Byte(byteMessage, 3 + (19 - start), out msg )* 0.1).ToString() //}); //设定频率 list.Add(new Model.MonitorDataDockingReceiveRecord() { SysId = 1584894751252025344, RecordType = Model.eMonitorType.General, SrcTime = now, SrcValue = (ByteMsgHelper.GetInt2Byte(byteMessage, 3 + (20 - start), out msg) * 0.1).ToString() }); } catch// (Exception err) { return null; } return list; } } }