Conexión y recuperación con serial-core
JSD usa serial-core@^0.3.0 para la sesión y serialport@^13 para el acceso nativo al equipo. Instálalos como dependencias de ejecución en tu aplicación. Los configuras desde JSD; no necesitas modificar ninguna biblioteca.
Configurar recuperación en tu aplicación
import { JSD } from '@danidoble/serial-node-jsd';
const jsd = new JSD({
baudRate: 9600,
vendorId: '0403',
productId: '6001',
serialNumber: 'YOUR-UNIT-SERIAL',
autoConnect: false,
autoReconnect: true,
reconnectInterval: 1_000,
reconnectBackoffFactor: 2,
maxReconnectInterval: 10_000,
maxReconnectAttempts: 5,
writeTimeout: 3_000,
maxQueueSize: 100
});
jsd.on('serial:reconnecting', ({ attempt, delay }) => {
console.log(`Reintento ${attempt} programado en ${delay} ms`);
});
jsd.on('serial:reconnectFailed', ({ attempts }) => {
console.error(`Recuperación detenida tras ${attempts} reintentos`);
});
jsd.on('serial:error', error => console.error(error.message));
jsd.start();Omite path si seleccionas por identidad USB. Los identificadores normalizados y la serie deben coincidir exactamente. Una ruta fija tiene prioridad sobre los selectores.
Encontrar un puerto antes de conectar
const ports = await JSD.listPorts({ vendorId: '0403', availableOnly: true });
console.table(ports);listPorts() y findPorts() existen como métodos estáticos y de instancia. Enumeran metadatos sin abrir equipos; los filtros se combinan con AND. availableOnly comprueba reservas locales de la biblioteca, no de todo el sistema. Los errores de enumeración rechazan; sin coincidencias se devuelve [].
Qué ocurre al interrumpirse una sesión
serial:connectedindica sesión verificada, después de abrir y completar handshake.serial:reconnectingindica número de reintento desde uno y espera limitada.serial:reconnectFailedindica que se agotó el presupuesto de recuperación.- Los comandos pendientes se descartan al terminar la sesión; no se reproducen.
- Registros, asignaciones, carritos y dispensas pendientes rechazan y liberan temporizadores.
- Se invalida la disponibilidad almacenada. Consulta el estado de nuevo antes de dispensar.
stop()termina la recuperación y espera el cierre; captura su rechazo si no logra cerrar.
Un dispensado rechazado no demuestra que la máquina no hizo nada. Confirma su estado antes de decidir si repetir una operación física.
Parsers y plazos
JSD proporciona un parser delimitador nuevo por sesión. Puedes usar parserFactory para uno propio o un parser compartido, pero no ambos. Se conserva el objeto de configuración recibido.
writeTimeout limita la escritura y el drain físicos. La espera de ACK JSD empieza después de escribir correctamente y es distinta del tiempo de respuesta de core. Establece plazos de aplicación para operaciones que puedan quedar pendientes si el equipo sigue conectado pero no completa su respuesta.
Consulta toda la configuración, el ejemplo completo y manejo de fallos.