قام المحفل

التحكم في مضخة Arduino + شاشة STONE HMI

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

  1. STVI056WT-01 شاشة لمس تسلسلية ولوحة محول STONE V1.2 ؛  
  2. مطابقة لوحة التحكم اردوينو;  

وصف موجز لوظيفة الواجهة لنظام التحكم الذكي في تنظيم الشفرة.  

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

(الواجهة الرئيسية لبرنامج عرض التحكم بضبط الضبط الذكي Enlegi Blade)

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

           (واجهة عرض التحكم الذكي لمحطة الطاقة الكهرومائية)

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

                            (واجهة وظيفة نظام التحكم في محطة الضخ)

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

فكرة العمل:  

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

خطوات العمل:  

  1. إعداد الأجهزة ؛  
  2. أ) قم بتوصيل لوحة تطوير Arduino و USB بلوحة تحويل المنفذ التسلسلي ؛  
  3. ب) قم بتوصيل شاشة تعمل باللمس الحجر مع لوحة تنزيل المنفذ التسلسلي USB ولوحة محول USB إلى المنفذ التسلسلي ؛  
  4. ج) قم بتوصيل شاشة المنفذ التسلسلي ومصدر طاقة لوحة تطوير Arduino ؛  

3 ، من خلال تصحيح الأمر التسلسلي ، ثم البرمجة لتحقيق وظائف التحكم في محطة الضخ والتحكم في محطة الطاقة الكهرومائية.  

 بعد ذلك ، قم بتوثيق عملية التطوير المحددة.

أولاً ، قم بإعداد اتصال الأجهزة.  

قم بعمل جيد لربط جميع الأجزاء وفقًا لإجراءات العمل:

بعد ذلك ، اجعل صورة مؤشر ICON.  

الأزرار وأيقونات السكاكين المستخدمة في هذا المشروع مصنوعة على النحو التالي:  

(مفتاح التحكم في محطة الضخ ، ملف أيقونة الرسوم المتحركة بالسكين 8. رسم تخطيطي لتصفح قائمة ICO)

في شريط القائمة الخاص بـ STONE TOOL BOX (برنامج تصميم واجهة المستخدم الرسومية) ، انقر فوق أداة إنشاء الرمز ضمن قائمة الأدوات (T) لإظهار مربع حوار Icon Tool. انقر فوق "اختيار مسار الصورة" في الجزء السفلي من مربع الحوار لتحديد مسار صورة الرمز. انقر فوق الزر "إنشاء ملف ICON" لحزم ملفات BMP في المسار لإنشاء ملف ".ico" الذي تم التعرف عليه بواسطة منصة STONE TOOL BOX (برنامج تصميم واجهة المستخدم الرسومية). انقر فوق الزر "معاينة" لعرض قائمة الرموز في الملف المضغوط الذي تم استيراده ".ico".  

زر لتحريك رمز BMP ، بالبكسل كما هو مذكور أعلاه (التحكم في رمز المتغير المنتج ، يجب أن يكون حجم نفس الموضع هو نفسه) ، التحكم في محطة الضخ 8 قطع الصور في نفس المجلد. بعد ذلك ، على الجانب الأيسر من شاشة STONE TOOL BOX (برنامج تصميم واجهة المستخدم الرسومية) ، حدد بطاقة صفحة Icon وأضفها إلى ملف 7. Ico المضغوط باستخدام زر "Add Icon" ضمن "Icon List". ضع جميع الصور الستة لحالة مفتاح التحكم لمحطة الطاقة الكهرومائية في مجلد آخر وقم بترتيبها بالترتيب 6-1. قم بإنشاء "6. Ico "، ثم على الجانب الأيسر من ملف STONE TOOL BOX (برنامج تصميم واجهة المستخدم الرسومية) الشاشة ، حدد بطاقة صفحة الرمز وأضف الرمز المضغوط "6. ملف Ico "باستخدام الزر" إضافة رمز "ضمن" قائمة الرموز ".  

الآن قم باستيراد أيقونة الصورة إلى STONE TOOL BOX (برنامج تصميم واجهة المستخدم الرسومية) وقم بعمل زر الوظيفة.  

لا يزال يتم اعتماد طريقة رمز الرسوم المتحركة 9 متغير. mv في هذا المشروع لتحقيق وظيفة الرسوم المتحركة. لقطة شاشة إعداد المعلمة كما يلي:  

            (مخطط السمة للرمز المتغير لمحطة الطاقة الكهرومائية)

