描述

utgard 的方式过时了,所以建议使用 OPCUA 的方式。

这是连接操作说明:OPC UA Client:使用UaExpert

使用的开源库是 milo:https://github.com/eclipse/milo

因为没有实际项目,所以只运行 milo 的示例代码的客户端部分:

https://github.com/eclipse/milo/tree/master/milo-examples/client-examples

代码

(正在整理)

https://gitee.com/ioufev/opcua-milo-demo

OPCUA 官方内容

OPCUA 规范:https://reference.opcfoundation.org/

内容太多,很繁琐,还分好多部分。感觉看看配的图片就行了。

一些理解

可以不使用 OPCUA 这种方式连接吗?

是可以的,很多 PLC 使用的协议是公开的,比如 Modbus,直接连接也没问题。

DA 到 UA

OPC DA 是针对 windows DCOM 的规范,以后肯定不推荐了。

OPC UA 要兼容 DA,但是 要摆脱 windows DCOM,所以推出类似 HTTP 的 opc over tcp 协议。

旧的项目,第三方 OPCserver,比如 kep ,去连接设备获取数据,kep 提供不同的连接方式(DA、UA、ThingWorx)

除非使用的第三方 OPC 只支持 DA,但是感觉这样的 OPCserver 该被淘汰了。

OPCUA 的连接

看别人写的帖子都使用无安全策略的连接方式,是很省事。

我对证书的内容,不太理解明白,所以后续会补充内容。

暂时只用到生成简单的自签名证书:Windows 安装 OpenSSL 生成自签名证书

OPCUA 和物模型,和 Java 对象类比

OPCUA 是一种映射方式,非常像 Java 中使用类描述对象。

按照所谓 “物模型” 的说法,设备就是一个对象,

🍄 设备的参数,就是:物模型的属性值,Java 中类的属性(也可以叫变量,字段),OPCUA 中的节点的变量。

🍄 设备的操作方法,就是:物模型的功能,Java 中类的方法(也可以叫函数),OPCUA 中的方法

🍄 设备的出现的各种状况(比如上线,某个组件出故障,某个参数超标),就是:物模型的事件,Java 中的事件,OPCUA中订阅。

对于事件的理解,感觉很像 MQTT 中的发布订阅,如果设备发生了什么故障,把情况通知到订阅的人。

去年做了一个无人船项目,项目不太成功,不过可以来具体举例理解。

无人船运行过程中,需要知道运行状态:电池的温度、电流电压、剩余电量,船的速度,GPS 坐标,航向角等。
无人船要能远程控制,通过摄像头获取到远程视频,能在界面上控制船前进、加速、转弯、后退、停止。
无人船航行过程中发现有人在游泳,或者电池快没电了发出提示,或者航行到了水质参数异常的区域发出提示。

OPCUA 中的引用,和 Java 中一个类引用另一个类的实例作为属性值,很相似。

OPCUA 的节点类,和 Java 中的类也很相似,节点是从根节点到层层子节点,Java 中也是从 Object 类开始加载。

地址空间,一个树形结构,每个节点是一个类,每次看地址空间,感觉就像在 idea 里看 Java 类的结构。

OPCUA 中的数据类型

OPCUA 中的数据类型,连 Java 中的 null 都有对应。

Boolean、
Byte、
ByteString:使用字节定义字符串,感觉和 Java9 中 String 的定义由 char[] 改为 byte[] 很像。
DateTime、
Double、
Float、
Int16、Int32、Int64
UInt16、UInt32、UInt64:无符号类型,没有用一个位表示正负号,只表示零和正数。
milo 中 Unsigned 类封装了无符号类型的表示,比如 Uint16 类型的 12,表示为:Unsigned.ushort(12)

String

节点标识符

OPCUA 中的 Identifier,节点标识符,milo 中 Identifiers 类定义的,

对于想要读取的项,比如 “通道 1.设备 1. 标记 1”,这就是一个 Identifier

OPCUA 的订阅

MQTT 中的订阅,是要有主题的。
OPCUA 的订阅是个事件通知,比如订阅某个变量的值如果超出某个范围,触发事件,发出通知。

请求响应 vs 发布订阅

也可以叫 OPCUA vs MQTT

OPCUA 是个发展的协议,原来就是请求响应模式,

所以大部人使用都是:OPCUA获取到数据后通过MQTT发送出去。

估计OPCUA的有些人觉得不爽,觉得OPCUA也要有发布订阅模式,我看 UAExpert 也有了发布订阅功能,不过还没见人使用,因为 MQTT 的发布订阅很方便。

使用 KEPServerEX:把 OPC 数据通过 MQTT 上传

OPCUA 的通信协议

原来的 OPC 只是个规范,OPCUA 有个基于 TCP 的应用层是二进制格式的协议,即常见的 opc.tcp://

OPCUA 的通信协议,原来似乎是 XML 格式,后来这种模式被 JSON 格式取代了,OPCUA 也与时俱进。

OPCUA 是个应用层协议,使用 TCP 传输,加密传输就是 TCP + TLS。

MQTT 也可使用 WebSocket 作为传输层,传输 MQTT 格式的信息,OPCUA 也可以使用 WebSocket 作为传输层,也就是浏览器作为OPCUA客户端,直接访问OPCUA服务端,暂时还没看到有实现开源库。

OPCUA 的建模

感觉就是:用 XML 格式或者 JSON 格式,来描述服务端有什么节点,节点有什么属性。

在服务端定义节点,如果项少,自然没问题。如果项很多,也就是节点很多。

如果行业中有人定义好了拿出来分享,感觉就是所谓的建模。

原文地址:http://www.cnblogs.com/ioufev/p/16782761.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性