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

  • 指令下发接口日志

4. 代码编写

posted @ 2021-11-18 10:08  初夏那片海  阅读(66)  评论(0)    收藏  举报