1. Таблиця швидкого довідника M-кодів
| Код | Опис |
|---|---|
Пауза програми |
|
Кінець програми |
|
Пауза зміни піддону |
|
Управління шпинделем |
|
Зміна інструменту |
|
Контроль охолоджувальної рідини |
|
Орієнтний шпиндель |
|
Увімкнення/вимкнення корекції подачі та шпинделя |
|
Керування перевизначенням подачі |
|
Керування перемиканням шпинделя |
|
Адаптивне керування подачею |
|
Контроль зупинки подачі |
|
Встановити номер поточного інструменту |
|
Вихідний контроль |
|
Контроль введення |
|
Керування аналоговим виходом |
|
Керування аналоговим виходом |
|
Зберегти стан модального вікна |
|
Анулювати збережений модальний стан |
|
Відновити модальний стан |
|
Зберегти стан модального вікна автовідновлення |
|
Виклик та повернення з підпрограми |
|
Користувацькі M-коди |
2. M0, M1 Пауза програми
-
M0 - тимчасово призупинити запущену програму. LinuxCNC залишається в автоматичному режимі, тому MDI та інші ручні дії не активовані. Натискання кнопки відновлення перезапустить програму з наступного рядка.
-
«M1» — тимчасово призупинити виконання програми, якщо ввімкнено опціональний вимикач зупинки. LinuxCNC залишається в автоматичному режимі, тому MDI та інші ручні дії не ввімкнені. Натискання кнопки відновлення призведе до перезапуску програми з наступного рядка.
|
Note
|
Програмувати M0 та M1 у режимі MDI можна, але ефект, ймовірно, не буде помітним, оскільки нормальною поведінкою в режимі MDI є зупинка після кожного рядка введення. |
3. Кінець програми M2, M30
-
M2 - завершення програми. Натискання
Cycle Start("R" в графічному інтерфейсі Axis) перезапустить програму з початку файлу. -
«M30» – замінити палетні човники та завершити програму. Натискання кнопки «Cycle Start» запустить програму з початку файлу.
Обидві ці команди мають такі ефекти:
-
Перехід з автоматичного режиму на режим ручного введення даних.
-
Зміщення початку координат встановлені за замовчуванням (наприклад, «G54»).
-
Вибрана площина встановлюється як площина XY (наприклад, G17).
-
Режим відстані встановлено на абсолютний режим (наприклад, «G90»).
-
Режим швидкості подачі встановлено на одиниці за хвилину (наприклад, G94).
-
Коригування подачі та швидкості встановлене на УВІМК. (наприклад, «M48»).
-
Компенсацію на різець вимкнено (як у випадку з «G40»).
-
Шпиндель зупинено (як у випадку з M5).
-
Поточний режим руху встановлено на подачу (наприклад, G1).
-
Охолоджувальна рідина вимкнена (як у випадку з M9).
|
Note
|
Рядки коду після M2/M30 не будуть виконані. Натискання кнопки Cycle Start запустить програму з початку файлу. |
|
Warning
|
Використання % для обгортання G-коду не виконує ту саму дію, що й «Кінець програми». Див. розділ File Requirements для отримання додаткової інформації про те, чого не виконує використання %. |
4. Пауза зміни піддону M60
-
«M60» — обмін палетними челноками, а потім тимчасове призупинення програми, що виконується (незалежно від налаштування додаткового вимикача зупинки). Натискання кнопки запуску циклу призведе до поновлення програми з наступного рядка.
5. M3, M4, M5 Шпиндельне керування
-
M3 [$n] - запустіть вибраний шпиндель за годинниковою стрілкою на швидкості S.
-
M4 [$n] - запустіть вибраний шпиндель проти годинникової стрілки на швидкості S.
-
M5 [$n] - зупинити вибраний шпиндель.
Використовуйте $ для роботи з певними шпинделями. Якщо $ пропущено, команди за замовчуванням працюють зі шпинделем 0. Використовуйте $-1 для роботи з усіма активними шпинделями.
У цьому прикладі шпинделі 0, 1 та 2 будуть запущені одночасно з різними швидкостями:
S100 $0 S200 $1 S300 $2 M3 $-1
У цьому прикладі шпиндель 1 буде обертатися в зворотному напрямку, але інші шпинделі залишаться обертатися вперед:
M4 $1
І це зупинить шпиндель 2, а інші шпинделі залишать обертатися:
M5 $2
Якщо символ $ пропущено, то поведінка буде точно такою ж, як і для одношпиндельного верстата.
Можна використовувати «M3» або «M4», якщо швидкість шпинделя S встановлена на нуль. У цьому випадку (або якщо перемикач перевищення швидкості увімкнений і встановлений на нуль) шпиндель не почне обертатися. Якщо пізніше швидкість шпинделя буде встановлена вище нуля (або перемикач перекриття буде увімкнений), шпиндель почне обертатися. Можна використовувати «M3» або «M4», коли шпиндель вже обертається, або «M5», коли шпиндель вже зупинився.
6. Зміна інструменту M6
6.1. Ручна зміна інструменту
Якщо завантажено компонент HAL «hal_manualtoolchange», M6 зупинить шпиндель і запропонує користувачеві замінити інструмент відповідно до останнього запрограмованого номера «T-». Докладнішу інформацію про hal_manualtoolchange див. у розділі Manual Tool Change.
6.2. Зміна інструменту
Щоб замінити інструмент у шпинделі з поточного інструменту на останній вибраний інструмент (за допомогою слова T — див. розділ Вибір інструменту), запрограмуйте «M6». Після завершення заміни інструменту:
-
Шпиндель зупиниться.
-
Інструмент, який було вибрано (за допомогою слова T у тому ж рядку або у будь-якому рядку після попередньої зміни інструменту), буде знаходитися у шпинделі.
-
Якщо вибраний інструмент не був у шпинделі перед зміною інструмента, інструмент, який був у шпинделі (якщо він був), буде поміщений назад у магазин пристрою зміни інструментів.
-
Якщо налаштовано у файлі INI, деякі позиції осей можуть зміщуватися під час видачі M6. Див. розділ EMCIO для отримання додаткової інформації про опції зміни інструменту.
-
Жодних інших змін не буде внесено. Наприклад, охолоджувальна рідина продовжуватиме подавати під час зміни інструменту, якщо її не вимкнути за допомогою «M9».
|
Note
|
Слово «T-» – це ціле число, що позначає номер гнізда інструмента в каруселі (не його індекс). |
|
Warning
|
Зміщення довжини інструмента не змінюється командою «M6», використовуйте «G43» після «M6», щоб змінити зміщення довжини інструмента. |
Зміна інструменту може включати рух осі. Можна (але це не доцільно) запрограмувати зміну інструменту, який вже знаходиться в шпинделі. Немає нічого страшного, якщо у вибраному слоті немає інструменту; в цьому випадку шпиндель буде порожнім після зміни інструменту. Якщо останнім був вибраний слот нуль, то після зміни інструменту в шпинделі точно не буде інструменту. Змінник інструменту повинен бути налаштований для виконання зміни інструменту в HAL і, можливо, ClassicLadder.
7. M7, M8, M9 Контроль охолоджувальної рідини
-
M7 - Увімкніть розпилювач охолоджувальної рідини. M7 керує контактом iocontrol.0.coolant-mist.
-
M8 - Увімкнути протікання охолоджувальної рідини. M8 керує контактом iocontrol.0.coolant-flood.
-
M9 - Вимкніть обидва M7 та M8.
Підключіть один або обидва контакти керування охолоджуючою рідиною до HAL, перш ніж M7 або M8 керуватимуть виходом. M7 та M8 можна використовувати для ввімкнення будь-якого виходу за допомогою G-коду.
Ви можете використовувати будь-яку з цих команд, незалежно від поточного стану охолоджувальної рідини.
8. Шпиндель M19 Orient
M19 R- Q- [P-] [$-]
-
R Позиція для повороту від 0, дійсний діапазон 0-360 градусів
-
Q Кількість секунд очікування до завершення орієнтації. Якщо spindle.N.is-oriented не стає true протягом таймауту Q, виникає помилка.
-
P Напрямок повороту в потрібне положення.
-
Поворот на «0» для найменшого кутового переміщення (за замовчуванням)
-
1 завжди обертайте за годинниковою стрілкою (те саме, що й напрямок M3)
-
2 завжди обертайте проти годинникової стрілки (як у напрямку M4)
-
-
$ Шпиндель для орієнтації (фактично визначає лише, які контакти HAL передають команди положення шпинделя)
M19 – це команда модальної групи 7, як і M3, M4 та M5. M19 очищається будь-якою з M3, M4, M5.
Орієнтація шпинделя вимагає квадратурного енкодера з індексом для визначення положення вала шпинделя та напрямку обертання.
Налаштування INI у розділі [RS274NGC]:
-
ORIENT_OFFSET = 0-360 (фіксоване зміщення в градусах, додане до слова M19 R)
-
Піни HAL
-
spindle.N.orient-angle (out float) Бажана орієнтація шпинделя для M19. Значення параметра R-слова M19 плюс значення параметра INI [RS274NGC]ORIENT_OFFSET.
-
spindle.N.orient-mode (out s32) Бажаний режим обертання шпинделя. Відображає слово параметра M19 P, за замовчуванням = 0.
-
spindle.N.orient (out bit) Вказує на початок циклу орієнтації шпинделя. Встановлюється за допомогою M19. Скидається за допомогою будь-якої з M3, M4, M5. Якщо помилка орієнтації шпинделя не дорівнює нулю під час значення «орієнтація шпинделя істинна», команда M19 завершується невдачею з повідомленням про помилку.
-
spindle.N.is-oriented (in bit) Контакт підтвердження орієнтації шпинделя. Завершує цикл орієнтації. Якщо орієнтація шпинделя була справжньою, коли було підтверджено орієнтацію шпинделя, контакт орієнтації шпинделя очищується, а контакт блокування шпинделя підтверджується. Також підтверджується контакт гальма шпинделя.
-
spindle.N.orient-fault (in s32) Введено код помилки для орієнтаційного циклу. Будь-яке значення, відмінне від нуля, призведе до переривання орієнтаційного циклу.
-
spindle.N.locked (out bit) Повний штифт орієнтований на шпиндель. Очищається будь-яким з M3, M4, M5.
-
9. Керування швидкістю та подачею M48, M49
-
M48 - увімкнути елементи керування швидкістю шпинделя та швидкістю подачі.
-
M49 - вимкніть обидва елементи керування.
Ці команди також приймають необов’язковий параметр $, щоб визначити, з яким шпинделем вони працюють.
Можна вмикати або вимикати елементи керування, якщо вони вже ввімкнені або вимкнені. Докладніше див. у розділі Feed Rate.
Їх також можна перемикати окремо за допомогою «M50» та «M51», див. нижче.
10. Керування корекцією подачі M50
-
M50 <P1> - увімкнути керування коригуванням швидкості подачі. P1 необов’язковий.
-
M50 P0 - вимкнути керування швидкістю подачі.
Якщо цю функцію вимкнено, корекція подачі не матиме жодного впливу, і рух виконуватиметься із запрограмованою швидкістю подачі (якщо адаптивна корекція швидкості подачі не активна).
11. M51 Керування корекцією швидкості шпинделя
-
M51 <P1> <$->- увімкнути керування корекцією швидкості шпинделя для вибраного шпинделя. P1 є необов’язковим.
-
M51 P0 <$-> - вимкнути програму керування корекцією швидкості шпинделя.
Якщо функція перевизначення швидкості шпинделя вимкнена, швидкість шпинделя не змінюватиметься і відповідатиме точно заданому в програмі значенню S-слова (описаному в розділі Швидкість шпинделя).
12. Адаптивне керування подачею M52
-
M52 <P1> - використовуйте адаптивну подачу. P1 необов’язковий.
-
«M52 P0» – припинити використання адаптивної подачі.
Коли адаптивна подача ввімкнена, деякі зовнішні вхідні значення використовуються разом із значенням заміщення подачі в інтерфейсі користувача та заданою швидкістю подачі для встановлення фактичної швидкості подачі. У LinuxCNC для цієї мети використовується контакт HAL «motion.adaptive-feed». Діапазон для «motion.adaptive-feed» визначається значенням MAX_FEED_OVERRIDE в розділі [DISPLAY] файлу ini і буде обмежений діапазоном від -MAX_FEED_OVERRIDE до MAX_FEED_OVERRIDE. 0 еквівалентно утриманню подачі.
|
Note
|
Використання негативного адаптивного живлення для зворотного ходу є новою функцією і поки що не дуже добре протестовано. Передбачуване використання — для плазмових різаків та дротових електроіскрових верстатів, але не обмежується такими застосуваннями. |
13. M53 Керування зупинкою подачі
-
M53 <P1> - увімкнути перемикач зупинки подачі. P1 є опціональним. Увімкнення перемикача зупинки подачі дозволить перервати рух за допомогою управління зупинкою подачі. У LinuxCNC для цієї мети використовується контакт HAL motion.feed-hold. Значення true призведе до зупинки руху, коли M53 активний.
-
M53 P0 - вимкніть перемикач зупинки подачі. Стан «motion.feed-hold» не впливатиме на подачу, коли M53 неактивний.
14. M61 Встановити поточний інструмент
-
«M61 Q-» — зміна поточного номера інструменту в режимі MDI або ручному режимі без заміни інструменту. Одне з застосувань — коли ви вмикаєте LinuxCNC з інструментом, що знаходиться в шпинделі, ви можете встановити номер цього інструменту без заміни інструменту.
|
Warning
|
Зміщення довжини інструмента не змінюється командою M61, використовуйте G43 після M61, щоб змінити зміщення довжини інструмента. |
Це помилка, якщо:
-
Q- не дорівнює 0 або більше
15. M62 - M65 Цифрове керування виходом
-
M62 P- - увімкнути цифровий вихід, синхронізований з рухом.
-
M63 P- - вимкнути цифровий вихід, синхронізований з рухом.
-
M64 P- - негайно увімкніть цифровий вихід.
-
M65 P- - негайно вимкніть цифровий вихід.
Слово P визначає номер цифрового виходу. Слово P може мати значення від 0 до стандартного значення 3. При необхідності кількість входів/виходів можна збільшити за допомогою параметра num_dio під час завантаження контролера руху. Докладнішу інформацію див. у розділі Motion.
Команди M62 і M63 будуть поставлені в чергу. Наступні команди, що посилаються на той самий номер виходу, замінять старі налаштування. Можна вказати більше ніж одну зміну виходу, видавши більше ніж одну команду M62/M63.
Фактична зміна зазначених виходів відбудеться на початку наступної команди руху. Якщо наступної команди руху немає, зміни виходів у черзі не відбудуться. Найкраще завжди програмувати G-код руху (G0, G1 тощо) одразу після M62/63.
Сигнали M64 та M65 виникають одразу після отримання контролером руху. Вони не синхронізовані з рухом і порушують змішування.
|
Note
|
M62-65 не працюватиме, якщо відповідні контакти motion.digital-out-nn не підключені у вашому HAL-файлі до виходів. |
16. M66 Очікування введення
M66 P- | E- <L->
-
P- - визначає номер цифрового входу від 0 до 3. (Налаштовується з аргументу motmod num_dio)
-
E- - визначає номер аналогового входу від 0 до 3. (Налаштовується з аргументу motmod num_aio)
-
L- - визначає тип режиму очікування.
-
Mode 0: IMMEDIATE - без очікування, повертається негайно. Поточне значення вхідного сигналу зберігається в параметрі №5399
-
Mode 1: RISE - очікує, поки вибраний вхід виконає подію підвищення.
-
Mode 2: FALL - очікує, поки вибраний вхід виконає подію падіння.
-
Mode 3: HIGH - очікує, поки вибраний вхід перейде у стан HIGH.
-
Mode 4: LOW - очікує, поки вибраний вхід перейде у стан НИЗЬКОГО рівня.
-
-
Q- - визначає час очікування в секундах. Якщо час очікування перевищено, очікування переривається, а змінна #5399 зберігає значення -1. Значення Q ігнорується, якщо L-слово дорівнює нулю (IMMEDIATE). Значення Q, що дорівнює нулю, є помилкою, якщо L-слово не дорівнює нулю.
-
Для аналогового входу дозволений лише режим 0.
M66 P0 L3 Q5 (зачекайте до 5 секунд, поки цифровий вхід 0 увімкнеться)
Очікування введення M66 зупиняє подальше виконання програми, доки не відбудеться вибрана подія (або запрограмований тайм-аут).
Помилкою є програмування M66 як за допомогою слова P, так і слова E (тобто вибір як аналогового, так і цифрового входу). У LinuxCNC ці входи не контролюються в режимі реального часу, тому їх не слід використовувати для додатків, де важливий час реагування.
Кількість операцій вводу/виводу можна збільшити за допомогою параметра num_dio або num_aio під час завантаження контролера руху. Див. розділ Motion для отримання додаткової інформації.
|
Note
|
M66 не працюватиме, якщо відповідні контакти motion.digital-in-nn або motion.analog-in-nn не підключені у вашому HAL-файлі до входу. |
net signal-name motion.digital-in-00 <= parport.0.pin10-in
17. Синхронізований аналоговий вихід M67
M67 E- Q-
-
M67 - встановити аналоговий вихід, синхронізований з рухом.
-
E- - вихідне число в діапазоні від 0 до 3 (регулюється аргументом motmod num_aio)
-
Q- - – значення, яке потрібно встановити (встановіть значення 0, щоб вимкнути).
Фактична зміна зазначених виходів відбудеться на початку наступної команди руху. Якщо наступної команди руху немає, зміни виходів у черзі не відбудуться. Найкраще завжди програмувати G-код руху (G0, G1 тощо) одразу після M67. M67 функціонує так само, як M62-63.
Кількість операцій вводу/виводу можна збільшити за допомогою параметра num_dio або num_aio під час завантаження контролера руху. Див. розділ Motion для отримання додаткової інформації.
|
Note
|
M67 не працюватиме, якщо відповідні контакти motion.analog-out-nn у вашому HAL-файлі не підключені до виходів. |
18. Аналоговий вихід M68, негайний
M68 E- Q-
-
M68 - негайно налаштуйте аналоговий вихід.
-
E- - вихідне число в діапазоні від 0 до 3. (Налаштовується з аргументу motmod num_aio)
-
Q- - – значення, яке потрібно встановити (встановіть значення 0, щоб вимкнути).
Вихідні дані M68 надходять одразу після їх отримання контролером руху. Вони не синхронізовані з рухом і порушують змішування. M68 функціонує так само, як і M64-65..
Кількість операцій вводу/виводу можна збільшити за допомогою параметра num_dio або num_aio під час завантаження контролера руху. Див. розділ Motion для отримання додаткової інформації.
|
Note
|
M68 не працюватиме, якщо відповідні контакти motion.analog-out-nn у вашому HAL-файлі не підключені до виходів. |
19. M70 Зберегти стан модального вікна
Щоб явно зберегти модальний стан на поточному рівні виклику, запрограмуйте M70. Після збереження модального стану за допомогою M70 його можна відновити саме до цього стану, виконавши M72.
Пара інструкцій «M70» та «M72» зазвичай використовується для захисту програми від ненавмисних модальних змін у підпрограмах.
Збережений стан складається з:
-
поточні налаштування G20/G21 (імперські/метричні системи)
-
вибрана площина (G17/G18/G19 G17.1,G18.1,G19.1)
-
стан компенсації різця (G40, G41, G42, G41.1, G42,1)
-
режим відстані - відносний/абсолютний (G90/G91)
-
режим подачі (G93/G94,G95)
-
поточна система координат (G54-G59.3)
-
Стан компенсації довжини інструменту (G43, G43.1, G49)
-
режим втягування (G98,G99)
-
режим шпинделя (G96-css або G97-RPM)
-
режим дугової відстані (G90.1, G91.1)
-
режим радіуса/діаметра токарного верстата (G7,G8)
-
режим керування траєкторією (G61, G61.1, G64)
-
струм подачі та швидкості (значення F та S)
-
Стан шпинделя (M3, M4, M5) - увімкнено/вимкнено та напрямок
-
статус туману (M7) та повені (M8)
-
налаштування корекції швидкості (M51) та корекції подачі (M50)
-
адаптивне налаштування подачі (M52)
-
налаштування блокування подачі (M53)
Зверніть увагу, що, зокрема, режим руху (G1 тощо) НЕ відновлюється.
current call level означає або:
-
виконання в основній програмі. На рівні основної програми існує єдине місце зберігання стану; якщо послідовно виконується кілька команд «M70», при виконанні команди «M72» відновлюється тільки останній збережений стан.
-
виконання в підпрограмі G-коду. Стан, збережений за допомогою M70 в підпрограмі, поводиться точно так само, як локальний іменований параметр - на нього можна посилатися тільки в межах виклику цієї підпрограми за допомогою M72, а після виходу з підпрограми параметр зникає.
Рекурсивний виклик підпрограми вводить новий рівень викликів.
20. M71 Анулювання збереженого модального стану
Модальний стан, збережений за допомогою M70 або M73 на поточному рівні виклику, є недійсним (його більше не можна відновити).
Наступний «M72» на тому ж рівні виклику не спрацює.
Якщо виконати підпрограму, яка захищає модальний стан за допомогою M73, наступний return або endsub не відновить модальний стан.
Корисність цієї функції сумнівна. На неї не слід покладатися, оскільки вона може зникнути.
21. M72 Відновлення модального стану
Стан модального вікна, збережений за допомогою коду M70>>, можна відновити, виконавши код M72.
Обробка G20/G21 здійснюється окремо, оскільки подача інтерпретується по-різному залежно від G20/G21: якщо одиниці довжини (мм/дюйм) мають бути змінені операцією відновлення, «M72» спочатку відновить режим відстані, а потім усі інші параметри, включаючи подачу, щоб забезпечити інтерпретацію значення подачі з правильними налаштуваннями одиниць виміру.
Виконання команди «M72» без попередньої операції збереження «M70» на цьому рівні є помилкою.
Наступний приклад демонструє збереження та явне відновлення модального стану навколо виклику підпрограми за допомогою M70 та M72. Зверніть увагу, що підпрограма imperialsub не «усвідомлює» функції M7x і може використовуватися без змін:
O<showstate> sub (DEBUG, imperial=#<_imperial> absolute=#<_absolute> feed=#<_feed> rpm=#<_rpm>) O<showstate> endsub O<imperialsub> sub g20 (імперський) g91 (відносний режим) F5 (низька подача) S300 (низька швидкість обертання) (налагодження, в підпрограмі, стан зараз:) o<showstate> call O<imperialsub> endsub ; головна програма g21 (метрична система) g90 (абсолютна система) f200 (висока швидкість) S2500 (висока швидкість) (налагодження, в основному, стан зараз :) o<showstate> call M70 (збереження стану абонента на глобальному рівні) O<imperialsub> виклик M72 (явне відновлення стану) (налагодження, назад у головне меню, тепер стан:) o<showstate> call m2
22. M73 Збереження та автовідновлення модального стану
Щоб зберегти модальний стан у підпрограмі та відновити стан у підпрограмі endsub або будь-якому шляху return, запрограмуйте M73.
Переривання виконання програми в підпрограмі, яка має операцію M73, не відновить стан.
Також, звичайний кінець (M2) головної програми, яка містить M73, не відновить стан.
Рекомендується використовувати на початку підпрограми O-word, як показано в наступному прикладі. Використання M73 таким чином дозволяє створювати підпрограми, які потребують зміни модального стану, але захищають програму, що їх викликає, від ненавмисних модальних змін. Зверніть увагу на використання predefined named parameters в підпрограмі showstate.
O<showstate> sub (DEBUG, imperial=#<_imperial> absolute=#<_absolute> feed=#<_feed> rpm=#<_rpm>) O<showstate> endsub O<imperialsub> sub M73 (зберегти стан виклику в поточному контексті виклику, відновити при поверненні або endsub) g20 (imperial) g91 (відносний режим) F5 (низька подача) S300 (низька швидкість обертання) (debug, в підпрограмі, стан зараз:) o<showstate> call ; Примітка - тут не потрібен M72 - наступний кінцевий підзаголовок або ; явне «повернення» відновить стан абонента O<imperialsub> endsub ; головна програма g21 (метрична) g90 (абсолютна) f200 (висока швидкість) S2500 (високий оборот) (налагодження, в основній, стан зараз:) виклик o<showstate> виклик o<imperialsub> (налагодження, назад в основній, стан зараз:) виклик o<showstate> m2
23. M98 і M99
Інтерпретатор підтримує головні та підпрограми у стилі Fanuc за допомогою M-кодів M98 та M99. Див. Програми у стилі Fanuc.
23.1. Вибіркове відновлення модального стану
Виконання M72 або повернення з підпрограми, яка містить M73, відновить all збережений модальний стан.
Якщо необхідно зберегти лише деякі аспекти модального стану, альтернативним варіантом є використання predefined named parameters, локальних параметрів та умовних операторів. Ідея полягає в тому, щоб запам’ятати режими, які необхідно відновити на початку підпрограми, і відновити їх перед виходом. Ось приклад, заснований на фрагменті nc_files/tool-length-probe.ngc:
O<measure> sub (інструмент вимірювання) ; #<absolute> = #<_absolute> (запам'ятати в локальній змінній, якщо було встановлено G90) ; g30 (перемикач вище) g38.2 z0 f15 (вимірювання) g91 g0z.2 (вимкнути перемикач) #1000=#5063 (зберегти довжину інструменту відліку) (друк, довжина відліку становить #1000) ; O<restore_abs> якщо [#<absolute>] g90 (відновити G90, тільки якщо він був встановлений при вході:) O<restore_abs> endif ; O<measure> endsub
24. Команди, визначені користувачем M100-M199
M1-- <P- Q->
-
M1-- - ціле число в діапазоні від 100 до 199.
-
P- - число, що передається до файлу як перший параметр.
-
Q- - число, що передається до файлу як другий параметр.
|
Note
|
Після створення нового файлу «M1nn» необхідно перезапустити графічний інтерфейс, щоб він був у курсі нового файлу, інакше ви отримаєте помилку «Невідомий m-код». |
Зовнішня програма з іменем від «M100» до «M199» (без розширення, велика літера M, знаходиться в каталозі, вказаному параметром «[DISPLAY] PROGRAM_PREFIX» файлу INI) виконується з опціональними значеннями P і Q як двома аргументами.
Виконання файлу G-коду призупиняється до виходу зовнішньої програми. Якщо зовнішня програма виходить з кодом виходу, відмінним від «0», виконання програми G-коду зупиняється. Можна використовувати будь-який дійсний виконуваний файл. Файл повинен знаходитися в шляху пошуку, вказаному в конфігурації файлу INI. Докладнішу інформацію про шляхи пошуку див. у розділі Display.
Після створення нової програми M1nn графічний інтерфейс користувача слід перезапустити, щоб нова програма враховувалася, інакше виникне помилка «Невідомий M-код».
|
Warning
|
Не використовуйте текстовий редактор для створення або редагування файлів. Текстовий редактор залишає невидимі коди, які можуть спричинити проблеми та завадити роботі файлів bash або python. Для створення або редагування файлів використовуйте текстовий редактор, наприклад Geany в Debian або Notepad++ в інших операційних системах. |
Помилка «Використано невідомий M-код» означає одну з наступних ситуацій:
-
Вказана користувацька команда не існує.
-
Файл не є виконуваним файлом.
-
Ім’я файлу має розширення.
-
Ім’я файлу не відповідає цьому формату Mnnn, де nnn = від 100 до 199.
-
В назві файлу використовувалася мала літера M.
Наприклад, щоб відкрити і закрити затискач, який керується контактом паралельного порту, використовуючи файл скрипта bash з використанням M101 і M102. Створіть два файли з іменами M101 і M102. Перед запуском LinuxCNC встановіть їх як виконувані файли (зазвичай це робиться правою кнопкою миші/властивості/дозволи). Переконайтеся, що контакт паралельного порту не підключений до нічого в файлі HAL.
#!/bin/bash
# файл для ввімкнення контакту 14 цангового затвора parport
halcmd setp parport.0.pin-14-out True
exit 0
#!/bin/bash
# напилок для вимкнення штифта парпорта 14 для відкриття цангового закривача
halcmd setp parport.0.pin-14-out False
exit 0
Щоб передати змінну до файлу M1nn, ви використовуєте опції P та Q ось так:
M100 P123.456 Q321.654
#!/bin/bash
voltage=$1
feedrate=$2
halcmd setp thc.voltage $voltage
halcmd setp thc.feedrate $feedrate
exit 0
Щоб відобразити графічне повідомлення та зупинити його до закриття вікна повідомлення, використовуйте програму графічного відображення, таку як Eye of Gnome, для відображення графічного файлу. Після закриття програма відновить роботу.
#!/bin/bash
eog /home/john/linuxcnc/nc_files/message.png
exit 0
Щоб відобразити графічне повідомлення та продовжити обробку файлу G-коду, додайте до команди амперсанд.
#!/bin/bash
eog /home/john/linuxcnc/nc_files/message.png &
exit 0