Berke Özyaşar
مدونة

تطوير تطبيق مستودعات بالباركود: الكاميرا وOCR وطابعة Zebra

ملاحظات من تطبيق المستودعات الذي طوّرته لـTCT Lojistik: قراءة الباركود بكاميرا الهاتف، وOCR، وطباعة الملصقات بلغة ZPL، واكتشاف الطابعات، والربط بالنظام القائم.

·

يدخل المستودعَ ويخرج منه عدد كبير من الصناديق طوال اليوم. وعندما تُكتب هذه الحركات على الورق أولًا ثم تُدخل في النظام، يضيع الوقت ويصبح الخطأ أمرًا لا مفر منه. وقد نقل تطبيق المستودعات الذي طوّرته لعميلنا TCT Lojistik هذه العملية إلى الهاتف: تُمسح الصناديق بالكاميرا، ويصل السجل فورًا إلى نظام الشركة، وتُطبع الملصقات من طابعات Zebra الموجودة على الشبكة. أنا Berke Özyaşar؛ وفي هذا المقال أشارك القرارات التقنية التي اتخذتها والدروس العملية التي تعلمتها أثناء تطوير هذا التطبيق.

ماذا يفعل التطبيق؟

  • مسارات دخول الشحنات إلى المستودع وخروجها منه
  • قراءة الباركود بكاميرا الهاتف، وعند الحاجة قراءة النص المطبوع على الملصق عبر OCR
  • اختيار لوحة المركبة، وقوائم الصناديق، ونظرة عامة على الشحنات المقرر إخراجها
  • الاستعلام عن الشحنات
  • إنشاء ملصقات الباركود ومعاينتها وطباعتها على طابعة Zebra
  • اكتشاف الطابعات في الشبكة المحلية وإعداداتها
  • تسجيل دخول المستخدمين باستخدام JWT

كُتب التطبيق باستخدام React Native 0.81، ويتصل بالبنية القائمة لدى الشركة المبنية على ASP.NET Core وSQL Server.

جهاز محمول مخصص أم هاتف؟

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

والجانب الجيد أن معظم الأجهزة المحمولة الحديثة تعمل أصلًا بنظام Android. فالتطبيق المكتوب بـReact Native يمكن أن يعمل على الهاتف وعلى الجهاز المحمول معًا. وعادةً ينقل الماسح المدمج في الجهاز الرمز الذي يقرؤه إلى التطبيق كإدخال من لوحة المفاتيح أو كبث نظامي (broadcast)؛ ويمكن إضافة هذا الإدخال إلى جانب القراءة بالكاميرا. أي أن قرار الجهاز لا يستلزم إعادة كتابة التطبيق.

قراءة الباركود بالكاميرا

على جانب الكاميرا استخدمت react-native-vision-camera. يقرأ التطبيق الصيغ الشائعة في المستودعات مثل Code 128 وCode 39 وCode 93 وEAN-13 وEAN-8. وأبرز النقاط في هذا النوع من القارئات:

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

عندما يتعذر قراءة الباركود: OCR

ليس كل ملصق في حالة قابلة للقراءة. لذلك يتضمن التطبيق وضع مسح ثانيًا: في وضع OCR يُقرأ النص الموجود في صورة الكاميرا أيضًا، ويمكن التعرف على الباركود والنص المطبوع على الملصق معًا ومقارنتهما. وفي الحالات التي يتلف فيها الباركود بينما يبقى الرقم مقروءًا، لا يحتاج العامل إلى كتابة الرقم يدويًا. واستخدمت لـOCR إضافة للتعرف على النص تعمل مع vision-camera؛ ولأن الإطارات تُعالج على جانب الكاميرا، لا تتجمد الواجهة.

طباعة الملصقات: ZPL وZebra

تستخدم طابعات Zebra لغة أوامر تُسمى ZPL. يمكن تصميم الملصقات البسيطة مباشرة بأوامر ZPL؛ لكن الأمر يصبح مرهقًا عندما يتضمن الملصق شعارًا أو خطوطًا خاصة أو تخطيطًا معقدًا. وفي هذا المشروع سلكت طريقًا مختلفًا:

  • يُصمَّم الملصق في التطبيق كمكوّن React Native عادي ويُعايَن على الشاشة.
  • يُحوَّل هذا المكوّن إلى صورة.
  • تُغيَّر أبعاد الصورة وفق دقة الطابعة (203 dpi، وملصق 4x6 بوصات)، وتُدار عند الحاجة، وتُحوَّل إلى خريطة نقطية بالأبيض والأسود.
  • تُضغط الخريطة النقطية وتُوضع داخل أمر الرسوميات في ZPL (^GFA)، ثم تُرسل إلى الطابعة.

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

العثور على الطابعة في الشبكة

تستقبل طابعات Zebra البيانات الخام عبر الشبكة عادةً من المنفذ 9100. ويفتح التطبيق اتصال TCP مباشرًا بالطابعة باستخدام react-native-tcp-socket ويرسل بيانات ZPL. وبدلًا من أن نتوقع من المستخدم معرفة عنوان IP للطابعة، يمسح التطبيق الشبكة المحلية ويعرض الأجهزة التي يكون هذا المنفذ مفتوحًا لديها. وقد أعطى إجراء المسح بالتوازي مع عدد محدود من الاتصالات، ثم إعادة محاولة العناوين التي لم تستجب بمهلة انتظار أطول، نتيجة سريعة وموثوقة معًا.

الربط بالنظام القائم

كانت لدى TCT بنية خوادم تعمل بالفعل. فبنيت التطبيق فوقها لا بديلًا عنها: يتواصل تطبيق الجوال مع ASP.NET Core API الموجود، وتبقى البيانات في SQL Server. وتتم المصادقة باستخدام JWT؛ يُحفظ الرمز المميز على الجهاز ويُرسل مع كل طلب. ونصيحتي في هذا النوع من المشاريع واحدة دائمًا: يجب ألا يتصل تطبيق الجوال بقاعدة البيانات مباشرة، بل يجب أن يكون بينهما API يتولى الصلاحيات ولا يتيح إلا العمليات اللازمة.

التصميم لمستخدم المستودع

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

من مجال مشابه: Scano QR

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

الخلاصة

لا يشترط تطبيق المستودعات بالباركود شراء أجهزة باهظة أو تغيير النظام القائم. فبكاميرا الهاتف، ومسار مسح مضبوط جيدًا، وملصقات تُصمَّم على الشاشة وتُحوَّل إلى ZPL، وAPI يتصل بالخادم الحالي، يمكن أن تصبح سجلات المستودع فورية. وإذا كنت تفكر في حل مشابه لمستودعك، يمكنك الاطلاع على صفحة تطبيقات المستودعات بالباركود والأجهزة المحمولة.

مقالات أخرى

لنُطلق تطبيقك معًا.

أخبرني في بضع جمل بما تريد إنجازه. أرد في اليوم نفسه.

استخدم ↑ ↓ للتنقل، وEnter للفتح، وEsc للإغلاق