优化代码

This commit is contained in:
cli 2025-03-17 09:57:58 +08:00
parent 032c075f2f
commit 29560ad4ef
2 changed files with 107 additions and 114 deletions

View File

@ -77,7 +77,6 @@ namespace JiShe.CollectBus.Subscribers
if (device!=null) if (device!=null)
{ {
await _tcpService.SendAsync(device.ClientId, issuedEventMessage.Message); await _tcpService.SendAsync(device.ClientId, issuedEventMessage.Message);
} }
} }
@ -99,35 +98,30 @@ namespace JiShe.CollectBus.Subscribers
[CapSubscribe(ProtocolConst.SubscriberReceivedHeartbeatEventName)] [CapSubscribe(ProtocolConst.SubscriberReceivedHeartbeatEventName)]
public async Task ReceivedHeartbeatEvent(MessageReceivedHeartbeat receivedHeartbeatMessage) public async Task ReceivedHeartbeatEvent(MessageReceivedHeartbeat receivedHeartbeatMessage)
{ {
_logger.LogInformation("心跳消费队列开始处理");
var protocolPlugin = _serviceProvider.GetKeyedService<IProtocolPlugin>("StandardProtocolPlugin"); var protocolPlugin = _serviceProvider.GetKeyedService<IProtocolPlugin>("StandardProtocolPlugin");
if (protocolPlugin == null) if (protocolPlugin == null)
{ {
_logger.LogError("【心跳消费队列开始处理】协议不存在!"); _logger.LogError("协议不存在!");
} }
else else
{ {
await protocolPlugin.HeartbeatAsync(receivedHeartbeatMessage); await protocolPlugin.HeartbeatAsync(receivedHeartbeatMessage);
await _messageReceivedHeartbeatEventRepository.InsertAsync(receivedHeartbeatMessage); await _messageReceivedHeartbeatEventRepository.InsertAsync(receivedHeartbeatMessage);
_logger.LogInformation($"心跳消费队列完成处理:{receivedHeartbeatMessage.MessageId}");
} }
} }
[CapSubscribe(ProtocolConst.SubscriberReceivedLoginEventName)] [CapSubscribe(ProtocolConst.SubscriberReceivedLoginEventName)]
public async Task ReceivedLoginEvent(MessageReceivedLogin receivedLoginMessage) public async Task ReceivedLoginEvent(MessageReceivedLogin receivedLoginMessage)
{ {
_logger.LogInformation("登录消费队列开始处理");
var protocolPlugin = _serviceProvider.GetKeyedService<IProtocolPlugin>("StandardProtocolPlugin"); var protocolPlugin = _serviceProvider.GetKeyedService<IProtocolPlugin>("StandardProtocolPlugin");
if (protocolPlugin == null) if (protocolPlugin == null)
{ {
_logger.LogError("【登录消费队列开始处理】协议不存在!"); _logger.LogError("协议不存在!");
} }
else else
{ {
await protocolPlugin.LoginAsync(receivedLoginMessage); await protocolPlugin.LoginAsync(receivedLoginMessage);
await _messageReceivedLoginEventRepository.InsertAsync(receivedLoginMessage); await _messageReceivedLoginEventRepository.InsertAsync(receivedLoginMessage);
_logger.LogInformation("登录消费队列完成处理");
} }
} }
} }

View File

