Ana içeriğe atla

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ış

  1. Plato Konsolu bir PNG blobuna makbuz, bilet veya rapor işler.
  2. Konsol WIN_DRIVER bağdaştırıcısı görüntüyü siyah/beyaz tarama satırlarına dönüştürür.
  3. Raster satırları 128 satırlık parçalara bölünmüştür.
  4. Her parça bir ESC/POS raster komutu olarak kodlanır ve base64 olarak kodlanır.
  5. Konsol, ip_address, port ve chunks ile POST /print’yi gönderir.
  6. Sürücü parçaları küçük gecikmelerle sarar, besleme/kesme ekler ve isteğe bağlı olarak bip sesi komutları ekler.
  7. İş, söz konusu yazıcının BullMQ kuyruğuna eklenir.
  8. Çalışan yazıcıya bir TCP yuvası açar.
  9. Çalışan ESC/POS başlatmayı ve ardından her parçayı gönderir.
  10. İşçi işten sonra yazıcı bağlantısını kapatır.

Konsol Parçalama

Konsol adaptörü şunları kullanır:
AyarDeğer
Sürücü türüWIN_DRIVER
Raster yığın yüksekliği128 satırlar
Durum zaman aşımı3000ms
Yazdırma isteği zaman aşımı5000ms
Nakit çekmece zaman aşımı3000ms
Tarayıcı önceden kodlanmış tarama parçaları gönderir. Sürücü HTML oluşturmuyor.

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: 25 alır.
  • Bir besleme ve kısmi kesme komutu eklenir.
  • beep doğruysa 18 bip komutu eklenir.
  • Her bip sesi parçasında delayAfterMs: 150 bulunur.

ESC/POS Komutları

EmretmekBaytAmaç
Başlat1B 40Her 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.
Beslemek0A 0A 0A 0AKesmeden önce besleyin.
Kısmi kesimKodlayıcı tarafından oluşturulanKısmi kağıt kesiği.
Bip sesi1B 42 01 01Sürücü tarafından tekrarlanan bip komutu.
Yazar kasa çekmecesi1B 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ğerAmaç
OPEN_ATTEMPT_TIMEOUT_MS2000TCP soketini açmak için maksimum süre.
CONNECTION_COOLDOWN_MS250Başka bir açılmadan önce kapanıştan sonraki minimum gecikme.
CLOSE_TIMEOUT_MS250Max yok etmeden önce zarif bir şekilde kapanmayı bekle.
WRITE_TIMEOUT_MS6000Bir sokete yazma için maksimum süre.
Ayrıca 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:
  1. Yazıcı offline olarak işaretlenmiştir.
  2. Soket serbest bırakılır/yok edilir.
  3. BullMQ işi başarısız oluyor.
  4. BullMQ, queue.retryDelayMs’den sonra yeniden dener.
  5. Yazıcıya tekrar ulaşıldığında, gelecekteki bir runAt ile 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.