IOT

בקרת משאבת Arduino+ תצוגת STONE HMI

מערכת הוויסות החכמה של הלהב היא טכנולוגיה מוגנת בפטנט, המשמשת במערכת הבקרה המיינסטרימית של תחנות כוח מים גדולות, בינוניות וקטנות שונות ותחנות שאיבה. פרויקט זה משתמש במסך המגע התעשייתי הטורי האמין כממשק אדם-מכונה כדי להציג פרמטרים יומיים ומינון להב בזמן אמת, הספק פלט, זרימה מיידית ומידע אחר, כהצגת אפקט הפעולה. בנוסף, מתוכננים גם יומן מצב העבודה וטופס אזעקת תקלות, וכפתור ההמתנה שמור. הפרויקט משתמש במסך המגע הטורי להצגת נתונים ותצוגת חיווי שקופיות. האביזרים הם כדלקמן:  

  1. STVI056WT-01 מסך מגע טורי ולוח מתאם STONE V1.2;  
  2. לוח שליטה תואם של ארדואינו;  

תיאור קצר של פונקציית הממשק של מערכת בקרת ויסות להב חכמה.  

ישנם שלושה כפתורים בדף הבית, עליהם ניתן ללחוץ כדי להיכנס למערכת תחנת הכוח הידרומית המתאימה, למערכת בקרת תחנת משאבה ולממשק המדריך למשתמש (עם כפתורים רזרביים). ממשק המדריך למשתמש מציג את המסגרת של מערכת ההדגמה, כפי שמוצג באיור הבא:

(ממשק ביתי של תוכנת Enlegi Blade Intelligent Adjustment Control Demonstration Control)

בממשק מערכת הבקרה של תחנת כוח הידרו, ישנם לחצני התחלה ועצירה ותצוגת מצב, דירוג (כולל מתח נקוב, הספק נקוב ומהירות מדורגת) וערך בקרה (כולל זווית גובה להב המדחף והספק מוצא). בנוסף, יכולים להיות גם כפתורי קפיצת עמוד אחרים (כגון דף הבית, יומן מצב עבודה, אזעקת תקלות וכפתורי המתנה אחרים). ביומן מצב עבודה ובדף אזעקת תקלות, יכול להיות כפתור חזרה כדי לחזור לדף זה. התרשים שלהלן:

           (ממשק תצוגת בקרה חכמה של תחנת כוח מים)

תיאור פונקציית ממשק מערכת בקרת תחנת משאבה. התרשים שלהלן:

                            (ממשק פונקציה של מערכת בקרת תחנת משאבה)

בממשק הפונקציונלי של תחנת המשאבה, ניתן לשנות את המצב ולהפעיל ולכבות את אספקת החשמל של המערכת כולה כדי להציג את הפרמטרים המדומים בפועל (כגון מינון להב, קצב זרימה מיידי, כוח פלט) ועוד. ניתן להחליף ממשקים (כגון יומן מצב עבודה, דוח אזעקת תקלות). במקביל, ניתן להציג גם ערכי מערכת (מספר כולל של להבים, הספק נקוב, קצב זרימה מוגדר). לממשקים אחרים יכולים להיות גם, כגון יומן מצב עבודה (ניתן להזמין תוכן מספר, זמן התרחשות, פרטי אירוע, הערות), אזעקת תקלה (ניתן להזמין תוכן מספר, זמן התרחשות, פרטי אזעקה, קוד אזעקה וכו'), שני ממשקים יכולים להיות עם כפתור החזרה, יכול לחזור לממשק הפונקציונלי של תחנת המשאבה.  

רעיון עבודה:  

מסך יציאה טורית משמש כממשק אדם-מכונה ומתקשר עם לוח הפיתוח של Arduino. הלוח מקבל פקודות לחצנים של מסך מגע ומשדר נתונים למסך מגע ביציאה טורית לתצוגה סינכרונית. סולם המחוון נועד להציג שינויים בעוצמה באופן דינמי. סמלים של מתג הפעלה, סכין הפעלה, מתג מצב וסכין מצב נועדו ליצור קבצי ICON ולהחיות את השפעות הפעולה של אספקת החשמל והמצב. בנוסף, בתוכנית ההדגמה של Arduino, נעשה שימוש בזיכרון משתנה לקריאת הוראות לקבלת מצב אספקת הכוח והמצב, כדי לשלוט בהדמיית נתוני הפלט ולהוציא את חלון הכמות בפועל למסך היציאה הטורית.  

שלבי עבודה:  

  1. הגדרת חומרה;  
  2. א) חבר את לוח הפיתוח של Arduino ו-USB ללוח ההמרה של היציאה הטורית;  
  3. ב) חבר את מסך מגע STONE עם לוח ההורדה של יציאת USB טורית ולוח מתאם USB ליציאה טורית;  
  4. ג) חבר את מסך היציאה הטורית ואת ספק הכוח של לוח הפיתוח של Arduino;  
  • יצרו 3 ממשקים של מסך יציאה טורית, קובץ אייקון מונפש ו-Slider Scale וייבאו אותם לפלטפורמת פיתוח המסך STONE SONE TOOL BOX (תוכנת עיצוב GUI);  

