יום ראשון, 26 ביוני 2016

GUI ליצירת GUIs

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

למי שלא מכיר, את ה-GUI ליצירת GUI-ים אפשר להעלות באמצעות הפקודה guide.

נבחר באופציה Blank GUI לצורך יצירת GUI חדש, ולצורך הדוגמה – נכין GUI עם מערכת צירים בה יוצג גרף של 10 מספרים אקראיים שיוגרלו ויוצגו לאחר לחיצה על לחצן ייעודי בממשק המשתמש.
את מערכת הצירים נצייר בעזרת לחצן ה-Axes (חץ ירוק), ואת הלחצן שבעקבות לחיצה עליו יוגרלו המספרים האקראיים ויוצגו על מערכת הצירים – נצייר בעזרת לחצן ה-Push Button (חץ אדום):

GUIDE - ניתן ללחוץ להגדלה

כעת, אפשר ליהנות מיכולת נפוצה בסביבת MATLAB, שהיא האפשרות לקבל קוד MATLAB שקול לכל הפעולות שביצענו בצורה אינטראקטיבית בעזרת העכבר. לשם כך נלחץ על לחצן ה-Run Figure המסומן בעיגול כחול בתמונה למעלה (יש לאשר את ההודעה המוצגת וכן לבחור שם ל-GUI).

אם נלחץ על לחצן ה-Push Button ב-GUI שנוצר – לא יקרה דבר – וזה הגיוני בהחלט לאור העובדה שטרם הוגדר מה בדיוק צריך לקרות בעקבות לחיצה עליו. על מנת להגדיר את הפעולה שצריכה להתבצע (הגרלת 10 מספרים אקראיים והצגתם) – אפשר לחפש בקוד ה-MATLAB שנוצר בצורה אוטומטית היכן נמצאת השורה בה יש לכתוב את שורות הקוד הרלוונטיות, אבל יותר פשוט – לחזור לסביבה בה יצרנו את ה-GUI, ללחוץ עם הלחצן הימני של העכבר על ה-Push Button, ולבחור View Callbacks ואז Callback. בעקבות כך – תסומן ב-m file שהופק שורת הקוד שלאחריה יש לכתוב:
plot(rand(10,1))
את ה-GUI המעודכן אפשר לטעון באמצעות הרצת קוד ה-MATLAB שהרגע נערך (F5), והנה התוצאה:


כמובן שניתן לקמפל את ה-GUI הנ"ל לאפליקציית Stand Alone (קובץ exe) באמצעות ה-MATLAB Compiler, לצורך העברתו למחשב בו אין רישיון MATLAB פעיל, או לארוז את ה-GUI בתור App לצורך העברתו למחשב בו מותקן MATLAB (לחצו לסרטון).

ברור גם שניתן לייצר ממשקים מורכבים יותר (עשינו שימוש רק בשניים מבין הלחצנים שב-GUIDE). למעוניינים – מומלץ לבדוק את הקישור הבא, המכיל 41 דוגמאות ליכולות שימושיות של ממשקי המשתמש הגרפיים בסביבת MATLAB (לחצו פה), וכן את ממשק ה-App Designer שהתווסף ל-MATLAB בגרסת R2016a (לחצו למידע).

יום ראשון, 29 במאי 2016

מידול פיסיקלי

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

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

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

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

להלן סקירה של יכולות הכלים השונים של חברת MathWorks למידול פיסיקלי:

