
Kontrollur tal-Moviment SERVOSILA

Dwar Servosila Motion Controller
Servosila Motion Controller huwa softwer inkorporat għall-kontroll tal-moviment ta 'sistemi robotiċi moderni b'ħafna assi. Is-softwer jaħdem fuq Linux, Windows jew bħala firmware fuq MCUs inkorporati.
Servosila Motion Controller juża kodiċi G għall-għanijiet li ġejjin:
- bħala mod biex tiddefinixxi l-ġeometrija ta' movimenti kkoordinati f'format ta' test,
- bħala protokoll ta' komunikazzjoni ta' livell għoli bejn il-Kontrollur tal-Moviment u applikazzjonijiet tal-utent ta' livell ogħla,
- bħala lingwa ta' skriptjar sempliċi għall-ipprogrammar ta' sistemi robotiċi b'ħafna assi,
- bħala lingwa fil-mira għal AI u LLMs ġenerattivi.
Arkitettura tas-Softwer
Servosila Motion Controller, muri bħala kaxxa griża fuq dijagramma ta 'arkitettura hawn taħt, jaħdem bħala proċess ta' sfond fil-Linux jew il-Windows. Il-proċess jikkomunika lil servo drives permezz tan-netwerk CAN jew USB. Il-proċess tal-Kontrollur tal-Moviment jipprovdi interface ta 'memorja kondiviża b'latenza baxxa għal komunikazzjoni bejn il-proċessi bi Proċess ta' Applikazzjoni wieħed, muri bħala kaxxa bajda fuq id-dijagramma. Biex tiġi astratta bogħod kumplessitajiet ta 'l-interface tal-memorja kondiviża, librerija konnessa dinamikament imsejħa Servopilot DLL, hija pprovduta mal-Kontrollur tal-Moviment. Id-DLL "rqiqa" tesponi API ħafna aktar sempliċi (meta mqabbla mal-interface tal-memorja kondiviża) biex tissottometti kmandi tal-kodiċi G lill-Kontrollur tal-Moviment u biex tirċievi informazzjoni dwar it-telemetrija u l-istatus lura. L-API DLL hija deskritta f'dan id-dokument.
Internament, il-proċess tal-Kontrollur tal-Moviment għandu Pipeline 0 u Pipeline 1 biex jirċievi kmandi tal-kodiċi G minn Proċess ta 'Applikazzjoni. Il-pipelines huma buffers ċikliċi ta' daqs fiss. Hemm żewġ pipelines sabiex żewġ flussi indipendenti ta 'kmandi tal-kodiċi G jistgħu jiġu esegwiti b'mod parallel jekk meħtieġ. Meta tissottometti kmand G-code ġdid, Proċess ta 'Applikazzjoni jista' jagħżel li jehmeż il-kmand ma' pipeline wieħed jew ieħor jew li jissostitwixxi kmandi f'pipeline b'sett ġdid ta 'kmandi. Il-kmandi tal-kodiċi G huma esegwiti minn Magna Virtwali, komponent intern tal-proċess tal-Kontrollur tal-Moviment. Peress li l-kmandi tal-kodiċi G huma sottomessi minn Proċess ta 'Applikazzjoni f'forma ta' test, hemm Kompilatur intern li jittraduċi t-test f'kodiċi binarju intern mifhum mill-Magni Virtwali. Huwa possibbli li tissottometti kmand tal-kodiċi G b'linja waħda kif ukoll it-test ta 'programm komplut tal-kodiċi G. Il-Kompilatur jipproċessa t-testi linja b'linja u jimbotta l-kmandi f'pipelines għall-eżekuzzjoni mill-Magni Virtwali. Il-Magni Virtwali tipproċessa l-pipelines fuq bażi ta’ “first in, first out” (FIFO). Il-Kontrollur tal-Moviment għandu frekwenza ta' loop ta' kontroll konfigurabbli (eż. 500 Hz) li tirregola l-prestazzjoni tas-sistema kollha ta' kontroll tal-moviment. Proċess ta' Applikazzjoni wieħed jista' jehmeż ma' proċess ta' Kontroll tal-Moviment wieħed biss. Huwa possibbli li tmexxi proċessi multipli ta' Kontroll tal-Moviment billi tassenjahom shared_memory_id's uniċi. Is-Servopilot DLL API mhix ħajta sigura jew re-entrant. Il-programmi tal-applikazzjoni jistgħu jinkitbu fi kwalunkwe lingwa ta' programmar li tappoġġja t-tagħbija ta' libreriji marbuta dinamikament (DLL). L-għażliet tipiċi huma C++, Python, C#, MATLAB, u LabView.
Servopilot DLL API
Konnessjoni mal-Kontrollur tal-Moviment
- extern "C" bool connect (int shared_memory_id);
- extern “C” bool skonnettja ();
Il-funzjoni connect() tehmeż Servopilot DLL ma' segment tal-memorja kondiviża użat għall-komunikazzjoni bejn il-proċessi bejn Proċess ta' Applikazzjoni u l-proċess tal-Kontrollur tal-Moviment. Il-proċess tal-Kontrollur tal-Moviment għandu shared_memory_id uniku, numru sħiħ prekonfigurat. Il-funzjoni tieħu din l-ID bħala l-uniku argument. Il-funzjoni tirritorna vera jekk segment tal-memorja kondiviża bl-identifikatur mogħti jkun ġie mwaħħal b'suċċess miegħu. Il-funzjoni skonnettja () tneħħi d-DLL ta' Servopilot mis-segment tal-memorja kondiviża. Is-sejħa ta' din ir-rutina fit-tmiem ta' Proċess ta' Applikazzjoni hija fakultattiva.
Tissottometti kmandi tal-kodiċi G lill-proċess tal-Kontrollur tal-Moviment
- extern “C” bool gcode (const char* program_test);
- 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_test);
Il-funzjoni gcode() imbuttat kmand G-code jew kmandi multipli lill-pipelines tal-proċess tal-Kontrollur tal-Moviment. Il-kmandi preċedenti kollha tal-G-code li ilhom bilqiegħda fil-pipelines huma ppreservati. Pipeline huwa buffer ċikliku FIFO. Il-kmandi l-ġodda huma mehmuża mal-pipelines li għandhom jiġu eżegwiti wara li l-kmandi kollha preċedenti mill-pipeline ikunu ġew esegwiti. Il-funzjoni ma tistennax li l-kmandi jiġu attwalment eżegwiti; hija biss timbotta l-kmandi għall-pipelines u jirritorna. Il-funzjoni gcode_replace() l-ewwel tneħħi l-pipelines kollha u mbagħad timbotta kmandi ġodda fil-pipelines għall-eżekuzzjoni prijoritarja. Bħala riżultat, il-Kontrollur tal-Moviment jinterrompi l-mozzjonijiet kollha li għaddejjin u immedjatament ikompli b'mozzjonijiet ġodda definiti minn kmandi G-code stabbiliti li għadhom kif waslu. Tali sostituzzjoni tista' ssir bil-veloċità tal-frekwenza tal-linja ta' kontroll, eż. għal kontroll ibbażat fuq it-torque. Il-funzjoni ma tistennax li l-kmandi l-ġodda jiġu attwalment eżegwiti. Il-funzjoni execute() hija l-istess bħal gcode() ħlief li s-sejħa tal-funzjoni tirritorna biss ladarba l-kmandi tal-kodiċi G ġodda jkunu ġew eżegwiti. Innota li l-kmandi preċedenti kollha li diġà ilhom bilqiegħda fil-pipelines jiġu esegwiti l-ewwel. Advantage of execute () fuq gcode () huwa fis-sempliċità tal-fluss tal-kontroll tal-applikazzjoni. Żvantaġġtage hija li sejħa execute() tista' twaqqaf il-Proċess ta' Applikazzjoni għal perjodu estiż, għal kemm hemm bżonn biex tesegwixxi l-kmandi kollha tal-G-code mill-pipelines kollha. Il-funzjoni execute_replace() hija l-istess bħall-funzjoni gcode_replace() ħlief li s-sejħa tal-funzjoni tirritorna biss wara li l-kmandi li għadhom kif ġew sottomessi jkunu ġew esegwiti.
| Iċċara l-pipeline ta 'kmandi G-code preċedenti | Jistenna sakemm il-kmandi l-ġodda huma attwalment eżegwiti u b'hekk iwaqqfu l- Proċess ta' Applikazzjoni | |
| gcode() | Nru | Nru |
| gcode_replace() | Iva | Nru |
| tesegwixxi () | Nru | Iva |
| execute_replace() | Iva | Iva |
Il-funzjonijiet kollha jirritornaw vera jekk il-kmandi ġodda tal-kodiċi G ġew sottomessi b'suċċess lill-pipelines tal-proċess tal-Kontrollur tal-Mozzjoni għall-eżekuzzjoni.
Sinkronizzazzjoni tal-Proċess
- extern “C” int synchronize();
Il-funzjoni synchronize() tippermetti lill-Proċess tal-Applikazzjoni jistenna sakemm il-proċess tal-Kontroll tal-Moviment jispiċċa jwettaq il-kmandi kollha tal-G-code sottomessi qabel. Is-sejħa tal-funzjoni tieqaf sakemm il-pipelines kollha jkunu vojta. Din is-sejħa tista' twaqqaf il-Proċess ta' Applikazzjoni għal perjodu estiż, għal kemm hemm bżonn biex tesegwixxi l-kmandi kollha tal-G-code mill-pipelines kollha.
Ġestjoni tal-Istat tal-Proċess
- extern “C” bool pause();
- extern “C” bool jerġa ();
- extern “C” bool reset();
- extern "C" int get_mode ();
Dawn il-funzjonijiet jimmaniġġjaw l-istat tal-proċess tal-Kontrollur tal-Moviment. Il-funzjoni pause() tissospendi temporanjament l-eżekuzzjoni tal-kmandi tal-kodiċi G mill-proċess tal-Kontrollur tal-Moviment. Din il-funzjoni tintuża biex twaqqaf it-tħaddim ta' sistema robotika. L-operazzjoni terġa' tinbeda billi tuża sejħa mill-ġdid ().
| Riżultat ta' a get_mode() ċempel | Mod ta 'tħaddim korrispondenti tal-Kontrollur tal-Moviment |
| 0 | OFF |
| 1 | PAWŻA |
| 2 | ĦTIJIET |
| 3 | ĠEJR |
Telemetrija tal-Assi
- extern “C” double 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);
Il-funzjoni get_axis_cursor() tirritorna pożizzjoni ta 'referenza rotatorja jew angolari li l-Kontrollur tal-Moviment jittrasmetti bħala pożizzjoni kmandata lill-assi f'mument partikolari. B'kuntrast, get_axis_position() jirritorna pożizzjoni tat-telemetrija attwali tal-assi, fejn l-assi fiżikament jinsab f'mument partikolari. Peress li l-assi għandhom inerzja fiżika, il-pożizzjoni virtwali tal-assi "cursor" tal-programm G-code hija ġeneralment qabel il-pożizzjoni attwali tal-assi fiżiku. Ir-riżultati kemm ta' get_axis_cursor() kif ukoll ta' get_axis_position() jintbagħtu lura f'millimetri jew gradi skont it-tip tal-assi (lineari jew rotatorju). Il-funzjoni get_axis_work_zone_count() tirritorna l-pożizzjoni tal-assi tat-telemetrija fl-għadd tal-encoder. Il-funzjoni get_axis_fault_bits() tirritorna dejta tal-Fault Bits riċevuta mill-assi permezz tat-telemetrija. Irreferi għar-Referenza tal-Apparat tas-servo drive tiegħek għal informazzjoni dwar kif tinterpreta l-valur ritornat. Żero (0) tfisser "L-ebda Ħtija". Mhux Żero (!=0) tfisser xi tip ta' ħsara fl-assi. Il-funzjoni is_axis_online() tgħid jekk il-kontrollur tas-servo tal-assi hux qed ixandar telemetrija fuq in-netwerk CAN jew USB.
Example Applikazzjoni f'Python

- Żurna fuq www.servosila.com/en/motion-control
u - YouTube: http://www.youtube.com/user/servosila
- www.servosila.com
Dokumenti / Riżorsi
![]() | Kontrollur tal-Moviment |
Referenzi
- Servosilawww.servosila.com
- Servosilawww.servosila.com
- Kontrolluri tal-Mutur Brushless/Brushed - Servosilawww.servosila.com
- Kontrolluri tal-Mutur Brushless/Brushed - Servosilawww.servosila.com
- youtube.com/user/servosilawww.youtube.com
- Manwal għall-Utentmanual.tools

