OPCUA 探讨(一)

打印 上一主题 下一主题

主题 783|帖子 783|积分 2349

一、前言

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邮箱:zuoquangong@163.com

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表