بروتوكول esc pos. ما هو مخفي داخل سجلات النقد عبر الإنترنت: تطوير المسجل المالي. التشريع: الرقابة العالمية على الإنترنت لسجلات النقد

09.02.2022

يعد ESC * واحدًا من عدة أوامر "بت الصورة" في ESC/POS. ويقبل بيانات "تنسيق العمود"، والتي يمكن أن تمثل صفًا واحدًا فقط يتكون من 8 أو 24 بكسل. لذلك هناك خياران جيدان هنا.

طباعة أسطر متعددة باستخدام ESC*

يبدو أنه يمكنك طباعة سطر واحد، لذلك سأفترض أن تنسيق البيانات نفسه ليس هو المشكلة.

يمكنك طباعة أسطر متعددة بمجرد تكرار الأمر لطباعة أسطر إضافية مفصولة بفواصل الأسطر \n. يتطلب ذلك تقطيع الصورة وحشوها بمساحة بحيث يكون ارتفاعها مضاعفًا لـ 8 أو 24 بكسل (مرة أخرى، بسبب التنسيق).

بسبب تباعد الأسطر، تحتاج إلى إصدار أمر لتغيير حجم القنوات الخطية أثناء طباعة الصورة، ثم أمر آخر لإعادة ضبطها في النهاية.

أستخدم ESC 3 0x10 لـ 16 خط قناة (بايت 0x1b 0x33 0x10) وESC 2 (بايت 0x1b 0x32) لإعادة التعيين.

تتميز طريقة الطباعة هذه بتوافق ممتاز مع الطابعات القديمة، ولكن قد ينتهي بك الأمر إلى ظهور بعض الخطوط الأفقية الرفيعة في الإخراج.

اطبع الصورة بأكملها باستخدام GS v 0

يقبل هذا الجزء من أمر الصورة بيانات "التنسيق النقطي" المتنوعة. أنا أستفيد من حقيقة أن النقطة في هذا التنسيق مطابقة للبيانات الثنائية في تنسيق الصورة النقطية PBM المستخدم على نطاق واسع (على وجه التحديد البيانات الثنائية في ملفات رأس P4).

سيكون ارتفاع الصورة محدودًا وفقًا لحجم المخزن المؤقت للطباعة، ولكن يمكن أن يصل إلى 65535 بكسل. بسبب التمثيل، يجب أن يكون العرض قابلاً للقسمة على 8.

ESC/POS هي مجموعة الأوامر التي تجعل طابعات الإيصالات تطبع

مقدمة

قبل أن نبدأ، هناك ثلاثة أشياء تحتاج إلى معرفتها حول ESC/POS:

  1. تدعمها معظم طابعات الإيصالات الحديثة بشكل ما.
  2. انها ميتة بسيطة في الكتابة.
  3. تبدأ الأوامر بحرف ESC (ASCII 27).

وبالمناسبة، فإن الإيصال المطبوع في الفيديو أعلاه هو مثال من مستودع escpos-php. سأتناول هذه النسخة المطبوعة، لأنها توضح جميع ميزات ESC/POS الأساسية.

هيكل القيادة

تظهر أربعة أحرف ASCII محددة في تسلسل الأوامر-

اختصار اسم الكود (ست عشري)
NUL باطل 0x00
LF تغذية الخط 0x0أ
خروج يهرب 0x1B
جي إس. فاصل المجموعة 0x1D

يتم ببساطة إرسال النص العادي إلى الطابعة، مفصولاً بفواصل الأسطر. تبدأ الأوامر بـ ESC أو GS، ويتبعها حرف قابل للطباعة، وأحيانًا بعض الأرقام

يتم تمرير الأرقام ببساطة كحرف. على سبيل المثال، يتم تمرير '5' كـ 0x05.

أمثلة

التهيئة

عند الاتصال بالطابعة لأول مرة، يجب عليك تهيئتها. يعود هذا إلى التنسيق الافتراضي، بدلاً من الخط المزدوج الذي تحته خط ثلاثي والذي ربما كانت النسخة المطبوعة السابقة تستخدمه.

أمر إعادة ضبط التنسيق هو:

يتطلب __DIR__ . "/autoload.php"; استخدم Mike42\Escpos\Printer; استخدم Mike42\Escpos\PrintConnectors\FilePrintConnector؛ $connector = new FilePrintConnector("/dev/usb/lp0"); $printer = طابعة جديدة($connector); طابعة $ -> إغلاق ()؛

000000001ب40|.@| 00000003

نص "مرحبا بالعالم".

هذا هو أبسط نوع من الإيصالات، ويحتوي فقط على نص غير منسق.

يتم إرسال النص ببساطة إلى الطابعة، مفصولاً بخلاصات الأسطر.

يتطلب __DIR__ . "/autoload.php"; استخدم Mike42\Escpos\Printer; استخدم Mike42\Escpos\PrintConnectors\FilePrintConnector؛ $connector = new FilePrintConnector("/dev/usb/lp0"); $printer = طابعة جديدة($connector); /* نص */ $printer -> text("Hello World\n"); طابعة $ -> قطع ()؛ طابعة $ -> إغلاق ()؛

00000000 1b 40 48 65 6c 6c 6f 20 77 6f 72 6c 64 0a 1d 56 |.@Hello World..V| 00000010 41 03 |أ.| 00000012

يغذي الخط

يمكن للطابعة تخطي عدد معين من الأسطر بسرعة باستخدام هذا الأمر.

