OPCUA 讨论(一)——测验与开发环境建立
一、前语
OPCUA(OPC Unified Architecture)是一种应用层数据通信协议,其标准由OPC基金会(OPC Foundation)拟定,笔者在作业期间(面向西门子数控体系的数据收集)触摸该协议较多。
西门子数控体系产品称作Sinumerik,其内部嵌入了一个OPCUA服务器,经过以太网衔接,能够用上位机(一般电脑或工控机)的OPCUA客户端程序拜访OPCUA服务器,获取Sinumerik数控体系内的各种数据。
收集到数据之后,咱们才干构建更进一步的作业,例如机床的数字孪生 、工厂信息可视化大屏、实时机床健康状况评价等等,能够说数据收集是一切上层服务的根底。现在在机床数据收集方面,不同厂家的数控体系对外供给的收集协议都不太相同,例如FANUC有FOCAS、西门子有OPCUA、华中数控有NC-Link,咱们很或许遇到实践工厂中有支撑不同协议的多种数控体系,这时就需求咱们在数据收集软件中完成支撑不同协议的收集功用。
本系列文章聚集于西门子数控体系Sinumerik支撑的OPCUA通信协议,评论怎么运用微软dotNet结构(C#)开发数据收集程序,并逐渐完善各项功用,此外会结合OPC基金会官方文档评论OPCUA底层结构。根据其他协议的数据收集暂不评论。
二、预备作业
2.1 预备开发环境
2.1.1 Visual Studio2022
笔者运用的开发软件是微软的Visual Studio 2022,其完好装置包较大。
主张装备时参阅网上其他文章(关键词:.NET开发,VS2022)。操作体系是windows11家庭版。
2.1.2 dotNet(.NET)
dotNet(.NET)开发环境/运转环境和C#的联系能够了解为JDK/JVM和Java之间的联系,假如是核算机专业的应该能了解。
假如不是核算机的,我简略解释一下,核算机底层(CPU)需求的是核算机电子电路能够了解的二进制机器码,不同CPU架构(x86、ARM)的机器码不相同,咱们写的C#代码文本都需求转化、翻译成和核算机能读懂的机器码,因此有了.NET这类软件结构作为中心前言,担任转化、翻译,让核算机能够履行程序。
2.1.3 NuGet第三方包办理器
Visual Studio里边有个叫NuGet的东西,相当于Python的pip,Java的Maven,其效果是在咱们的项目里引进其他人写好的模块(第三方包)。
关于OPCUA相关的项目,必不可少的是OPC基金会供给的OPCUA相关模块,咱们都是运用这个NuGet引进的。
2.2 获取OPCUA客户端示例
示例代码在 https://gitee.com/zuoquangong/opcuaapi
(注:该示例代码现在非常粗糙,存在UI层面的bug,一些重要功用如“订阅”有待补全,笔者正在着手收拾中)
本OPCUA客户端示例的界面如下,规划的比较朴素,界面操作办法见第三章。
2.3 获取OPCUA服务器
咱们在开发时身边或许不会有Sinumerik数控体系,那么需求在电脑上装置一个能够用于测验的OPCUA服务器软件。
2.3.1 获取Prosys软件
引荐运用Prosys的软件,叫“Prosys OPC UA Simulation Server”,别下载错了。
Prosys官网进口:https://prosysopc.com/
留意,红框里这个“opc.tcp://SAM.mshome.net:53530/OPCUA/SimulationServer”便是该OPCUA服务器的拜访地址(传输层为TCP协议),咱们的OPCUA客户端拜访这个地址即可。
实践Sinumerik中,OPCUA服务器的端口是4840,能够衔接的IP一般有X127调试端口的192.168.215.1(该IP固定不可调),以及X130的公司网络端口192.168.1.6(该IP能够自己设,或经过DHCP获取)。
2.3.2 切换方式
这个软件有两种方式,根底方式(Basic Mode)和专家方式(Expert Mode),咱们用专家方式。切换办法如下:
2.3.3 添加个用户
Sinumerik体系的OPCUA默许用户是OpcUaClient,咱们在prosys里也建一个这样的用户。
留意,两次暗码共同“Add User”按钮才干被点击。
这样新用户创立结束,OPCUA客户端程序能够运用该用户身份与Prosys的OPCUA服务器树立会话衔接。
三、OPCUA初试
首先把prosys软件运转起来,即OPCUA服务器开端作业。
然后用Visual Studio2022翻开客户端项目,开端运转客户端代码。
3.1 衔接服务器
呈现界面后,在服务器地址输入prosys供给的OPC地址,并填写用户名、暗码信息。
点击“创立”,即可在服务器和客户端之间树立一个OPCUA会话:
成功树立OPCUA会话(Session)之后,能够检查当时会话相关信息:
咱们能够经过点击“创立”按钮,创立并保持多个会话;经过会话下拉菜单挑选当时会话(currentSession);点击“撤销”按钮,能够断开(DisConnect)当时会话。
3.2 阅读OPCUA服务器内容
界面左边用于衔接服务器和会话办理(创立、切换、断开、检查信息),界面右侧则是根据当时会话的一些功用。
首先是阅读OPCUA服务器。OPCUA服务器内容能够树状目录方式进行阅读,点击“阅读”按钮,即可显现OPCUA服务器的根目录节点内容:
这儿每一个内容都称作一个“节点(Node)”,一个节点包括多个“特点(Attribute)”。
单击节点,即可显现节点信息(即节点内的各个特点):
双击节点即可进入该节点,阅读其内部节点结构(例如双击“Objects”节点):
点击“回来”按钮即可回来上一级目录。
以上是根本的阅读功用,实践上也包括了节点信息读取(readNode)和节点值读取(readValue),两种读取功用。在OPCUA中,根本的节点操作有:
其间“写入”操效果的较少,因为笔者的作业中,OPCUA服务器数据对应的是数控体系内数据,随意改写会导致安全问题。
完成这几个操作就根本完成了一个客户端的骨干功用,后边咱们将结合源码和文档对这些操作逐渐解读。
3.3 调查节点信息
一般咱们更重视怎么读取一个节点的值(readValue),咱们能够调查到每个节点都有一个ID
例如这个节点名称为“Counter”的节点,其ID为“ns=3;i=1002”,ns是“namespace”的简写,代表一个命名空间,“3”是该命名空间在服务器上的索引号,“1002”是其在该命名空间内的索引号。该节点值为4。
咱们进行数据收集,一般是经过OPCUA客户端的阅读功用(Browser)找到想要获取值的节点(例如机床Z轴坐标或电流)的ID,然后调用读取(readNode)或监控(subscription)办法,获取其值。
假如咱们客户端能缓存节点ID就不必阅读,能够直接读取节点值了。
总结
后续咱们将对示例源码和服务器节点结构等问题进行评论。
附录
OPC基金会:OPCUA英文文档
OPCUA技术开发英文文档
*附言
因为作者水平有限,或许在文章中呈现过错或不妥描绘,如有发现此类情况期望您能及时供给反应,非常感谢!
假如感觉本文对您有所协助,期望为文章点个引荐,谢谢。
作者联系方式,163邮箱:[email protected]