@ -1,5 +1,4 @@
using System.Globalization; using DotNetCore.CAP;
using DotNetCore.CAP;
using JiShe.CollectBus.Common.Enums; using JiShe.CollectBus.Common.Enums;
using JiShe.CollectBus.Common.Extensions; using JiShe.CollectBus.Common.Extensions;
using JiShe.CollectBus.Common.Models; using JiShe.CollectBus.Common.Models;
@ -153,55 +152,55 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// <returns></returns> /// <returns></returns>
public virtual List<AmmeterParameter> AnalyzeAmmeterParameterReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null) public virtual List<AmmeterParameter> AnalyzeAmmeterParameterReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null)
{ {
var hexDatas = GetHexDatas(messageReceived.MessageHexString); var hexData = GetHexData(messageReceived.MessageHexString);
var meterList = new List<AmmeterParameter>(); var meterList = new List<AmmeterParameter>();
var count = (hexDatas[1] + hexDatas[0]).HexToDec(); var count = (hexData[1] + hexData[0]).HexToDec();
//if (2 + count * 27 != hexDatas.Count - pWLen - tPLen - 2) //if (2 + count * 27 != hexDatas.Count - pWLen - tPLen - 2)
// return; // return;
var index = 2;//数量 var index = 2;//数量
for (int i = 1; i <= count; i++) for (int i = 1; i <= count; i++)
{ {
var meterNumber = $"{hexDatas[index + 1]}{hexDatas[index]}".HexToDec(); var meterNumber = $"{hexData[index + 1]}{hexData[index]}".HexToDec();
index += 2; index += 2;
var pn = $"{hexDatas[index + 1]}{hexDatas[index]}".HexToDec(); var pn = $"{hexData[index + 1]}{hexData[index]}".HexToDec();
index += 2; index += 2;
var baudRateAndPortBin = hexDatas[index].HexToBin().PadLeft(8, '0'); var baudRateAndPortBin = hexData[index].HexToBin().PadLeft(8, '0');
var baudRate = baudRateAndPortBin.Substring(0, 3).BinToDec(); var baudRate = baudRateAndPortBin.Substring(0, 3).BinToDec();
var port = baudRateAndPortBin.Substring(3, 5).BinToDec(); var port = baudRateAndPortBin.Substring(3, 5).BinToDec();
index += 1; index += 1;
var protocolType = (CommunicationProtocolType)hexDatas[index].HexToDec(); var protocolType = (CommunicationProtocolType)hexData[index].HexToDec();
index += 1; index += 1;
var addressHexList = hexDatas.Skip(index).Take(6).ToList(); var addressHexList = hexData.Skip(index).Take(6).ToList();
addressHexList.Reverse(); addressHexList.Reverse();
var address = string.Join("", addressHexList); var address = string.Join("", addressHexList);
index += 6; index += 6;
var pwdHexList = hexDatas.Skip(index).Take(6).ToList(); var pwdHexList = hexData.Skip(index).Take(6).ToList();
pwdHexList.Reverse(); pwdHexList.Reverse();
var password = string.Join("", pwdHexList.Take(3).ToList()); var password = string.Join("", pwdHexList.Take(3).ToList());
index += 6; index += 6;
var rateNumberBin = hexDatas[index].HexToBin().PadLeft(8, '0'); var rateNumberBin = hexData[index].HexToBin().PadLeft(8, '0');
var rateNumber = rateNumberBin.Substring(4).BinToDec(); var rateNumber = rateNumberBin.Substring(4).BinToDec();
index += 1; index += 1;
var intBitAndDecBitNumberBin = hexDatas[index].HexToBin().PadLeft(8, '0'); var intBitAndDecBitNumberBin = hexData[index].HexToBin().PadLeft(8, '0');
var intBitNumber = intBitAndDecBitNumberBin.Substring(4, 2).BinToDec() + 4; var intBitNumber = intBitAndDecBitNumberBin.Substring(4, 2).BinToDec() + 4;
var decBitNumber = intBitAndDecBitNumberBin.Substring(6, 2).BinToDec() + 1; var decBitNumber = intBitAndDecBitNumberBin.Substring(6, 2).BinToDec() + 1;
index += 1; index += 1;
// hexDatas.GetRange() // hexDatas.GetRange()
var collectorAddressHexList = hexDatas.Skip(index).Take(6).ToList(); var collectorAddressHexList = hexData.Skip(index).Take(6).ToList();
collectorAddressHexList.Reverse(); collectorAddressHexList.Reverse();
var collectorAddress = string.Join("", collectorAddressHexList); var collectorAddress = string.Join("", collectorAddressHexList);
index += 6; index += 6;
var userClassNumberBin = hexDatas[index].HexToBin().PadLeft(8, '0'); var userClassNumberBin = hexData[index].HexToBin().PadLeft(8, '0');
var userClass = userClassNumberBin.Substring(0, 4).BinToDec(); var userClass = userClassNumberBin.Substring(0, 4).BinToDec();
var userSubClass = userClassNumberBin.Substring(4, 4).BinToDec(); var userSubClass = userClassNumberBin.Substring(4, 4).BinToDec();
index += 1; index += 1;
@ -234,24 +233,24 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// <returns></returns> /// <returns></returns>
public virtual CurrentPositiveActiveEnergyAnalyze AnalyzeActivePowerIndicationReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null) public virtual CurrentPositiveActiveEnergyAnalyze AnalyzeActivePowerIndicationReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null)
{ {
var hexDatas = GetHexDatas(messageReceived.MessageHexString); var hexData = GetHexData(messageReceived.MessageHexString);
var minute = Convert.ToInt32(hexDatas[0]); // 获取当前分钟数 var minute = Convert.ToInt32(hexData[0]); // 获取当前分钟数
var hour = Convert.ToInt32(hexDatas[1]); // 获取当前小时数 var hour = Convert.ToInt32(hexData[1]); // 获取当前小时数
var day = Convert.ToInt32(hexDatas[2]); // 获取当前日期的日数 var day = Convert.ToInt32(hexData[2]); // 获取当前日期的日数
var month = Convert.ToInt32(hexDatas[3]); // 获取当前月份 var month = Convert.ToInt32(hexData[3]); // 获取当前月份
var year = Convert.ToInt32(hexDatas[4]); // 获取当前日期的年份 var year = Convert.ToInt32(hexData[4]); // 获取当前日期的年份
var dateTime = new DateTime(year, month, day, hour, minute, 0); var dateTime = new DateTime(year, month, day, hour, minute, 0);
// 转换为本地时间 // 转换为本地时间
var localDateTime = dateTime.ToLocalTime(); var localDateTime = dateTime.ToLocalTime();
var rateNumber = Convert.ToInt32(hexDatas[5]); var rateNumber = Convert.ToInt32(hexData[5]);
var kwhTotal = hexDatas.Skip(5).Take(5).ToList(); var kwhTotal = hexData.Skip(5).Take(5).ToList();
var kwhList = new List<PositiveActiveEnergyItem>(); var kwhList = new List<PositiveActiveEnergyItem>();
var index = 11; var index = 11;
for (int i = 0; i < rateNumber; i++) for (int i = 0; i < rateNumber; i++)
{ {
var kwhHexList = hexDatas.Skip(index).Take(5).ToList(); var kwhHexList = hexData.Skip(index).Take(5).ToList();
kwhHexList.Reverse(); kwhHexList.Reverse();
var integerStr = $"{kwhHexList.Take(0)}{kwhHexList.Take(1)}{kwhHexList.Take(2)}"; var integerStr = $"{kwhHexList.Take(0)}{kwhHexList.Take(1)}{kwhHexList.Take(2)}";
var decimalValStr = $"{kwhHexList[3]}{kwhHexList[4]}"; var decimalValStr = $"{kwhHexList[3]}{kwhHexList[4]}";
@ -280,19 +279,19 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// <returns></returns> /// <returns></returns>
public virtual void AnalyzeDailyFrozenReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null) public virtual void AnalyzeDailyFrozenReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null)
{ {
var hexDatas = GetHexDatas(messageReceived.MessageHexString); var hexData = GetHexData(messageReceived.MessageHexString);
//附录A.20 日月年 //附录A.20 日月年
var td_dHex = hexDatas.Take(3).ToList(); var td_dHex = hexData.Take(3).ToList();
//附录A.15 分时日月年 //附录A.15 分时日月年
var readingTimeHex = hexDatas.Skip(3).Take(5).ToList(); var readingTimeHex = hexData.Skip(3).Take(5).ToList();
var rateNumberHex = hexDatas.Skip(8).Take(1).FirstOrDefault().HexToDec(); var rateNumberHex = hexData.Skip(8).Take(1).FirstOrDefault().HexToDec();
var datas = new List<decimal>(); var datas = new List<decimal>();
//附录A.14 kWh 5字节 //附录A.14 kWh 5字节
for (int i = 0; i < rateNumberHex; i++) for (int i = 0; i < rateNumberHex; i++)
{ {
var skipCount = 9 + i * 5; var skipCount = 9 + i * 5;
var dataHexs = hexDatas.Skip(skipCount).Take(5).ToList(); var dataHexs = hexData.Skip(skipCount).Take(5).ToList();
var data = AnalyzeDataAccordingToA14(dataHexs[0], dataHexs[1], dataHexs[2], dataHexs[3], dataHexs[4]); var data = AnalyzeDataAccordingToA14(dataHexs[0], dataHexs[1], dataHexs[2], dataHexs[3], dataHexs[4]);
datas.Add(data); datas.Add(data);
} }
@ -344,83 +343,83 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// <returns></returns>//F25ReadingAnalyze /// <returns></returns>//F25ReadingAnalyze
public virtual Analyze3761Data AnalyzeF25ReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null) public virtual Analyze3761Data AnalyzeF25ReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null)
{ {
var hexDatas = GetHexDatas(messageReceived.MessageHexString); var hexData = GetHexData(messageReceived.MessageHexString);
//A.15 分时日月年 //A.15 分时日月年
var readingTimeHex = hexDatas.Take(5).ToList(); var readingTimeHex = hexData.Take(5).ToList();
var readingTime = AnalyzeDataAccordingToA15(readingTimeHex[0], readingTimeHex[1], readingTimeHex[2], readingTimeHex[3], readingTimeHex[4]); var readingTime = AnalyzeDataAccordingToA15(readingTimeHex[0], readingTimeHex[1], readingTimeHex[2], readingTimeHex[3], readingTimeHex[4]);
//A.9 kW //A.9 kW
var crntTotalActivePowerHexs = hexDatas.Skip((int)F25DataItemEnum.CrntTotalActivePower).Take(3).ToList(); var crntTotalActivePowerHexs = hexData.Skip((int)F25DataItemEnum.CrntTotalActivePower).Take(3).ToList();
var crntTotalActivePower = AnalyzeDataAccordingToA09(crntTotalActivePowerHexs[0], crntTotalActivePowerHexs[1], crntTotalActivePowerHexs[2]); var crntTotalActivePower = AnalyzeDataAccordingToA09(crntTotalActivePowerHexs[0], crntTotalActivePowerHexs[1], crntTotalActivePowerHexs[2]);
var crntActivePowerOfAHexs = hexDatas.Skip((int)F25DataItemEnum.CrntActivePowerOfA).Take(3).ToList(); var crntActivePowerOfAHexs = hexData.Skip((int)F25DataItemEnum.CrntActivePowerOfA).Take(3).ToList();
var crntActivePowerOfA = AnalyzeDataAccordingToA09(crntActivePowerOfAHexs[0], crntActivePowerOfAHexs[1], crntActivePowerOfAHexs[2]); var crntActivePowerOfA = AnalyzeDataAccordingToA09(crntActivePowerOfAHexs[0], crntActivePowerOfAHexs[1], crntActivePowerOfAHexs[2]);
var crntActivePowerOfBHexs = hexDatas.Skip((int)F25DataItemEnum.CrntActivePowerOfB).Take(3).ToList(); var crntActivePowerOfBHexs = hexData.Skip((int)F25DataItemEnum.CrntActivePowerOfB).Take(3).ToList();
var crntActivePowerOfB = AnalyzeDataAccordingToA09(crntActivePowerOfBHexs[0], crntActivePowerOfBHexs[1], crntActivePowerOfBHexs[2]); var crntActivePowerOfB = AnalyzeDataAccordingToA09(crntActivePowerOfBHexs[0], crntActivePowerOfBHexs[1], crntActivePowerOfBHexs[2]);
var crntActivePowerOfCHexs = hexDatas.Skip((int)F25DataItemEnum.CrntActivePowerOfC).Take(3).ToList(); var crntActivePowerOfCHexs = hexData.Skip((int)F25DataItemEnum.CrntActivePowerOfC).Take(3).ToList();
var crntActivePowerOfC = AnalyzeDataAccordingToA09(crntActivePowerOfCHexs[0], crntActivePowerOfCHexs[1], crntActivePowerOfCHexs[2]); var crntActivePowerOfC = AnalyzeDataAccordingToA09(crntActivePowerOfCHexs[0], crntActivePowerOfCHexs[1], crntActivePowerOfCHexs[2]);
var crntTotalReactivePowerHexs = hexDatas.Skip((int)F25DataItemEnum.CrntTotalReactivePower).Take(3).ToList(); var crntTotalReactivePowerHexs = hexData.Skip((int)F25DataItemEnum.CrntTotalReactivePower).Take(3).ToList();
var crntTotalReactivePower = AnalyzeDataAccordingToA09(crntTotalReactivePowerHexs[0], crntTotalReactivePowerHexs[1], crntTotalReactivePowerHexs[2]); var crntTotalReactivePower = AnalyzeDataAccordingToA09(crntTotalReactivePowerHexs[0], crntTotalReactivePowerHexs[1], crntTotalReactivePowerHexs[2]);
var crntReactivePowerOfAHexs = hexDatas.Skip((int)F25DataItemEnum.CrntReactivePowerOfA).Take(3).ToList(); var crntReactivePowerOfAHexs = hexData.Skip((int)F25DataItemEnum.CrntReactivePowerOfA).Take(3).ToList();
var crntReactivePowerOfA = AnalyzeDataAccordingToA09(crntReactivePowerOfAHexs[0], crntReactivePowerOfAHexs[1], crntReactivePowerOfAHexs[2]); var crntReactivePowerOfA = AnalyzeDataAccordingToA09(crntReactivePowerOfAHexs[0], crntReactivePowerOfAHexs[1], crntReactivePowerOfAHexs[2]);
var crntReactivePowerOfBHexs = hexDatas.Skip((int)F25DataItemEnum.CrntReactivePowerOfB).Take(3).ToList(); var crntReactivePowerOfBHexs = hexData.Skip((int)F25DataItemEnum.CrntReactivePowerOfB).Take(3).ToList();
var crntReactivePowerOfB = AnalyzeDataAccordingToA09(crntReactivePowerOfBHexs[0], crntReactivePowerOfBHexs[1], crntReactivePowerOfBHexs[2]); var crntReactivePowerOfB = AnalyzeDataAccordingToA09(crntReactivePowerOfBHexs[0], crntReactivePowerOfBHexs[1], crntReactivePowerOfBHexs[2]);
var crntReactivePowerOfCHexs = hexDatas.Skip((int)F25DataItemEnum.CrntReactivePowerOfC).Take(2).ToList(); var crntReactivePowerOfCHexs = hexData.Skip((int)F25DataItemEnum.CrntReactivePowerOfC).Take(2).ToList();
var crntReactivePowerOfC = AnalyzeDataAccordingToA09(crntReactivePowerOfCHexs[0], crntReactivePowerOfCHexs[1], crntReactivePowerOfCHexs[2]); var crntReactivePowerOfC = AnalyzeDataAccordingToA09(crntReactivePowerOfCHexs[0], crntReactivePowerOfCHexs[1], crntReactivePowerOfCHexs[2]);
//A.5 % //A.5 %
var crntTotalPowerFactorHexs = hexDatas.Skip((int)F25DataItemEnum.CrntTotalPowerFactor).Take(2).ToList(); var crntTotalPowerFactorHexs = hexData.Skip((int)F25DataItemEnum.CrntTotalPowerFactor).Take(2).ToList();
var crntTotalPowerFactor = AnalyzeDataAccordingToA05(crntTotalPowerFactorHexs[0], crntTotalPowerFactorHexs[1]); var crntTotalPowerFactor = AnalyzeDataAccordingToA05(crntTotalPowerFactorHexs[0], crntTotalPowerFactorHexs[1]);
var crntPowerFactorOfAHexs = hexDatas.Skip((int)F25DataItemEnum.CrntPowerFactorOfA).Take(2).ToList(); var crntPowerFactorOfAHexs = hexData.Skip((int)F25DataItemEnum.CrntPowerFactorOfA).Take(2).ToList();
var crntPowerFactorOfA = AnalyzeDataAccordingToA05(crntPowerFactorOfAHexs[0], crntPowerFactorOfAHexs[1]); var crntPowerFactorOfA = AnalyzeDataAccordingToA05(crntPowerFactorOfAHexs[0], crntPowerFactorOfAHexs[1]);
var crntPowerFactorOfBHexs = hexDatas.Skip((int)F25DataItemEnum.CrntPowerFactorOfB).Take(2).ToList(); var crntPowerFactorOfBHexs = hexData.Skip((int)F25DataItemEnum.CrntPowerFactorOfB).Take(2).ToList();
var crntPowerFactorOfB = AnalyzeDataAccordingToA05(crntPowerFactorOfBHexs[0], crntPowerFactorOfBHexs[1]); var crntPowerFactorOfB = AnalyzeDataAccordingToA05(crntPowerFactorOfBHexs[0], crntPowerFactorOfBHexs[1]);
var crntPowerFactorOfCHexs = hexDatas.Skip((int)F25DataItemEnum.CrntPowerFactorOfC).Take(2).ToList(); var crntPowerFactorOfCHexs = hexData.Skip((int)F25DataItemEnum.CrntPowerFactorOfC).Take(2).ToList();
var crntPowerFactorOfC = AnalyzeDataAccordingToA05(crntPowerFactorOfCHexs[0], crntPowerFactorOfCHexs[1]); var crntPowerFactorOfC = AnalyzeDataAccordingToA05(crntPowerFactorOfCHexs[0], crntPowerFactorOfCHexs[1]);
//A.7 V //A.7 V
var crntVoltageOfAHexs = hexDatas.Skip((int)F25DataItemEnum.CrntVoltageOfA).Take(2).ToList(); var crntVoltageOfAHexs = hexData.Skip((int)F25DataItemEnum.CrntVoltageOfA).Take(2).ToList();
var crntVoltageOfA = AnalyzeDataAccordingToA07(crntVoltageOfAHexs[0], crntVoltageOfAHexs[1]); var crntVoltageOfA = AnalyzeDataAccordingToA07(crntVoltageOfAHexs[0], crntVoltageOfAHexs[1]);
var crntVoltageOfBHexs = hexDatas.Skip((int)F25DataItemEnum.CrntVoltageOfB).Take(2).ToList(); var crntVoltageOfBHexs = hexData.Skip((int)F25DataItemEnum.CrntVoltageOfB).Take(2).ToList();
var crntVoltageOfB = AnalyzeDataAccordingToA07(crntVoltageOfBHexs[0], crntVoltageOfBHexs[1]); var crntVoltageOfB = AnalyzeDataAccordingToA07(crntVoltageOfBHexs[0], crntVoltageOfBHexs[1]);
var crntVoltageOfCHexs = hexDatas.Skip((int)F25DataItemEnum.CrntVoltageOfC).Take(2).ToList(); var crntVoltageOfCHexs = hexData.Skip((int)F25DataItemEnum.CrntVoltageOfC).Take(2).ToList();
var crntVoltageOfC = AnalyzeDataAccordingToA07(crntVoltageOfCHexs[0], crntVoltageOfCHexs[1]); var crntVoltageOfC = AnalyzeDataAccordingToA07(crntVoltageOfCHexs[0], crntVoltageOfCHexs[1]);
//A.25 A //A.25 A
var crntCurrentOfAHexs = hexDatas.Skip((int)F25DataItemEnum.CrntCurrentOfA).Take(3).ToList(); var crntCurrentOfAHexs = hexData.Skip((int)F25DataItemEnum.CrntCurrentOfA).Take(3).ToList();
var crntCurrentOfA = AnalyzeDataAccordingToA25(crntCurrentOfAHexs[0], crntCurrentOfAHexs[1], crntCurrentOfAHexs[2]); var crntCurrentOfA = AnalyzeDataAccordingToA25(crntCurrentOfAHexs[0], crntCurrentOfAHexs[1], crntCurrentOfAHexs[2]);
var crntCurrentOfBHexs = hexDatas.Skip((int)F25DataItemEnum.CrntCurrentOfB).Take(3).ToList(); var crntCurrentOfBHexs = hexData.Skip((int)F25DataItemEnum.CrntCurrentOfB).Take(3).ToList();
var crntCurrentOfB = AnalyzeDataAccordingToA25(crntCurrentOfBHexs[0], crntCurrentOfBHexs[1], crntCurrentOfBHexs[2]); var crntCurrentOfB = AnalyzeDataAccordingToA25(crntCurrentOfBHexs[0], crntCurrentOfBHexs[1], crntCurrentOfBHexs[2]);
var crntCurrentOfCHexs = hexDatas.Skip((int)F25DataItemEnum.CrntCurrentOfC).Take(3).ToList(); var crntCurrentOfCHexs = hexData.Skip((int)F25DataItemEnum.CrntCurrentOfC).Take(3).ToList();
var crntCurrentOfC = AnalyzeDataAccordingToA25(crntCurrentOfCHexs[0], crntCurrentOfCHexs[1], crntCurrentOfCHexs[2]); var crntCurrentOfC = AnalyzeDataAccordingToA25(crntCurrentOfCHexs[0], crntCurrentOfCHexs[1], crntCurrentOfCHexs[2]);
var crntZeroSequenceCurrentHexs = hexDatas.Skip((int)F25DataItemEnum.CrntZeroSequenceCurrent).Take(3).ToList(); var crntZeroSequenceCurrentHexs = hexData.Skip((int)F25DataItemEnum.CrntZeroSequenceCurrent).Take(3).ToList();
var crntZeroSequenceCurrent = AnalyzeDataAccordingToA25(crntZeroSequenceCurrentHexs[0], crntZeroSequenceCurrentHexs[1], crntZeroSequenceCurrentHexs[2]); var crntZeroSequenceCurrent = AnalyzeDataAccordingToA25(crntZeroSequenceCurrentHexs[0], crntZeroSequenceCurrentHexs[1], crntZeroSequenceCurrentHexs[2]);
//A.9 kVA //A.9 kVA
var crntTotalApparentPowerHexs = hexDatas.Skip((int)F25DataItemEnum.CrntTotalApparentPower).Take(3).ToList(); var crntTotalApparentPowerHexs = hexData.Skip((int)F25DataItemEnum.CrntTotalApparentPower).Take(3).ToList();
var crntTotalApparentPower = AnalyzeDataAccordingToA09(crntTotalApparentPowerHexs[0], crntTotalApparentPowerHexs[1], crntTotalApparentPowerHexs[2]); var crntTotalApparentPower = AnalyzeDataAccordingToA09(crntTotalApparentPowerHexs[0], crntTotalApparentPowerHexs[1], crntTotalApparentPowerHexs[2]);
var crntApparentPowerOfAHexs = hexDatas.Skip((int)F25DataItemEnum.CrntApparentPowerOfA).Take(3).ToList(); var crntApparentPowerOfAHexs = hexData.Skip((int)F25DataItemEnum.CrntApparentPowerOfA).Take(3).ToList();
var crntApparentPowerOfA = AnalyzeDataAccordingToA09(crntApparentPowerOfAHexs[0], crntApparentPowerOfAHexs[1], crntApparentPowerOfAHexs[2]); var crntApparentPowerOfA = AnalyzeDataAccordingToA09(crntApparentPowerOfAHexs[0], crntApparentPowerOfAHexs[1], crntApparentPowerOfAHexs[2]);
var crntApparentPowerOfBHexs = hexDatas.Skip((int)F25DataItemEnum.CrntApparentPowerOfB).Take(3).ToList(); var crntApparentPowerOfBHexs = hexData.Skip((int)F25DataItemEnum.CrntApparentPowerOfB).Take(3).ToList();
var crntApparentPowerOfB = AnalyzeDataAccordingToA09(crntApparentPowerOfBHexs[0], crntApparentPowerOfBHexs[1], crntApparentPowerOfBHexs[2]); var crntApparentPowerOfB = AnalyzeDataAccordingToA09(crntApparentPowerOfBHexs[0], crntApparentPowerOfBHexs[1], crntApparentPowerOfBHexs[2]);
var crntApparentPowerOfCHexs = hexDatas.Skip((int)F25DataItemEnum.CrntApparentPowerOfC).Take(3).ToList(); var crntApparentPowerOfCHexs = hexData.Skip((int)F25DataItemEnum.CrntApparentPowerOfC).Take(3).ToList();
var crntApparentPowerOfC = AnalyzeDataAccordingToA09(crntApparentPowerOfCHexs[0], crntApparentPowerOfCHexs[1], crntApparentPowerOfCHexs[2]); var crntApparentPowerOfC = AnalyzeDataAccordingToA09(crntApparentPowerOfCHexs[0], crntApparentPowerOfCHexs[1], crntApparentPowerOfCHexs[2]);
return new Analyze3761Data() return new Analyze3761Data()
@ -497,17 +496,17 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// <returns></returns>//TerminalVersionInfoAnalyze /// <returns></returns>//TerminalVersionInfoAnalyze
public virtual Analyze3761Data AnalyzeTerminalVersionInfoReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null) public virtual Analyze3761Data AnalyzeTerminalVersionInfoReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null)
{ {
var hexDatas = GetHexDatas(messageReceived.MessageHexString); var hexData = GetHexData(messageReceived.MessageHexString);
var makerNo = string.Join("",hexDatas.Take(4).Select(s => (char)s.HexToDec()));//厂商代码 var makerNo = string.Join("",hexData.Take(4).Select(s => (char)s.HexToDec()));//厂商代码
var deviceNo = string.Join("", hexDatas.Skip((int)TerminalVersionInfoEnum.DeviceNo).Take(8).Select(s => (char)s.HexToDec()));//设备编号 var deviceNo = string.Join("", hexData.Skip((int)TerminalVersionInfoEnum.DeviceNo).Take(8).Select(s => (char)s.HexToDec()));//设备编号
var softwareVersionNo = string.Join("", hexDatas.Skip((int)TerminalVersionInfoEnum.SoftwareVersionNo).Take(4).Select(s => (char)s.HexToDec()));//软件版本号 var softwareVersionNo = string.Join("", hexData.Skip((int)TerminalVersionInfoEnum.SoftwareVersionNo).Take(4).Select(s => (char)s.HexToDec()));//软件版本号
var softwareReleaseDateList = hexDatas.Skip((int)TerminalVersionInfoEnum.SoftwareReleaseDate).Take(3).ToList(); var softwareReleaseDateList = hexData.Skip((int)TerminalVersionInfoEnum.SoftwareReleaseDate).Take(3).ToList();
var softwareReleaseDate = $"20{AnalyzeDataAccordingToA20(softwareReleaseDateList[0], softwareReleaseDateList[1], softwareReleaseDateList[2])}";//软件发布日期 var softwareReleaseDate = $"20{AnalyzeDataAccordingToA20(softwareReleaseDateList[0], softwareReleaseDateList[1], softwareReleaseDateList[2])}";//软件发布日期
var capacityInformationCode = string.Join("", hexDatas.Skip((int)TerminalVersionInfoEnum.CapacityInformationCode).Take(11).Select(s => (char)s.HexToDec()));//容量信息码 var capacityInformationCode = string.Join("", hexData.Skip((int)TerminalVersionInfoEnum.CapacityInformationCode).Take(11).Select(s => (char)s.HexToDec()));//容量信息码
var protocolVersionNo = string.Join("", hexDatas.Skip((int)TerminalVersionInfoEnum.ProtocolVersionNo).Take(4).Select(s => (char)s.HexToDec()));//通信协议编号 var protocolVersionNo = string.Join("", hexData.Skip((int)TerminalVersionInfoEnum.ProtocolVersionNo).Take(4).Select(s => (char)s.HexToDec()));//通信协议编号
var hardwareVersionNo = string.Join("", hexDatas.Skip((int)TerminalVersionInfoEnum.HardwareVersionNo).Take(4).Select(s => (char)s.HexToDec()));//硬件版本号 var hardwareVersionNo = string.Join("", hexData.Skip((int)TerminalVersionInfoEnum.HardwareVersionNo).Take(4).Select(s => (char)s.HexToDec()));//硬件版本号
var hardwareReleaseDateList = hexDatas.Skip((int)TerminalVersionInfoEnum.HardwareReleaseDate).Take(3).ToList(); var hardwareReleaseDateList = hexData.Skip((int)TerminalVersionInfoEnum.HardwareReleaseDate).Take(3).ToList();
var hardwareReleaseDate = $"20{AnalyzeDataAccordingToA20(hardwareReleaseDateList[0], hardwareReleaseDateList[1], hardwareReleaseDateList[2])}";//软件发布日期 var hardwareReleaseDate = $"20{AnalyzeDataAccordingToA20(hardwareReleaseDateList[0], hardwareReleaseDateList[1], hardwareReleaseDateList[2])}";//软件发布日期
return new Analyze3761Data() return new Analyze3761Data()
@ -548,24 +547,24 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// <returns></returns> /// <returns></returns>
public virtual Analyze3761Data AnalyzeATypeOfDataItems49ReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null) public virtual Analyze3761Data AnalyzeATypeOfDataItems49ReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null)
{ {
var hexDatas = GetHexDatas(messageReceived.MessageHexString); var hexData = GetHexData(messageReceived.MessageHexString);
var uabUaList = hexDatas.Take(2).ToList(); var uabUaList = hexData.Take(2).ToList();
var uabUa = AnalyzeDataAccordingToA05(uabUaList[0], uabUaList[1]); //单位 度 var uabUa = AnalyzeDataAccordingToA05(uabUaList[0], uabUaList[1]); //单位 度
var ubList = hexDatas.Skip((int)ATypeOfDataItems49.Ub).Take(2).ToList(); var ubList = hexData.Skip((int)ATypeOfDataItems49.Ub).Take(2).ToList();
var ub = AnalyzeDataAccordingToA05(ubList[0], ubList[1]); var ub = AnalyzeDataAccordingToA05(ubList[0], ubList[1]);
var ucbUcList = hexDatas.Skip((int)ATypeOfDataItems49.UcbUc).Take(2).ToList(); var ucbUcList = hexData.Skip((int)ATypeOfDataItems49.UcbUc).Take(2).ToList();
var ucbUc = AnalyzeDataAccordingToA05(ucbUcList[0], ucbUcList[1]); var ucbUc = AnalyzeDataAccordingToA05(ucbUcList[0], ucbUcList[1]);
var iaList = hexDatas.Skip((int)ATypeOfDataItems49.Ia).Take(2).ToList(); var iaList = hexData.Skip((int)ATypeOfDataItems49.Ia).Take(2).ToList();
var ia = AnalyzeDataAccordingToA05(iaList[0], iaList[1]); var ia = AnalyzeDataAccordingToA05(iaList[0], iaList[1]);
var ibList = hexDatas.Skip((int)ATypeOfDataItems49.Ib).Take(2).ToList(); var ibList = hexData.Skip((int)ATypeOfDataItems49.Ib).Take(2).ToList();
var ib = AnalyzeDataAccordingToA05(ibList[0], ibList[1]); var ib = AnalyzeDataAccordingToA05(ibList[0], ibList[1]);
var icList = hexDatas.Skip((int)ATypeOfDataItems49.Ic).Take(2).ToList(); var icList = hexData.Skip((int)ATypeOfDataItems49.Ic).Take(2).ToList();
var ic = AnalyzeDataAccordingToA05(icList[0], icList[1]); var ic = AnalyzeDataAccordingToA05(icList[0], icList[1]);
return new Analyze3761Data() return new Analyze3761Data()
@ -573,15 +572,15 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
AFN = 12, AFN = 12,
FN = 49, FN = 49,
Text = "相位角", Text = "相位角",
DataUpChilds = new List<Analyze3761DataUpChild>() DataUpChilds =
{ [
new Analyze3761DataUpChild(1,"UabUa相位角",uabUa.ToString(),1), new Analyze3761DataUpChild(1, "UabUa相位角", uabUa.ToString(), 1),
new Analyze3761DataUpChild(2,"Ub相位角",ub.ToString(),2), new Analyze3761DataUpChild(2, "Ub相位角", ub.ToString(), 2),
new Analyze3761DataUpChild(3,"UcbUc相位角",ucbUc.ToString(),3), new Analyze3761DataUpChild(3, "UcbUc相位角", ucbUc.ToString(), 3),
new Analyze3761DataUpChild(4,"Ia相位角",ia.ToString(),4), new Analyze3761DataUpChild(4, "Ia相位角", ia.ToString(), 4),
new Analyze3761DataUpChild(5,"Ib相位角",ib.ToString(),5), new Analyze3761DataUpChild(5, "Ib相位角", ib.ToString(), 5),
new Analyze3761DataUpChild(6,"Ic相位角",ic.ToString(),6), new Analyze3761DataUpChild(6, "Ic相位角", ic.ToString(), 6)
} ]
}; };
} }
@ -593,7 +592,7 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
public virtual void AnalyzeTerminalTimeReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null) public virtual void AnalyzeTerminalTimeReadingDataAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null)
{ {
var hexDatas = GetHexDatas(messageReceived.MessageHexString); var hexDatas = GetHexData(messageReceived.MessageHexString);
var time = Appendix.Appendix_A1(hexDatas.Take(6).ToList()); var time = Appendix.Appendix_A1(hexDatas.Take(6).ToList());
} }
@ -616,14 +615,14 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
var tb3761Fn = tb3761.FnList.FirstOrDefault(it => it.Fn == fn); var tb3761Fn = tb3761.FnList.FirstOrDefault(it => it.Fn == fn);
if (tb3761Fn == null) return null; if (tb3761Fn == null) return null;
var hexDatas = (List<string>)hexStringList.GetAnalyzeValue(CommandChunkEnum.Data); var analyzeValue = (List<string>)hexStringList.GetAnalyzeValue(CommandChunkEnum.Data);
var m = 0; var m = 0;
var rateNumberUpSort = -1; var rateNumberUpSort = -1;
var rateNumberUp = tb3761Fn.UpList.FirstOrDefault(it => it.Name.Contains("费率数M")); var rateNumberUp = tb3761Fn.UpList.FirstOrDefault(it => it.Name.Contains("费率数M"));
if (rateNumberUp != null) if (rateNumberUp != null)
{ {
var rateNumber = hexDatas.Skip(rateNumberUp.DataIndex).Take(rateNumberUp.DataCount).FirstOrDefault(); var rateNumber = analyzeValue.Skip(rateNumberUp.DataIndex).Take(rateNumberUp.DataCount).FirstOrDefault();
m = Convert.ToInt32(rateNumber); m = Convert.ToInt32(rateNumber);
rateNumberUpSort = rateNumberUp.Sort; rateNumberUpSort = rateNumberUp.Sort;
} }
@ -640,7 +639,7 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
dataIndex = sum1 + sum2; dataIndex = sum1 + sum2;
} }
var value = AnalyzeDataAccordingDataType(hexDatas, dataIndex, up.DataCount, up.DataType); var value = AnalyzeDataAccordingDataType(analyzeValue, dataIndex, up.DataCount, up.DataType);
if (value != null) if (value != null)
{ {
up.Value = value.ToString(); up.Value = value.ToString();
@ -652,7 +651,7 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
{ {
for (var j = 0; j < repeatCount; j++) for (var j = 0; j < repeatCount; j++)
{ {
var val = AnalyzeDataAccordingDataType(hexDatas, dataIndex, upChild.DataCount, upChild.DataType); var val = AnalyzeDataAccordingDataType(analyzeValue, dataIndex, upChild.DataCount, upChild.DataType);
if (val != null) if (val != null)
{ {
upChild.Name = string.Format(upChild.Name, j + 1); upChild.Name = string.Format(upChild.Name, j + 1);
@ -688,11 +687,11 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
var tb3761Fn = tb3761.FnList.FirstOrDefault(it => it.Fn == fn); var tb3761Fn = tb3761.FnList.FirstOrDefault(it => it.Fn == fn);
if (tb3761Fn == null) return null; if (tb3761Fn == null) return null;
var hexDatas = (List<string>)hexStringList.GetAnalyzeValue(CommandChunkEnum.Data); var analyzeValue = (List<string>)hexStringList.GetAnalyzeValue(CommandChunkEnum.Data);
foreach (var up in tb3761Fn.UpList) foreach (var up in tb3761Fn.UpList)
{ {
var value = AnalyzeDataAccordingDataType(hexDatas, up.DataIndex, up.DataCount, up.DataType); var value = AnalyzeDataAccordingDataType(analyzeValue, up.DataIndex, up.DataCount, up.DataType);
if (value != null) if (value != null)
{ {
up.Value = value.ToString(); up.Value = value.ToString();
@ -705,7 +704,7 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
{ {
for (var j = 0; j < repeatCount; j++) for (var j = 0; j < repeatCount; j++)
{ {
var val = AnalyzeDataAccordingDataType(hexDatas, dataIndex, upChild.DataCount, upChild.DataType); var val = AnalyzeDataAccordingDataType(analyzeValue, dataIndex, upChild.DataCount, upChild.DataType);
if (val != null) if (val != null)
{ {
upChild.Value = val.ToString(); upChild.Value = val.ToString();
@ -741,9 +740,9 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
// } // }
} }
private object? AnalyzeDataAccordingDataType(List<string> hexDatas, int dataIndex,int dataCount,string dataType) private object? AnalyzeDataAccordingDataType(List<string> analyzeValue, int dataIndex,int dataCount,string dataType)
{ {
var valueList = hexDatas.Skip(dataIndex).Take(dataCount).ToList(); var valueList = analyzeValue.Skip(dataIndex).Take(dataCount).ToList();
object? value = null; object? value = null;
switch (dataType) switch (dataType)
{ {
@ -771,11 +770,11 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
case "A15": case "A15":
if (valueList.Count == 5) if (valueList.Count == 5)
{ {
//var minutes = Convert.ToInt32(hexDatas[0]); // 获取当前分钟数 //var minutes = Convert.ToInt32(analyzeValue[0]); // 获取当前分钟数
//var hours = Convert.ToInt32(hexDatas[1]); // 获取当前小时数 //var hours = Convert.ToInt32(analyzeValue[1]); // 获取当前小时数
//var day = Convert.ToInt32(hexDatas[2]); // 获取当前日期的日数 //var day = Convert.ToInt32(analyzeValue[2]); // 获取当前日期的日数
//var month = Convert.ToInt32(hexDatas[3]); // 获取当前月份 //var month = Convert.ToInt32(analyzeValue[3]); // 获取当前月份
//var year = Convert.ToInt32(hexDatas[4]); // 获取当前日期的年份 //var year = Convert.ToInt32(analyzeValue[4]); // 获取当前日期的年份
value = AnalyzeDataAccordingToA15(valueList[0], valueList[1], valueList[2], valueList[3], valueList[4]); value = AnalyzeDataAccordingToA15(valueList[0], valueList[1], valueList[2], valueList[3], valueList[4]);
} }
break; break;
@ -801,7 +800,7 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// <returns></returns> /// <returns></returns>
public virtual async Task AnalyzeTransparentForwardingAnswerAsync(MessageReceived messageReceivedEvent, Action<byte[]>? sendAction = null) public virtual async Task AnalyzeTransparentForwardingAnswerAsync(MessageReceived messageReceivedEvent, Action<byte[]>? sendAction = null)
{ {
var hexDatas = GetHexDatas(messageReceivedEvent.MessageHexString); var hexDatas = GetHexData(messageReceivedEvent.MessageHexString);
var port = hexDatas[0].HexToDec(); var port = hexDatas[0].HexToDec();
@ -828,7 +827,7 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// <returns></returns> /// <returns></returns>
public virtual async Task AnalyzeTransparentForwardingAnswerResultAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null) public virtual async Task AnalyzeTransparentForwardingAnswerResultAsync(MessageReceived messageReceived, Action<byte[]>? sendAction = null)
{ {
var hexDatas = GetHexDatas(messageReceived.MessageHexString); var hexDatas = GetHexData(messageReceived.MessageHexString);
var port = hexDatas[0].HexToDec(); var port = hexDatas[0].HexToDec();
@ -844,25 +843,25 @@ namespace JiShe.CollectBus.Protocol.Contracts.Abstracts
/// </summary> /// </summary>
/// <param name="messageHexString"></param> /// <param name="messageHexString"></param>
/// <returns></returns> /// <returns></returns>
public static List<string> GetHexDatas(string messageHexString) public static List<string> GetHexData(string messageHexString)
{ {
var hexStringList = messageHexString.StringToPairs(); var hexStringList = messageHexString.StringToPairs();
var hexDatas = (List<string>)hexStringList.GetAnalyzeValue(CommandChunkEnum.Data); var analyzeValue = (List<string>)hexStringList.GetAnalyzeValue(CommandChunkEnum.Data);
return hexDatas; return analyzeValue;
} }
/// <summary> /// <summary>
/// 解析时间标签 /// 解析时间标签
/// </summary> /// </summary>
/// <param name="hexDatas"></param> /// <param name="hexData"></param>
public void AnalysisTp(List<string> hexDatas) public void AnalysisTp(List<string> hexData)
{ {
var pFC = hexDatas[0].HexToDec();//启动帧帧序号计数器 var pFC = hexData[0].HexToDec();//启动帧帧序号计数器
var seconds = Convert.ToInt32(hexDatas[1]); // 获取当前秒数 var seconds = Convert.ToInt32(hexData[1]); // 获取当前秒数
var minutes = Convert.ToInt32(hexDatas[2]); // 获取当前分钟数 var minutes = Convert.ToInt32(hexData[2]); // 获取当前分钟数
var hours = Convert.ToInt32(hexDatas[3]); // 获取当前小时数 var hours = Convert.ToInt32(hexData[3]); // 获取当前小时数
var day = Convert.ToInt32(hexDatas[4]); // 获取当前日期的日数 var day = Convert.ToInt32(hexData[4]); // 获取当前日期的日数
var delayTime = hexDatas[5].HexToDec();//延迟时间 min var delayTime = hexData[5].HexToDec();//延迟时间 min
} }
#region #region