1. 背景介绍
OPC UA(Unified Architecture,统一架构)是下一代的OPC 标准,它是一种工业通讯协议,通过提供一个完整的,安全和可靠的跨平台的架构,以获取实时和历史数据和时间。
OPC UA的诞生是因为现有的OPCDA通信技术是基于COM的规范,因此需要建立一个没有损失任何功能和性能的真正平替。
2. 测试搭建
在Twin CAT的项目中,增加如下的变量定义 - 注意,将OPC UA DA Access设置为3即为可读可写。
// add a parameters for the OPC UA function test
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '3'}
OPC_Test : INT;
3. OPC UA的服务器设置
TwinCAT安装好后,系统将提供UA Gateway功能,系统可以通过对UA Gateway进行相应的配置来满足UA服务的功能需求。
通过在UA Gateway上点击右键,可以打开UA Gateway的Administrate UA Gateway的配置界面。
具体需要修改的配置如下图:
1. Port : 更具需要修改为自己需要使用的端口号;
2. Security: OPCUA的证书支持多种多样,目前我们默认的情况下,使用的是None -无需证书的模式。
5. 获取节点信息
TwinCAT的完整安装工具集中提供了快速的OPC客户端测试应用,可以通此应用获取需要访问的数据的节点信息。
通过如下的截图信息可以获取到基于OPCUA库进行相应访问的节点namespace_index和节点node_identifier。
4. Python代码实现
# 导入所需的库
import opcua
# 创建一个OPC UA客户端实例
client = opcua.Client("opc.tcp://localhost:4850")
# 连接到服务器
try:
client.connect()
except Exception as e:
print("Error connecting to OPC UA Server: ", e)
else:
# 假设您已知目标节点的路径(此处仅为示例)
#node_path = "ns=<namespace_index>;s=<node_identifier>"
node_path = "ns=7;s=Station.OPC_Test"
# 使用客户端找到目标节点
try:
variable_node = client.get_node(node_path)
except Exception as e:
print(f"Failed to find node at path {node_path}: ", e)
else:
# 读取当前的节点值
value = variable_node.get_value()
print(f"节点值: {value}")
datavalue = opcua.ua.DataValue(opcua.ua.Variant(True, opcua.ua.VariantType.Boolean))
variable_node.set_value(datavalue)
#关闭连接
client.disconnect()
参考资料
[1] https://opcfoundation.cn/about/opc-technologies/opc-ua
[2] https://zhuanlan.zhihu.com/p/627906477