目的

内置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,那么这里应该填入8192

  • param.format
    //24为批量采集24个数据,f表示浮点数,>或<表示大小端,参见:https://blog.csdn.net/mijichui2153/article/details/108692649

  • param.equation
    数据转换公式,x为当前值,可以进行+、-、*、/,以及round()取小数位等


【附】

下载excel格式的数据点表,理解modbus rtu驱动的配置逻辑:

作者:admin  创建时间:2022-05-25 23:55
最后编辑:IOTOS  更新时间:2023-11-29 09:38