@@ -12,8 +12,9 @@ namespace JT809.Protocol.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 平台链路连接情况与车辆定位消息传输情况上报应答消息 | /// 平台链路连接情况与车辆定位消息传输情况上报应答消息 | ||||
/// <para>链路类型:主链路</para> | /// <para>链路类型:主链路</para> | ||||
/// <para>消息方向:上级平台往下级平台</para> | |||||
/// <para>消息方向:下级平台往上级平台</para> | |||||
/// <para>业务类型标识:UP_MANAGE_MSG_RSP</para> | /// <para>业务类型标识:UP_MANAGE_MSG_RSP</para> | ||||
/// <para>下级平台收到上级平台下发的“平台链路连接情况与车辆定位消息传输情况上报请求消息”后,上报指定平台,指定时间段内的平台链路连接情况与车辆定位消息传输情况</para> | |||||
/// </summary> | /// </summary> | ||||
public class JT809_0x1102 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_0x1102>,IJT809_2019_Version | public class JT809_0x1102 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_0x1102>,IJT809_2019_Version | ||||
{ | { | ||||
@@ -52,8 +53,6 @@ namespace JT809.Protocol.MessageBody | |||||
public JT809_0x1102 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_0x1102 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_0x1102 value = new JT809_0x1102(); | JT809_0x1102 value = new JT809_0x1102(); | ||||
value.SubBusinessType = reader.ReadUInt16(); | |||||
value.DataLength = reader.ReadUInt32(); | |||||
value.PlateformId = reader.ReadBigNumber(11); | value.PlateformId = reader.ReadBigNumber(11); | ||||
value.StartTime = reader.ReadUTCDateTime(); | value.StartTime = reader.ReadUTCDateTime(); | ||||
value.EndTime = reader.ReadUTCDateTime(); | value.EndTime = reader.ReadUTCDateTime(); | ||||
@@ -65,8 +64,6 @@ namespace JT809.Protocol.MessageBody | |||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1102 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1102 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteUInt16(value.SubBusinessType); | |||||
writer.WriteUInt32(36); | |||||
writer.WriteBigNumber(value.PlateformId, 11); | writer.WriteBigNumber(value.PlateformId, 11); | ||||
writer.WriteUTCDateTime(value.StartTime); | writer.WriteUTCDateTime(value.StartTime); | ||||
writer.WriteUTCDateTime(value.EndTime); | writer.WriteUTCDateTime(value.EndTime); | ||||
@@ -14,6 +14,7 @@ namespace JT809.Protocol.MessageBody | |||||
/// <para>链路类型:从链路</para> | /// <para>链路类型:从链路</para> | ||||
/// <para>消息方向:上级平台往下级平台</para> | /// <para>消息方向:上级平台往下级平台</para> | ||||
/// <para>业务类型标识:DOWN_MANAGE_MSG_REQ</para> | /// <para>业务类型标识:DOWN_MANAGE_MSG_REQ</para> | ||||
/// <para>描述:上级平台向下级平台发送上报指定下级监控平台一段时间内链路连接情况与车辆定位消息传输情况请求</para> | |||||
/// </summary> | /// </summary> | ||||
public class JT809_0x9102 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_0x9102>,IJT809_2019_Version | public class JT809_0x9102 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_0x9102>,IJT809_2019_Version | ||||
{ | { | ||||
@@ -40,8 +41,6 @@ namespace JT809.Protocol.MessageBody | |||||
public JT809_0x9102 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_0x9102 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_0x9102 value = new JT809_0x9102(); | JT809_0x9102 value = new JT809_0x9102(); | ||||
value.SubBusinessType = reader.ReadUInt16(); | |||||
value.DataLength = reader.ReadUInt32(); | |||||
value.PlateformId = reader.ReadBigNumber(11); | value.PlateformId = reader.ReadBigNumber(11); | ||||
value.StartTime = reader.ReadUTCDateTime(); | value.StartTime = reader.ReadUTCDateTime(); | ||||
value.EndTime = reader.ReadUTCDateTime(); | value.EndTime = reader.ReadUTCDateTime(); | ||||
@@ -50,8 +49,6 @@ namespace JT809.Protocol.MessageBody | |||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9102 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9102 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteUInt16(value.SubBusinessType); | |||||
writer.WriteUInt32(27); | |||||
writer.WriteBigNumber(value.PlateformId, 11); | writer.WriteBigNumber(value.PlateformId, 11); | ||||
writer.WriteUTCDateTime(value.StartTime); | writer.WriteUTCDateTime(value.StartTime); | ||||
writer.WriteUTCDateTime(value.EndTime); | writer.WriteUTCDateTime(value.EndTime); | ||||
@@ -21,9 +21,9 @@ namespace JT809.Protocol.Metadata | |||||
/// </summary> | /// </summary> | ||||
public byte[] GnssData { get; set; } | public byte[] GnssData { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 监控平台唯一编码,由平台所在地行政区域代码和平台编码组成 | |||||
/// 监控平台唯一编码,由平台所在地行政区域代码和平台编码组成 11位 | |||||
/// </summary> | /// </summary> | ||||
public byte[] PlatformId1 { get; set; } = new byte[11]; | |||||
public string PlatformId1 { get; set; }; | |||||
/// <summary> | /// <summary> | ||||
/// 报警状态,二进制标识 0 正常 1表示报警 | /// 报警状态,二进制标识 0 正常 1表示报警 | ||||
/// 具体定义按照808-2019中表18的规定 | /// 具体定义按照808-2019中表18的规定 | ||||
@@ -31,9 +31,9 @@ namespace JT809.Protocol.Metadata | |||||
public uint Alarm1 { get; set; } | public uint Alarm1 { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 市级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成 | /// 市级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成 | ||||
/// 未填写时,全填0,无市级平台应由省级平台全填1 | |||||
/// 未填写时,全填0,无市级平台应由省级平台全填1 11位 | |||||
/// </summary> | /// </summary> | ||||
public byte[] PlatformId2 { get; set; } = new byte[11]; | |||||
public string PlatformId2 { get; set; }; | |||||
/// <summary> | /// <summary> | ||||
/// 报警状态,二进制标识 0 正常 1表示报警 | /// 报警状态,二进制标识 0 正常 1表示报警 | ||||
/// 具体定义按照808-2019中表18的规定 | /// 具体定义按照808-2019中表18的规定 | ||||
@@ -41,9 +41,9 @@ namespace JT809.Protocol.Metadata | |||||
public uint Alarm2 { get; set; } | public uint Alarm2 { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 省级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成 | /// 省级监控平台唯一编码,由平台所在地行政区域代码和平台编码组成 | ||||
/// 未填写时,全填0 | |||||
/// 未填写时,全填0 11位 | |||||
/// </summary> | /// </summary> | ||||
public byte[] PlatformId3 { get; set; } = new byte[11]; | |||||
public string PlatformId3 { get; set; }; | |||||
/// <summary> | /// <summary> | ||||
/// 报警状态,二进制标识 0 正常 1表示报警 | /// 报警状态,二进制标识 0 正常 1表示报警 | ||||
/// 具体定义按照808-2019中表18的规定 | /// 具体定义按照808-2019中表18的规定 | ||||
@@ -51,8 +51,9 @@ namespace JT809.Protocol.SubMessageBody | |||||
{ | { | ||||
value.PlateformId = reader.ReadBigNumber(11); | value.PlateformId = reader.ReadBigNumber(11); | ||||
value.ProducerId = reader.ReadBigNumber(11); | value.ProducerId = reader.ReadBigNumber(11); | ||||
value.TerminalModelType = reader.ReadString(20); | |||||
value.TerminalId = reader.ReadString(7); | |||||
#warning 此处应该改成大端模式读取数据吧 | |||||
value.TerminalModelType = reader.ReadBigNumber(20); | |||||
value.TerminalId = reader.ReadBigNumber(7); | |||||
value.TerminalId = value.TerminalId.ToUpper(); | value.TerminalId = value.TerminalId.ToUpper(); | ||||
value.TerminalSimCode = reader.ReadString(12); | value.TerminalSimCode = reader.ReadString(12); | ||||
} | } | ||||
@@ -60,9 +61,9 @@ namespace JT809.Protocol.SubMessageBody | |||||
{ | { | ||||
value.PlateformId = reader.ReadBigNumber(11); | value.PlateformId = reader.ReadBigNumber(11); | ||||
value.ProducerId = reader.ReadBigNumber(11); | value.ProducerId = reader.ReadBigNumber(11); | ||||
value.TerminalModelType = reader.ReadString(30); | |||||
value.TerminalModelType = reader.ReadBigNumber(30); | |||||
value.IMIEId = reader.ReadString(15); | value.IMIEId = reader.ReadString(15); | ||||
value.TerminalId = reader.ReadString(30); | |||||
value.TerminalId = reader.ReadBigNumber(30); | |||||
value.TerminalId = value.TerminalId.ToUpper(); | value.TerminalId = value.TerminalId.ToUpper(); | ||||
value.TerminalSimCode = reader.ReadString(13); | value.TerminalSimCode = reader.ReadString(13); | ||||
} | } | ||||
@@ -75,17 +76,18 @@ namespace JT809.Protocol.SubMessageBody | |||||
{ | { | ||||
writer.WriteBigNumber(value.PlateformId, 11); | writer.WriteBigNumber(value.PlateformId, 11); | ||||
writer.WriteBigNumber(value.ProducerId, 11); | writer.WriteBigNumber(value.ProducerId, 11); | ||||
writer.WriteStringPadRight(value.TerminalModelType, 20); | |||||
writer.WriteStringPadRight(value.TerminalId.ToUpper(), 7); | |||||
#warning 此处应该改成大端模式读取数据吧 | |||||
writer.WriteBigNumber(value.TerminalModelType, 20); | |||||
writer.WriteBigNumber(value.TerminalId.ToUpper(), 7); | |||||
writer.WriteStringPadLeft(value.TerminalSimCode, 12); | writer.WriteStringPadLeft(value.TerminalSimCode, 12); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
writer.WriteBigNumber(value.PlateformId, 11); | writer.WriteBigNumber(value.PlateformId, 11); | ||||
writer.WriteBigNumber(value.ProducerId, 11); | writer.WriteBigNumber(value.ProducerId, 11); | ||||
writer.WriteStringPadRight(value.TerminalModelType, 30); | |||||
writer.WriteBigNumber(value.TerminalModelType, 30); | |||||
writer.WriteStringPadRight(value.IMIEId, 15); | writer.WriteStringPadRight(value.IMIEId, 15); | ||||
writer.WriteStringPadRight(value.TerminalId.ToUpper(), 30); | |||||
writer.WriteBigNumber(value.TerminalId.ToUpper(), 30); | |||||
writer.WriteStringPadLeft(value.TerminalSimCode, 13); | writer.WriteStringPadLeft(value.TerminalSimCode, 13); | ||||
} | } | ||||
} | } | ||||
@@ -8,30 +8,29 @@ using JT809.Protocol.Interfaces; | |||||
namespace JT809.Protocol.SubMessageBody | namespace JT809.Protocol.SubMessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 实时上传车辆定位信息 | |||||
/// 实时上传车辆定位信息消息 | |||||
/// <para>子业务类型标识:UP_EXG_MSG_REAL_LOCATION</para> | /// <para>子业务类型标识:UP_EXG_MSG_REAL_LOCATION</para> | ||||
/// <para>车辆的实时定位信息</para> | |||||
/// <para>无需应答</para> | |||||
/// </summary> | /// </summary> | ||||
public class JT809_0x1200_0x1202:JT809SubBodies, IJT809MessagePackFormatter<JT809_0x1200_0x1202>,IJT809_2019_Version | public class JT809_0x1200_0x1202:JT809SubBodies, IJT809MessagePackFormatter<JT809_0x1200_0x1202>,IJT809_2019_Version | ||||
{ | { | ||||
public override ushort SubMsgId => JT809SubBusinessType.实时上传车辆定位信息.ToUInt16Value(); | public override ushort SubMsgId => JT809SubBusinessType.实时上传车辆定位信息.ToUInt16Value(); | ||||
public override string Description => "实时上传车辆定位信息"; | public override string Description => "实时上传车辆定位信息"; | ||||
public JT809_0x1200_0x1202() | |||||
{ | |||||
VehiclePosition = new JT809VehiclePositionProperties(); | |||||
} | |||||
/// <summary> | /// <summary> | ||||
/// 车辆定位信息 | /// 车辆定位信息 | ||||
/// </summary> | /// </summary> | ||||
public JT809VehiclePositionProperties VehiclePosition { get; set; } | public JT809VehiclePositionProperties VehiclePosition { get; set; } | ||||
public JT809VehiclePositionProperties_2019 GnssData { get; set; } | |||||
public JT809VehiclePositionProperties_2019 GNSSData { get; set; } | |||||
public JT809_0x1200_0x1202 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_0x1200_0x1202 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_0x1200_0x1202 value = new JT809_0x1200_0x1202(); | JT809_0x1200_0x1202 value = new JT809_0x1200_0x1202(); | ||||
if (config.Version == JT809Version.JTT2011) | if (config.Version == JT809Version.JTT2011) | ||||
{ | { | ||||
value.VehiclePosition = new JT809VehiclePositionProperties(); | |||||
value.VehiclePosition.Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte(); | value.VehiclePosition.Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte(); | ||||
value.VehiclePosition.Day = reader.ReadByte(); | value.VehiclePosition.Day = reader.ReadByte(); | ||||
value.VehiclePosition.Month = reader.ReadByte(); | value.VehiclePosition.Month = reader.ReadByte(); | ||||
@@ -51,7 +50,16 @@ namespace JT809.Protocol.SubMessageBody | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
#warning JT809VehiclePositionProperties_2019 | |||||
value.GNSSData = new JT809VehiclePositionProperties_2019(); | |||||
value.GNSSData.Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte(); | |||||
value.GNSSData.DataLength = reader.ReadUInt32(); | |||||
value.GNSSData.GnssData = reader.ReadArray((int)value.GNSSData.DataLength).ToArray(); | |||||
value.GNSSData.PlatformId1 = reader.ReadBigNumber(11); | |||||
value.GNSSData.Alarm1 = reader.ReadUInt32(); | |||||
value.GNSSData.PlatformId2 = reader.ReadBigNumber(11); | |||||
value.GNSSData.Alarm2 = reader.ReadUInt32(); | |||||
value.GNSSData.PlatformId3 = reader.ReadBigNumber(11); | |||||
value.GNSSData.Alarm3 = reader.ReadUInt32(); | |||||
} | } | ||||
return value; | return value; | ||||
} | } | ||||
@@ -79,7 +87,16 @@ namespace JT809.Protocol.SubMessageBody | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
#warning JT809VehiclePositionProperties_2019 | |||||
writer.WriteByte((byte)value.GNSSData.Encrypt); | |||||
writer.Skip(4, out int position); | |||||
writer.WriteArray(value.GNSSData.GnssData); | |||||
writer.WriteBigNumber(value.GNSSData.PlatformId1,11); | |||||
writer.WriteUInt32(value.GNSSData.Alarm1); | |||||
writer.WriteBigNumber(value.GNSSData.PlatformId2,11); | |||||
writer.WriteUInt32(value.GNSSData.Alarm2); | |||||
writer.WriteBigNumber(value.GNSSData.PlatformId3,11); | |||||
writer.WriteUInt32(value.GNSSData.Alarm3); | |||||
writer.WriteUInt32Return((uint)(writer.GetCurrentPosition() - position - 4), position); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -6,19 +6,20 @@ using JT809.Protocol.Metadata; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using JT809.Protocol.Interfaces; | |||||
namespace JT809.Protocol.SubMessageBody | namespace JT809.Protocol.SubMessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 车辆定位信息自动补报请求消息 | /// 车辆定位信息自动补报请求消息 | ||||
/// <para>子业务类型标识:UP_EXG_MSG_HISTORY_LOCATION</para> | /// <para>子业务类型标识:UP_EXG_MSG_HISTORY_LOCATION</para> | ||||
/// <para>描述:如果平台间传输链路中断,下级平台重新登录并与上级平台建立通信链路后,下级平台应将中断期间内车载终端上传的车辆定位信息自动补报到上级平台。 | |||||
/// 如果系统断线期间,该车需发送的数据包条数大于 5,则以每包五条进行补发,直到补发完毕。 | |||||
/// 多条数据以卫星定位时间先后顺序排列。 | |||||
/// <para>描述: a: 如果平台间传输链路中断,下级平台重新登录并与上级平台建立通信链路后,下级平台应将中断期间内车载终端上传的车辆定位信息自动补报到上级平台。 | |||||
/// b: 如果系统断线期间,该车需发送的数据包条数大于 5,则以每包五条进行补发,直到补发完毕。 | |||||
/// 多条数据以卫星定位时间先后顺序排列。 | |||||
/// 本条消息上级平台采用定量回复,即收到一定数量的数据后,即通过从链路应答数据量。 | /// 本条消息上级平台采用定量回复,即收到一定数量的数据后,即通过从链路应答数据量。 | ||||
/// </para> | /// </para> | ||||
/// </summary> | /// </summary> | ||||
public class JT809_0x1200_0x1203 : JT809SubBodies, IJT809MessagePackFormatter<JT809_0x1200_0x1203> | |||||
public class JT809_0x1200_0x1203 : JT809SubBodies, IJT809MessagePackFormatter<JT809_0x1200_0x1203>, IJT809_2019_Version | |||||
{ | { | ||||
public override ushort SubMsgId => JT809SubBusinessType.车辆定位信息自动补报请求消息.ToUInt16Value(); | public override ushort SubMsgId => JT809SubBusinessType.车辆定位信息自动补报请求消息.ToUInt16Value(); | ||||
@@ -43,8 +44,7 @@ namespace JT809.Protocol.SubMessageBody | |||||
{ | { | ||||
try | try | ||||
{ | { | ||||
JT809MessagePackReader jT809_0x1200_0x1202Reader = new JT809MessagePackReader(reader.ReadArray(36)); | |||||
var jT809_0x1200_0x1202 = config.GetMessagePackFormatter<JT809_0x1200_0x1202>().Deserialize(ref jT809_0x1200_0x1202Reader, config); | |||||
var jT809_0x1200_0x1202 = config.GetMessagePackFormatter<JT809_0x1200_0x1202>().Deserialize(ref reader, config); | |||||
jT809_0X1200_0X1203.GNSS.Add(jT809_0x1200_0x1202); | jT809_0X1200_0X1203.GNSS.Add(jT809_0x1200_0x1202); | ||||
} | } | ||||
catch (Exception) | catch (Exception) | ||||