Logo SERVOSILA

SERVOSILA Motion Controller

SERVOSILA-Motion-Controller-produkt

O ovladači pohybu Servosila

Servosila Motion Controller je vestavěný software pro řízení pohybu moderních víceosých robotických systémů. Software běží na Linuxu, Windows nebo jako firmware na vestavěných MCU.SERVOSILA-Motion-Controller-obr-1

Servosila Motion Controller používá G-kód pro následující účely:

  • jako způsob, jak definovat geometrii koordinovaných pohybů v textovém formátu,
  • jako vysokoúrovňový komunikační protokol mezi ovladačem pohybu a vyššími uživatelskými aplikacemi,
  • jako jednoduchý skriptovací jazyk pro programování víceosých robotických systémů,
  • jako cílový jazyk pro generativní AI a LLM.

Softwarová architektura

Servosila Motion Controller, zobrazený jako šedý rámeček na schématu architektury níže, běží jako proces na pozadí v Linuxu nebo Windows. Proces komunikuje se servopohony přes síť CAN nebo USB. Proces Motion Controller poskytuje rozhraní sdílené paměti s nízkou latencí pro meziprocesovou komunikaci s jediným aplikačním procesem, znázorněným na diagramu jako bílé pole. Aby bylo možné abstrahovat složitosti rozhraní sdílené paměti, je k ovladači pohybu dodávána dynamicky propojená knihovna s názvem Servopilot DLL. „Tenká“ DLL zpřístupňuje mnohem jednodušší API (ve srovnání s rozhraním sdílené paměti) pro odesílání příkazů G-kódu do ovladače pohybu a pro příjem telemetrických a stavových informací zpět. DLL API je popsáno v tomto dokumentu.SERVOSILA-Motion-Controller-obr-2

Interně má proces Motion Controller potrubí 0 a potrubí 1 pro příjem příkazů G-kódu z aplikačního procesu. Potrubí jsou cyklické vyrovnávací paměti pevné velikosti. Existují dvě potrubí, takže v případě potřeby lze paralelně provádět dva nezávislé proudy příkazů G-kódu. Při odesílání nového příkazu G-kódu se aplikační proces může rozhodnout připojit příkaz k jednomu nebo druhému kanálu nebo nahradit příkazy v kanálu novou sadou příkazů. Příkazy G-kódu jsou prováděny virtuálním strojem, interní součástí procesu Motion Controller. Protože příkazy G-kódu jsou odesílány aplikačním procesem v textové podobě, existuje interní kompilátor, který překládá text do interního binárního kódu, kterému virtuální počítač rozumí. Je možné odeslat jednořádkový příkaz G-kódu i text kompletního programu G-kódu. Kompilátor zpracovává texty řádek po řádku a vkládá příkazy do kanálů pro provedení virtuálním počítačem. Virtuální stroj zpracovává kanály na principu „první dovnitř, první ven“ (FIFO). Pohybový ovladač má konfigurovatelnou frekvenci řídicí smyčky (např. 500 Hz), která řídí výkon celého systému řízení pohybu. Jeden aplikační proces se může připojit pouze k jedinému procesu řízení pohybu. Je možné spustit více procesů Motion Control přiřazením jedinečných sdílených_pamětí_id. Rozhraní API Servopilot DLL není bezpečné pod vlákny ani znovu vstupující. Aplikační programy mohou být napsány v jakémkoli programovacím jazyce, který podporuje načítání dynamicky propojených knihoven (DLL). Typické možnosti jsou C++, Python, C#, MATLAB a LabView.

Servopilot DLL API

Připojení k ovladači pohybu

  • extern “C” bool connect(int shared_memory_id);
  • extern “C” bool odpojit();

Funkce connect() připojí Servopilot DLL ke sdílenému paměťovému segmentu používanému pro meziprocesovou komunikaci mezi aplikačním procesem a procesem Motion Controller. Proces Motion Controller má jedinečné číslo shared_memory_id, předkonfigurované celé číslo. Funkce bere toto ID jako jediný argument. Funkce vrátí hodnotu true, pokud byl úspěšně připojen segment sdílené paměti s daným identifikátorem. Funkce odpojit() odpojí knihovnu DLL Servopilot od segmentu sdílené paměti. Volání této rutiny na konci aplikačního procesu je volitelné.

Odeslání příkazů G-kódu procesu Motion Controller

  • extern “C” bool gcode(const char* program_text);
  • extern “C” bool gcode_replace(const char* program_text);
  • extern “C” bool vykoná (const char* program_text);
  • extern “C” bool vykonat_nahradit(const char* text_programu);

