مفاتيح تعمل باللمس مع Modbus: لماذا هم بحاجة إليها وكيفية تطبيقها في شقة ذكية


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

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

شرح من Wiren Board المسوق: ولد هذا المقال من موضوع تم إنشاؤه بواسطة Kallyanbl4 في منتدانا . بعد طلبنا ، كتب مقالة كاملة وسمح بنشرها على مدونتنا ، والتي نشكره عليها. جميع النصوص كتبها المؤلف ، باستثناء الملاحظات في النهاية.

وصف المفاتيح


بعد دراسة ما هو الآن في السوق ، اشتريت هذه المفاتيح المثيرة للاهتمام من الصينيين:



مزاياها:

  • التصميم الجيد.
  • مفاتيح اللمس ، عند الضغط عليها ، يومض ، مضاءة في الظلام بلون أبيض لطيف ؛
  • السعر المنخفض نسبيا - 2000 روبل لكل منهما. يشمل السعر النقش بالليزر الفردي.
  • مفتاح قابل للبرمجة - يمكنك ضبط الزر لأي إجراء تقريبًا: قم بتشغيل الضوء ، والتحكم في المصابيح ، ورفع / خفض الستارة ، ...

مواصفات التبديل:

  • جهد الإمداد - 12 فولت ؛
  • معدل نقل البيانات - 19200 بت / ثانية ؛
  • عدد البتات المرسلة - 8 ؛
  • عدد بتات التوقف - 1 ؛
  • مراقبة التكافؤ - لا تحقق.

عند العمل على Modbus RTU ، تحتوي الأجهزة المتصلة على ما يسمى بالسجلات - الخلايا التي يتم تخزين المعلومات فيها. في لقطة الشاشة ، وصف السجلات الخاصة بمفتاح التبديل رباعي المفاتيح:



عند النقر فوق أحد أزرار اللمس ، ستتغير القيم الموجودة في السجلات من 0-3 من 0 إلى 1.

قاطع الدائرة


في وحدة تحكم Wiren Board 5 ، اعتمادًا على التكوين ، هناك من اثنين إلى أربعة منافذ RS-485. يجب توصيل المحولات (في حالتي 27 منها) بهذه المنافذ.

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

كابل توصيل - Cat 5e UTP ثماني النواة. يمكنك استخدام أربعة نواة ، لكني عادة أقوم بكل شيء على أساس "فقط في حالة". يمكنك التفكير في الكابلات الأربعة الأخرى ، ولكن النقطة المهمة هي أنه يجب حماية الكبل ، لأنه حتى على الرغم من التردد المنخفض للإشارة ، لا يتم استبعاد الخسائر والتداخل.

نتيجة لذلك ، يتم توصيل جميع المفاتيح ببعضها البعض كما هو موضح في الصورة:



كما يتبين من الشكل ، فإن جميع المفاتيح متصلة ببعضها البعض باستخدام مفتاح UTP السلبي. بالنسبة للنوى 1 و 2 (البرتقالي والأبيض-البرتقالي) يتم إرسال البيانات (الخطان A و B) ، يتم توصيل طاقة 12 فولت بالنوى 7 و 8 (البني والأبيض-البني). أستخدم Mean Well NDR-75-12 كمصدر للطاقة .

لم أكن أعرف كيف تصرف مفتاح UTP الصيني السلبي ، لذلك ، عند تصميم الدرع ، قدمت مكانًا لمحول RS-423 نشط. ألاحظ أن الدائرة تعمل من خلال مفاتيح سلبية وغير نشطة. وحتى عندما تكون متصلة ببعضها البعض.



التحكم بالضوء عن طريق التتابع


وفقًا لمشروعي ، تم التخطيط لـ 27 جهازًا مستقلًا (أضواء ، مراوح) في الشقة ، مدعومة بـ 220 فولت. تم اختيار ثلاث وحدات ترحيل WBIO-DO-R10A-8 وواحدة WBIO-DO-R10R-4 للتحكم فيها. يرجع الاختيار إلى حقيقة أن جميع الإضاءة تقريبًا في الشقة هي LED ، والتي تختلف عن المصابيح المتوهجة بتيار بدء عالي. يمكن للمرحلات المختارة توفير التبديل الحالي حتى 10 أمبير لكل قناة ، وهو أمر غير ضروري في حالتي - ولكن ، كما ذكرنا سابقًا ، "فقط في حالة وجود هامش".



يحدث تبديل التتابع من خلال واجهة الويب لجهاز التحكم . الإجراء بديهي ، لا يلزم تعليمات أو تلميحات.

جزء البرنامج


ملف المنفذ

