OPC UA 简介
在自动化领域和下位机通讯的协议肯定离不开OPC, OPC通信标准的核心是互通性 (Interoperability) 和标准化 (Standardization) 问题。传统的OPC技术在控制级别很好地 解决了硬件设备间的互通性问题, 在企业层面的通信标准化是同样需要的。OPC访问规范都是基于微软的COM/DCOM技术, 这会给新增层面的通信带来不可根除的弱点。加上传统OPC技术不够灵活、平台局限等问题的逐渐凸显, OPC基金会 (OPC Foundation) 发布了最新的数据通讯统一方法 — OPC统一架构 (OPC UA), 涵盖了OPC 实时数据访问规范 (OPC DA)、OPC历史数据访问规范 (OPC HDA)、 OPC 报警事件访问规范 (OPC A&E) 和OPC安全协议 (OPC Security) 的不同方面, 但在其基础之上进行了功能扩展。OPC UA,是在传统OPC技术取得很大成功之后的又一个突破,让数据采集、信息模型化以及工厂底层与企业层面之间的通讯更加安全、可靠。
OPC UA的几大优势:
与平台无关,可在任何操作系统上运行
为未来的先进系统做好准备,与保留系统继续兼容
配置和维护更加方便
基于服务的技术
可见性增加
通信范围更广
通信性能提高
Iot2040安装 opc ua
Iot2000镜像文件从V2.1.2版本以后的node-red都可以联网安装OPC UC node。
第一步首先测试一下iot2040是否联网,硬件上可以通过X2P1LAN 口联上已经上网的路由器,因为X2P1LAN 默认是自动获取IP地址。所以也不需要特别的IP设置,练上后可以测试一下IOT2040是否联网,测试方式为利用PING 指令,直接PING 一个网址如:www.baidu.com
![](/club/bbs/upload/image/20180224/6365507683221662764642871.jpg)
如果PING 成功然后就如上图,但是Linux下的PING命令不会自动终止,会一直PING下去。结束通过快捷键 CTRL+C。打开文件目录 cd /usr/lib/node_modules 输入 npm install node-red-contrib-opcua 开始安装 OPCUA
![](/club/bbs/upload/image/20180224/6365507691254485501217128.jpg)
安装的过程还是有点时间的,请耐心等待
![](/club/bbs/upload/image/20180224/6365507703266995797149325.jpg)
安装完了有如下信息
![](/club/bbs/upload/image/20180224/6365507706001380985369204.jpg)
![](/club/bbs/upload/image/20180224/6365507706495130983445219.jpg)
通过浏览器打开node-red查看 OPC UA是否安装成功,不行就重新上电一下。成功的话你就会看到左侧的新Nodes
![](/club/bbs/upload/image/20180224/6365507708845130983491268.jpg)
找一个支持OPC UA Server PLC
对PLC进行数据采集的时候iot20000是作为OPC UA Client,然后PLC是作为OPC UA Server。在新一代的西门子产品中硬件中都集成了OPC UA Server,这也就是OPC UA的优势跨平台。 手册中的实例是和SIMATIC S7-1500 Software Controller 的 OPC UA Server做的通讯实例。原本我也准备依葫芦画瓢的,因为看S7-1500 Software Controller 应该是一个软PLC。应该可以直接安装在工控机甚至普通PC上,这样我就无需要额外硬件做测试。 为此我还特意安装TIA V15,博途做为一个工控组态软件绝对是一骑绝尘,至少在体量上肯定是。
![](/club/bbs/upload/image/20180224/6365507761487537541882553.jpg)
好不容易装完博途,but发现好像白忙乎了。S7-1500 Software Controller是软PLC没错,可以安装在Windows操作系统下,可以实现所有 S7-1500 硬PLC的功能。属于西门子老一代软PLC WinAC RTX的升级版。But重点来了,S7-1500 Software Controller和WinAC RTX最大的区别就是只能安装在西门子自家特定的工控机上。一句话概括,就是需要硬件支持。这让我想起西家的总线协议PN和DP,果然在封闭的道路上越走越远。没办法,只能PASS掉S7-1500 Software Controller。然后我找了另一款有名的软PLC,beckoff的twincat安装在一台PC机上,并且安装了OPC UA配置好Server。下面就把这台PC当做一台带有OPC UA Server的PLC了。先用自己的笔记本和PLC做一个OPC UA的测试连接。这时候推荐一款西门子自家的OpcUA.Client
Siemens.OpcUA.Client.rar
把笔记本的以太网口和PLC的OPC UA的以太网口配置在同一网段。在Endpoint里面设置好PLC的IP和端口号然后连接,正常会看到PLC OPC UA node下所有可读写的一些变量。
![](/club/bbs/upload/image/20180224/6365507831573776211831230.jpg)
可以看到PLC的一些变量,同时可以查看变量的NodeID。这个之后会用到。
![](/club/bbs/upload/image/20180224/6365507836934679404543214.jpg)
编写node-red OPC UA 读写变量的程序
因为X1P1LAN需要用于编程,所以使用X2P1LAN和PLC连接。先用Putty 把X2P1LAN的IP和PLC配置在同一个网段。然后连上PLC,不放心可以PING一下是否通了。
![](/club/bbs/upload/image/20180224/6365507848620531863645097.jpg)
用浏览器打开node-red界面,从左侧拖拽三个node控件到一个Flow里面去
![](/club/bbs/upload/image/20180224/6365507861823499644913350.jpg)
Inject:用来设置要访问的变量的nodeID
![](/club/bbs/upload/image/20180224/6365507867281242285554169.jpg)
OpcuaClient:用来设置OPCUA连接参数
![](/club/bbs/upload/image/20180224/6365507869495276441086064.jpg)
Text:用于输出变量值到窗口
![](/club/bbs/upload/image/20180224/6365507870117143481418804.jpg)
设置完成后把node直接连接起来形成一个“流”,这样一个读变量的编程就算完成了,然后下载到iot2040里面
![](/club/bbs/upload/image/20180224/6365507890063763164523840.jpg)
如果看到这样的提示,那么恭喜你至少OPC UA链接成功了
![](/club/bbs/upload/image/20180224/6365507892659042448986227.jpg)
在浏览器中输入http://192.168.200.1:1880/ui,就能打开监视窗口了,因为我读的变量是一个bool型,所以显示的text 为TRUE或者FALSE。我后面还监控了一个int类型的数值,显示为3.
![](/club/bbs/upload/image/20180224/6365507897407419161393657.jpg)
读没问题了,再弄一个写试试。同样拖了三个控件,
![](/club/bbs/upload/image/20180224/6365507901622990202437924.jpg)
Numeric:用来输入数字,但是好像不是调用数字键盘的。是一个增减控件
![](/club/bbs/upload/image/20180224/6365507910505689002475645.jpg)
OpcUa-Item:作用和上面的Inject类似
![](/club/bbs/upload/image/20180224/6365507911535363327754503.jpg)
OpcuaClient:;同上。
然后连线下载到iot2040,打开ui操作<,>写入和读取的数字变化一致。
![](/club/bbs/upload/image/20180224/6365507918663397087765117.jpg)
经过这次折腾了OPC UA,对node-red编程又了解了一些,有点新鲜感但是还是不太习惯这种方式。最后附上官方实例手册,有1500的朋友可以测试一下。
OPC_UA_Client_node-red_V1.0.pdf
SIMATIC IOT2000 S7.pdf