В соответствии с моим последним вопросом событие закрытия SerialPort никогда не срабатывает. Мне не удалось обнаружить, если COM
отключен, поэтому я создал свой собственный способ его обнаружения.
Я создал временную метку и проверял ее с помощью interval()
каждую 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);
})
Спасибо!