gpt4 book ai didi

node.js - 多次写入的 Node 串行端口问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:35 24 4
gpt4 key购买 nike

当我传递一个包含 1 个元素的数组时,一切正常,当我传递一个包含两个元素的数组时(对于我们的用例来说是最大),我收到以下错误:

There's no write queue for that file descriptor (after write)!

这是我的代码:

exports.triggerPhysical = function(state, alerts) {

console.dir("IN PHYSICAL");
console.dir(alerts);

SerialPort.list(function(err, ports) {

var port = {};

for(var i = 0; i < ports.length; i++) {
try {
if(typeof ports[i].manufacturer != 'undefined' && ports[i].manufacturer.includes("Numato")) {
port = ports[i];
}
} catch(err) {
console.dir(err);
}
}

var numato = new SerialPort(port.comName, {baudrate : 19200}, function(err) {
if(err) {
return console.dir(err);
}

console.dir('calling write');

for(var j = 0; j < alerts.length; j++) {
numato.write('relay ' + state + ' ' + alerts[j].index + '\r', function(err) {
if(err) {
console.dir('error writing');
console.dir(err);
}
console.dir('serial message written');
});
}

numato.close();

return true;

});
});
}

第一次写入效果很好,第二次失败。我猜有一个明显的解决方案,但我没有找到它。任何见解将不胜感激。

最佳答案

我最终做了两件事来解决这个问题。首先,我升级到 Node 串行端口库的 5.x 版本。

其次,我将代码更改为以下内容:

exports.triggerPhysical = function(state, alerts) {

var port = new SerialPort('/dev/ttyACM0');

port.on("open", function() {
alerts.forEach(function(alert, idx) {
str = 'relay ' + state + ' ' + alert.index + '\r';
port.write(str, function(err, results) {
if(err) {
console.dir("err writing");
console.dir(err);
} else {
console.dir(results);
}
});
});
})

port.drain(writeDone);


function writeDone() {
console.dir("In writeDone");
port.close();
}
}

我现在能够进行连续写入而不会导致任何错误,并且端口不会最终处于奇怪的锁定状态。

关于node.js - 多次写入的 Node 串行端口问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46125464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com