3, באמצעות איתור באגים בפקודה טורית, ולאחר מכן תכנות להשגת בקרת תחנת משאבה ופונקציות הדגמה של בקרת תחנת כוח הידרו.  

 לאחר מכן, תיעד את תהליך הפיתוח הספציפי.

ראשית, הגדר את חיבור החומרה.  

עשה עבודה טובה בחיבור כל החלקים על פי נהלי העבודה:

לאחר מכן, צור את תמונת המחוון ICON.  

הסמלים של הכפתורים והסכין המשמשים בפרויקט זה עשויים כדלקמן:  

(מתג בקרת תחנת משאבה, אנימציית סכין קובץ ICON 8. דפדוף ברשימת ICO)

בשורת התפריטים של STONE TOOL BOX (תוכנת GUI Design), לחץ על Icon generation Tool תחת תפריט Tool (T) כדי להופיע תיבת הדו-שיח Icon Tool. לחץ על "בחר נתיב תמונה" בתחתית תיבת הדו-שיח כדי לבחור נתיב תמונה של סמל. לחץ על הלחצן "צור קובץ ICON" כדי לארוז את קבצי ה-BMP בנתיב ליצירת קובץ ".ico" המזוהה על ידי פלטפורמת STONE TOOL BOX (תוכנת GUI Design). לחץ על הלחצן" תצוגה מקדימה "כדי להציג את רשימת הסמלים בקובץ המיובא.ico "דחוס.  

לחצן להנפשת סמל BMP, פיקסל כמו לעיל (בקרת אייקון משתנה, הגודל של אותו מיקום צריך להיות זהה), בקרת תחנת משאבה 8 תמונות חתוכות לאותה תיקייה. לאחר מכן, בצד שמאל של מסך STONE TOOL BOX (תוכנת GUI Design), בחר את כרטיס עמוד הסמל והוסף אותו לקובץ Ico הדחוס 7. באמצעות כפתור "הוסף אייקון" תחת "רשימת אייקונים". הכניסו את כל 6 התמונות של מצב מתג הבקרה של תחנת כוח הידרו בתיקייה אחרת וסדרו אותן לפי סדר 1-6. צור את "6. Ico" קובץ, ולאחר מכן בצד שמאל של SONE TOOL BOX (תוכנת עיצוב GUI) במסך, בחר את כרטיס עמוד הסמל והוסף את "6. קובץ Ico באמצעות כפתור "הוסף אייקון" תחת "רשימת אייקונים".  

כעת ייבא את סמל התמונה לתוך STONE TOOL BOX (תוכנת GUI Design) וצור את כפתור הפונקציה.  

השיטה של ​​9-variable-animation icon.wmv עדיין מאומצת בפרויקט זה כדי לממש את פונקציית האנימציה. צילום המסך של הגדרת הפרמטר הוא כדלקמן:  

            (דיאגרמת תכונה של ICON משתנה של תחנת כוח הידרומית)

משמאל לימין מוצגים פרמטר ICON הגדרות של שלושת המשתנים של עמוד הפונקציות של תחנת כוח הידרו: התחלה, עצירה ומצב. כתובות הזיכרון שלהם מוגדרות לאותו (0x0039) וטווחי הנתונים שלהם זהים, כך שהשינויים שלהם מסונכרנים. קבצי הסמלים הם 6. Ico, והמספרים הסידוריים המתאימים של Icon הם 1 ו-2, 3 ו-4, 6 ו-5 בהתאמה, שנבחרים בהתאם למצב בפועל.  

אפקט האנימציה של מצב הכפתורים מושג באמצעות לחצנים מצטברים. האיור הבא מציג את הפרמטרים של כפתור ההגדלה משמאל וכפתור ההכרעה מימין. הכתובת היא 0x0039, שתיהן זהות לזו של ה-Variable ICON.

(דיאגרמת תכונה של כפתור אינקרמנטלי עם אותה כתובת זיכרון)

(דיאגרמת תכונת ICON משתנה של מצב סכין כפתור של תחנת משאבה)

