本文主要讲述如何使用asyncua在Server端添加方法,以及使用。
一 代码
'''
server.py
'''
import asyncio
import sys
sys.path.insert(0, '..')
from asyncua import ua, Server
from asyncua.common.methods import uamethod
# 定义方法的实体
@uamethod
def func(parent, value):
return value*2
async def main():
# setup our server
server = Server()
await server.init()
server.set_endpoint('opc.tcp://127.0.0.1:4840/freeopcua/server/')
# 添加自己的namespace
uri = 'http://examples.freeopcua.github.io'
idx = await server.register_namespace(uri)
# 添加方法
await server.nodes.objects.add_method(ua.NodeId('ServerMethod', idx), ua.QualifiedName('ServerMethod', idx),
func, [ua.VariantType.Int64], [ua.VariantType.Int64])
# 运行server
async with server:
while True:
await asyncio.sleep(1)
if __name__ == '__main__':
asyncio.run(main())
代码首先定义方法的实体,即func,使用了一个装饰器进行装饰。main()函数中主要的就是add_method()方法,其参数如下
- 第一个参数:方法的NodeId
- 第二个参数:方法的QualifiedName,用于browse
- 第三个参数:函数实体(也可以叫做函数回调),即func
- 第四个参数:函数的输入参数类型列表
- 第五个参数:函数的返回类型列表
二 运行
运行server.py,然后打开UaExpert进行连接,可以看到我们添加的方法,
右击该方法,点击Call…,
点击输入参数右侧的“…”,然后把值改成200,最后点击write,
返回后点击Call,
最后得到值400,
三 总结
本文主要讲述如何在Server端添加方法以及使用,总体来说还是比较简单。