using JiShe.CollectBus.Common.Extensions; using JiShe.CollectBus.Protocol.Interfaces; using Microsoft.Extensions.Logging; namespace JiShe.CollectBus.Protocol.T37612012.Appendix { /// /// 附录A.14数据格式 /// class Appendix_A14 : IAnalysisStrategy> { private readonly ILogger _logger; public Appendix_A14(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(List data, Action? result = null) { decimal value = 0.0000M; List decimalDCBList = new List(); decimalDCBList.Add(new decimal[2] { 1000M, 10000M }); decimalDCBList.Add(new decimal[2] { 10M, 100M }); decimalDCBList.Add(new decimal[2] { 10M, 1M }); decimalDCBList.Add(new decimal[2] { 1000M, 100M }); decimalDCBList.Add(new decimal[2] { 100000M, 10000M }); for (int i = 0; i < data.Count; i++) { int CalcType = i > 1 ? 2 : 1; value += GetByteDCD(data[i].HexTo4BinZero(), CalcType, decimalDCBList[i]); } result?.Invoke(value); return await Task.FromResult(true); } /// /// 附录A.14数据格式计算规则方法 /// /// 二进制字符串 /// //计算类型,1为除法,2为乘法 /// 除数数组 /// private decimal GetByteDCD(string binString, int calcType, decimal[] bcd) { decimal result = 0.00000M; switch (calcType) { case 1: result = (binString.Substring(0, 4).BinToDec() / bcd[0]) + (binString.Substring(4, 4).BinToDec() / bcd[1]); break; case 2: result = (binString.Substring(0, 4).BinToDec() * bcd[0]) + (binString.Substring(4, 4).BinToDec() * bcd[1]); break; } return result; } } }