0
根據我的最後一個問題SerialPort 'close' event never fire。我無法檢測到COM
是否已斷開,因此我創建了自己的方式來檢測它。nodejs-serialport =>重新建立連接後關閉端口
我已經創建了時間戳,並每隔1秒用進行檢查,看它是否已連接。 當它檢測到COM
被拔掉我已嘗試重新建立連接或重新實例端口SerialPort
,就像你會看到下面的代碼。
當它嘗試重新連接我已經得到Error: Access denied.
有一種方法來刷新或清理緩存? ,因爲我認爲服務器在沒有正常關閉時仍然保持連接。
我也試過port.close()
,它是把我扔出去:Error: Port is not open.
var comPort = '\\\\.\\COM7',
lastDataTime,
lastresult,
count = 0,
lastDataTime,
comStatus,
error;
var port = new SerialPort(comPort, function (err) {
if (err) {
comStatus = false;
return console.log('Error: ', err.message);
}
});
const parser = port.pipe(new Readline());
port.on('open', function() {
console.log('~Port is open.');
parser.on('data', function (data) {
comStatus = true;
lastDataTime = Date.now();
if (++count == 10) {
count = 0;
lastresult = data;
}
});
});
setInterval(function() {
if (Date.now() - lastDataTime > 1000 || !comStatus) {
comStatus = false;
port.close();
port = new SerialPort(comPort, function (err) {
if (err) {
error = 'Error: ' + err.message;
return console.log(error);
}
});
}
}, 1000);
app.get('/', function (req, res) {
res.send((comStatus) ? lastresult : 'Disconnected - ' + error);
console.log(lastresult);
})
謝謝!
由於該事件火我已經嘗試重新連接'COM'之後,但之後幫助!我再重新連接數據停止流動。 你知道如何斷開連接後重新連接嗎? – itzikb
使用'autoOpen:false'選項並手動打開端口。 –