在以往的文章中,我们已经介绍了虹科的工业树莓派与Node-RED之间配合的种种可能性。今天,我们将通过实操案例,来看看如何使用Node-RED,以拖拽式低代码,甚至是无代码编程的方式,轻松实现工业协议与MQTT互转以及简单的HMI数据面板,帮助您有效降低在OT协议方面的学习成本,在低经验,甚至是无OT编程经验的情况下,快速在OT协议中的数据与云端数据之间建立联系。
准备工作
1.硬件准备
PC一台
工业树莓派一台
24V直流电源
网线
相关协议网关模块(可选,根据实际需求添加)
2.软件准备
PC上:
Chrome内核的浏览器
树莓派上:
Node-RED、Node-RED RevPi Nodes Server(默认已预装,若发现预装缺失,或需要版本更新可联系广州虹科获取相关文档)
node-red-dashboard(可选,用于制作简单的HMI数据面板)
操作步骤
1.树莓派上电,连好网线,使用Advanced IP Scanner或类似软件扫描工业树莓派的IP地址,或在路由器后台中直接查看DHCP客户端列表,从而确定树莓派所在IP地址。
2.浏览器打开树莓派所在IP地址,出现登录画面,账号为admin,默认密码会印在机身侧面的贴纸上,每台机子默认密码各不相同。
3.登录后打开SERVICES选项卡,分别将以下三项设为Enable,最后点SAVE ALL保存设置。
Modbus Master(本文以Modbus为例,因此需要将Modbus主站功能使能,若不使用Mobus协议则无需Enable此项)
Node-RED
Node-RED RevPi Nodes Server
4.回到APPS选项卡,点击PiCtory右边的START进入树莓派的模块配置界面——PiCtory。
5.首先把主模块按实际情况从左边设备列表中拖到右边(作为例子,本文使用Core作为主模块),把其它IO模块和协议网关模块按实际情况中的左右物理位置,按顺序把模块拖到主模块两边(本文没有使用额外模块)。最后,若要使用主模块的Modbus RTU/TCP主站功能,则在Virtual Devices中找到相应的虚拟模块,拖动到右边,如下图所示。
6.设置相应的协议模块,本文以设置Modbus TCP主站为例:选定要设置的Modbus TCP主站虚拟模块,在右下角变量表中拖到最下方,在slave_IP_address中填入Modbus TCP从站所在IP地址,slave_TCP_port中填入Modbus TCP通讯设置的端口号,默认是502。
7.对着Modbus TCP主站虚拟模块右键点击,打开Extended Data设置界面,并按实际情况设置Modbus变量地址等相关参数,输入完成后点OK确定,附上本文Modbus TCP从站相关参数表:
8.配置完成后点上方菜单的File -> Save as Start-Config. 保存到启动方案,然后点Tools -> Reset Driver立即使配置生效。
9.开一个新标签页,再次输入树莓派IP打开工业树莓派设置主页,点击Node-RED右边的START,或直接访问 [树莓派IP]:1880 进入Node-RED编程界面。
10.在左边的节点列表中找到Revolution Pi分类,此分类底下的节点即为专为工业树莓派设计的节点。拖动一个revpi-multiple-input节点到右边网格区域,然后双击打开对其进行配置。先点击Server右边的铅笔案例,保持默认的localhost地址和8000端口,其它参数保持留空,然后点击右上角的添加,最后在Input Pins列表中找到以下3个变量(该列表只能找到输入变量,输入是对树莓派而言),分别勾上然后点右上角的完成。
Input_Word_1
Input_Word_2
Input_Word_3
11.拖一个Debug节点到revpi-multiple-input节点的右边,简单的把两个模块连上,点整个网页右上角的“部署”。
12.把Modbus TCP从站中的变量值稍作更改,这里我把从站中地址1变量的值改成了321(revpi-multiple-input节点需要它监视的变量中至少一个值有变化,才会向后面的节点输出信息),此时在Debug信息区中找到如下信息表示Modbus TCP数据获取成功。(变量属性是数字形式或者字符串形式都没关系,不影响后续使用)。
13.按下图方式配置节点,其中MQTT输入输出节点仅需配置MQTT地址、端口、Topic等基本信息即可,本文把树莓派的发布Topic设为了RevPiPub,订阅Topic设为了RevPiSub。
分割消息和消息分流节点配置分别如下。
分流节点右边的3个节点为revpi – output,默认会选定前面设置过的localhost:8000作为Server,这部分不需要更改,在下方Pin中分别选择3个输出变量名Output_Word_1、Output_Word_2、Output_Word_3即可。
14.修改完成后,别忘了点击整个网页右上角的“部署”。然后我们尝试把Modbus TCP从站中地址2变量的值改成44555,此时即能通过MQTT获取到一条记录Modbus变量的信息。
15.随后我们通过MQTT发送指令,分别通过JSON中out1、out2、out3三个字段,修改3个Modbus写入变量的值,效果如下图。
16.至此,MQTT和工业通讯协议中的变量交互已经完成,我们既实现了MQTT数据上传,也实现了数据下发。接下来,我们可以尝试创建一个简单的HMI数据面板。首先,在Node-RED右上角的“三”菜单中找到“节点管理”,然后进入“安装”选项卡,搜索node-red-dashboard并安装(安装速度取决于网络环境和树莓派工作负载)。
17.我们在前面的基础上,额外加上按下图形式编排的一些节点。其中左边一列节点均为inject节点,被设为每秒为周期重复注入字符串(变量名),中间一列节点全是工业树莓派专用节点中的revpi – getpin,用以通过变量名获取值,右边全是dashboard分类下的gauge。
18.点击部署后,浏览器访问 访问 [树莓派IP]:1880/ui 即可看到由Node-RED自动生成的简易HMI数据面板。
总结
通过以上的简单步骤,我们可以轻松实现Modbus变量数据与MQTT的交互,中途没有输过任何一行代码,甚至没有进入过命令行界面,全部都是浏览器上的设置操作,其它工业树莓派所支持的通讯协议的配置也是大同小异。总的思路就是给树莓派设置好相应的参数,树莓派自动从相应协议中获取值并存到变量中,我们只需要在Node-RED中拖拽编程,把变量送到MQTT发送组件即可。这种编程方式大幅降低了非OT从业人员开发相关应用的学习成本,用户也不用担心之前从未使用过树莓派,甚至完全没有Linux系统使用经验也没关系。此外,利用Node-RED上的其它开源节点,我们也能够以MQTT以外的多种方式传输数据、以丰富多样方式的展示数据。有编程经验的用户,也可以通过function节点在发送前对数据进行运算、过滤等多种处理,甚至利用exec节点接入其它应用,进行更为复杂的边缘运算。