diff --git a/README.md b/README.md
index f153e8c..ba4ccfb 100644
--- a/README.md
+++ b/README.md
@@ -25,6 +25,41 @@
> 根据对应消息ID:MsgId
+
+
+## NuGet安装
+
+| Package Name | Version | Downloads
+|--------------| ------- | ----
+| Install-Package JTNewEnergy |  | 
+
+## 使用BenchmarkDotNet性能测试报告(只是玩玩,不能当真)
+
+``` ini
+BenchmarkDotNet=v0.11.3, OS=Windows 10.0.17134.472 (1803/April2018Update/Redstone4)
+Intel Core i7-8700K CPU 3.70GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
+ [Host] : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3260.0
+ Job-FVMQGI : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3260.0
+ Job-LGLQDK : .NET Core 2.2.0 (CoreCLR 4.6.27110.04, CoreFX 4.6.27110.04), 64bit RyuJIT
+
+Platform=AnyCpu Runtime=Clr Server=False
+
+```
+| Method | Toolchain | N | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
+|---------------------- |-------------- |------- |-------------:|-----------:|-----------:|------------:|------------:|------------:|--------------------:|
+| **JTNE_0x02_Serialize** | **Default** | **100** | **5.997 ms** | **0.0704 ms** | **0.0659 ms** | **156.2500** | **-** | **-** | **1000.83 KB** |
+| JTNE_0x02_Deserialize | Default | 100 | 5.713 ms | 0.0654 ms | 0.0611 ms | 140.6250 | - | - | 906.31 KB |
+| JTNE_0x02_Serialize | .NET Core 2.2 | 100 | 5.003 ms | 0.0706 ms | 0.0660 ms | 140.6250 | - | - | 878.13 KB |
+| JTNE_0x02_Deserialize | .NET Core 2.2 | 100 | 4.591 ms | 0.0876 ms | 0.0899 ms | 125.0000 | - | - | 780.47 KB |
+| **JTNE_0x02_Serialize** | **Default** | **10000** | **621.248 ms** | **12.0181 ms** | **11.8034 ms** | **16000.0000** | **-** | **-** | **100081.45 KB** |
+| JTNE_0x02_Deserialize | Default | 10000 | 569.567 ms | 9.4221 ms | 8.8135 ms | 14000.0000 | - | - | 90629.45 KB |
+| JTNE_0x02_Serialize | .NET Core 2.2 | 10000 | 509.149 ms | 9.9488 ms | 9.3061 ms | 14000.0000 | - | - | 87812.5 KB |
+| JTNE_0x02_Deserialize | .NET Core 2.2 | 10000 | 457.481 ms | 8.6865 ms | 8.9204 ms | 12000.0000 | - | - | 78046.88 KB |
+| **JTNE_0x02_Serialize** | **Default** | **100000** | **6,038.592 ms** | **37.8782 ms** | **35.4313 ms** | **162000.0000** | **1000.0000** | **-** | **1000795.95 KB** |
+| JTNE_0x02_Deserialize | Default | 100000 | 5,676.756 ms | 51.2919 ms | 47.9785 ms | 147000.0000 | 1000.0000 | - | 906264.57 KB |
+| JTNE_0x02_Serialize | .NET Core 2.2 | 100000 | 5,112.387 ms | 66.7348 ms | 59.1586 ms | 142000.0000 | 1000.0000 | - | 878125 KB |
+| JTNE_0x02_Deserialize | .NET Core 2.2 | 100000 | 4,469.358 ms | 20.2586 ms | 15.8166 ms | 127000.0000 | 1000.0000 | - | 780468.75 KB |
+
## JTNewEnergy终端通讯协议消息对照表
| 序号 | 消息ID | 完成情况 | 测试情况 | 消息体名称 |
diff --git a/src/JTNE.Protocol.Benchmark/JTNE.Protocol.Benchmark.csproj b/src/JTNE.Protocol.Benchmark/JTNE.Protocol.Benchmark.csproj
new file mode 100644
index 0000000..ac9089d
--- /dev/null
+++ b/src/JTNE.Protocol.Benchmark/JTNE.Protocol.Benchmark.csproj
@@ -0,0 +1,19 @@
+
+
+
+ netcoreapp2.2;net472
+ Exe
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/JTNE.Protocol.Benchmark/JTNESerializerContext.cs b/src/JTNE.Protocol.Benchmark/JTNESerializerContext.cs
new file mode 100644
index 0000000..66b74ee
--- /dev/null
+++ b/src/JTNE.Protocol.Benchmark/JTNESerializerContext.cs
@@ -0,0 +1,220 @@
+using BenchmarkDotNet.Attributes;
+using BenchmarkDotNet.Configs;
+using BenchmarkDotNet.Environments;
+using BenchmarkDotNet.Jobs;
+using BenchmarkDotNet.Toolchains.CsProj;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using JTNE.Protocol;
+using JTNE.Protocol.Extensions;
+using JTNE.Protocol.MessageBody;
+using JTNE.Protocol.Enums;
+
+namespace JTNE.Protocol.Benchmark
+{
+ [Config(typeof(JTNESerializerConfig))]
+ [MemoryDiagnoser]
+ public class JTNESerializerContext
+ {
+ private byte[] bytes;
+
+ [Params(100, 10000, 100000)]
+ public int N;
+
+ [GlobalSetup]
+ public void Setup()
+ {
+ bytes = "2323020131323334353637383900000000000000000100D001040507003A00001A0A00640063030602007B02030202010201004100370300EC00640203020042023605085800650308AE006F0C9600030102030D1B221A0A560D086502040100CB006605010031AD030012D1CB061115007B0709000832124211320607110000159D03000003E8000003E9000003EA03000007D0000007D1000007D20300000BB800000BB900000BBA0300000FA000000FA100000FA20802010002007B0037006F03006F00DE014D03000504D2004200DE0301BC022B029A0902010004010203040200040506070867".ToHexBytes();
+ }
+
+ [Benchmark(Description = "JTNE_0x02_Serialize")]
+ public void JTNE_0x02_Serialize()
+ {
+ for (int i = 0; i < N; i++)
+ {
+ 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();
+
+ 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();
+ JTNE.Protocol.Metadata.Electrical electrical1 = new JTNE.Protocol.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;
+ JTNE.Protocol.Metadata.Electrical electrical2 = new JTNE.Protocol.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
+ {
+ 1000,1001,1002
+ };
+ jTNE_0X02_0X07.AlarmEls = new List
+ {
+ 2000,2001,2002
+ };
+ jTNE_0X02_0X07.AlarmEngines = new List
+ {
+ 3000,3001,3002
+ };
+ jTNE_0X02_0X07.AlarmOthers = new List
+ {
+ 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();
+ JTNE.Protocol.Metadata.BatteryAssembly batteryAssembly1 = new JTNE.Protocol.Metadata.BatteryAssembly();
+ batteryAssembly1.BatteryAssemblyCurrent = 123;
+ batteryAssembly1.BatteryAssemblyNo = 0x01;
+ batteryAssembly1.BatteryAssemblyVoltage = 0x02;
+ batteryAssembly1.SingleBatteryCount = 55;
+ batteryAssembly1.ThisSingleBatteryBeginCount = 0x02;
+ batteryAssembly1.ThisSingleBatteryBeginNo = 111;
+ batteryAssembly1.SingleBatteryVoltages = new List {
+ 111,222,333
+ };
+ JTNE.Protocol.Metadata.BatteryAssembly batteryAssembly2 = new JTNE.Protocol.Metadata.BatteryAssembly();
+ batteryAssembly2.BatteryAssemblyCurrent = 1234;
+ batteryAssembly2.BatteryAssemblyNo = 0x03;
+ batteryAssembly2.BatteryAssemblyVoltage = 0x05;
+ batteryAssembly2.SingleBatteryCount = 66;
+ batteryAssembly2.ThisSingleBatteryBeginCount = 0x02;
+ batteryAssembly2.ThisSingleBatteryBeginNo = 222;
+ batteryAssembly2.SingleBatteryVoltages = new List {
+ 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();
+
+ JTNE.Protocol.Metadata.BatteryTemperature batteryTemperature1 = new JTNE.Protocol.Metadata.BatteryTemperature();
+ batteryTemperature1.BatteryAssemblyNo = 0x01;
+ batteryTemperature1.Temperatures = new byte[]
+ {
+ 0x01,0x02,0x03,0x04
+ };
+
+ JTNE.Protocol.Metadata.BatteryTemperature batteryTemperature2 = new JTNE.Protocol.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);
+ }
+ }
+
+ [Benchmark(Description = "JTNE_0x02_Deserialize")]
+ public void JTNE_0x02_Deserialize()
+ {
+ for (int i = 0; i < N; i++)
+ {
+ JTNEPackage jTNEPackage = JTNESerializer.Deserialize(bytes);
+ }
+ }
+ }
+
+ public class JTNESerializerConfig : ManualConfig
+ {
+ public JTNESerializerConfig()
+ {
+ Add(Job.Default.WithGcServer(false).With(Runtime.Clr).With(Platform.AnyCpu));
+ Add(Job.Default.WithGcServer(false).With(CsProjCoreToolchain.NetCoreApp22).With(Platform.AnyCpu));
+ }
+ }
+}
diff --git a/src/JTNE.Protocol.Benchmark/Program.cs b/src/JTNE.Protocol.Benchmark/Program.cs
new file mode 100644
index 0000000..2992122
--- /dev/null
+++ b/src/JTNE.Protocol.Benchmark/Program.cs
@@ -0,0 +1,14 @@
+using BenchmarkDotNet.Reports;
+using BenchmarkDotNet.Running;
+using System;
+
+namespace JTNE.Protocol.Benchmark
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ Summary summary = BenchmarkRunner.Run();
+ }
+ }
+}
diff --git a/src/JTNE.Protocol.Test/Package/JTNE_0x02_PackageTest.cs b/src/JTNE.Protocol.Test/Package/JTNE_0x02_PackageTest.cs
new file mode 100644
index 0000000..8ba535b
--- /dev/null
+++ b/src/JTNE.Protocol.Test/Package/JTNE_0x02_PackageTest.cs
@@ -0,0 +1,340 @@
+using JTNE.Protocol.Extensions;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+using JTNE.Protocol.Enums;
+using JTNE.Protocol.MessageBody;
+using JTNE.Protocol.Internal;
+
+namespace JTNE.Protocol.Test.Package
+{
+ public class JTNE_0x02_PackageTest
+ {
+ [Fact]
+ public void Test1()
+ {
+ 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();
+
+ 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 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
+ {
+ 1000,1001,1002
+ };
+ jTNE_0X02_0X07.AlarmEls = new List
+ {
+ 2000,2001,2002
+ };
+ jTNE_0X02_0X07.AlarmEngines = new List
+ {
+ 3000,3001,3002
+ };
+ jTNE_0X02_0X07.AlarmOthers = new List
+ {
+ 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 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 {
+ 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 {
+ 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 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();
+ Assert.Equal("2323020131323334353637383900000000000000000100D001040507003A00001A0A00640063030602007B02030202010201004100370300EC00640203020042023605085800650308AE006F0C9600030102030D1B221A0A560D086502040100CB006605010031AD030012D1CB061115007B0709000832124211320607110000159D03000003E8000003E9000003EA03000007D0000007D1000007D20300000BB800000BB900000BBA0300000FA000000FA100000FA20802010002007B0037006F03006F00DE014D03000504D2004200DE0301BC022B029A0902010004010203040200040506070867", hex);
+ }
+
+ [Fact]
+ public void Test2()
+ {
+ var data = "2323020131323334353637383900000000000000000100D001040507003A00001A0A00640063030602007B02030202010201004100370300EC00640203020042023605085800650308AE006F0C9600030102030D1B221A0A560D086502040100CB006605010031AD030012D1CB061115007B0709000832124211320607110000159D03000003E8000003E9000003EA03000007D0000007D1000007D20300000BB800000BB900000BBA0300000FA000000FA100000FA20802010002007B0037006F03006F00DE014D03000504D2004200DE0301BC022B029A0902010004010203040200040506070867".ToHexBytes();
+ 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
+ {
+ 1000,1001,1002
+ }, jTNE_0X02_0X07.AlarmBatteryOthers);
+ Assert.Equal(3, jTNE_0X02_0X07.AlarmEls.Count);
+ Assert.Equal(new List
+ {
+ 2000,2001,2002
+ }, jTNE_0X02_0X07.AlarmEls);
+ Assert.Equal(3, jTNE_0X02_0X07.AlarmEngines.Count);
+ Assert.Equal(new List
+ {
+ 3000,3001,3002
+ }, jTNE_0X02_0X07.AlarmEngines);
+ Assert.Equal(3, jTNE_0X02_0X07.AlarmOthers.Count);
+ Assert.Equal(new List
+ {
+ 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 {
+ 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 {
+ 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);
+ }
+ }
+}
diff --git a/src/JTNE.Protocol/Enums/JTNEMsgId.cs b/src/JTNE.Protocol/Enums/JTNEMsgId.cs
index ce439c5..a242f88 100644
--- a/src/JTNE.Protocol/Enums/JTNEMsgId.cs
+++ b/src/JTNE.Protocol/Enums/JTNEMsgId.cs
@@ -19,6 +19,7 @@ namespace JTNE.Protocol.Enums
///
/// 实时信息上传
///
+ [JTNEBodiesType(typeof(JTNE_0x02))]
uploadim = 0x02,
///
/// 补传信息上传
diff --git a/src/JTNE.Protocol/JTNE.Protocol.csproj b/src/JTNE.Protocol/JTNE.Protocol.csproj
index 5086dd5..30dcbfb 100644
--- a/src/JTNE.Protocol/JTNE.Protocol.csproj
+++ b/src/JTNE.Protocol/JTNE.Protocol.csproj
@@ -5,8 +5,8 @@
latest
Copyright 2018.
SmallChi
- JTNE.Protocol
- JTNE.Protocol
+ JTNewEnergy
+ JTNewEnergy
JTNE协议、JTNewEnergy协议、GBNewEnergy协议、新能源协议、电动汽车远程服务与管理系统平台数据交换
JTNE协议、JTNewEnergy协议、GBNewEnergy协议、新能源协议、电动汽车远程服务与管理系统平台数据交换
false
diff --git a/src/JTNewEnergy.sln b/src/JTNewEnergy.sln
index 1808432..3ce629a 100644
--- a/src/JTNewEnergy.sln
+++ b/src/JTNewEnergy.sln
@@ -7,7 +7,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JTNE.Protocol", "JTNE.Proto
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JTNE.Protocol.Test", "JTNE.Protocol.Test\JTNE.Protocol.Test.csproj", "{30BB532E-4E49-4BB4-A1D4-61DC40F320DB}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GBNewEnergy.Protocol", "GBNewEnergy.Protocol\GBNewEnergy.Protocol.csproj", "{5F7A89EB-2417-420A-839D-A878A648BAE1}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JTNE.Protocol.Benchmark", "JTNE.Protocol.Benchmark\JTNE.Protocol.Benchmark.csproj", "{CC6DFCDE-4A75-4643-9416-D459EE9CC88C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -23,10 +23,10 @@ Global
{30BB532E-4E49-4BB4-A1D4-61DC40F320DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{30BB532E-4E49-4BB4-A1D4-61DC40F320DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{30BB532E-4E49-4BB4-A1D4-61DC40F320DB}.Release|Any CPU.Build.0 = Release|Any CPU
- {5F7A89EB-2417-420A-839D-A878A648BAE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5F7A89EB-2417-420A-839D-A878A648BAE1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5F7A89EB-2417-420A-839D-A878A648BAE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5F7A89EB-2417-420A-839D-A878A648BAE1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CC6DFCDE-4A75-4643-9416-D459EE9CC88C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CC6DFCDE-4A75-4643-9416-D459EE9CC88C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CC6DFCDE-4A75-4643-9416-D459EE9CC88C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CC6DFCDE-4A75-4643-9416-D459EE9CC88C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE