1. 在opcua框架的Server端添加方法
参考文章:
freeopcua调用方法输入参数| Python解析数组到输入列表
为OPC UA python服务器/客户端添加安全性(异步)
OPCUA和asyncua — [3] 添加方法
OPC UA的Server端新增方法的关键代码如下:
from asyncua import Server, ua, uamethod
@uamethod
def func(parent):
return
method = func
args = [2, "MyMethod", method, None, None]
await server.nodes.objects.add_method(args[0], args[1], args[2], args[3], args[4])
await server.nodes.objects.add_method方法新增方法需要的五个参数解释如下:
运行代码后可以在UaExpert工具看到Root根目录下面增加了MyMethod名称的方法:
需要了解的知识点:
Python的OPCUA库
opcua节点规则:
ns=<命名空间索引>;<标识符类型>=<标识符>
命名空间索引:
ns表示命名空间索引,一般为2
标识符类型枚举:
i-数值
s-字符串
g-全局唯一标识符 (GUID)
b-不透明值(ByteString 中的命名空间特定格式)
2. 在opcua框架的Client端调用方法
OPC UA客户端:调用方法
使用call_method()函数调用节点的方法input_Arg,input_Arg有两个输入参数,都是ua.VariantType.UInt32数据类型
from opcua import Client, ua
url = "opc.tcp://10.239.37.236:4840"
client = Client(url)
#client.set_user = "user"
#client.set_password = "pw"
client.connect()
print("client connected")
while True:
lsd = client.get_node("ns=4; i=6013")
LastScanData = lsd.get_value()
print(LastScanData)
start = client.get_node("ns=3; i=7009")
input_Arg = client.get_node("ns=3, i=6051")
res = start.call_method(input_Arg, ua.Variant(5, ua.VariantType.UInt32), ua.Variant(99, ua.VariantType.UInt32))
time.sleep(1)