using JiShe.CollectBus.Common.Extensions;
using JiShe.CollectBus.Protocol.Interfaces;
using Microsoft.Extensions.Logging;
namespace JiShe.CollectBus.Protocol.AnalysisData.Appendix
{
///
/// 附录A.11数据格式
///
class Appendix_A11 : IAnalysisStrategy, decimal>
{
private readonly ILogger _logger;
public Appendix_A11(ILogger logger)
{
_logger = logger;
}
public async Task ExecuteAsync(List data)
{
decimal value = 0.00M;
List decimalDCBList = new List();
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 > 0 ? 2 : 1;
value += GetByteDCD(data[i].HexTo4BinZero(), CalcType, decimalDCBList[i]);
}
return await Task.FromResult(value);
}
///
/// 附录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;
}
}
}