ឧបករណ៍បញ្ជាចលនា SERVOSILA

អំពី Servosila Motion Controller
Servosila Motion Controller គឺជាកម្មវិធីបង្កប់សម្រាប់គ្រប់គ្រងចលនានៃប្រព័ន្ធមនុស្សយន្តពហុអ័ក្សទំនើប។ កម្មវិធីដំណើរការលើ Linux, Windows ឬជាកម្មវិធីបង្កប់នៅលើ MCUs ដែលបានបង្កប់។
Servosila Motion Controller ប្រើ G-code សម្រាប់គោលបំណងដូចខាងក្រោម៖
- ជាមធ្យោបាយកំណត់ធរណីមាត្រនៃចលនាសំរបសំរួលក្នុងទម្រង់អត្ថបទ
- ជាពិធីការទំនាក់ទំនងកម្រិតខ្ពស់រវាង Motion Controller និងកម្មវិធីអ្នកប្រើប្រាស់កម្រិតខ្ពស់។
- ជាភាសាស្គ្រីបសាមញ្ញសម្រាប់ការសរសេរកម្មវិធីប្រព័ន្ធមនុស្សយន្តពហុអ័ក្ស
- ជាភាសាគោលដៅសម្រាប់បង្កើត AI និង LLMs ។
ស្ថាបត្យកម្មកម្មវិធី
Servosila Motion Controller ដែលបង្ហាញជាប្រអប់ពណ៌ប្រផេះនៅលើដ្យាក្រាមស្ថាបត្យកម្មខាងក្រោម ដំណើរការជាដំណើរការផ្ទៃខាងក្រោយនៅក្នុងលីនុច ឬវីនដូ។ ដំណើរការនេះទាក់ទងទៅ servo drives តាមរយៈបណ្តាញ CAN ឬ USB ។ ដំណើរការ Motion Controller ផ្តល់នូវចំណុចប្រទាក់មេម៉ូរីដែលបានចែករំលែកដែលមានភាពយឺតយ៉ាវទាបសម្រាប់ការទំនាក់ទំនងអន្តរដំណើរការជាមួយនឹងដំណើរការកម្មវិធីតែមួយ ដែលបង្ហាញជាប្រអប់ពណ៌សនៅលើដ្យាក្រាម។ ដើម្បីលុបបំបាត់ភាពស្មុគស្មាញនៃចំណុចប្រទាក់អង្គចងចាំដែលបានចែករំលែក បណ្ណាល័យដែលភ្ជាប់ដោយថាមវន្តហៅថា Servopilot DLL ត្រូវបានផ្តល់ជូនជាមួយឧបករណ៍បញ្ជាចលនា។ DLL "ស្តើង" បង្ហាញ API សាមញ្ញជាង (បើប្រៀបធៀបទៅនឹងចំណុចប្រទាក់អង្គចងចាំដែលបានចែករំលែក) សម្រាប់បញ្ជូនពាក្យបញ្ជា G-code ទៅ Motion Controller និងសម្រាប់ការទទួល telemetry និងព័ត៌មានស្ថានភាពត្រឡប់មកវិញ។ API DLL ត្រូវបានពិពណ៌នានៅក្នុងឯកសារនេះ។
នៅខាងក្នុង ដំណើរការ Motion Controller មាន Pipeline 0 និង Pipeline 1 សម្រាប់ទទួលពាក្យបញ្ជា G-code ពីដំណើរការកម្មវិធី។ បំពង់បង្ហូរប្រេងគឺជាបណ្តុំរង្វិលនៃទំហំថេរ។ មានបំពង់ពីរ ដូច្នេះការស្ទ្រីមឯករាជ្យពីរនៃពាក្យបញ្ជា G-code អាចត្រូវបានអនុវត្តស្របគ្នាប្រសិនបើចាំបាច់។ នៅពេលបញ្ជូនពាក្យបញ្ជា G-code ថ្មី ដំណើរការកម្មវិធីអាចជ្រើសរើសបន្ថែមពាក្យបញ្ជាទៅបំពង់មួយ ឬផ្សេងទៀត ឬជំនួសពាក្យបញ្ជានៅក្នុងបំពង់ជាមួយនឹងសំណុំនៃពាក្យបញ្ជាថ្មី។ ពាក្យបញ្ជា G-code ត្រូវបានប្រតិបត្តិដោយ Virtual Machine ដែលជាធាតុផ្សំខាងក្នុងនៃដំណើរការ Motion Controller។ ដោយសារពាក្យបញ្ជា G-code ត្រូវបានដាក់ជូនដោយដំណើរការកម្មវិធីក្នុងទម្រង់ជាអត្ថបទ វាមានកម្មវិធីចងក្រងខាងក្នុងដែលបកប្រែអត្ថបទទៅជាកូដគោលពីរខាងក្នុងដែលយល់ដោយម៉ាស៊ីននិម្មិត។ វាអាចទៅរួចក្នុងការបញ្ជូនពាក្យបញ្ជា G-code បន្ទាត់តែមួយ ក៏ដូចជាអត្ថបទនៃកម្មវិធី G-code ពេញលេញ។ កម្មវិធីចងក្រងដំណើរការអត្ថបទតាមបន្ទាត់មួយ ហើយរុញពាក្យបញ្ជាទៅក្នុងបំពង់សម្រាប់ប្រតិបត្តិដោយម៉ាស៊ីននិម្មិត។ ម៉ាស៊ីននិម្មិតដំណើរការបំពង់បង្ហូរប្រេងនៅលើមូលដ្ឋាន "ចេញដំបូង" (FIFO) ។ ឧបករណ៍បញ្ជាចលនាមានប្រេកង់រង្វិលជុំត្រួតពិនិត្យដែលអាចកំណត់រចនាសម្ព័ន្ធបាន (ឧទាហរណ៍ 500 Hz) ដែលគ្រប់គ្រងដំណើរការនៃប្រព័ន្ធគ្រប់គ្រងចលនាទាំងមូល។ ដំណើរការកម្មវិធីតែមួយត្រូវបានអនុញ្ញាតឱ្យភ្ជាប់ទៅនឹងដំណើរការគ្រប់គ្រងចលនាតែមួយប៉ុណ្ណោះ។ វាអាចធ្វើទៅបានដើម្បីដំណើរការដំណើរការគ្រប់គ្រងចលនាច្រើនដោយកំណត់ពួកវានូវ shared_memory_id តែមួយគត់។ Servopilot DLL API មិនមានសុវត្ថិភាព ឬបញ្ចូលឡើងវិញទេ។ កម្មវិធីអាចត្រូវបានសរសេរជាភាសាសរសេរកម្មវិធីណាមួយដែលគាំទ្រការផ្ទុកបណ្ណាល័យដែលភ្ជាប់ដោយថាមវន្ត (DLL)។ ជម្រើសធម្មតាគឺ C++, Python, C#, MATLAB និង LabView.
Servopilot DLL API
កំពុងភ្ជាប់ទៅឧបករណ៍បញ្ជាចលនា
- extern “C” bool connect (int shared_memory_id);
- extern "C" bool disconnect();
មុខងារ connect() ភ្ជាប់ Servopilot DLL ទៅនឹងផ្នែកអង្គចងចាំដែលបានចែករំលែកដែលប្រើសម្រាប់ការទំនាក់ទំនងអន្តរដំណើរការរវាងដំណើរការកម្មវិធី និងដំណើរការ Motion Controller។ ដំណើរការ Motion Controller មាន shared_memory_id តែមួយគត់ ដែលជាចំនួនគត់ដែលបានកំណត់ទុកជាមុន។ មុខងារយកលេខសម្គាល់នេះជាអាគុយម៉ង់តែមួយគត់។ មុខងារនេះត្រឡប់ពិត ប្រសិនបើផ្នែកអង្គចងចាំដែលបានចែករំលែកជាមួយឧបករណ៍កំណត់អត្តសញ្ញាណដែលបានផ្តល់ឱ្យត្រូវបានភ្ជាប់ដោយជោគជ័យ។ មុខងារ disconnect() ផ្ដាច់ Servopilot DLL ពីផ្នែកអង្គចងចាំដែលបានចែករំលែក។ ការហៅទម្លាប់នេះនៅចុងបញ្ចប់នៃដំណើរការកម្មវិធីគឺស្រេចចិត្ត។
ការបញ្ជូនពាក្យបញ្ជា G-code ទៅដំណើរការ 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-code ពីមុនទាំងអស់ដែលបានអង្គុយនៅក្នុងបំពង់ត្រូវបានរក្សា។ បំពង់បង្ហូរប្រេងគឺជាសតិបណ្ដោះអាសន្នរបស់ FIFO ។ ពាក្យបញ្ជាថ្មីត្រូវបានបន្ថែមទៅនឹងបំពង់ដែលត្រូវបានប្រតិបត្តិបន្ទាប់ពីពាក្យបញ្ជាមុនទាំងអស់ពីបំពង់ត្រូវបានប្រតិបត្តិ។ មុខងារមិនរង់ចាំសម្រាប់ពាក្យបញ្ជាដែលត្រូវបានប្រតិបត្តិយ៉ាងពិតប្រាកដ។ វាគ្រាន់តែរុញពាក្យបញ្ជាទៅបំពង់បង្ហូរប្រេង ហើយត្រលប់មកវិញ។ មុខងារ gcode_replace() ជាដំបូងជម្រះបំពង់ទាំងអស់ ហើយបន្ទាប់មករុញពាក្យបញ្ជាថ្មីទៅក្នុងបំពង់សម្រាប់ដំណើរការអាទិភាព។ ជាលទ្ធផល Motion Controller រំខានរាល់ចលនាដែលកំពុងដំណើរការ ហើយបន្តភ្លាមៗជាមួយនឹងចលនាថ្មីដែលកំណត់ដោយពាក្យបញ្ជា G-code ដែលទើបទទួលបានថ្មី។ ការជំនួសបែបនេះអាចត្រូវបានធ្វើជាមួយនឹងល្បឿននៃប្រេកង់រង្វិលជុំត្រួតពិនិត្យឧទាហរណ៍សម្រាប់ការត្រួតពិនិត្យផ្អែកលើកម្លាំងបង្វិលជុំ។ មុខងារមិនរង់ចាំសម្រាប់ពាក្យបញ្ជាថ្មីដែលត្រូវបានប្រតិបត្តិយ៉ាងពិតប្រាកដនោះទេ។ អនុគមន៍ execute() គឺដូចគ្នាទៅនឹង gcode() លើកលែងតែការហៅរបស់អនុគមន៍នឹងត្រលប់មកវិញនៅពេលដែលពាក្យបញ្ជា G-code ថ្មីត្រូវបានប្រតិបត្តិ។ ចំណាំថាពាក្យបញ្ជាពីមុនទាំងអស់ដែលបានអង្គុយរួចហើយនៅក្នុងបំពង់ត្រូវបានប្រតិបត្តិជាមុន។ អាវ៉ានtage នៃ execute() លើ gcode() គឺនៅក្នុងភាពសាមញ្ញនៃលំហូរនៃការគ្រប់គ្រងកម្មវិធី។ មួយ disadvantage គឺថាការហៅ execute() អាចបញ្ឈប់ដំណើរការកម្មវិធីសម្រាប់រយៈពេលបន្ថែមមួយសម្រាប់ពេលវេលាច្រើនដូចដែលវាត្រូវការដើម្បីប្រតិបត្តិពាក្យបញ្ជា G-code ពីគ្រប់បំពង់ទាំងអស់។ អនុគមន៍ execute_replace() គឺដូចគ្នាទៅនឹងមុខងារ gcode_replace() លើកលែងតែការហៅរបស់អនុគមន៍ត្រឡប់តែបន្ទាប់ពីពាក្យបញ្ជាដែលបានដាក់ថ្មីត្រូវបានប្រតិបត្តិ។
| សម្អាតបំពង់នៃពាក្យបញ្ជា G-code ពីមុន | រង់ចាំរហូតដល់ពាក្យបញ្ជាថ្មីត្រូវបានប្រតិបត្តិយ៉ាងពិតប្រាកដ ដូច្នេះការជាប់គាំង ដំណើរការដាក់ពាក្យ | |
| gcode() | ទេ | ទេ |
| gcode_replace() | បាទ | ទេ |
| ប្រតិបត្តិ() | ទេ | បាទ |
| execute_replace() | បាទ | បាទ |
មុខងារទាំងអស់ត្រឡប់ពិត ប្រសិនបើពាក្យបញ្ជា G-code ថ្មីត្រូវបានដាក់ជូនដោយជោគជ័យទៅកាន់បំពង់នៃដំណើរការ Motion Controller សម្រាប់ប្រតិបត្តិ។
ដំណើរការធ្វើសមកាលកម្ម
- ខាងក្រៅ “C” int synchronize();
មុខងារ synchronize() អនុញ្ញាតឱ្យដំណើរការកម្មវិធីរង់ចាំរហូតដល់ដំណើរការត្រួតពិនិត្យចលនាបញ្ចប់ការប្រតិបត្តិពាក្យបញ្ជា G-code ដែលបានបញ្ជូនពីមុនទាំងអស់។ ការហៅទូរសព្ទរបស់មុខងារផ្អាករហូតដល់បំពង់ទាំងអស់ទទេ។ ការហៅទូរសព្ទនេះអាចបញ្ឈប់ដំណើរការកម្មវិធីសម្រាប់រយៈពេលបន្ថែមមួយ សម្រាប់រយៈពេលច្រើនតាមដែលវាត្រូវការដើម្បីប្រតិបត្តិពាក្យបញ្ជា G-code ទាំងអស់ពីគ្រប់បំពង់ទាំងអស់។
ដំណើរការគ្រប់គ្រងរដ្ឋ
- ខាងក្រៅ "C" bool pause();
- extern “C” bool resume();
- extern "C" bool reset();
- ខាងក្រៅ “C” int get_mode();
មុខងារទាំងនេះគ្រប់គ្រងស្ថានភាពនៃដំណើរការឧបករណ៍បញ្ជាចលនា។ មុខងារផ្អាក() ផ្អាកការប្រតិបត្តិនៃពាក្យបញ្ជា G-code ជាបណ្តោះអាសន្ន ដោយដំណើរការ Motion Controller។ មុខងារនេះត្រូវបានប្រើដើម្បីផ្អាកប្រតិបត្តិការនៃប្រព័ន្ធមនុស្សយន្ត។ ប្រតិបត្តិការត្រូវបានចាប់ផ្តើមឡើងវិញដោយប្រើ resume() call ។
| លទ្ធផលនៃ ក get_mode() ហៅ | របៀបដែលត្រូវគ្នានៃប្រតិបត្តិការរបស់ឧបករណ៍បញ្ជាចលនា |
| 0 | បិទ |
| 1 | ផ្អាក |
| 2 | កំហុស |
| 3 | កំពុងរត់ |
Axes Telemetry
- ខាងក្រៅ “C” double get_axis_cursor(int axis_number);
- ខាងក្រៅ “C” double get_axis_position(int axis_number);
- ខាងក្រៅ “C” int get_axis_work_zone_count(int axis_number);
- ខាងក្រៅ “C” int get_axis_fault_bits(int axis_number);
- ខាងក្រៅ “C” bool is_axis_online(int axis_number);
អនុគមន៍ get_axis_cursor() ត្រឡប់ទីតាំងយោងបង្វិល ឬមុំដែលឧបករណ៍បញ្ជាចលនាបញ្ជូនជាទីតាំងបញ្ជាទៅអ័ក្សនៅពេលជាក់លាក់មួយ។ ផ្ទុយទៅវិញ get_axis_position() ត្រឡប់ទីតាំង telemetry ពិតប្រាកដនៃអ័ក្ស ដែលអ័ក្សគឺនៅខណៈពេលជាក់លាក់មួយ។ ដោយសារអ័ក្សមាននិចលភាពរាងកាយ ទីតាំងអ័ក្ស "ទស្សន៍ទ្រនិច" និម្មិតរបស់កម្មវិធី G-code ជាធម្មតានៅពីមុខទីតាំងជាក់ស្តែងរបស់អ័ក្សរាងកាយ។ លទ្ធផលនៃ get_axis_cursor() និង get_axis_position() ត្រូវបានត្រឡប់ជាមីលីម៉ែត្រ ឬដឺក្រេ អាស្រ័យលើប្រភេទអ័ក្ស (លីនេអ៊ែរ ឬរ៉ូតារី)។ អនុគមន៍ get_axis_work_zone_count() ត្រឡប់ទីតាំងអ័ក្សតេឡេម៉ែត្រក្នុងចំនួនអ៊ិនកូដឌ័រ។ អនុគមន៍ get_axis_fault_bits() ត្រឡប់ទិន្នន័យ Fault Bits ដែលទទួលបានពីអ័ក្សតាមរយៈ telemetry ។ សូមមើលឯកសារយោងឧបករណ៍របស់ servo drive របស់អ្នកសម្រាប់ព័ត៌មានអំពីរបៀបបកស្រាយតម្លៃដែលបានត្រឡប់មកវិញ។ សូន្យ (0) មានន័យថា "គ្មានកំហុស" ។ មិនមែនសូន្យ (!=0) មានន័យថាមានកំហុសមួយចំនួននៅក្នុងអ័ក្ស។ មុខងារ is_axis_online() ប្រាប់ថាតើឧបករណ៍បញ្ជា servo របស់អ័ក្សកំពុងផ្សាយតេឡេមេទ្រីនៅលើបណ្តាញ CAN ឬ USB ។
Example កម្មវិធីនៅក្នុង Python

- ទស្សនាពួកយើងនៅ www.servosila.com/en/motion-control
និង - YouTube៖ http://www.youtube.com/user/servosila
- www.servosila.com
ឯកសារ/ធនធាន
![]() |
ឧបករណ៍បញ្ជាចលនា SERVOSILA [pdf] សៀវភៅណែនាំ ឧបករណ៍បញ្ជាចលនា, ឧបករណ៍បញ្ជា |

