SERVOSILA-logo

SERVOSILA liikumiskontroller

SERVOSILA-Motion-Controller-toode

Servosila liikumiskontrolleri kohta

Servosila Motion Controller on sisseehitatud tarkvara kaasaegsete mitmeteljeliste robotsüsteemide liikumise juhtimiseks. Tarkvara töötab Linuxis, Windowsis või sisseehitatud MCU-de püsivarana.SERVOSILA-Motion-Controller-joon-1

Servosila Motion Controller kasutab G-koodi järgmistel eesmärkidel:

  • viis koordineeritud liikumiste geomeetria määratlemiseks tekstivormingus,
  • kõrgetasemelise sideprotokollina Motion Controlleri ja kõrgema taseme kasutajarakenduste vahel,
  • lihtsa skriptikeelena mitmeteljeliste robotsüsteemide programmeerimiseks,
  • generatiivse AI ja LLM-ide sihtkeelena.

Tarkvara arhitektuur

Servosila liikumiskontroller, mis on näidatud alloleval arhitektuuriskeemil halli kastina, töötab Linuxis või Windowsis taustprotsessina. Protsess suhtleb servodraividega CAN- või USB-võrgu kaudu. Liikumiskontrolleri protsess pakub madala latentsusega ühismälu liidest protsessidevaheliseks suhtluseks ühe rakendusprotsessiga, mis on diagrammil näidatud valge kastina. Jagatud mäluliidese keerukuse eemaldamiseks on liikumiskontrolleriga kaasas dünaamiliselt lingitud teek Servopilot DLL. "Õhuke" DLL paljastab palju lihtsama API (võrreldes jagatud mälu liidesega) G-koodi käskude edastamiseks liikumiskontrollerile ning telemeetria ja olekuteabe vastuvõtmiseks. DLL API-d kirjeldatakse selles dokumendis.SERVOSILA-Motion-Controller-joon-2

Sisemiselt on liikumiskontrolleri protsessil torujuhe 0 ja torujuhe 1 rakendusprotsessist G-koodi käskude vastuvõtmiseks. Torujuhtmed on kindla suurusega tsüklilised puhvrid. Seal on kaks konveierit, et vajadusel saaks paralleelselt täita kahte sõltumatut G-koodi käskude voogu. Uue G-koodi käsu esitamisel võib rakendusprotsess valida, kas lisada käsk ühele või teisele konveierile või asendada konveieri käsud uue käskude komplektiga. G-koodi käske täidab virtuaalmasin, mis on liikumiskontrolleri protsessi sisemine komponent. Kuna G-koodi käsud esitab rakendusprotsess tekstivormis, on olemas sisemine kompilaator, mis tõlgib teksti sisemiseks binaarkoodiks, mida virtuaalmasin mõistab. Võimalik on esitada nii üherealine G-koodi käsk kui ka terve G-koodi programmi tekst. Kompilaator töötleb tekste rida-realt ja surub käsud konveieritesse virtuaalmasina täitmiseks. Virtuaalmasin töötleb torujuhtmeid põhimõttel "kõigepealt sisse, esimene välja" (FIFO). Liikumiskontrolleril on konfigureeritav juhtahela sagedus (nt 500 Hz), mis reguleerib kogu liikumisjuhtimissüsteemi toimimist. Üks rakendusprotsess on lubatud lisada ainult ühele liikumisjuhtimisprotsessile. On võimalik käitada mitut liikumisjuhtimise protsessi, määrates neile kordumatud jagatud_mälu_id. Servopiloti DLL API ei ole lõimekindel ega uuesti sisenev. Rakendusprogramme saab kirjutada mis tahes programmeerimiskeeles, mis toetab dünaamiliselt lingitud teekide (DLL) laadimist. Tüüpilised valikud on C++, Python, C#, MATLAB ja LabView.

Servopiloti DLL API

Liikumiskontrolleriga ühendamine

  • extern “C” bool connect(int jagatud_mälu_id);
  • extern “C” bool disconnect();

Funktsioon connect() seob Servopiloti DLL-i jagatud mälusegmendiga, mida kasutatakse protsessidevaheliseks suhtluseks rakendusprotsessi ja liikumiskontrolleri protsessi vahel. Liikumiskontrolleri protsessil on kordumatu jagatud_mälu_id, eelkonfigureeritud täisarv. Funktsioon võtab selle ID ainsa argumendina. Funktsioon tagastab väärtuse tõene, kui antud identifikaatoriga ühismälu segment on edukalt ühendatud. Funktsioon disconnect() eraldab Servopiloti DLL-i jagatud mälu segmendist. Selle rutiini kutsumine taotlemisprotsessi lõpus on valikuline.

G-koodi käskude esitamine Motion Controlleri protsessi

  • extern “C” bool gcode(const char* programmi_tekst);
  • extern “C” bool gcode_replace(const char* programmi_tekst);
  • extern “C” bool execute (const char* programmi_tekst);
  • extern “C” bool execute_replace(const char* programmi_tekst);