الأوامر هي:

LF
ESCd[رقم]
ESC v[الرقم]

يتغذى الأمر الأول للأمام، والثاني للخلف. من المثال، يمكن ملاحظة أن الطابعة التجريبية لا تدعم التغذية العكسية للورق.

Require_once(dirname(__FILE__) . "/escpos-php/Escpos.php"); $printer = new Escpos(); /* تغذية الأسطر */ $printer -> text("ABC"); طابعة $ -> تغذية (7)؛ $printer -> text("DEF"); $printer -> FeedReverse(3); $printer -> text("GHI"); طابعة $ -> تغذية ()؛ طابعة $ -> قطع ()؛ طابعة $ -> إغلاق ()؛

00000000 1ب 40 41 42 43 1ب 64 07 44 45 46 1ب 65 03 47 48 | [البريد الإلكتروني محمي]| 00000010 49 0a 1d 56 41 03 |I..VA.| 00000016

أوضاع الطباعة

تتضمن أوضاع الطباعة ارتفاع الخط وعرضه وجرأةه في سمة واحدة.

الأمر هو:

يتم إنشاء أوضاع الخطوط من خلال تجميع مجموعة مختارة من السمات بشكل منطقي. 0 يمثل خطة الخط النص. أعلام الوضع هي:

وضع رقم
الخط A (بدون وضع) 0
الخط ب 1
أكد 8
ارتفاع مزدوج 16
عرض مزدوج 32
تسطير 128

يوضح نموذج الإيصال تأثير كل علامة.

