首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当payload Buffer没有15个值时,如何在Payload时阻塞Payload

当payload Buffer没有15个值时,如何在Payload时阻塞Payload
EN

Stack Overflow用户
提问于 2019-09-08 01:25:16
回答 2查看 92关注 0票数 0

我正在从Modbus从设备收集数据,但有时Payload Buffer没有15个值。

如果没有全部15个值,我如何阻止有效负载?

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-08 03:40:14

首先,让我们修复您发布的代码

代码语言:javascript
复制
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语句:

代码语言:javascript
复制
if ((msg.topic === "sensor1" || msg.topic === "reset") &&
   msg.payload.length == 12) {

这将检查缓冲区是否包含12个字节。

票数 0
EN

Stack Overflow用户

发布于 2019-10-10 09:42:54

您还可以在function之前添加switch节点,并使用像$length(payload)这样的测试表达式,而不是将数字15 ->输出到端口#1。如果您只想忽略不同长度的有效负载,则甚至不需要添加端口#2。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57835952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档