2025-04-25 14:23:06 +08:00

58 lines
2.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using JiShe.CollectBus.Common.Extensions;
using JiShe.CollectBus.Protocol.Contracts.Interfaces;
using Microsoft.Extensions.Logging;
namespace JiShe.CollectBus.Protocol.AnalysisData.Appendix
{
/// <summary>
/// 附录A.11数据格式
/// </summary>
class Appendix_A11 : IAnalysisStrategy<List<string>, decimal>
{
private readonly ILogger<Appendix_A11> _logger;
public Appendix_A11(ILogger<Appendix_A11> 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] { 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);
}
/// <summary>
/// 附录A.14数据格式计算规则方法
/// </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;
}
}
}