يتطلب __DIR__ . "/autoload.php"; استخدم Mike42\Escpos\Printer; استخدم Mike42\Escpos\PrintConnectors\FilePrintConnector؛ $connector = new FilePrintConnector("/dev/usb/lp0"); $printer = طابعة جديدة($connector); /* أوضاع الخط */ $modes = array(Printer:::MODE_FONT_A, Printer:::MODE_FONT_B, Printer:::MODE_EMPHASIZED, Printer:::MODE_DOUBLE_HEIGHT, Printer:::MODE_DOUBLE_WIDTH, Printer:::MODE_UNDERLINE); ل($i = 0; $i< 2 ** count($modes); $i++) { $bits = str_pad(decbin($i), count($modes), "0", STR_PAD_LEFT); $mode = 0; for($j = 0; $j < strlen($bits); $j++) { if(substr($bits, $j, 1) == "1") { $mode |= $modes[$j]; } } $printer ->تحديدPrintMode($mode);

00000000 1b 40 1b 21 00 41 42 43 44 45 46 47 48 49 4a 61 |.@.!.ABCDEFGHIJa| 00000010 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 80 41 42 |bcdefghijk..!.AB| 00000020 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 |CDEFGHIJabcdefgh| 00000030 69 6a 6b 0a 1b 21 20 41 42 43 44 45 46 47 48 49 |ijk..! ABCDEFGHI| 00000040 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 a0 |Jabcdefghijk..!.| 00000050 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 |ABCDEFGHIJabcdef| 00000060 67 68 69 6a 6b 0a 1b 21 10 41 42 43 44 45 46 47 |ghijk..!.ABCDEFG| 00000070 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b |HIJabcdefghijk..| 00000080 21 90 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 |!.ABCDEFGHIJabcd| 00000090 65 66 67 68 69 6a 6b 0a 1b 21 30 41 42 43 44 45 |efghijk..!0ABCDE| 000000a0 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b |FGHIJabcdefghijk| 000000b0 0a 1b 21 b0 41 42 43 44 45 46 47 48 49 4a 61 62 |..!.ABCDEFGHIJab| 000000c0 63 64 65 66 67 68 69 6a 6b 0a 1b 21 08 41 42 43 |cdefghijk..!.ABC| 000000d0 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 |DEFGHIJabcdefghi| 000000e0 6a 6b 0a 1b 21 88 41 42 43 44 45 46 47 48 49 4a |jk..!.ABCDEFGHIJ| 000000f0 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 28 41 |abcdefghijk..!(أ| 00000100 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 6 67 |BCDEFGHIJabcdefg|.00000110 68 69 6أ 6ب 0a 1b 21 a8 41 42 43 44 45 46 47 48 |hijk..!.ABCDEFGH| 00000120 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 |IJabcdefghijk..!| 30 18 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 |.ABCDEFGHIJabcde| 00000140 66 67 68 69 6a 6b 0a 1b 21 98 41 42 43 44 45 46 |fghijk..!.ABCDEF| 47 48 49 4أ 61 62 63 64 65 66 67 68 69 6a 6b 0a |GHIJabcdefghijk.|.00000160 1b 21 38 41 42 43 44 45 46 47 48 49 4a 61 62 63 |.!8ABCDEFGHIJabc| 41 42 43 44 |.ديفغيجك..!.ABCD |. 4a 61 |ك..!. ABCDEFGHIJa|000001a0 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 81 41 42 |bcdefghijk..!.AB| 000001b0 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 |CDEFGHIJabcdefgh| 00001c0 69 6أ 6ب 0أ 1ب 21 21 41 42 43 44 45 46 47 48 49 |ijk..!!ABCDEFGHI| 000001d0 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 a1 |Jabcdefghijk..!.| 000001e0 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 |ABCDEFGHIJabcdef| 000001f0 67 68 69 6a 6b 0a 1b 21 11 41 42 43 44 45 46 47 |ghijk..!.ABCDEFG| 00000200 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b |HIJabcdefghijk. .| 00000210 21 91 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 |!.ABCDEFGHIJabcd| 00000220 65 66 67 68 69 6a 6b 0a 1b 21 31 41 42 43 44 45 |efghijk..!1ABCDE| 00000230 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b |FGHIJabcdefghijk| 00000240 0a 1b 21 b1 41 42 43 44 45 46 47 48 49 4a 61 62 |..!.ABCDEFGHIJab| 00000250 63 64 65 66 67 68 69 6a 6b 0a 1b 21 09 41 42 43 |cdefghijk..!.ABC| 00000260 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 |DEFGHIJabcdefghi| 00000270 6a 6b 0a 1b 21 89 41 42 43 44 45 46 47 48 49 4a |jk..!.ABCDEFGHIJ| 00000280 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 29 41 |abcdefghijk..!)A| 00000290 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 |BCDEFGHIJabcdefg| 000002a0 68 69 6a 6b 0a 1b 21 a9 41 42 43 44 45 46 47 48 |هيجك..!.ABCDEFGH| 000002b0 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 |IJabcdefghijk..!| 000002c0 19 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 |.ABCDEFGHIJabcde| 000002d0 66 67 68 69 6a 6b 0a 1b 21 99 41 42 43 44 45 46 |fghijk..!.ABCDEF| 000002e0 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a |GHIJabcdefghijk.| 000002f0 1b 21 39 41 42 43 44 45 46 47 48 49 4a 61 62 63 |.!9ABCDEFGHIJabc| 00000300 64 65 66 67 68 69 6a 6b 0a 1b 21 b9 41 42 43 44 |defghijk..!.ABCD| 00000310 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a |EFGHIJabcdefghij| 00000320 6b 0a 1b 21 00 41 42 43 44 45 46 47 48 49 4a 61 |k..!.ABCDEFGHIJa| 00000330 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 80 41 42 |bcdefghijk..!.AB| 00000340 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 |CDEFGHIJabcdefgh| 00000350 69 6a 6b 0a 1b 21 20 41 42 43 44 45 46 47 48 49 |ijk..! ABCDEFGHI| 00000360 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 a0 |Jabcdefghijk..!.| 00000370 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 |ABCDEFGHIJabcdef| 00000380 67 68 69 6a 6b 0a 1b 21 10 41 42 43 44 45 46 47 |ghijk..!.ABCDEFG| 00000390 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b |HIJabcdefghijk..| 000003a0 21 90 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 |!.ABCDEFGHIJabcd| 000003b0 65 66 67 68 69 6a 6b 0a 1b 21 30 41 42 43 44 45 |efghijk..!0ABCDE| 000003c0 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b |FGHIJabcdefghijk| 000003d0 0a 1b 21 b0 41 42 43 44 45 46 47 48 49 4a 61 62 |..!.ABCDEFGHIJab| 000003e0 63 64 65 66 67 68 69 6a 6b 0a 1b 21 08 41 42 43 |cdefghijk..!.ABC| 000003f0 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 |DEFGHIJabcdefghi| 00000400 6a 6b 0a 1b 21 88 41 42 43 44 45 46 47 48 49 4a |jk..!.ABCDEFGHIJ| 00000410 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 28 41 |abcdefghijk. .!(أ| 00000420 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 |BCDEFGHIJabcdefg| 00000430 68 69 6a 6b 0a 1b 21 a8 41 42 43 44 45 46 47 48 |هيجك..!.ABCDEFGH| 00000440 49 4أ 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 |IJabcdefghijk..!| 00000450 18 41 42 43 44 45 46 47 48 49 4a 61 62 63 6 4 65 |.ABCDEFGHIJabcde|.00000460 66 67 68 69 6a 6b 0a 1b 21 98 41 42 43 44 45 46 |fghijk..!.ABCDEF| 00000470 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a |GHIJabcdefghijk.| 1ب 21 38 41 42 43 44 45 46 47 48 49 4a 61 62 63 |.!8ABCDEFGHIJabc| 64 65 66 67 68 69 6a 6b 0a 1b 21 b8 41 42 43 44 |defghijk..!.ABCD| 000004a0 45 46 4 7 4 8 49 4أ 61 62 63 64 65 66 67 68 69 6a |EFGHIJabcdefghij| 000004b0 6b 0a 1b 21 01 41 42 43 44 45 46 47 48 49 4a 61 |k..!.ABCDEFGHIJa| 62 63 64 65 6 6 67 6 8 69 6 أ 6 ب 0 أ 1 ب 21 81 41 42 |.bcdefghijk..!.AB|.000004d0 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 |CDEFGHIJabcdefgh| 45 46 47 48 49 |ijk..!! f0 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 a1 |Jabcdefghijk..!.| 00000500 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 |ABCDEFGHIJabcdef| 00000510 67 68 69 6a 6b 0a 1b 21 11 41 42 43 44 45 46 47 |ghijk..!.ABCDEFG| 00000520 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b |HIJabcdefghijk..| 00000530 21 91 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 |!.ABCDEFGHIJabcd| 00000540 65 66 67 68 69 6a 6b 0a 1b 21 31 41 42 43 44 45 |efghijk..!1ABCDE| 00000550 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b |FGHIJabcdefghijk| 00000560 0a 1b 21 b1 41 42 43 44 45 46 47 48 49 4a 61 62 |..!.ABCDEFGHIJab| 00000570 63 64 65 66 67 68 69 6a 6b 0a 1b 21 09 41 42 43 |cdefghijk..!.ABC| 00000580 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 |DEFGHIJabcdefghi| 00000590 6a 6b 0a 1b 21 89 41 42 43 44 45 46 47 48 49 4a |jk..!.ABCDEFGHIJ| 000005a0 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 29 41 |abcdefghijk..!)A| 000005b0 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 66 67 |BCDEFGHIJabcdefg| 000005c0 68 69 6a 6b 0a 1b 21 a9 41 42 43 44 45 46 47 48 |hijk..!.ABCDEFGH| 000005d0 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a 1b 21 |IJabcdefghijk..!| 000005e0 19 41 42 43 44 45 46 47 48 49 4a 61 62 63 64 65 |.ABCDEFGHIJabcde| 000005f0 66 67 68 69 6a 6b 0a 1b 21 99 41 42 43 44 45 46 |fghijk..!.ABCDEF| 00000600 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a 6b 0a |GHIJabcdefghijk.| 00000610 1b 21 39 41 42 43 44 45 46 47 48 49 4a 61 62 63 |.!9ABCDEFGHIJabc| 00000620 64 65 66 67 68 69 6a 6b 0a 1b 21 b9 41 42 43 44 |defghijk. .!.ABCD| 00000630 45 46 47 48 49 4a 61 62 63 64 65 66 67 68 69 6a |EFGHIJabcdefghij| 00000640 6b 0a 1b 21 00 1d 56 41 03 |k..!..VA.| 00000649

$printer -> text("ABCDEFGHIJabcdefghijk\n"); ) $printer -> SelectPrintMode(); // إعادة تعيين الطابعة $ -> قطع ()؛ طابعة $ -> إغلاق ()؛

