This commit is contained in:
Dai Mr 2024-11-08 09:35:52 +08:00
parent c39b0b7889
commit 96fd7a1ee9
2 changed files with 49 additions and 18 deletions

View File

@ -1196,6 +1196,18 @@ namespace JiShe.CollectBus.Common.Extensions
return string.Join(" ", strArr); return string.Join(" ", strArr);
} }
/// <summary>
/// 判断数据是否有误
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool IsEE(this string str)
{
if (str == "EE")
return true;
return false;
}
private static string AddHex33(this string strGet) private static string AddHex33(this string strGet)
{ {
string result; string result;

View File

@ -21,6 +21,8 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
public const int tPLen = 6; public const int tPLen = 6;
public const string errorData = "EE";
public abstract Task<ProtocolInfo> GetAsync(); public abstract Task<ProtocolInfo> GetAsync();
@ -291,7 +293,6 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
//当前B相视在功率:Error: 数据不符合BCD码格式 kVA EE EE EE //当前B相视在功率:Error: 数据不符合BCD码格式 kVA EE EE EE
//当前C相视在功率:Error: 数据不符合BCD码格式 kVA EE EE EE //当前C相视在功率:Error: 数据不符合BCD码格式 kVA EE EE EE
//++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++
/// <summary> /// <summary>
/// 当前三相及总有/无功功率、功率因数、三相电压、电流、零序电流、视在功率 /// 当前三相及总有/无功功率、功率因数、三相电压、电流、零序电流、视在功率
/// </summary> /// </summary>
@ -386,6 +387,10 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// <returns></returns> /// <returns></returns>
private decimal AnalysisA05(string singleDigitNumberAndDeciles, string hundredDigitNumbersAndTenDigitNumber) private decimal AnalysisA05(string singleDigitNumberAndDeciles, string hundredDigitNumbersAndTenDigitNumber)
{ {
if (singleDigitNumberAndDeciles.IsEE() && hundredDigitNumbersAndTenDigitNumber.IsEE())
{
return 0;
}
var bin1 = hundredDigitNumbersAndTenDigitNumber.HexToBin().PadLeft(8, '0'); var bin1 = hundredDigitNumbersAndTenDigitNumber.HexToBin().PadLeft(8, '0');
var hundredDigitNumbers = bin1.Substring(1, 3).BinToDec();//百位 var hundredDigitNumbers = bin1.Substring(1, 3).BinToDec();//百位
var tenDigitNumber = bin1.Substring(4).BinToDec();//十位 var tenDigitNumber = bin1.Substring(4).BinToDec();//十位
@ -406,6 +411,10 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// <returns></returns> /// <returns></returns>
private decimal AnalysisA07(string singleDigitNumberAndDeciles,string hundredDigitNumbersAndTenDigitNumber) private decimal AnalysisA07(string singleDigitNumberAndDeciles,string hundredDigitNumbersAndTenDigitNumber)
{ {
if (singleDigitNumberAndDeciles.IsEE() && hundredDigitNumbersAndTenDigitNumber.IsEE())
{
return 0;
}
var bin1 = hundredDigitNumbersAndTenDigitNumber.HexToBin().PadLeft(8, '0'); var bin1 = hundredDigitNumbersAndTenDigitNumber.HexToBin().PadLeft(8, '0');
var hundredDigitNumbers = bin1.Substring(1, 3).BinToDec();//百位 var hundredDigitNumbers = bin1.Substring(1, 3).BinToDec();//百位
var tenDigitNumber = bin1.Substring(4).BinToDec();//十位 var tenDigitNumber = bin1.Substring(4).BinToDec();//十位
@ -427,6 +436,11 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// <returns></returns> /// <returns></returns>
private decimal AnalysisA09(string thousandthPercentileAndTenThousandPositions, string decilesAndPercentile, string tenAndSingleDigit) private decimal AnalysisA09(string thousandthPercentileAndTenThousandPositions, string decilesAndPercentile, string tenAndSingleDigit)
{ {
if (thousandthPercentileAndTenThousandPositions.IsEE() && decilesAndPercentile.IsEE() && tenAndSingleDigit.IsEE())
{
return 0;
}
var bin3 = tenAndSingleDigit.HexToBin().PadLeft(8, '0'); var bin3 = tenAndSingleDigit.HexToBin().PadLeft(8, '0');
var tenDigitNumber = bin3.Substring(1, 3).BinToDec();//十位 var tenDigitNumber = bin3.Substring(1, 3).BinToDec();//十位
var singleDigitNumber = bin3.Substring(4).BinToDec();//个位 var singleDigitNumber = bin3.Substring(4).BinToDec();//个位
@ -448,19 +462,18 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// <summary> /// <summary>
/// 数据格式12 TODO:待优化 /// 数据格式12 TODO:待优化
/// </summary> /// </summary>
/// <param name="tenDigitNumberAndSingleDigitNumber">十位 个位</param> /// <param name="tenDigitAndSingleDigitNumber">十位 个位</param>
/// <param name="hundredsOfPositionAndThousandOfPosition">千位 百位</param> /// <param name="thousandAndHundredsOfPosition">千位 百位</param>
/// <param name="hundredThousandOfPositionAndTenThousandOfPosition">十万位 万位</param> /// <param name="hundredThousandAndTenThousandOfPosition">十万位 万位</param>
/// <param name="millionsOfPositionAndMillionOfPosition">千万位 百万位</param> /// <param name="millionsAndMillionOfPosition">千万位 百万位</param>
/// <param name="billionOfPositionAndHundredMillionOfPosition">十亿位 亿位</param> /// <param name="hundredMillionAndBillionOfPosition">十亿位 亿位</param>
/// <param name="hundredBillionsOfPositionAndBillionsOfPosition">千亿位 百亿位</param> /// <param name="hundredBillionsAndBillionsOfPosition">千亿位 百亿位</param>
/// <returns></returns> /// <returns></returns>
private string AnalysisA12(string tenDigitNumberAndSingleDigitNumber, string hundredsOfPositionAndThousandOfPosition, string hundredThousandOfPositionAndTenThousandOfPosition, private string AnalysisA12(string tenDigitAndSingleDigitNumber, string thousandAndHundredsOfPosition, string hundredThousandAndTenThousandOfPosition,
string millionsOfPositionAndMillionOfPosition, string billionOfPositionAndHundredMillionOfPosition, string hundredBillionsOfPositionAndBillionsOfPosition) string millionsAndMillionOfPosition, string hundredMillionAndBillionOfPosition, string hundredBillionsAndBillionsOfPosition)
{ {
var value = $"{hundredBillionsAndBillionsOfPosition}{hundredMillionAndBillionOfPosition}{millionsAndMillionOfPosition}" +
var value = $"{hundredBillionsOfPositionAndBillionsOfPosition}{billionOfPositionAndHundredMillionOfPosition}{millionsOfPositionAndMillionOfPosition}" + $"{hundredThousandAndTenThousandOfPosition}{thousandAndHundredsOfPosition}{tenDigitAndSingleDigitNumber}";
$"{hundredThousandOfPositionAndTenThousandOfPosition}{hundredsOfPositionAndThousandOfPosition}{tenDigitNumberAndSingleDigitNumber}";
return value; return value;
} }
@ -471,14 +484,17 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// <param name="tenThousandPositionsAndThousandthPercentile">千分,万分</param> /// <param name="tenThousandPositionsAndThousandthPercentile">千分,万分</param>
/// <param name="decilesAndPercentile">十分、百分</param> /// <param name="decilesAndPercentile">十分、百分</param>
/// <param name="tenDigitNumberAndSingleDigitNumber">十位、个位</param> /// <param name="tenDigitNumberAndSingleDigitNumber">十位、个位</param>
/// <param name="thousandOfPositionAndHundredsOfPosition">千位、百位</param> /// <param name="thousandAndHundredsOfPosition">千位、百位</param>
/// <param name="hundredThousandOfPositionAndTenThousandOfPosition">十万位、万位</param> /// <param name="hundredThousandAndTenThousandOfPosition">十万位、万位</param>
/// <returns></returns> /// <returns></returns>
private decimal AnalysisA14(string tenThousandPositionsAndThousandthPercentile, string decilesAndPercentile, private decimal AnalysisA14(string tenThousandPositionsAndThousandthPercentile, string decilesAndPercentile,
string tenDigitNumberAndSingleDigitNumber, string thousandOfPositionAndHundredsOfPosition, string hundredThousandOfPositionAndTenThousandOfPosition) string tenDigitNumberAndSingleDigitNumber, string thousandAndHundredsOfPosition, string hundredThousandAndTenThousandOfPosition)
{ {
if (tenThousandPositionsAndThousandthPercentile.IsEE() && decilesAndPercentile.IsEE() && tenDigitNumberAndSingleDigitNumber.IsEE()
&& thousandAndHundredsOfPosition.IsEE() && hundredThousandAndTenThousandOfPosition.IsEE())
return 0;
var value = decimal.Parse($"{hundredThousandOfPositionAndTenThousandOfPosition}{thousandOfPositionAndHundredsOfPosition}" + var value = decimal.Parse($"{hundredThousandAndTenThousandOfPosition}{thousandAndHundredsOfPosition}" +
$"{tenDigitNumberAndSingleDigitNumber}.{decilesAndPercentile}{tenThousandPositionsAndThousandthPercentile}"); $"{tenDigitNumberAndSingleDigitNumber}.{decilesAndPercentile}{tenThousandPositionsAndThousandthPercentile}");
return value; return value;
@ -561,6 +577,9 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
private decimal AnalysisA25(string percentileAndThousandthPercentile,string singleDigitNumberAndDeciles, string hundredDigitNumbersAndTenDigitNumber) private decimal AnalysisA25(string percentileAndThousandthPercentile,string singleDigitNumberAndDeciles, string hundredDigitNumbersAndTenDigitNumber)
{ {
if (percentileAndThousandthPercentile.IsEE() && singleDigitNumberAndDeciles.IsEE() && hundredDigitNumbersAndTenDigitNumber.IsEE())
return 0;
var bin1 = hundredDigitNumbersAndTenDigitNumber.HexToBin().PadLeft(8, '0'); var bin1 = hundredDigitNumbersAndTenDigitNumber.HexToBin().PadLeft(8, '0');
var hundredDigitNumbers = bin1.Substring(1, 3).BinToDec();//百位 var hundredDigitNumbers = bin1.Substring(1, 3).BinToDec();//百位
var tenDigitNumber = bin1.Substring(4).BinToDec();//十位 var tenDigitNumber = bin1.Substring(4).BinToDec();//十位