目的
内置modbus rtu相关的驱动包含以下3个:
- dr_modbus_rtu.py:用于通过dtu透传把232串口转成tcp客户端的情形
- dr_modbus_rtu_over_tcp.py:同上,另一种代码实现
- dr_modbus_rtu_serial.py:用于本地COM串口直连的情形
该类驱动支持标准的modbus rtu协议,实施人员作为直接用户无需编写代码,通过配置即可实现对任意支持该协议的设备实现数据采集接入(包括控制)。
用户通过设备传感+DTU,结合平台“云网关”功能,可以快速实现modbus rtu设备上云(参考:Modbus-rtu报文协议TCP连接透传测试)
说明
驱动根配置
- dr_modbus_rtu.py:
{ "parentid": null, "driver": "python/dr_modbus_rtu.ModbusDriver", "param": { "serial": "com2,9600,N,8,1,0", //示例,本地串口配置 "sub": [ ] }, "datahub":"", "bind": { } }
- dr_modbus_rtu_serial.py:
{ "parentid": null, "driver": "python/dr_modbus_rtu.ModbusDriver", "param": { "tcp":59142, //示例,DTU模块网络端需配置的平台TCP服务器端口 "serial": "1,9600,N,8,1,0", //示例,DTU模块串口端配置参数 "sub": [ ] }, "datahub":"", "bind": { } }
数据点配置
以下配置对本文提到的3个内置modbus驱动均适用:
{ "disabled": false, //是否过滤 "proxy": { "index": "", //批量采集返回的第几个数据 "pointer": null //是否指向其他数据点 }, "position": [], "equation": null, "class": null, "parentId": null, "constant":"(当设定了此属性时,设定值将被当成固定值,在采集循环时上报。param的任何配置将不起作用)", "param": { "regad": 32, //寄存器地址 "funid": 3, //功能号 "equation": "round(x,1)", //数值转换 "devid": 1, //设备地址 "format": ">24f" //连续采集数量以及数据类型、内存字节序 } }
注意1:format内存字节解析规则参考:http://www.3scard.com/index.php?m=blog&f=view&id=78
注意2:下发控制或者写入时(功能吗5/6/15/16),format字段不能配置,或者保留为空,否则会当成查询来处理,造成指令错误。也因此,查询和控制需要用不同的数据点。
disabled
为true时,Collecting时将过滤该数据点,不会驱生成采集指令proxy.pointer
为null时,会根据param字段下的内容生成modbus采集指令;不为null时,这里填入其他数据点的标识ID,通常指向的数据点pointer为null,会生成modbus批量采集命令,返回多个数据,当前数据点结合proxy.index,会将批量返回的数据第几个按照index对应给自己。proxy.index
参见param.format配置,批量采集多个时,多个数据返回的对应关系。比如pointer通过id指向数据点A,那么A的配置中生成的批量采集返回的数据(这里24个为例),除了第一个默认对应到A本身,其他23个,分别对应给pointer指向A并且index配置是1~23的,按顺序依次对应。param.devid
modbus设备地址param.funid
modbus功能号param.regad
modbus寄存器起始地址,十六进制转换成的10进制,比如起始地址是20 00,那么这里应该填入8192param.format
//24为批量采集24个数据,f表示浮点数,>或<表示大小端,参见:https://blog.csdn.net/mijichui2153/article/details/108692649param.equation
数据转换公式,x为当前值,可以进行+、-、*、/,以及round()取小数位等
【附】
下载excel格式的数据点表,理解modbus rtu驱动的配置逻辑:
最后编辑:IOTOS 更新时间:2023-11-29 09:38