CRC校验解析
This commit is contained in:
parent
b1b40f4a0f
commit
532f0f82c0
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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 倍为实际数值,单位:m³
|
||||
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);
|
||||
|
||||
//数据校验 --瞬时流量符号-故障代码
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue