# JTNewEnergy协议
[![MIT Licence](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/SmallChi/JTNewEnergy/blob/master/LICENSE)[![Build Status](https://travis-ci.org/SmallChi/JTNewEnergy.svg?branch=master)](https://travis-ci.org/SmallChi/JTNewEnergy)
## 前提条件
1. 掌握进制转换:二进制转十六进制;
2. 掌握BCD编码、Hex编码;
3. 掌握各种位移、异或;
4. 掌握常用反射;
5. 掌握快速ctrl+c、ctrl+v;
6. 掌握以上装逼技能,就可以开始搬砖了。
## JTNewEnergy数据结构解析
### 数据包[JTNEPackage]
| 起始标识1|起始标识2 | 命令标识 | 应答标志 | 车辆识别码 | 数据加密方式 |数据单元长度| 数据体|校验码|
| :---------:| :---------: | :---------: | :-------: | :-------: |:-------: |:-------: |:-------: |:-------:|
| BeginFlag1 | BeginFlag2 | MsgId | AskId | VIN |EncryptMethod|DataUnitLength|JTNEBodies|BCCCode|
| 0x23(#) | 0x23(#) | - | - | - |- |- |- |- |
#### 消息体属性[JTNEBodies]
> 根据对应消息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.原包:
2323020131323334353637383900000000000000000100D001040507003A00001A0A00640063030602007B02030202010201004100370300EC006402
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 JTNE协议、JTNewEnergy协议、GBNewEnergy协议、新能源协议、电动汽车远程服务与管理系统平台数据交换协议资料合集.zip
资源推荐
资源详情
资源评论
收起资源包目录
JTNE协议、JTNewEnergy协议、GBNewEnergy协议、电动汽车远程服务与管理系统平台数据交换协议资料合集.zip (223个子文件)
JTNE_0x02_Package_DeviceTest.cs 19KB
JTNE_0x02_Package_PlatformTest.cs 14KB
JTNE_0x80Reply_DeviceTest.cs 13KB
JTNE_0x81_DeviceTest.cs 11KB
JTNESerializerContext.cs 11KB
JTNE_0x02_Composite_PlatformTest.cs 10KB
JTNE_0x02_Composite_DeviceTest.cs 9KB
JTNE_0x03_DeviceTest.cs 8KB
JTNE_0x03_PlatformTest.cs 8KB
JTNEGlobalConfigs.cs 8KB
JTNE_0x02_DeviceTest.cs 8KB
JTNE_0x02_PlatformTest.cs 8KB
JTNEPackage_PlatformFormatter.cs 8KB
JTNEPackage_DeviceFormatter.cs 8KB
JTNEEnumExtensions.cs 7KB
JTNEDateTimeExtensions.cs 6KB
JTNE_0x80Reply_Body.cs 6KB
JTNE_0x02_CustomBody_PlatformTest.cs 6KB
JTNE_0x02_CustomBody_DeviceTest.cs 6KB
JTNE_0x81_Body_Device.cs 6KB
JTNE_0x01_Package_PlatformTest.cs 6KB
JTNE_0x01_Package_DeviceTest.cs 6KB
JTNE_0x80Reply_CustomBody_DeviceTest.cs 5KB
JTNE_0x82_DeviceTest.cs 5KB
JTNE_0x81_CustomBody_DeviceTest.cs 5KB
JTNEHeaderPackage_PlatformFormatter.cs 4KB
JTNEHeaderPackage_DeviceFormatter.cs 4KB
JTNEFormatterResolverExtensions.cs 4KB
JTNE_0x02_0x07_Platform_Formatter.cs 4KB
JTNE_0x02_0x07_Device_Formatter.cs 4KB
JTNEHexExtensions.cs 4KB
JTNEBinaryExtensions.cs 4KB
JTNE_0x02_0x03_Platform.cs 4KB
JTNE_0x02_0x03_Device.cs 4KB
JTNE_0x02_0x08_Device_Formatter.cs 4KB
JTNE_0x02_0x08_DeviceTest.cs 4KB
JTNE_0x02_Platform_Formatter.cs 4KB
JTNE_0x02_0x06_Platform_Formatter.cs 4KB
JTNE_0x02_0x03_Platform_Formatter.cs 4KB
JTNE_0x02_0x06_Device_Formatter.cs 4KB
JTNE_0x02_Device_Formatter.cs 3KB
JTNE_0x02_0x03_Device_Formatter.cs 3KB
JTNE_0x02_0x01_Device_Formatter.cs 3KB
JTNE_0x02_0x06_Platform.cs 3KB
JTNE_0x02_0x06_Device.cs 3KB
JTNE_0x02_0x02_Platform_Formatter.cs 3KB
JTNE_0x81_Device_Formatter.cs 3KB
JTNE_0x02_0x02_Device_Formatter.cs 3KB
JTNE_0x02_0x01_Platform_Formatter.cs 3KB
JTNE_0x02_0x02_PlatformTest.cs 3KB
JTNE_0x02_0x02_DeviceTest.cs 3KB
JTNEPackage_PlatformExtensions.cs 3KB
JTNEPackage_DeviceExtensions.cs 3KB
JTNEHeaderPackage_PlatformTest.cs 3KB
JTNEHeaderPackage_DeviceTest.cs 3KB
JTNE_0x02_0x03_PlatformTest.cs 3KB
JTNE_0x02_0x07_PlatformTest.cs 3KB
JTNE_0x82_CustomBody_DeviceTest.cs 3KB
JTNE_0x02_0x09_DeviceTest.cs 3KB
JTNE_0x02_0x07_DeviceTest.cs 3KB
JTNE_0x02_0x03_DeviceTest.cs 3KB
JTNE_0x02_0x06_PlatformTest.cs 3KB
JTNE_0x82_Body_Device.cs 3KB
JTNE_0x02_0x09_Device_Formatter.cs 2KB
JTNEStringExtensions.cs 2KB
JTNE_0x02_0x06_DeviceTest.cs 2KB
JTNE_0x02_0x01_DeviceTest.cs 2KB
JTNE_0x02_Body_Device.cs 2KB
JTNE_0x05_Package_PlatformTest.cs 2KB
JTNE_0x01_Platform_Formatter.cs 2KB
JTNE_0x01_Device_Formatter.cs 2KB
JTNE_0x02_0x01_PlatformTest.cs 2KB
JTNEHeaderPackage_Platform.cs 2KB
JTNEHeaderPackage_Device.cs 2KB
UpgradeCommand.cs 2KB
JTNE_0x82_0x01_Device_Formatter.cs 2KB
JTNEPackage_Platform.cs 2KB
JTNEPackage_Device.cs 2KB
JTNE_0x02_Body_Platform.cs 2KB
JTNE_0x02_0x01_Device.cs 2KB
JTNE_0x04_Package_PlatformTest.cs 2KB
JTNE_0x06_Package_PlatformTest.cs 2KB
JTNE_0x01_PlatformTest.cs 2KB
JTNE_0x02_0x07_Platform.cs 2KB
JTNE_0x01_DeviceTest.cs 2KB
JTNE_0x02_0x07_Device.cs 2KB
JTNE_0x04_Package_DeviceTest.cs 2KB
JTNE_0x82_Device_Formatter.cs 2KB
JTNE_0x02_0x01_Platform.cs 2KB
Default_AES128EncryptImpl.cs 2KB
JTNE_0x05_Platform_Formatter.cs 2KB
JTNESerializer_Platform.cs 2KB
JTNESerializer_Device.cs 2KB
JTNE_0x05_PlatformTest.cs 2KB
JTNEFormatterExtensions.cs 2KB
JTNEMsgId_PlatformFactory.cs 2KB
JTNE_0x02_0x04_Platform_Formatter.cs 1KB
JTNEMsgId_DeviceFactory.cs 1KB
JTNE_0x02_0x05_Platform_Formatter.cs 1KB
JTNE_0x02_0x05_Device_Formatter.cs 1KB
共 223 条
- 1
- 2
- 3
资源评论
土豆片片
- 粉丝: 1556
- 资源: 5641
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于QT+C++的智能云监护仪项目,能够实时显示使用者心电、血氧、血压波形及其它各种参数+源码(毕业设计&课程设计&项目开发)
- 基于java开发的app接收硬件端传输的心音信号,具有显示心音波形,发出心音的功能+源码(毕业设计&课程设计&项目开发)
- Python 程序语言设计模式思路-行为型模式:职责链模式:将请求从一个处理者传递到下一个处理者
- 9241703124789646.16健身系统2.apk
- postgresql-16.3-1-windows-x64.exe
- Python 程序语言设计模式思路-结构型模式:装饰器讲解及利用Python装饰器模式实现高效日志记录和性能测试
- 基于YOLOv5和DeepSORT的多目标跟踪仿真与记录
- Python 程序语言设计模式思路-创建型模式:原型模式:通过复制现有对象来创建新对象,面向对象编程
- 卸载软件geek卸载软件geek
- Python 程序语言设计模式思路-创建型模式:单例模式,确保一个类的唯一实例(装饰器)面向对象编程、继承
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功