Flux d’impression
Le pilote d’imprimante PC revient intentionnellement rapidement de/print. Les E/S réelles de l’imprimante se produisent dans le programme de travail en arrière-plan de l’imprimante cible.
Flux de bout en bout
- La console Plato génère un reçu, un ticket ou un rapport dans un blob PNG.
- L’adaptateur Console
WIN_DRIVERconvertit l’image en lignes raster noir/blanc. - Les lignes raster sont divisées en morceaux de 128 lignes.
- Chaque morceau est codé en tant que commande raster ESC/POS et codé en base64.
- La console envoie
POST /printavecip_address,portetchunks. - Le pilote encapsule les morceaux avec de petits délais, ajoute l’alimentation/la coupe et ajoute éventuellement des commandes sonores.
- Le travail est ajouté à la file d’attente BullMQ de cette imprimante.
- Le travailleur ouvre un socket TCP sur l’imprimante.
- Le travailleur envoie l’initialisation ESC/POS, puis chaque morceau.
- Le travailleur ferme la connexion de l’imprimante après le travail.
Blocage de la console
L’adaptateur de console utilise :| Paramètre | Valeur |
|---|---|
| Type de pilote | WIN_DRIVER |
| Hauteur des fragments raster | Lignes 128 |
| Délai d’expiration du statut | 3000ms |
| Expiration du délai de demande d’impression | 5000ms |
| Expiration du délai du tiroir-caisse | 3000ms |
Emballage de fragments de pilotes
receipt-encoder.ts transforme les blocs entrants en blocs de tâches :
- Chaque morceau entrant est décodé en base64.
- Chaque morceau d’impression obtient
delayAfterMs: 25. - Une commande d’avance et de coupe partielle est annexée.
- Si
beepest vrai, 18 commandes sonores sont ajoutées. - Chaque morceau de bip a
delayAfterMs: 150.
Commandes ESC/POS
| Commande | Octets | But |
|---|---|---|
| Initialiser | 1B 40 | Réinitialisez l’imprimante avant chaque tâche. |
| Image rastée | 1D 76 30 00 ... | Envoyé par des morceaux de console. |
| Alimentation | 0A 0A 0A 0A | Nourrir avant de couper. |
| Coupe partielle | Généré par l’encodeur | Papier découpé partiellement. |
| Bip | 1B 42 01 01 | Commande bip répétée par le conducteur. |
| Tiroir-caisse | 1B 70 00 19 FA | Impulsion du tiroir. |
Cycle de vie des sockets
Le travailleur actuel ouvre et ferme la connexion de l’imprimante pour chaque tâche.| Constante | Valeur | But |
|---|---|---|
OPEN_ATTEMPT_TIMEOUT_MS | 2000 | Temps maximum pour ouvrir le socket TCP. |
CONNECTION_COOLDOWN_MS | 250 | Délai minimum après la fermeture avant une autre ouverture. |
CLOSE_TIMEOUT_MS | 250 | Max attend une fermeture gracieuse avant de détruire. |
WRITE_TIMEOUT_MS | 6000 | Temps maximum pour une écriture sur une socket. |
3000ms, mais le chemin de processus actuel ferme la connexion immédiatement après chaque tâche réussie.
Chemin d’échec
Si l’ouverture ou l’écriture échoue :- L’imprimante est marquée
offline. - La douille est libérée/détruite.
- Le travail BullMQ échoue.
- BullMQ réessaye après
queue.retryDelayMs. - Lorsque l’imprimante est à nouveau atteinte, les travaux de nouvelle tentative différée sont promus, à moins qu’ils ne soient intentionnellement planifiés avec un futur
runAt.
Sondage d’état
POST /status peut sonder l’imprimante uniquement lorsque le travail en file d’attente n’est pas actif. Cela évite d’ouvrir une prise de sonde alors que la même imprimante est en train d’imprimer.