当前位置:首页 > 后端开发 > 正文内容

OPCUA 讨论(一)——测验与开发环境建立

邻居的猫1个月前 (12-09)后端开发742

一、前语

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]

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=153

标签: OPCUA
分享给朋友:

“OPCUA 讨论(一)——测验与开发环境建立” 的相关文章

python机器学习,从基础到实践

python机器学习,从基础到实践

当然可以,机器学习是Python编程中的一个重要领域,它涉及到使用算法从数据中学习,以便做出预测或决策。Python有许多流行的库和框架,如scikitlearn、TensorFlow和PyTorch,可以用于机器学习。如果你对机器学习感兴趣,我可以帮助你学习基础知识,包括数据预处理、特征工程、模型...

c语言函数返回数组,C语言函数返回数组的实现与注意事项

c语言函数返回数组,C语言函数返回数组的实现与注意事项

在C语言中,函数不能直接返回一个数组。但是,你可以通过以下几种方式间接地实现:1. 返回指向数组的指针:你可以让函数返回一个指向数组的指针。但这种方式需要你确保返回的指针所指向的数组在函数返回后仍然有效。一种常见的做法是使用静态数组,因为静态数组在函数返回后仍然存在,但它的缺点是每次调用函数时,数组...

c语言程序设计,基础入门与进阶指南

好的,请问您想了解C语言程序设计的哪个方面?例如语法、数据结构、算法、编程实践等。我会尽力为您提供相关的信息。C语言程序设计:基础入门与进阶指南C语言作为一种历史悠久且广泛使用的编程语言,在计算机科学领域占据着举足轻重的地位。本文将为您介绍C语言程序设计的基础知识,帮助您从入门到进阶,掌握这一强大的...

java6,回顾与展望

java6,回顾与展望

Java 6(也称为Java SE 6)是Java编程语言的一个版本,由Sun Microsystems(现为Oracle Corporation)于2006年12月11日发布。Java 6引入了许多新特性和改进,包括但不限于:1. 脚本语言支持:Java 6支持使用脚本语言(如JavaScript...

verilog语言入门教程,verilog语言

如果你想学习Verilog语言,这里有几篇入门教程可以参考:1. 菜鸟教程 Verilog 教程 这篇教程介绍了Verilog HDL的基本语法、设计层次和仿真方法,适合初学者和进阶者。通过实例和代码,你可以学习如何用Verilog设计数字电路,如4位宽10进制计数器。 2. CSDN...

rust是什么意思,什么是Rust?

rust是什么意思,什么是Rust?

Rust 是一种系统级编程语言,由 Mozilla 研究院开发。它的设计目标是提供内存安全、并发性、实用性以及零成本抽象。Rust 旨在解决 C 等语言中常见的内存安全问题和性能问题。Rust 语言的特点包括:1. 内存安全:Rust 通过所有权系统和生命周期检查来确保内存安全,避免了悬垂指针和...