理解OPC UA

接触OPC UA 已经有一段时间了,开始只知道它将是工业4.0 中一个重要的通信协议(IEC 62541)。出于好奇,就了解一下。我看的主要内容包括:Open62541 库和uaExpert,uamodeler等工具软件。同时也阅读了OPC UA 的标准文本和网络上的许多文章。但是总觉得云里雾里,神龙见首不见尾。

俗话说”不识庐山真面目,只缘身在此山中”。在学习电脑新技术时,我们往往会被劈头盖脑的各种术语,数据结构,函数,协议,模型带到沟里去了。而忘却了思考它是什么?它解决上什么问题?为什么这样做?这些根本的问题。有时真的搞不懂,这么复杂的东西是这么想出来的?是大公司用来故弄玄虚的么?

有一个早上,我突然顿悟,OPC UA 就是在分布式系统中实现对象的描述,什么Node呀,variable呀,reference呀,无非是想描述一个对象!OPC UA 在工业4.0 中的重要性就是通过面向对象的技术,将物理设备,传感器,电机描述成一个个对象,形成数字化模型。让不同的软件可以像调用对象那样来控制设备。

于是,我放慢心情,顺着面向对象的思路,来探究OPC UA 的本质。

面向对象程序设计

软件设计的重要一环就是将物理世界的物体抽象成数字化模型。其中最重要的技术就是面向对象的程序设计技术。例如,对于一个马达,我们可以抽象成下面的类

class motor {
float speed;
int direction;
float current;
float voltage;
float temperature;
void start();
void stop();
}
         这个类描述了电机的基本特性,它们包括 速度,转动方向,工作的电流,电压和温度。其中方法包括了启动和停止。

在程序中,我们可以将motor 类实例化,并且对实例的参数参数和控制。例如:

motor motor1,motor2;
motor1.speed=1200;
motor.direction=CCW;
motor.start();
delay(10)
motor.stop();
面向对象程序设计是最流行的程序设计方法,流行的OPP 语言是C++。面向对象程序设计的最大好处是突出了接口,屏蔽了细节。提高了软件的模块化和重用性。

分布式对象

类的应用和定义是在一个程序中的。如果将面向对象的概念扩展到程序之间,或者是网络中的不同程序之间会怎么样呢?人们的确是这么做了。

分布式计算环境下,程序之间的相互调用最早采用RPC(远程过程调用) 方式。但是对于更加复杂的情况下,更好的方式是采用分布式对象技术。计算机程序可以调用网络中的任何一个对象。这也符合实际应用的需要,比如自动控制SCADA程序启动注塑机上的主电机(motorA),就演变成为调用注塑机控制器中的对象motorA的start 函数。所以将面向对象程序设计中的对象概念衍生到分布式系统中,就产生了分布式对象的概念。

常见的分布式对象技术包括了

微软的COM/DCOM (Distributed Component Object Model)
国家组织OMG的CORBA(Common Object Request Broker Architecture)

OPC

在了解OPC UA 的之前,我们首先了解一些它的前身OPC 协议。这样更有利于了解OPC UA 的本质和由来。

OPC 是基于微软的DCOM 技术,用于设备和软件之间交换数据。 这也意味着OPC 只能在window 系统上运行.在运行OPC 之前需要配置Window 的COM/DCOM.在运行命名行 键入”DCOMCNFG”可以看见window的服务组件的配置(细节我并不了解).不过有一点可以确实,就是OPC 是在运行windows的工业PC 和上位机上方可运行.这在window 一统天下的年代的不二选择.一台PLC 如果要和OPC 上位机软件通信,必需通过Windows 工业电脑来完成..

重新认识OPC UA

现在,我们来重新来认识OPC UA 的本质吧! OPC UA 是OPC 的后继标准,只是后面增加了UA ,意指”统一架构”(Unified Architecture).它的主要目的是摆脱windows! 实现与平台无关的OPC.