الأمر هو:

تسطير

ESC – [الرقم]

يتم تعيين الوسيطة على 0 لعدم التسطير، و1 للتسطير، و2 للتسطير الثقيل.< 3; $i++) { $printer ->يتطلب __DIR__ . "/autoload.php"; استخدم Mike42\Escpos\Printer; استخدم Mike42\Escpos\PrintConnectors\FilePrintConnector؛ $connector = new FilePrintConnector("/dev/usb/lp0"); $printer = طابعة جديدة($connector); /* تسطير */ for($i = 0; $i

setUnderline($i); [البريد الإلكتروني محمي]$printer -> text("الثعلب البني السريع يقفز فوق الكلب الكسول\n"); ) $printer -> setUnderline(0); // إعادة تعيين الطابعة $ -> قطع ()؛ طابعة $ -> إغلاق ()؛

00000000 1ب 40 1ب 2د 00 54 68 65 20 71 75 69 63 6ب 20 62 |

الأمر هو:

سريع ب| 00000010 72 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f |الثعلب الأصفر يقفز o| 00000020 76 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 |ver the Lazy Dog| 00000030 0a 1b 2d 01 54 68 65 20 71 75 69 63 6b 20 62 72 |..-.السريع br| 00000040 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 |الثعلب الخاص يقفز على| 00000050 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a |إيه الكلب الكسول.| 00000060 1b 2d 02 54 68 65 20 71 75 69 63 6b 20 62 72 6f |.-.السريع يا أخي| 00000070 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 65 |الثعلب يقفز فوق| 00000080 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a 1b |r الكلب الكسول..| 00000090 2d 00 1d 56 41 03 |-..VA.| 00000096

تخفيضات

ESC الخامس [العدد]< 5; $i++) { $printer ->يبدو أن الحجة تمثل ما إذا كان سيتم إجراء قطع "جزئي" (65) أو "كامل" (66)، ولكن ليس له أي تأثير على طراز الطابعة الخاصة بي.

يتطلب __DIR__ . "/autoload.php"; استخدم Mike42\Escpos\Printer; استخدم Mike42\Escpos\PrintConnectors\FilePrintConnector؛ $connector = new FilePrintConnector("/dev/usb/lp0"); $printer = طابعة جديدة($connector); /* القطع */ for($i = 0; $i [البريد الإلكتروني محمي]| 00000010 41 03 1d 56 42 03 1d 56 41 03 1d 56 42 03 1d 56 |A..VB..VA..VB..V| 00000020 41 03 1d 56 42 03 1d 56 41 03 1d 56 41 03 |A..VB..VA..VA.| 0000002ه

توكيد

الأمر هو:

ESC E [الرقم]

استخدم 1 لتمكين التركيز، و0 لتعطيله.

يتطلب __DIR__ . "/autoload.php"; استخدم Mike42\Escpos\Printer; استخدم Mike42\Escpos\PrintConnectors\FilePrintConnector؛ $connector = new FilePrintConnector("/dev/usb/lp0"); $printer = طابعة جديدة($connector); /* التركيز */ for($i = 0; $i< 2; $i++) { $printer ->setEmphasis($i == 1);

$printer -> text("الثعلب البني السريع يقفز فوق الكلب الكسول\n"); ) $printer -> setEmphasis(false); // إعادة تعيين الطابعة $ -> قطع ()؛ طابعة $ -> إغلاق ()؛ [البريد الإلكتروني محمي] 00000000 1ب 40 1ب 45 00 54 68 65 20 71 75 69 63 6ب 20 62 |

سريع ب| 00000010 72 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f |الثعلب الأصفر يقفز o| 00000020 76 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 |ver the Lazy Dog| 00000030 0a 1b 45 01 54 68 65 20 71 75 69 63 6b 20 62 72 |..E.The Quick br| 00000040 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 |الثعلب الخاص يقفز على| 00000050 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a |إيه الكلب الكسول.| 00000060 1b 45 00 1d 56 41 03 |.E..VA.| 00000067

ضربة مزدوجة< 2; $i++) { $printer ->يتطلب __DIR__ . "/autoload.php"; استخدم Mike42\Escpos\Printer; استخدم Mike42\Escpos\PrintConnectors\FilePrintConnector؛ $connector = new FilePrintConnector("/dev/usb/lp0"); $printer = طابعة جديدة($connector); /* الضربة المزدوجة (تشبه في الأساس التركيز) */ for($i = 0; $i

setDoubleStrike($i == 1); [البريد الإلكتروني محمي]$printer -> text("الثعلب البني السريع يقفز فوق الكلب الكسول\n"); ) $printer -> setDoubleStrike(false); طابعة $ -> قطع ()؛ طابعة $ -> إغلاق ()؛

00000000 1ب 40 1ب 47 00 54 68 65 20 71 75 69 63 6ب 20 62 |

سريع ب| 00000010 72 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f |الثعلب الأصفر يقفز o| 00000020 76 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 |ver the Lazy Dog| 00000030 0a 1b 47 01 54 68 65 20 71 75 69 63 6b 20 62 72 |..G.The Quick br| 00000040 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 |الثعلب الخاص يقفز على| 00000050 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a |إيه الكلب الكسول.| 00000060 1b 47 00 1d 56 41 03 |.G..VA.| 00000067< count($fonts); $i++) { $printer ->setFont($fonts[$i]);

$printer -> text("الثعلب البني السريع يقفز فوق الكلب الكسول\n"); ) $printer -> setFont(); // إعادة تعيين الطابعة $ -> قطع ()؛ طابعة $ -> إغلاق ()؛ [البريد الإلكتروني محمي] 00000000 1ب 40 1ب 4د 00 54 68 65 20 71 75 69 63 6ب 20 62 |

سريع ب| 00000010 72 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f |الثعلب الأصفر يقفز o| 00000020 76 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 |ver the Lazy Dog| 00000030 0a 1b 4d 01 54 68 65 20 71 75 69 63 6b 20 62 72 |..M.The Quick br| 00000040 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 |الثعلب الخاص يقفز على| 00000050 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a |إيه الكلب الكسول.| 00000060 1b 4d 02 54 68 65 20 71 75 69 63 6b 20 62 72 6f |.M.The Quick Bro| 00000070 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 65 |الثعلب يقفز فوق| 00000080 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a 1b |r الكلب الكسول..| 00000090 4d 00 1d 56 41 03 |M..VA.| 00000096

الأمر هو:

التبرير

ESC أ [الرقم]

استخدم 0 لضبط اليسار، أو 1 لتوسيط النص، أو 2 لمحاذاته إلى اليمين.< count($justification); $i++) { $printer ->يتطلب __DIR__ . "/autoload.php"; استخدم Mike42\Escpos\Printer; استخدم Mike42\Escpos\PrintConnectors\FilePrintConnector؛ $connector = new FilePrintConnector("/dev/usb/lp0"); $printer = طابعة جديدة($connector); /* التبرير */ $justification = array(Printer:::JUSTIFY_LEFT, Printer:::JUSTIFY_CENTER, Printer:::JUSTIFY_RIGHT); ل($i = 0; $i

setJustification($justification[$i]); [البريد الإلكتروني محمي]$printer -> text("رجل يخطط لقناة بنما\n"); ) $printer -> setJustification(); // إعادة تعيين الطابعة $ -> قطع ()؛ طابعة $ -> إغلاق ()؛

00000000 1ب 40 1ب 61 00 41 20 6د 61 6e 20 61 20 70 6ج 61 |

الأوامر هي:

رجل جيش التحرير الشعبى الصينى| 00000010 6e 20 61 20 63 61 6e 61 6c 20 70 61 6e 61 6d 61 |ن قناة بنما| 00000020 0a 1b 61 01 41 20 6d 61 6e 20 61 20 70 6c 61 6e |..أ.رجل خطة| 00000030 20 61 20 63 61 6e 61 6c 20 70 61 6e 61 6d 61 0a | قناة بنما.| 00000040 1b 61 02 41 20 6d 61 6e 20 61 20 70 6c 61 6e 20 |.أ.رجل خطة | 00000050 61 20 63 61 6e 61 6c 20 70 61 6e 61 6d 61 0a 1b |قناة بنما..| 00000060 61 00 1d 56 41 03 |a..VA.| 00000066
الرموز الشريطية

ع ح [العدد] ESC ك [رقم] [نص] NULيقوم الأمر الأول بتعيين ارتفاع الرمز الشريطي — الذي يتم قياسه بالنقاط، بينما يقوم الأمر الثاني بطباعة الرمز الشريطي الفعلي. يمثل الرقم معيار الباركود الذي

بالنسبة لمعظم

يتطلب __DIR__ . "/autoload.php"; استخدم Mike42\Escpos\Printer; استخدم Mike42\Escpos\PrintConnectors\FilePrintConnector؛ $connector = new FilePrintConnector("/dev/usb/lp0"); $printer = طابعة جديدة($connector); /* الرموز الشريطية */ $barcodes = array(Printer:::BARCODE_UPCA، الطابعة:::BARCODE_UPCE، الطابعة:::BARCODE_JAN13، الطابعة:::BARCODE_JAN8، الطابعة:::BARCODE_CODE39، الطابعة:::BARCODE_ITF، الطابعة::: BARCODE_CODABAR)؛ $printer -> setBarcodeHeight(80); ل($i = 0; $i< count($barcodes); $i++) { $printer ->text("الرمز الشريطي $i " . "\n");

$printer -> barcode("9876", $barcodes[$i]); [البريد الإلكتروني محمي]طابعة $ -> تغذية ()؛ ) طابعة $ -> قطع ()؛ طابعة $ -> إغلاق ()؛

00000000 1ب 40 1د 68 50 42 61 72 63 6ف 64 65 20 30 20 0أ |

0 .| 00000010 1d 6b 00 39 38 37 36 00 0a 42 61 72 63 6f 64 65 |.k.9876..الباركود| 00000020 20 31 20 0أ 1د 6ب 01 39 38 37 36 00 0أ 42 61 72 | 1 ..ك.9876..بار| 00000030 63 6f 64 65 20 32 20 0a 1d 6b 02 39 38 37 36 00 |كود 2 ..k.9876.| 00000040 0a 42 61 72 63 6f 64 65 20 33 20 0a 1d 6b 03 39 |.باركود 3 ..k.9| 00000050 38 37 36 00 0أ 42 61 72 63 6f 64 65 20 34 20 0أ |876..باركود 4 .| 00000060 1d 6b 04 39 38 37 36 00 0a 42 61 72 63 6f 64 65 |.k.9876..باركود| 00000070 20 35 20 0أ 1د 6ب 05 39 38 37 36 00 0أ 42 61 72 | 5 ..ك.9876..بار| 00000080 63 6f 64 65 20 36 20 0a 1d 6b 06 39 38 37 36 00 |كود 6 ..k.9876.| 00000090 0a 1d 56 41 03 |..VA.| 00000095



قليل من الناس يفكرون في كيفية عمل تقنية أمين الصندوق عند التسوق في أحد المتاجر. في الواقع، هذه آلية جيدة الإعداد، ليس فقط من الناحية الفنية، ولكن أيضًا من الناحية القانونية. يعلم الجميع أن الشيء الرئيسي هو الحصول على شيك، لكن رواد الأعمال أنفسهم فقط يعرفون سبب كون الشيك مستندًا ماليًا يؤكد الشراء. في هذه المقالة سوف نشارك تجربتنا في تطوير ماكينة تسجيل النقد ونخبرك كيف يعمل كل شيء من الداخل.

قديم

تسجيل النقدية

1. النظام: أجهزة + برامج عند الصراف


يمكن تسمية مجمع البرامج والأجهزة بأكمله، الذي تم تثبيته في مكان عمل أمين الصندوق، بنظام POS أو محطة POS، من نقطة البيع الإنجليزية - مكان البيع.

دعونا نلقي نظرة على كيفية عمل نظام نقاط البيع. نظرًا لأن الاختلاف الأساسي بين النظام والجهاز الطرفي هو موقع الذاكرة المالية (FP) أو التخزين المالي (FN): بالنسبة لنظام نقطة البيع، فهي مدمجة في جهاز الطباعة، وبالنسبة لمحطة نقطة البيع فهي موجودة في الكمبيوتر وحدة. - مجمع برمجيات وأجهزة يعمل على أساس المسجل المالي. يتكون عادةً من كمبيوتر نقطة البيع، وشاشة ولوحة مفاتيح، وطابعة إيصالات، ومسجل مالي، وشاشة عرض للعملاء، ودرج للنقود، وقارئ البطاقات المصرفية. مجموعة نموذجية من الوظائف النقدية: المحاسبة وإصدار البضائع، واستلام الأموال وإصدارها، وإلغاء الشراء.

الجزء الأكثر إثارة للاهتمام في نظام نقاط البيع هو المسجل المالي - هذا هو قلب النظام وأحد فئات آلات تسجيل النقد (CCM).

تعمل طابعة الإيصالات المزودة بذاكرة مالية مدمجة كمسجل مالي. يتلقى المعلومات عبر قناة اتصال ويعالجها ويطبعها. يمكن تخزين البيانات المتعلقة بالمعاملات النقدية في الذاكرة المالية للمدة المطلوبة حتى يلزم إعادة ضبطها.

يتم استخدام الخادم لنقل البيانات مباشرة من المسجل المالي إلى خدمة الضرائب مشغل البيانات المالية - OFD - كيان قانوني خاص مسؤول عن تلقي ومعالجة وتخزين ونقل البيانات المالية إلى مصلحة الضرائب.

في العام الماضي، ناقش رواد الأعمال الروس بنشاط الانتقال إلى سجلات النقد عبر الإنترنت وإرسال الشيكات إلى مكتب الضرائب من خلال OFD فيما يتعلق باعتماد القانون 54-FZ "بشأن استخدام معدات تسجيل النقد".


دور OFD. رسم تخطيطي من مقال حول 54-FZ والانتقال إلى سجلات النقد عبر الإنترنت

FTS هي دائرة الضرائب الفيدرالية الاتحاد الروسي. في كازاخستان، يتم تنفيذ هذه المهمة من قبل لجنة إيرادات الدولة التابعة لوزارة المالية. وفي بيلاروسيا – وزارة الضرائب والرسوم.

هناك العديد من مكاتب OFD العاملة في الاتحاد الروسي، ولكن يوجد في كازاخستان مكتب واحد فقط، وهو Kazakhtelecom JSC.

2. التشريع: التحكم العالمي عبر الإنترنت في سجلات النقد

تعمل المراقبة عبر الإنترنت لعمليات البيع بالتجزئة بالفعل في العديد من البلدان: كوريا الجنوبية(2005)، السويد (2008)، كندا (2010)، بولندا (2011)، كرواتيا (2013). وفي عام 2015، بدأ تنفيذ هذا النهج في كازاخستان. وفي بيلاروسيا، تم تأجيل الموعد النهائي لربط سجلات النقد بنظام التحكم في الإيرادات عن بعد إلى 1 يوليو 2018 (تم تحديد نفس الموعد النهائي في روسيا).

يتم تنظيم استخدام سجلات النقد عبر الإنترنت في كازاخستان بموجب الفصل 90 من قانون الضرائب. منذ عام 2015، بدأ بائعو الوقود والكحول بإرسال الإيصالات إلى مكتب الضرائب عبر الإنترنت. وفي المرحلة الثانية - ابتداءً من عام 2016 - تم ربط العاملين في تجارة الجملة للمواد والمعدات المختلفة بالنظام؛ البيع بالتجزئة للأثاث والبرمجيات والإلكترونيات؛ أصحاب الفنادق والمطاعم ومصففي الشعر ودور السينما. ومن المتوقع أن تكون المرحلة الثالثة من المشروع.

نشير إلى القوانين لسبب ما؛ فهي تصف المتطلبات الفنية الإلزامية لأنظمة البرامج والأجهزة لجمع البيانات وإرسالها إلى مكتب الضرائب، والتي تشكل أساس تلك المتطلبات. مهام مهندسي التطوير. على سبيل المثال، بأمر من وزير المالية في جمهورية كازاخستان، تم نشر قائمة متطلبات السجل النقدي لنقل المعلومات حول المدفوعات النقدية، والتي كانت مفيدة للغاية بالنسبة لنا في تطوير المسجل المالي.

3. تصميم ومنطق عمل المسجل المالي

جهاز التطوير الأساسي الخاص بنا هو طابعة الإيصالات الحرارية. نظام التجميع هو Buildroot. البرمجة - في كيو تي.

يتطلب المشروع تطوير:

1) المواصفات الفنية.
2) بروتوكول التبادل مع كمبيوتر نقطة البيع، دعنا نسميه بروتوكول POS-C؛
3) التطبيق الخفي الذي يتحكم في الجهاز:

  • وحدة لتبادل البيانات مع خادم OFD باستخدام بروتوكول CCT (معدات تسجيل النقد)؛
  • وحدة لتبادل البيانات مع كمبيوتر نقطة البيع باستخدام بروتوكول POS-C؛
  • وحدة التحكم في الطباعة؛
  • وحدة التحكم في واجهة الاتصالات؛
  • وحدة تفاعل قاعدة البيانات؛
  • خادم الويب.

1) وحدة تبادل البيانات مع خادم OFD

يتم التبادل بين الجهاز والخادم باستخدام بروتوكول TCP/IP. في هذا التفاعل، يكون الجهاز هو العميل، ويكون OFD هو الخادم. يتم استخدام المخازن المؤقتة للبروتوكول كأساس لتشفير وفك تشفير المعلومات المرسلة عبر بروتوكول CCP.

الغرض من واجهة الويب:

  1. معلمات الإعداد
  2. عرض حالة الجهاز؛
  3. تحديث البرنامج.


واجهة الويب

4. الاستنتاج

استنادًا إلى التقنيات المدرجة، قمنا بتطوير جهاز يحتوي على الكثير من الوظائف والإعدادات عبر واجهة الويب، ودعم بروتوكولات التبادل المختلفة مع كمبيوتر نقطة البيع، والقدرة على تحديث البرامج.

والآن يبدو أن فريق Promwad الهندسي لن يتمكن أبدًا من القدوم إلى المتجر وشراء شيء ما دون التفكير في كل هذه العناصر الداخلية لسجلات النقد عبر الإنترنت وبروتوكولات نقل البيانات والمتطلبات القانونية وطباعة هذا المطبخ بأكمله:
- خذ الشيك من فضلك!
- شكرا لك، لا حاجة! :-)