Simscape
Simscape הינו כלי למידול וסימולציה עבור מערכות פיסיקליות רב-תחומיות, המאפשר ליצור בצורה מהירה מודלים של מערכות פיסיקליות בסביבת התכנות הגרפי Simulink, ולסמלץ אותם. בעזרת הכלי, ניתן למדל מערכות כגון מנועים חשמליים, מיישרי זרם, מפעילים הידראולים, מערכות קירור ועוד, וזאת על ידי שילוב רכיבים בסיסיים לתוך דיאגרמת בלוקים אחת.
בנוסף, Simscape עוזר לפתח מערכות בקרה ולבחון ביצועים ברמת המערכת (System-Level). בעזרת ה- Simscape Language, ניתן ליצור רכיבים, ספריות ותחומים חדשים המבוססים על בלוקים פיסיקליים גנריים. כמו כן, ניתן להשתמש בביטויים ופרמטרים מסביבת ה- MATLAB ולסגור חוגי בקרה בסביבת ה- Simulink.
כפי שנכתב לעיל, קיימים כלים מתקדמים נוספים עבור מידול פיסיקלי, כלים היושבים על גבי פלטפורמת ה- Simscape והמספקים בלוקים מורכבים יותר ויכולות ניתוח נוספות. כל הכלים הללו, וכמובן Simscape, מאפשרים יצירת קוד C מתוך דיאגרמת הבלוקים במטרה לפרוס ולהריץ את המערכות הממודלות בסביבות סימולציה אחרות (HIL: hardware-in-the-loop).
למידע נוסף - לחצו פה.

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

Simscape Electronics
Simscape Electronics (ובשמו הקודם: SimElectronics) מספק ספריות רכיבים עבור מידול וסימולציה של מערכות אלקטרוניות ומערכות אלקטרומכאניות. הכלי כולל בלוקים המיצגים סוגי מנועים שונים, ממירי A/D, D/A, חיישנים, מפעילים ומוליכים למחצה (הרכיבים של המוליכים למחצה כוללים השפעות דינאמיות ולא לינאריות של הטמפרטורה על המערכת). ניתן להשתמש ברכיבי הכלי בכדי לפתח מערכות הפעלה אלקטרומכאניות ולבנות את התנהגות המודל במטרה להעריך ארכיטקטורות של מעגלים אנלוגים. הכלי מאפשר שילוב של תחומים פיסיקלים נוספים כגון: מכאניקה, חשמל, מעבר חום ועוד ממשפחת הכלים הפיסיקלים של Simscape. כמו כן, Simscape Electronics מאפשר פיתוח מערכות מורכבות כגון אלקטרוניקה של גוף הרכב, מכאניזם של מנועי סרבו בכלים תעופתיים, מגבירי שמע ועוד.
למידע נוסף - לחצו פה.

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

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

Simscape Power Systems
Simscape Power Systems (ובשמו הקודם: SimPowerSystems) מספק ספריות רכיבים עבור מידול, סימולציה וניתוח של מערכות זרם חזק (הספק). הכלי כולל מודלים של רכיבי הספק חשמליים, מכונות תלת-פאזיות, מנועים חשמליים, רכיבים לתמסורות מערכות זרם חילופין (FACTS) ורכיבים למידול מערכות אנרגיה מתחדשת. בנוסף, Simscape Power Systems מאפשר לחקור את ביצועי המערכת המתוכננת: ניתוח הרמוניות וחישוב עיוותי הרמוניות כולל (THD). הכלי מאפשר שילוב של תחומים פיסיקלים נוספים כגון: מכאניקה, חשמל, מעבר חום ועוד ממשפחת הכלים הפיסיקלים של Simscape.
למידע נוסף - לחצו פה.

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


יום חמישי, 21 באפריל 2016

פחית משקה אופטימלית

נניח שעליכם לתכנן פחית משקה על פי אילוצים מסויימים. למשל, גובה הפחית (h) חייב להיות קטן מ-15 ס"מ (בגלל המרווח בין מדפים בסופרמרקט). אילוץ נוסף שעליכם להתחשב בו, למשל, הוא שכמות המשקה בפחית צריכה להיות 300 מ"ל (נסמן את רדיוס הפחית באות r, ואז למעשה יש לעמוד בתנאי h*pi*r^2=300). כמו כן, משיקולי יציבות של הפחית – נדרש לשמור על יחס מסוים בין גובהה ורדיוסה – למשל, על גובה הפחית לא להיות גדול מארבע פעמים הרדיוס שלה (או, אם נעביר אגף, נקבל: 4*r-h>=0). ולסיום, משיקולי עלות של חומר הגלם המשמש לייצור מעטפת הפחית – יש למזער את פונקציית המחיר S(r,h)=2*pi*r*h+2*pi*r^2, המורכבת משטח המכסים (עליון ותחתון) ומשטח מעטפת הגליל שביניהם. אם נוציא גורם משותף ונגדיר וקטור x המכיל את משתני התכנון גובה ורדיוס, הרי שפונקצית המטרה sodaCost הינה:


