数据整理
This commit is contained in:
		
							parent
							
								
									772514da44
								
							
						
					
					
						commit
						ceea3b2291
					
				
							
								
								
									
										106
									
								
								langguanApi.xml
								
								
								
								
							
							
						
						
									
										106
									
								
								langguanApi.xml
								
								
								
								
							| 
						 | 
					@ -472,7 +472,7 @@
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="M:langguanApi.Controllers.TransportController.list(langguanApi.Model.reqpage)">
 | 
					        <member name="M:langguanApi.Controllers.TransportController.list(langguanApi.Model.reqpage)">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            获取清洁运输列表
 | 
					            清洁运输:获取门禁数据和详情
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
            <param name="input"></param>
 | 
					            <param name="input"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
| 
						 | 
					@ -499,14 +499,14 @@
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="M:langguanApi.Controllers.TransportController.WasherList">
 | 
					        <member name="M:langguanApi.Controllers.TransportController.WasherList">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            获取洗车机列表
 | 
					            洗车机:获取洗车机列表和右侧洗车状态等数据,默认右侧显示第一条的记录
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
            <param name="input"></param>
 | 
					            <param name="input"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="M:langguanApi.Controllers.TransportController.WasherHistoryList(langguanApi.Model.transportReqPage)">
 | 
					        <member name="M:langguanApi.Controllers.TransportController.WasherHistoryList(langguanApi.Model.transportReqPage)">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            获取洗车机历史记录(起始时间和结束时间非空,根据起始时间和结束时间筛选数据,如果为空,默认获取30条数据)
 | 
					            洗车机:获取历史记录 和导出历史记录
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
            <param name="input"></param>
 | 
					            <param name="input"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
| 
						 | 
					@ -520,7 +520,7 @@
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="M:langguanApi.Controllers.TransportController.GetTransport(langguanApi.Model.transportReqPage)">
 | 
					        <member name="M:langguanApi.Controllers.TransportController.GetTransport(langguanApi.Model.transportReqPage)">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            获取清洁运输(门禁和地磅组合,地磅获取总重量,后期会用地磅重量-车辆车辆)
 | 
					             清洁运输:获取清洁运输列表和饼图比例数据            
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
            <param name="reqPage"></param>
 | 
					            <param name="reqPage"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
| 
						 | 
					@ -759,6 +759,56 @@
 | 
				
			||||||
            车牌类型
 | 
					            车牌类型
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:langguanApi.Model.CleanTransportationDto.Effluent">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            排放类型
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:langguanApi.Model.CleanTransportationAllDto.cleans">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            清洁运输总记录
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:langguanApi.Model.CleanTransportationAllDto.V5Percent">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            国五百分比
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:langguanApi.Model.CleanTransportationAllDto.V5WeightPercent">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            国五运输量百分比
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:langguanApi.Model.CleanTransportationAllDto.V6Percent">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            国六百分比
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:langguanApi.Model.CleanTransportationAllDto.V6WeightPercent">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            国六运输量百分比
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:langguanApi.Model.CleanTransportationAllDto.ElectricPrecent">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            电动百分比
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:langguanApi.Model.CleanTransportationAllDto.ElectricWeightPrecent">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            电动运输量百分比
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:langguanApi.Model.CleanTransportationAllDto.OtherPrecent">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            其他百分比
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:langguanApi.Model.CleanTransportationAllDto.OtherWeightPrecent">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            其他运输量百分比
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="P:langguanApi.Model.columnView.hour">
 | 
					        <member name="P:langguanApi.Model.columnView.hour">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
| 
						 | 
					@ -1957,7 +2007,7 @@
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="P:langguanApi.Model.Transport.effluent">
 | 
					        <member name="P:langguanApi.Model.Transport.effluent">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            排放标准
 | 
					            排放标准(0-7是国1-7,D:电动  X:无排放阶段)
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="P:langguanApi.Model.Transport.imgUrl">
 | 
					        <member name="P:langguanApi.Model.Transport.imgUrl">
 | 
				
			||||||
