标签: modbus
作者:xjme
前言:
modbus 设备接入乐联网大概经历了三个过程:
第一个阶段:
提供了pc 测试软件,如下图所示。
下载地址http://www.lewei50.com/dev/content/downloads?sk=74,当时的想法就是可以通过pc 软件直接把modbus设备接入乐联网。
优点:通过PC直接接入乐联网,简单快捷
缺点:只能用PC作为网关。
第二个阶段:
提供了类似wifi master 之类的标准化设备如下图:
具体内容链接:http://www.lewei50.com/dev/doc/201
优点:接入网关成本低。
缺点:接入网关属于定制设备,只能向乐为购买。
第三个阶段:
直接用标准DTU设备将modbus 设备接入
优点:完全变成了标准设备接入乐联网,不需要锁定网关厂家,TB直接采购就可以了(采购DTU的时候需要注意要有注册包发送功能的DTU就可以)。
本篇文章主要就是来说怎么用标准dtu 来把modbus设备接入乐联网的。
如果手里有modbus设备想接入一起玩的,可以尝试加QQ群626047753(请注明你手里的modbus设备是啥,乐联网账号是啥,否则不会通过
目的:
用标准设备(淘宝买的DTU,不区分厂家,不区分GPRS,wifi 以太网)把modbus标准设备直接接入乐联网。
下面的三相电表 两个DTU (一个以太网的,一个gprs的)都是TB 直接买的:
乐联网web配置
建立一个modbus 设备,注意红框内容
标识:与后面DTU 注册包内容对应,不是必须要01
类型:只能选择 lw-modbus
Slave id:Modbus device NO.
Func:Modbus 操作码,这里选择03。
是否可控:选择“是”,点击“使用乐联网modbus设备”以后API 地址和公网IP 自动出现内容。
建立一个传感器,S是必须的前缀,72 是因为要访问寄存器地址0x0048,注意根据modbus协议内容进行数值转换。
实验用设备
Modbus 设备
实验设备为JSY-301 三相电表,相关寄存器如下,0x0048 为测试寄存器。
|序号|定义 |寄存器地址 | 读/写 | 数据类型与计算 说明 |
| -------- | :----- : | :----: |
| 1 | A相电压 | 0048H |读| 无符号数,值=DATA/100,单位V |
| 2 | A相电流 | 0049H|读| 无符号数,值=DATA/1000,单位A |
| 3 | A相有功功率 | 004AH |读| 无符号数,值=DATA,单位为W |
| 4 | A相有功总电能 | 004BH 004CH |读| 无符号数,值=DATA/800,单位为kWh,数值与000CH,000DH寄存器相同 |
| 5 | A相功率因数 | 004DH |读| 无符号数,值=DATA/1000 |
| 6 | A相二氧化碳排量 | 004EH 004FH |读| 无符号数,值=DATA/1000,单位为Kg|
| 7 | A相报警及继电器状态| 0050H |读| 高字节未用,低字节为报警及继电器状态指示,具体意义见报警及继电器状态指示字意义表|
| 8 | B相电压 | 0051H |读| 无符号数,值=DATA/100,单位V |
| 9 | B相电流 | 0052H |读| 无符号数,值=DATA/1000,单位A |
|10 | B相有功功率 | 0053H |读| 无符号数,值=DATA,单位为W |
|11 | B相有功总电能 | 0054H 0055H|读| 无符号数,值=DATA/800,单位为kWh,数值与000EH,000FH寄存器相同 |
| 12 | B相功率因数 | 0056H |读| 无符号数,值=DATA/1000|
| 13 | B相二氧化碳排量| 0057H 0058H|读| 无符号数,值=DATA/1000,单位为Kg |
| 14 | B相报警及继电器状态 | 0059H |读| 高字节未用,低字节为报警及继电器状态指示,具体意义见报警及继电器状态指示字意义表|
| 15 | C相电压 | 005AH |读| 无符号数,值=DATA/100,单位V |
| 16 | C相电流 | 005BH |读| 无符号数,值=DATA/1000,单位A |
| 17 | C相有功功率 | 005CH |读| 无符号数,值=DATA,单位为W |
| 18 | C相有功总电能 | 005DH 005EH |读| 无符号数,值=DATA/800,单位为kWh,数值与0010H,0011H寄存器相同 |
| 19 | C相功率因数 | 005FH |读| 无符号数,值=DATA/1000 |
| 20 |C相二氧化碳排量| 0060H 0061H|读| 无符号数,值=DATA/1000,单位为Kg |
| 21 | C相报警及继电器状态 | 0062H |读| 高字节未用,低字节为报警及继电器状态指示,具体意义见报警及继电器状态指示字意义表 |
| 22 | 三相有功总电能 | 0063H 0064H|读| 无符号数,值=DATA/800,单位为kWh,数值与0012H,0013H寄存器相同 |
| 23 | 频率 | 0065H |读| 无符号数,值= DATA/100,单位为Hz |
读数据寄存器(功能码03H):读A相的3个寄存器值,结果为:电压231.5V,电流10.123A,功率2343W,仪表地址为1。
主机读数据帧:
|地址|命令 |起始地址(高位在前) | 寄存器数(高位在前) | 校验码(低位在前) |
| -------- |:----- :| :----: | :----: |:----: |
| 01H | 03H | 00H,48H | 00H,03H |85H,DDH |
仪表回应数据帧:
|地址|命令 |数据长度| 数据段(6字节) | 校验码 |
| -------- |:----- :| :----: | :----: |:----: |
| 01H | 03H | 06H | 5AH,6EH,27H,8BH,09H,27H|F8H,92H |
写数据寄存器(功能码10H):设置A相电压上限为260V,A相电流上限为50A,仪表地址为1。
主机写数据帧:
|地址|命令 |起始地址| 寄存器数| 字节数 | 数据段 | 校验码 |
| -------- |:----- :| :----: | :----: |:----: |
| 01H | 10H | 00H,20H | 00H,02H |04H |01H,04H,01H,F4H|B1H,9DH|
仪表回应数据帧:
|地址|命令 |起始地址| 寄存器数| 校验码 |
| -------- |:----- :| :----: | :----: |:----: |
| 01H | 10H | 00H,20H | 00H,02H |40H,02H |
DTU设备
实验采用有人410S,只要是可以在TCP链接以后第一时间发送注册包的设备都可以。注册包内容为乐联网USRKEY_网关号,连接到modbus.lewei50.com,端口号为9970。具体内容见下面有人配置页面截图红框“注册包内容”。
最终测试效果
Modbus 控制台效果,起始位置为10进制(72=0x48)
直接测试发送原始数据,对比该电表协议内容更容易理解。
最终数据结果如下:
感兴趣可以加群:
乐联网 modbus dtu 群号 626047753 (申请时候注明乐联网ID 和 modbus 设备名称)