משמאל לימין מופיעים פרמטר ICON הגדרות של ארבעת המשתנים של עמוד הפונקציות של תחנת המשאבה: לחצן הפעלה, סכין הפעלה, סכין מצב וכפתור מצב. כאן, שני קבצי האייקון הם 8.ICO, וטווח הנתונים שלהם זהה, שבו כתובת הזיכרון של אותו תשתנה באופן סינכרוני.  

אנימציות מצב לחצנים מיושמות גם עם לחצנים מצטברים. באיור הבא, הצד השמאלי של לחצן הפחתת אספקת החשמל והצד הימני של לחצן הגדלה במצב הם הפרמטרים של לחצן הפחתת אספקת החשמל. הכתובות זהות לאיקון המשתנה לעיל, בהתאמה 0x0009 ו-0x000A. זה יותר ממצב העיבוד הגבול של כפתור פינג פונג.

(דיאגרמת תכונת לחצן מצטברת של מצב לחצן תחנת משאבה משתנה ICON משתנה עם אותה כתובת זיכרון)

בנוסף, הספק הפלט של תחנת המשאבה מוצג באמצעות סמל הזזה, כפי שמוצג באיור למטה:

תכונות הפרמטר שלו הן:

(סמל הזזה של כוח המוצא של תחנת המשאבה - תיבת מאפיינים בסולם Slider)

הסמל של בקרת סולם Slider זה נקרא ב-DEMO הרשמי 24.ico. השיטה להוספת קובץ 24.ico זהה לעיל. כתובת הזיכרון של בקרת Slider Scale היא 0x0180, אותה ניתן לכתוב בתוכנית MCU עם הוראות 82 (כפי שמוצג בתמונה למעלה, הטווח מוגדר ל-0-100) כדי לשנות את מיקום הסמל.  

בפרט, הסטטוס של כפתורי אספקת החשמל והמצב בפרויקט זה נקרא מכתובת הזיכרון 0x0009, 0x000A ו-0x0039 של מסך היציאה הטורית דרך הוראות 83. 

ההוראות בהן נעשה שימוש הן כדלקמן:  

A5 5A 04 83 00 09 02  

המשוב של מסך היציאה הטורית הוא כדלקמן:  

A5 5A 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, מערכת yepian enlaiji.

  מפעיל נורית LED לשנייה אחת, ואז מכבה לשנייה אחת, שוב ושוב.

  הכתובת 0x0020 היא הכתובת של מספר YePian;

  הכתובת 0x0160 היא הכתובת של עכשיו LiuLiang;

  הכתובת 0x0180 היא הכתובת של כוח החוץ של Bengzhan;

  הכתובת 0x0260 היא הכתובת של Jiejujiao;

  הכתובת 0x0280 היא כתובת של הספק מים;

  הכתובת 0x0009 היא מקש הפעלה בנגז'אן;

  הכתובת 0x000A היא מפתח מצב bengzhan;

  הכתובת 0x0039 היא מפתח חשמל מים.

  קוד דוגמה זה נמצא בקובץ של frank. 20210611

 */

// לפין 13 יש נורית LED המחוברת ברוב לוחות הארדואינו.

// תן לזה שם:

int led = 13;

int iYePian = 0; //0x0020 עבור המספר של YePian!

int iGongLu = 0; //0x0180 עבור The GongLu!

int iLiuLiang = 0; //0x0160 עבור The now LiuLiang!

int iJiao = 0; // 0x0260 עבור The JieJuJiao!

int iGongLuWater = 0; //0x0280 עבור The Water GongLu! הערך הוא 0-50000!

int iLed = 1; //זמן עיכוב num.

int iNum = 0 ; //קרא ב-char num.

int iNum2 = 0; //קרא ב-char num2 עבור ShuiDianZhan!

int iPower = 2; //פסל מפתח 0x0009

int iMode = 2; //פסל מפתח 0x000A

int iPowerWater = 2; //פסל מפתח 0x0039

// שגרת ההתקנה פועלת פעם אחת כשלוחצים על reset:

void setup () {                

  // אתחל את הפין הדיגיטלי כפלט.

  pinMode(led, OUTPUT);     

  Serial.begin(115200); // פתח את פונקציית התקשורת הטורית והמתן עד שהיציאה הטורית תיפתח  

while (!Serial) {

    ; // המתן לחיבור של יציאה טורית. דרוש לליאונרדו בלבד

  }  

}

// שגרת הלולאה עוברת שוב ושוב לנצח:

loid loop () {

  int inChar;

    if (iLed == 900) {     

//——- קרא ערך 0x0009 ו-0x000A———- 

            Serial.write(0xA5); //"A5" הוא 165

            Serial.write(0x5A); //"5A" הוא 90

            Serial.write(0x04); //אורך

            Serial.write(0x83); // לקרוא!

            Serial.write(0x00); // כתובת של מקש ההפעלה בנגז'אן!

            Serial.write(0x09); // כתובת של מקש ההפעלה בנגז'אן!

            Serial.write(0x02); // 0x0009(כוח) ו-0x000A(מצב)

//———ערך החזרת STONE יהיה "A5 5A 08 83 00 09 02 00 01 00 02"——

     }

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

    if (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 "——

     }

  // קרא את ההודעה שנשלחה על ידי היציאה הטורית:

  if (Serial.available() > 0) { inChar = Serial.read(); }

  if (inChar == 0x09) { iNum = 1 ; }

  if ((inChar == 0x02)&&(iNum == 1)) { iNum = 2 ; }

  if ((inChar == 0x00)&&(iNum == 2)) { iNum = 3 ; }

  if ((inChar == 0x01)&&(iNum == 3)) {  

      iNum = 4 ;

      if(iPower != 1){

          iPower = 1 ; //פועל!

          iLiuLiang = 10;

          iGongLu = 50;

          iYePian = 10 ;         

      }

   }

   if ((inChar == 0x02)&&(iNum == 3)) {  

      iNum = 4 ;

      iPower = 2 ; //כיבוי!

      iLiuLiang = 0;

      iGongLu = 0;

      iYePian = 0 ;

   }

   if ((inChar == 0x00)&&(iNum == 4)) { iNum = 5 ; }

   if ((inChar == 0x01)&&(iNum == 5)) {  

      iNum = 0 ;

      iMode = 1 ; //המצב טוב!

   }

   if ((inChar == 0x02)&&(iNum == 5)) {  

      iNum = 0 ;

      iMode = 2 ; //המצב כבוי!

      if(iPower == 1)iGongLu = 60 ; //GongLu מוגדר ל-60%!

   }

  //——————0x0009 ו-0x000A מקש לקרוא בסדר! iPower\iMode בסדר!——————————-

   if (inChar == 0x39) { iNum2 = 1 ; }

  if ((inChar == 0x01)&&(iNum2 == 1)) { iNum2 = 2 ; }

  if ((inChar == 0x00)&&(iNum2 == 2)) { iNum2 = 3 ; }

  if ((inChar == 0x01)&&(iNum2 == 3)) {  

      iNum2 = 0 ;

      if(iPowerWater != 1){

          iPowerWater = 1 ; //פועל!       

          iJiao = 0 ;

          iGongLuWater = 0 ;

      }

   }

   if ((inChar == 0x02)&&(iNum2 == 3)) {  

      iNum2 = 0 ;

      iPowerWater = 2 ; //כיבוי!

   }

  //——————0x0039 מקש קרא בסדר! iPowerWater בסדר!—————————-

  עיכוב (1); 

  iLed += 1;   

  if (iLed == 500) {  

      digitalWrite(led, HIGH); // הפעל את הנורית (HIGH היא רמת המתח)

                  //delay(500); // המתן שנייה, טווח:200-2000

           if(iPower == 1) { 

               iYePian += 1; //טווח:1-20

               iLiuLiang += 1; //טווח:1-20

               if(iMode == 1) iGongLu += 5; //טווח:1-20

           }   

           if(iYePian >= 14 ) { iYePian = 10; }   

           if(iGongLu >= 70) { iGongLu = 50; }   

           if(iLiuLiang >= 14) { iLiuLiang = 10; }   

           if(iPowerWater == 2) { 

               iJiao += 1; //טווח:1-20

               iGongLuWater += 2; //טווח:1-20

           }   

           if(iJiao >= 60 ) { 

               iJiao = 0; 

               iGongLuWater = 0; 

           }   

  }    

  if (iLed >= 1000) {    

      digitalWrite(led, LOW); // כבה את ה-LED על ידי הפיכת המתח לנמוך

                  //delay(500); // המתן שנייה, טווח:200-2000

      iLed = 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 out Power

            Serial.write(0x80); // כתובת של ShuiDianZhan out Power;

            Serial.write(iGongLuWater); //ShuiDianZhan out Powe הוא 0–32000

            Serial.write(0x00);            

  }    

לבסוף, הקלט את הסרטון באינטרנט. 

חבר את ספק הכוח והתקשורת, חבר את לוח הפיתוח של Arduino לתקשורת היציאה הטורית, צפה בממשק הפונקציונלי של תחנת כוח הידרו ותחנת השאיבה במסך היציאה הטורית, גע במתג כדי לבדוק את האפקט, והחלק את הסמל והנתונים תקינים .  

מקור: מודיעין נתונים אפלטון