值超出边界节点红色读数浮动

问题描述

我正在测试一个带有红色节点的小应用程序,从设备读取 modbus 数据,我观察到设备数据读取良好,但它不断向我发送错误“”类型错误:“值”参数超出范围“” ,我在每个读取函数中都有这段代码,并且在每个函数中都出现相同的错误,我正在从缓冲区读取浮动数据。

var pay = msg.payload.data;
var buf = Buffer.allocUnsafe(4);
buf.writeInt16BE(pay[1],2);
buf.writeInt16BE(pay[0],0);
msg.payload = buf.readFloatBE(0);
return msg;

(Edit) This is the input argument and the error recived

解决方法

如果你只在纯 NodeJS 中运行它,你会得到完整的错误:

> buf.writeInt16BE(60009,2)
Uncaught:
RangeError [ERR_OUT_OF_RANGE]: The value of "value" is out of range. It must be >= -32768 and <= 32767. Received 60009
    at checkInt (internal/buffer.js:68:11)
    at writeU_Int16BE (internal/buffer.js:828:3)
    at Buffer.writeInt16BE (internal/buffer.js:890:10)
    at REPL39:1:5
    at Script.runInThisContext (vm.js:120:18)
    at REPLServer.defaultEval (repl.js:442:29)
    at bound (domain.js:427:14)
    at REPLServer.runBound [as eval] (domain.js:440:12)
    at REPLServer.onLine (repl.js:777:10)
    at REPLServer.emit (events.js:326:22) {
  code: 'ERR_OUT_OF_RANGE'
}

这个错误也应该被打印到 Node-RED 日志中。

60009 太大,无法成为 16 位有符号整数,因此无法使用 writeInt16BE() 写入缓冲区。

它可以用 writeUInt16BE() 编写,或者我怀疑您直接从 msg 对象中已有的缓冲区读取浮点数会更好。

msg.payload = msg.payload.buffer.readFloatBE()