האם יש דרך נוחה לפתור את בעיית האופטימיזציה הזו ?

התשובה היא כמובן כן, בעזרת MATLAB.

אחד מהכלים הפופולאריים בסביבת MATLAB הוא ה-Optimization Toolbox, המספק פונקציות למציאת פרמטרים הממזערים פונקציות מטרה תוך עמידה באילוצים שונים הנדרשים בבעיה. הכלי כולל פותרנים (solvers) מסוגים שונים, וכן ממשק משתמש גרפי נוח לשימוש.

נפתח את ממשק המשתמש המוזכר לעיל בעזרת הפקודה optimtool, ונזין לתוך חלקו השמאלי את הנתונים השונים כפי שמופיע בתמונה למטה (ניתן ללחוץ עליה להגדלה). יש לשים לב שפרט לקריאה לפונקצית המחיר (תוך שימוש באופרטור ה-@), הוזנו אי-השיוויון הלינארי (שיקולי היציבות של הפחית, אחרי שהבאנו אותם לצורה A*x<=b), הגבול התחתון של פרמטרי התכנון (רדיוס וגובה אי-שליליים), הגבול העליון שלהם (כאמור גובה קטן מ-15 ס"מ, אין מגבלה על הרדיוס) האילוץ הלא-לינארי (כמות המשקה בפחית. הפונקציה fooNonLin מובאת בהמשך, וגם לה קוראים בעזרת אופרטור ה-@) וערכים התחלתיים לאלגוריתם האופטימיזציה (רדיוס של 5 ס"מ, גובה של 4 ס"מ).



לאחר לחיצה על start, מתחיל תהליך האופטימיזציה, ובתמונה הבאה ניתן לראות מה פרמטרי התכנון שנמצאו כאופטימליים (מסומן בירוק - רדיוס של 3.6 ס"מ, גובה של 7.2) ולאיזה ערך הם הביאו את פונקציית המטרה (בצהוב). את התוצאות (ואף את הגדרת הבעיה) ניתן להעביר ל-workspace באמצעות האופציה המתאימה בתפריט File.


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

יום ראשון, 27 במרץ 2016

תכנון אנטנות מרובות אלמנטים בסביבת MATLAB


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

הקדמה

אנטנות הן חלק אינטגרלי בכל מערכת אלחוטית היום, והתכנון שלהן נעשה על ידי מומחים בתחום.  הכלים בהם מומחים אלו משתמשים הינם יקרים מאד, ולמרבה הצער ברוב המקרים קשה לשלבם בשלב החשוב של הסימולציה המערכתית. לעומת אותם כלים, בכלים Antenna Toolbox ו-Phased Array System Toolbox יש למהנדסי מערכת אפשרות לשלב בשלבים מוקדמים של תכנון המערכת שלהם מערכי אנטנות, בצורה נוחה ומהירה.

אנליזת אנטנה מרובת אלמנטים - Antenna Toolbox

ה– Antenna Toolbox הינו כלי שיצא לפני כשנה, ובאמצעותו ניתן לבצע אנליזה על מערך אנטנות. הגדרת האלמנט הבודד הינה פשוטה ביותר, וניתן לבחור מתוך למעלה מ-20 אנטנות מוכנות מראש או לייבא את הRadiation Pattern מתוכנות עיבוד אחרות (דוגמת CST). לאחר בחירת האלמנט הבודד נדרש להגדיר את המיקום של כל אלמנט בתוך מבנה מוגדר מראש (דוגמת URA) או בתוך מבנה שמוגדר על ידי המשתמש. דוגמאות לתוצאות אנליזה ניתן לראות בתרשים 1 למטה (ניתן ללחוץ להגדלה) - במקרה זה נבנה מערך של ארבעה אלמנטי-דיפול המסודרים בצורה ריבועית, וסביבת MATLAB ביצעה חישוב מלא של משוואות Maxwell על מנת לחשב השפעות coupling, edge ו-substrate characteristics.

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

שילוב בסימולציה - Phased Array System Toolbox

Phased Array System Toolbox הינו כלי בעל יכולות רבות לעיבוד אות מרחבי, אך בפוסט הנוכחי נתעמק רק בתחום האנטנות. לאחר אנליזת האנטנה והחלטה על מבנה המערך, שבוצעו בחלק הקודם, נרצה לראות את אפקט האנטנה בסימולציה. ובעזרת ה- Phased Array System Toolbox ניתן לבצע חישוב מרחבי של מעבר אות דרך האנטנה אל מגוון ערוצים וחזרה לאנטנה אחרת, וכמובן שהפלטפורמות לא חייבות להיות נייחות.
גם באמצעות ה- Phased Array System Toolbox קיימת אפשרות לבנות מערך אנטנות, אך במקרה זה לא יבוצעו חישובי משוואות Maxwell אלא חישובי סופרפוזיציה. קרי, תופעות לא לינאריות כמו coupling או edge effects לא יבואו לידי ביטוי. מצד שני – זמני החישוב יהיו קצרים יותר. מתי נעדיף להשתמש בכלי אחד לצורך סימולציה ולא בכלי האחר ? אפשר לראות סיכום ממצה בתרשים 2 (ניתן ללחוץ להגדלה).

תרשים 2 – תרשים החלטה לחישוב כיווניות אלמנט בודד בסביבת MATLAB
מידע נוסף
למידע נוסף על  Antenna Toolbox, לחצו פה.
למידע נוסף על Phased Array System Toolbox, לחצו כאן.

יום שני, 29 בפברואר 2016

תכנות מונחה-עצמים בסביבת MATLAB

תכנות מונחה-עצמים (Object-Oriented Programming) היא גישת תכנות המשתמשת בעצמים (Objects), המספקת למתכנת דרכים שונות לארגון ופישוט עבודתו, דבר חשוב במיוחד בפרויקטי תוכנה מורכבים. מרכיב עיקרי בגישה זו הוא המחלקה (Class), אשר מתאפיינת בתכונות (Properties) המגדירות אותה כלפי חוץ, ופעולות (Methods) אשר הינן פונקציות ייחודיות למחלקה. לעתים מבוצע גם שימוש באירועים (Events), אשר הינם הודעות השייכות למחלקה המוזנקות בהקשרים שונים.

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

למה לבצע תכנות מונחה-עצמים בסביבת MATLAB ? בעיקר בגלל שהדבר מאפשר לפתח תוכנות מיחשוב-טכני מורכבות - מהר יותר מאשר בעזרת שפות תכנות אחרות (כמו C++, C# ו-Java ), ומבלי צורך להתעסק ב-low-level שהן דורשות. ב-MATLAB המשתמש יכול להגדיר מחלקות בעצמו ישירות מהתפריט הראשי של התוכנה 

ולאחר מכן ליצור מהן אובייקטים, וכן באפשרות המשתמש לעשות שימוש באובייקטי-מערכת (System Objects) המגיעים עם הכלים השונים הפועלים בסביבת MATLAB. לפוסט בנושא אובייקטי-מערכת בבלוג זה, לחצו כאן.

ואחרי שיש לנו תוכנה – הגיע הזמן לבדוק אותה...

בדיקות יחידה (Unit Testing), למי שלא מכיר/ה את המושג, הן בדיקות ברמת יחידות המערכת הקטנות, שנועדו לאמת את פעילותן התקינה. עבור פיתוח מתקדם של תוכנות – בגרסת R2013a הוכנסה לסביבת MATLAB מסגרת בדיקות-יחידה (Unit Testing Framework), המאפשרת לכתוב בדיקות, להריץ אותן, ולנתח אותן. למידע נוסף, לחצו כאן.

למידע נוסף על תכנות מונחה-עצמים בסביבת MATLABלחצו כאן.