92 lines
2.7 KiB
JavaScript
92 lines
2.7 KiB
JavaScript
|
let SerialPort = require('serialport');
|
|||
|
let Readline = require('@serialport/parser-readline');
|
|||
|
let sp;
|
|||
|
var timer;
|
|||
|
// 建立webscoket连接
|
|||
|
var ws = require('nodejs-websocket');
|
|||
|
var server = ws.createServer(function(socket) {
|
|||
|
socket.on('text', function(str) { // 在控制台输出前端传来的消息
|
|||
|
console.log(str);
|
|||
|
});
|
|||
|
}).listen(3001);
|
|||
|
// 打开串口服务
|
|||
|
function opensp(oldsp, path, baudRate = 115200) {
|
|||
|
if (typeof oldsp != 'undefined') {
|
|||
|
if (oldsp.isOpen) {
|
|||
|
oldsp.close(function(err) {
|
|||
|
if (err) throw err;
|
|||
|
else {
|
|||
|
console.log('串口已经关闭');
|
|||
|
opensp(oldsp, path, (baudRate = 115200));
|
|||
|
}
|
|||
|
});
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 打开串口
|
|||
|
sp = new SerialPort(
|
|||
|
path, {
|
|||
|
baudRate: baudRate,
|
|||
|
autoOpen: false,
|
|||
|
},
|
|||
|
false
|
|||
|
);
|
|||
|
sp.open(function(err) {
|
|||
|
if (err) {
|
|||
|
console.log('串口打开失败: ' + err);
|
|||
|
return null;
|
|||
|
}
|
|||
|
// 清除定时器
|
|||
|
if (timer) {
|
|||
|
console.log('clear in timer')
|
|||
|
clearInterval(timer);
|
|||
|
timer = null;
|
|||
|
}
|
|||
|
const parser = sp.pipe(new Readline());
|
|||
|
parser.on('data', data => {
|
|||
|
// let matchRes = data.match(/UID:(\d*),ZID/);
|
|||
|
// if (matchRes) {
|
|||
|
// // logger.info('当前读取ID:' + matchRes[1]);
|
|||
|
// if (!timer) {
|
|||
|
// timer = setTimeout(() => {
|
|||
|
// mySocket.sendText(matchRes[1])
|
|||
|
// console.log(matchRes[1])
|
|||
|
// timer = null;
|
|||
|
// }, 1000)
|
|||
|
// }
|
|||
|
// return
|
|||
|
// }
|
|||
|
// 匹配信息字段
|
|||
|
if (!data.startsWith("#V10")) {
|
|||
|
return
|
|||
|
}
|
|||
|
let matchRes = data.match(/ID:(\d*)/);
|
|||
|
console.log(matchRes[1])
|
|||
|
// 建立webscoket连接情况下 发送消息
|
|||
|
if (server) {
|
|||
|
server.connections.forEach(socket => {
|
|||
|
socket.sendText(JSON.stringify({
|
|||
|
msg: Number(matchRes[1])
|
|||
|
}))
|
|||
|
})
|
|||
|
}
|
|||
|
});
|
|||
|
console.log('串口打开成功');
|
|||
|
|
|||
|
});
|
|||
|
|
|||
|
//错误监听
|
|||
|
sp.on('error', function(err) {
|
|||
|
console.log('error: ' + err);
|
|||
|
});
|
|||
|
// 串口连接关闭后的回调 拔插读卡器
|
|||
|
sp.on('close', info => {
|
|||
|
// 每隔1s 尝试重新建立串口连接服务
|
|||
|
timer = setInterval(() => {
|
|||
|
opensp(sp, 'COM3');
|
|||
|
}, 1000);
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
opensp(sp, 'COM3');
|