UART التحكم عن بعد على شبكة الإنترنت

لنبدأ بالحديد


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

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

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

بادئ ذي بدء ، تم إطلاق Docklight - أداة جيدة "للاتصال" عبر منافذ COM ، ولكن كان لديها الكثير من القيود. ونحن هنا نقترب من جوهر المسألة.

لماذا لا يناسبني دوكلايت؟


حسنا ، دعنا نذهب.

  • المشكلة الأولى هي أن Docklight يعمل فقط على Windows. لذلك ، يمكن نسيان تثبيت "مركز العصب" في شكل RaspberryPi ، والذي سيصل جميع الأجهزة ، أو شيء من هذا القبيل. اضطررت إلى تثبيت NUC - أرخص حل في هذه الحالة. ثقيلة ، كبيرة إلى حد ما ، وليس أرخص. بالمناسبة ، عندما تم سحب تجهيزات الاختبار هذه من مكان إلى آخر ، قاتلت NUCs كثيرًا للغاية (على الرغم من أنني أعترف أن تصميمها قوي جدًا).
  • الثانية - الوصول عن بعد لا يمكن أن يتم إلا من خلال مشاركة سطح المكتب - تم إبطائه حتى من خلال الشبكة المحلية ، وحتى من خلال الإنترنت كان عرجاء تماما.
  • ثالثًا ، كان لكل جهاز مجموعة من الأوامر الخاصة به ، ويمكن لـ Docklight تحميل ملف مع قائمة بالأوامر. إذا كان عليك ، على سبيل المثال ، مشاركة قائمة مشابهة مع شخص ما في القسم ، فأرسل إما بريدًا إلكترونيًا مع الملف ، أو ... أرسل رابطًا إلى الملف في المجلد المشترك! بطبيعة الحال ، يتطلب كل تثبيت Docklight مثل هذه الملفات محليًا ، وكل هذا كان لا بد من القيام به عشرات (إن لم يكن مئات المرات) يدويًا - لكل NUC ، قام كل مهندس بسحب قوائم أوامره المفضلة والملائمة. وفي الساحة 2019 ، اسمحوا لي أن أذكرك ...
  • رابعًا ، لا يسمح لك Docklight بربط منفذ COM تلقائيًا باسم الجهاز: على سبيل المثال ، سيتصل Windows ، عند توصيل Power Supply ، بالجهاز عبر COM12. إذا كنت تريد "سحب السلاسل" يدويًا ، فأنت في Docklight تحتاج إلى فتح COM12. كيف يمكننا معرفة أن الأمر يتعلق فقط بمصدر الطاقة ، وليس حول لوحة التبديل؟ حسنًا ، يمكنك البحث في مدير الجهاز في كل مرة ، ومحاولة عدم نسيان الجهاز المتصل بأي منفذ. في الوقت نفسه ، لا يضمن أحد أنه إذا قمت بسحب الجهاز ثم توصيله مرة أخرى ، فسيظل المنفذ السابق مع هذا الجهاز. باختصار ، في كل مرة يتعين عليك القيام بذلك يدويًا. وصدقوني ، بحلول نهاية اليوم كان رأسي يدور من هذا.
  • خامسًا ، يحتاج كل منفذ إلى نسخة منفصلة من البرنامج ، وبالطبع ، كان يتعين إجراء جميع العمليات بشكل فردي لكل جهاز ، وعلى الرغم من أن Docklight يدعم البرمجة النصية ، لا يوجد تفاعل بين الحالات الفردية.

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

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

حسنًا ، قررت أن أفعل شيئًا ما ، لكن صحح (أو تحسن) الموقف مع المشكلات الموصوفة.
اتضح شيء مثل Zabbix ، ولكن مع شحذ لموقف معين.

إذن ما هو الفرق؟


ربما يكون من المنطقي البدء بوصف عام للهندسة المعمارية ، ثم الدخول في التفاصيل.

المخطط يشبه هذا:



لدينا وكيل يعمل في المحطة التي تتصل بها أجهزتنا فعليًا. تمت كتابة Agent في Python ، لذا فهو يعمل دون مشاكل على Windows و Linux ، ويمكنك الانتهاء منه بأمان للاستخدام على RaspberryPi والأجهزة المماثلة. البرنامج هو المتساهلة للغاية للموارد ، ومستقرة للغاية. يتم توصيل العامل باستمرار عبر Websocket بالخادم (النهاية الخلفية) ، ويتلقى جميع إعدادات المنفذ والمعلمات الخاصة بهم من هناك ، أثناء التهيئة وأثناء التحديثات. لدى الوكيل واجهة المستخدم الرسومية الخاصة به للإعدادات والمراقبة في هذه الحالة (ربما تم فقد الاتصال ، وربما انتهت صلاحية الترخيص).



التالي. يرتفع الخادم (ويعرف أيضًا باسم النهاية الخلفية) من عامل الإرساء (وبالتالي لا يعمل ببساطة في الأمازون أو Google Cloud فحسب ، بل وأيضًا على أي جهاز غير قوي على شبكة LAN مع Linux على متن الطائرة). هو مكتوب في جانغو بالتعاون مع Redis (لدعم websockets). إنه يخزن جميع الإعدادات ، ويوفر التواصل بين المستخدم واجهة المستخدم الرسومية (مجرد صفحة مكتوبة في ReactJS) وعبر وكيل - مع أجهزتنا. الاتصالات في اتجاهين ، غير متزامن تماما. يتم تخزين جميع الإعدادات في بوستجرس ومونغو.

حسنًا ، وربما الجزء الأكثر أهمية في النظام هو العميل نفسه (ببساطة ، صفحة في متصفح ، مكتوبة لـ ReactJS لمزيد من الديناميكية).



نعم ، التصميم المرئي أبعد ما يكون عن الكمال ، ولكن هذا قابل للتثبيت.

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

  1. هذا هو ألفا في وقت مبكر جدا ، مصممة لإظهار الأرجح وسائل الراحة المحتملة والتحقق من مستوى الاهتمام.
  2. العب تجريبي - هنا
    لتسجيل الدخول
    اسم المستخدم: operator_0
    كلمة المرور: 123456789
    نختار QA_Test وأي محطة (هذه مجرد محاولة لمحاكاة بنية المؤسسة - الموانئ متصلة بالمحطات ، وهي مقسمة إلى أقسام ، ولكل مكتب هيكل خاص به)

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

سأكون سعيدا بأي ملاحظات واقتراحات. النقد مرحب به!

Source: https://habr.com/ru/post/ar440466/


All Articles