SERVOSILA Контролор за движење

За Servosila Motion Controller
Servosila Motion Controller е вграден софтвер за контролирање на движењето на модерните роботски системи со повеќе оски. Софтверот работи на Linux, Windows или како фирмвер на вградени MCU.
Servosila Motion Controller користи G-код за следните цели:
- како начин да се дефинира геометријата на координирани движења во текстуален формат,
- како протокол за комуникација на високо ниво помеѓу контролорот за движење и корисничките апликации на повисоко ниво,
- како едноставен јазик за скриптирање за програмирање роботски системи со повеќе оски,
- како целен јазик за генеративни AI и LLM.
Софтверска архитектура
Servosila Motion Controller, прикажан како сива кутија на архитектонскиот дијаграм подолу, работи како процес во заднина во Linux или Windows. Процесот комуницира со серво-дискови преку CAN или USB мрежа. Процесот на Motion Controller обезбедува споделена мемориски интерфејс со ниска латентност за меѓупроцесна комуникација со еден процес на апликација, прикажан како бело поле на дијаграмот. За апстракција на сложеноста на интерфејсот за заедничка меморија, динамички поврзана библиотека наречена Servopilot DLL, е обезбедена со контролорот за движење. „Тенкиот“ DLL изложува многу поедноставен API (во споредба со интерфејсот за заедничка меморија) за испраќање на команди со G-код до контролорот за движење и за враќање на информациите за телеметрија и статус. DLL API е опишан во овој документ.
Внатрешно, процесот на контролер на движење има Pipeline 0 и Pipeline 1 за примање на команди со G-код од еден процес на апликација. Цевководите се циклични бафери со фиксна големина. Постојат два цевководи, така што два независни текови на команди со G-код може да се извршуваат паралелно доколку е потребно. Кога поднесувате нова команда со G-код, апликативниот процес може да избере да ја додаде командата на едната или другата линија или да ги замени командите во цевката со нов сет на команди. Командите на G-кодот се извршуваат од виртуелна машина, внатрешна компонента на процесот на контролер на движење. Бидејќи наредбите со G-код се доставуваат преку Апликациски процес во текстуална форма, постои внатрешен компајлер кој го преведува текстот во внатрешен бинарен код што го разбира Виртуелната машина. Можно е да се достави команда за G-код од една линија, како и текст на целосна програма за G-код. Компајлерот ги обработува текстовите линија по линија и ги турка командите во цевководи за извршување од Виртуелната машина. Виртуелната машина ги обработува цевководите на основа „прв влез, прв излезе“ (FIFO). Контролерот за движење има фреквенција на контролната јамка што може да се конфигурира (на пр. 500 Hz) која ги регулира перформансите на целиот систем за контрола на движењето. Еден процес на апликација е дозволено да се прикачи само на еден процес на контрола на движење. Можно е да се извршуваат повеќе процеси за контрола на движење со доделување на единствени shared_memory_id's. Servopilot DLL API не е безбеден за нишки или повторно влегува. Апликативните програми можат да бидат напишани на кој било програмски јазик што поддржува вчитување динамички поврзани библиотеки (DLL). Типичните избори се C++, Python, C#, MATLAB и LabView.
Servopilot DLL API
Поврзување со контролер за движење
- extern „C“ bool connect (int shared_memory_id);
- extern „C“ bool disconnect();
Функцијата connect() го прикачува Servopilot DLL на споделен мемориски сегмент што се користи за интерпроцесна комуникација помеѓу Апликацискиот процес и процесот на контролер на движење. Процесот на Motion Controller има единствен shared_memory_id, претходно конфигуриран цел број. Функцијата го зема овој ID како единствен аргумент. Функцијата се враќа точно ако споделениот мемориски сегмент со дадениот идентификатор е успешно прикачен на. Функцијата disconnect() го одвојува Servopilot DLL од сегментот за споделена меморија. Повикувањето на оваа рутина на крајот од процесот на апликација е изборно.
Поднесување на команди со G-код до процесот на контролер на движење
- extern „C“ bool gcode (const char* program_text);
- extern „C“ bool gcode_replace(const char* program_text);
- extern „C“ bool execute (const char* program_text);
- extern „C“ bool execute_replace (const char* program_text);
Функцијата gcode() турка команда со G-код или повеќе команди до цевководите на процесот на контролер на движење. Зачувани се сите претходни команди со Г-кодот што беа поставени во цевководите. Гасоводот е FIFO цикличен тампон. Новите команди се додаваат на цевководите што треба да се извршат откако ќе се извршат сите претходни команди од цевководот. Функцијата не чека наредбите да бидат вистински извршени; само ги турка командите до цевководите и се враќа. Функцијата gcode_replace() прво ги брише сите цевководи, а потоа турка нови команди во цевководите за приоритетно извршување. Како резултат на тоа, контролорот за движење ги прекинува сите тековни движења и веднаш продолжува со нови движења дефинирани со новопримените команди на G-кодот. Таквата замена може да се направи со брзината на фреквенцијата на контролната јамка, на пр. за контрола базирана на вртежен момент. Функцијата не чека да се извршат новите команди. Функцијата execute() е иста како gcode() освен што повикот на функцијата се враќа само откако ќе се извршат новите команди на G-кодот. Забележете дека прво се извршуваат сите претходни команди кои веќе биле поставени во цевководите. Авантураtage на execute() преку gcode() е во едноставноста на протокот на контрола на апликацијата. Недостатокtage е дека повикот execute() може да го запре процесот на апликација подолг период, онолку време колку што е потребно за да се извршат сите команди на G-кодот од сите цевководи. Функцијата execute_replace() е иста како функцијата gcode_replace(), освен што повикот на функцијата се враќа само откако ќе се извршат ново поднесените команди.
| Го брише цевководот од претходните команди со Г-кодот | Чека додека не се извршат новите команди, со што ќе се закочи Процес на аплицирање | |
| gcode () | бр | бр |
| gcode_replace() | Да | бр |
| изврши () | бр | Да |
| execute_replace () | Да | Да |
Сите функции се враќаат вистинити ако новите команди со G-код се успешно доставени до цевководите на процесот на контролер на движење за извршување.
Синхронизација на процесот
- extern „C“ int synchronize();
Функцијата synchronize() му овозможува на Апликацискиот процес да чека додека процесот за контрола на движење не заврши со извршување на сите претходно поднесени команди за G-код. Повикот на функцијата застанува додека не се испразнат сите цевководи. Овој повик може да го запре Процесот на апликација подолг период, онолку време колку што е потребно за да се извршат сите команди на G-кодот од сите цевководи.
Процес државен менаџмент
- extern „C“ bool pause();
- extern „C“ bool resume();
- extern „C“ bool reset();
- екстерно „C“ int get_mode();
Овие функции управуваат со состојбата на процесот на контролер на движење. Функцијата pause() привремено го суспендира извршувањето на командите на G-кодот од процесот на контролер на движење. Оваа функција се користи за паузирање на работата на роботски систем. Операцијата се рестартира со повик за 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);
- extern „C“ int get_axis_fault_bits (int axis_number);
- extern „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() враќа податоци за битови за грешки добиени од оската преку телеметрија. За информации за тоа како да се протолкува вратената вредност, погледнете го упатството за уред на вашиот серво-уред. Нула (0) значи „Без дефект“. Не-нула (!=0) значи некаков дефект на оската. Функцијата is_axis_online() кажува дали серво-контролерот на оската емитува телеметрија на CAN или USB мрежата или не.
ExampАпликација во Пајтон

- Посетете не на www.servosila.com/en/motion-control
и - YouTube: http://www.youtube.com/user/servosila
- www.servosila.com
Документи / ресурси
![]() |
SERVOSILA Контролор за движење [pdf] Упатство за употреба Контролор за движење, контролер |

