מדריך הוראות בקר תנועה של SERVOSILA

SERVOSILA Motion Controller Instruction Manual

לוגו SERVOSILA

בקר תנועה של SERVOSILA

SERVOSILA-Motion-Controller-מוצר

על בקר תנועה של Servosila

Servosila Motion Controller היא תוכנה משובצת לשליטה בתנועה של מערכות רובוטיות רב-ציריות מודרניות. התוכנה פועלת על לינוקס, ווינדוס או כקושחה על MCUs משובצים.SERVOSILA-Motion-Controller-תמונה-1

Servosila Motion Controller משתמש בקוד G למטרות הבאות:

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

ארכיטקטורת תוכנה

Servosila Motion Controller, המוצג כתיבה אפורה בתרשים ארכיטקטורה למטה, פועל כתהליך רקע ב-Linux או Windows. התהליך מתקשר לכונני סרוו באמצעות רשת CAN או USB. תהליך בקר התנועה מספק ממשק זיכרון משותף עם זמן אחזור נמוך לתקשורת בין תהליכים עם תהליך יישום יחיד, המוצג כקופסה לבנה בתרשים. כדי להרחיק את המורכבות של ממשק הזיכרון המשותף, ספרייה מקושרת דינמית בשם Servopilot DLL מסופקת עם בקר התנועה. ה-DLL ה"דק" חושף API הרבה יותר פשוט (בהשוואה לממשק הזיכרון המשותף) לשליחת פקודות קוד G ל-Motion Controller ולקבלת מידע טלמטריה ומצב בחזרה. ה-API של DLL מתואר במסמך זה.SERVOSILA-Motion-Controller-תמונה-2

באופן פנימי, לתהליך Motion Controller יש Pipeline 0 ו-Pipeline 1 לקבלת פקודות G-code מתהליך יישום. הצינורות הם מאגרים מחזוריים בגודל קבוע. ישנם שני צינורות כך שניתן לבצע שני זרמים עצמאיים של פקודות קוד G במקביל במידת הצורך. בעת שליחת פקודת G-code חדשה, תהליך יישום עשוי לבחור לצרף את הפקודה לצינור זה או אחר או להחליף פקודות בצינור עם קבוצה חדשה של פקודות. פקודות קוד ה-G מבוצעות על ידי מכונה וירטואלית, מרכיב פנימי בתהליך ה-Motion Controller. מכיוון שפקודות קוד G מוגשות על ידי תהליך יישום בצורת טקסט, ישנו מהדר פנימי שמתרגם את הטקסט לקוד בינארי פנימי המובן למכונה הווירטואלית. אפשר לשלוח פקודה בשורה אחת של קוד G, כמו גם טקסט של תוכנית G-code שלמה. המהדר מעבד את הטקסטים שורה אחר שורה ודוחף את הפקודות לצינורות לביצוע על ידי המכונה הוירטואלית. המכונה הווירטואלית מעבדת את הצינורות על בסיס "ראשון נכנס, ראשון יוצא" (FIFO). לבקר התנועה יש תדר לולאת בקרה שניתן להגדרה (למשל 500 הרץ) השולטת בביצועים של מערכת בקרת התנועה כולה. מותר לצרף תהליך יישום בודד לתהליך בקרת תנועה בודדת בלבד. ניתן להפעיל מספר תהליכי בקרת תנועה על ידי הקצאת מזהי_מזכר_משותף ייחודיים. ה-API של Servopilot DLL אינו בטוח בשרשור או נכנס מחדש. ניתן לכתוב את תוכניות היישום בכל שפת תכנות התומכת בטעינת ספריות מקושרות דינמית (DLL). האפשרויות האופייניות הן C++, Python, C#, MATLAB ו- LabView.

API של Servopilot DLL

מתחבר ל-Motion Controller

  • חיצוני "C" bool connect(int shared_memory_id);
  • extern "C" bool disconnect();

הפונקציה connect() מחברת את Servopilot DLL למקטע זיכרון משותף המשמש לתקשורת בין תהליכים בין תהליך יישום לתהליך בקר התנועה. לתהליך Motion Controller יש זיהוי shared_memory_id ייחודי, מספר שלם מוגדר מראש. הפונקציה לוקחת את המזהה הזה כארגומנט היחיד. הפונקציה מחזירה true אם קטע זיכרון משותף עם המזהה הנתון צורף בהצלחה. הפונקציה disconnect() מנתקת את Servopilot DLL מקטע הזיכרון המשותף. קריאה לשגרה זו בסוף תהליך בקשה היא אופציונלית.

שליחת פקודות G-code לתהליך Motion Controller

  • extern "C" bool gcode(const char* program_text);
  • extern "C" bool gcode_replace(const char* program_text);
  • חיצוני "C" bool execute (const char* program_text);
  • extern "C" bool execute_replace(const char* program_text);

