我在Node.js中遇到SerialPort的问题,我无法解决。在MODBUS RTU协议中,如果在两个数据块之间发生指定的超时(例如,10毫秒),则认为消息被完全传输。 我使用SerialPort的经验表明,我经常得到单个数据事件中的一个或几个字节,当实际消息可能长达100个字节时。现在,我如何知道消息是否已经结束,我可以将数据传递给其他处理程序?好吧,现在我做以下事情:
var timeoutTimer;
function dataEventHandler(chunk) {
clearTimeout(timeoutTimer);
// concatenate the chunks
timeoutTimer = setTimeout(10, handleFullMessage);
}
这显然不是最好的方法...想象一下另一个回调钟声,例如HTTP请求处理程序,可以评估长达100毫秒。
几个想法:
handleFullMessage()
中检查串口上是否有可用的东西,如果是,只需退出,假设可能再次调用数据事件(MODBUS是主/从协议,所以没有人会说没有请求)。但我不知道该怎么做。