asyncua是OPCUA的python实现,使用起来非常方便,其github地址是https://github.com/FreeOpcUa/opcua-asyncio
UaExpert是OPC UA Client的GUI工具,当编写好server代码后并运行,我们可以使用UaExpert去和server进行通信。UaExpert使用教程参考:https://blog.youkuaiyun.com/watsoncheung/article/details/124268979
1. OPCUA的两种工作方式
客户端/服务器模式:在这种模式下,OPC UA 客户端向 OPC UA 服务器请求数据,服务器接收请求并向客户端发送数据。
发布/订阅模式:在这种模式下,OPC UA 服务器将数据“发布”到网络上,而客户端可以“订阅”特定的数据。当服务器更新数据时,客户端会收到更新的数据。
这两种模式可以根据应用场景的需要进行选择。例如,客户端/服务器模式适用于客户端需要向服务器请求单个数据项的情况,而发布/订阅模式则适用于客户端需要定期接收大量数据的情况。
OPC UA Server示例代码:
import logging
import asyncio
from asyncua import Server
logging.basicConfig(level=logging.INFO)
_logger = logging.getLogger('asyncua')
async def main():
# 创建server
server = Server()
# 初始化server
await server.init()
# 设置server的endpoint地址
server.set_endpoint('opc.tcp://192.168.5.86:4840/freeopcua/server/')
# 设置server的名字
server.set_server_name('MyOPCUAServer')
# 设置自己的namespace,也可以不做
uri = 'http://examples.freeopcua.github.io'
idx = await server.register_namespace(uri)
# 在上面的namespace下添加一个对象,名叫MyObject
myobj = await server.nodes.objects.add_object(idx, 'MyObject')
# 在MyObject下添加一个变量,名叫MyVariable,初始值是6.7
myvar = await myobj.add_variable(idx, 'MyVariable', 6.7)
# 设置改变量为可写
await myvar.set_writable()
_logger.info('Starting server!')
# 让server一直运行
async with server:
while True:
<