הפונקציה gcode() דחפה פקודת G-code או פקודות מרובות לצינורות של תהליך ה-Motion Controller. כל פקודות קוד G קודמות שהיו בצנרת נשמרות. צינור הוא חיץ מחזורי FIFO. הפקודות החדשות מצורפות לצינורות לביצוע לאחר ביצוע כל הפקודות הקודמות מהצינור. הפונקציה לא ממתינה לביצוע הפקודות בפועל; זה פשוט דוחף את הפקודות לצינורות וחוזר. הפונקציה gcode_replace() מנקה תחילה את כל הצינורות ולאחר מכן דוחפת פקודות חדשות לצינורות לביצוע עדיפות. כתוצאה מכך, בקר התנועה קוטע את כל התנועות המתמשכות ומיד ממשיך בתנועות חדשות המוגדרות על ידי פקודות קוד G שנתקבלו לאחרונה. החלפה כזו יכולה להיעשות עם מהירות תדר לולאת הבקרה, למשל עבור בקרה מבוססת מומנט. הפונקציה לא ממתינה לביצוע הפקודות החדשות בפועל. הפונקציה execute() זהה ל-gcode() אלא שהקריאה של הפונקציה חוזרת רק לאחר שהפקודות החדשות של G-code בוצעו. שימו לב שכל הפקודות הקודמות שכבר ישבו בצנרת מבוצעות תחילה. אדוואןtage של execute() מעל gcode() הוא בפשטות של זרימת בקרת היישום. חיסרוןtage היא שקריאה execute() עשויה לעכב את תהליך היישום לתקופה ממושכת, לכל זמן שנדרש כדי לבצע את כל פקודות ה-G-code מכל הצינורות. הפונקציה execute_replace() זהה לפונקציה gcode_replace() אלא שהקריאה של הפונקציה חוזרת רק לאחר ביצוע הפקודות החדשות שנשלחו.

מנקה את הצינור של פקודות G-code קודמות ממתין עד שהפקודות החדשות יתבצעו בפועל ובכך מעכב את תהליך הגשת בקשה
gcode() לֹא לֹא
gcode_replace() כֵּן לֹא
לְבַצֵעַ() לֹא כֵּן
execute_replace() כֵּן כֵּן

כל הפונקציות חוזרות כ-true אם פקודות ה-G-code החדשות נשלחו בהצלחה לצינורות של תהליך ה-Motion Controller לביצוע.

סנכרון תהליכים

  • extern "C" int synchronize();

הפונקציה synchronize() מאפשרת לתהליך היישום להמתין עד שתהליך בקרת התנועה יסיים לבצע את כל פקודות ה-G-code שנשלחו בעבר. הקריאה של הפונקציה נעצרת עד שכל הצינורות מתרוקנים. קריאה זו עשויה לעכב את תהליך היישום לתקופה ממושכת, למשך הזמן הנדרש לביצוע כל פקודות ה-G-code מכל הצינורות.

ניהול מצב תהליכים

  • extern "C" bool pause();
  • extern "C" bool resume();
  • extern "C" bool reset();
  • extern "C" int get_mode();

פונקציות אלו מנהלות את מצב תהליך בקר התנועה. הפונקציה pause() משעה זמנית את ביצוע פקודות G-code על ידי תהליך ה-Motion Controller. פונקציה זו משמשת להשהיית פעולת מערכת רובוטית. הפעולה מופעלת מחדש באמצעות קריאת resume() .

תוצאה של א get_mode() שִׂיחָה אופן פעולה מתאים של בקר התנועה
0 כבוי
1 מושהה
2 תַקָלָה
3 רִיצָה

טלמטריית צירים

  • חיצוני "C" כפול get_axis_cursor(int axis_number);
  • חיצוני "C" כפול get_axis_position(int axis_number);
  • extern "C" int get_axis_work_zone_count(int axis_number);
  • חיצוני "C" int get_axis_fault_bits(int axis_number);
  • חיצוני "C" bool is_axis_online(int axis_number);

הפונקציה get_axis_cursor() מחזירה מיקום ייחוס סיבובי או זוויתי שבקר התנועה משדר כמיקום פקודה לציר ברגע מסוים. לעומת זאת, get_axis_position() מחזירה מיקום טלמטריה בפועל של הציר, כאשר הציר פיזית נמצא ברגע נתון. מכיוון שלצירים יש אינרציה פיזית, מיקום ציר ה"סמן" הוירטואלי של תוכנית ה-G-קוד הוא בדרך כלל לפני המיקום בפועל של הציר הפיזי. התוצאות של get_axis_cursor() ו-get_axis_position() מוחזרות במילימטרים או מעלות בהתאם לסוג הציר (ליניארי או סיבובי). הפונקציה get_axis_work_zone_count() מחזירה את מיקום ציר הטלמטריה בספירות מקודד. הפונקציה get_axis_fault_bits() מחזירה נתוני Fault Bits שהתקבלו מהציר באמצעות טלמטריה. עיין ב-Device Reference של כונן הסרוו שלך לקבלת מידע כיצד לפרש את הערך המוחזר. אפס (0) פירושו "ללא תקלה". לא-אפס (!=0) פירושו איזושהי תקלה בציר. הפונקציה is_axis_online() אומרת אם בקר הסרוו של הציר משדר טלמטריה ברשת CAN או USB.

Example Application ב- Python

SERVOSILA-Motion-Controller-תמונה-3

מסמכים / משאבים

PDF thumbnailבקר תנועה
Instruction Manual · Motion Controller, Controller

הפניות

שאל שאלה

Use this section to ask about setup, compatibility, troubleshooting, or anything missing from this manual.

שאל שאלה

Ask about setup, compatibility, troubleshooting, or anything missing from this manual. Name and email are optional.