ShIoTiny: العقد والروابط والأحداث أو ميزات برامج الرسم

ShIoTiny: العقد والروابط والأحداث أو ميزات برامج الرسم

النقاط الرئيسية أو ما هو هذا المقال

موضوع المقال هو برمجة PLC المرئية شيوتيني للمنزل الذكي الموصوف هنا: ShIoTiny: أتمتة صغيرة أو إنترنت للأشياء أو "ستة أشهر قبل الإجازة".

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

مقدمة أو بضعة أسئلة تنظيمية

في المقالة السابقة حول تطوري، قدمت لمحة موجزة عن قدرات وحدة التحكم شيوتيني.

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

لذلك، قمت بنشر ثنائيات البرامج الثابتة ومخطط الجهاز على GitHub: البرامج الثابتة + أقصر التعليمات + الرسم التخطيطي + الأمثلة.

الآن يمكن للجميع وميض ESP-07 واللعب بالبرامج الثابتة بأنفسهم. إذا كان أي شخص يريد حقًا نفس اللوحة تمامًا كما في الصورة، فلدي العديد منها. الكتابة عن طريق البريد الإلكتروني [البريد الإلكتروني محمي]. ولكن، كما اعتاد أوغورتسوف الذي لا يُنسى أن يقول: "أنا لست مسؤولاً عن أي شيء!"

لذلك، دعونا نصل إلى هذه النقطة: ما هو "العقدة"(العقدة) و"событие"؟ كيف يتم تنفيذ البرنامج؟

كالعادة، لنبدأ بالترتيب: عن طريق تنزيل البرنامج.

كيف يتم تحميل البرنامج

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

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

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

بالمناسبة، إذا كنت تريد إزالة دائرة من جهاز، فما عليك سوى تحميل دائرة فارغة فيه (لا تحتوي على عنصر عقدة واحد).

بمجرد تحميل برنامج الدائرة بالكامل في ShIoTiny PLC، يبدأ في "التنفيذ". ماذا يعني ذلك؟

لاحظ أن عمليات تحميل الدائرة من ذاكرة FLASH عند تشغيل الطاقة وعند استلام الدائرة من المحرر متطابقة.

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

وفقط بعد كل هذا تبدأ دورة تنفيذ البرنامج الرئيسية.

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

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

لقد ذكرت عدة مرات بالفعل أشياء مثل أحداث, العقد и العلاقات. ولكن ما هذا من وجهة نظر البرمجيات؟ سنتحدث عن هذا اليوم.

العقد والوصلات والأحداث

مجرد إلقاء نظرة على أمثلة برامج الدوائر ل شيوتينيلفهم أن المخطط يتكون من كيانين فقط - العقد (أو العناصر) والاتصالات بينهما.

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

مدخل - هذا هو المكان الذي تستقبل فيه العقدة البيانات. الصور المدخلة هي نقاط موجودة دائمًا على الجانب الأيسر من العقدة.

إنتاج - هذا هو المكان الذي يتم فيه استرجاع نتيجة عملية العقدة. الصور الناتجة هي نقاط موجودة دائمًا على الجانب الأيمن من العقدة.

بعض العقد ليس لديها مدخلات. تولد هذه العقد النتيجة داخليًا. على سبيل المثال، العقدة الثابتة أو عقدة الاستشعار: لا تحتاج إلى بيانات من العقد الأخرى للإبلاغ عن النتيجة.

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

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

ماذا حدث "событиеحدث هو ظهور بيانات جديدة في أي عقدة. على سبيل المثال، تتضمن الأحداث: التغيير في حالة الإدخال (node إدخال)، تلقي البيانات من جهاز آخر (العقد MQTT и UDP) ، انتهاء فترة زمنية محددة (العقد عداد и تأخير) وما إلى ذلك وهلم جرا.

ما هي الأحداث ل؟ نعم، من أجل تحديد العقدة التي نشأت فيها بيانات جديدة وحالات العقد التي يجب تغييرها فيما يتعلق باستلام البيانات الجديدة. يبدو أن الحدث "يمر" على طول سلسلة العقد حتى يتجاوز جميع العقد التي يجب فحص حالتها وتغييرها.

يمكن تقسيم جميع العقد إلى فئتين.
دعنا نستدعي العقد التي يمكنها توليد الأحداث "العقد النشطة".
سوف نقوم باستدعاء العقد التي لا يمكنها توليد الأحداث "العقد السلبية".

عندما تولد العقدة حدثًا (أي تظهر بيانات جديدة عند مخرجاتها)، ففي الحالة العامة تتغير حالة سلسلة العقد بأكملها المتصلة بمخرجات عقدة مولد الحدث.

لتوضيح الأمر، خذ بعين الاعتبار المثال الموجود في الصورة.

ShIoTiny: العقد والروابط والأحداث أو ميزات برامج الرسم

العقد النشطة هنا هي Input1 وInput2 وInput3. العقد المتبقية سلبية. دعونا نفكر فيما يحدث عند إغلاق هذا المدخل أو ذاك. وللتيسير، تم تلخيص النتائج في جدول.

ShIoTiny: العقد والروابط والأحداث أو ميزات برامج الرسم

كما ترون، عند وقوع حدث ما، يتم إنشاء سلسلة من العقدة المصدر للحدث إلى العقدة النهائية. لا تتغير حالة تلك العقد التي لا تدخل في السلسلة.

يطرح سؤال مشروع: ماذا سيحدث إذا حدث حدثان أو حتى عدة أحداث في وقت واحد؟

