diff --git a/UdpServerCMD/.vs/UdpServerCMD/FileContentIndex/63512879-9d5d-481c-ad13-24345f37db83.vsidx b/UdpServerCMD/.vs/UdpServerCMD/FileContentIndex/3e5f9bab-3c95-43fa-8ca4-3d3c8c572c85.vsidx similarity index 99% rename from UdpServerCMD/.vs/UdpServerCMD/FileContentIndex/63512879-9d5d-481c-ad13-24345f37db83.vsidx rename to UdpServerCMD/.vs/UdpServerCMD/FileContentIndex/3e5f9bab-3c95-43fa-8ca4-3d3c8c572c85.vsidx index a4a749b..8ee05d8 100644 Binary files a/UdpServerCMD/.vs/UdpServerCMD/FileContentIndex/63512879-9d5d-481c-ad13-24345f37db83.vsidx and b/UdpServerCMD/.vs/UdpServerCMD/FileContentIndex/3e5f9bab-3c95-43fa-8ca4-3d3c8c572c85.vsidx differ diff --git a/UdpServerCMD/.vs/UdpServerCMD/FileContentIndex/85bc6ccf-30a7-41c6-a23c-377df574b000.vsidx b/UdpServerCMD/.vs/UdpServerCMD/FileContentIndex/85bc6ccf-30a7-41c6-a23c-377df574b000.vsidx deleted file mode 100644 index 347d5ec..0000000 Binary files a/UdpServerCMD/.vs/UdpServerCMD/FileContentIndex/85bc6ccf-30a7-41c6-a23c-377df574b000.vsidx and /dev/null differ diff --git a/UdpServerCMD/.vs/UdpServerCMD/FileContentIndex/eb03b6b5-06a1-4ac7-a7cc-fba8445ed795.vsidx b/UdpServerCMD/.vs/UdpServerCMD/FileContentIndex/eb03b6b5-06a1-4ac7-a7cc-fba8445ed795.vsidx new file mode 100644 index 0000000..09a9009 Binary files /dev/null and b/UdpServerCMD/.vs/UdpServerCMD/FileContentIndex/eb03b6b5-06a1-4ac7-a7cc-fba8445ed795.vsidx differ diff --git a/UdpServerCMD/.vs/UdpServerCMD/v17/.suo b/UdpServerCMD/.vs/UdpServerCMD/v17/.suo index cb33a1e..25b8e80 100644 Binary files a/UdpServerCMD/.vs/UdpServerCMD/v17/.suo and b/UdpServerCMD/.vs/UdpServerCMD/v17/.suo differ diff --git a/UdpServerCMD/Program.cs b/UdpServerCMD/Program.cs index 4cd8163..a01c9d9 100644 --- a/UdpServerCMD/Program.cs +++ b/UdpServerCMD/Program.cs @@ -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); //数据校验 --瞬时流量符号-故障代码 diff --git a/UdpServerCMD/bin/Debug/UdpServerCMD.exe b/UdpServerCMD/bin/Debug/UdpServerCMD.exe index 207ad8b..c23e264 100644 Binary files a/UdpServerCMD/bin/Debug/UdpServerCMD.exe and b/UdpServerCMD/bin/Debug/UdpServerCMD.exe differ diff --git a/UdpServerCMD/bin/Debug/UdpServerCMD.pdb b/UdpServerCMD/bin/Debug/UdpServerCMD.pdb index 08f9756..91b8d5e 100644 Binary files a/UdpServerCMD/bin/Debug/UdpServerCMD.pdb and b/UdpServerCMD/bin/Debug/UdpServerCMD.pdb differ diff --git a/UdpServerCMD/bin/Release/UdpServerCMD.exe b/UdpServerCMD/bin/Release/UdpServerCMD.exe index db263ee..6f8826e 100644 Binary files a/UdpServerCMD/bin/Release/UdpServerCMD.exe and b/UdpServerCMD/bin/Release/UdpServerCMD.exe differ diff --git a/UdpServerCMD/bin/Release/UdpServerCMD.pdb b/UdpServerCMD/bin/Release/UdpServerCMD.pdb index 0745a8e..d97fe45 100644 Binary files a/UdpServerCMD/bin/Release/UdpServerCMD.pdb and b/UdpServerCMD/bin/Release/UdpServerCMD.pdb differ diff --git a/UdpServerCMD/obj/Debug/UdpServerCMD.exe b/UdpServerCMD/obj/Debug/UdpServerCMD.exe index 207ad8b..c23e264 100644 Binary files a/UdpServerCMD/obj/Debug/UdpServerCMD.exe and b/UdpServerCMD/obj/Debug/UdpServerCMD.exe differ diff --git a/UdpServerCMD/obj/Debug/UdpServerCMD.pdb b/UdpServerCMD/obj/Debug/UdpServerCMD.pdb index 08f9756..91b8d5e 100644 Binary files a/UdpServerCMD/obj/Debug/UdpServerCMD.pdb and b/UdpServerCMD/obj/Debug/UdpServerCMD.pdb differ diff --git a/UdpServerCMD/obj/Release/UdpServerCMD.exe b/UdpServerCMD/obj/Release/UdpServerCMD.exe index db263ee..6f8826e 100644 Binary files a/UdpServerCMD/obj/Release/UdpServerCMD.exe and b/UdpServerCMD/obj/Release/UdpServerCMD.exe differ diff --git a/UdpServerCMD/obj/Release/UdpServerCMD.pdb b/UdpServerCMD/obj/Release/UdpServerCMD.pdb index 0745a8e..d97fe45 100644 Binary files a/UdpServerCMD/obj/Release/UdpServerCMD.pdb and b/UdpServerCMD/obj/Release/UdpServerCMD.pdb differ