
Кантролер руху SERVOSILA

Пра кантролер руху Servosila
Servosila Motion Controller - гэта ўбудаванае праграмнае забеспячэнне для кіравання рухам сучасных шматвосевых рабатызаваных сістэм. Праграмнае забеспячэнне працуе ў Linux, Windows або ў выглядзе прашыўкі на ўбудаваных мікрааўтобусах.
Кантролер руху Servosila выкарыстоўвае G-код для наступных мэт:
- як спосаб вызначыць геаметрыю скаардынаваных рухаў у тэкставым фармаце,
- як пратакол сувязі высокага ўзроўню паміж кантролерам руху і карыстальніцкімі праграмамі больш высокага ўзроўню,
- як простая мова сцэнарыяў для праграмавання шматвосевых рабатызаваных сістэм,
- у якасці мэтавай мовы для генератыўных AI і LLM.
Архітэктура праграмнага забеспячэння
Кантролер руху Servosila, паказаны шэрым полем на дыяграме архітэктуры ніжэй, працуе як фонавы працэс у Linux або Windows. Працэс падключаецца да сервапрывадаў праз сетку CAN або USB. Працэс Motion Controller забяспечвае інтэрфейс агульнай памяці з нізкай затрымкай для ўзаемадзеяння паміж працэсамі з адным Працэсам прыкладання, паказаным у выглядзе белага поля на дыяграме. Каб абстрагавацца ад складанасцей інтэрфейсу агульнай памяці, разам з кантролерам руху пастаўляецца дынамічна звязаная бібліятэка пад назвай Servopilot DLL. «Тонкая» DLL прапануе значна больш просты API (у параўнанні з інтэрфейсам агульнай памяці) для адпраўкі каманд G-кода ў кантролер руху і для атрымання назад тэлеметрыі і інфармацыі аб стане. API DLL апісаны ў гэтым дакуменце.
Унутрана працэс Motion Controller мае канвеер 0 і канвеер 1 для атрымання каманд G-кода ад працэсу прыкладанняў. Канвееры ўяўляюць сабой цыклічныя буферы фіксаванага памеру. Ёсць два канвееры, так што два незалежныя патокі каманд G-кода могуць быць выкананы паралельна, калі гэта неабходна. Пры адпраўцы новай каманды G-кода Працэс прыкладання можа дадаць каманду да аднаго або іншага канвеера або замяніць каманды ў канвееры новым наборам каманд. Каманды G-кода выконваюцца віртуальнай машынай, унутраным кампанентам працэсу кантролера руху. Паколькі каманды G-кода падаюцца працэсам прыкладання ў тэкставай форме, існуе ўнутраны кампілятар, які перакладае тэкст ва ўнутраны двайковы код, зразумелы віртуальнай машыне. Можна падаць як аднарадковую каманду G-коду, так і тэкст поўнай праграмы G-коду. Кампілятар апрацоўвае тэксты радок за радком і адпраўляе каманды ў канвееры для выканання віртуальнай машынай. Віртуальная машына апрацоўвае канвееры па прынцыпе «першы прыйшоў, першы выйшаў» (FIFO). Кантролер руху мае наладжвальную частату контуру кіравання (напрыклад, 500 Гц), якая рэгулюе прадукцыйнасць усёй сістэмы кіравання рухам. Адзін Працэс прыкладання можа быць далучаны толькі да аднаго працэсу кіравання рухам. Можна запусціць некалькі працэсаў кіравання рухам, прысвоіўшы ім унікальныя shared_memory_id. API Servopilot DLL не з'яўляецца патокабяспечным або паўторным. Прыкладныя праграмы могуць быць напісаны на любой мове праграмавання, якая падтрымлівае загрузку дынамічна звязаных бібліятэк (DLL). Тыповы выбар: C++, Python, C#, MATLAB і LabView.
API Servopilot DLL
Падключэнне да кантролера руху
- extern “C” bool connect(int shared_memory_id);
- extern “C” bool disconnect();
Функцыя connect() далучае DLL Servopilot да сегмента агульнай памяці, які выкарыстоўваецца для міжпрацэснай сувязі паміж працэсам прыкладання і працэсам кантролера руху. Працэс Motion Controller мае ўнікальны shared_memory_id, загадзя настроены цэлы лік. Функцыя прымае гэты ідэнтыфікатар як адзіны аргумент. Функцыя вяртае true, калі сегмент агульнай памяці з дадзеным ідэнтыфікатарам быў паспяхова далучаны. Функцыя disconnect() адлучае DLL Servopilot ад сегмента агульнай памяці. Выклік гэтай працэдуры ў канцы працэсу падачы заяўкі неабавязковы.
Адпраўка каманд G-кода ў працэс Motion Controller
- 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-code або некалькі каманд у канвееры працэсу Motion Controller. Усе папярэднія каманды G-кода, якія сядзелі ў канвееры, захаваны. Канвеер - гэта цыклічны буфер FIFO. Новыя каманды дадаюцца да канвеераў, якія будуць выкананы пасля таго, як усе папярэднія каманды з канвеера будуць выкананы. Функцыя не чакае фактычнага выканання каманд; ён проста перадае каманды ў канвееры і вяртаецца. Функцыя gcode_replace() спачатку ачышчае ўсе канвееры, а затым адпраўляе ў іх новыя каманды для прыярытэтнага выканання. У выніку кантролер руху перапыняе ўсе бягучыя руху і неадкладна працягвае новыя рухі, вызначаныя нядаўна атрыманым наборам каманд G-кода. Такая замена можа быць зроблена з частатой хуткасці контуру кіравання, напрыклад, для кіравання на аснове крутоўнага моманту. Функцыя не чакае фактычнага выканання новых каманд. Функцыя execute() такая ж, як і gcode(), за выключэннем таго, што выклік функцыі вяртаецца толькі пасля таго, як новыя каманды G-кода былі выкананы. Звярніце ўвагу, што ўсе папярэднія каманды, якія ўжо сядзелі ў канвееры, выконваюцца першымі. АвансtagФункцыя execute() над gcode() заключаецца ў прастаце патоку кіравання дадаткам. НедахопtagГэта тое, што выклік execute() можа спыніць працэс прыкладання на працяглы перыяд, на столькі часу, колькі спатрэбіцца для выканання ўсіх каманд G-кода з усіх канвеераў. Функцыя execute_replace() такая ж, як і функцыя gcode_replace(), за выключэннем таго, што выклік функцыі вяртаецца толькі пасля таго, як новыя каманды былі выкананы.
| Ачышчае канвеер ад папярэдніх каманд G-кода | Чакае, пакуль новыя каманды не будуць выкананы, што спыняе Працэс падачы заяўкі | |
| gcode() | няма | няма |
| gcode_replace() | так | няма |
| выканаць() | няма | так |
| выканаць_замяніць() | так | так |
Усе функцыі вяртаюць ісціну, калі новыя каманды G-кода былі паспяхова адпраўлены ў канвееры працэсу кантролера руху для выканання.
Сінхранізацыя працэсаў
- extern “C” int synchronize();
Функцыя synchronize() дазваляе Працэсу прыкладання чакаць, пакуль працэс кіравання рухам не скончыць выкананне ўсіх раней адпраўленых каманд G-кода. Выклік функцыі спыняецца, пакуль усе канвееры не будуць пустыя. Гэты выклік можа прыпыніць працэс падачы заявак на працяглы перыяд, на столькі часу, колькі патрабуецца для выканання ўсіх каманд G-кода з усіх канвеераў.
Кіраванне станам працэсу
- extern “C” bool pause();
- extern “C” bool resume();
- extern “C” bool reset();
- extern “C” int get_mode();
Гэтыя функцыі кіруюць станам працэсу кантролера руху. Функцыя pause() часова прыпыняе выкананне каманд G-кода працэсам Motion Controller. Гэтая функцыя выкарыстоўваецца для прыпынення працы рабатызаванай сістэмы. Аперацыя перазапускаецца з дапамогай выкліку resume().
| Вынік а get_mode() выклік | Адпаведны рэжым працы кантролера руху |
| 0 | ВЫКЛ |
| 1 | ПРЫПЫНЕНА |
| 2 | ПАВІНКА |
| 3 | БЕГ |
Сякеры тэлеметрыі
- extern “C” двайны get_axis_cursor(int axis_number);
- extern “C” double 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() вяртае даныя Fault Bits, атрыманыя ад восі з дапамогай тэлеметрыі. Звярніцеся да Даведніка па прыладзе вашага сервапрывада для атрымання інфармацыі аб тым, як інтэрпрэтаваць вернутае значэнне. Нуль (0) азначае «Няма віны». Ненулявы (!=0) азначае нейкую няспраўнасць восі. Функцыя is_axis_online() паказвае, ці транслюе сервакантролер восі тэлеметрыю па сетцы CAN або USB.
ExampПрыкладанне на Python

- Наведайце нас па адрасе www.servosila.com/en/motion-control
і - YouTube: http://www.youtube.com/user/servosila
- www.servosila.com
Дакументы / Рэсурсы
![]() | Кантролер руху |
Спасылкі
- Кіраўніцтва карыстальнікаmanual.tools

