Python OPC-UA 终极指南:快速构建工业通信应用
Python OPC-UA 终极指南:快速构建工业通信应用
Python OPC-UA 是一个LGPL许可的纯Python OPC UA客户端和服务器实现,支持Python 2、3和pypy环境。它提供了完整的OPC UA二进制协议实现,已通过多种不同OPC UA栈的测试。该项目的API既提供了发送和接收所有UA定义结构的低级接口,也提供了允许在几行代码中编写服务器或客户端的高级类,轻松在一个应用程序中混合高级对象和低级UA调用。
为什么选择Python OPC-UA?
OPC UA(开放平台通信统一架构)是工业自动化领域的关键通信标准,而Python OPC-UA则是实现这一标准的优秀工具。它具有以下优势:
- 纯Python实现:无需依赖复杂的C库,易于安装和部署
- 完整的协议支持:OPC UA二进制协议实现近乎完整
- 灵活的API:同时提供低级接口和高级类,满足不同需求
- 丰富的示例:提供多种客户端和服务器示例,快速上手
- 跨平台:可在多种操作系统上运行,包括嵌入式设备如树莓派
快速安装步骤
安装Python OPC-UA非常简单,根据您的系统选择以下命令:
Debian/Ubuntu系统
apt install python-opcua # 安装库
apt install python-opcua-tools # 安装命令行工具
使用pip安装
pip install opcua
入门示例:构建您的第一个OPC UA应用
极简服务器示例
以下是一个简单的OPC UA服务器示例,只需几行代码即可创建一个功能完备的服务器:
from opcua import Server
server = Server()
server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/")
# 设置服务器名称
server.set_server_name("FreeOpcUa Example Server")
# 导入一些节点类型
uri = "http://examples.freeopcua.github.io"
idx = server.register_namespace(uri)
# 获取对象节点,我们将在其中添加我们的自定义节点
objects = server.get_objects_node()
# 添加一个新的对象节点
myobj = objects.add_object(idx, "MyObject")
# 添加一个变量节点
myvar = myobj.add_variable(idx, "MyVariable", 6.7)
# 设置变量为可写
myvar.set_writable()
# 启动服务器
server.start()
print("Server started at {}".format(server.endpoint))
# 运行服务器直到用户按下Enter
try:
while True:
time.sleep(1)
finally:
# 停止服务器
server.stop()
完整代码可查看:examples/server-minimal.py
极简客户端示例
以下是连接到上述服务器并读取变量的客户端示例:
from opcua import Client
client = Client("opc.tcp://localhost:4840/freeopcua/server/")
try:
# 连接到服务器
client.connect()
# 获取根节点
root = client.get_root_node()
print("Root node is: ", root)
# 获取对象节点
objects = client.get_objects_node()
print("Objects node is: ", objects)
# 遍历对象节点的子节点
print("Children of root are: ", root.get_children())
# 读取我们在服务器中创建的变量
myvar = client.get_node("ns=2;i=2")
print("My variable value is: ", myvar.get_value())
finally:
# 断开连接
client.disconnect()
完整代码可查看:examples/client-minimal.py
核心功能模块解析
Python OPC-UA的代码结构清晰,主要包含以下核心模块:
- opcua/common:包含服务器和客户端都使用的高级对象和方法
- opcua/client:包含客户端特定代码
- opcua/server:包含服务器特定代码
- opcua/crypto:包含加密相关功能
- opcua/ua:包含OPC UA协议相关的底层实现
实用命令行工具
Python OPC-UA提供了一系列实用的命令行工具,位于tools/目录下,包括:
- uadiscover:查找服务器、获取端点和网络上的服务器
- uaclient:连接到服务器并启动Python shell
- uaserver:启动演示OPC UA服务器
- uaread:读取服务器上的数据
- uawrite:写入数据到服务器
- uals:列出服务器上的节点
例如,启动一个带证书的演示服务器:
tools/uaserver --populate --certificate cert.pem --private_key pk.pem
在树莓派上运行服务器
Python OPC-UA可以在树莓派等嵌入式设备上运行。为了减少启动时间,可以通过向服务器构造函数传递缓存文件路径来加速:
server = Server(cache_file="my_cache.pickle")
文档与资源
- 官方文档:docs/目录下包含详细的文档
- 更多示例:examples/目录提供了各种使用场景的示例代码
- 测试过的服务器:freeopcua C++、freeopcua Python、prosys、kepware、beckhoff、winCC、B&R等
- 测试过的客户端:freeopcua C++、freeopcua Python、uaexpert、prosys、quickopc
总结
Python OPC-UA是一个功能强大且易于使用的工业通信库,它让开发者能够快速构建OPC UA客户端和服务器应用。无论是简单的数据采集还是复杂的工业自动化系统,Python OPC-UA都能提供可靠的支持。通过其简洁的API和丰富的示例,即使是OPC UA新手也能迅速上手,将工业通信功能集成到自己的应用中。
要开始使用Python OPC-UA,只需克隆仓库并按照示例开始探索:
git clone https://gitcode.com/gh_mirrors/py/python-opcua
立即开始您的工业通信应用开发之旅吧!
更多推荐


所有评论(0)