Node-Red学习笔记
1:Node-RED使用Modbus Tcp与从站通信
Poll Rate代表是循环读取从站间隔,下面图片设定的是3秒循环读取1次

2:Node-RED读取从站的数组数据转换成伏点数


下面是function1中代码
// 假设 msg.payload 是包含六个 unsigned short 的数组,例如 [190, 3118, 0, 0, 0, 0] // 假设每两个数字组成一个32位整数(高位在前,低位在后),然后转换为浮点数 // 注意:请根据你的数据源确认字节序(大端序或小端序) // 1. 提取三对数据 let highWord = msg.payload[0]; // 第一组高位 let lowWord = msg.payload[1]; // 第一组低位 let highWord1 = msg.payload[2]; // 第二组高位 let lowWord1 = msg.payload[3]; // 第二组低位 let highWord2 = msg.payload[4]; // 第三组高位 let lowWord2 = msg.payload[5]; // 第三组低位 // 2. 将每对16位整数合并为一个32位整数 let combinedInt = (highWord << 16) | lowWord; let combinedInt1 = (highWord1 << 16) | lowWord1; let combinedInt2 = (highWord2 << 16) | lowWord2; // 3. 创建DataView来转换每个32位整数为浮点数 let buffer = new ArrayBuffer(4); let view = new DataView(buffer); view.setUint32(0, combinedInt, false); // false表示大端序 let floatValue = Math.round((view.getFloat32(0, false)) * 10) / 10; view.setUint32(0, combinedInt1, false); let floatValue1 = view.getFloat32(0, false); view.setUint32(0, combinedInt2, false); let floatValue2 = view.getFloat32(0, false); // 4. 将三个浮点数组织成数组形式赋值给msg.payload msg.payload = [Math.round((floatValue*10)/10), floatValue1, floatValue2]; // 或者也可以组织成对象形式,更清晰但结构更复杂 msg.payload = { value1: floatValue, value2: floatValue1, value3: floatValue2 }; var newMsg1 = { payload: msg.payload.value1 }; var newMsg2 = { payload: msg.payload.value2 }; var newMsg3 = { payload: msg.payload.value3 }; // 对每个 payload 进行格式化,保留一位小数(返回数值) if (typeof newMsg1.payload === 'number') { newMsg1.payload = parseFloat(newMsg1.payload.toFixed(1)); // 例如:1525.7 } if (typeof newMsg2.payload === 'number') { newMsg2.payload = parseFloat(newMsg2.payload.toFixed(1)); } if (typeof newMsg3.payload === 'number') { newMsg3.payload = parseFloat(newMsg3.payload.toFixed(1)); } // 返回处理后的消息数组 return [newMsg1, newMsg2, newMsg3];

浙公网安备 33010602011771号