יום ראשון, 18 ביולי 2010

שימו לינק ל-Simulink !

זו, פחות או יותר, היתה בקשה שהתקבלה באחת מהתגובות לפוסט של חודש אפריל. אז לרגל סיום המונדיאל, ולקראת שני סמינרים בנושא Simulink, הנה פוסט שבמקרה הטוב יעשיר את הידע שלכם בשימוש בתוכנה, ובמקרה הרע – רק יסייע לכם להעביר את הזמן... אז מה זה בכלל Simulink ? Simulink היא סביבה לביצוע סימולציות המשלבות מגוון תחומים (multidomain simulations) וכן לתכנון מבוסס-מודל (Model-Based Design) של מערכות דינמיות ומשובצות-מחשב. היא מספקת ממשק גרפי אינטראקטיבי ואוסף של ספריות בלוקים (הניתן להתאמה אישית), אשר יחד, מאפשרים למשתמש לתכנן, לסמלץ, לממש ולבדוק מגוון מערכות תלויות-זמן, כולל מערכות תקשורת, בקרה, עיבוד אות, עיבוד וידאו ועיבוד תמונה.
כדי לפתוח את התוכנה, יש לכתוב Simulink ב-command window של MATLAB, או פשוט ללחוץ על האייקון של Simulink:


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


אבני הבניין מחולקות לכלים מתחום הבקרה, מערכות תקשורת, עיבוד אות, עיבוד וידאו ותמונה, אוירונאוטיקה וכו'. חבילת Simulink בסיסית מגיעה, כמו חבילת MATLAB בסיסית, עם אוסף די עשיר של בלוקים שאמורים לסייע לכם במידול מערכות. אך כמובן ששימוש באוספי הבלוקים הנוספים, המכונים Blocksets והנמכרים בנפרד, אמור לחסוך מכם את הצורך לבנות בלוקים מאבני הבניין הבסיסיות, וכמובן את הצורך לוודא שהבלוקים שיצרתם עושים את העבודה כהלכה...

כעת, על מנת להדגיש את היתרון של Simulink על MATLAB בפיתוח של מערכות תלויות-זמן, ננסה להשתמש בכל אחד מהכלים על מנת לצייר גרף של אות סינוס, על פני 10 שניות.

ב-MATLAB, עלינו להשתמש בשורות הקוד הבאות:


ב-Simulink, לעומת זאת, אין צורך ב"כתיבת" השורה הראשונה (זו שמגדירה את וקטור הזמן) ! ראשית, יש לפתוח מודל ריק חדש (המקבילה של פתיחת m-file ריק חדש) על ידי לחיצה על New Model מתוך ה- Simulink Library Browser:

ואז, יש לגשת למחיצת sources של Simulink, לסמן את בלוק ה-Sine Wave, ולא לעזוב את לחצן העכבר עד שמביאים אותו אל מעל המודל הריק.

בצורה דומה, יש להביא למודל את בלוק ה-Scope שבמחיצת Sinks של Simulink, לקבלת:


כעת, כל שנותר הוא רק להגדיר ל-Simulink איזה בלוק מכניס נתונים לבלוק האחר (די טריוויאלי במקרה הזה, אך לא כל כך טריוויאלי במקרה של מודל המכיל חצי מיליון בלוקים). הדבר נעשה על ידי סימון בלוק המוצא (Sine Wave), לחיצה על מקש Ctrl במקלדת, ועזיבת המקש רק לאחר סימון בלוק היעד (Scope).


כך בעצם חיברנו בין הבלוק שיוצר לנו את גל הסינוס, ובין הבלוק שמציג אותו. המודל הסופי מופיע לעיל, ואם תלחצו על לחצן ה-Start simulation המסומן בשורה השניה מלמעלה, ואז קליק-כפול על בלוק ה-Scope, תקבלו את הגרף המבוקש. לחיצה על לחצן המשקפת  (Autoscale) תניב תוצאה זהה לזו שהניב קוד ה-MATLAB, אך כפי שנכתב – ללא צורך בהגדרת וקטור הזמן.

מדוע ב-Simulink אין צורך להגדיר את וקטור הזמן? מה קורה כשלוחצים פעמיים על בלוק ה-Sine Wave? כיצד ניתן לשלב קוד MATLAB או קוד C בתוך מודל Simulink? האם ידעתם שניתן להמיר מודל Simulink לקוד C, VHDL או Verilog בצורה אוטומטית? ולמשתמשים המנוסים – מה המודל הכי גדול שיצרתם עד כה? אגב, אין צורך לספור ידנית את מספר הבלוקים, פשוט ניתן להשתמש בפקודת sldiagnostics...