我正在从Modbus从设备收集数据,但有时Payload Buffer没有15个值。
如果没有全部15个值,我如何阻止有效负载?
if (msg.topic === "sensor1" || msg.topic === "reset") {
var msg1 = { payload : msg.payload[1]};
var msg2 = { payload : msg.payload[3]};
var msg3 = { payload : msg.payload[5]};
var msg4 = { payload : msg.payload[7]};
var msg5 = { payload : msg.payload[9]};
global.set('sensor1Id',msg1.payload);
global.set('sensor1Concentration',msg2.payload);
global.set('sensor1Temperature',msg3.payload);
global.set('sensor1Voltage',msg4.payload);
global.set('sensor1SensorFailure',msg5.payload);
return msg;
}有时我会得到以下有效负载:
1,3,10
但应该是这样的:
0、2、0、0、31、213、0、4、184、47、1、3、10
发布于 2019-09-08 03:40:14
首先,让我们修复您发布的代码
if (msg.topic === "sensor1" || msg.topic === "reset") {
global.set('sensor1Id',msg.payload[1]);
global.set('sensor1Concentration',msg.payload[3]);
global.set('sensor1Temperature',msg3.payload[5]);
global.set('sensor1Voltage',msg4.payload[7]);
global.set('sensor1SensorFailure',msg5.payload[9]);
return msg;
}不需要创建所有额外的对象来设置全局变量。
如果您希望根据缓冲区长度来控制代码,则可以按如下方式更改if语句:
if ((msg.topic === "sensor1" || msg.topic === "reset") &&
msg.payload.length == 12) {这将检查缓冲区是否包含12个字节。
发布于 2019-10-10 09:42:54
您还可以在function之前添加switch节点,并使用像$length(payload)这样的测试表达式,而不是将数字15 ->输出到端口#1。如果您只想忽略不同长度的有效负载,则甚至不需要添加端口#2。
https://stackoverflow.com/questions/57835952
复制相似问题