יישומי לוגיקה בבקרה

כיצד דיאגרמת סולם מסייעת להבין מושגים בבקרה וכיצד ניתן ליישם מושגים אלו בתוכנת הבקרה LabVIEW

דוגמא 8: הדלקת נוריות למשך שנייה במחזוריות (קודם סט א אח"כ סט ב)

פתרון דוגמא 8: הדלקת נוריות למשך שנייה במחזוריות בעזרת תוכנת LabVIEW!

כדי ליצור פעולה מחזורית ללא המתנה לעוד לחיצה על START בסוף כל מחזור נוספו להגדרת הטיימרים דרישות "או".

כך נראה פאנל המשתמש:

דוגמא 9: הדלקת נוריות למשך 2 שניות במחזוריות

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

דוגמא 10: הדלקת נוריות למשך 2 שניות במחזוריות

ב- LabVIEW התכנית נשארת אותה תכנית כמו זו שהוראתה קודם הגדרת המוצאים והטיימרים בעצם מתבצעת במקביל.

דוגמא 11: אורגן אורות

מטלה 4:

כתוב תוכנת LabVIEW לפתרון אורגן אורות לפי ההצעה שהראנו בדיאגרמות הסולם.

א. האם התוכנה שכתבת היא התוכנה היחידה או שקיימות שיטות נוספות לכתיבת תוכנה בשפת LabVIEW שמשיגות את אותה מטרה?

ב. מה לדעתך היתרונות והחסרונות בכל שיטה?

כיצד אתה מיישם את מה שלמדת על שערים לוגיים בעת כתיבת תוכנת בקרה בשפת LabVIEW?

דוגמא 12: רמזור מבוקר

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

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

דוגמא 13: היבהוב נורה בעזרת מונה

דוגמא 14: רמזור אמיתי

תחילה נבנה את טבלת המצבים:

וכעת נבנה את דיאגרמת הסולם לפי טבלת המצבים:

דוגמא 15: המחשה לשלושה מונים:

מטלה 5:

כתוב תכניות בשפת LabVIEW לתכניות שהוצגו בדיאגרמות הסולם בדוגמאות 13-15.

דוגמא 16: בקרת הפתיחה של כספת קוד סודי בעל 3 ספרות

רק בלחיצה על הספרות 1, 5 ואז על 9 תיפתח הכספת.

אחרת תבוטל ההפעלה.

פתיחת הכספת מיוצגת ע”י נורה שתסומן ע”י Y1

פתרון דוגמא 16 בקרת הפתיחה של כספת קוד סודי בעל 3 ספרות, בעזרת תוכנת LabVIEW:

הפתרון שיוצג כאן שונה בגישתו מזה בו השתמשו בדיאגרמת הסולם.

הפתרון מוצג בתמונות הבאות:

פאנל המשתמש:

התכנית עצמה מוצגת בתמונה הבאה:

דוגמא 17: שכלול קוד סודי בעל 3 ספרות

רק בלחיצה על הספרות 1, 5 ואז על 9 תיפתח הכספת. פתיחת הכספת מיוצגת ע”י נורה שתסומן ע”י Y1. זמן פעולת הנורה Y1 הוא שלוש שניות. זמן הלחיצה על הצירוף הוא 3 שניות, אחרת תבוטל ההפעלה. לחיצה על כל ספרה אחרת תבטל את ההפעלה ותפעיל אזעקה Y2. לחיצה על הספרה 1 תבטל את האזעקה.

שכלול נוסף למנעול קוד סודי מיישם מונים כדי להקשות על אדם להכניס קוד שגוי.

פיתרון דוגמא 17: תכנת בקרה ב- LabVIEW לכספת בעלת קוד סודי בעל 3 ספרות

הפתרון מבוסס על הפתרון הקודם, עם תוספת של טיימר המופעל ומונה זמן כאשר מונה הלחיצות שונה מ 0 (כלומר החל מהלחיצה הראשונה) , אם חולפות ה 3 שניות מוצא ה done שלו הופך ל "אמת". בפריים האחרון תנאי הפתיחה מתקיים אם ב 3 לחיצות יש 3 נכונות והזמן לא עבר. והאזעקה מופעלת אם ב 3 לחיצות אין 3 נכונים.

יישומי לוגיקה במערכות בקרה

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

  1. הדלקת נורית ע"י לחצן הפעלה למשך 5 שניות או תנועת רובוט קדימה במשך 5 שניות

  2. הנעת רובוט בקו ישר למרחק 1 מטר

  3. הנעת רובוט בקו ישר עד שחיישן הזוית מודד 1000 מעלות

  4. הדלקת נוריות

  5. רמזור פשוט

  6. רמזור משוכלל

  7. אורגן אורות

  8. קוד סודי

  9. מערכת הצבעה למועצת מנהלים

  10. רכבל

  11. מוסך ביתי

אנחנו ננסה להראות את הדוגמאות הללו כדי להדגים את העושר של בקרת מערכות הנדסיות באמצעות שתי גישות (ויש יותר):

1. האחת דיאגרמת סולם

2. והשנייה שפת תכנות LabVIEW.

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

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

מימוש שערים לוגיים בדיאגרמת סולם

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

מטלה 2:

א. התבונן בתרשים המעגל החשמלי הנמצא בעמוד 12, והשווה אותו עם השורה הראשונה בדיאגרמת הסולם שמופיע באיור בעמוד זה. הנורה C באיור בעמוד 12 היא למעשה Y באיור כאן. אם כך חיבור בטור של מפסקים מדליק נורה לפי איזה שער?

ב. ממש את שלושת החלקים של דיאגרמת הסולם באמצעות תוכנת LabVIEW.

ג. תכנן ממשק אדם-מכונה המאפשר ללחוץ על הלחצנים/המפסקים ולראות את הנורות נדלקות בהתאם לשערים הלוגיים השונים.

דוגמא 1: הדלקת נורית ע"י לחצן הפעלה למשך 5 שניות

למעשה המגע של הטיימר נפתח בתום 5 השניות וגורם לנורה לכבות.

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

בדיאגרמת הסולם וגם בתוכנה רואים לחצן. לחצן או למעשה חיישן מגע (Touch Sensor) או כפתור לחיצה (Push-Button). כל עוד אתה לוחץ יש מעבר זרם. ברגע שאתה משחרר הלחצן משתחרר והמעגל נפתח (או להפך).

בחירת חיישן מגע:

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

התכנית הבאה מחליפה את ההמתנה 5 שניות לקריאה מהירה מאד (כל מאית שנייה – 10 אלפיות שנייה), של לחצן החירום 2. והיא מאפשרת יציאה מהירה לפקודת העצירה של מוצא A אם זוהתה לחיצה או אם עברו 5 שניות. (בהמשך נראה שיש דרכים נוספות לאפשר מניית זמן ועצירה מיידית בתוכנת LabVIEW).

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

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

כלומר, תת-התכנית המהווה כלי לאחזקה עצמית מתחיל להוציא "אמת" במוצאו, אם ברגע זה מתקיים תנאי ההתחלה שלו או אם הוא כבר מוציא "אמת", ויפסיק להוציא אמת אם מתקיים תנאי ההפסקה שלו.

בנוסף אנו זקוקים לטיימר (Timer), קיים בתכנת LabVIEW כלי טיימר הקרוי Elapsed Time:

מגדירים בו את הזמן שרוצים שיחלוף (בשניות), ואת תנאי האיפוס שלו שהוא בעצם ההיפוך של התנאי בו רוצים שימדוד זמן, בד"כ לתנאי האיפוס האוטומטי שלו מחברים F כדי שלא יתאפס ומייד יתחיל למדוד זמן מחדש. המוצאים החשובים שלו הם הירוק המראה "אמת" כאשר סיים למנות את הזמן המוגדר Time has Elapsed, והכתום המציג כמה זמן חלף בעת במדידה Elapsed Time(S).

לאחר מספר בדיקות עם כלי זה התברר שיש לו שני חסרונות – אחד הוא שמשום מה תנאי ההתחלה שלו צריכים תמיד לקבל שער NOT כלומר מהווים היפוך לתנאי ההתחלה , והשני – הוא תופס מקום רב בפאנל הדיאגרמה. לאחר בדיקת מספר תכניות טיימר ברשת זוהתה תכנית שנותנת מענה לדרישות, התכנית שונתה כדי להפוך אותה לתת-תכנית Sub-vi אותו ניתן לשלב בתכניות אחרות בקלות. גם בכלי זה התגלתה בעיה כאשר נעשה שימוש במספר טיימרים, אך זו נפתרה על ידי כך שיוצרים מספר תכניות כאלו וכל אחת בעלת שם שונה. בתיקיית המורים, יעקב ברק יצר 6 תכניות כאלו והשמות שנתנו להן הם: השמות שנבחרו הם: timer#1_sub.vi, timer#2_sub.vi timer#3_sub.vi וכן הלאה ואם יש צורך בנוספים לא בעיה לשמור העתק של אחד מהם בשם אחר. התכנית עצמה מורכבת אך נתייחס אל הצלמית שלה ואיך מתחברים אליה עם הנתונים המתאימים:

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

תכנית ב- LabVIEW תיראה כך בעזרת שני הכלים שהוזכרו (אחזקה עצמית וטיימר), התכנית כמעט זהה לתכנית דיאגרמת הסולם:

הערה – נראה כאילו יש הבדל בין התנאי לפעולת המערכת כאן לעומת זה שבדיאגרמת הסולם אך בעצם התנאים זהים , שם כתוב בשורה הראשונה – שהמערכת בפעולה כ START לחוץ וגם STOP לא וגם הטיימר לא סיים למנות , עם אחזקה עצמית.

בדיאגרמת הסולם השתמשו ב"לא "A וגם "לא B ", בתוכנית ה- LabVIE בתת התכנית Self Latching מתבצע ההיפוך לתנאי ההפסקה שהוא A או B כדי שההיפוך שלהם יהיה חלק מתנאי ההפעלה וכך מדובר בעצם בדיוק באותם תנאים להפעלת הנורה.

דוגמא 2: הפעלת מנוע למשך 5 שניות

בשני האיורים הבאים מופיעות שלוש תוכניות שונות בשפת LabVIEW שלמעשה מבצעות כמעט אותו דבר, במקום להדליק נורה התוכנה מפעילה מנוע למשך 5 שניות.

דוגמא 3: הנעת רובוט בקו ישר למרחק 1 מטר

שיטה ראשונה:

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

שיטה שנייה:

דוגמא 4: הנעת רובוט בקו ישר עד שחיישן הזוית מודד 1000 מעלות

שיטה ראשונה:

שיטה שנייה:

שיטה שלישית:

דוגמא 5: הדלקת שתי נוריות 2 שניות כל אחת

המטרה: הפעלת נורית ע”י לחצן הפעלה למשך 2 שניות

מטלה 3:

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

דוגמא 6: הדלקת נוריות למשך 2 שניות במחזוריות

ניתן להציג את התכנון הראשוני של דיאגרמת סולם באמצעות טבלת מצבים:

והפתרון בLabView ייראה מאד דומה:

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

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

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

כך נראה פאנל המשתמש בשלושה מצבים (לפני הפעלה, בשתי השניות הראשונות ובאחרונות):

דוגמא 7: הדלקת שני סטים של נוריות (קודם סט א ואח"כ סט ב)

התכנון הראשוני של דיאגרמת הסולם באמצעות טבלת מצבים:

וכך נראית התכנית בדיאגרמת סולם:

פתרון בעזרת LabVIEW:

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

הפעל נורה 1 אם המערכת בפעולה ועד גמר מניית טיימר 1, הפעל נורה 2 אם המערכת בפעולה ו-5 סיים למנות ו- 2 לא סיים למנות וכך הלאה.

כך נראה פנל המשתמש:

לולאת הגדרת הפעולות:

לולאת הגדרת הטיימרים: