الانتقال إلى المحتوى الرئيسي

تدفق الطباعة

برنامج تشغيل الطابعة PC يعود عمداً بسرعة من /print. يحدث الإدخال/الإخراج الفعلي للطابعة في عامل الخلفية للطابعة المستهدفة.

التدفق من النهاية إلى النهاية

  1. تعرض وحدة التحكم Plato إيصالًا أو تذكرة أو تقريرًا إلى PNG blob.
  2. يقوم محول Console WIN_DRIVER بتحويل الصورة إلى صفوف نقطية باللون الأسود/الأبيض.
  3. يتم تقسيم الصفوف النقطية إلى أجزاء مكونة من 128 صفًا.
  4. يتم تشفير كل قطعة كأمر نقطي ESC/POS وترميز base64.
  5. ترسل وحدة التحكم POST /print مع ip_address وport وchunks.
  6. يقوم برنامج التشغيل بتغليف القطع بتأخيرات صغيرة، وإضافة التغذية/القص، وإضافة أوامر صوتية بشكل اختياري.
  7. تتم إضافة المهمة إلى قائمة انتظار BullMQ الخاصة بالطابعة.
  8. يقوم العامل بفتح مقبس TCP للطابعة.
  9. يرسل العامل تهيئة ESC/POS، ثم كل قطعة.
  10. يقوم العامل بإغلاق اتصال الطابعة بعد المهمة.

تقطيع وحدة التحكم

يستخدم محول وحدة التحكم:
جلسةقيمة
نوع السائقWIN_DRIVER
ارتفاع القطعة النقطيةصفوف 128
مهلة الحالة3000ms
مهلة طلب الطباعة5000ms
مهلة درج النقود3000ms
يرسل المتصفح قطعًا نقطية مشفرة بالفعل. لا يعرض برنامج التشغيل HTML.

التفاف قطعة السائق

يقوم receipt-encoder.ts بتحويل الأجزاء الواردة إلى أجزاء مهمة:
  • يتم فك تشفير كل قطعة واردة من base64.
  • تحصل كل قطعة طباعة على delayAfterMs: 25.
  • يتم إلحاق أمر التغذية والقطع الجزئي.
  • إذا كان beep صحيحًا، فسيتم إلحاق 18 أمرًا صوتيًا.
  • تحتوي كل قطعة صوتية على delayAfterMs: 150.

أوامر ESC/POS

يأمربايتغاية
تهيئة1B 40أعد ضبط الطابعة قبل كل مهمة.
الصورة النقطية1D 76 30 00 ...أرسلت بواسطة قطع وحدة التحكم.
يٌطعم0A 0A 0A 0Aإطعام قبل القطع.
قطع جزئيتم إنشاؤها بواسطة التشفيرقطع الورق الجزئي.
زمارة1B 42 01 01تكرار أمر الصفارة من قبل السائق.
درج النقود1B 70 00 19 FAنبض درج ركلة.

دورة حياة المقبس

يقوم العامل الحالي بفتح وإغلاق اتصال الطابعة لكل مهمة.
ثابتقيمةغاية
OPEN_ATTEMPT_TIMEOUT_MS2000الحد الأقصى للوقت لفتح مقبس TCP.
CONNECTION_COOLDOWN_MS250الحد الأدنى من التأخير بعد الإغلاق قبل فتح آخر.
CLOSE_TIMEOUT_MS250ماكس انتظر إغلاقًا رشيقًا قبل التدمير.
WRITE_TIMEOUT_MS6000أقصى وقت للكتابة بمقبس واحد.
يوجد أيضًا مؤقت تحرير خامل لـ 3000ms، لكن مسار العملية الحالي يغلق الاتصال فورًا بعد كل مهمة ناجحة.

مسار الفشل

في حالة فشل الفتح أو الكتابة:
  1. تم وضع علامة offline على الطابعة.
  2. تم تحرير/تدمير المقبس.
  3. فشلت مهمة BullMQ.
  4. يقوم BullMQ بإعادة المحاولة بعد queue.retryDelayMs.
  5. عند الوصول إلى الطابعة مرة أخرى، يتم ترقية مهام إعادة المحاولة المؤجلة ما لم يتم جدولتها بشكل مقصود مع runAt في المستقبل.

فحص الحالة

يمكن لـ POST /status فحص الطابعة فقط عندما لا يكون عمل قائمة الانتظار نشطًا. يؤدي ذلك إلى تجنب فتح مقبس المسبار أثناء انشغال الطابعة نفسها بالطباعة.