当有效负载缓冲区没有 15 个值时如何阻止有效负载
How to block payload when Payload when Payload Buffer does not have 15 values
我正在从 Modbus 从属设备收集数据,但有时有效负载缓冲区没有 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,0,31,0,213,0,4,184,47,1,3,10]
首先让我们修复您发布的代码
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 个字节。
您还可以在function
之前添加一个switch
节点,并使用$length(payload)
之类的测试表达式,与数字15进行比较->输出到端口#1。如果你只是想忽略不同长度的有效载荷,你甚至不需要添加端口#2。
我正在从 Modbus 从属设备收集数据,但有时有效负载缓冲区没有 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,0,31,0,213,0,4,184,47,1,3,10]
首先让我们修复您发布的代码
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 个字节。
您还可以在function
之前添加一个switch
节点,并使用$length(payload)
之类的测试表达式,与数字15进行比较->输出到端口#1。如果你只是想忽略不同长度的有效载荷,你甚至不需要添加端口#2。