从OPC 演进到OPC UA,它的目的并没有改变,依然是为了实现分布式控制系统中的分布式对象技术.但是它的方式变成了与平台无关.面向了开放系统.这也就意味着我们可以在一个Arm /linux平台上实现OPC 的server,或者在云端linux平台上实现Client 程序.

opc ua 的代码足够地小,事实上已经可以将OPC UA 的server 端直接集成到PLC ,传感器或者小型网关中.

一旦了解了事物的本质,就可以高屋建瓴地理解许多细节.现在我们在来看看OPC UA 的许多概念.

1 信息模型(Information model)

OPC UA 使用了对象(objects)作为过程系统表示数据和活动的基础。对象包含了变量,事件和方法,它们通过引用(reference)来互相连接。这个概念和面向对象程序设计方法非常相似。

OPC UA 信息模型是节点的网络(Network of Node,),或者称为结构化图(graph),由节点(node)和引用(References)组成,这种结构图称之为OPC UA 的地址空间。这种图形结构可以描述各种各样的结构化信息(对象)。

节点(nodes) : 共计有8种节点(对象,对象类型,变量,变量类型,视图,方法,引用,数据类型)

也许我们通过一些实例能够更加容易理解这种节点图描述对象的能力。

视图节点(view node)

假如我们要为一个设备建立opc ua 模型,这个设备具有一个模拟量输入,一个数字输出,两个方法 ,分别是readAnalog和ReadDigital。这个模型如果使用C++的类来描述,是下面的样子。

class sensor {
public :
double analog;
uint32_t digital
double readAnalog(int port)
uint32_t readDigital(int port)
}
如果使用节点图来描述首先要区分不同的节点类型

相应的节点图是下面的样子

如果你熟悉C++面向对象程序设计,可以将C++的类与OPCUA 的节点图对应起来,这样比较容易理解OPC UA 信息模型是如何构建的。

opc ua model 的设计工具:
opc ua 的模型采用XML 文件描述,然后通过一个编译工具可以将XML 编译成C++语言的程序。

为了方便地建立 opc ua 的信息模型,需要使用模型编辑软件,它们会产生XML 的小型模型,然后编译成C语言程序。

比较流行的是uaModeler 不过这是一个商业化的软件。免费的软件有 在python的opcua-modeler,可以在下面的地址找到

https://github.com/FreeOpcUa/opcua-modeler

编译工具

python ./nodeset_compiler.py --types-array=UA_TYPES --existing ../../deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml --xml myNS.xml myNS
使用面向对象程序设计的概念去看待OPC UA 的信息模型,有助于理解OPC UA的许多概念。至少我是这样的。

这使我想起了《数学的语言》中关于数学的定义,数学是研究模型的学科,数学靠自然和物理的手脚架搭建的,当自然和物理的手脚架撤离之后,人们却无法理解数学宫殿是如何建造的了。
---------------------
作者:姚家湾
来源:CSDN
原文:https://blog.csdn.net/yaojiawan/article/details/88990351
版权声明:本文为博主姚家湾原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/mooncher/p/11005197.html

时间: 2024-08-29 13:41:53

理解OPC UA的相关文章

OPC UA官方文档翻译第一部分 --待续

Part 1 前言 使用协议 修订102版集锦 概括 参考文件 术语定义缩小 1 OPC UA术语 11 地址空间AddressSapce 12 报警Alarm 13 属性Attribute 14 证书Certification 15 客户端Client 16 条件Condition 17 通信栈Communication Stack 18 复杂数据Complex Data 19 发现Discovery 110 事件Event 111 事件通知器EventNotifier 112 信息模型Inf

OPC UA

OPC UA将来自不同厂商不同设备的数据进行统一格式.统一显示. 以下转自:智能制造还有多远?--谈谈为什么要采用OPC UA? 9月5日,OPC UA正式成为国家推荐性标准.而对于OPC UA是什么,为什么选择OPC UA很多人却并不了解.以下推荐的这篇文章,将有助于大家全面立理解这一数据互联的基础标准与规范. 转自微信公众号:说东道西 ---------------以下是正文--------------- 前段时间与PLCopen主席严义老师探讨在PLCopen教育合作项目,据严老师前期的调

