纯 Python OPC-UA 客户端和服务器库
项目描述
适用于 Python >= 3.7 和 pypy3 的 OPC UA / IEC 62541 客户端和服务器。 http://freeopcua.github.io/ , https://github.com/FreeOpcUa/opcua-asyncio
opcua-asyncio
opcua-asyncio 是基于 python-opcua 的基于 asyncio 的异步 OPC UA 客户端和服务器,去除了对 python < 3.7 的支持。异步编程允许更简单的代码(例如更少的锁需求)和潜在的性能提升。该库还具有异步 API 上的同步包装器,可用于同步代码而不是 python-opcua
OPC UA 二进制协议实现已针对许多不同的 OPC UA 堆栈进行了测试。API 提供了发送和接收所有 UA 定义的结构的低级接口和允许在几行中编写服务器或客户端的高级类。在一个应用程序中混合高级对象和低级 UA 调用很容易。大多数低级代码是从 xml 规范自动生成的。
coverage.py 报告了超过 95% 的代码的测试覆盖率,大多数未测试的代码是尚未使用的自动生成的代码。
警告
opcua-asyncio 是开源的,并且绝对没有任何保证。我们尽量保持它没有错误,并尝试保持 API 稳定,但错误和 API 更改将会发生!特别是 API 更改将在任何 1.0 版本之前发生。
已将方法从 get_xx 重命名为 read_xx 和 set_xx 重命名为 write_xxx,以更好地遵循 OPC UA 命名约定
0.9.9 版引入了一些参数重命名,因为代码生成更加自动化。特别是 NodeId、BrowseName、LocalizedText 和 DataValue 的参数现在是 CamelCase 而不是小写,因此遵循该库中所有其他结构中使用的 OPC Ua 约定
安装
带点
pip install asyncua
用法
我们假设您已经对 Python、asyncio 模块、async / await 语法和 asyncio 任务的概念有一定的了解。
客户端类
该类Client提供用于连接 APU UA 服务器、会话管理和访问基本地址空间服务的高级 API。客户端可以用作上下文管理器。然后客户端将使用with语法自动连接和断开连接。
from asyncua import Client
async with Client(url='opc.tcp://localhost:4840/freeopcua/server/') as client:
while True:
# Do something with client
node = client.get_node('i=85')
value = await node.read_value()
当然,如果您不想使用上下文管理器,您也可以自己调用connect,方法。disconnect
有关客户端 API 的更多信息,请参阅示例文件夹和代码。
节点类
该类Node提供用于管理节点和数据访问服务的高级 API。
订阅类
该类Subscription提供了用于管理监控项的高级 API。
服务器类
该类Server提供用于创建 OPC UA 服务器实例的高级 API。
文档
文档可在此处ReadTheDocs 获得。
API 在python-opcua方面基本保持不变。主要区别在于许多方法已被重构为返回协程。请查看示例和/或代码。
提供了一个简单的 GUI 客户端:https ://github.com/FreeOpcUa/opcua-client-gui
浏览示例:https ://github.com/FreeOpcUa/opcua-asyncio/tree/master/examples
一个好的起点是最小的例子。最小客户端示例:https ://github.com/FreeOpcUa/opcua-asyncio/blob/master/examples/client-minimal.py 最小服务器示例:https ://github.com/FreeOpcUa/opcua-asyncio/blob/master /examples/server-minimal.py
还提供了一组命令行工具:https ://github.com/FreeOpcUa/opcua-asyncio/tree/master/tools
uadiscover(find_servers、get_endpoints 和 find_servers_on_network 调用)uals(列出节点的子节点)uahistoryreaduaread(读取节点的属性)uawrite(写入节点的属性)uacall(节点的调用方法)uasubscribe(订阅节点并打印 datachange 事件)uaclient(连接到服务器并启动 python shell)uaserver(启动演示 OPC UA 服务器)tools/uaserver --populate --certificate cert.pem --private_key pk.pem
如何生成证书:https ://github.com/FreeOpcUa/opcua-asyncio/tree/master/examples/generate_certificate.sh
客户支持
什么有效:
- 连接到服务器、打开通道、会话
- 浏览和阅读属性值
- 通过 path 和 nodeids 获取节点
- 创建订阅
- 订阅项目以进行数据更改
- 订阅事件
- 添加节点
- 方法调用
- 用户名和密码
- 读过的历史
- 使用证书登录
- 通信加密
- 删除节点
测试服务器:freeopcua C++、freeopcua Python、prosys、kepware、beckhoff、winCC、B&R,...
尚未实施:
- 本地化文本功能
- XML 协议
- UDP(PubSub 的东西)
- 网络套接字
- 可能会自动重连...
服务器支持
什么有效:
- 创建频道和会话
- 读取/设置属性并浏览
- 通过 path 和 nodeids 获取节点
- 根据规范自动生成地址空间
- 将节点添加到地址空间
- 数据更改事件
- 事件
- 方法
- 基本用户实现(一个名为 admin 的现有用户,可以禁用,所有其他用户都是只读的)
- 加密
- 证书处理
- 删除节点
- 对数据更改和事件的历史支持
- 更高级的解决方案来创建自定义结构
测试客户端:freeopcua C++、freeopcua Python、uaexpert、prosys、quickopc
尚未实现:
- UDP(PubSub 的东西)
- 网络套接字
- 会话恢复
- 警报
- XML 协议
- 意见
- 本地化文本功能
- 具有用户和密码的更好的安全模型
在 Raspberry Pi 上运行服务器
从 XML 设置标准地址空间是启动过程中最耗时的步骤,这可能会导致在 Raspberry Pi 等功能较弱的设备上启动时间过长。通过将缓存文件的路径传递给服务器构造函数,将在第一次启动期间创建一个保存地址空间的搁置。以下所有启动都将使用缓存文件,这会显着提高启动性能(在 Raspberry Pi Model B 上约为 3.5 秒对 125 秒)。
发展
代码遵循 PEP8,行长最多应为 160 个字符,OPC UA 结构使驼峰式大小写不受 XML 定义的影响。
所有协议代码都在 opcua 目录下
asyncua/ua包含规范中的所有 UA 结构,大多数是自动生成的asyncua/common包含在服务器和客户端中使用的高级对象和方法asyncua/client包含客户特定的代码asyncua/server包含服务器特定代码asyncua/utils包含一些实用程序函数和类asyncua/tools包含命令行工具的代码schemas包含规范中的 XML 和文本文件以及用于自动生成代码的 python 脚本tests包含测试docs包含从文档字符串自动生成文档的文件examples包含许多示例文件examples/sync包含许多使用同步 API 的示例文件tools包含可用于从存储库运行命令行工具而无需安装的 python 脚本
运行测试:
python -m pip install -r requirements.txt
python -m pip install -r dev_requirements.txt
pytest -v -s
或者
./run-test.sh -v -s
覆盖范围
pytest -v -s --cov asyncua --cov-report=html
或者
./run-test.sh -v -s --cov asyncua --cov-report=html
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。