以OPC UA协议输出工业树莓派数据
一. 前言
OPC UA是一种基于以太网的开放通讯协议,亦可谓是工业4.0中的当红通讯协议,意在打通OT和IT网络,以一种统一的数据架构和方法,为不同网络中的设备相互访问和操作提供可能性,同时为不同行业不断变化的通讯需求提供充分的扩展性和安全性支持。
OPC UA的定义完全是在TCP/IP五层模型的应用层,也就是说,实现该协议并不需要专用芯片,也不需要任何物理层面的改动。
那么,我们如何才能让现有的设备支持上OPC UA协议呢?本文以虹科工业树莓派为例进行实践,为大家分享其实现OPC UA协议支持的方法。
虹科工业树莓派RevPi本身出厂时,并没有内置OPC UA协议,但是我们可以利用相关的SDK搭建一个简单的server,然后把工业协议(如Modbus)中的数据,以OPC UA方式输出。
二. 准备工作
硬件
PC 一台;
虹科工业树莓派 一台;
24V直流电源;
网线;
软件
PC上:
SSH连接软件,如putty;
Chrome内核的浏览器;
三. 操作步骤
1、工业树莓派上电,连上网线,PC使用Advanced IP Scanner或类似软件扫描树莓派的IP地址,或在路由器后台中直接查看DHCP客户端列表,从而确定树莓派所在IP地址。
2、使用SSH软件与工业树莓派建立连接,登录账号为pi,默认密码会印在机身侧面的贴纸上,每台机子默认密码各不相同。出现类似如下画面,即表示登录成功,本文后面的终端界面,如无特殊说明,均来自与工业树莓派的SSH会话。
3、简单起见,本文以python的开源OPC UA SDK为例,本文默认读者已有python基础,若无请先学习python基本语法。该SDK的GitHub仓库链接如下:
https://github.com/FreeOpcUa/python-opcua
python3环境在工业树莓派中已预装好,我们只需要安装SDK库即可,安装命令如下:
pip3 install opcua
安装速度取决于网络环境,如果实在太慢,或者网络下载出错,可以考虑先给pip3换国内源,再安装该库,此处不展开说明,安装完成效果如下:
4、接下来,浏览器打开树莓派所在IP地址,登录,这次用户名改为admin,密码和SSH密码是同一个,写在机身贴纸上。
5、登录后,进行Modbus配置(本文仍以ModbusTCP协议为例),配置方法请参考以往文章,或联系广州虹科获取相关指引文档,此处不再重复。整个连接配置如下表所示:
6、配置保存生效后,回到SSH界面,使用如下指令验证Modbus的连接是否成功建立:
piTest -r Input_Word_1
若配置正确,该指令应该会一直读取Input_Word_1变量存储的值,也就是Modbus从站变量地址为1的Holding Registers的值,直到按下Ctrl+C,如下图所示。
Input_Word_1亦可换成其它RevPi变量名进行读数测试,输入输出变量都可以使用该命令进行读取;我们也可以通过以下指令尝试写入变量:
piTest -w Output_Word_2,666
Output_Word_2也可以换成其它RevPi变量名,但仅当变量是个可写变量时,该指令才有意义。变量名和待写入值之间的逗号注意是英文的,不要输成中文的。
7、至此,Modbus的连接部分已测试完成,我们准备开始python编程。首先,我们需要先确认刚才我们设置的变量的相关信息,分别执行以下终端命令。
piTest -v Input_Word_1
piTest -v Input_Word_2
piTest -v Input_Word_3
piTest -v Output_Word_1
piTest -v Output_Word_2
这些返回信息非常重要,以第一个为例,我们从一行一行分析。首先第一行,很显然,只是把我们的变量名返回来了;第二行,offset: 11,意思是变量的偏移量是11,我们知道,Linux中万物皆文件,我们的这些RevPi变量也是存在文件中(具体来说,映像文件完整的路径为 /dev/piControl0 ),而变量的首字节所在地址,或者说,距离文件首字节的偏移量,就是这里的offset——11(字节)了;第三行,length: 16,此处长度单位是bit,由于Modbus的Holding Registers是16位寄存器,因此对应的存储变量也用的是16位长度;第四行,bit: 0,这其实是位偏移量,部分变量(比如DIO每通道的变量),length只有1位,那么此时就需要知道该比特是第几位,对于长度不为1的变量,位偏移量始终是0。
8、有了文件偏移量,也有文件路径,我们就可以通过标准的python文件IO来取出数据。同样以变量Input_Word_1为例,刚才我们知道了它的偏移量是11,长度是16位,因此我们需要做的是打开文件后,光标定位到11的位置,读取2个字节的长度(16位),然后把这两个字节按小端模式解析即可(所有变量值超过1字节的都是以小端模式存储)。读取完成后记得把文件关了,python代码如下:
f = open("/dev/piControl0","rb",0)
f.seek(11)
tempVar = int.from_bytes(f.read(2),byteorder='little',signed=False)
f.close()
print(tempVar)
9、我们已经成功用python取到RevPi变量的值,接下来,我们写OPC UA服务器的代码。其实整个代码,主要参考的是GitHub项目中,最小服务器的示例代码,源码链接:
https://github.com/FreeOpcUa/python-opcua/blob/master/examples/server-minimal.py
主要改动就是,我们需要多用几次add_variable,创建几个变量节点来放我们RevPi变量的值,然后在主循环中,定期进行文件IO,采样各个RevPi变量的当前值,然后把他赋值给对应的变量节点。完整源码如下,set_endpoint中的URL请改成自己RevPi所在的IP和想要使用的端口号,addrList中的变量偏移量,也请按实际情况修改:
......
剩余代码由于篇幅问题此处不放置,有需要者请联系虹科工业物联网团队获取。
10、将以上代码复制到终端文件编辑器(比方说nano或者vi),命名保存成py脚本,比方说modbus2opcua.py,然后给该脚本加上执行权限,命令如下。
chmod +x modbus2opcua.py
而后即可执行该脚本,效果如图:
11、此时打开OPC UA客户端,本文以Matrikon OPC UA Explorer为例(该软件免费,可以联系广州虹科获取安装包),连接到树莓派创建的OPC UA server,并把变量添加进监视列表,此时即可访问到从Modbus读取来的数据。
12、此时,我们修改Modbus中的值,OPC UA客户端这边也能同步获取到变化后的值。
13、var4和var5读取的是树莓派上次写入该变量的值,因此我们尝试在终端给var4写入一个新值,进行写入验证。
验证成功!
四. 总结
工业树莓派能帮助我们把不同的工业数据,以及IO点位的值,变成统一的工业树莓派变量。而我们要做的,实际上就是在创建OPC UA server之前,在地址空间内添加相应的变量节点,然后把工业树莓派变量的值和变量节点的值进行绑定即可。
Python的简便性,使得我们用五十行左右的源码,即可从零创建一个简单的OPC UA server,但是功能在很大程度上是受限的,各种节点的属性设置也不完整,而且python本身的运行效率和性能就较低,仅适用于少量点位、低速刷新的原理验证、个人学习等应用场合。
如果是在追求稳定和效率的实际工业生产环境中,笔者建议使用商业版的C/C++语言SDK,目前我们广州虹科有这样的商业版SDK在售,如有需要可与我们联系,该商业版SDK已成功通过交叉编译,并通过了在虹科工业树莓派环境上的运行验证测试。
了解更多技术案例,欢迎访问虹科官网:https://www.hohuln.com/opc-ua-solution/
以OPC UA协议输出工业树莓派数据相关推荐
- opcua客户端实现断线重连_干货:通过OPC UA协议访问西门子1500数据
轻松通过OPC UA协议访问西门子1500数据 如何实现西门子1500的OPC UA通信? 1. 功能实现 S7-1500从V2.0开始支持作为OPC UA服务器的功能,本例使用KepServer 作 ...
- AutomationML与OPC UA 相结合-为工业4.0 组件建模
工业4.0 非常热,几乎变成了一个宣传的口号了.工程师关心的是技术路线图以及它背后的技术.在本文我们聊聊工业4.0 的一个重要概念-工业组件(I4.0 component),以及如何为物理对象实现I4 ...
- OPC UA协议网关
OPC UA协议网关又叫OPC UA网关,是指一种低成本的嵌入式网关,基于Linux操作系统,实现PLC转OPC UA协议的硬件设备. OPC UA协议是用于在工业自动化领域和其他行业中安全可靠地交换 ...
- 嵌入式物联网技术栈【协议篇】OPC UA协议
一.OPC UA协议简介 OPC UA前身是OPC,第一个OPC规范在1996年发布,包括一整套接口.属性和方法的标准集 OPC全称是Object Linking and Embedding(OLE) ...
- OPC UA协议网关常见问题
钡铼技术OPC UA协议网关自面市以来,以及综合客户积累,总结一了一些关于网关常见问题,仅供大家参考. 1:你们OPC UA协议网关支持哪些PLC? 目前我们支持三菱.西门子.欧姆龙.台达.AB,AB ...
- DCS系统 采集OPC ua协议自动保存入数据库方案
DAQ for IIOT通用工业数据采集系统是一套运行在边缘计算机.工业网关或普通电脑上的设备数据采集管理软件,主要用于对各种工业仪器设备.PLC.注塑机.数控机床等数据的采集.控制.存储.统计以及上 ...
- opc协议 服务器,使用OPC UA协议在python中进行服务器端客户端编程
你想要完成什么?结构是相当重要的问题,因为你可以摆脱它. Onces它的安装运行的服务器并检查它witth他的命令行 opcua-client 这个GUI可能会帮助很多见的服务器的结构. opcua服 ...
- linux/windows下基于opc ua协议使用open62541开发客户端-上
最近公司想把windows下软件迁移到linux下,在与plc通讯方面西门子只提供windows下的库,linux下没有对应库,幸好发现有open62541这个协议外接库,对应的plc最低型号为s12 ...
- 合作式智能运输系统 车用通信系统应用层及应用数据交互标准 第二阶段_为什么一定要了解OPC UA TSN——未来的工业通信标准...
↑ 点击上方 "智能制造之家" 关注我们 写在面前 前面我们介绍了很多OPC UA的相关知识: OPC UA-面向未来的工业通讯规范 OPC UA服务器和客户端的安全机制你明白吗? ...
最新文章
- FreeSWITCH 学习笔记(一)
- linux read while 变量运算
- js(Dom+Bom)第二天(2)
- matlab图像边缘检测分析
- python数据分析兼职能挣钱吗_Python开发能从事数据分析吗
- java对外查询接口注意的地方_Java接口注意点
- 通过opencv的函数进行图片修复:cv2.inpaint()
- button3 电脑上mouse_专栏F|Cora单词168电脑(下):最强大脑,智慧的产物
- python适合自学编程吗-Python为什么这么火?小孩子适合学习python编程吗?
- [Python] 关键字 yield 用法详解
- 可编译的java代码_有没有编译方法可以运行Java代码?
- 头像+壁纸微信小程序源码
- ASP敏感词汇过滤函数
- 软件测试-常见数据库笔试题
- win7计算机怎么录屏,win7电脑怎么录屏,什么电脑录屏软件好用?
- 敏捷开发(scrum)简介
- 新概念模拟电路——晶体管构建的放大电路静态分析
- H5禁止浏览器自带返回事件
- Redis 常用 API
- CVPR2021投稿流程