Yazdırma Akışı
PC yazıcı sürücüsü kasıtlı olarak/print’den hızlı bir şekilde geri dönüyor. Gerçek yazıcı G/Ç’si, hedef yazıcının arka plan çalışanında gerçekleşir.
Uçtan Uca Akış
- Plato Konsolu bir PNG blobuna makbuz, bilet veya rapor işler.
- Konsol
WIN_DRIVERbağdaştırıcısı görüntüyü siyah/beyaz tarama satırlarına dönüştürür. - Raster satırları 128 satırlık parçalara bölünmüştür.
- Her parça bir ESC/POS raster komutu olarak kodlanır ve base64 olarak kodlanır.
- Konsol,
ip_address,portvechunksilePOST /print’yi gönderir. - Sürücü parçaları küçük gecikmelerle sarar, besleme/kesme ekler ve isteğe bağlı olarak bip sesi komutları ekler.
- İş, söz konusu yazıcının BullMQ kuyruğuna eklenir.
- Çalışan yazıcıya bir TCP yuvası açar.
- Çalışan ESC/POS başlatmayı ve ardından her parçayı gönderir.
- İşçi işten sonra yazıcı bağlantısını kapatır.
Konsol Parçalama
Konsol adaptörü şunları kullanır:| Ayar | Değer |
|---|---|
| Sürücü türü | WIN_DRIVER |
| Raster yığın yüksekliği | 128 satırlar |
| Durum zaman aşımı | 3000ms |
| Yazdırma isteği zaman aşımı | 5000ms |
| Nakit çekmece zaman aşımı | 3000ms |
Sürücü Parçası Sarma
receipt-encoder.ts, gelen parçaları iş parçalarına dönüştürür:
- Gelen her parçanın kodu base64’ten çözülür.
- Her yazdırma parçası
delayAfterMs: 25alır. - Bir besleme ve kısmi kesme komutu eklenir.
beepdoğruysa 18 bip komutu eklenir.- Her bip sesi parçasında
delayAfterMs: 150bulunur.
ESC/POS Komutları
| Emretmek | Bayt | Amaç |
|---|---|---|
| Başlat | 1B 40 | Her işten önce yazıcıyı sıfırlayın. |
| Taramalı görüntü | 1D 76 30 00 ... | Konsol parçaları tarafından gönderildi. |
| Beslemek | 0A 0A 0A 0A | Kesmeden önce besleyin. |
| Kısmi kesim | Kodlayıcı tarafından oluşturulan | Kısmi kağıt kesiği. |
| Bip sesi | 1B 42 01 01 | Sürücü tarafından tekrarlanan bip komutu. |
| Yazar kasa çekmecesi | 1B 70 00 19 FA | Çekmece darbesini vurun. |
Soket Yaşam Döngüsü
Geçerli çalışan her iş için yazıcı bağlantısını açar ve kapatır.| Devamlı | Değer | Amaç |
|---|---|---|
OPEN_ATTEMPT_TIMEOUT_MS | 2000 | TCP soketini açmak için maksimum süre. |
CONNECTION_COOLDOWN_MS | 250 | Başka bir açılmadan önce kapanıştan sonraki minimum gecikme. |
CLOSE_TIMEOUT_MS | 250 | Max yok etmeden önce zarif bir şekilde kapanmayı bekle. |
WRITE_TIMEOUT_MS | 6000 | Bir sokete yazma için maksimum süre. |
3000ms’nin boşta bırakma zamanlayıcısı da vardır, ancak mevcut süreç yolu, her başarılı işin hemen ardından bağlantıyı kapatır.
Arıza Yolu
Açma veya yazma başarısız olursa:- Yazıcı
offlineolarak işaretlenmiştir. - Soket serbest bırakılır/yok edilir.
- BullMQ işi başarısız oluyor.
- BullMQ,
queue.retryDelayMs’den sonra yeniden dener. - Yazıcıya tekrar ulaşıldığında, gelecekteki bir
runAtile kasıtlı olarak planlanmadıkları sürece, gecikmeli yeniden deneme işleri yükseltilir.
Durum Araştırması
POST /status yazıcıyı yalnızca kuyruk çalışması etkin olmadığında araştırabilir. Bu, aynı yazıcı yazdırma işlemiyle meşgulken prob yuvasının açılmasını önler.