ThingsBoard网关之Modbus设备模拟采集


本篇介绍下如何使用ModbusSlave/ModbusPoll模拟ModbusRTU与ModbusTCP协议并与TB的Python网关对接。

1.准备工具

1.ModbusPoll(链接: https://pan.baidu.com/s/1cX_jow-G8cmQNaYpAZ42fg 提取码: p2gk)

2.ModbusSlave(链接: https://pan.baidu.com/s/1Fq5O5a-EuWhUBlaNUa98OQ 提取码: 95x7)

3.虚拟com端口工具VSPD(链接: https://pan.baidu.com/s/14nN79wXnh8tVYhhn6N3iNQ 提取码: f6p5)

2.ModbusRTU协议模拟

2.1本地ModbusRTU模拟

1.虚拟两个com端口,COM7,COM8

2.打开ModbusSlave,点击setup->slave(从机)definition配置从端,如图:

3.打开ModbusPoll,点击read/write(主机)definition配置主端,如图:

以上配置的是10个寄存器从机设备ID为1但只读取前4个寄存器的数据,可根据自己的需要设置。后面为了简便,只配置了一个寄存器。
4.接下来分别点击”connection”进行连接,注意修改连接界面的端口,因为我只用到了RTU模式,所以其他选项如波特率9600,比特位8,校验位1,无等价位等可以保持不变,然后点击确定进行连接,未连接成功窗口第二行会给出提示信息。

5.通讯开始,主机端显示:TX=发送命令次数,Err=错误次数,ID=从机ID,F=功能号,SR=轮询间隔时间。使用ModbusSlave工具栏的”Display->Communication Traffic按钮,可以显示出当前发送命令和接受的数据。

2.2.连接thingsBoard-gateway

1.我的网关是装在树莓派中的,所以需要用到其他转换器,整体的连接是:

电脑COM3端口–>USB转485转换器–>485转TTL转换器–>树莓派串口

2.将ModbusSlave的端口指向COM3

3.配置tb_gateway.yaml与modbus_serial.json;在tb_gateway.yaml中将连接配置指向modbus_serial.json

tb_gateway.yaml中内容如下:

thingsboard:
  host: "ip"
  port: 1883
  remoteConfiguration: false
  security:
    accessToken: "token"
storage:
  type: memory
  read_records_count: 100
  max_records_count: 100000
#  type: file
#  data_folder_path: ./data/
#  max_file_count: 10
#  max_read_records_count: 10
#  max_records_per_file: 10000
connectors:
  -
    name: Modbus Connector
    type: modbus
    configuration: modbus_serial.json

modbus_serial.json中内容如下:

{
  "server": {
    "name": "Modbus Default Server",
    "type": "serial",
    "method": "rtu",
    "port": "/dev/ttyAMA0",
    "baudrate": 9600,
    "timeout": 35,
    "devices": [
      {
        "unitId": 1,
        "deviceName": "VuritalDevice",
        "attributesPollPeriod": 5000,
        "timeseriesPollPeriod": 5000,
        "sendDataOnlyOnChange": false,
        "timeseries": [
          {
            "byteOrder": "BIG",
            "tag": "count",
            "type": "16int",
            "functionCode": 3,
            "registerCount": 1,
            "address": 0
          }
        ]
      }
    ]
  }
}

最后在TB平台上可以看到遥测值在更新

3.ModbusTCP协议模拟

3.1本地ModbusTCP模拟

修改上面Poll/Slave的连接信息,将Connection选择Modbus TCP/IP,点击连接后可看到传输的数据

3.2连接thingsBoard-gateway

配置tb_gateway.yaml与modbus_serial.json;在tb_gateway.yaml中将连接配置指向modbus.json。

tb_gateway.yaml中内容如下:

thingsboard:
  host: "ip"
  port: 1883
  remoteConfiguration: false
  security:
    accessToken: "token"
storage:
  type: memory
  read_records_count: 100
  max_records_count: 100000
#  type: file
#  data_folder_path: ./data/
#  max_file_count: 10
#  max_read_records_count: 10
#  max_records_per_file: 10000
connectors:
  -
    name: Modbus Connector
    type: modbus
    configuration: modbus.json

modbus.json内容如下:

{
  "server": {
    "type": "tcp",
    "host": "10.49.0.66",
    "port": 502,
    "timeout": 35,
    "method": "socket",
    "byteOrder": "BIG",
    "devices": [
      {
        "unitId": 1,
        "deviceName": "TCPDevice",
        "attributesPollPeriod": 5000,
        "timeseriesPollPeriod": 5000,
        "sendDataOnlyOnChange": false,
        "attributes": [
          {
            "byteOrder": "BIG",
            "tag": "count",
            "type": "16int",
            "functionCode": 3,
            "objectsCount": 1,
            "address": 0
          }
        ],
        "timeseries": [
          {
            "byteOrder": "BIG",
            "tag": "count",
            "type": "16int",
            "functionCode": 3,
            "objectsCount": 1,
            "address": 0
          }
        ],
        "rpc": [
          {
            "tag": "setValue",
            "type": "bits",
            "functionCode": 5,
            "objectsCount": 1,
            "address": 31
          },
          {
            "tag": "getValue",
            "type": "bits",
            "functionCode": 1,
            "objectsCount": 1,
            "address": 31
          },
          {
            "tag": "setCPUFanSpeed",
            "type": "32int",
            "functionCode": 16,
            "objectsCount": 2,
            "address": 33
          },
          {
            "tag":"getCPULoad",
            "type": "32int",
            "functionCode": 4,
            "objectsCount": 2,
            "address": 35
          }
        ]
      }
    ]
  }
}

最后在TB平台上能看到设备的遥测值:


文章作者: niww
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 niww !
 上一篇
TB网关测试问题记录 TB网关测试问题记录
一、Modbus网关配置1.attributes/timeseries下面的参数需要加上”byteOrder”: “BIG” 2.同时采集多个设备,要修改设备地址,值对应devices配置下的unitId 3.Modbus多主机多从机是否可
2020-06-15
下一篇 
Modbus消息帧 Modbus消息帧
一、Modbus消息帧串口通信消息帧在串口传输模式中(ASCII或RTU),传输设备以将Modbus消息转为有起点和终点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给所有设备),判知何时信
2020-06-10
  目录