Node-Red与S7200SMART通信『1』
版权声明
无需授权即可转载
同样内容在语雀同时发布
语雀链接[1]
Node-Red的安装
Node-Red的安装很简单,可以在本地电脑上安装
具体方法参考链接 本地安装方法[2]
也可以使用在线的Node-Red FRED[3]
与S7200SMART通信
需要下载Node-Red三方库 node-red-contrib-s7[4]
下载后,需要先进行通信节点的配置

此Node即配置PLC的通信参数与访问变量,双击后可以进入设置画面,首次使用需要设置通信节点,点击 添加新的通信节点

在通信节点配置框内,S7200PLC的配置与S7-1200配置稍有不同,这里需要按照图示配置即可进行通信

标记红框处就是需要注意的配置参数,此处配置不正确,无法建立连接,通信参数配置完成后,就可以进行变量的配置,S7200SMART的变量配置主要需要注意的是V区的配置,如下图

V区需要设置成固定的数据块,即DB1,之后可以设定不同的V区地址访问V区变量,例如上图中访问V40.0,则Node-Red中的地址配置为DB1,X40.0,可以参考下面的链接获取更多的信息
V区地址配置[5]
目前还无法对定时器和计数器变量进行直接访问
读写变量
上述配置完成后,即可实现与PLC的通信访问,接下来需要使用 S7 in 和 S7 out 的Node进行变量的读写
读变量需要用到 S7 in ,如下图

双击可以打开 S7 in 的配置画面

PLC处需要选择之前建立的通信节点,Mode选项共有三种方式,主要分为读取单独的变量,读取全部变量,可以参考如下链接获取更多信息
三种Mode的区别[6]
这里我使用获取全部变量,这样所有的变量会被打包成一个对象送出,对象的Key就是变量名,Value就是变量的当前值。可以通过调用 Debug 来进行查看

可以看到所有的变量是被打包成了一个对象通过payload送出
写变量需要用到 S7 out 实现,写变量是将要写的值通过 msg.payload 写到对应的变量中,双击可以打开S7 out 设置对话框

能设置的选项很简单,就是需要写入值的变量,这里选择V40.0作为写对的对象 可以通过一个 inject 来实现变量的写入

可以配置 inject 节点的参数为布尔值,之后点击节点左侧的方形图表,可以看到V40.0的状态发生了改变

图形界面的处理
Node-Red自带图形界面,但是太丑,所以这里使用一个 uiBuilder 三方库来实现图形界面, uiBuilder 即通过各种主流的前端开发语言或者框架来实现图形界面和数据Api,所以有很大的自由度,我主要是用BootStrap来实现CSS画面布局和控件样式,使用Vue框架来实现数据的绑定,其实不需要涉及到很多的前端知识,Vue的使用也只是皮毛的功能,所以大可不必觉得这个事情有多难,其实做了后发现没有任何不可逾越的技术鸿沟。 这里直接下载了一个免费的Bootstrap的前端页面在此基础上进行修改,链接可参考
页面模板[7]
还需要安装 uiBuilder 的三方包,安装方法见链接
node-red-contrib-uibuilder[8]
安装好后,在Node-Red中可以通过 inject , uiBuilder , debug 实现一个最简单的flow,然后通过localhost:1880/uiBuilder就可以访问预先内置的页面

双击可以打开uiBuilder的设置界面

点击Edit Source Files就可以编辑Index文件和Js文件,uiBuilder内置了Vue和BootStrap的库文件,可以直接使用Vue进行数据的绑定,可以借用uiBuilder写好的页面框架内容,进行必要的修改就可以实现我们想要的功能,这里要注意如果需要使用到其他的css或者js库文件,可以放置到用户名\.node-red\uibuilder\common目录下,之后在index.html文件中进行调用。 这里我修改了Index文件的页面样式,如下图

之后通过Vue绑定从PLC读取的数据到页面上,uiBuilder在它预制的页面中已经设定好了一些数据包,包括写入到Node-Red的数据和从Node-Red读取的数据,这里没有必要完全重写,可以使用已有的数据编写必要的computed和Methods函数即可实现大部分的功能,这里我通过编写了一个computed函数将PLC中VD108变量的值显示在页面上,computed函数如下
getValue: function(){ if(this.msgRecvd.payload !== undefined){ var getValue = this.msgRecvd.payload return (getValue.VD108.toFixed(2)) }}
这里 msgRecvd 是uiBuilder预制的页面中已经建立好的data,即接收来自Node-Red的数据包,通过访问VD108就获得了变量的值
视频内容
以后的教学文章我会配合视频进行演示,视频上的五分钟顶我这里敲1000个字,所以大家可以在阅读文章的同时配合视频的演示获取更多的资讯。视频地址 Node-Red与S7200SMART通信
引用链接
[1] 语雀链接: https://www.yuque.com/books/share/590cdcfa-a731-44b7-ba0c-1a50a4af13b4?#
[2] 本地安装方法: https://nodered.org/docs/getting-started/local
[3] FRED: https://fred.sensetecnic.com/
[4] node-red-contrib-s7: https://github.com/netsmarttech/node-red-contrib-s7
[5] V区地址配置: https://github.com/plcpeople/nodeS7/issues/49
[6] 三种Mode的区别: https://github.com/netsmarttech/node-red-contrib-s7#usage
[7] 页面模板: https://startbootstrap.com/themes/sb-admin-2/
[8] node-red-contrib-uibuilder: https://flows.nodered.org/node/node-red-contrib-uibuilder