ThingsBoard Modbus数据采集与控制

文章目录

    • 准备环境
    • 案例目标:
    • 配置Modbus连接器
    • modbus salve配置
    • 服务端RPC
      • 规则链
    • 规则链配置(信息读取与控制)
      • 信息读取
      • 规则链 读取+控制


本文内容将帮助你通过thingsboard网关快速接入modbus协议的设备。并演示一个简单的数据读取与控制的例子。
本文具体实现官网modbus官网modbus例子,并补充控制modbus的部分

准备环境

具体搭建步骤不在本文介绍

  • thingsboard 3.2.1
  • tb-gateway 2.5.5.2
  • modbus salve 7.3.1

案例目标:

俩种方式

  1. 服务端RPC
    1. 直接发http请求将温度重置为10
  2. 规则链RPC节点
    1. 温度(寄存器地址0)和湿度(寄存器地址1)作为遥测数据传到thingsboard,并将电量(寄存器地址2)作为属性值传到thingsboard。在规则链中实现模拟控制:如果温度大于40,则通过rpc控制将温度重置为10。

配置Modbus连接器

tb_gateway.yaml中配置thingsboard的地址端口以及tb-gateway连接到tb使用的accessaToken(在tb页面创建设备并勾选是否网关选项,复制此设备的accessToken,填入此配置),并打开modbus连接器配置

thingsboard:
  host: localhost
  port: 1883
  remoteShell: false
  remoteConfiguration: false
  security:
    accessToken: z5zRQmSXe64U39my83jd
  qos: 0
storage:
  type: memory
  read_records_count: 100
  max_records_count: 100000
connectors:
  -
    name: Modbus Connector
    type: modbus
    configuration: modbus.json

Modbus相关配置modbus.json具体含义在配置文件的注释

{
  "server": {
    "name": "Modbus Test Server", # modbus服务器名称
    "type": "tcp",# modbus连接方式
    "host": "10.211.55.3",# 地址
    "port": 502, # 端口
    "timeout": 35,
    "method": "socket",
    "devices": [
      {
        "unitId": 1, 
        "deviceName": "TH_sensor",# 设备名称,成功后会出现在tb的设备列表中
        "attributesPollPeriod": 5000, # 每隔五秒拉取一次属性数据
        "timeseriesPollPeriod": 5000, # 每隔五秒拉取一次遥测数据
        "sendDataOnlyOnChange": false,
        "attributes": [ # 数组中的定义作为属性上传到tb
          {
            "byteOrder": "BIG",
            "tag": "batteryLevel", # 定义属性名称展示在tb设备的属性中
            "type": "long",
            "functionCode": 4, # modbus的功能码 
            "registerCount": 1,# 读取的寄存器数量(从寄存器开始地址)
            "address": 2 # 读取的寄存器开始地址
          }
        ],
        "timeseries": [ # 作为遥测数据上传的定义
          {
            "byteOrder": "BIG",
            "tag": "humidity",# 湿度
            "type": "long",
            "functionCode": 4, # modbus功能码 4(只读)
            "registerCount": 1,
            "address": 1 # modbus地址1
          },
          {
            "byteOrder": "BIG",
            "tag": "temperature",# 温度
            "type": "long",
            "functionCode": 3, # modbus功能码 3(可读写)
            "registerCount": 1,
            "address": 0 # modbus地址0
          }
        ],
        "rpc": [ # rpc写/控制功能定义
          {
            "tag": "resetTemperature", # 对应rpc中method的值要指定此值
            "type": "16int", # 数据类型
            "functionCode": 6, # modbus功能码 6 
            "objectsCount": 1,
            "address": 0 # modbus地址 0
          }
        ]
      }
    ]
  }
}

modbus salve配置

地址位0 功能码3(可读写)代表温度
地址位1 功能码4 代表湿度
地址位2 功能码4 代表电量

  • 打开modbus salve 工具栏选择 connection->connect->选择tcp方式(图1)
  • 工具栏选择Setup->Slave Definition。配置地址位0(图3)
    • Slave id对应modbus.json中的devices.unitId
    • function对应modbus.json中的functionCode
    • address对应modbus.json中的address
    • quantity是连续读取地址的数量
  • 工具栏选择File->new 配置地址位1和2(图3)
  • 单击地址0的值选中自增长模拟温度升高(图4)
  • 启动tb-gateway
    ThingsBoard Modbus数据采集与控制_第1张图片

ThingsBoard Modbus数据采集与控制_第2张图片

ThingsBoard Modbus数据采集与控制_第3张图片
ThingsBoard Modbus数据采集与控制_第4张图片

服务端RPC

规则链

确保设备的配置文件所配置的规则链中有图中红框部分(发送rpc可做消息格式验证等操作,图中省略)
ThingsBoard Modbus数据采集与控制_第5张图片
body

{
  "method": "resetTemperature",
  "params": 10
}

规则链配置(信息读取与控制)

信息读取

此时tb设备中应该有手动创建的网关设备和modbus.json中配置自动注册到tb的modbus连接的设备TH_sensor
ThingsBoard Modbus数据采集与控制_第6张图片
ThingsBoard Modbus数据采集与控制_第7张图片

规则链 读取+控制

ThingsBoard Modbus数据采集与控制_第8张图片

过滤节点 当温度大于40脚本内容

return msg.temperature > 40;

转换节点 构建rpc消息脚本内容 ,与老版本略有差异 (规则链rpc格式官网链接)

var request = {};
request.method = "resetTemperature";
request.params = 10;
return {msg: request, metadata: metadata, msgType: msgType};

最后调用动作节点 rpc call request即可发送rpc控制命令。
然后观察设备的遥测数据中的温度,每当超过40,五秒后被重置为10。

你可能感兴趣的:(java,物联网,thingsboard,modbus,IoT)