Funkce gcode() posunula příkaz G-kódu nebo více příkazů do potrubí procesu Motion Controller. Všechny předchozí příkazy G-kódu, které byly v potrubí, jsou zachovány. Potrubí je cyklická vyrovnávací paměť FIFO. Nové příkazy jsou připojeny k kanálům, které mají být provedeny po provedení všech předchozích příkazů z potrubí. Funkce nečeká na skutečné provedení příkazů; prostě přenese příkazy do potrubí a vrátí se. Funkce gcode_replace() nejprve vymaže všechny kanály a poté do kanálů vloží nové příkazy pro prioritní provedení. Výsledkem je, že Motion Controller přeruší všechny probíhající pohyby a okamžitě pokračuje s novými pohyby definovanými nově přijatými příkazy G-kódu. Takovou náhradu lze provést s rychlostí frekvence regulační smyčky, např. pro řízení na základě momentu. Funkce nečeká na skutečné provedení nových příkazů. Funkce execute() je stejná jako funkce gcode() kromě toho, že volání funkce se vrátí pouze po provedení nových příkazů G-kódu. Všimněte si, že všechny předchozí příkazy, které již byly v potrubí, jsou provedeny jako první. Advantage funkce execute() přes gcode() spočívá v jednoduchosti toku řízení aplikace. DisadvantagZnamená to, že volání execute() může pozastavit aplikační proces na delší dobu, na tolik času, kolik je potřeba k provedení všech příkazů G-kódu ze všech kanálů. Funkce execute_replace() je stejná jako funkce gcode_replace() kromě toho, že volání funkce se vrátí až po provedení nově odeslaných příkazů.

Vymaže zřetězení předchozích příkazů G-kódu Čeká, dokud se nové příkazy skutečně nevykonají, čímž se zastaví Proces aplikace
gcode() Žádný Žádný
gcode_replace() Ano Žádný
vykonat() Žádný Ano
vykonat_nahradit() Ano Ano

Všechny funkce vrátí hodnotu true, pokud byly nové příkazy G-kódu úspěšně odeslány do kanálů procesu Motion Controller k provedení.

Synchronizace procesu

  • extern “C” int synchronize();

Funkce synchronize() umožňuje aplikačnímu procesu čekat, dokud proces řízení pohybu nedokončí provádění všech dříve odeslaných příkazů G-kódu. Volání funkce se zastaví, dokud nejsou všechny kanály prázdné. Toto volání může pozastavit aplikační proces na delší dobu, na tolik času, kolik je potřeba k provedení všech příkazů G-kódu ze všech kanálů.

Řízení stavu procesu

  • extern “C” bool pause();
  • extern “C” bool životopis();
  • extern “C” bool reset();
  • extern “C” int get_mode();

Tyto funkce řídí stav procesu řízení pohybu. Funkce pause() dočasně pozastaví provádění příkazů G-kódu procesem Motion Controller. Tato funkce se používá k pozastavení provozu robotického systému. Operace je restartována pomocí volání restore().

Výsledek a get_mode() volání Odpovídající režim provozu ovladače pohybu
0 VYPNUTO
1 PAUZOVÁNO
2 CHYBA
3 BĚH

Telemetrie os

  • extern “C” double get_axis_cursor(int číslo_osy);
  • 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 číslo_osy);
  • extern “C” bool je_osa_online(int číslo_osy);

Funkce get_axis_cursor() vrací rotační nebo úhlovou referenční polohu, kterou ovladač pohybu přenáší jako přikázanou polohu na osu v konkrétním okamžiku. Naproti tomu get_axis_position() vrací skutečnou telemetrickou polohu osy, kde se osa v daném okamžiku fyzicky nachází. Protože osy mají fyzickou setrvačnost, je poloha virtuální osy „kurzoru“ programu G-kódu obvykle před skutečnou polohou fyzické osy. Výsledky obou metod get_axis_cursor() a get_axis_position() jsou vráceny v milimetrech nebo stupních v závislosti na typu osy (lineární nebo rotační). Funkce get_axis_work_zone_count() vrací polohu telemetrické osy v počtech kodéru. Funkce get_axis_fault_bits() vrací data o chybových bitech přijatá z osy prostřednictvím telemetrie. Informace o tom, jak interpretovat vrácenou hodnotu, najdete v Referenční příručce vašeho servopohonu. Nula (0) znamená „Žádná porucha“. Nenulová (!=0) znamená nějakou chybu v ose. Funkce is_axis_online() říká, zda servořadič osy vysílá telemetrii v síti CAN nebo USB.

Example Aplikace v Pythonu

SERVOSILA-Motion-Controller-obr-3

Dokumenty / zdroje

SERVOSILA Motion Controller [pdfNávod k obsluze
Ovladač pohybu, Ovladač

Reference

Zanechte komentář

Vaše emailová adresa nebude zveřejněna. Povinná pole jsou označena *