ملاحظة: وأخيرًا، لحظة من الفكاهة: اكتشف علماء طب العيون البريطانيون من فريق ArtAlienTV شيئًا يشبه ماكينة تسجيل النقد القديمة في صور المركبة الفضائية Curiosity.

أساس البروتوكول

المهمة القياسية لأي طابعة إيصالات هي طباعة النص. بالإضافة إلى ذلك، يمكنك إنشاء إعدادات مخصصة للخط والحجم والكثافة وإعدادات الجهاز الأخرى. يتم إرسال كافة المعلومات (المفيدة والتحكم) في شكل نص؛ وتقوم الطابعة "بالالتقاط" لأوامر التحكم، وفصلها، وطباعة الجزء النصي فقط. وهكذا فإن السيطرة موجودة في النص نفسه. لفصل جزء الخدمة عن جزء المعلومات، يتم استخدام أحرف خاصة غير مطبوعة ولا يمكن إدخالها من لوحة مفاتيح الكمبيوتر. مثال على هذا الحرف هو "ESC" أو حرف الرمز العشري 27. ويعني إرسال هذا الحرف إلى الطابعة أنه متبوع بأمر قصير للتحكم في الطباعة. عادةً ما يأتي وصف أوامر بروتوكول ESC/POS مع الجهاز وهو جزء من وثائق الطابعة.

