57 lines
2.1 KiB
C#
Raw Normal View History

2025-04-24 19:31:28 +08:00
using JiShe.CollectBus.Common.Extensions;
using JiShe.CollectBus.Protocol.Contracts.Interfaces;
using Microsoft.Extensions.Logging;
namespace JiShe.CollectBus.Protocol.AnalysisData.Appendix
{
/// <summary>
/// 附录A.13数据格式
/// </summary>
class Appendix_A13 : IAnalysisStrategy<List<string>, decimal>
{
private readonly ILogger<Appendix_A13> _logger;
public Appendix_A13(ILogger<Appendix_A13> logger)
{
_logger = logger;
}
public async Task<decimal> ExecuteAsync(List<string> data)
{
decimal value = 0.00M;
List<decimal[]> decimalDCBList = new List<decimal[]>();
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 });
for (int i = 0; i < data.Count; i++)
{
int CalcType = i > 1 ? 2 : 1;
value += GetByteDCD(data[i].HexTo4BinZero(), CalcType, decimalDCBList[i]);
}
return await Task.FromResult(value);
}
/// <summary>
/// 附录A.13数据格式计算规则方法
/// </summary>
/// <param name="binString">二进制字符串</param>
/// <param name="calcType">//计算类型,1为除法2为乘法</param>
/// <param name="bcd">除数数组</param>
/// <returns></returns>
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;
}
}
}