|
@@ -25,8 +25,444 @@ |
|
|
|
|
|
|
|
|
> 根据对应消息ID:MsgId |
|
|
> 根据对应消息ID:MsgId |
|
|
|
|
|
|
|
|
|
|
|
### 举个栗子1 |
|
|
|
|
|
|
|
|
|
|
|
#### 1.组包: |
|
|
|
|
|
|
|
|
|
|
|
> MsgId 0x02:实时信息上报 |
|
|
|
|
|
|
|
|
|
|
|
``` package |
|
|
|
|
|
JTNEPackage jTNEPackage = new JTNEPackage(); |
|
|
|
|
|
//消息头 |
|
|
|
|
|
jTNEPackage.AskId = JTNEAskId.Success.ToByteValue(); |
|
|
|
|
|
jTNEPackage.MsgId = JTNEMsgId.uploadim.ToByteValue(); |
|
|
|
|
|
jTNEPackage.VIN = "123456789"; |
|
|
|
|
|
//消息体 |
|
|
|
|
|
JTNE_0x02 jTNE_0X02 = new JTNE_0x02(); |
|
|
|
|
|
jTNE_0X02.Values = new Dictionary<byte, JTNE_0x02_Body>(); |
|
|
|
|
|
//整车数据 |
|
|
|
|
|
JTNE_0x02_0x01 jTNE_0X02_0X01 = new JTNE_0x02_0x01(); |
|
|
|
|
|
jTNE_0X02_0X01.Accelerator = 0x02; |
|
|
|
|
|
jTNE_0X02_0X01.Brakes = 0x03; |
|
|
|
|
|
jTNE_0X02_0X01.CarStatus = 0x04; |
|
|
|
|
|
jTNE_0X02_0X01.ChargeStatus = 0x05; |
|
|
|
|
|
jTNE_0X02_0X01.DCStatus = 0x06; |
|
|
|
|
|
jTNE_0X02_0X01.OperationMode = 0x07; |
|
|
|
|
|
jTNE_0X02_0X01.Resistance = 123; |
|
|
|
|
|
jTNE_0X02_0X01.SOC = 0x03; |
|
|
|
|
|
jTNE_0X02_0X01.Speed = 58; |
|
|
|
|
|
jTNE_0X02_0X01.Stall = 0x02; |
|
|
|
|
|
jTNE_0X02_0X01.TotalDis = 6666; |
|
|
|
|
|
jTNE_0X02_0X01.TotalTemp = 99; |
|
|
|
|
|
jTNE_0X02_0X01.TotalVoltage = 100; |
|
|
|
|
|
jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x01, jTNE_0X02_0X01); |
|
|
|
|
|
//驱动电机数据 |
|
|
|
|
|
JTNE_0x02_0x02 jTNE_0X02_0X02 = new JTNE_0x02_0x02(); |
|
|
|
|
|
jTNE_0X02_0X02.Electricals = new List<Metadata.Electrical>(); |
|
|
|
|
|
Metadata.Electrical electrical1 = new Metadata.Electrical(); |
|
|
|
|
|
electrical1.ElControlTemp = 0x01; |
|
|
|
|
|
electrical1.ElCurrent = 100; |
|
|
|
|
|
electrical1.ElNo = 0x01; |
|
|
|
|
|
electrical1.ElSpeed = 65; |
|
|
|
|
|
electrical1.ElStatus = 0x02; |
|
|
|
|
|
electrical1.ElTemp = 0x03; |
|
|
|
|
|
electrical1.ElTorque = 55; |
|
|
|
|
|
electrical1.ElVoltage = 236; |
|
|
|
|
|
Metadata.Electrical electrical2 = new Metadata.Electrical(); |
|
|
|
|
|
electrical2.ElControlTemp = 0x02; |
|
|
|
|
|
electrical2.ElCurrent = 101; |
|
|
|
|
|
electrical2.ElNo = 0x02; |
|
|
|
|
|
electrical2.ElSpeed = 66; |
|
|
|
|
|
electrical2.ElStatus = 0x03; |
|
|
|
|
|
electrical2.ElTemp = 0x05; |
|
|
|
|
|
electrical2.ElTorque = 566; |
|
|
|
|
|
electrical2.ElVoltage = 2136; |
|
|
|
|
|
jTNE_0X02_0X02.Electricals.Add(electrical1); |
|
|
|
|
|
jTNE_0X02_0X02.Electricals.Add(electrical2); |
|
|
|
|
|
jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x02, jTNE_0X02_0X02); |
|
|
|
|
|
//燃料电池数据 |
|
|
|
|
|
JTNE_0x02_0x03 jTNE_0X02_0X03 = new JTNE_0x02_0x03(); |
|
|
|
|
|
jTNE_0X02_0X03.DCStatus = 0x02; |
|
|
|
|
|
jTNE_0X02_0X03.FuelBatteryCurrent = 111; |
|
|
|
|
|
jTNE_0X02_0X03.FuelBatteryVoltage = 2222; |
|
|
|
|
|
jTNE_0X02_0X03.FuelConsumptionRate = 3222; |
|
|
|
|
|
jTNE_0X02_0X03.HydrogenSystemMaxConcentrations = 6666; |
|
|
|
|
|
jTNE_0X02_0X03.HydrogenSystemMaxConcentrationsNo = 0x56; |
|
|
|
|
|
jTNE_0X02_0X03.HydrogenSystemMaxPressure = 3336; |
|
|
|
|
|
jTNE_0X02_0X03.HydrogenSystemMaxPressureNo = 0x65; |
|
|
|
|
|
jTNE_0X02_0X03.HydrogenSystemMaxTemp = 3355; |
|
|
|
|
|
jTNE_0X02_0X03.HydrogenSystemMaxTempNo = 0x22; |
|
|
|
|
|
jTNE_0X02_0X03.Temperatures = new byte[] |
|
|
|
|
|
{ |
|
|
|
|
|
0x01,0x02,0x03 |
|
|
|
|
|
}; |
|
|
|
|
|
jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x03, jTNE_0X02_0X03); |
|
|
|
|
|
//发动机数据 |
|
|
|
|
|
JTNE_0x02_0x04 jTNE_0X02_0X04 = new JTNE_0x02_0x04(); |
|
|
|
|
|
jTNE_0X02_0X04.EngineStatus = 0x01; |
|
|
|
|
|
jTNE_0X02_0X04.FuelRate = 102; |
|
|
|
|
|
jTNE_0X02_0X04.Revs = 203; |
|
|
|
|
|
jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x04, jTNE_0X02_0X04); |
|
|
|
|
|
//车辆位置数据 |
|
|
|
|
|
JTNE_0x02_0x05 jTNE_0X02_0X05 = new JTNE_0x02_0x05(); |
|
|
|
|
|
jTNE_0X02_0X05.Lat = 1233355; |
|
|
|
|
|
jTNE_0X02_0X05.Lng = 3255555; |
|
|
|
|
|
jTNE_0X02_0X05.PositioStatus = 0x01; |
|
|
|
|
|
jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x05, jTNE_0X02_0X05); |
|
|
|
|
|
//极值数据 |
|
|
|
|
|
JTNE_0x02_0x06 jTNE_0X02_0X06 = new JTNE_0x02_0x06(); |
|
|
|
|
|
jTNE_0X02_0X06.MaxTempBatteryAssemblyNo = 0x12; |
|
|
|
|
|
jTNE_0X02_0X06.MaxTempProbeBatteryNo = 0x32; |
|
|
|
|
|
jTNE_0X02_0X06.MaxTempProbeBatteryValue = 0x42; |
|
|
|
|
|
jTNE_0X02_0X06.MaxVoltageBatteryAssemblyNo = 0x11; |
|
|
|
|
|
jTNE_0X02_0X06.MaxVoltageSingleBatteryNo = 0x15; |
|
|
|
|
|
jTNE_0X02_0X06.MaxVoltageSingleBatteryValue = 123; |
|
|
|
|
|
jTNE_0X02_0X06.MinTempBatteryAssemblyNo = 0x32; |
|
|
|
|
|
jTNE_0X02_0X06.MinTempProbeBatteryNo = 0x11; |
|
|
|
|
|
jTNE_0X02_0X06.MinTempProbeBatteryValue = 0x06; |
|
|
|
|
|
jTNE_0X02_0X06.MinVoltageBatteryAssemblyNo = 0x07; |
|
|
|
|
|
jTNE_0X02_0X06.MinVoltageSingleBatteryNo = 0x09; |
|
|
|
|
|
jTNE_0X02_0X06.MinVoltageSingleBatteryValue = 0x08; |
|
|
|
|
|
jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x06, jTNE_0X02_0X06); |
|
|
|
|
|
//报警数据 |
|
|
|
|
|
JTNE_0x02_0x07 jTNE_0X02_0X07 = new JTNE_0x02_0x07(); |
|
|
|
|
|
jTNE_0X02_0X07.AlarmBatteryFlag = 5533; |
|
|
|
|
|
jTNE_0X02_0X07.AlarmLevel = 0x11; |
|
|
|
|
|
jTNE_0X02_0X07.AlarmBatteryOthers = new List<uint> |
|
|
|
|
|
{ |
|
|
|
|
|
1000,1001,1002 |
|
|
|
|
|
}; |
|
|
|
|
|
jTNE_0X02_0X07.AlarmEls = new List<uint> |
|
|
|
|
|
{ |
|
|
|
|
|
2000,2001,2002 |
|
|
|
|
|
}; |
|
|
|
|
|
jTNE_0X02_0X07.AlarmEngines = new List<uint> |
|
|
|
|
|
{ |
|
|
|
|
|
3000,3001,3002 |
|
|
|
|
|
}; |
|
|
|
|
|
jTNE_0X02_0X07.AlarmOthers = new List<uint> |
|
|
|
|
|
{ |
|
|
|
|
|
4000,4001,4002 |
|
|
|
|
|
}; |
|
|
|
|
|
jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x07, jTNE_0X02_0X07); |
|
|
|
|
|
//可充电储能装置电压数据 |
|
|
|
|
|
JTNE_0x02_0x08 jTNE_0X02_0X08 = new JTNE_0x02_0x08(); |
|
|
|
|
|
jTNE_0X02_0X08.BatteryAssemblies = new List<Metadata.BatteryAssembly>(); |
|
|
|
|
|
Metadata.BatteryAssembly batteryAssembly1 = new Metadata.BatteryAssembly(); |
|
|
|
|
|
batteryAssembly1.BatteryAssemblyCurrent = 123; |
|
|
|
|
|
batteryAssembly1.BatteryAssemblyNo = 0x01; |
|
|
|
|
|
batteryAssembly1.BatteryAssemblyVoltage = 0x02; |
|
|
|
|
|
batteryAssembly1.SingleBatteryCount = 55; |
|
|
|
|
|
batteryAssembly1.ThisSingleBatteryBeginCount = 0x02; |
|
|
|
|
|
batteryAssembly1.ThisSingleBatteryBeginNo = 111; |
|
|
|
|
|
batteryAssembly1.SingleBatteryVoltages = new List<ushort> { |
|
|
|
|
|
111,222,333 |
|
|
|
|
|
}; |
|
|
|
|
|
Metadata.BatteryAssembly batteryAssembly2 = new Metadata.BatteryAssembly(); |
|
|
|
|
|
batteryAssembly2.BatteryAssemblyCurrent = 1234; |
|
|
|
|
|
batteryAssembly2.BatteryAssemblyNo = 0x03; |
|
|
|
|
|
batteryAssembly2.BatteryAssemblyVoltage = 0x05; |
|
|
|
|
|
batteryAssembly2.SingleBatteryCount = 66; |
|
|
|
|
|
batteryAssembly2.ThisSingleBatteryBeginCount = 0x02; |
|
|
|
|
|
batteryAssembly2.ThisSingleBatteryBeginNo = 222; |
|
|
|
|
|
batteryAssembly2.SingleBatteryVoltages = new List<ushort> { |
|
|
|
|
|
444,555,666 |
|
|
|
|
|
}; |
|
|
|
|
|
jTNE_0X02_0X08.BatteryAssemblies.Add(batteryAssembly1); |
|
|
|
|
|
jTNE_0X02_0X08.BatteryAssemblies.Add(batteryAssembly2); |
|
|
|
|
|
jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x08, jTNE_0X02_0X08); |
|
|
|
|
|
|
|
|
|
|
|
//可充电储能装置温度数据 |
|
|
|
|
|
JTNE_0x02_0x09 jTNE_0X02_0X09 = new JTNE_0x02_0x09(); |
|
|
|
|
|
jTNE_0X02_0X09.BatteryTemperatures = new List<Metadata.BatteryTemperature>(); |
|
|
|
|
|
|
|
|
|
|
|
Metadata.BatteryTemperature batteryTemperature1 = new Metadata.BatteryTemperature(); |
|
|
|
|
|
batteryTemperature1.BatteryAssemblyNo = 0x01; |
|
|
|
|
|
batteryTemperature1.Temperatures = new byte[] |
|
|
|
|
|
{ |
|
|
|
|
|
0x01,0x02,0x03,0x04 |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
Metadata.BatteryTemperature batteryTemperature2 = new Metadata.BatteryTemperature(); |
|
|
|
|
|
batteryTemperature2.BatteryAssemblyNo = 0x02; |
|
|
|
|
|
batteryTemperature2.Temperatures = new byte[] |
|
|
|
|
|
{ |
|
|
|
|
|
0x05,0x06,0x07,0x08 |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
jTNE_0X02_0X09.BatteryTemperatures.Add(batteryTemperature1); |
|
|
|
|
|
jTNE_0X02_0X09.BatteryTemperatures.Add(batteryTemperature2); |
|
|
|
|
|
jTNE_0X02.Values.Add(JTNE_0x02_Body.JTNE_0x02_0x09, jTNE_0X02_0X09); |
|
|
|
|
|
|
|
|
|
|
|
jTNEPackage.Bodies = jTNE_0X02; |
|
|
|
|
|
var hex = JTNESerializer.Serialize(jTNEPackage).ToHexString(); |
|
|
|
|
|
|
|
|
|
|
|
// 输出结果Hex: |
|
|
|
|
|
2323020131323334353637383900000000000000000100D001040507003A00001A0A00640063030602007B02030202010201004100370300EC00640203020042023605085800650308AE006F0C9600030102030D1B221A0A560D086502040100CB006605010031AD030012D1CB061115007B0709000832124211320607110000159D03000003E8000003E9000003EA03000007D0000007D1000007D20300000BB800000BB900000BBA0300000FA000000FA100000FA20802010002007B0037006F03006F00DE014D03000504D2004200DE0301BC022B029A0902010004010203040200040506070867 |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
#### 2.手动解包: |
|
|
|
|
|
``` unpackage |
|
|
|
|
|
1.原包: |
|
|
|
|
|
2323020131323334353637383900000000000000000100D001040507003A00001A0A00640063030602007B02030202010201004100370300EC00640203020042023605085800650308AE006F0C9600030102030D1B221A0A560D086502040100CB006605010031AD030012D1CB061115007B0709000832124211320607110000159D03000003E8000003E9000003EA03000007D0000007D1000007D20300000BB800000BB900000BBA0300000FA000000FA100000FA20802010002007B0037006F03006F00DE014D03000504D2004200DE0301BC022B029A0902010004010203040200040506070867 |
|
|
|
|
|
|
|
|
|
|
|
2.拆解 |
|
|
|
|
|
23 23 --起始符 |
|
|
|
|
|
02 --命令标识 |
|
|
|
|
|
01 --应答标志 |
|
|
|
|
|
31 32 33 34 35 36 37 38 |
|
|
|
|
|
39 00 00 00 00 00 00 00 00 --VIN |
|
|
|
|
|
01 --数据加密方式 |
|
|
|
|
|
00 D0 --数据单元长度 |
|
|
|
|
|
|
|
|
|
|
|
01 --整车数据 |
|
|
|
|
|
04 05 07 00 3A 00 00 1A |
|
|
|
|
|
0A 00 64 00 63 03 06 02 |
|
|
|
|
|
00 7B 02 03 |
|
|
|
|
|
02 --驱动电机数据 |
|
|
|
|
|
02 01 02 01 00 41 00 37 |
|
|
|
|
|
03 00 EC 00 64 02 03 02 |
|
|
|
|
|
00 42 02 36 05 08 58 00 65 |
|
|
|
|
|
03 --燃料电池数据 |
|
|
|
|
|
08 AE 00 6F 0C 96 00 03 |
|
|
|
|
|
01 02 03 0D 1B 22 1A 0A |
|
|
|
|
|
56 0D 08 65 02 |
|
|
|
|
|
04 --发动机数据 |
|
|
|
|
|
01 00 CB 00 66 |
|
|
|
|
|
05 --车辆位置数据 |
|
|
|
|
|
01 00 31 AD 03 00 12 D1 |
|
|
|
|
|
CB |
|
|
|
|
|
06 --极值数据 |
|
|
|
|
|
11 15 00 7B 07 09 00 08 |
|
|
|
|
|
32 12 42 11 32 06 |
|
|
|
|
|
07 --报警数据 |
|
|
|
|
|
11 00 00 15 9D 03 00 00 |
|
|
|
|
|
03 E8 00 00 03 E9 00 00 |
|
|
|
|
|
03 EA 03 00 00 07 D0 00 |
|
|
|
|
|
00 07 D1 00 00 07 D2 03 |
|
|
|
|
|
00 00 0B B8 00 00 0B B9 |
|
|
|
|
|
00 00 0B BA 03 00 00 0F |
|
|
|
|
|
A0 00 00 0F A1 00 00 0F |
|
|
|
|
|
A2 |
|
|
|
|
|
08 --可充电储能装置电压数据 |
|
|
|
|
|
02 01 00 02 00 7B 00 37 |
|
|
|
|
|
00 6F 03 00 6F 00 DE 01 |
|
|
|
|
|
4D 03 00 05 04 D2 00 42 |
|
|
|
|
|
00 DE 03 01 BC 02 2B 02 9A |
|
|
|
|
|
09 --可充电储能装置温度数据 |
|
|
|
|
|
02 01 00 04 01 02 03 04 |
|
|
|
|
|
02 00 04 05 06 07 08 |
|
|
|
|
|
|
|
|
|
|
|
67 --校验位 |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
#### 3.程序解包: |
|
|
|
|
|
``` unpackage1 |
|
|
|
|
|
1.原包: |
|
|
|
|
|
string data="2323020131323334353637383900000000000000000100D001040507003A00001A0A00640063030602007B02030202010201004100370300EC00640203020042023605085800650308AE006F0C9600030102030D1B221A0A560D086502040100CB006605010031AD030012D1CB061115007B0709000832124211320607110000159D03000003E8000003E9000003EA03000007D0000007D1000007D20300000BB800000BB900000BBA0300000FA000000FA100000FA20802010002007B0037006F03006F00DE014D03000504D2004200DE0301BC022B029A0902010004010203040200040506070867"; |
|
|
|
|
|
|
|
|
|
|
|
2.将原包反序列化 |
|
|
|
|
|
JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); |
|
|
|
|
|
JTNE_0x02 jTNE_0X02 = jTNEPackage.Bodies as JTNE_0x02; |
|
|
|
|
|
|
|
|
|
|
|
//整车数据 |
|
|
|
|
|
JTNE_0x02_0x01 jTNE_0X02_0X01 = jTNE_0X02.Values[JTNE_0x02_Body.JTNE_0x02_0x01] as JTNE_0x02_0x01; |
|
|
|
|
|
Assert.Equal(JTNE_0x02_Body.JTNE_0x02_0x01, jTNE_0X02_0X01.TypeCode); |
|
|
|
|
|
Assert.Equal(0x02, jTNE_0X02_0X01.Accelerator); |
|
|
|
|
|
Assert.Equal(0x03, jTNE_0X02_0X01.Brakes); |
|
|
|
|
|
Assert.Equal(0x04, jTNE_0X02_0X01.CarStatus); |
|
|
|
|
|
Assert.Equal(0x05, jTNE_0X02_0X01.ChargeStatus); |
|
|
|
|
|
Assert.Equal(0x06, jTNE_0X02_0X01.DCStatus); |
|
|
|
|
|
Assert.Equal(0x07, jTNE_0X02_0X01.OperationMode); |
|
|
|
|
|
Assert.Equal(123, jTNE_0X02_0X01.Resistance); |
|
|
|
|
|
Assert.Equal(0x03, jTNE_0X02_0X01.SOC); |
|
|
|
|
|
Assert.Equal(58, jTNE_0X02_0X01.Speed); |
|
|
|
|
|
Assert.Equal(0x02, jTNE_0X02_0X01.Stall); |
|
|
|
|
|
Assert.Equal((uint)6666, jTNE_0X02_0X01.TotalDis); |
|
|
|
|
|
Assert.Equal(99, jTNE_0X02_0X01.TotalTemp); |
|
|
|
|
|
Assert.Equal(100, jTNE_0X02_0X01.TotalVoltage); |
|
|
|
|
|
|
|
|
|
|
|
//驱动电机数据 |
|
|
|
|
|
JTNE_0x02_0x02 jTNE_0X02_0X02 = jTNE_0X02.Values[JTNE_0x02_Body.JTNE_0x02_0x02] as JTNE_0x02_0x02; |
|
|
|
|
|
Assert.Equal(JTNE_0x02_Body.JTNE_0x02_0x02, jTNE_0X02_0X02.TypeCode); |
|
|
|
|
|
Assert.Equal(2, jTNE_0X02_0X02.ElectricalCount); |
|
|
|
|
|
Metadata.Electrical electrical1 = jTNE_0X02_0X02.Electricals[0]; |
|
|
|
|
|
Assert.Equal(0x01, electrical1.ElControlTemp); |
|
|
|
|
|
Assert.Equal(100, electrical1.ElCurrent); |
|
|
|
|
|
Assert.Equal(0x01, electrical1.ElNo); |
|
|
|
|
|
Assert.Equal(65, electrical1.ElSpeed); |
|
|
|
|
|
Assert.Equal(0x02, electrical1.ElStatus); |
|
|
|
|
|
Assert.Equal(0x03, electrical1.ElTemp); |
|
|
|
|
|
Assert.Equal(55, electrical1.ElTorque); |
|
|
|
|
|
Assert.Equal(236, electrical1.ElVoltage); |
|
|
|
|
|
Metadata.Electrical electrical2 = jTNE_0X02_0X02.Electricals[1]; |
|
|
|
|
|
Assert.Equal(0x02, electrical2.ElControlTemp); |
|
|
|
|
|
Assert.Equal(101, electrical2.ElCurrent); |
|
|
|
|
|
Assert.Equal(0x02, electrical2.ElNo); |
|
|
|
|
|
Assert.Equal(66, electrical2.ElSpeed); |
|
|
|
|
|
Assert.Equal(0x03, electrical2.ElStatus); |
|
|
|
|
|
Assert.Equal(0x05, electrical2.ElTemp); |
|
|
|
|
|
Assert.Equal(566, electrical2.ElTorque); |
|
|
|
|
|
Assert.Equal(2136, electrical2.ElVoltage); |
|
|
|
|
|
|
|
|
|
|
|
//燃料电池数据 |
|
|
|
|
|
JTNE_0x02_0x03 jTNE_0X02_0X03 = jTNE_0X02.Values[JTNE_0x02_Body.JTNE_0x02_0x03] as JTNE_0x02_0x03; |
|
|
|
|
|
Assert.Equal(JTNE_0x02_Body.JTNE_0x02_0x03, jTNE_0X02_0X03.TypeCode); |
|
|
|
|
|
Assert.Equal(0x02, jTNE_0X02_0X03.DCStatus); |
|
|
|
|
|
Assert.Equal(111, jTNE_0X02_0X03.FuelBatteryCurrent); |
|
|
|
|
|
Assert.Equal(2222, jTNE_0X02_0X03.FuelBatteryVoltage); |
|
|
|
|
|
Assert.Equal(3222, jTNE_0X02_0X03.FuelConsumptionRate); |
|
|
|
|
|
Assert.Equal(6666, jTNE_0X02_0X03.HydrogenSystemMaxConcentrations); |
|
|
|
|
|
Assert.Equal(0x56, jTNE_0X02_0X03.HydrogenSystemMaxConcentrationsNo); |
|
|
|
|
|
Assert.Equal(3336, jTNE_0X02_0X03.HydrogenSystemMaxPressure); |
|
|
|
|
|
Assert.Equal(0x65, jTNE_0X02_0X03.HydrogenSystemMaxPressureNo); |
|
|
|
|
|
Assert.Equal(3355, jTNE_0X02_0X03.HydrogenSystemMaxTemp); |
|
|
|
|
|
Assert.Equal(0x22, jTNE_0X02_0X03.HydrogenSystemMaxTempNo); |
|
|
|
|
|
Assert.Equal(new byte[] { 0x01, 0x02, 0x03 }, jTNE_0X02_0X03.Temperatures); |
|
|
|
|
|
|
|
|
|
|
|
//发动机数据 |
|
|
|
|
|
JTNE_0x02_0x04 jTNE_0X02_0X04 = jTNE_0X02.Values[JTNE_0x02_Body.JTNE_0x02_0x04] as JTNE_0x02_0x04; |
|
|
|
|
|
Assert.Equal(JTNE_0x02_Body.JTNE_0x02_0x04, jTNE_0X02_0X04.TypeCode); |
|
|
|
|
|
Assert.Equal(0x01, jTNE_0X02_0X04.EngineStatus); |
|
|
|
|
|
Assert.Equal(102, jTNE_0X02_0X04.FuelRate); |
|
|
|
|
|
Assert.Equal(203, jTNE_0X02_0X04.Revs); |
|
|
|
|
|
|
|
|
|
|
|
//车辆位置数据 |
|
|
|
|
|
JTNE_0x02_0x05 jTNE_0X02_0X05 = jTNE_0X02.Values[JTNE_0x02_Body.JTNE_0x02_0x05] as JTNE_0x02_0x05; |
|
|
|
|
|
Assert.Equal(JTNE_0x02_Body.JTNE_0x02_0x05, jTNE_0X02_0X05.TypeCode); |
|
|
|
|
|
Assert.Equal((uint)1233355, jTNE_0X02_0X05.Lat); |
|
|
|
|
|
Assert.Equal((uint)3255555, jTNE_0X02_0X05.Lng); |
|
|
|
|
|
Assert.Equal(0x01, jTNE_0X02_0X05.PositioStatus); |
|
|
|
|
|
|
|
|
|
|
|
//极值数据 |
|
|
|
|
|
JTNE_0x02_0x06 jTNE_0X02_0X06 = jTNE_0X02.Values[JTNE_0x02_Body.JTNE_0x02_0x06] as JTNE_0x02_0x06; |
|
|
|
|
|
Assert.Equal(0x12, jTNE_0X02_0X06.MaxTempBatteryAssemblyNo); |
|
|
|
|
|
Assert.Equal(0x32, jTNE_0X02_0X06.MaxTempProbeBatteryNo); |
|
|
|
|
|
Assert.Equal(0x42, jTNE_0X02_0X06.MaxTempProbeBatteryValue); |
|
|
|
|
|
Assert.Equal(0x11, jTNE_0X02_0X06.MaxVoltageBatteryAssemblyNo); |
|
|
|
|
|
Assert.Equal(0x15, jTNE_0X02_0X06.MaxVoltageSingleBatteryNo); |
|
|
|
|
|
Assert.Equal(123, jTNE_0X02_0X06.MaxVoltageSingleBatteryValue); |
|
|
|
|
|
Assert.Equal(0x11, jTNE_0X02_0X06.MinTempProbeBatteryNo); |
|
|
|
|
|
Assert.Equal(0x06, jTNE_0X02_0X06.MinTempProbeBatteryValue); |
|
|
|
|
|
Assert.Equal(0x07, jTNE_0X02_0X06.MinVoltageBatteryAssemblyNo); |
|
|
|
|
|
Assert.Equal(0x09, jTNE_0X02_0X06.MinVoltageSingleBatteryNo); |
|
|
|
|
|
Assert.Equal(0x08, jTNE_0X02_0X06.MinVoltageSingleBatteryValue); |
|
|
|
|
|
|
|
|
|
|
|
//报警数据 |
|
|
|
|
|
JTNE_0x02_0x07 jTNE_0X02_0X07 = jTNE_0X02.Values[JTNE_0x02_Body.JTNE_0x02_0x07] as JTNE_0x02_0x07; |
|
|
|
|
|
Assert.Equal(JTNE_0x02_Body.JTNE_0x02_0x07, jTNE_0X02_0X07.TypeCode); |
|
|
|
|
|
Assert.Equal(0x11, jTNE_0X02_0X07.AlarmLevel); |
|
|
|
|
|
Assert.Equal(3, jTNE_0X02_0X07.AlarmBatteryOthers.Count); |
|
|
|
|
|
Assert.Equal(new List<uint> |
|
|
|
|
|
{ |
|
|
|
|
|
1000,1001,1002 |
|
|
|
|
|
}, jTNE_0X02_0X07.AlarmBatteryOthers); |
|
|
|
|
|
Assert.Equal(3, jTNE_0X02_0X07.AlarmEls.Count); |
|
|
|
|
|
Assert.Equal(new List<uint> |
|
|
|
|
|
{ |
|
|
|
|
|
2000,2001,2002 |
|
|
|
|
|
}, jTNE_0X02_0X07.AlarmEls); |
|
|
|
|
|
Assert.Equal(3, jTNE_0X02_0X07.AlarmEngines.Count); |
|
|
|
|
|
Assert.Equal(new List<uint> |
|
|
|
|
|
{ |
|
|
|
|
|
3000,3001,3002 |
|
|
|
|
|
}, jTNE_0X02_0X07.AlarmEngines); |
|
|
|
|
|
Assert.Equal(3, jTNE_0X02_0X07.AlarmOthers.Count); |
|
|
|
|
|
Assert.Equal(new List<uint> |
|
|
|
|
|
{ |
|
|
|
|
|
4000,4001,4002 |
|
|
|
|
|
}, jTNE_0X02_0X07.AlarmOthers); |
|
|
|
|
|
|
|
|
|
|
|
//可充电储能装置电压数据 |
|
|
|
|
|
JTNE_0x02_0x08 jTNE_0X02_0X08 = jTNE_0X02.Values[JTNE_0x02_Body.JTNE_0x02_0x08] as JTNE_0x02_0x08; |
|
|
|
|
|
Assert.Equal(JTNE_0x02_Body.JTNE_0x02_0x08, jTNE_0X02_0X08.TypeCode); |
|
|
|
|
|
Assert.Equal(2, jTNE_0X02_0X08.BatteryAssemblyCount); |
|
|
|
|
|
|
|
|
|
|
|
Metadata.BatteryAssembly batteryAssembly1 = jTNE_0X02_0X08.BatteryAssemblies[0]; |
|
|
|
|
|
Assert.Equal(123, batteryAssembly1.BatteryAssemblyCurrent); |
|
|
|
|
|
Assert.Equal(0x01, batteryAssembly1.BatteryAssemblyNo); |
|
|
|
|
|
Assert.Equal(0x02, batteryAssembly1.BatteryAssemblyVoltage); |
|
|
|
|
|
Assert.Equal(55, batteryAssembly1.SingleBatteryCount); |
|
|
|
|
|
Assert.Equal(111, batteryAssembly1.ThisSingleBatteryBeginNo); |
|
|
|
|
|
Assert.Equal(3, batteryAssembly1.ThisSingleBatteryBeginCount); |
|
|
|
|
|
Assert.Equal(new List<ushort> { |
|
|
|
|
|
111,222,333 |
|
|
|
|
|
}, batteryAssembly1.SingleBatteryVoltages); |
|
|
|
|
|
|
|
|
|
|
|
Metadata.BatteryAssembly batteryAssembly2 = jTNE_0X02_0X08.BatteryAssemblies[1]; |
|
|
|
|
|
Assert.Equal(1234, batteryAssembly2.BatteryAssemblyCurrent); |
|
|
|
|
|
Assert.Equal(0x03, batteryAssembly2.BatteryAssemblyNo); |
|
|
|
|
|
Assert.Equal(0x05, batteryAssembly2.BatteryAssemblyVoltage); |
|
|
|
|
|
Assert.Equal(66, batteryAssembly2.SingleBatteryCount); |
|
|
|
|
|
Assert.Equal(222, batteryAssembly2.ThisSingleBatteryBeginNo); |
|
|
|
|
|
Assert.Equal(3, batteryAssembly2.ThisSingleBatteryBeginCount); |
|
|
|
|
|
Assert.Equal(new List<ushort> { |
|
|
|
|
|
444,555,666 |
|
|
|
|
|
}, batteryAssembly2.SingleBatteryVoltages); |
|
|
|
|
|
|
|
|
|
|
|
//可充电储能装置温度数据 |
|
|
|
|
|
JTNE_0x02_0x09 jTNE_0X02_0X09 = jTNE_0X02.Values[JTNE_0x02_Body.JTNE_0x02_0x09] as JTNE_0x02_0x09; |
|
|
|
|
|
Assert.Equal(JTNE_0x02_Body.JTNE_0x02_0x09, jTNE_0X02_0X09.TypeCode); |
|
|
|
|
|
Assert.Equal(2, jTNE_0X02_0X09.BatteryTemperatureCount); |
|
|
|
|
|
|
|
|
|
|
|
Metadata.BatteryTemperature batteryTemperature1 = jTNE_0X02_0X09.BatteryTemperatures[0]; |
|
|
|
|
|
Assert.Equal(0x01, batteryTemperature1.BatteryAssemblyNo); |
|
|
|
|
|
Assert.Equal(4, batteryTemperature1.TemperatureProbeCount); |
|
|
|
|
|
Assert.Equal(new byte[] |
|
|
|
|
|
{ |
|
|
|
|
|
0x01,0x02,0x03,0x04 |
|
|
|
|
|
}, batteryTemperature1.Temperatures); |
|
|
|
|
|
|
|
|
|
|
|
Metadata.BatteryTemperature batteryTemperature2 = jTNE_0X02_0X09.BatteryTemperatures[1]; |
|
|
|
|
|
Assert.Equal(0x02, batteryTemperature2.BatteryAssemblyNo); |
|
|
|
|
|
Assert.Equal(4, batteryTemperature2.TemperatureProbeCount); |
|
|
|
|
|
Assert.Equal(new byte[] |
|
|
|
|
|
{ |
|
|
|
|
|
0x05,0x06,0x07,0x08 |
|
|
|
|
|
}, batteryTemperature2.Temperatures); |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
### 举个栗子2 |
|
|
|
|
|
``` create package |
|
|
|
|
|
// 使用消息Id的扩展方法创建JTNEPackage包 |
|
|
|
|
|
JTNEPackage jTNEPackage= JTNEMsgId.login.Create("123456789", JTNEAskId.CMD, new JTNE_0x01 |
|
|
|
|
|
{ |
|
|
|
|
|
PDATime = DateTime.Parse("2019-01-22 23:55:56"), |
|
|
|
|
|
LoginNum = 1, |
|
|
|
|
|
BatteryLength = 0x04, |
|
|
|
|
|
SIM = "12345678998765432100", |
|
|
|
|
|
BatteryNos = new List<string>() |
|
|
|
|
|
{ |
|
|
|
|
|
"1234", |
|
|
|
|
|
"4567", |
|
|
|
|
|
"9870" |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
var hex = JTNESerializer.Serialize(jTNEPackage).ToHexString(); |
|
|
|
|
|
//输出结果Hex: |
|
|
|
|
|
232301FE313233343536373839000000000000000001002A130116173738000131323334353637383939383736353433323130300304313233343435363739383730FD |
|
|
|
|
|
``` |
|
|
|
|
|
### 举个栗子3 |
|
|
|
|
|
``` config |
|
|
|
|
|
// 全局配置 |
|
|
|
|
|
JTNEGlobalConfig.Instance |
|
|
|
|
|
//.SetDeviceMsgSNDistributed(//todo 实现IDeviceMsgSNDistributed设备流水号) |
|
|
|
|
|
//.SetPlatformMsgSNDistributed(//todo 实现IPlatformMsgSNDistributed平台流水号) |
|
|
|
|
|
//.SetDataBodiesEncrypt(//todo 实现IJTNEEncrypt消息数据体加密算法) |
|
|
|
|
|
//.SetPlatformLoginEncrypt(//todo 实现IJTNEEncrypt平台登入加密算法) |
|
|
|
|
|
// 注册自定义车载终端控制命令 |
|
|
|
|
|
//.Register_JTNE0x82CustomBody(//todo 继承自JTNE_0x82_Body类) |
|
|
|
|
|
// 注册自定义实时信息上报信息 |
|
|
|
|
|
//.Register_JTNE0x02CustomBody(//todo 继承自JTNE_0x02_CustomBody类) |
|
|
|
|
|
// 若为终端设置命令,则自定义终端设置命令,若为参数查询响应命令,则为自定义参数查询响应命令 |
|
|
|
|
|
//.Register_JTNE0x81CustomBody(//todo 继承自JTNE_0x81_Body类) |
|
|
|
|
|
// 若为终端设置命令,则自定义终端设置命令依赖对象,若为参数查询响应命令,则为自定义参数查询响应命令依赖对象 |
|
|
|
|
|
//.Register_JTNE0x81CustomDepenedBody("依赖对象消息id","被依赖对象消息id") |
|
|
|
|
|
// 跳过校验码验证 |
|
|
|
|
|
.SetSkipCRCCode(true); |
|
|
|
|
|
``` |
|
|
## NuGet安装 |
|
|
## NuGet安装 |
|
|
|
|
|
|
|
|
| Package Name | Version | Downloads |
|
|
| Package Name | Version | Downloads |
|
|