CRC校验解析

This commit is contained in:
高国正 2023-02-22 15:22:43 +08:00
parent b1b40f4a0f
commit 532f0f82c0
13 changed files with 343 additions and 184 deletions

View File

@ -591,7 +591,7 @@ namespace UdpServerCMD
DataLength.Append(message[i]);
}
int.Parse(hexStr2Str(DataLength.ToString()));
Console.WriteLine("数据部长度:" + int.Parse(hexStr2Str(DataLength.ToString())));
//Console.WriteLine("数据部长度:" + int.Parse(hexStr2Str(DataLength.ToString())));
StringBuilder SimID = new StringBuilder(""); //客户端地址A -- 11位时编码需在最后一字节低四位补 F
@ -609,7 +609,7 @@ namespace UdpServerCMD
SimID.Append(message[i]);
}
}
Console.WriteLine("客户端地址:" + SimID);
//Console.WriteLine("客户端地址:" + SimID);
StringBuilder _voltage = new StringBuilder("");//电压 --缩小10 倍为实际数值
@ -619,7 +619,7 @@ namespace UdpServerCMD
_voltage.Append(message[i]);
}
voltage = float.Parse(_voltage.ToString()) / 10;
Console.WriteLine("电压:" + voltage);
//Console.WriteLine("电压:" + voltage);
StringBuilder _signal = new StringBuilder("");//信号 --信号为整数
@ -629,7 +629,7 @@ namespace UdpServerCMD
_signal.Append(message[i]);
}
signal = int.Parse(_signal.ToString());
Console.WriteLine("信号:" + signal);
//Console.WriteLine("信号:" + signal);
StringBuilder date = new StringBuilder("20");//日期 --(BCD 码)
@ -640,7 +640,7 @@ namespace UdpServerCMD
else if (i == 33 || i == 35) date.Append(message[i] + ":");
else date.Append(message[i]);
}
Console.WriteLine("日期:" + date);
//Console.WriteLine("日期:" + date);
StringBuilder workPattern = new StringBuilder("");//工作模式 --0x00 定时开机0x01 实时在线
@ -648,6 +648,119 @@ namespace UdpServerCMD
{
workPattern.Append(message[i]);
}
//switch ((TypeworkPattern)int.Parse(workPattern.ToString()))
//{
// case TypeworkPattern.定时开机:
// Console.WriteLine(TypeworkPattern.定时开机);
// break;
// case TypeworkPattern.实时在线:
// Console.WriteLine(TypeworkPattern.实时在线);
// break;
// default:
// break;
//}
StringBuilder _meterNumber = new StringBuilder("");//仪表数量
StringBuilder meterNumber = new StringBuilder("");//仪表数量
for (int i = 40; i <= 41; i++)
{
_meterNumber.Append(message[i]);
}
meterNumber.Append(int.Parse(_meterNumber.ToString()).ToString() + "台");
//Console.WriteLine("仪表数量:" + meterNumber);
StringBuilder positionNumber = new StringBuilder("");//位置号 --取低 4 位为实际值
for (int i = 42; i <= 43; i++)
{
//if (i == 42) continue;//取低 4 位为实际值
positionNumber.Append(message[i]);
}
//Console.WriteLine("位置号:" + getLow4(byte.Parse(hexStr2Str(positionNumber.ToString()))) + "号");
StringBuilder phenotype = new StringBuilder("");//表型
for (int i = 44; i <= 45; i++)
{
phenotype.Append(message[i]);
}
//typePheno(phenotype);
StringBuilder versionMumber = new StringBuilder("");//版本号 --开始字节4A
for (int i = 46; i <= 87; i++)
{
if (i == 46 || i == 47) continue;
versionMumber.Append(message[i]);
}
versionMumber = hexToASCII(versionMumber.ToString());
//Console.WriteLine("版本号" + versionMumber);
StringBuilder reportingCycle = new StringBuilder("");//上报周期 --开始字节4B。115 15分钟 130:30 分钟24:24小时
for (int i = 88; i <= 91; i++)
{
if (i == 88 || i == 89) continue;
reportingCycle.Append(message[i]);
}
//if (int.Parse(hexStr2Str(reportingCycle.ToString())) != 24)
//{
// var v = new StringBuilder(hexStr2Str(reportingCycle.ToString()));
// v.Remove(0, 2);
// Console.WriteLine("上报周期: " + v + "h");
//}
//else if (int.Parse(hexStr2Str(reportingCycle.ToString())) == 24)
//{
// Console.WriteLine("上报周期: " + int.Parse(hexStr2Str(reportingCycle.ToString())) + "h");
//}
StringBuilder acquisitionCycle = new StringBuilder("");//采集周期 --开始字节4C。高字节在前单位
for (int i = 92; i <= 97; i++)
{
if (i == 92 || i == 93) continue;
acquisitionCycle.Append(message[i]);
}
Convert.ToInt64(acquisitionCycle.ToString(), 16);
//Console.WriteLine("采集周期:" + Convert.ToInt64(acquisitionCycle.ToString(), 16) / 60 + "分钟");
StringBuilder factoryCode = new StringBuilder("");//出厂编码 --开始字节4D。ASCII码
for (int i = 98; i <= 127; i++)
{
if (i == 98 || i == 99) continue;
factoryCode.Append(message[i]);
}
hexToASCII(factoryCode.ToString());
//Console.WriteLine("出厂编码:" + hexToASCII(factoryCode.ToString()));
StringBuilder retain = new StringBuilder("");//保留 --开始字节4F。不做处理
for (int i = 128; i <= 145; i++)
{
if (i == 128 || i == 129) continue;
retain.Append(message[i]);
}
//CRC校验
StringBuilder builder = new StringBuilder("");
for (int i = message.Length - 6; i < message.Length; i++)
{
builder.Append(message[i]);
}
if (binAccumulation(4, 145, message).ToUpper() != builder.ToString().ToUpper())
{
Console.WriteLine("接收数据校验失败" + ": " + message);
log.Info("登录帧校验失败" + ": " + message);
return;
}
Console.WriteLine("数据部长度:" + int.Parse(hexStr2Str(DataLength.ToString())));
Console.WriteLine("客户端地址:" + SimID);
Console.WriteLine("电压:" + voltage);
Console.WriteLine("信号:" + signal);
Console.WriteLine("日期:" + date);
switch ((TypeworkPattern)int.Parse(workPattern.ToString()))
{
case TypeworkPattern.:
@ -659,91 +772,22 @@ namespace UdpServerCMD
default:
break;
}
StringBuilder _meterNumber = new StringBuilder("");//仪表数量
StringBuilder meterNumber = new StringBuilder("");//仪表数量
for (int i = 40; i <= 41; i++)
{
_meterNumber.Append(message[i]);
}
meterNumber.Append(int.Parse(_meterNumber.ToString()).ToString() + "台");
Console.WriteLine("仪表数量:" + meterNumber);
StringBuilder positionNumber = new StringBuilder("");//位置号 --取低 4 位为实际值
for (int i = 42; i <= 43; i++)
{
//if (i == 42) continue;//取低 4 位为实际值
positionNumber.Append(message[i]);
}
Console.WriteLine("位置号:" + getLow4(byte.Parse(hexStr2Str(positionNumber.ToString()))) + "号");
StringBuilder phenotype = new StringBuilder("");//表型
for (int i = 44; i <= 45; i++)
{
phenotype.Append(message[i]);
}
typePheno(phenotype);
StringBuilder versionMumber = new StringBuilder("");//版本号 --开始字节4A
for (int i = 46; i <= 87; i++)
{
if (i == 46 || i == 47) continue;
versionMumber.Append(message[i]);
}
versionMumber = hexToASCII(versionMumber.ToString());
Console.WriteLine("版本号" + versionMumber);
StringBuilder reportingCycle = new StringBuilder("");//上报周期 --开始字节4B。115 15分钟 130:30 分钟24:24小时
for (int i = 88; i <= 91; i++)
{
if (i == 88 || i == 89) continue;
reportingCycle.Append(message[i]);
}
if (int.Parse(hexStr2Str(reportingCycle.ToString())) != 24)
{
var v = new StringBuilder(hexStr2Str(reportingCycle.ToString()));
v.Remove(0, 2);
Console.WriteLine(v + "h");
Console.WriteLine("上报周期: " + v + "h");
}
else if (int.Parse(hexStr2Str(reportingCycle.ToString())) == 24)
{
Console.WriteLine(int.Parse(hexStr2Str(reportingCycle.ToString())) + "h");
Console.WriteLine("上报周期: " + int.Parse(hexStr2Str(reportingCycle.ToString())) + "h");
}
StringBuilder acquisitionCycle = new StringBuilder("");//采集周期 --开始字节4C。高字节在前单位
for (int i = 92; i <= 97; i++)
{
if (i == 92 || i == 93) continue;
acquisitionCycle.Append(message[i]);
}
Convert.ToInt64(acquisitionCycle.ToString(), 16);
Console.WriteLine("采集周期:" + Convert.ToInt64(acquisitionCycle.ToString(), 16) / 60 + "分钟");
StringBuilder factoryCode = new StringBuilder("");//出厂编码 --开始字节4D。ASCII码
for (int i = 98; i <= 127; i++)
{
if (i == 98 || i == 99) continue;
factoryCode.Append(message[i]);
}
hexToASCII(factoryCode.ToString());
Console.WriteLine("出厂编码:" + hexToASCII(factoryCode.ToString()));
StringBuilder retain = new StringBuilder("");//保留 --开始字节4F。不做处理
for (int i = 128; i <= 145; i++)
{
if (i == 128 || i == 129) continue;
retain.Append(message[i]);
}
Console.WriteLine("校验位CS:" + binAccumulation(4, 145, message));
@ -1132,28 +1176,28 @@ namespace UdpServerCMD
baseNum = (68 + 16);
}
shareAnalysis(message, multiplier);
//shareAnalysis(message, multiplier);
StringBuilder validity = new StringBuilder("");//抄表数据有效 --无符号整型0x26 有效,其他无效
for (int i = 44 + multiplier; i <= 45 + multiplier; i++)
{
validity.Append(message[i]);
}
if (validity.ToString() == "26")
{
Console.WriteLine("抄表数据有效");
}
else
{
Console.WriteLine("抄表数据无效");
}
//if (validity.ToString() == "26")
//{
// Console.WriteLine("抄表数据有效");
//}
//else
//{
// Console.WriteLine("抄表数据无效");
//}
StringBuilder versionNum = new StringBuilder(""); //版本号 --整型
for (int i = 46 + multiplier; i <= 47 + multiplier; i++)
{
versionNum.Append(message[i]);
}
Console.WriteLine("版本号:" + int.Parse(versionNum.ToString()));
//Console.WriteLine("版本号:" + int.Parse(versionNum.ToString()));
StringBuilder instantaneousFlow = new StringBuilder("");//瞬时流量 --浮点型,缩小 1000 倍为实际值,单位: m3/h
for (int i = 48 + multiplier; i <= 55 + multiplier; i++)
@ -1161,7 +1205,7 @@ namespace UdpServerCMD
instantaneousFlow.Append(message[i]);
}
var _instantaneousFlow = byteToFloat(instantaneousFlow.ToString()) / 1000;
Console.WriteLine("瞬时流量" + _instantaneousFlow.ToString() + "m3/h");
//Console.WriteLine("瞬时流量" + _instantaneousFlow.ToString() + "m3/h");
StringBuilder _positiveFlow = new StringBuilder("");//累积流量 --带符号整型,低字节在前,高字节在后,缩小 10 倍为实际数值,单位: m3。
for (int i = 56 + multiplier; i <= 63 + multiplier; i++)
@ -1169,7 +1213,7 @@ namespace UdpServerCMD
_positiveFlow.Append(message[i]);
}
int positiveFlow = int.Parse(/*hexStr2Str*/(interconvert(56 + multiplier, 63 + multiplier, _positiveFlow.ToString()))) / 10;//???
Console.WriteLine("累积流量:" + positiveFlow + "m3");
//Console.WriteLine("累积流量:" + positiveFlow + "m3");
StringBuilder waterTemperature = new StringBuilder("");//水温 --浮点型,单位: ℃
for (int i = 64 + multiplier; i <= 71 + multiplier; i++)
@ -1177,7 +1221,7 @@ namespace UdpServerCMD
waterTemperature.Append(message[i]);
}
var _waterTemperature = byteToFloat(waterTemperature.ToString());//???
Console.WriteLine("水温:" + _waterTemperature + "℃");
//Console.WriteLine("水温:" + _waterTemperature + "℃");
StringBuilder _RunTime = new StringBuilder("");//累积运行时间 --带符号整型,低字节在前,高字节在后,单位: h
for (int i = 72 + multiplier; i <= 79 + multiplier; i++)
@ -1185,7 +1229,7 @@ namespace UdpServerCMD
_RunTime.Append(message[i]);
}
int RunTime = int.Parse(/*hexStr2Str*/(interconvert(72 + multiplier, 79 + multiplier, _RunTime.ToString())));//???
Console.WriteLine("累积运行时间:" + RunTime + "h");
//Console.WriteLine("累积运行时间:" + RunTime + "h");
StringBuilder _cellVoltage = new StringBuilder("");//电池电压 --浮点型,低字节在前,高字节在后,单位: v。
for (int i = 80 + multiplier; i <= 87 + multiplier; i++)
@ -1194,7 +1238,7 @@ namespace UdpServerCMD
}
//float cellVoltage = float.Parse(/*hexStr2Str*/(interconvert(80 + multiplier, 87 + multiplier, _cellVoltage.ToString())));
float cellVoltage = byteToFloat(_cellVoltage.ToString());//???
Console.WriteLine("电池电压:" + cellVoltage + "v");
//Console.WriteLine("电池电压:" + cellVoltage + "v");
StringBuilder _pipeSize = new StringBuilder("");//管径 --浮点型,单位: mm
for (int i = 88 + multiplier; i <= 95 + multiplier; i++)
@ -1203,14 +1247,14 @@ namespace UdpServerCMD
}
//float pipeSize = float.Parse(_pipeSize.ToString());
float pipeSize = byteToFloat(_pipeSize.ToString());//???
Console.WriteLine("管径:" + pipeSize + "mm");
//Console.WriteLine("管径:" + pipeSize + "mm");
StringBuilder capacity = new StringBuilder("");//量程 --长整型,单位:单位缺失。
for (int i = 96 + multiplier; i <= 103 + multiplier; i++)
{
capacity.Append(message[i]);
}
Console.WriteLine("量程:" + interconvert(0, 0, capacity.ToString()));//???
//Console.WriteLine("量程:" + interconvert(0, 0, capacity.ToString()));//???
StringBuilder dampingFactor = new StringBuilder("");//阻尼系数 --ASCII 码
for (int i = 104 + multiplier; i <= 105 + multiplier; i++)
@ -1230,6 +1274,40 @@ namespace UdpServerCMD
{
diagnose.Append(message[i]);
}
//typeMalfunction(diagnose);
//CRC校验
StringBuilder builder = new StringBuilder("");
for (int i = 112 + multiplier; i <= 113 + multiplier; i++)
{
builder.Append(message[i]);
}
if (binAccumulation(4 + multiplier, 111 + multiplier, message).ToUpper() != builder.ToString().ToUpper())
{
Console.WriteLine("接收数据校验失败" + ": " + message);
log.Info("登录帧校验失败" + ": " + message);
Isgo(message, baseNum);
return;
}
shareAnalysis(message, multiplier);
if (validity.ToString() == "26")
{
Console.WriteLine("抄表数据有效");
}
else
{
Console.WriteLine("抄表数据无效");
}
Console.WriteLine("版本号:" + int.Parse(versionNum.ToString()));
Console.WriteLine("瞬时流量" + _instantaneousFlow.ToString() + "m3/h");
Console.WriteLine("累积流量:" + positiveFlow + "m3");
Console.WriteLine("水温:" + _waterTemperature + "℃");
Console.WriteLine("累积运行时间:" + RunTime + "h");
Console.WriteLine("电池电压:" + cellVoltage + "v");
Console.WriteLine("管径:" + pipeSize + "mm");
Console.WriteLine("量程:" + interconvert(0, 0, capacity.ToString()));//???
typeMalfunction(diagnose);
//数据校验 --版本号-故障代码
@ -1260,28 +1338,28 @@ namespace UdpServerCMD
baseNum = (84 + 16);
}
shareAnalysis(message, multiplier);
//shareAnalysis(message, multiplier);
StringBuilder validity = new StringBuilder("");//抄表数据有效 --无符号整型0x26 有效,其他无效
for (int i = 44 + multiplier; i <= 45 + multiplier; i++)
{
validity.Append(message[i]);
}
if (validity.ToString() == "26")
{
Console.WriteLine("抄表数据有效");
}
else
{
Console.WriteLine("抄表数据无效");
}
//if (validity.ToString() == "26")
//{
// Console.WriteLine("抄表数据有效");
//}
//else
//{
// Console.WriteLine("抄表数据无效");
//}
StringBuilder versionNum = new StringBuilder(""); //版本号 --整型
for (int i = 46 + multiplier; i <= 47 + multiplier; i++)
{
versionNum.Append(message[i]);
}
Console.WriteLine("版本号:" + int.Parse(versionNum.ToString()));
//Console.WriteLine("版本号:" + int.Parse(versionNum.ToString()));
StringBuilder instantaneousFlow = new StringBuilder("");//瞬时流量 --浮点型,缩小 1000 倍为实际值,单位: m3/h
for (int i = 48 + multiplier; i <= 55 + multiplier; i++)
@ -1289,7 +1367,7 @@ namespace UdpServerCMD
instantaneousFlow.Append(message[i]);
}
//Console.WriteLine("瞬时流量" + float.Parse(instantaneousFlow.ToString()) / 1000 + "m3/h");//???
Console.WriteLine("瞬时流量" + byteToFloat(instantaneousFlow.ToString()) / 1000 + "m3/h");
//Console.WriteLine("瞬时流量" + byteToFloat(instantaneousFlow.ToString()) / 1000 + "m3/h");
StringBuilder _positiveFlow = new StringBuilder("");//正累积流量 --带符号整型,低字节在前,高字节在后,缩小 10 倍为实际数值,单位: m3
for (int i = 56 + multiplier; i <= 63 + multiplier; i++)
@ -1298,7 +1376,7 @@ namespace UdpServerCMD
}
//int positiveFlow = int.Parse(hexStr2Str(interconvert(56 + multiplier, 63 + multiplier, _positiveFlow.ToString()))) / 10;//???
var positiveFlow = float.Parse(/*hexStr2Str*/(interconvert(56 + multiplier, 63 + multiplier, _positiveFlow.ToString()))) / 10;
Console.WriteLine("正累积流量:" + positiveFlow + "m3");
//Console.WriteLine("正累积流量:" + positiveFlow + "m3");
StringBuilder loseFlow = new StringBuilder("");//负累积流量 --BCD 码缩小10 倍为实际数值单位
for (int i = 64 + multiplier; i <= 71 + multiplier; i++)
@ -1306,7 +1384,7 @@ namespace UdpServerCMD
loseFlow.Append(message[i]);
}
var _loseFlow = float.Parse(loseFlow.ToString()) / 10;
Console.WriteLine("负累积流量:" + _loseFlow + "m3");
//Console.WriteLine("负累积流量:" + _loseFlow + "m3");
StringBuilder loseRunTime = new StringBuilder("");//负累积运行时间 --BCD 码,单位: h。
for (int i = 72 + multiplier; i <= 79 + multiplier; i++)
@ -1314,7 +1392,7 @@ namespace UdpServerCMD
loseRunTime.Append(message[i]);
}
var _loseRunTime = int.Parse(loseRunTime.ToString());
Console.WriteLine("负累积运行时间:" + _loseRunTime + "h");
//Console.WriteLine("负累积运行时间:" + _loseRunTime + "h");
StringBuilder waterTemperature = new StringBuilder("");//水温 --浮点型,单位: ℃
for (int i = 80 + multiplier; i <= 87 + multiplier; i++)
@ -1322,7 +1400,7 @@ namespace UdpServerCMD
waterTemperature.Append(message[i]);
}
var _waterTemperature = byteToFloat(waterTemperature.ToString());//???
Console.WriteLine("水温:" + _waterTemperature + "℃");
//Console.WriteLine("水温:" + _waterTemperature + "℃");
StringBuilder _RunTime = new StringBuilder("");//累积运行时间 --带符号整型,低字节在前,高字节在后,单位: h
for (int i = 88 + multiplier; i <= 95 + multiplier; i++)
@ -1330,7 +1408,7 @@ namespace UdpServerCMD
_RunTime.Append(message[i]);
}
var RunTime = int.Parse(/*hexStr2Str*/(interconvert(88 + multiplier, 95 + multiplier, _RunTime.ToString())));//???
Console.WriteLine("累积运行时间:" + RunTime + "h");
//Console.WriteLine("累积运行时间:" + RunTime + "h");
StringBuilder _cellVoltage = new StringBuilder("");//电池电压 --浮点型,低字节在前,高字节在后,单位: v。
for (int i = 96 + multiplier; i <= 103 + multiplier; i++)
@ -1339,7 +1417,7 @@ namespace UdpServerCMD
}
//float cellVoltage = float.Parse(hexStr2Str(interconvert(96 + multiplier, 103 + multiplier, _cellVoltage.ToString())));//???
float cellVoltage = byteToFloat(_cellVoltage.ToString());
Console.WriteLine("电池电压:" + cellVoltage + "v");
//Console.WriteLine("电池电压:" + cellVoltage + "v");
StringBuilder _pipeSize = new StringBuilder("");//管径 --浮点型,单位: mm
for (int i = 104 + multiplier; i <= 111 + multiplier; i++)
@ -1348,14 +1426,14 @@ namespace UdpServerCMD
}
//float pipeSize = float.Parse(_pipeSize.ToString());//???
float pipeSize = byteToFloat(_pipeSize.ToString());
Console.WriteLine("管径:" + pipeSize + "mm");
//Console.WriteLine("管径:" + pipeSize + "mm");
StringBuilder capacity = new StringBuilder("");//量程 --长整型,单位:单位缺失。
for (int i = 112 + multiplier; i <= 119 + multiplier; i++)
{
capacity.Append(message[i]);
}
Console.WriteLine("量程:" + interconvert(0, 0, capacity.ToString()));//???
//Console.WriteLine("量程:" + interconvert(0, 0, capacity.ToString()));//???
StringBuilder dampingFactor = new StringBuilder("");//阻尼系数 --ASCII 码
for (int i = 120 + multiplier; i <= 121 + multiplier; i++)
@ -1375,6 +1453,43 @@ namespace UdpServerCMD
{
diagnose.Append(message[i]);
}
//typeMalfunction(diagnose);
//CRC校验
StringBuilder builder = new StringBuilder("");
for (int i = 128 + multiplier; i <= 129 + multiplier; i++)
{
builder.Append(message[i]);
}
if (binAccumulation(4 + multiplier, 127 + multiplier, message).ToUpper() != builder.ToString().ToUpper())
{
Console.WriteLine("接收数据校验失败" + ": " + message);
log.Info("登录帧校验失败" + ": " + message);
Isgo(message, baseNum);
return;
}
shareAnalysis(message, multiplier);
if (validity.ToString() == "26")
{
Console.WriteLine("抄表数据有效");
}
else
{
Console.WriteLine("抄表数据无效");
}
Console.WriteLine("版本号:" + int.Parse(versionNum.ToString()));
Console.WriteLine("瞬时流量" + byteToFloat(instantaneousFlow.ToString()) / 1000 + "m3/h");
Console.WriteLine("正累积流量:" + positiveFlow + "m3");
Console.WriteLine("负累积流量:" + _loseFlow + "m3");
Console.WriteLine("负累积运行时间:" + _loseRunTime + "h");
Console.WriteLine("水温:" + _waterTemperature + "℃");
Console.WriteLine("累积运行时间:" + RunTime + "h");
Console.WriteLine("电池电压:" + cellVoltage + "v");
Console.WriteLine("管径:" + pipeSize + "mm");
Console.WriteLine("量程:" + interconvert(0, 0, capacity.ToString()));//???
//Console.WriteLine("阻尼系数:" + hexToASCII(dampingFactor.ToString()));
typeMalfunction(diagnose);
//数据校验 --版本号-故障代码
@ -1405,13 +1520,128 @@ namespace UdpServerCMD
baseNum = (64 + 16);
}
shareAnalysis(message, multiplier);
//shareAnalysis(message, multiplier);
StringBuilder validity = new StringBuilder("");//抄表数据有效 --无符号整型0x26 有效,其他无效
for (int i = 44 + multiplier; i <= 45 + multiplier; i++)
{
validity.Append(message[i]);
}
//if (validity.ToString() == "26")
//{
// Console.WriteLine("抄表数据有效");
//}
//else
//{
// Console.WriteLine("抄表数据无效");
//}
StringBuilder signDelivery = new StringBuilder("");//瞬时流量正负值 --无符号整型0x00 代表正0x0a 代表负
for (int i = 46 + multiplier; i <= 47 + multiplier; i++)
{
signDelivery.Append(message[i]);
}
//if (signDelivery.ToString() == "00")
//{
// signDelivery.Clear().Append("");
// Console.WriteLine("瞬时流量为正值");
//}
//else
//{
// signDelivery.Clear().Append("-");
// Console.WriteLine("瞬时流量为负值");
//}
StringBuilder instantaneousFlow = new StringBuilder(""); //瞬时流量 --缩小 1000 倍为实际值,单位: m3/h
for (int i = 48 + multiplier; i <= 55 + multiplier; i++)
{
instantaneousFlow.Append(message[i]);
}
var _instantaneousFlow = float.Parse(instantaneousFlow.ToString()) / 1000;
//Console.WriteLine("瞬时流量:" + signDelivery + _instantaneousFlow + "m3/h");
StringBuilder loseFlow = new StringBuilder("");//负累积流量 --缩小 10 倍为实际数值,单位: m3
for (int i = 56 + multiplier; i <= 63 + multiplier; i++)
{
loseFlow.Append(message[i]);
}
var _loseFlow = float.Parse(loseFlow.ToString()) / 10;
//Console.WriteLine("负累积流量:" + signDelivery + _loseFlow + "m3");
StringBuilder loseRunTime = new StringBuilder("");//负累积运行时间 --单位: h
for (int i = 64 + multiplier; i <= 71 + multiplier; i++)
{
loseRunTime.Append(message[i]);
}
var _loseRunTime = int.Parse(loseRunTime.ToString());
//Console.WriteLine("负累积运行时间:" + _loseRunTime + "h");
StringBuilder positiveFlow = new StringBuilder("");//正累积流量 --缩小 10 倍为实际数值,单位: m3
for (int i = 72 + multiplier; i <= 79 + multiplier; i++)
{
positiveFlow.Append(message[i]);
}
var _positiveFlow = float.Parse(positiveFlow.ToString()) / 10;
//Console.WriteLine("正累积流量:" + _positiveFlow + "m3");
StringBuilder positiveRunTime = new StringBuilder("");//正累积运行时间 --单位: h
for (int i = 80 + multiplier; i <= 87 + multiplier; i++)
{
positiveRunTime.Append(message[i]);
}
var _positiveRunTime = int.Parse(positiveRunTime.ToString());
//Console.WriteLine("正累积运行时间:" + _positiveRunTime + "h");
StringBuilder waterTemperature = new StringBuilder("");//水温 --缩小 100 倍为实际数值,单位: ℃
for (int i = 88 + multiplier; i <= 95 + multiplier; i++)
{
waterTemperature.Append(message[i]);
}
var _waterTemperature = float.Parse(waterTemperature.ToString()) / 100;
//Console.WriteLine("水温:" + _waterTemperature + "℃");
StringBuilder pressure = new StringBuilder("");//压力 --缩小 1000 倍为实际数值,单位: mpa
for (int i = 96 + multiplier; i <= 103 + multiplier; i++)
{
pressure.Append(message[i]);
}
var _pressure = float.Parse(pressure.ToString()) / 1000;
//Console.WriteLine("压力:" + _pressure + "mpa");
StringBuilder diagnose = new StringBuilder("");//诊断代码(仪表故障码) --当设备上报 0x06 故障时,不应再上报其他故障。
for (int i = 104 + multiplier; i <= 105 + multiplier; i++)
{
diagnose.Append(message[i]);
}
//typeMalfunction(diagnose);
//CRC校验
StringBuilder builder = new StringBuilder("");
for (int i = 108 + multiplier; i <= 109 + multiplier; i++)
{
builder.Append(message[i]);
}
if (binAccumulation(4 + multiplier, 107 + multiplier, message).ToUpper() != builder.ToString().ToUpper())
{
Console.WriteLine("接收数据校验失败" + ": " + message);
log.Info("登录帧校验失败" + ": " + message);
Isgo(message, baseNum);
return;
}
shareAnalysis(message, multiplier);
if (validity.ToString() == "26")
{
Console.WriteLine("抄表数据有效");
@ -1420,13 +1650,6 @@ namespace UdpServerCMD
{
Console.WriteLine("抄表数据无效");
}
StringBuilder signDelivery = new StringBuilder("");//瞬时流量正负值 --无符号整型0x00 代表正0x0a 代表负
for (int i = 46 + multiplier; i <= 47 + multiplier; i++)
{
signDelivery.Append(message[i]);
}
if (signDelivery.ToString() == "00")
{
signDelivery.Clear().Append("");
@ -1437,77 +1660,13 @@ namespace UdpServerCMD
signDelivery.Clear().Append("-");
Console.WriteLine("瞬时流量为负值");
}
StringBuilder instantaneousFlow = new StringBuilder(""); //瞬时流量 --缩小 1000 倍为实际值,单位: m3/h
for (int i = 48 + multiplier; i <= 55 + multiplier; i++)
{
instantaneousFlow.Append(message[i]);
}
var _instantaneousFlow = float.Parse(instantaneousFlow.ToString()) / 1000;
Console.WriteLine("瞬时流量:" + signDelivery + _instantaneousFlow + "m3/h");
StringBuilder loseFlow = new StringBuilder("");//负累积流量 --缩小 10 倍为实际数值,单位: m3
for (int i = 56 + multiplier; i <= 63 + multiplier; i++)
{
loseFlow.Append(message[i]);
}
var _loseFlow = float.Parse(loseFlow.ToString()) / 10;
Console.WriteLine("负累积流量:" + signDelivery + _loseFlow + "m3");
StringBuilder loseRunTime = new StringBuilder("");//负累积运行时间 --单位: h
for (int i = 64 + multiplier; i <= 71 + multiplier; i++)
{
loseRunTime.Append(message[i]);
}
var _loseRunTime = int.Parse(loseRunTime.ToString());
Console.WriteLine("负累积运行时间:" + _loseRunTime + "h");
StringBuilder positiveFlow = new StringBuilder("");//正累积流量 --缩小 10 倍为实际数值,单位: m3
for (int i = 72 + multiplier; i <= 79 + multiplier; i++)
{
positiveFlow.Append(message[i]);
}
var _positiveFlow = float.Parse(positiveFlow.ToString()) / 10;
Console.WriteLine("正累积流量:" + _positiveFlow + "m3");
StringBuilder positiveRunTime = new StringBuilder("");//正累积运行时间 --单位: h
for (int i = 80 + multiplier; i <= 87 + multiplier; i++)
{
positiveRunTime.Append(message[i]);
}
var _positiveRunTime = int.Parse(positiveRunTime.ToString());
Console.WriteLine("正累积运行时间:" + _positiveRunTime + "h");
StringBuilder waterTemperature = new StringBuilder("");//水温 --缩小 100 倍为实际数值,单位: ℃
for (int i = 88 + multiplier; i <= 95 + multiplier; i++)
{
waterTemperature.Append(message[i]);
}
var _waterTemperature = float.Parse(waterTemperature.ToString()) / 100;
Console.WriteLine("水温:" + _waterTemperature + "℃");
StringBuilder pressure = new StringBuilder("");//压力 --缩小 1000 倍为实际数值,单位: mpa
for (int i = 96 + multiplier; i <= 103 + multiplier; i++)
{
pressure.Append(message[i]);
}
var _pressure = float.Parse(pressure.ToString()) / 1000;
Console.WriteLine("压力:" + _pressure + "mpa");
StringBuilder diagnose = new StringBuilder("");//诊断代码(仪表故障码) --当设备上报 0x06 故障时,不应再上报其他故障。
for (int i = 104 + multiplier; i <= 105 + multiplier; i++)
{
diagnose.Append(message[i]);
}
typeMalfunction(diagnose);
//数据校验 --瞬时流量符号-故障代码