SERVOSILA Hərəkət Nəzarətçisi

Servosila Motion Controller haqqında
Servosila Motion Controller müasir çoxoxlu robot sistemlərinin hərəkətini idarə etmək üçün quraşdırılmış proqramdır. Proqram Linux, Windows-da və ya quraşdırılmış MCU-larda proqram təminatı kimi işləyir.
Servosila Motion Controller G-koddan aşağıdakı məqsədlər üçün istifadə edir:
- mətn formatında əlaqələndirilmiş hərəkətlərin həndəsəsini təyin etmək üçün bir yol kimi,
- Motion Controller və daha yüksək səviyyəli istifadəçi proqramları arasında yüksək səviyyəli rabitə protokolu kimi,
- çox oxlu robot sistemlərinin proqramlaşdırılması üçün sadə skript dili kimi,
- generativ AI və LLM üçün hədəf dil kimi.
Proqram təminatının memarlığı
Aşağıdakı memarlıq diaqramında boz qutu kimi göstərilən Servosila Motion Controller Linux və ya Windows-da fon prosesi kimi işləyir. Proses CAN və ya USB şəbəkəsi vasitəsilə servo sürücülərlə əlaqə saxlayır. Hərəkət Nəzarətçisi prosesi diaqramda ağ qutu kimi göstərilən tək Tətbiq Prosesi ilə proseslərarası əlaqə üçün aşağı gecikmə müddəti olan paylaşılan yaddaş interfeysini təmin edir. Paylaşılan yaddaş interfeysinin mürəkkəbliklərini aradan qaldırmaq üçün Servopilot DLL adlı dinamik əlaqəli kitabxana Hərəkət Nəzarətçisi ilə təchiz edilmişdir. "Nazik" DLL, Hərəkət İdarəçisinə G kodu əmrlərini təqdim etmək və telemetriya və status məlumatlarını geri almaq üçün (ortaq yaddaş interfeysi ilə müqayisədə) daha sadə API təqdim edir. DLL API bu sənəddə təsvir edilmişdir.
Daxili olaraq, Hərəkət Nəzarətçisi prosesində Tətbiq Prosesindən G kodu əmrlərini qəbul etmək üçün Boru Kəməri 0 və Boru Kəməri 1 var. Boru kəmərləri sabit ölçüdə dövri tamponlardır. Lazım gələrsə, G-kod əmrlərinin iki müstəqil axını paralel olaraq icra oluna bilməsi üçün iki boru kəməri var. Yeni G kodu əmrini təqdim edərkən, Tətbiq Prosesi əmri bir boru xəttinə və ya digərinə əlavə etməyi və ya boru kəmərindəki əmrləri yeni əmrlər dəsti ilə əvəz etməyi seçə bilər. G-kod əmrləri Hərəkət İdarəetmə prosesinin daxili komponenti olan Virtual Maşın tərəfindən yerinə yetirilir. G-kod əmrləri Tətbiq Prosesi tərəfindən mətn şəklində təqdim edildiyi üçün mətni Virtual Maşın tərəfindən başa düşülən daxili ikili koda çevirən daxili Kompilyator var. Tək sətirli G kodu əmrini, eləcə də tam G kodu proqramının mətnini təqdim etmək mümkündür. Kompilyator mətnləri sətir-sətir emal edir və Virtual Maşın tərəfindən icrası üçün əmrləri boru kəmərlərinə itələyir. Virtual Maşın boru kəmərlərini “ilk gələn, ilk çıxar” (FIFO) əsasında emal edir. Hərəkət Nəzarətçisi bütün hərəkətə nəzarət sisteminin işini idarə edən konfiqurasiya edilə bilən idarəetmə dövrə tezliyinə (məsələn, 500 Hz) malikdir. Tək Tətbiq Prosesinin yalnız bir Hərəkətə Nəzarət prosesinə qoşulmasına icazə verilir. Bir neçə Hərəkətə Nəzarət prosesini onlara unikal paylaşılan_memory_id-ləri təyin etməklə icra etmək mümkündür. Servopilot DLL API mövzu üçün təhlükəsiz deyil və ya təkrar giriş deyil. Tətbiq proqramları dinamik əlaqəli kitabxanaların (DLL) yüklənməsini dəstəkləyən istənilən proqramlaşdırma dilində yazıla bilər. Tipik seçimlər C++, Python, C#, MATLAB və Lab-dırView.
Servopilot DLL API
Hərəkət Nəzarətçisinə qoşulur
- extern “C” bool əlaqə (int shared_memory_id);
- extern "C" bool disconnect();
Connect() funksiyası Servopilot DLL-ni Tətbiq Prosesi və Hərəkət Nəzarəti prosesi arasında proseslərarası əlaqə üçün istifadə olunan paylaşılan yaddaş seqmentinə əlavə edir. Hərəkət Nəzarətçisi prosesində unikal paylaşılan_memory_id, əvvəlcədən konfiqurasiya edilmiş tam ədəd var. Funksiya bu identifikatoru yeganə arqument kimi qəbul edir. Verilmiş identifikatorla paylaşılan yaddaş seqmenti uğurla qoşulduqda funksiya doğru qaytarır. Disconnect() funksiyası Servopilot DLL-ni paylaşılan yaddaş seqmentindən ayırır. Tətbiq prosesinin sonunda bu rejimin çağırılması isteğe bağlıdır.
G-kod əmrlərinin Motion Controller prosesinə göndərilməsi
- extern “C” bool gcode(const char* proqram_mətn);
- extern “C” bool gcode_replace(const char* proqram_mətni);
- extern “C” bool icrası (const char* proqram_mətni);
- extern “C” bool execute_replace(const char* proqram_mətni);
gcode() funksiyası G-kod əmrini və ya çoxlu əmrləri Hərəkət Nəzarətçisi prosesinin boru kəmərlərinə itələdi. Boru kəmərlərində oturan bütün əvvəlki G kodu əmrləri qorunur. Boru kəməri FIFO siklik buferdir. Yeni əmrlər boru kəmərindən əvvəlki bütün əmrlər yerinə yetirildikdən sonra yerinə yetiriləcək boru kəmərlərinə əlavə olunur. Funksiya əmrlərin həqiqətən yerinə yetirilməsini gözləmir; o, sadəcə əmrləri boru kəmərlərinə itələyir və geri qayıdır. gcode_replace() funksiyası əvvəlcə bütün boru kəmərlərini təmizləyir və sonra prioritet icra üçün yeni əmrləri boru kəmərlərinə itələyir. Nəticədə, Hərəkət Nəzarətçisi bütün davam edən hərəkətləri dayandırır və dərhal yeni qəbul edilmiş G kodu əmrləri ilə müəyyən edilmiş yeni hərəkətlərlə davam edir. Belə bir dəyişdirmə, məsələn, fırlanma anına əsaslanan idarəetmə üçün idarəetmə dövrəsinin tezliyinin sürəti ilə edilə bilər. Funksiya yeni əmrlərin həqiqətən yerinə yetirilməsini gözləmir. execute() funksiyası gcode() funksiyası ilə eynidir, istisna olmaqla, funksiyanın çağırışı yalnız yeni G kodu əmrləri yerinə yetirildikdən sonra qaytarılır. Qeyd edək ki, boru kəmərlərində artıq oturmuş bütün əvvəlki əmrlər əvvəlcə yerinə yetirilir. Advantaggcode() üzərində execute() funksiyasının e tətbiqi idarəetmə axınının sadəliyindədir. Bir dezavantajtage odur ki, execute() çağırışı bütün boru kəmərlərindən bütün G-kod əmrlərini yerinə yetirmək üçün lazım olan qədər uzun müddətə Tətbiq Prosesini dayandıra bilər. execute_replace() funksiyası gcode_replace() funksiyası ilə eynidir, istisna olmaqla, funksiyanın çağırışı yalnız yeni təqdim edilmiş əmrlər yerinə yetirildikdən sonra qaytarılır.
| Əvvəlki G kodu əmrlərinin boru xəttini təmizləyir | Yeni əmrlər həqiqətən icra olunana qədər gözləyin və beləliklə, dayandırılır Müraciət Prosesi | |
| gcode() | yox | yox |
| gcode_replace() | Bəli | yox |
| icra () | yox | Bəli |
| icra_əvəz et() | Bəli | Bəli |
Yeni G-kod əmrləri icra üçün Hərəkət Nəzarətçisi prosesinin boru kəmərlərinə uğurla təqdim edildikdə, bütün funksiyalar doğru sayılır.
Prosesin Sinxronizasiyası
- extern “C” int synchronize();
Synchronize() funksiyası Tətbiq Prosesinə Hərəkətə Nəzarət prosesi bütün əvvəllər təqdim edilmiş G-kod əmrlərinin icrasını başa çatdırana qədər gözləməyə imkan verir. Bütün boru kəmərləri boş olana qədər funksiyanın çağırışı dayanır. Bu zəng, bütün boru kəmərlərindən bütün G-kod əmrlərini yerinə yetirmək üçün lazım olan qədər uzun müddətə Tətbiq Prosesini dayandıra bilər.
Prosesin Dövlət İdarəetməsi
- extern “C” bool pause();
- extern “C” bool resume();
- extern “C” bool reset();
- extern “C” int get_mode();
Bu funksiyalar Motion Controller prosesinin vəziyyətini idarə edir. Pause() funksiyası Motion Controller prosesi tərəfindən G-kod əmrlərinin icrasını müvəqqəti dayandırır. Bu funksiya robot sisteminin işini dayandırmaq üçün istifadə olunur. Əməliyyat resume() çağırışı ilə yenidən başladılır.
| Nəticə a get_mode() zəng edin | Hərəkət tənzimləyicisinin müvafiq iş rejimi |
| 0 | OFF |
| 1 | PAUZA |
| 2 | XƏTA |
| 3 | KAÇIŞ |
Baltaların telemetriyası
- extern “C” cüt get_axis_kursor(int ox_nömrəsi);
- extern “C” ikiqat əldə_ox_mövqesi(int ox_nömrəsi);
- extern “C” int get_axis_work_zone_count(int ox_number);
- extern “C” int get_axis_fault_bits(int ox_number);
- extern "C" bool ox_online (int ox_nömrəsi);
get_axis_cursor() funksiyası Hərəkət Nəzarətçisinin müəyyən bir anda oxa əmr edilmiş mövqe kimi ötürdüyü fırlanan və ya bucaqlı istinad mövqeyini qaytarır. Bunun əksinə olaraq, get_axis_position() oxun fiziki olaraq müəyyən bir anda olduğu oxun faktiki telemetriya mövqeyini qaytarır. Baltalar fiziki ətalətə malik olduğundan, G-kod proqramının virtual “kursor” oxu mövqeyi adətən fiziki oxun faktiki mövqeyindən irəlidədir. Həm get_axis_cursor() və get_axis_position() nəticələri ox növündən (xətti və ya fırlanan) asılı olaraq millimetr və ya dərəcə ilə qaytarılır. get_axis_work_zone_count() funksiyası kodlayıcı saylarında telemetriya oxu mövqeyini qaytarır. get_axis_fault_bits() funksiyası telemetriya vasitəsilə oxdan alınan Fault Bits məlumatını qaytarır. Qaytarılan dəyəri necə şərh etmək barədə məlumat üçün servo sürücünüzün Cihaz Referansına baxın. Sıfır (0) “Nəqs yoxdur” deməkdir. Sıfır olmayan (!=0) oxda bir növ nasazlıq deməkdir. is_axis_online() funksiyası oxun servo nəzarətçisinin CAN və ya USB şəbəkəsində telemetriya yayımlayıb-yayımlamadığını bildirir.
Example Python-da tətbiq

- Bizi ziyarət edin www.servosila.com/en/motion-control
və - YouTube: http://www.youtube.com/user/servosila
- www.servosila.com
Sənədlər / Resurslar
![]() |
SERVOSILA Hərəkət Nəzarətçisi [pdf] Təlimat kitabçası Hərəkət nəzarətçisi, nəzarətçi |

