国标《电动汽车远程服务与管理系统技术规范》解读三部曲:
系统架构及协议概述: https://blog.csdn.net/XiuHua_Wu/article/details/113530169
车载设备设计规范: https://blog.csdn.net/XiuHua_Wu/article/details/113530895
协议数据包结构及定义(重点):https://blog.csdn.net/XiuHua_Wu/article/details/113732636
本文为国标的阅读笔记第3篇:
- 国标:《电动车远程服务于管理系统技术规范 第3部分:通讯协议及数据格式》GB/T 32960.3-2016 http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=674DE45C0AD3DE2CD75B9C4CD8ED57C1
- 建议在阅读本文前,先阅读:【车载IoT】国标《电动汽车远程服务与管理系统技术规范》:系统架构及协议概述https://blog.csdn.net/XiuHua_Wu/article/details/113530169
- 若要落实到具体实现,还请仔细阅读国标。
文章目录
- 传输规则
- 数据包结构
-
- 数据单元格式和定义
- 车辆登入数据格式和定义
- 实时信息上报数据格式和定义
- 信息类型标志
- 整车数据格式和定义
- 驱动电机数据
- 燃料电池数据
- 车辆位置数据
- 极值数据
- 报警数据
- 自定义数据
- 档位状态位定义
- 车辆登出数据格式和定义
- 平台登入数据格式和定义
- 平台登出数据格式和定义
传输规则
协议应采用大端模式的网联字节序来传递字和双字
数据包结构
起始字节 | 定义 | 数据类型 | 描述及要求 |
---|
0 | 起始符 | STRING | 固定为ASCII字符“##” |
2 | 命令单元:命令标识 | BYTE | 见定义表 |
3 | 命令单元:应答标志 | BYTE | 见定义表 |
4 | 唯一识别码 | STRING | 当传输车辆数据实时,应使用车辆VIN,其字码应符合GB 16735的规定;如传输其他数据,则使用唯一自定义编码 |
21 | 数据单元加密方式 | BYTE | 0x01:数据不加密。0x02:数据经过RSA算法加密。0x03:数据经过AES128位算法加密。0xFE:异常。0xFF:无效。其他:预留 |
22 | 数据单元长度 | WORD | 数据单元长度是数据单元的总字节数,有效值范围:0~65531 |
24 | 数据单元 | - | 数据单元格式和定义见定义表 |
倒数第1位 | 校验码 | BYTE | 采用BCC(异或校验),校验范围:从命令单元的第1个字节开始,同后1个字节异或,知道校验码前1字节为止,校验码占用1个字节,当数据单元存在加密时,应先加密后校验,先校验后解密 |
命令标识定义
编码 | 定义 | 方向 |
---|
0x01 | 车辆登入 | 上行 |
0x02 | 实时信息上报 | 上行 |
0x03 | 补发信息上报 | 上行 |
0x04 | 车辆登入 | 上行 |
0x05 | 平台登入 | 上行 |
0x06 | 平台登出 | 上行 |
0x07~0x08 | 终端数据预留 | 上行 |
0x09~0x7F | 上行数据系统预留 | 上行 |
0x80~0x82 | 终端数据预留 | 下行 |
0x83~0xBF | 下行数据系统预留 | 下行 |
0xC0~0xFE | 平台交换自定义数据 | 自定义 |
应答标志
应答包定义:
- 命令的主动发起方应答标志为0xFE时,表示此包为命令包;当应答标志不是0xFE时,被动接受方应不应答。
- 当命令的被动接收方应答标志不是0xFE时,此包表示为应答包。
- 当服务端发送应答时,应变更应答标志,保留报文时间,删除其余报文内容,并重新计算校验位。
编码 | 定义 | 说明 |
---|
0x01 | 成功 | 接受到的信息正确 |
0x02 | 错误 | 设置未成功 |
0x03 | VIN重复 | VIN重复错误 |
0xFE | 命令 | 表示数据包为命令包,而非应答包 |
时间(均采用北京时间)
数据表示内容 | 长度/字节 | 数据类型 | 有效值范围 |
---|
年 | 1 | BYTE | 0~99 |
月 | 1 | BYTE | 1~12 |
日 | 1 | BYTE | 1~31 |
小时 | 1 | BYTE | 0~23 |
分钟 | 1 | BYTE | 0~59 |
秒 | 1 | BYTE | 0~59 |
数据单元格式和定义
车辆登入数据格式和定义
数据标识内容 | 长度/字节 | 数据类型 | 描述及要求 |
---|
数据采集时间 | 6 | BYTE[6] | 见时间定义 |
登入流水号 | 2 | WORD | 车载终端每登入一次,登入流水号自动+1,从1开始循环累加。最大值:65531循环周期:天 |
ICCID | 20 | STRING | SIM卡ICCID号(ICCID应为终端从SIM卡获取的值,不应人为填写或修改) |
可充电储能子系统数 | 1 | BYTE | 可充电储能子系统数n,有效值范围:0~250 |
可充电储能系统编码长度 | 1 | BYTE | 可充电充能系统编码长度m,有效范围:0~50("0"表示不上传该编码) |
可充电储能系统编码 | n×m | STRING | 可充电储能系统编码宜为终端从车辆获取的值 |
备注:可充电储能子系统指当车辆存在多套可充电储能系统混合使用时,每套可充电储能系统为一个可充电储能子系统
实时信息上报数据格式和定义
数据表示内容 | 长度/字节 | 数据类型 | 描述及要求 |
---|
数据采集时间 | 6 | BYTE[6] | 见时间定义 |
信息类型标志(1) | 1 | BYTE | 见信息类型标志定义 |
信息体(1) | - | - | 根据数据类型不同,长度和数据类型不同 |
… | - | - | … |
信息类型标志(n) | 1 | BYTE | 见信息类型标志定义 |
信息体(n) | - | - | 根据数据类型不同,长度和数据类型不同 |
信息类型标志
类型编码 | 说明 | 备注 |
---|
0x01 | 整车数据 | 见信息体的整车数据定义 |
0x02 | 驱动电机数据 | 见信息体的驱动电机数据定义(停车充电过程无需传输该数据) |
0x03 | 燃料电池数据 | 见信息体的燃料电池数据定义 |
0x04 | 发动机数据 | 见信息体的发动机数据定义(停车过程无需传输该数据) |
0x05 | 车辆位置数据 | 见信息体的车辆位置数据定义 |
0x06 | 极值数据 | 见信息体的极值数据定义 |
0x07 | 报警数据 | 见信息体的报警数据定义 |
0x08~0x09 | 终端数据预留 | - |
0x0A~0x2F | 平台交换协议自定义数据 | - |
0x30~0x7F | 预留 | |
0x80~0xFE | 用户自定义 | 见信息体的用户自定义 |
整车数据格式和定义
数据表示内容 | 长度/字节 | 数据类型 | 描述及要求 |
---|
车辆状态 | 1 | BYTE | 0x01:车辆启动状态。0x02:熄火。0x03:其他状态。0xFE:异常。0xFF:表示无效。 |
充电状态 | 1 | BYTE | 0x01:停车充电。0x02:行驶充电。0x03:未充电状态。0x04:充电完成。0xFE:异常。0xFF:无效。 |
运行模式 | 1 | BYTE | 0x01:纯电。0x02:混动。0x03:燃油。0xFE:异常。0xFF:无效。 |
车速 | 2 | WORD | 有效值范围:02200(表示0km/h220km/h)最小计量单元:0.1km/h。0xFF,0xFE:异常。0xFF,0xFF:无效。 |
累计里程 | 4 | DWORD | 有效值范围:09999999(表示0km999999.9km)。最小计量单元:0.1km。0xFF,0xFF,0xFF,0xFE:异常。0xFF,0xFF,0xFF,0xFF:无效。 |
总电压 | 2 | WORD | 有效值范围:010000(表示0V1000V)。最小计量单元:0.1V。0xFF,0xFE:异常。0xFF,0xFF:无效。 |
总电流 | 2 | WORD | 有效值范围:020000(偏移量1000A,表示-1000A+1000A)。最小计量单元:0.1A。0xFF,0xFE:异常。0xFF,0xFF:无效。 |
SOC | 1 | BYTE | 有效值范围:0100(表示0%100%)。最小计量单元:1%。0xFE:异常。0xFF:无效。 |
DC-DC状态 | 1 | BYTE | 0x01:工作。0x02:断开。0xFE:异常。0xFF:无效。 |
档位 | 1 | BYTE | 见档位定义 |
绝缘电阻 | 2 | WORD | 有效范围060000(表示0kΩ60000kΩ)。最小计量单元:1kΩ |
预留 | 2 | WORD | 预留位 |
驱动电机数据
数据表示内容 | 长度/字节 | 数据类型 | 描述及要求 |
---|
驱动电机个数 | 1 | BYTE | 有效值1~253 |
驱动电机总成信息列表 | ∑每个驱动电机总成信息长度 | - | 按驱动电机序号依次排列,每个驱动电机数据格式和定义见《每个驱动电机数据格式和定义》(本文未列出,见国标) |
燃料电池数据
数据表示内容 | 长度/字节 | 数据类型 | 描述及要求 |
---|
燃料电池电压 | 2 | WORD | 有效值范围:020000(表示0V2000V)。最小计量单元:0.1V。0xFF,0xFE:异常。0xFF,0xFF:无效。 |
燃料电池电流 | 2 | WORD | 有效值范围:020000(表示0A+2000A)。最小计量单元:0.1A。0xFF,0xFE:异常。0xFF,0xFF:无效。 |
燃料消耗率 | 2 | WORD | 有效值范围:060000(表示0kg/100km600kg/100km)。最小计量单元:0.01kg/100km。0xFF,0xFE:异常。0xFF,0xFF:无效。 |
燃料电池温度探针总数 | 2 | WORD | N个燃料电池温度探针。有效值范围:0~65531。0xFF,0xFE:异常。0xFF,0xFF:无效。 |
探针温度值 | 1×N | BYTE[N] | 有效值范围:0240(数值偏移量40°C,表示-40°C+200°C)。最小计量单元:1°C。 |
氢系统中最高温度 | 2 | WORD | 有效值范围:02400(偏移量40°C,表示-40°C200°C)。最小计量单元:0.1°C。0xFF,0xFE:异常。0xFF,0xFF:无效。 |
氢系统中最高温度探针代号 | 1 | BYTE | 有效值范围:1~252。0xFE:异常。0xFF:无效。 |
氢气最高浓度 | 2 | WORD | 有效值范围:060000(表示0mg/kg50000mg/kg)。最小计量单元:1mg/kg。0xFF,0xFE:异常。0xFF,0xFF:无效。 |
氢气最高浓度传感器代号 | 1 | BYTE | 有效值范围:1~252。0xFE:异常。0xFF:无效。 |
氢气最高压力 | 2 | WORD | 有效值范围:01000(表示0MPa100MPa)。最小计量单元:0.1MPa。 |
氢气最高压力传感器代号 | 1 | BYTE | 有效值范围:1~252。0xFE:异常。0xFF:无效。 |
高压DC/DC状态 | 1 | BYTE | 0x01:工作。0x02:断开。0xFE:异常。0xFF:无效。 |
车辆位置数据
数据表示内容 | 长度/字节 | 数据类型 | 描述及要求 |
---|
定位状态 | 1 | BYTE | 【BIT0】0:有效定位;1:无效定位。(当数据通信正常,而不能获取定位信息时,发送最后一次有效定位信息,并将定位状态置为无效。【BIT1】0:北纬;1:南纬。【BIT2】0:东经;1:西经。【BIT3~7】保留 |
经度 | 4 | DWORD | 以度为单位的纬度值乘以106,精确到百万分之一度 |
纬度 | 4 | DWORD | 以度为单位的纬度值乘以106,精确到百万分之一度 |
极值数据
数据表示内容 | 长度/字节 | 数据类型 | 描述及要求 |
---|
最高电压电池子系统号 | 1 | BYTE | 有效值范围:1~250。0xFE:异常。0xFF:无效。 |
最高电压电池单体代号 | 1 | BYTE | 有效值范围:1~250。0xFE:异常。0xFF:无效。 |
电池单体电压最高值 | 2 | WORD | 有效值范围:015000(表示0V15V)。最小计量单元:0.001V。0xFF,0xFE:异常。0xFF,0xFF:无效。 |
最低电压电池子系统号 | 1 | BYTE | 有效值范围:1~250。0xFE:异常。0xFF:无效。 |
最低电压电池单体代号 | 1 | BYTE | 有效值范围:1~250。0xFE:异常。0xFF:无效。 |
电池单体电压最低值 | 2 | WORD | 有效值范围:015000(表示0V15V)。最小计量单元:0.001V。0xFF,0xFE:异常。0xFF,0xFF:无效。 |
最高温度子系统号 | 1 | BYTE | 有效值范围:1~250。0xFE:异常。0xFF:无效。 |
最高温度探针序号 | 1 | BYTE | 有效值范围:1~250。0xFE:异常。0xFF:无效。 |
最高温度值 | 1 | BYTE | 有效值范围:0250(数值偏移量40°C,表示-40°C+210°C)。最小计量单元:1°C。0xFE:异常。0xFF:无效 |
最低温度子系统号 | 1 | BYTE | 有效值范围:1~250。0xFE:异常。0xFF:无效。 |
最低温度探针序号 | 1 | BYTE | 有效值范围:1~250。0xFE:异常。0xFF:无效。 |
最低温度值 | 1 | BYTE | 有效值范围:0250(数值偏移量40°C,表示-40°C+210°C)。最小计量单元:1°C。0xFE:异常。0xFF:无效 |
报警数据
数据表示内容 | 长度/字节 | 数据类型 | 描述及要求 |
---|
最高报警等级 | 1 | BYTE | 为当前发生的故障中的最高等级值,有效值范围:0~3。0:无故障。1:1级故障,指代不影响车辆正常行驶的故障。2:2级故障,指代影响车辆性能,需驾驶员限制行驶的故障。3:3级故障,为最高级别故障,指代驾驶员应立即停车处理或请求救援的故障具体等级对应的故障内容由厂商自行定义。0xFE:异常。0xFF:无效。 |
通用报警标志 | 4 | DWORD | 见通用报警标志位定义(本文未列出,具体见国标) |
可充电储能装置故障总数N1 | 1 | BYTE | N1个可充电储能装置故障有效值范围:0~252。0xFE:异常。0xFF:无效。 |
可充电储能装置故障代码列表 | 4×N1 | DWORD | 扩展性数据,由厂商自行定义,可充电储能装置故障个数等于可充电储能装置故障总数N1 |
驱动电机故障总数N2 | 1 | BYTE | N2个驱动电机故障有效值范围:0~252。0xFE:异常。0xFF:无效 |
驱动电机故障代码列表 | 4×N2 | DWORD | 厂商自行定义,驱动电机故障个数等于驱动电机故障总数N2 |
发动机故障总数N3 | 1 | BYTE | N3个驱动电机故障,有效值范围:0~252。0xFE:异常。0xFF:无效 |
发动机故障列表 | 4×N3 | DWORD | 厂商自行定义,发动机故障个数等于驱动电机故障总数N3 |
其他故障总数N4 | 1 | BYTE | N4个其他故障,有效值范围:0~252。0xFE:异常。0xFF:无效 |
其他故障代码列表 | 4×N4 | DWORD | 厂商自行定义,故障个数等于故障总数N4 |
自定义数据
数据表示内容 | 长度/字节 | 数据类型 | 描述及要求 |
---|
自定义数据长度 | 2 | WORD | 自定义数据长度n,有效范围1~65531 |
自定义数据 | 1×N | BYTE[N] | 扩展性数据,由用户自行定义 |
档位状态位定义
位 | 定义 |
---|
Bit7 | 预留,预留位用0表示 |
Bit6 | 预留,预留位用0表示 |
Bit5 | 1:有驱动力。0:无驱动力。 |
Bit4 | 1:有制动力。0:无制动力。 |
Bit3~0 | 挡位:=0000:空挡。=0001:1挡。=0010:2挡。=0011:3挡。=0100:4挡。=0101:5挡。=0110:6挡。=…。=1101:倒挡。=1110:自动D挡。=1111:停车P。 |
车辆登出数据格式和定义
数据表示内容 | 长度/字节 | 数据类型 | 描述及要求 |
---|
登出时间 | 6 | BYTE[6] | 见时间定义 |
登出流水号 | 2 | WORD | 登出流水号与当次登入流水号一致 |
平台登入数据格式和定义
数据表示内容 | 长度/字节 | 数据类型 | 描述及要求 |
---|
平台登入时间 | 6 | BYTE[6] | 见时间定义 |
登入流水号 | 2 | WORD | 下级平台每登入一次,登入流水号自动加1,从1开始循环累加,最大值为65531,循环周期为天 |
平台用户名 | 12 | STRING | 平台登入用户名 |
平台密码 | 20 | STRING | 平台登入密码 |
加密规则 | 1 | BYTE | 0x01:数据不加密。0x02:数据经过RSA算法加密。0x03:数据经过AES128位算法加密。0xFE:异常。0xFF:无效。其他:预留 |
平台登出数据格式和定义
数据表示内容 | 长度/字节 | 数据类型 | 描述及要求 |
---|
登出时间 | 6 | BYTE[6] | 见时间定义 |
登出流水号 | 2 | WORD | 登出流水号与当次登入流水号一致 |