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 函数。所以将面向对象程序设计中的对象概念衍生到分布式系统中,就产生了分布式对象的概念。

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

  1. 微软的COM/DCOM (Distributed Component Object Model)
  2. 国家组织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的许多概念。至少我是这样的。

这使我想起了《数学的语言》中关于数学的定义,数学是研究模型的学科,数学靠自然和物理的手脚架搭建的,当自然和物理的手脚架撤离之后,人们却无法理解数学宫殿是如何建造的了。

  • 114
    点赞
  • 356
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
### 回答1: 首先,C是计算机科学中非常重要的编程语言之一。它由Dennis Ritchie在20世纪70年代早期开发,并被广泛应用于操作系统的开发中。C语言具有高效、灵活、可移植等特点,成为了操作系统、嵌入式系统和游戏开发等领域的首选语言。 其次,C语言在学习编程的过程中也是一个非常好的起点。因为它是一种结构化的语言,易于理解和学习。C语言是一种用于培养编程思维和解决问题的基础语言,掌握好C语言可以使人对编程有更深入的理解。 此外,C语言也具有广泛的应用领域。它不仅可以用于操作系统和游戏开发,还可以用于网络编程、嵌入式设备的控制和通信、大数据处理、人工智能等方面。因此,掌握C语言可以为我们进入计算机领域的各个方向提供坚实的基础。 最后,C语言也是很多其他高级语言的基础。许多其他编程语言如Java、C++、Python都有C语言的语法和特性作为基础。因此,学好C语言可以为学习其他编程语言打下良好的基础,并且更好地理解这些语言的底层原理。 总的来说,C语言在计算机科学中的重要性不言而喻。掌握好C语言不仅可以为我们学习和理解其他编程语言提供帮助,也可以为我们在计算机领域的发展和职业规划提供更广阔的选择。 ### 回答2: 对于生活中的灰色地带,我认为需要具体情况具体分析。作为一个概念,灰色地带指的是一些道德、法律或伦理等方面没有明确规定的情况。在这些情况下,我们需要根据具体的情况去判断和决策。 首先,灰色地带往往存在于许多道德问题中。例如,当我们面临一个道德困境时,我们可能会面临目标和手段之间的冲突。在这种情况下,我们需要根据不同的因素和后果来做出最佳的决策。这需要我们不仅考虑个人的利益,还需要考虑到他人的利益,并采取合适的行动。 其次,灰色地带也存在于法律方面。有时候,法律可能无法涵盖所有的情况和细节。在这种情况下,我们需要根据法律精神和公共利益来进行判断和决策。例如,在一些新兴的科技领域,法律可能无法及时跟进,我们需要依靠道德和伦理的准则来指导行为。 最后,对于灰色地带的情况,我们需要遵循一些基本的原则来指导行为。首先,我们应该尽量避免灰色地带的情况。这意味着我们需要提前做好准备,并对可能出现的问题进行预估和规划。其次,我们需要保持诚实和正直。即使在灰色地带的情况下,我们也应该坚守最基本的道德原则和价值观。最后,我们需要不断学习和提高自己的判断能力。在灰色地带的情况下,我们需要更多的思考和权衡,才能做出更好的决策。 总的来说,灰色地带是一种没有明确规定的情况,需要我们根据具体情况进行判断和决策。在这个过程中,我们应该遵循一些基本原则,尽量避免灰色地带的情况,坚守道德原则,并提高自己的判断能力。只有这样,我们才能在灰色地带中做出正确的选择。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值