| 
						 | 
					@ -2315,21 +2365,6 @@
 | 
				
			||||||
            运行状态(RunStatus,0表示异常,1表示正常)
 | 
					            运行状态(RunStatus,0表示异常,1表示正常)
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="P:langguanApi.Model.GetWasherDto.WPAlarmString">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            水压报警(WPAlarm 0表示异常,1表示正常)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:langguanApi.Model.GetWasherDto.PSAlarmString">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            相序报警(PSAlarm0表示异常,1表示正常)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:langguanApi.Model.GetWasherDto.FaultAlarmString">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            故障报警(FaultAlarm 0表示异常,1表示正常)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:langguanApi.Model.GetWasherDto.RinsePressure">
 | 
					        <member name="P:langguanApi.Model.GetWasherDto.RinsePressure">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            冲洗压力
 | 
					            冲洗压力
 | 
				
			||||||
| 
						 | 
					@ -2345,26 +2380,6 @@
 | 
				
			||||||
            冲洗电压(RinseVoltage  单位V)
 | 
					            冲洗电压(RinseVoltage  单位V)
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="P:langguanApi.Model.GetWasherDto.Discharge">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            水流量(Discharge  单位T)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:langguanApi.Model.GetWasherDto.Electricity">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            电量(Electricity  KW/H)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:langguanApi.Model.GetWasherDto.Current">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            电流(Current A)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:langguanApi.Model.GetWasherDto.WaterPressure">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            水压(WaterPressure MPa)
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="P:langguanApi.Model.GetWasherDto.EquipmentId">
 | 
					        <member name="P:langguanApi.Model.GetWasherDto.EquipmentId">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            洗车机编码
 | 
					            洗车机编码
 | 
				
			||||||
| 
						 | 
					@ -3146,7 +3161,7 @@
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="M:langguanApi.Service.TransportService.GetTransport(langguanApi.Model.transportReqPage)">
 | 
					        <member name="M:langguanApi.Service.TransportService.GetTransport(langguanApi.Model.transportReqPage)">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            获取清洁运输列表(门禁和地磅组合)
 | 
					             获取清洁运输趋势列表(门禁和地磅组合,地磅获取总重量,后期会用地磅重量-车辆车辆)
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
            <param name="input"></param>
 | 
					            <param name="input"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
| 
						 | 
					@ -3158,6 +3173,13 @@
 | 
				
			||||||
            <param name="color"></param>
 | 
					            <param name="color"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:langguanApi.Service.TransportService.GetEffluentString(System.String)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					             排放标准(0-7是国1-7,D:电动  X:无排放阶段)
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="effluent"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="M:langguanApi.Service.TruckScalesService.AddTruckScalesList(System.Collections.Generic.List{langguanApi.Model.AddTruckScalesDto})">
 | 
					        <member name="M:langguanApi.Service.TruckScalesService.AddTruckScalesList(System.Collections.Generic.List{langguanApi.Model.AddTruckScalesDto})">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            新加
 | 
					            新加
 | 
				
			||||||