نتعلم من وصف الأجهزة لـ Wiren Board 5 أنه يحتوي على منفذي جهاز / dev / ttyAPP1 و / dev / ttyAPP4 مقابل منفذي RS-485. في حالتي ، يتم توصيل المفتاح بالمنفذ / dev / ttyAPP1 .

عنوان الجهاز (التبديل)

عند تبادل البيانات باستخدام بروتوكول Modbus RTU ، يتم تحديد كل جهاز برقمه الفريد - عنوان Modbus. كقاعدة ، تشير الشركة المصنعة إلى هذا العنوان في شكل ثلاثة أرقام على الجهاز نفسه ، ولكن إذا لم يكن هناك مثل هذا الرقم على الجهاز ، فيمكنك التكرار عبر العناوين من سطر الأوامر (يتم استخدامه لتخزين العنوان في سجل Modbus 0x80):

root@wirenboard:~# service wb-mqtt-serial stop root@wirenboard:~# for i in {1..247}; do modbus_client -mrtu /dev/ttyAPP1 --debug -a$i -t3 -r0x80 -s1 -pnone; done 2>/dev/null | grep Data: 

يجب أن تكون النتيجة في الشكل:

 Data: 0x008e 

تم استلام الإجابة بتنسيق سداسي عشري وهي تقابل 142 بصيغة عشرية.
وتجدر الإشارة إلى أنه في كل مرة يتم فيها استدعاء الأداة المساعدة modbus_client ، يجب إيقاف معيار برنامج الاستقصاء wb-mqtt التسلسلي لوحدة التحكم ؛ وإلا ، لن تعمل الأداة المساعدة modbus_client .

تبادل البيانات بين Switch و Wiren Board

أعلاه ، يتم كتابة حلقة تستقصي جميع عناوين Modbus المحتملة وتعيد قيمة العنوان إذا تم العثور على جهاز. تستخدم الحلقة الأداة المساعدة modbus_client ، وهي ضرورية لتصحيح أخطاء الأجهزة المتصلة. عند هذه النقطة ، باستخدامه ، سوف نتأكد من أن كل شيء متصل بشكل صحيح ، وأن المفتاح يتفاعل مع وحدة التحكم بشكل صحيح. للقيام بذلك ، حاول قراءة البيانات في مفتاح تسجيل 0x01:

 root@wirenboard:~# service wb-mqtt-serial stop root@wirenboard:~# modbus_client -mrtu /dev/ttyAPP1 --debug -a142 -s1 -pnone -b19200 -a142 -t0x03 

(وصف الأداة المساعدة ومفاتيحها موجود في وثائق وحدة التحكم).

ستكون النتيجة كما يلي:

 Opening /dev/ttyAPP1 at 19200 bauds (N, 8, 1) [8E][03][00][64][00][01][DA][EA] Waiting for a confirmation... <8E><03><02><00><01><2C><5B> SUCCESS: read 1 of elements: Data: 0x0001 

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

 SUCCESS: read 1 of elements: Data: 0x0000 

إذا لوحظت النتيجة ، كما هو الحال في هذه الفقرة ، فإن كل شيء متصل بشكل صحيح ، والمفتاح ووحدة التحكم يفهمان بعضهما البعض.

برنامج التشغيل الأصلي للمفتاح

بعد التأكد من أن جهاز التحكم والمفتاح يفهمان بعضهما البعض ، فقد حان الوقت لتقديم وصف لمفاتيح التبديل على مستوى البرنامج. يقترح المطورون إضافة وصف للجهاز المتصل إلى ملف /etc/wb-mqtt-serial.conf أو إنشاء قالب مخصص في شكل /usr/share/wb-mqtt-serial/templates/config-*.json.

ذهبت في الطريق الثاني ، يبدو النموذج الخاص بي كما يلي:

 { "device_type": "4-band-switch", "device": { "name": "4-band-switch", "id": "4bsw", "enabled": true, "channels": [{ "name": "All", "reg_type": "holding", "address": "0x00", "type": "switch" }, { "name": "Window", "reg_type": "holding", "address": "0x01", "type": "switch" }, { "name": "Side", "reg_type": "holding", "address": "0x02", "type": "switch" }, { "name": "Diode", "reg_type": "holding", "address": "0x03", "type": "switch" } ] } } 

