资料

物联网IoT协议之OPC UA快速入门教程
UaExpert使用教程


本文内容将帮助你通过thingsboard网关快速接入opc ua协议的设备。并演示一个简单的数据读取与控制的例子。

准备环境

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

  • thingsboard 3.2.1
  • tb-gateway 2.5.5.2
  • python3 3.7

    OPC UA服务器

    使用python的opcua搭建opcua服务端,各个步骤含义看代码注释
    依赖安装
    1. pip install opcua
    ```python import sys

sys.path.insert(0, “..”) import time from opcua import ua, Server, uamethod

@uamethod def set_value(parent, node_id, value): “”” 给node_id的节点赋值为value :param parent: 不需要传 :param node_id: 节点ID :param value: 节点要改的值 :return: res:boolean “”” node = server.get_node(node_id) res = False if ua.AccessLevel.CurrentWrite in list(node.get_access_level()): node.set_value(value) res = True return res

def argument(name, date_type, value_rank): “”” 构建参数 :param name: :param date_type: ua.ObjectIds.xxx :param value_rank: :return: “”” v = ua.Argument() v.Name = name v.DataType = ua.NodeId(date_type) v.ValueRank = value_rank v.ArrayDimensions = [] v.Description = ua.LocalizedText(name) return v

if name == “main“:

  1. global server
  2. server = Server()
  3. # 服务地址
  4. server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/")
  5. # 允许的访问策略
  6. server.set_security_policy([
  7. ua.SecurityPolicyType.NoSecurity,
  8. ua.SecurityPolicyType.Basic128Rsa15_SignAndEncrypt,
  9. ua.SecurityPolicyType.Basic128Rsa15_Sign])
  10. uri = "http://examples.freeopcua.github.io"
  11. idx = server.register_namespace(uri)
  12. objects = server.get_objects_node()
  13. # 添加节点
  14. dev = objects.add_object(idx, "Device")
  15. dev_name = dev.add_variable(idx, "Name", "opcua_sensor")
  16. dev_battery = dev.add_variable(idx, "BatteryLevel", 9.0)
  17. dev_humidity = dev.add_variable(idx, "Humidity", 13)
  18. dev_switch = dev.add_variable(idx, "Switch", 1)
  19. dev_temperature = dev.add_variable(idx, "Temperature", 19)
  20. # 设置客户端可写
  21. dev_switch.set_writable()
  22. # 定义方法参数
  23. in_arg_node_id = argument("node_id", ua.ObjectIds.String, -1)
  24. in_arg_value = argument("value", ua.ObjectIds.Int64, -1)
  25. out_arg = argument("result", ua.ObjectIds.Boolean, -1)
  26. # 添加方法
  27. set_value_node = dev.add_method(idx, "set_value", set_value, [in_arg_node_id, in_arg_value], [out_arg])
  28. # 启动服务
  29. server.start()
  30. try:
  31. count = 0
  32. while True:
  33. # 设置和opcua-test.json配置文件中的数据采集频率("scanPeriodInMillis": 5000)一致,容易看效果.
  34. time.sleep(5)
  35. count += 0.1
  36. dev_battery.set_value(count)
  37. finally:
  38. server.stop()
  1. <a name="VTnFY"></a>
  2. ## OPC UA py可视化客户端
  3. 安装python依赖
  4. ```shell
  5. pip3 install opcua-client
  6. pip3 install PyQt5

命令行执行下面指令

  1. opcua-client

就可以看到opcua的界面,在前面的python opcua服务器启动的情况下,点击右上方的Connect按钮就能看到数据。

ThingsBoard官网介绍的节点获取方式如下图:
image.png
路径就是图中左边的树形路径,推荐使用图中右边的,命名空间标识符+节点标识符。像这样:Switch的值就是 ${ns=2;i=5} 原因文章末尾说。
image.png

tb网关配置

在网页版创建设备,勾选是网关选项.
image.png
复制设备访问令牌,粘贴到配置文件中(这里截图中的opcua_sensor设备不是手动创建的,是根据后面步骤启动网关和opcua服务器后,自动生成的)
image.png
tb_gateway.yaml中打开opcua连接器

  1. thingsboard:
  2. host: localhost # tb服务器地址
  3. port: 1883 # tb服务器mqtt端口,因为gateway与tb通过mqtt交互
  4. remoteShell: false
  5. remoteConfiguration: false
  6. security:
  7. accessToken: z5zRQmSXe64U39my83jd # 网关的设备访问令牌
  8. qos: 0
  9. storage:
  10. type: memory
  11. read_records_count: 100
  12. max_records_count: 100000
  13. connectors: #打开opcua连接器
  14. -
  15. name: OPC-UA Connector
  16. type: opcua
  17. configuration: opcua-test.json

opcua-test.json配置 「和python代码中的服务器设置对应」