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