OPC UA 统一架构学习4

今天华为发邮件咨询opc ua 的开发工作,也在进行嵌入式opc ua 的研究,在做通讯行业的预研,做万物互联的准备. 他的要求基本上可以如下实现: 1.用传统的开发方法开发出几个测试函数来模拟真实的业务操作.然后把这些测试函数写入到相应的板子中. 2.开发一个简单的opc ua server,将测试函数映射到地址空间中.地址空间里面其实就是类似于一个函数指针,指向测试函数的内存地址.而这个操作是sdk已经实现的. 3.开发或者使用一个ua client去调用相应的api.由服务器端的地址空间去

OPC UA 节点

OPC UA 节点定义: 1 public interface INode 2 { 3 /// <summary> 4 /// The node identifier. 5 /// </summary> 6 /// <value>The node identifier.</value> 7 ExpandedNodeId NodeId 8 { 9 get; 10 } 11 /// <summary> 12 /// The node class. 1

从 OPC 到 OPC UA

[前言]OPC是一个工业标准,所属国际组织是OPC基金会,现有会员已超过220家,包括世界上所有主要的自动化控制系统.仪器仪表及过程控制系统的公司. [经典 OPC]经典OPC规范基于微软Windows系统提供的COM/DCOM技术,用于软件之间数据交换的规范.OPC规范定义了几种不同的,用于访问过程数据.报警信息以及历史数据的版本规范:OPC实时数据访问规范(OPC DA)定义了包括数据值,更新时间与数据品质信息的相关标准.OPC历史数据访问规范(OPC HDA)定义了查询.分析历史数据和含有

关于CoDeSys OPC ua配置的记录

1.创建一个简单的CoDeSys程序,TEST001. 在Device中配置网关连接. 其中, PLC_PRG中设置了局部变量, 在GVL_XJ中添加全局变量. 2.在device上右键->添加对象->符号配置. 3.对符号配置进行属性设置,勾选'支持opc ua特性'. 4. 勾选需要的节点. 5.编译后下载. 附: opc客户端浏览节点

SharpNodeSettings项目,可配置的数据采集,统一的工业数据网关,OPC UA服务器开发,PLC数据发布到自身内存,redis,opc ua,以及数据可视化开发

本项目隶属于 HslCommunication 项目的SDK套件,如果不清楚HslCommunication组件的话,可以先了解那个项目,源代码地址:https://github.com/dathlin/HslCommunication 本项目源代码地址:https://github.com/dathlin/SharpNodeSettings 本项目的主要实现的功能主要有2个: 实现单个设备信息的可配置,可存储,采用一个相对标准的Xml存储机制实现,适用的场景是:如果你有20个西门子PLC(种类

C# 实现opc ua服务器的远程连接(转)

原文转自:https://www.cnblogs.com/dathlin/p/7724834.html OPC UA简介 OPC是应用于工业通信的,在windows环境的下一种通讯技术,原有的通信技术难以满足日益复杂的环境,在可扩展性,安全性,跨平台性方面的不足日益明显,所以OPC基金会在几年前提出了面向未来的架构设计的OPC 统一架构,简称OPC UA,截止目前为止,越来越多公司将OPC UA作为开放的数据标准,在未来工业4.0行业上也将大放异彩. 在OPC UA的服务器端.会公开一些数据节点

OPC协议解析-OPC UA OPC统一架构

1    什么是OPC UA 为了应对标准化和跨平台的趋势,为了更好的推广OPC,OPC基金会近些年在之前OPC成功应用的基础上推出了一个新的OPC标准-OPC UA.OPC UA接口协议包含了之前的 A&E, DA,OPC XML DA or HDA,只使用一个地址空间就能访问之前所有的对象,而且不受WINDOWS平台限制,因为它是从传输层Scoket以上来定义的,这点后面会提到,导致了灵活性和安全性比之前的OPC都提升了. 2    OPC UA的优势 1)一个通用接口集成了之前所有OPC的