قدرات الطابعة التقريبية

كيف الاحتمالات التقريبيةبالنسبة لأي من طابعات الإيصالات القياسية، يمكنك تحديد الإجراءات التالية:

  • زيادة وتقليل حجم الخط؛
  • تفعيل الخط المعكوس (الحروف البيضاء على خلفية سوداء)
  • طباعة الباركود؛
  • التنشيط إشارة صوتيةطابعة؛
  • توفير إشارة كهربائية لفتح درج النقود؛
  • تفعيل السكين الموجود على الطابعة لقطع الورق.

اعتمادًا على طراز الطابعة وإمكانياتها، يتم تنشيط هذه الإجراءات باستخدام أوامر ESC/POS. في هذه الحالة، تقوم الطابعة بمراقبة كل أمر وتنفيذه على الفور.

متى تستخدم أوامر ESC/POS

يمكن استخدام أوامر ESC/POS عندما تدعمها الطابعة (جميع الطابعات تقريبًا) وعند العمل مباشرة مع الطابعة، دون استخدام وسيط سائق ويندوزأ. يتحكم Microinvest Warehouse Pro Light في الجهاز مباشرة، ويرسل الأوامر اللازمة إلى الطابعة. إنهم يعملون بشكل لا تشوبه شائبة و باستخدام USBطابعة بدون برنامج تشغيل وسيط ومضاهاة USB إلى COM.

