تدفق الطباعة
برنامج تشغيل الطابعة PC يعود عمداً بسرعة من/print. يحدث الإدخال/الإخراج الفعلي للطابعة في عامل الخلفية للطابعة المستهدفة.
التدفق من النهاية إلى النهاية
- تعرض وحدة التحكم Plato إيصالًا أو تذكرة أو تقريرًا إلى PNG blob.
- يقوم محول Console
WIN_DRIVERبتحويل الصورة إلى صفوف نقطية باللون الأسود/الأبيض. - يتم تقسيم الصفوف النقطية إلى أجزاء مكونة من 128 صفًا.
- يتم تشفير كل قطعة كأمر نقطي ESC/POS وترميز base64.
- ترسل وحدة التحكم
POST /printمعip_addressوportوchunks. - يقوم برنامج التشغيل بتغليف القطع بتأخيرات صغيرة، وإضافة التغذية/القص، وإضافة أوامر صوتية بشكل اختياري.
- تتم إضافة المهمة إلى قائمة انتظار BullMQ الخاصة بالطابعة.
- يقوم العامل بفتح مقبس TCP للطابعة.
- يرسل العامل تهيئة ESC/POS، ثم كل قطعة.
- يقوم العامل بإغلاق اتصال الطابعة بعد المهمة.
تقطيع وحدة التحكم
يستخدم محول وحدة التحكم:| جلسة | قيمة |
|---|---|
| نوع السائق | WIN_DRIVER |
| ارتفاع القطعة النقطية | صفوف 128 |
| مهلة الحالة | 3000ms |
| مهلة طلب الطباعة | 5000ms |
| مهلة درج النقود | 3000ms |
التفاف قطعة السائق
يقوم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_MS | 2000 | الحد الأقصى للوقت لفتح مقبس TCP. |
CONNECTION_COOLDOWN_MS | 250 | الحد الأدنى من التأخير بعد الإغلاق قبل فتح آخر. |
CLOSE_TIMEOUT_MS | 250 | ماكس انتظر إغلاقًا رشيقًا قبل التدمير. |
WRITE_TIMEOUT_MS | 6000 | أقصى وقت للكتابة بمقبس واحد. |
3000ms، لكن مسار العملية الحالي يغلق الاتصال فورًا بعد كل مهمة ناجحة.
مسار الفشل
في حالة فشل الفتح أو الكتابة:- تم وضع علامة
offlineعلى الطابعة. - تم تحرير/تدمير المقبس.
- فشلت مهمة BullMQ.
- يقوم BullMQ بإعادة المحاولة بعد
queue.retryDelayMs. - عند الوصول إلى الطابعة مرة أخرى، يتم ترقية مهام إعادة المحاولة المؤجلة ما لم يتم جدولتها بشكل مقصود مع
runAtفي المستقبل.
فحص الحالة
يمكن لـPOST /status فحص الطابعة فقط عندما لا يكون عمل قائمة الانتظار نشطًا. يؤدي ذلك إلى تجنب فتح مقبس المسبار أثناء انشغال الطابعة نفسها بالطباعة.