| 
						 | 
					@ -3247,7 +3269,7 @@
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="M:langguanApi.Service.WasherService.WasherHistoryList(langguanApi.Model.transportReqPage)">
 | 
					        <member name="M:langguanApi.Service.WasherService.WasherHistoryList(langguanApi.Model.transportReqPage)">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            获取洗车机历史记录
 | 
					            获取洗车机历史记录(起始时间和结束时间非空,根据起始时间和结束时间筛选数据,如果为空,默认获取30条数据)
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
            <param name="input"></param>
 | 
					            <param name="input"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,27 +45,8 @@ namespace langguanApi.Controllers
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // 示例数据(需替换为实际接收到的协议数据)
 | 
					            // 示例数据(需替换为实际接收到的协议数据)
 | 
				
			||||||
            string hexData = "787811010868120321167279808D3202001AB12F0D0A";
 | 
					            string hexData = "787811010868120321167279808D3202001AB12F0D0A";
 | 
				
			||||||
            byte[] protocolData = HexStringToByteArray(hexData);
 | 
					            byte[] loginPacket = BuildLoginPacket("123456789012345"); // 替换为实际的IMEI
 | 
				
			||||||
            // 进行转义还原
 | 
					   
 | 
				
			||||||
            byte[] restoredData = RestoreEscape(protocolData);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // 验证校验码
 | 
					 | 
				
			||||||
            if (!VerifyChecksum(restoredData))
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Console.WriteLine("Checksum verification failed.");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            Position? position = ParsePosition(restoredData);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (position.HasValue)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Console.WriteLine($"Latitude: {position.Value.Latitude}");
 | 
					 | 
				
			||||||
                Console.WriteLine($"Longitude: {position.Value.Longitude}");
 | 
					 | 
				
			||||||
                Console.WriteLine($"Altitude: {position.Value.Altitude}");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Console.WriteLine("Failed to parse position.");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            //       Console.WriteLine("经度:" + lon + " 纬度:" + lat);
 | 
					            //       Console.WriteLine("经度:" + lon + " 纬度:" + lat);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //  string rawText = "数据报:##0250QN=20240424224800000;ST=22;CN=2011;PW=123456;MN=LGYC022024690001;Flag=5;CP=&&DataTime=20240424224800;a34001-Rtd=356.2";
 | 
					            //  string rawText = "数据报:##0250QN=20240424224800000;ST=22;CN=2011;PW=123456;MN=LGYC022024690001;Flag=5;CP=&&DataTime=20240424224800;a34001-Rtd=356.2";
 | 
				
			||||||