يوجد وصف مفصل للقالب المكتوب أعلاه في وصف برنامج تشغيل wb-mqtt-serial . تعامل بإيجاز مع الحقول:

  • "الاسم": "الكل" هو اسم الزر. إذا تم هجاء النموذج بشكل صحيح ، فسيظهر هذا الزر في علامة التبويب "الإعدادات" مع العنوان / devices / 4bsw_142 / control / All
  • "Reg_type": "عقد" - نوع وحجم التسجيل. يستخدم المحول "الاحتفاظ" - وهو سجل 16 بت متوفر للقراءة والكتابة.
  • "العنوان": "0x00" - عنوان تسجيل المفتاح الذي ستقرأ منه وحدة التحكم البيانات.
  • "النوع": "التبديل" - كيف سيتم عرض المفتاح في واجهة الويب. في حالة "التبديل" - في شكل مفتاح منفصل.

احفظ القالب على وحدة التحكم. بعد ذلك ، في قسم واجهة الويب (Configs -> /etc/wb-mqtt-serial.conf) ، يمكنك إضافة جهاز جديد مع هذا القالب (4-band-switch). أضف مفتاحنا الأول وانقر على حفظ.

القاعدة التي تنشط التتابع عند الضغط على زر التبديل


داخل وحدة تحكم الحالة ، يتم وصف جميع الأجهزة المتصلة بواسطة رسائل MQTT . يتم التحكم في الأجهزة أيضًا عن طريق إرسال رسائل MQTT. عملاء قائمة انتظار رسائل MQTT (وسيط) هم واجهة الويب ومحرك القواعد .

للتوضيح ، سنرى كيف تتعامل واجهة الويب مع الرسالة الواردة. نفتح علامة التبويب "الإعدادات" في واجهة الويب ونرى ما يحدث عند الضغط على الزر "الكل" في المحول: داخل المفتاح ، تتغير قيمة سجل Modbus ، يستقصي برنامج تشغيل wb-mqtt-serial المحول ، ووفقًا لقالب الجهاز ، يرسل المحول رباعي النطاق رسالة MQTT في الموضوع / الأجهزة / 4 bsw_142 / الضوابط / الكل - وعلى صفحة الإعدادات ، ستتغير القيمة في الموضوع / الأجهزة / 4bsw_142 / الضوابط / الكل على الفور من 0 إلى 1.

خذ بعين الاعتبار العميل الثاني - محرك القواعد. يعمل المحرك ، مثل واجهة الويب ، مع قائمة انتظار الرسائل ، ويمكنه الاستجابة للتغيرات في القيمة - عند استخدام وظيفة التغيير لهذا الغرض. في حالتي ، بدت القاعدة كما يلي:

 //   defineRule("switch_all", { whenChanged: "4bsw_142/All", then: function(newValue, devName, cellName) { dev["wb-gpio"]["EXT3_R3A2"] = newValue; dev["wb-gpio"]["EXT3_R3A5"] = newValue; dev["wb-gpio"]["EXT1_R3A1"] = newValue; dev["wb-gpio"]["EXT1_R3A2"] = newValue; dev["wb-gpio"]["EXT1_R3A5"] = newValue; dev["wb-gpio"]["EXT2_R3A8"] = newValue; dev["wb-gpio"]["EXT3_R3A7"] = newValue; } }); //  defineRule("switch_window", { whenChanged: "4bsw_142/Window", then: function(newValue, devName, cellName) { dev["wb-gpio"]["EXT4_ON4"] = newValue; // dev["wb-gpio"]["EXT3_R3A6"] = newValue; // dev["wb-gpio"]["EXT3_R3A7"] = newValue; } }); // defineRule("switch_side", { whenChanged: "4bsw_142/Side", then: function(newValue, devName, cellName) { dev["wb-gpio"]["EXT1_R3A3"] = newValue; dev["wb-gpio"]["EXT1_R3A4"] = newValue; dev["wb-gpio"]["EXT2_R3A1"] = newValue; } }); // defineRule("switch_diode", { whenChanged: "4bsw_142/Diode", then: function(newValue, devName, cellName) { dev["wb-gpio"]["EXT2_R3A2"] = newValue; dev["wb-gpio"]["EXT2_R3A3"] = newValue; dev["wb-gpio"]["EXT3_R3A3"] = newValue; } }); 

يسعدني أن أجيب على جميع الأسئلة في التعليقات.

ملاحظات المسوق


  1. من الأفضل وضع خط RS-485 بكابل KSPEVG 2x2x0.35 (يكلف 30 روبل فقط لكل متر) ، وليس بنجمة ، ولكن مع حافلة.
  2. ننصحك بأن تكون حذرًا مع مصابيح LED - يمكن أن يتجاوز تيار بدء التشغيل الأوقات 150 (!) المصنفة (ستكون هذه مقالة منفصلة) - انظر إلى وحدات الترحيل القوية WB-MR6 : التيار 16 أمبير لكل قناة ، بما في ذلك تيار التدفق حتى 800 (!) أمبير في التعديل س.

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


All Articles