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 = DateTime.Now; record.SrcValue = null; var skip = 3 + (x.Index - startIndex - 1) * 2; switch (x.Rule) { case eRule.Float: { var btValue = bts.Skip(skip).Take(2 * 2).ToArray(); var value = CalcuFloat(btValue) * x.Ratio; record.SrcValue = value.ToString(); } break; case eRule.Short: { var btValue = bts.Skip(skip).Take(2).ToArray(); var value = CalcuShort(btValue) * x.Ratio; record.SrcValue = value.ToString(); } break; case eRule.Int: { var btValue = bts.Skip(skip).Take(2 * 2).ToArray(); var value = CalcuInt(btValue) * x.Ratio; record.SrcValue = value.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 short CalcuShort(byte[] bts) { if (bts.Length != 2) return default; var rbts = bts.Reverse().ToArray(); return BitConverter.ToInt16(rbts, 0); } //计算Int private static int CalcuInt(byte[] bts) { if (bts.Length != 4) return default; var rbts = bts.Reverse().ToArray(); return BitConverter.ToInt32(rbts, 0); } } }