工业通讯协议(四)- OPCUA

参考:

一. OPC介绍

OPC(OLE for Process Control)协议是一种用于工业自动化领域的数据交换标准,旨在解决不同设备和应用软件之间的互操作性问题。OPC协议由OPC基金会(OPC Foundation)开发和维护,最早在1996年推出。

OPC协议的主要特点

  1. 互操作性: 通过提供统一的接口,OPC协议允许不同厂商的硬件设备和软件应用能够互相通讯和数据交换。
  2. 标准化: OPC协议基于微软的OLE/COM技术(OLE for Process Control),后续版本也支持.NET和Web服务,确保了跨平台的兼容性。
  3. 扩展性: OPC标准不断发展,从最初的OPC DA(Data Access)扩展到OPC HDA(Historical Data Access)、OPC A&E(Alarms & Events)、OPC UA(Unified Architecture)等多个子标准。

OPC协议的主要版本

  1. OPC DA(Data Access): 最早的OPC标准,用于实时数据的访问和交换,主要应用于获取传感器数据、控制设备状态等。
  2. OPC HDA(Historical Data Access): 提供历史数据的访问,适用于需要长期数据存储和分析的应用场景。
  3. OPC A&E(Alarms & Events): 用于报警和事件管理,支持事件的订阅、过滤和处理。
  4. OPC UA(Unified Architecture): 统一架构,支持跨平台和更高层次的安全性,提供更灵活和强大的数据建模和传输功能。OPC UA不再依赖微软的COM/DCOM技术,而是基于独立于平台的协议栈,如TCP/IP、HTTP和WebSocket。

应用领域

OPC协议广泛应用于制造业、能源、化工、交通等各个工业领域,主要用于:

  • 监控和数据采集(SCADA系统)
  • 分布式控制系统(DCS)
  • 工业物联网(IIoT)
  • 企业资源计划(ERP)和制造执行系统(MES)的数据集成

通过OPC协议,企业可以实现不同系统之间的数据共享和集成,提高生产效率和数据利用率。

OPC Server & Client

在OPC(OLE for Process Control)协议中,服务端和客户端的角色和功能是明确区分的。了解这两者的职责和交互方式是掌握OPC技术的关键。

OPC服务端(OPC Server)

功能
  1. 数据采集:OPC服务端连接到各种工业设备(如PLC、DCS、传感器等),采集实时数据。
  2. 数据管理:服务端负责管理和提供访问数据的接口,包括实时数据、历史数据、报警和事件等。
  3. 数据处理:处理来自客户端的请求,如读写操作、订阅数据变化等。
  4. 协议转换:将设备专用协议转换为OPC标准协议,提供统一的数据访问接口。
主要职责
  • 数据源连接:与底层设备进行通讯并采集数据。
  • 数据存储:管理数据的存储和检索,包括实时数据和历史数据。
  • 数据发布:向客户端提供数据访问和订阅服务。

image

OPC客户端(OPC Client)

功能
  1. 数据访问:连接到一个或多个OPC服务端,读取实时数据或历史数据。
  2. 数据写入:向OPC服务端发送数据写入请求,控制设备或改变设备状态。
  3. 事件处理:订阅和处理来自OPC服务端的报警和事件信息。
  4. 数据显示和分析:将从服务端获取的数据进行处理、显示和分析,用于用户界面或进一步的应用。
主要职责
  • 数据读取:从服务端读取实时数据、历史数据或事件数据。
  • 数据写入:向服务端发送写入请求,修改设备状态或参数。
  • 数据订阅:订阅特定数据项的变化,实时获取更新的数据。
  • 数据处理:对获取的数据进行处理和分析,用于监控、控制或其他应用。
客户端与服务端的交互
  1. 连接建立:客户端通过网络连接到服务端,建立通讯通道。
  2. 数据请求
    • 读取请求:客户端向服务端发送数据读取请求,服务端返回相应的数据。
    • 写入请求:客户端向服务端发送数据写入请求,服务端执行写入操作并返回结果。
  3. 订阅/取消订阅:客户端可以订阅特定数据项的变化,服务端在数据变化时通知客户端。
  4. 事件通知:服务端可以主动向客户端发送报警和事件通知,客户端接收并处理这些通知。
  5. 断开连接:通讯结束后,客户端与服务端断开连接。

image

二. OPCUA介绍

OPC UA(OPC Unified Architecture)是OPC基金会推出的新一代工业自动化通信标准,旨在解决传统OPC标准(如OPC DA、HDA、A&E)中的局限性,并提供更强大的功能和更广泛的适用性。OPC UA不仅支持传统的Windows平台,还支持跨平台运行,包括Linux、macOS和嵌入式系统。

OPC UA的主要特点

  1. 跨平台支持:OPC UA不再依赖于微软的COM/DCOM技术,而是基于平台无关的通信协议(如TCP/IP、HTTP和WebSocket),使其能够在各种操作系统和硬件平台上运行。

  2. 安全性:内置了全面的安全机制,包括用户认证、授权、加密和数据完整性检查,确保数据传输的安全性和可靠性。

  3. 可扩展性:支持复杂的数据建模和对象管理,可以适应多种工业应用场景。OPC UA允许用户定义自定义的数据类型和对象模型,以满足特定的应用需求。

  4. 统一架构:整合了OPC DA、HDA和A&E的功能,提供统一的数据访问接口,简化了系统集成和开发。

  5. 灵活的通信方式:支持多种通信模式,包括客户端/服务器模式和发布/订阅模式,适应不同的应用需求。

image

OPC UA的架构