| 
						 | 
					@ -108,58 +89,109 @@ namespace langguanApi.Controllers
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private static bool VerifyChecksum(byte[] data)
 | 
					        static byte[] BuildLoginPacket(string imei)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // 校验码在数据包的倒数第二个字节
 | 
					            using (MemoryStream ms = new MemoryStream())
 | 
				
			||||||
            byte receivedChecksum = data[data.Length - 2];
 | 
					 | 
				
			||||||
            byte calculatedChecksum = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // 校验范围是从第一个字节到倒数第三个字节
 | 
					 | 
				
			||||||
            for (int i = 0; i < data.Length - 2; i++)
 | 
					 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                calculatedChecksum ^= data[i];
 | 
					                BinaryWriter writer = new BinaryWriter(ms);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                writer.Write(new byte[] { 0x78, 0x78 }); // 起始位
 | 
				
			||||||
 | 
					                writer.Write((byte)0x0D); // 包长度
 | 
				
			||||||
 | 
					                writer.Write((byte)0x01); // 协议号
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                byte[] imeiBytes = Encoding.ASCII.GetBytes(imei);
 | 
				
			||||||
 | 
					                writer.Write(imeiBytes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                writer.Write((short)0x0001); // 信息序列号
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                byte[] content = ms.ToArray();
 | 
				
			||||||
 | 
					                short crc = CalculateCRC(content, 2, content.Length - 2);
 | 
				
			||||||
 | 
					                writer.Write(crc); // 错误校验
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                writer.Write(new byte[] { 0x0D, 0x0A }); // 停止位
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return ms.ToArray();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					 | 
				
			||||||
            return receivedChecksum == calculatedChecksum;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        private static byte[] RestoreEscape(byte[] data)
 | 
					        static short CalculateCRC(byte[] data, int start, int length)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            List<byte> result = new List<byte>();
 | 
					            // CRC计算方法(参考协议中的CRC-ITU算法)
 | 
				
			||||||
            for (int i = 0; i < data.Length; i++)
 | 
					            ushort crc = 0xFFFF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (int i = start; i < start + length; i++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (data[i] == 0x7D)
 | 
					                crc = (ushort)(crc ^ (data[i] << 8));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for (int j = 0; j < 8; j++)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (i + 1 < data.Length)
 | 
					                    if ((crc & 0x8000) != 0)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        if (data[i + 1] == 0x02)
 | 
					                        crc = (ushort)((crc << 1) ^ 0x1021);
 | 
				
			||||||
                        {
 | 
					                    }
 | 
				
			||||||
                            result.Add(0x7E);
 | 
					                    else
 | 
				
			||||||
                            i++;
 | 
					                    {
 | 
				
			||||||
                        }
 | 
					                        crc <<= 1;
 | 
				
			||||||
                        else if (data[i + 1] == 0x01)
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            result.Add(0x7D);
 | 
					 | 
				
			||||||
                            i++;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return (short)crc;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        static void ParseServerResponse(byte[] data, int length)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (length < 10) // 根据协议响应包最小长度
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Console.WriteLine("响应包长度错误");
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (data[0] == 0x78 && data[1] == 0x78)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Console.WriteLine("起始位正确");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                byte protocolNumber = data[3];
 | 
				
			||||||
 | 
					                if (protocolNumber == 0x01)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    result.Add(data[i]);
 | 
					                    Console.WriteLine("协议号正确: 登录信息包响应");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    byte[] sequenceNumber = new byte[2];
 | 
				
			||||||
 | 
					                    Array.Copy(data, 4, sequenceNumber, 0, 2);
 | 
				
			||||||
 | 
					                    Console.WriteLine($"信息序列号: {BitConverter.ToString(sequenceNumber)}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    byte[] crc = new byte[2];
 | 
				
			||||||
 | 
					                    Array.Copy(data, length - 4, crc, 0, 2);
 | 
				
			||||||
 | 
					                    Console.WriteLine($"CRC: {BitConverter.ToString(crc)}");
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            return result.ToArray();
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        private static byte[] HexStringToByteArray(string hex)
 | 
					        static void ParseLocationPacket(byte[] data, int length)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            int NumberChars = hex.Length;
 | 
					            if (length < 16) // 根据协议位置数据包最小长度
 | 
				
			||||||
            byte[] bytes = new byte[NumberChars / 2];
 | 
					 | 
				
			||||||
            for (int i = 0; i < NumberChars; i += 2)
 | 
					 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
 | 
					                Console.WriteLine("位置数据包长度错误");
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (data[0] == 0x78 && data[1] == 0x78)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Console.WriteLine("起始位正确");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                byte protocolNumber = data[3];
 | 
				
			||||||
 | 
					                if (protocolNumber == 0x12) // 位置数据包协议号
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Console.WriteLine("协议号正确: 位置数据包");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    int latitude = (data[5] & 0xFF) << 24 | (data[6] & 0xFF) << 16 | (data[7] & 0xFF) << 8 | (data[8] & 0xFF);
 | 
				
			||||||
 | 
					                    int longitude = (data[9] & 0xFF) << 24 | (data[10] & 0xFF) << 16 | (data[11] & 0xFF) << 8 | (data[12] & 0xFF);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    double lat = latitude / 1800000.0;
 | 
				
			||||||
 | 
					                    double lon = longitude / 1800000.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    Console.WriteLine($"纬度: {lat}, 经度: {lon}");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            return bytes;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public struct Position
 | 
					        public struct Position
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            public double Latitude;
 | 
					            public double Latitude;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,6 +98,7 @@ namespace langguanApi.Service
 | 
				
			||||||
            if (hj.DecodeData(rawText))
 | 
					            if (hj.DecodeData(rawText))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var body = JsonConvert.SerializeObject(hj.CP);
 | 
					                var body = JsonConvert.SerializeObject(hj.CP);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                Console.WriteLine("解析成功: " + body);
 | 
					                Console.WriteLine("解析成功: " + body);
 | 
				
			||||||
                var entity = JsonConvert.DeserializeObject<Model.HJ212>(body);
 | 
					                var entity = JsonConvert.DeserializeObject<Model.HJ212>(body);
 | 
				
			||||||
                entity.deviceMN = hj.DATA_HEAD["MN"];
 | 
					                entity.deviceMN = hj.DATA_HEAD["MN"];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue