Rocky & Sky IT技术和管理

和大家分享一些技术,聊一聊有趣的话题

OPC UA 学习教程 — 总览和核心概念

OPC UA 学习教程 — 总览和核心概念

OPC UA已经成为了工业自动化行业和IT系统对接的标准协议,同时由于其设计理念的先进性,联盟的开放性和广泛性,已经获得越来越多和越来越广泛的应用。尤其在工业物联网的数据通讯领域逐渐成为了一个最为流行的标准和解决方案。OPC UA的标准制定由OPC Foundation负责,这是一个集合了工业和信息技术行业几乎所有主流厂商的联盟。在这个系列的文章中,将会详细介绍OPC相关的概念,开发和应用。

历史

OPC UA标准的讨论和概念形成于2003-2006年,当时基于微软windows操作系统DCOM组件技术的OPC Classic技术被大量工业设备和通讯系统采用。最早的OPC标准发布于1996年,当时主要是为了解决抽象化PLC的通讯协议(Modbus,Profibus…), 为上游的HMI/Scada系统提供一个统一的中间件,能够实现PLC到上游系统以及上游系统到PLC的数据读写操作。OPC技术基于的OLE组件通常仅仅在Windows系统能够得到支持。这在协议的通用性上逐渐就成为一个制约因素,同时随着信息技术的发展,对于数据传输和通讯的要求越来越高;同时对于信息安全的要求也是与日俱增。于是,OPC Foundation开始制定新的通用的,面向未来IT+OT一体化的标准。

2006-2008 OPC UA标准额验证和实施工作开始开展,2009年发布了第一个最终标准,在2010年-2012年,OPC UA成为了IEC 62541标准。2017年7月,《OPC统一架构》正式成为国家标准GB/T 33863.1~.8-2017。

功能

OPC UA = established OPC features

  • Platform independence 平台独立
  • Standard internet and IP based protocols 标准internet和IP协议
  • Built in security features 内置的安全性功能
  • Generic object model 统一通用的对象模型
  • Extensible type system 可以扩展的类型系统
  • Scalability through profiles 通过不同的profile进行伸缩
  • Migration path from Classic OPC 提供从Classic OPC到OPC UA迁移的方法

信息模型

OPC UA = Information Centric Layered Architecture 信息为中心的分层架构

OPC UA数据分层模型

《OPC UA 学习教程 — 总览和核心概念》

最底层是传输协议和基本的数据模型定义,上一层是DA(Data Access),AC(Alarm & Condition),HA(Historic Data Access)和Prog,这些数据模型定义了通用的数据类型的格式,当然这些格式是可以进行扩展的。

《OPC UA 学习教程 — 总览和核心概念》

上图描述的是节点的标准参考类型,标准节点参考包含8个节点类型用于描述不同的属性。我们可以运行OPC Foundation提供的标准库中的参考实现。可以看到每个模拟节点通常都包含有这些基本特征属性。所有在UA地址空间下的数据都以节点表示。

《OPC UA 学习教程 — 总览和核心概念》

上图是对CNC类型设备Information Model的定义,对于不同类型的设备或者总线连接。OPC Foundation的合作伙伴和合作组织定义了一系列的参考Model定义,具体可以在官方网站上查看:通用Information Model定义

《OPC UA 学习教程 — 总览和核心概念》

在每个节点中包含有Attributes和References两种类型的属性(Properties),所有的Attributes都是可以读写或者订阅的。而References则用来建立和其他节点的关系。这些节点构成一个Address Space。

OPC UA meta-model

《OPC UA 学习教程 — 总览和核心概念》

我们在在前面描述了大致的OPC UA的大体结构,但是更加完整的OPC UA结构如上图所示。我们可以看到在底层通讯协议的上面是OPC UA Meta Model,这个是定义了最基本的Node需要的信息。

地址空间(Address Space)、节点(Nodes)

通过上面的介绍,我们已经基本了解了Address Space和Node的基本概念。但是这两个概念非常重要,所以在这里要继续详细阐述一下。

节点Nodes的Attributes

Object代表AddressSpace中一组Nodes,这些节点(Nodes)包含有Attributes(属性)和References(引用)。节点是OPC UA服务中信息组织的最基本单位,如下图所示。

《OPC UA 学习教程 — 总览和核心概念》

  • Attributes用于包含的是该节点的数据和描述信息,例如NodeId,BrowseName,DisplayName和NodeClass等。

    在标准的定义中每个节点都需要包含一些必须的属性:

    • NodeId,这是在一个OPC UA Server的address space中唯一标识这个节点的ID,这是一个固定的结构体,包括三个子参数。NamespaceIndex,IndentifierType以及Indentifier,分别代表在Namespace中的索引值,ID的数据类型,以及ID的值。
    • NadeClass:这是一个枚举类型,用来表示该节点(Node)的种类,比如(object,variable,method…)
    • BrowseName: 当了客户端建立节点浏览时,显示在客户端的节点名称。必须使用英文字符描述。
    • DisplayName:这是用于本地用户使用时显示的节点名称,可以使用本地化的语言和字符。
  • Nodes通过References相互关联,能够形成一个关联的网格拓扑结构。

节点的继承和实例化关系(References)

节点和节点的关系分为两种(Inheritance)和(Instantiation),其实是一个关系的两个方面。如下图所示,BaseObljectType节点类型被AnalogMeasurement继承。subtype继承自一个type,父节点的所有Attributes会被子节点继承,当然也可以重写。这种ObjectType实际上是一个抽象的节点。

《OPC UA 学习教程 — 总览和核心概念》

实例化一个抽象节点,就是Instantiation的过程。这是创建一个实际的节点实例的过程。如下图,我们为AnalogMeasurement初始化了Temperature和Pressure这两个对象(instances)

《OPC UA 学习教程 — 总览和核心概念》

下图的例子描述了节点中Object和Variable的区别

《OPC UA 学习教程 — 总览和核心概念》

下图展示了Node节点中Type,SubType,Property,Component的区别和联系。

《OPC UA 学习教程 — 总览和核心概念》

命名空间 NameSpace

NameSpace是一个比较抽象的概念,比较像Java总的包名称或者.Net的命名空间。需要确保在同一个命名空间的节点ID不重复。会使用URI来描述命名空间的责任组织。所有的OPC UA Server都应该包含一个NamespaceArray属性用来描述命名空间,这是一个字符串数组,举例如下所示:

《OPC UA 学习教程 — 总览和核心概念》

OPC UA Information Models / OPC UA信息模型

在OPC标准中定义了基本的Object Types, Reference Types 以及 Variable Nades等内容, OPC UA标准的信息服务模式有以下几种:

  • Data Access(DA)数据访问相关的规格明细
  • Alarm & Condition (A&C) 报警服务相关的规格明细
  • Programs
  • Historical Access(HA)历史数据访问相关的规格明细

除了标准主体文件所定义的规格说明和明细,OPC UA还包括了Companion Specifications,指的是合作伙伴发布的规格明细,如下图所示:

《OPC UA 学习教程 — 总览和核心概念》

不同的工业总线,产品,自动化系统和协会都基于基础的规格推出了各自的扩展规格,即根据特定行业或应用领域的信息模型,用来应对各种不同的复杂的工业生产环境。

不同的细分规格通常会以xml文件的形式提供,比如:

“Opc.Ua.PackML.NodeSet2.xml” for PackML companion specification
“Opc.Ua.Robotics.NodeSet2.xml” for Robotics companion specification
“Opc.ISA95.NodeSet2.xml” for ISA-95 MES system specification
“Opc.Ua.MTConnect.NodeSet2.xml” MTConnect companion specification

具体可以查看UA Nodeset in Github

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注