using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using IStation.Untity; namespace IStation.DataDockingSocket { /// /// 处理数据辅助类 /// internal class HandleDataHelper { /// /// 处理数据 /// public static List HandleData ( InstructionItem item, byte[] bts ) { var list = new List(); //将指令转化为字节数组 var instrution_bts = BitTransfer.FromString(item.Instruction); //请求数据的索引器位置 从0开始 var startIndex = instrution_bts[2] * 16 * 16 + instrution_bts[3]; foreach (var x in item.RuleItems) { var record = new Model.MonitorDataDockingSrcRecord(); record.SignId = x.SignId; record.RecordType = Model.eMonitorType.General; record.SrcTime = null; record.SrcValue = null; var rule = x.Rule == null ? item.DefaultRule : x.Rule.Value; switch (rule) { case eRule.Float: { var btValue = bts.Skip(3 + (x.Index - startIndex - 1) * 2).Take(2 * 2).ToArray(); record.SrcValue = CalcuFloat(btValue).ToString(); } break; case eRule.Short: { var btValue = bts.Skip(3 + (x.Index - startIndex - 1) * 2).Take(2).ToArray(); record.SrcValue = CalcuShort(btValue).ToString(); } break; case eRule.Int: { var btValue = bts.Skip(3 + (x.Index - startIndex - 1) * 2).Take(2 * 2).ToArray(); record.SrcValue = CalcuInt(btValue).ToString(); } break; default: break; } list.Add(record); } return list; } //计算Float private static float CalcuFloat(byte[] bts) { if (bts.Length != 4) return default; var rbts = bts.Reverse().ToArray(); return BitConverter.ToSingle(rbts, 0); } //计算Short private static float CalcuShort(byte[] bts) { if (bts.Length != 2) return default; var rbts = bts.Reverse().ToArray(); return BitConverter.ToInt16(rbts, 0); } //计算Int private static float CalcuInt(byte[] bts) { if (bts.Length != 4) return default; var rbts = bts.Reverse().ToArray(); return BitConverter.ToInt32(rbts, 0); } } }