|
const SerialPort = require('serialport');
|
|
// 设置重连间隔和最大重试次数
|
const RECONNECT_INTERVAL = 10000; // 重连间隔10秒
|
const MAX_RECONNECT_ATTEMPTS = 10; // 最大重试次数10次
|
|
let reconnectAttempts = 0; // 当前重试次数
|
let serialPort:any; // 串口实例
|
|
const initPort=(portName:string,baudRate:Number)=>{
|
if (reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) {
|
console.error('重试次数达到上限,不再尝试重连。');
|
return;
|
}
|
|
if (serialPort && serialPort.isOpen) {
|
console.log('串口已打开,不再重复打开。');
|
return;
|
}
|
|
try {
|
serialPort = new SerialPort(portName,baudRate, { autoOpen: false }); // 创建串口实例
|
|
serialPort.open((err:any) => {
|
if (err) {
|
console.error('串口打开失败:', err.message);
|
setTimeout(initPort, RECONNECT_INTERVAL, portName);
|
reconnectAttempts++;
|
return;
|
}
|
|
console.log('串口已成功打开。');
|
reconnectAttempts = 0; // 重置重试次数
|
|
// 这里可以添加数据接收处理逻辑
|
serialPort.on('data', (data:any) => {
|
console.log('接收到数据:', data);
|
});
|
|
// 处理错误
|
serialPort.on('error', (error:any) => {
|
console.error('发生错误:', error.message);
|
serialPort.close(); // 关闭串口
|
setTimeout(connectSerialPort, RECONNECT_INTERVAL, portName); // 重连
|
});
|
|
// 处理关闭事件
|
serialPort.on('close', () => {
|
console.log('串口已关闭,将在5秒后尝试重新连接。');
|
setTimeout(initPort, RECONNECT_INTERVAL, portName); // 重连
|
});
|
});
|
} catch (error) {
|
console.error('无法创建串口实例:', error.message);
|
setTimeout(initPort, RECONNECT_INTERVAL, portName);
|
}
|
}
|
|
// 调用connectSerialPort函数尝试连接串口,例如:
|
// connectSerialPort('/dev/ttyUSB0');
|