目的
内置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”: {
“sub”: ["serial": "com2,9600,N,8,1,0", //示例,本地串口配置
]
},
“datahub”:””,
“bind”: {
}
}
- dr_modbus_rtu_serial.py:
{
“parentid”: null,
“driver”: “python/dr_modbus_rtu.ModbusDriver”,
“param”: {
“sub”: ["tcp":59142, //示例,DTU模块网络端需配置的平台TCP服务器端口 "serial": "1,9600,N,8,1,0", //示例,DTU模块串口端配置参数
]
},
“datahub”:””,
“bind”: {
}
}
数据点配置
以下配置对本文提到的3个内置modbus驱动均适用:
{
“disabled”: false, //是否过滤
“proxy”: {"index": "", //批量采集返回的第几个数据 "pointer": null //是否指向其他数据点
},
“position”: [],
“equation”: null,
“class”: null,
“parentId”: null,
“param”: {"regad": 32, //寄存器地址 "funid": 3, //功能号 "equation": "round(x,1)", //数值转换 "devid": 1, //设备地址 "format": ">24f" //连续采集数量以及数据类型、内存字节序
}
}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驱动的配置逻辑:
最后编辑:admin 更新时间:2022-08-12 14:50