من اليسار إلى اليمين توجد إعدادات معلمة ICON للمتغيرات الثلاثة لصفحة وظيفة محطة الطاقة الكهرومائية: البدء والتوقف والحالة. يتم تعيين عناوين الذاكرة الخاصة بهم على نفس (0x0039) ونطاقات بياناتهم هي نفسها ، لذلك تتم مزامنة تغييراتهم. ملفات الرموز هي 6. Ico ، والأرقام التسلسلية المقابلة لها هي 1 و 2 و 3 و 4 و 6 و 5 على التوالي ، والتي يتم تحديدها وفقًا للحالة الفعلية.  

يتم تحقيق تأثير حركة حالة الزر من خلال الأزرار المتزايدة. يوضح الشكل التالي معلمات زر الزيادة على اليسار وزر إلغاء التمييز على اليمين. العنوان هو 0x0039 ، وكلاهما مماثل لعنوان Variable ICON.

(مخطط السمة للزر التزايدي بنفس عنوان الذاكرة)

(مخطط سمة رمز متغير لحالة سكين الزر لمحطة الضخ)

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

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

(مخطط سمة زر تزايدي لحالة زر محطة الضخ رمز متغير متغير بنفس عنوان الذاكرة)

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

سمات المعلمة الخاصة بها هي:

(رمز منزلق للطاقة الناتجة لمحطة الضخ - مربع خصائص مقياس منزلق)

تم استدعاء رمز عنصر التحكم في مقياس شريط التمرير هذا في DEMO 24.ico الرسمي. طريقة إضافة ملف 24.ico هي نفسها المذكورة أعلاه. عنوان الذاكرة لعنصر تحكم Slider Scale هذا هو 0x0180 ، والذي يمكن كتابته في برنامج MCU مع 82 تعليمة (كما هو موضح في الصورة أعلاه ، النطاق مضبوط على 0-100) لتغيير موضع الرمز.  

على وجه الخصوص ، تتم قراءة حالة مصدر الطاقة وأزرار الوضع في هذا المشروع من عنوان الذاكرة 0x0009 و 0x000A و 0x0039 لشاشة المنفذ التسلسلي من خلال 83 تعليمة. 

التعليمات المستخدمة هي كما يلي:  

A5 5A 04 83 00 09 02  

ملاحظات شاشة المنفذ التسلسلي هي كما يلي:  

أ5 5أ 08 83 00 09 02 00 01 00 02  

00 01 التالي عبارة عن بيانات 2 بايت من 0x0009 ، و 00 02 عبارة عن بيانات 2 بايت من 0x000A.  

اقرأ التعليمات 0x0039 على النحو التالي:  

A5 5A 04 83 00 39 01  

ملاحظات شاشة المنفذ التسلسلي هي:  

A5 5A 06 83 00 39 01 00 01 أو  

A5 5A 06 83 00 39 01 00 02  

هناك خمسة عناوين بيانات للكتابة إليها: 0x0020، 0x0160، 0x0180، 0x0260، 0x0280.  

حيث، عنوان جرعة الورقة هو 0x0020، وهو عدد صحيح مكون من 2 بت يبلغ 2 بايت. يمكن نقله إلى شاشة اللمس من خلال المنفذ التسلسلي.  

لتمرير 11 إلى شاشة عرض البيانات المتغيرة التي تعمل باللمس ، استخدم الأمر التالي:  

A5 5A 05 82 00 20 00 0B  

برمجة التصحيح.  

رمز على النحو التالي:  

/*

  frank8

  STONE و arduino COMM ، enlaiji yepian system.

  يضيء مؤشر LED لمدة ثانية واحدة ، ثم ينطفئ لمدة ثانية واحدة ، بشكل متكرر.

  العنوان 0x0020 هو عنوان num من YePian؛

  العنوان 0x0160 هو عنوان LiuLiang الآن ؛

  العنوان 0x0180 هو عنوان القوة الخارجية لـ Bengzhan ؛

  العنوان 0x0260 هو عنوان Jiejujiao؛

  العنوان 0x0280 هو عنوان الطاقة الخارجية للمياه ؛

  العنوان 0x0009 هو مفتاح طاقة bengzhan ؛

  العنوان 0x000A هو مفتاح وضع bengzhan ؛

  العنوان 0x0039 هو مفتاح طاقة الماء.

  كود المثال هذا موجود في ملف frank. 20210611

 */

// يحتوي Pin 13 على مؤشر LED متصل بمعظم لوحات Arduino.

// أعطه إسما:

أدى int = 13 ؛

int iYePian = 0 ؛ // 0x0020 لعدد YePian!

int iGongLu = 0 ؛ // 0x0180 من أجل The GongLu!

int iLiuLiang = 0 ؛ // 0x0160 لـ LiuLiang الآن!

int iJiao = 0 ؛ // 0x0260 لـ JieJuJiao!

int iGongLuWater = 0 ؛ // 0x0280 لـ The Water GongLu! القيمة هي 0-50000!

int iLed = 1 ؛ // تأخير الوقت الأسطوانات.

int iNum = 0 ؛ // قراءة في حرف الأسطوانات.

int iNum2 = 0 ؛ // قراءة في char num2 لـ ShuiDianZhan!

int iPower = 2 ؛ // مفتاح التمثال 0x0009

int iMode = 2 ؛ // مفتاح التمثال 0x000A

int iPowerWater = 2 ؛ // مفتاح التمثال 0x0039

// يتم تشغيل روتين الإعداد مرة واحدة عند الضغط على إعادة تعيين:

إعداد باطل () {                

  // تهيئة الدبوس الرقمي كمخرج.

  pinMode (الصمام ، الإخراج) ؛     

  Serial.begin (115200) ؛ // افتح وظيفة الاتصال التسلسلي وانتظر حتى يتم فتح المنفذ التسلسلي  

بينما (! المسلسل) {

    ؛ // انتظر حتى يتم توصيل المنفذ التسلسلي. مطلوب ليوناردو فقط

  }  

}

// يعمل روتين الحلقة مرارًا وتكرارًا إلى الأبد:

حلقة باطلة () {

  int inChar.

    إذا (iLed == 900) {     

// ——- قراءة قيمة 0x0009 و 0x000A ———- 

            Serial.write (0xA5) ؛ // ”A5 هو 165

            Serial.write (0x5A) ؛ // "5A" تساوي 90

            Serial.write (0x04) ؛ // طول

            Serial.write (0x83) ؛ // اقرأ!

            Serial.write (0x00) ؛ // عنوان مفتاح الطاقة bengzhan!

            Serial.write (0x09) ؛ // عنوان مفتاح الطاقة bengzhan!

            Serial.write (0x02) ؛ // 0x0009 (الطاقة) و 0x000A (الوضع)

// ——— قيمة إرجاع STONE ستكون "A5 5A 08 83 00 09 02 00 01 00 02" ——

     }

/ * ——————————————————————————- * /     

    إذا (iLed == 800) {     

// ——- قراءة قيمة 0x0039 ———- 

            Serial.write (0xA5) ؛ // ”A5 هو 165

            Serial.write (0x5A) ؛ // "5A" تساوي 90

            Serial.write (0x04) ؛ // طول

            Serial.write (0x83) ؛ // اقرأ!

            Serial.write (0x00) ؛ // عنوان مفتاح التشغيل ShuiDianZhan!

            Serial.write (0x39) ؛ // عنوان مفتاح التشغيل ShuiDianZhan!

            Serial.write (0x01) ؛ // 0x0039 (مفتاح التشغيل) 

// ——— قيمة إرجاع STONE ستكون "A5 5A 06 83 00 39 01 00 01" ——

     }

  // اقرأ الرسالة المرسلة بواسطة المنفذ التسلسلي:

  إذا (Serial.available ()> 0) {inChar = Serial.read () ؛ }

  إذا (inChar == 0x09) {iNum = 1 ؛ }

  إذا ((inChar == 0x02) && (iNum == 1)) {iNum = 2 ؛ }

  إذا ((inChar == 0x00) && (iNum == 2)) {iNum = 3 ؛ }

  إذا ((inChar == 0x01) && (iNum == 3)) {  

      iNum = 4 ؛

      إذا كان (iPower! = 1) {

          iPower = 1 ؛ //تشغيل!

          iLiuLiang = 10 ؛

          iGongLu = 50 ؛

          iYePian = 10 ؛         

      }

   }

   إذا ((inChar == 0x02) && (iNum == 3)) {  

      iNum = 4 ؛

      iPower = 2 ؛ // إيقاف التشغيل!

      iLiuLiang = 0 ؛

      iGongLu = 0 ؛

      iYePian = 0 ؛

   }

   إذا ((inChar == 0x00) && (iNum == 4)) {iNum = 5 ؛ }

   إذا ((inChar == 0x01) && (iNum == 5)) {  

      iNum = 0 ؛

      iMode = 1 ؛ // الوضع جيد!

   }

   إذا ((inChar == 0x02) && (iNum == 5)) {  

      iNum = 0 ؛

      iMode = 2 ؛ // الوضع متوقف!

      إذا (iPower == 1) iGongLu = 60 ؛ // تم تعيين GongLu بنسبة 60٪!

   }

  // —————— 0x0009 ومفتاح 0x000A تمت قراءتهما بشكل جيد! iPower \ iMode موافق! —————————--

   إذا (inChar == 0x39) {iNum2 = 1 ؛ }

  إذا ((inChar == 0x01) && (iNum2 == 1)) {iNum2 = 2 ؛ }

  إذا ((inChar == 0x00) && (iNum2 == 2)) {iNum2 = 3 ؛ }

  إذا ((inChar == 0x01) && (iNum2 == 3)) {  

      iNum2 = 0 ؛

      إذا كان (iPowerWater! = 1) {

          iPowerWater = 1 ؛ //تشغيل!       

          iJiao = 0 ؛

          iGongLuWater = 0 ؛

      }

   }

   إذا ((inChar == 0x02) && (iNum2 == 3)) {  

      iNum2 = 0 ؛

      iPowerWater = 2 ؛ // إيقاف التشغيل!

   }

  // —————— قراءة المفتاح 0x0039 بشكل جيد! iPowerWater طيب! ——————————-

  تأخير (1) ؛ 

  iLed + = 1 ؛   

  إذا (iLed == 500) {  

      الكتابة الرقمية (led ، عالية) ؛ // قم بتشغيل LED (HIGH هو مستوى الجهد)

                  // تأخير (500) ؛ // انتظر ثانية ، المدى: 200-2000

           إذا (iPower == 1) { 

               iYePian + = 1 ؛ // النطاق: 1-20

               iLiuLiang + = 1 ؛ // النطاق: 1-20

               إذا (iMode == 1) iGongLu + = 5 ؛ // النطاق: 1-20

           }   

           إذا (iYePian> = 14) {iYePian = 10 ؛ }   

           إذا (iGongLu> = 70) {iGongLu = 50 ؛ }   

           إذا (iLiuLiang> = 14) {iLiuLiang = 10 ؛ }   

           إذا (iPowerWater == 2) { 

               iJiao + = 1 ؛ // النطاق: 1-20

               iGongLuWater + = 2 ؛ // النطاق: 1-20

           }   

           إذا (iJiao> = 60) { 

               iJiao = 0 ؛ 

               iGongLuWater = 0 ؛ 

           }   

  }    

  إذا (iLed> = 1000) {    

      الكتابة الرقمية (led ، منخفضة) ؛ // قم بإيقاف تشغيل LED بجعل الجهد منخفضًا

                  // تأخير (500) ؛ // انتظر ثانية ، النطاق: 200-2000

      آيليد = 1 ؛

            Serial.write (0xA5) ؛ // ”A5 هو 165

            Serial.write (0x5A) ؛ // "5A" تساوي 90

            Serial.write (0x05) ؛

            Serial.write (0x82) ؛

            Serial.write (0x00) ؛ // عنوان YePian

            Serial.write (0x20) ؛ // عنوان YePian

            Serial.write (0x00) ؛

            Serial.write (iYePian) ؛

            Serial.write (0xA5) ؛ // ”A5 هو 165

            Serial.write (0x5A) ؛ // "5A" تساوي 90

            Serial.write (0x05) ؛

            Serial.write (0x82) ؛

            Serial.write (0x01) ؛ // عنوان GongLu

            Serial.write (0x80) ؛ // عنوان GongLu

            Serial.write (0x00) ؛

            Serial.write (iGongLu) ؛

            Serial.write (0xA5) ؛ // ”A5 هو 165

            Serial.write (0x5A) ؛ // "5A" تساوي 90

            Serial.write (0x05) ؛

            Serial.write (0x82) ؛

            Serial.write (0x01) ؛ // عنوان LiuLiang

            Serial.write (0x60) ؛ // عنوان LiuLiang

            Serial.write (iLiuLiang) ؛ // LiuLiang هو 2800-3200

            Serial.write (0x80) ؛            

            Serial.write (0xA5) ؛ // ”A5 هو 165

            Serial.write (0x5A) ؛ // "5A" تساوي 90

            Serial.write (0x05) ؛

            Serial.write (0x82) ؛

            Serial.write (0x02) ؛ // عنوان ShuiDianZhan JieJuJiao

            Serial.write (0x60) ؛ // عنوان ShuiDianZhan JieJuJiao

            Serial.write (0x00) ؛

            Serial.write (iJiao) ؛

            Serial.write (0xA5) ؛ // ”A5 هو 165

            Serial.write (0x5A) ؛ // "5A" تساوي 90

            Serial.write (0x05) ؛

            Serial.write (0x82) ؛

            Serial.write (0x02) ؛ // عنوان ShuiDianZhan خارج الطاقة

            Serial.write (0x80) ؛ // عنوان ShuiDianZhan خارج الطاقة ؛

            Serial.write (iGongLuWater) ؛ // ShuiDianZhan out Powe تتراوح من 0 إلى 32000

            Serial.write (0x00) ؛            

  }    

أخيرًا ، قم بتسجيل الفيديو عبر الإنترنت. 

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

المصدر: أفلاطون داتا إنتليجنس