2017-09-11 22 views
7

Używam pakietu nodeJS SerialPort Pakiet do połączenia z portami komputera.Zdarzenie "zamknij" SerialPort nigdy nie uruchamia się

Informacje o pakiecie close zdarzenie here.

Stworzyłem ten kod, chciałbym wiedzieć, dlaczego close/disconnect wydarzenie nigdy ogień, kiedy odłączyć COM

const express = require('express'); 
const router = express.Router(); 
// 
const cors = require('cors'); 
router.use(cors()); 
// 
const SerialPort = require('serialport'); 
const Readline = SerialPort.parsers.Readline; 
const port = new SerialPort('COM7',function (err) { 
    if (err) { 
     return console.log('Error: ', err.message); 
    } 
}); 
const parser = port.pipe(new Readline()); 
/* 
var lastresult = ''; 
var count = 0; 
*/ 

port.on('open', function() { 
    console.log('~Port is open.'); 
    parser.on('data', console.log); 
}); 

port.on('disconnect', function() { 
    console.log('disconnected'); 
}); 
port.on('close', function() { 
    console.log('closed'); 
}); 

router.get('/', function (req, res) { 
    res.send('index'); 
}); 

module.exports = router; 

Staram się myśleć, jeśli mogę użyć to źle bo havn't zobaczyłem przykład użycia tego zdarzenia.

Dzięki za pomoc :)

+0

Czy próbowałeś nasłuchiwać zdarzenia '' error'', aby zobaczyć, czy coś tam się pojawi? – tiblu

+0

oczywiście, nic nie wyskakuje, jego praca dla ciebie? – itzikb

+0

Zobacz: https://stackoverflow.com/questions/13408476/detecting-when-a-serialport-gets-disconnected –

Odpowiedz

2

Stworzyłem timestamp każdym razem, gdy klient otrzyma dane z COM, i sprawdź to z interval() za każdym razem.

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);