Funktsioon gcode() lükkas G-koodi käsu või mitu käsku liikumiskontrolleri protsessi torujuhtmetele. Säilitatakse kõik varasemad konveierites olnud G-koodi käsud. Konveier on FIFO tsükliline puhver. Uued käsud lisatakse täidetavatele konveieritele pärast seda, kui kõik eelmised konveierkäsud on täidetud. Funktsioon ei oota käskude tegelikku täitmist; see lihtsalt lükkab käsud torujuhtmetele ja naaseb. Funktsioon gcode_replace() tühjendab esmalt kõik torujuhtmed ja seejärel surub konveieritesse uued käsud prioriteetseks täitmiseks. Selle tulemusena katkestab liikumiskontroller kõik käimasolevad liikumised ja jätkab kohe uute liikumistega, mis on määratletud äsja saadud G-koodi käsklustega. Sellist asendust saab teha juhtkontuuri sageduse kiirusega, nt. g. pöördemomendipõhiseks juhtimiseks. Funktsioon ei oota uute käskude tegelikku täitmist. Funktsioon execute() on sama mis gcode(), välja arvatud see, et funktsiooni kutse naaseb alles siis, kui uued G-koodi käsud on täidetud. Pange tähele, et kõik eelnevad käsud, mis on juba konveierites olnud, täidetakse kõigepealt. Advantage of execute() üle gcode() on rakenduse juhtimisvoo lihtsuses. Ebameeldivtage on see, et execute()-kutse võib rakendusprotsessi seiskuda pikemaks ajaks, nii kauaks, kui kulub kõigist konveieritest kõigi G-koodi käskude täitmiseks. Funktsioon execute_replace() on sama mis funktsioon gcode_replace(), välja arvatud see, et funktsiooni kutse naaseb alles pärast äsja esitatud käskude täitmist.

Puhastab eelmiste G-koodi käskude konveieri Ootab, kuni uued käsud on tegelikult käivitatud, seega peatatakse Taotlusprotsess
gcode() Ei Ei
gcode_replace() Jah Ei
täitma () Ei Jah
execute_replace() Jah Jah

Kõik funktsioonid tagastavad väärtuse tõene, kui uued G-koodi käsud on Motion Controlleri protsessi konveieritesse täitmiseks edukalt esitatud.

Protsessi sünkroonimine

  • extern "C" int synchronize();

Funktsioon synchronize() võimaldab rakendusprotsessil oodata, kuni liikumisjuhtimisprotsess lõpetab kõigi varem saadetud G-koodi käskude täitmise. Funktsiooni kõne seiskub, kuni kõik torujuhtmed on tühjad. See kõne võib rakendusprotsessi seiskuda pikemaks ajaks, nii kauaks, kui kulub kõigi G-koodi käskude täitmiseks kõigist torujuhtmetest.

Protsessi oleku juhtimine

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

Need funktsioonid juhivad liikumiskontrolleri protsessi olekut. Funktsioon pause() peatab ajutiselt G-koodi käskude täitmise Motion Controlleri protsessi poolt. Seda funktsiooni kasutatakse robotsüsteemi töö peatamiseks. Toiming taaskäivitatakse resume()-kutsega.

Tulemus a get_mode() helistada Liikumiskontrolleri vastav töörežiim
0 VÄLJAS
1 PAUSETUD
2 VIGA
3 JOOKSEMAS

Teljed Telemeetria

  • extern "C" double get_axis_cursor(int telje_number);
  • extern "C" double get_axis_position(int telje_number);
  • extern "C" int get_axis_work_zone_count(int telje_number);
  • extern "C" int get_axis_fault_bits(int telje_number);
  • extern "C" bool on_telg_online(int telje_number);

Funktsioon get_axis_cursor() tagastab pöörleva või nurga võrdlusasendi, mille liikumiskontroller edastab teljele konkreetsel hetkel käsupositsioonina. Seevastu get_axis_position() tagastab telje tegeliku telemeetrilise asukoha, kus telg antud hetkel füüsiliselt asub. Kuna telgedel on füüsiline inerts, on G-koodi programmi virtuaalne kursori telje asend tavaliselt füüsilise telje tegelikust asukohast ees. Nii get_axis_cursor() kui ka get_axis_position() tulemused tagastatakse millimeetrites või kraadides, olenevalt telje tüübist (lineaarne või pöörlev). Funktsioon get_axis_work_zone_count() tagastab telemeetriatelje asukoha kodeerija loendustes. Funktsioon get_axis_fault_bits() tagastab tõrkebittide andmed, mis on saadud teljest telemeetria kaudu. Tagastatud väärtuse tõlgendamise kohta teabe saamiseks vaadake oma servoajami jaotist Device Reference. Null (0) tähendab "viga puudub". Mitte-null (!=0) tähendab mingit telje viga. Funktsioon is_axis_online() ütleb, kas telje servokontroller edastab telemeetriat CAN- või USB-võrgus või mitte.

Example Rakendus Pythonis

SERVOSILA-Motion-Controller-joon-3

Dokumendid / Ressursid

SERVOSILA liikumiskontroller [pdfKasutusjuhend
Liikumiskontroller, kontroller

Viited

Jäta kommentaar

Teie e-posti aadressi ei avaldata. Kohustuslikud väljad on märgitud *