前面章节我们采用OPC作为设备到上位的信息交互的协议,本章我们介绍跨平台的OPC UA。OPC作为早期的工业通信规范,是基于COM/DCOM的技术实现的,用于设备和软件之间交换数据,最初,OPC标准仅限于Windows操作系统。OPC是OLE for Process Control的缩写(中文意思:用于过程控制的OLE)。
OPC规范包括了3大部分:
由于基于COM/DCOM的技术有着不能跨平台的根本缺点,随着技术的发展,OPC基金会在2008年发布了新的规范:OPC UA (OPC Unified Architecture)OPC 统一框架。
2008年发布的OPC统一架构(UA)将各个OPC Classic规范的所有功能集成到一个可扩展的框架中,独立于平台并且面向服务。OPC UA规范不再是基于COM/DCOM技术,因此OPC UA不仅能在Windows平台上实现,更可以在Linux,以及其它的嵌入式平台中实现。
这种多层方法实现了最初设计UA规范时的目标:
功能对等性
OPC UA不仅支持传统OPC的所有功能,更支持更多新的功能:
平台独立性
鉴于市场上有各种各样的硬件平台和操作系统,平台独立性就显得至关重要。OPC UA包含但不限于以下平台及系统:
硬件平台:传统PC硬件、云服务器、PLC、微控制器(ARM等)
操作系统:Microsoft Windows、Apple OSX、Android或任何Linux发行版本等
OPC UA为企业之间的互操作性提供必要的M2M、M2E及两者之间的基础架构。
安全性
最大的变化是OPC UA可以通过任何单一端口(经管理员开放后)进行通信,这使得OPC通信不再会由于防火墙受到大量的限制,实现Internet 通讯。
综合信息建模
OPC UA信息建模框架将数据转换为信息。通过完全面向对象的功能,即使是最复杂的多级结构也可以建模和扩展。数据类型和结构在配置文件中定义。 例如,现有的OPC Classic规范被建模为UA配置文件,也可以由其他组织扩展:
更详细的内容请参阅OPC基金会官网:http://opcfoundation.cn/
3. 安装python-opcua组件
pip安装:pip install opcua
组件按照完毕后,我们可以在python环境执行uadiscover命令查看效果:
由于运行电脑上没有运行的opcua服务端,命令没有发现任何opcua服务。下面通过运行opcua上最新的服务端代码再来看看效果。
重新运行uadiscover命令,结果如下:
现在连接到 OPCUA Sever 的模拟器提供的 OPC UA 服务了。
4.1. 在Solution上添加一个Python Application Project Tank4C9Svr
打开Tank4C9Svr.py文件,修改Example里的server-minimal.py文件里代码,模拟4C9反应罐如下:
import sys sys.path.insert(0, "..") import time import random from opcua import ua, Server if __name__ == "__main__": # setup our server server = Server() server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/") # setup our own namespace, not really necessary but should as spec uri = "http://examples.freeopcua.github.io" idx = server.register_namespace(uri) # get Objects node, this is where we should put our nodes objects = server.get_objects_node() # populating our address space myobj = objects.add_object(idx, "Tank4C9") status = myobj.add_variable(idx, "Status", 0) overheadFlow = myobj.add_variable(idx, "OverheadFlow", 0) buttomsFlow = myobj.add_variable(idx, "ButtomsFlow", 0) power = myobj.add_variable(idx, "Power", 0) #myVar.set_writable() # Set MyVariable to be writable by clients # starting! server.start() try: count = 0 while True: time.sleep(5) count = count + 1 print(count%4) if count%4>0: status.set_value(1) else: status.set_value(0) a= random.randint(100,500) print("OverheadFlow:"+str(a)) overheadFlow.set_value(a) buttomsFlow.set_value(random.randint(50,500)) power.set_value(random.randint(1000,5000)) finally: #close connection, remove subcsriptions, etc server.stop()
我们把Tank4C9Svr设置成solution默认启动项目后,F5调试运行Tank4C9Svr,如下图:
安装:pip install opcua-client
cmd窗口C:\Python\Python36-32\Scripts目录下执行opcua-client.exe命令,如下图:
地址栏输入 opc.tcp://localhost:4840 点击连接按钮,就能看见我们构建的Tank4C9设备和对于的tag变量了,如下图:
我们可以在变量上右键来订阅数据变化的读取最新的数据值。
本小节主要介绍了OPC DA到OPC UA之间的关系,更多详细的信息参考OPC基金会官网。首先,我们使用 python-opcua 组件模拟构建一个Tank4C9的反应罐OPC UA服务器,然后,演示OPC UA的Objects是如何构建的。最后,展示opcua-client连接这个OPCUA服务器并订阅数据变化是如何的显示效果。下一节我们将用演示监控如何迁移到OPC UA数据通信协议。
python工业互联网监控项目实战4—python opcua
原文:https://www.cnblogs.com/haozi0804/p/12751127.html