1.引言
1.1文档说明
本文档介绍的是使用node-red将modbus_slave模拟的485数据进行JSON数据封装后,上传到阿里云ECS私人搭建的服务器,数据通过服务器出处理后,存入到MYSQL数据库中。在参照本文档进行操作时,请先参照附录1和附录3搭建所需实验环境。
1.2注意事项
本文档不单单适用于阿里云TCP服务器,也适用于其他TCP云服务器和本地Linux服务器。本文档的数据传输格式,是由个人制定的,如果需要自己规定传输格式,请修改node-red里的function文件。本文档采集modbus_slave模拟的感知层传感器。本文档node-red流程在node-red流程文件夹下1.NODE-RED通过私人云服务器访问数据库(以TCP服务器为例)文件。
1.3术语解释
Modbus_slave:指在 Modbus 通信中作为从设备的角色。它响应主设备(Modbus Master)的请求,并提供所需的数据或执行命令的软件。Modbus:是一种开放的通信协议,用于工业自动化系统中设备间的通信。它允许多个设备(如传感器、执行器、PLC 等)通过串行线或网络互相交换数据。JSON:是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Node_red:一个基于浏览器的流式编程工具,主要用于连接物联网设备和在线服务。
2.系统架构图
3.感知层(modbus_slave)配置
打开modbus_slave软件,键盘点击CTRL+N创建一个新表格。点击setup->Slave Definition,进入配置界面,参照下图对modbus_slave进行配置。点击connection->connection setup,点击connection设置Modbus TCP/IP。配置modbus slave传输内容,通过前面操作其ID号,将寄存器内容栏设置为16进制,其中温湿度寄存器高2位为小数点前数据,低两位为小数点后数据。
4.Node-red搭建过程
4.1节点安装
本次项目需要使用到的节点有node-red-contrib-modbus节点,安装方法如下:
4.2Node-red业务配置
在Node-RED的工作区中,从左侧面板将一个Modbus-Read节点拖入到工作区。
双击Modebus-Red 节点,对modbus-red节点进行属性设置,如下图。
点击server后的加号设置从站的modbus TCP地址。
注:本项目使用的本地采集,所以IP为127.0.01,根据个人需求自行修改。
配置好后,点击部署,观察modbus-read节点下方是否出现active标识,出现代表网关和modbus_slave连接成功。配置好modbus-red节点后,从左侧面板将一个inject节点拖入工作区。因为采集的modbus_slave分别有温度、湿度两组数据,使用需要在inject节点中添加两个节点,分别取名为msg.temp和msg.humi。
配置好inject节点后,从左侧面板将一个function节点拖入工作区。并且将inject节点和modbus-read节点同时连接到function节点上。
双击function节点,将下方代码复制到文本编辑栏中。
if (msg.payload[1] >= 0 && msg.payload[1] < 10) {msg.temp = msg.payload[0] + msg.payload[1] * 0.1;else if (msg.payload[1] < 100 && msg.payload[1] >= 10) {msg.temp = msg.payload[0] + msg.payload[1] * 0.01;else if (msg.payload[1] < 1000 && msg.payload[1] >= 100) {msg.temp = msg.payload[0] + msg.payload[1] * 0.001;else if (msg.payload[1] >= 1000 && msg.payload[1] < 10000) {msg.temp = msg.payload[0] + msg.payload[1] * 0.0001;if (msg.payload[3] >= 0 && msg.payload[3] < 10) {msg.humi = msg.payload[2] + msg.payload[3] * 0.1;else if (msg.payload[3] < 100 && msg.payload[3] >= 10) {msg.humi = msg.payload[2] + msg.payload[3] * 0.01;else if (msg.payload[3] < 1000 && msg.payload[3] >= 100) {msg.humi = msg.payload[2] + msg.payload[3] * 0.001;else if (msg.payload[3] >= 1000 && msg.payload[3] < 10000) {msg.humi = msg.payload[2] + msg.payload[3] * 0.0001;msg.payload = '{"CurrentHumidity":'+ msg.humi+',"CurrentTemperature":' + msg.temp+'}';
注:该函数是对采集的数据进行JSON封装处理,请根据需求修改。
最后再从左侧面板将一个TCP OUT节点拖入工作区中,并将function节点与其相连。
双击TCP OUT节点,进行配置,选择连接服务器,输入端口号和地址。
最后点击部署,此时网关的业务逻辑层编写完成。
4.3开启服务器
注:简单的TCP服务器搭建请参考附录1进行配置。
在服务器命令栏中输入./server开启监听,此时即可观察数据上传情况。
5.观察MySQL数据库
注:mysql数据库搭建方法请参考附录3进行搭建。
我们打开数据库,打开存入数据的表,即可观察到存入的数据。