SERVOSILA-និមិត្តសញ្ញា

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

SERVOSILA-Motion-Controller-ផលិតផល

អំពី Servosila Motion Controller

Servosila Motion Controller គឺជាកម្មវិធីបង្កប់សម្រាប់គ្រប់គ្រងចលនានៃប្រព័ន្ធមនុស្សយន្តពហុអ័ក្សទំនើប។ កម្មវិធីដំណើរការលើ Linux, Windows ឬជាកម្មវិធីបង្កប់នៅលើ MCUs ដែលបានបង្កប់។SERVOSILA-Motion-Controller-fig-1

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 ត្រូវបានពិពណ៌នានៅក្នុងឯកសារនេះ។SERVOSILA-Motion-Controller-fig-2

នៅខាងក្នុង ដំណើរការ 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

SERVOSILA-Motion-Controller-fig-3

ឯកសារ/ធនធាន

ឧបករណ៍បញ្ជាចលនា SERVOSILA [pdf] សៀវភៅណែនាំ
ឧបករណ៍បញ្ជាចលនា, ឧបករណ៍បញ្ជា

ឯកសារយោង

ទុកមតិយោបល់

អាសយដ្ឋានអ៊ីមែលរបស់អ្នកនឹងមិនត្រូវបានផ្សព្វផ្សាយទេ។ វាលដែលត្រូវការត្រូវបានសម្គាល់ *