OPC UA的架构可以分为以下几个层次:

  1. 传输层:定义了各种通信协议(如TCP/IP、HTTP、MQTT)和传输方式,确保数据可以在不同网络环境中可靠传输。

  2. 安全层:提供认证、授权、加密和数据完整性检查等安全功能,保护数据免受未授权访问和篡改。

  3. 服务层:定义了各种服务接口,如会话管理、浏览、读写、订阅等,用于客户端和服务端之间的交互。

  4. 信息模型层:支持复杂的数据建模和对象管理,可以定义层次化的对象、属性、方法和事件,使数据表示更加直观和结构化。

image

image

OPC UA的关键功能

  1. 会话管理:客户端与服务端之间建立和管理会话,支持长时间连接和状态保持。

  2. 浏览服务:允许客户端浏览服务端的地址空间,发现可用的节点和数据项。

  3. 读写服务:支持读取和写入服务端的数据,适用于实时数据访问和控制。

  4. 订阅和监控服务:客户端可以订阅特定的数据项,服务端在数据变化时主动通知客户端,适用于实时数据监控和报警处理。

  5. 历史数据访问:支持访问服务端存储的历史数据,适用于数据分析和报表生成。

  6. 方法调用:支持在服务端执行预定义的方法,适用于远程控制和操作。

三. OPCUA的应用

OPCUA的信息模型

OPC UA 信息模型是节点的网络(Network of Node),或者称为结构化图(Graph),由节点(Node)和引用(Reference)组成,这种结构图称之为 OPC UA 的地址空间。地址空间以标准形式表示对象——地址空间中的模型元素被称为节点,对象及其组件在地址空间中表示为节点的集合,节点由属性描述并由引用相连接。OPC UA 建模其实就是建立节点以及节点间的引用。

对象模型

OPC UA 使用了对象作为过程系统表示数据和活动的基础。对象包含了变量,事件和方法,它们通过引用来互相连接。

image

节点模型

  • 属性(Attribute)用于描述节点,不同的节点类有不同的属性(属性集合)。节点类的定义中包括属性的定义,因此地址空间中不包括属性。
  • 引用(Reference)表示节点之间的关系。引用被定义为引用类型节点的实例,存在于地址空间中。

image

引用模型

包含引用的节点为源节点,被引用的节点称目标节点。引用的目标节点可以与源节点在同一个地址空间,也可以在另一个 OPC 服务器的地址空间,甚至是目标节点可以不存在。

节点类型

在 OPC UA 中,最重要的节点类别是对象,变量和方法。

  • 对象节点,对象节点用于构成地址空间,不包含数据,使用变量为对象公开数值,对象节点可用于分组管理对象,变量或方法(变量和方法总属于一个对象)。
  • 变量节点,变量节点代表一个值,值的数据类型取决于变量,客户端可以对值进行读写和订阅。
  • 方法节点,方法节点代表服务器中一个有客户端调用并返回结果的方法,输入参数和输出结果以变量的形式作为方法节点的组成部分,客户端指定输入参数,调用后获得输出结果。

OPC UA 协议的工作原理

硬件供应商支持 OPC UA 的方式有两种:在设备中嵌入 OPC UA 服务器,或在 PC 上提供软件,通过专用协议获取数据,并通过 OPC UA 将其公开给其他平台。一些中端和高端 PLC(如西门子 S71200/1500) 集成了 OPC UA 服务器,同时西门子还提供 WINCC 等软件,通过 OPC/OPC UA 间接向第三方提供来自其他设备的数据。

image

数据通过 OPC UA 服务器公开后,可使用 OPC UA 协议规定的两种访问模式——请求/响应模式和发布/订阅模式进行访问。首先,客户端必须与服务器建立连接,连接建立后会在客户端和服务器之间创建一个会话通道。

在请求/响应模式下,客户端应用程序可以通过会话通道向服务器请求一些标准服务,如:从节点读取原始数据、向节点写入数据、调用远程方法等。

image

在发布/订阅模式下,每个客户端可以创建任意数量的服务器订阅,当服务器的节点数据发生变化时,通知消息会立即推送到客户端。

image

一般来说,终端用户不必关注上述过程。他们只需要关心 OPC UA 服务器地址、用户登录策略、通信安全策略以及数据的访问地址。

OPC UA的编程

要实现一个简单的OPC UA编程实例,通常你会使用一个OPC UA客户端库和一个服务器库。在这个示例中,我们将使用Python编程语言和python-opcua库来实现一个基本的OPC UA客户端和服务器。

安装库

首先,需要安装python-opcua库:

pip install opcua

创建OPC UA服务器

以下是一个简单的OPC UA服务器示例,它创建了一个服务器并添加了一个简单的变量节点:

from opcua import ua, Server
import time

# 创建服务器对象
server = Server()

# 设置服务器端点(URL)
server.set_endpoint("opc.tcp://localhost:4840/freeopcua/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()

try:
    print("OPC UA 服务器已启动")
    while True:
        # 更新变量值
        time.sleep(1)
        new_value = myvar.get_value() + 0.1
        myvar.set_value(new_value)
except KeyboardInterrupt:
    print("关闭服务器")
    server.stop()

这个示例创建了一个OPC UA服务器,在端点opc.tcp://localhost:4840/freeopcua/server/上运行,并添加了一个命名空间和一个简单的变量节点。

创建OPC UA客户端

以下是一个简单的OPC UA客户端示例,它连接到上述服务器并读取变量的值:

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)

    # 找到我们之前创建的变量节点
    obj = root.get_child(["0:Objects", "2:MyObject"])
    var = obj.get_child("2:MyVariable")
    
    # 读取变量值
    while True:
        value = var.get_value()
        print("Variable value: ", value)
        time.sleep(1)
finally:
    client.disconnect()

这个客户端连接到服务器,并循环读取变量MyVariable的值并打印出来。

posted @ 2024-06-13 18:17  Asp1rant  阅读(140)  评论(0编辑  收藏  举报