namespace IStation.DataDockingSocket { /// /// app参数(可配制) /// public class AppParas { /// /// 指令发送间隔 /// public int InstructionSendSpace { get; set; } /// /// 指令项列表 /// public List InstructionItems { get; set; } /// /// 旧传输 /// public Transfer OldTransfer { get; set; } /// /// 支持旧 /// public bool SupportOld { get; set; } /// /// 是否保存原始 /// public bool Src { get; set; } /// /// 是否调试 /// public bool Debug { get; set; } /// /// 验证ModbusRtu 协议 /// public static bool Verify(byte[] bts) { if (bts == null) return default; if (bts.Length < 6) return false; if (bts.Length - 5 != bts[2]) return false; if (!ModBusRtuHelper.CheckReceivedMessage(bts)) return false; return true; } } /// /// 解析规则枚举 /// public enum eRule { /// /// 两个字节为一组,两组表示一个数据,通过得到的四个字节反转后,BitConvert.Single()获取值 /// [Display(Name = "双字解析为浮点数", Description = "双字解析为浮点数 ")] Float = 1, /// /// 两个字节表示一个整数值,通过得到的2个字节反转后,BitConvert.ToInt16()获取值 /// [Display(Name = "单字解析为整数", Description = "单字表示一个整数值")] Short = 2, /// /// 两个字节为一组,两组表示一个数据,通过得到的四个字节反转后,BitConverter.ToInt32();获取值 /// [Display(Name = "双字解析为整数", Description = "双字表示一个整数值")] Int = 3, } /// /// 解析项 /// public class RuleItem { /// /// 标记标识 /// public string SignId { get; set; } /// /// 索引 从1开始 /// public int Index { get; set; } /// /// 系数 /// public double Ratio { get; set; } /// /// 解析规则 /// public eRule Rule { get; set; } } /// /// 指令项 /// public class InstructionItem { /// /// 指令 /// public string Instruction { get; set; } /// /// 指令发送频率 秒 /// public int Frequency { get; set; } /// /// 解析项 /// public List RuleItems { get; set; } /// /// 验证 /// public bool Verify(byte[] bts) { if (bts == null) return default; if (bts.Length < 6) return false; if (bts.Length - 5 != bts[2]) return false; if (string.IsNullOrEmpty(this.Instruction)) return default; var instruction = BitTransfer.FromString(this.Instruction); if (bts[0] == instruction[0]) { if (bts[1] == instruction[1]) { //请求的数据字节数量 var requestDataCount = BitConverter.ToInt16(instruction.Skip(4).Take(2).Reverse().ToArray(), 0) * 2; if (requestDataCount == bts[2]) { return true; } } } return default; } } /// /// 传输 /// public class Transfer { /// /// 注册码 /// public string RegisterCode { get; set; } /// /// 传输Url /// public string TransferUrl { get; set; } } }