版权声明
无需授权即可转载
同样内容在语雀同时发布
语雀链接

Node-Red的安装

Node-Red的安装很简单,可以在本地电脑上安装

具体方法参考链接
本地安装方法

启动时出现无法运行可以
若要在本地计算机上运行您编写的未签名脚本和来自其他用户的签名脚本,请使用以下命令将计算机上的 执行策略更改为 RemoteSigned 执行:set-ExecutionPolicy RemoteSigned

也可以使用在线的Node-Red
FRED

与S7200SMART通信

需要下载Node-Red三方库
node-red-contrib-s7

下载后,需要先进行通信节点的配置
image.png

此Node即配置与PLC的通信参数,访问变量,双击后可以进入设置画面,首次使用需要设置通信节点,点击 添加新的通信节点
image.png
在通信节点配置框内,S7200PLC的配置与S7-1200配置稍有不同,这里需要按照图示配置即可进行通信
image.png
标记红框处就是需要注意的配置参数,此处配置不正确,无法建立连接,通信参数配置完成后,就可以进行变量的配置,S7200SMART的变量配置主要需要注意的是V区的配置,如下图
image.png
V区需要设置成固定的数据块,即DB1,之后可以设定不同的V区地址访问V区变量,例如上图中访问V40.0,则Node-Red中的地址配置为DB1,X40.0,可以参考下面的链接获取更多的信息
V区地址配置
目前还无法对定时器和计数器变量进行直接访问

读写变量

上述配置完成后,即可实现与PLC的通信访问,接下来需要使用 S7 inS7 out 的Node进行变量的读写

读变量需要用到 S7 in ,如下图
image.png

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

写变量需要用到 S7 out 实现,写变量是将要写的值通过 msg.payload 写到对应的变量中,双击可以打开S7 out 设置对话框
image.png
能设置的选项很简单,就是需要写入值的变量,这里选择V40.0作为写对的对象
可以通过一个 inject 来实现变量的写入
image.png
可以配置 inject 节点的参数为布尔值,之后点击节点左侧的方形图表,可以看到V40.0的状态发生了改变
image.png

图形界面的处理

Node-Red自带图形界面,但是太丑,所以这里使用一个 uiBuilder 三方库来实现图形界面, uiBuilder 即通过各种主流的前端开发语言或者框架来实现图形界面和数据Api,所以有很大的自由度,我主要是用BootStrap来实现CSS画面布局和控件样式,使用Vue框架来实现数据的绑定,其实不需要涉及到很多的前端知识,Vue的使用也只是皮毛的功能,所以大可不必觉得这个事情有多难,其实做了后发现没有任何不可逾越的技术鸿沟。
这里直接下载了一个免费的Bootstrap的前端页面在此基础上进行修改,链接可参考
页面模板
还需要安装 uiBuilder 的三方包,安装方法见链接
node-red-contrib-uibuilder
安装好后,在Node-Red中可以通过 injectuiBuilderdebug 实现一个最简单的flow,然后通过localhost:1880/uiBuilder就可以访问预先内置的页面
image.png
双击可以打开uiBuilder的设置界面
image.png
点击Edit Source Files就可以编辑Index文件和Js文件,uiBuilder内置了Vue和BootStrap的库文件,可以直接使用Vue进行数据的绑定,可以借用uiBuilder写好的页面框架内容,进行必要的修改就可以实现我们想要的功能
这里我修改了Index文件的页面样式,如下图
image.png
之后通过Vue绑定从PLC读取的数据到页面上,uiBuilder在它预制的页面中已经设定好了一些数据包,包括写入到Node-Red的数据和从Node-Red读取的数据,这里没有必要完全重写,可以使用已有的数据编写必要的computed和Methods函数即可实现大部分的功能,这里我通过编写了一个computed函数将PLC中VD108变量的值显示在页面上,computed函数如下

  1. getValue: function(){
  2. if(this.msgRecvd.payload !== undefined){
  3. var getValue = this.msgRecvd.payload
  4. return (getValue.VD108.toFixed(2))
  5. }
  6. }

这里 msgRecvd 是uiBuilder预制的页面中已经建立好的data,即接收来自Node-Red的数据包,通过访问VD108就获得了变量的值

视频内容

以后的教学文章我会配合视频进行演示,视频上的五分钟顶我这里敲1000个字,所以大家可以在阅读文章的同时配合视频的演示获取更多的咨询。点击阅读原文即视频地址。