باعتباري من محبي أعمال جليب أنفيلوف، فإنني أميل إلى إرسال سؤال فضولي إلى كتابه "الهروب من المفاجأة". هذه هي «النظرية النسبية للصغار»، التي تشرح جيدًا معنى كلمة «متزامن» وكيفية التعايش معها.

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

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

إذن ماذا سيحدث في هذه الحالة؟ ستكون الإجابة "محددة" للغاية: اعتمادًا على العقد. دعونا نلقي نظرة على المثال في الشكل.

ShIoTiny: العقد والروابط والأحداث أو ميزات برامج الرسم

عندما تكون جهات اتصال الإدخال الخاصة بـ Input1 مفتوحة، يكون الإدخال العلوي للعقدة A هو 0. ويكون إخراج العقدة A أيضًا 0. ويكون إخراج العقدة B هو 1. وأخيرًا، يكون الإدخال السفلي للعقدة A هو 1. كل شيء على ما يرام واضح. وبالنسبة لأولئك الذين ليس لديهم فكرة واضحة، انظر أدناه للحصول على وصف لكيفية عمل العقدتين "AND" و"NOT".

نقوم الآن بإغلاق جهات الاتصال الخاصة بإدخال Input1، أي أننا نطبق واحدة على الإدخال العلوي للعقدة A. أولئك الذين هم على دراية بالإلكترونيات يعرفون أننا في الواقع سنحصل على دائرة مولد كلاسيكية تعتمد على العناصر المنطقية. ومن الناحية النظرية، يجب أن تنتج مثل هذه الدائرة التسلسل 1-0-1-0-1-0 إلى ما لا نهاية عند إخراج العنصرين A وB. و 0-1-0-1-0-1-…. بعد كل شيء، يجب أن يغير الحدث باستمرار حالة العقدتين A وB، بحيث يعمل في دائرة 2-3-2-3-...!

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

يؤدي حدث من العقدة Input1 إلى تغيير حالة العقدة A، ثم العقدة B، وهكذا في دائرة عدة مرات. يكتشف البرنامج "تكرار" الحدث ويوقف هذا الكرنفال بالقوة. بعد ذلك، يتم حظر التغييرات في حالة العقدتين A وB حتى وقوع حدث جديد. اللحظة التي يقرر فيها البرنامج "التوقف عن الدوران في الدوائر!" - بشكل عام، يعتمد ذلك على عوامل كثيرة ويمكن اعتباره عشوائيًا.

كن حذرًا عند ربط العقد بالحلقة - فالتأثيرات لن تكون واضحة دائمًا! لديك فكرة جيدة عما تفعله ولماذا!

هل لا يزال من الممكن بناء مولد على العقد المتاحة لنا؟ نعم يمكنك! لكن هذا يتطلب عقدة يمكنها توليد الأحداث بنفسها. وهناك مثل هذه العقدة - وهذا هو "خط التأخير". دعونا نرى كيف يعمل المولد بفترة 6 ثوان في الشكل أدناه.

ShIoTiny: العقد والروابط والأحداث أو ميزات برامج الرسم

العنصر الرئيسي للمولد هو العقدة A - خط التأخير. إذا قمت بتغيير حالة الإدخال لخط التأخير من 0 إلى 1، فلن يظهر 1 في الإخراج على الفور، ولكن فقط بعد وقت محدد. في حالتنا هو 3 ثوان. وبنفس الطريقة، إذا قمت بتغيير حالة الإدخال لخط التأخير من 1 إلى 0، فسوف يظهر 0 عند الإخراج بعد نفس الثواني الثلاث. يتم ضبط وقت التأخير على أعشار الثانية. أي أن القيمة 3 تعني 30 ثوانٍ.

الميزة الخاصة لخط التأخير هي أنه يقوم بإنشاء حدث بعد انتهاء وقت التأخير.

لنفترض أن خرج خط التأخير في البداية كان 0. بعد تمرير العقدة B - العاكس - يتحول هذا 0 إلى 1 وينتقل إلى مدخل خط التأخير. لا شيء يحدث على الفور. عند إخراج خط التأخير، سيبقى 0، ولكن سيبدأ العد التنازلي لوقت التأخير. مرور 3 ثواني. ثم يقوم خط التأخير بإنشاء حدث. عند إخراجها تظهر 1. هذه الوحدة، بعد المرور عبر العقدة B - العاكس - تتحول إلى 0 وتذهب إلى مدخل خط التأخير. تمر 3 ثواني أخرى...وتتكرر العملية. أي أنه كل 3 ثوانٍ تتغير حالة إخراج خط التأخير من 0 إلى 1 ثم من 1 إلى 0. ينقر التتابع. المولد يعمل. فترة النبض هي 6 ثواني (3 ثواني عند الخرج صفر و 3 ثواني عند الخرج واحد).

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

لتعيين الإجراءات الدورية، استخدم عقد المؤقت.

وألاحظ أن مثل هذه الإشارات الرقمية، التي تتساوى فيها مدة "الصفر" و"الواحد"، تسمى "التعرج".

آمل أن أكون قد أوضحت السؤال قليلاً حول كيفية نشر الأحداث بين العقد وما الذي لا يجب فعله؟

الخاتمة والمراجع

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

ومع تطور البرامج الثابتة وظهور أمثلة جديدة، سأكتب عن كيفية البرمجة شيوتيني مقالات صغيرة طالما أنها ستكون مثيرة للاهتمام للناس.

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

الأسئلة والاقتراحات والانتقادات - اذهب هنا: [البريد الإلكتروني محمي]

المصدر: www.habr.com

إضافة تعليق