عندما يكون من المستحيل استخدام أوامر ESC/POS

هناك 3 حالات يكون فيها استخدام أوامر ESC/POS مستحيلًا من حيث المبدأ: 1. المسجلون الماليون. تستخدم الطابعات المالية بروتوكول اتصال معقدًا غير متوافق تمامًا مع بروتوكول ESC/POS. ونتيجة لذلك، لا تستجيب الطابعة لأوامر ESC/POS؛ 2. عند التحكم في الطابعة عبر تثبيت ويندوز driver. في هذه الحالة، يقوم برنامج التشغيل نفسه بتنفيذ أوامر ESC/POS ويرفض بشكل قاطع هذه الأوامر المرسلة برمجة. ونتيجة لذلك، لا يوجد أي تأثير على الطابعة؛ 3. عند استخدام وسائط الطباعة، مثل خادم الطباعة أو تقنيات أخرى مماثلة. في هذه الحالة، تتم تصفية أوامر ESC/POS وفقدانها أثناء الاتصال، حتى دون الوصول إلى الطابعة. عند بناء النظام، من الضروري التخطيط لإدارة الطابعة بشكل صحيح. نوصي بربط كل طابعة مباشرة بكمبيوتر التحكم، والعمل مباشرة وفقًا للبروتوكول، بدون سائق.

ترميز الأوامر

يتم تشفير أوامر ESC/POS من خلال واحد أو أكثر شخصيات خاصةومعلمات الأمر. كل هذا موضح في القسم المقابل (الرأس أو التفاصيل أو الإجماليات أو التذييل) في إعدادات الطابعة في Microinvest Warehouse Pro Light أو Microinvest مدير الجهاز. الأوامر الأساسيةالضوابط هي:

تم وصف الإجراءات الخاصة بهم في وثائق الطابعة وتم توحيدها بواسطة بروتوكول ESC/POS.

فرق شعبية

قائمة تقريبية لأوامر بروتوكول ESC/POS الأكثر شيوعًا:

  • !- ينشط الخط أ.
  • !- ينشط الخط B.
  • !- خط مزدوج الارتفاع؛
  • !- خط مزدوج العرض؛
  • !- الخط A بارتفاع عادي؛
  • ه - يتضمن الخط الغامق.
  • ه - إيقاف تشغيل الخط الغامق؛
  • ب - يشمل الطباعة العكسية؛
  • ب - إيقاف الطباعة العكسية؛
  • i – يقوم بتنشيط السكين الموجود بالطابعة.

على الرغم من أن الأوامر المدرجة موحدة وفقًا لمقتطفات من بروتوكولات ESC/POS للطابعات المختلفة، إلا أن كل واحدة منها لديها تقنية تنفيذ الأوامر الخاصة بها وقد تختلف النتائج وفقًا للشركة المصنعة أو الطراز. لتحقيق التأثير المطلوب، تحتاج إلى اختبار وتحديد الأوامر التي يتم تنفيذها بواسطة الطابعات.

معلومات أخرى

تعد ESC/POS تقنية قوية جدًا للتحكم في الطابعة. ومن خلال هذا البروتوكول يمكنك الحصول على نتائج ممتازة على كل طابعة حديثة تقريبًا. لسوء الحظ، لا يوجد توافق بنسبة 100٪ بينهما أجهزة مختلفة، لذلك يجب اختبار كل أمر على جهاز محدد حقيقي. تعتمد بعض الأوامر على وقت التنفيذ. لذلك، على سبيل المثال، يمكن أن يؤدي تنشيط السكين إلى تقدم الطباعة بالمحتويات وقطع الإيصال في المكان الخطأ. لذلك، يتطلب استخدام أوامر ESC/POS اختبارًا واقعيًا وتكوينًا دقيقًا، وفقًا لطراز الطابعة.

بعض الموارد المفيدة

  • التوثيق لجميع المنتجات؛
  • منتدى الدعم الفني لشركة Microinvest، حيث يمكنك الحصول بسرعة على إجابة لسؤالك؛