Pdu(未加密)
1. 通信协议设计
该文档主要介绍智能PDU & NB模组 & 电信平台之间通讯协议
1.1 PDU上传至电信AEP平台数据帧格式
| 序号 | 变量名称 | 字节数 | 字节数 | 数据类型 | 单位 | 备注 |
|---|---|---|---|---|---|---|
| 1 | messageid | 1 | 2 | unsigned char | 固定是1,NB平台解析数据用 | |
| 2 | 产品ID | 1 | 2 | unsigned char | 02表示带液晶PDU | |
| 3 | 版本ID | 1 | 2 | unsigned char | 01测试版本,00代表正式版本 | |
| 4 | 总回路 | 1 | 2 | unsigned char | 最多24个回路 | |
| 5 | 当前上传回路 | 1 | 2 | unsigned char | ||
| 6 | 变长指令长度 | 1 | 2 | unsigned char | 总字节数102-6=96; | |
| 7 | 总控电流 | 2 | 4 | int | ||
| 8 | 总控电压 | 1 | 2 | int | ||
| 9 | 总控电度 | 4 | 8 | long | ||
| 10 | 分组组ID | 1 | 2 | unsigned char | 分成4组,1-6,7-12,13-18,19-24 | |
| 11 | IMEI1 | 8 | 16 | string | 模组IMEI是15位,前面补0凑成16位 | |
| 12 | PDU网关ID | 4 | 8 | LONG | 模组IMEI的后8位,模块2的ID | |
| 13 | ICCID | 10 | 20 | string | 卡ICCID | |
| 14 | 程序版本号 | 4 | 8 | long | 年月日8位数表示,比如20190311 | |
| 15 | 通讯次数 | 2 | 4 | int | 跟上位发起一次通讯后,通讯次数加1 | |
| 16 | 支路电流A | 2 | 4 | int | A | 例子12.02A |
| 17 | 支路相电压A-N | 1 | 2 | int | V | 例子220V,可以1个字节。没有小数。 |
| 18 | 支路有功电度 | 4 | 8 | long | kWh | 1000千瓦小时 |
| 19 | 支路过电流指示 | 1 | 2 | unsigned char | 1=报警 | |
| 20 | 支路开关状态指示 | 1 | 2 | unsigned char | 0=继电器断开;1=继电器闭合 | |
| 21 | 支路电流阈值 | 2 | 4 | int | 每个支路都上报最新设置的阈值 | |
| 22 | 温度 | 2 | 4 | int | ||
| 23 | 湿度 | 2 | 4 | int |
1.2 AEP平台下发数据帧格式定义
| 序号 | 变量名称 | 字节数 | 位数 | 数据类型 | 备注 |
|---|---|---|---|---|---|
| 1 | messageid | 1 | 2 | unsigned char | 固定是2,NB平台解析数据用 |
| 2 | mid | 2 | 4 | int | NB平台自动生成,messageid,每一条消息不一样的 |
| 3 | 产品ID | 1 | 2 | unsigned char | 02代表带液晶PDU |
| 4 | 版本ID | 1 | 2 | unsigned char | 01代表测试版本,00代表正式版本 |
| 5 | 指令ID | 1 | 2 | unsigned char | 01=修改分合闸控制指令;02=修改采集频率;04=电流阈值; |
| 6 | 当前回路 | 1 | 2 | unsigned char | 单独控制(总控是40) |
| 7 | 变长指令长度 | 1 | 2 | unsigned char | 北向平台设置成17 |
| 8 | 指令ID | 4 | 8 | long | 北向平台下发的指令ID |
| 9 | 支路开关 | 1 | 2 | unsigned char | 1=分闸;2=合闸; |
| 10 | 上传采集频率 | 2 | 4 | int | 1分钟到24小时(对网关不是对每个指路的) |
| 11 | 支路有功电度 | 4 | 8 | long | |
| 12 | 支路电流阈值 | 2 | 4 | int |
1.3 PDU上传信息至电信AEP平台数据帧举例说明
AEP平台接收到PDU上传数据
0102001801600439d2000000b30108625920517945385179453889861120279012321935202109280000
01f4a90002fe4e000007d0022bb300020042010001f40258bd00020236010001f4
028ac70002042a010001f400000000000000000001f400000000000000000001f4
013a027a
解析
01 : 上传msgID
02 : 表示带液晶PDU
00 : 表示正式版软件
18 : PDU支路总数是0x18,即24个支路
01:当前上传回路:1/2/3/4/表示支路1-6,7-12,13-18,19-24
60 : 指令长度96
0439:表示输入总电流0x0439, 是实际电流放大100倍,实际电流:10.81A
d2 : 表示输入电压0xD2, 即为210V
000000b3 : 表示输入电能0x000000b3(十进制179),是实际电能100倍,实际电能1.79kWh
01: 表示分组ID,1/2/3/4/表示支路1-6,7-12,13-18,19-24
0862592051794538:表示IMEI, IMEI只有15位,前面补0变成16位
51794538 :表示PDU ID,IMEI的后8位
89861120279012321935:20位的电信卡ICCID
20210928 : 2021年9月28号的程序版本
0000: NB模组通讯次数第0次
01f4: 支路1的电流0x01f4 (500),是实际电流100倍,实际电流5A
a9 : 支路1的电压169V
0002fe4e: 支路1的电能0x0002fe4e(196174),是实际电能的100倍,实际电能1961.74KWh
00: 支路1超电流上限报警
00:支路1的继电器状态,0表示继电器断开,1表示闭合
07d0:支路1的电流阈值0x07d0(2000),是实际电流阈值100倍,实际电流阈值20A。
022b : 支路2的电流0x022b(555),是实际电流100倍,实际电流5.50A
B3 : 支路2的电压179V
00020042: 支路2的电能0x00020042(131138),是实际电能的100倍,实际电能1311.38KWh
01: 支路2超电流上限报警
00:支路2的继电器状态,0表示继电器断开,1表示闭合
01f4:支路2的电流阈值,是实际阈值100倍,实际5A。因超阈值,故超电流上限报警。
0258 : 支路3的电流0x0258(600),是实际电流100倍,实际电流6.00A
Bd : 支路3的电压189V
00020236: 支路3的电能0x00020236(131638),是实际电能的100倍,实际电能1316.38KWh
01: 支路3超电流上限报警
00:支路3的继电器状态,0表示继电器断开,1表示闭合
01f4:支路3的电流阈值,是实际阈值100倍,实际5A。因超阈值,故超电流上限报警。
028a : 支路4的电流0x028a(650),是实际电流100倍,实际电流6.50A
C7 : 支路4的电压199V
0002042a: 支路4的电能0x0002042a(132138),是实际电能的100倍,实际电能1321.38KWh
01: 支路4超电流上限报警
00:支路4的继电器状态,0表示继电器断开,1表示闭合
01f4:支路4的电流阈值,是实际阈值100倍,实际5A。因超阈值,故超电流上限报警。
0000 : 支路5的电流0x028a(650),是实际电流100倍,实际电流0A
00 : 支路5的电压0V
00000000 : 支路5的电能0,是实际电能的100倍,实际电能0KWh
00: 支路5无报警
00:支路5的继电器状态,0表示继电器断开,1表示闭合
01f4:支路5的电流阈值,是实际阈值100倍,实际5A。无报警。
0000 : 支路6的电流0,是实际电流100倍,实际电流0A
00: 支路6的电压0V
00000000: 支路6的电能0,是实际电能的100倍,实际电能0KWh
00: 支路6超电流上限报警
00:支路6的继电器状态,0表示继电器断开,1表示闭合
01f4:支路6的电流阈值,是实际阈值100倍,实际5A。无报警。
013a:温度0x013a(314),实际温度值放大100倍,实际温度值31.4℃
027a:湿度值0x027a(634),是实际湿度值放大100倍,实际湿度值63.4%
1.4 电信AEP平台下发命令控制PDU举例说明
020000020001011100000000010005000000000000: 支路1断开
02:表示平台下发数据
0000:msg id ,平台自动生成
02 : 产品ID,02表示带液晶的PDU产品
00 : 版本ID,表示正式版本
01 :指令ID,表示修改指令分合闸指令
01: 当前回路
11:长度字段
00000000:指令ID
01: 支路的分合闸动作1=分闸;2=合闸
0005:采集频率5分钟
00000000:电能
0000 :电流阈值
2.接口设计
2.1 上传数据接口文档
2.2 指令下发接口文档
请求地址:36.112.128.245:9000/Pdu/sendCommand
请求方法:POST
请求体:application/json;charset=utf-8
| 参数名 | 必填 | 字段类型 | 描述 |
|---|---|---|---|
| pduId | 是 | String | 8位,表示产品id,例:51768144 |
| circuitId | 是 | String | 回路id,如果是单数回路,必须在前面加0凑够两位,例:02 |
| instructionId | 是 | String | 指令id,1表示控制开关,2表示修改上传频率,4表示设置阈值 ,例:2 |
| OFState | 否 | String | 开关,若指令id是1,必填。ON表示开启设备,OFF表示关闭设备,例:ON |
| frequency | 否 | String | 上传频率,若指令id是2,必填。单位:分钟,例:10 |
| threshold | 否 | String | 阈值,若指令id是4,必填。单位:A。 例:20 |
响应体: application/json;charset=utf-8
| 参数 | 描述 |
|---|---|
| msg | 响应结果,例:ok |
| result | 响应内容 |
| code | 响应码,例:0 |
错误码解释:
| 错误码 | 描述 |
|---|---|
| 1304 | 请求参数为空 |
| 1308 | 终端ID在数据库中不存在 |
| 1306 | 产品不存在 |
| 1314 | 指令下发,设备状态不合法 |
| 8800 | 内部错误,请联系管理员 |
| 1349 | 该设备缓存指令数达到50上限 |
请求示例:
{
"pduId":"51768144",
"circuitId":"02",
"instructionId":"4",
"OFState":"",
"frequency":"",
"threshold": "20",
}
响应示例:
{
"msg": "ok",
"result": {
"createBy": "zrtimes",
"productId": 15097961,
"commandStatus": "指令已保存",
"createTime": 1637031839459,
"imei": "862592051768144",
"commandId": "47",
"deviceId": "5e7b154faf944da5a7b3211b4efececa",
"ttl": 7200,
"command": "0200000200040211000000000100050000000032"
},
"code": 0
}
3. 数据库设计
Pdu_device
- 该表存放pdu_id与AEP平台的device_id对应关系。
- 进行指令下发时需要将北向传递的pdu_id映射为AEP平台的device_id。

pdu_data
- 该表存放解析后的pdu数据,包括各回路数据

log_pdu_datareport
- 设备上报数据日志

log_pdu_command
- 指令下发接口日志


浙公网安备 33010602011771号