Организация цикла в G-коде
Иногда бывает необходимость зациклить часть или всю управляющую программу. Другой типичный пример обращения к циклу — необходимость изменять значения параметров обработки. В этой ситуации иногда можно применять конструкцию цикла с переменными.
Определения
Цикл — разновидность управляющей конструкции (подпрограммы), предназначенная для организации многократного исполнения набора инструкций (команд).
Переменная — именованная либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным. Данные, находящиеся в переменной называются значением этой переменной.
Обозначения
- O100 do - начало тела цикла.
- O100 while [условие выхода] - конец тела цикла с условием выхода.
- #n - (n номер) обозначение переменной. Пример уменьшение значения переменной на 1, #1 = [#1 - 1].
Пример конструкции цикла
#2 = 1 (В переменную #2 записывается значение 1)
G0 X0 Y0 Z0
O100 do (Команда начала цикла)
(ниже - тело цикла)
G01 X#1
G01 Y#1
G01 X#2
G01 Y#2
#1 = [#1 - 1] (Уменьшение значения переменной #1 на 1)
#2 = [#2 + 1] (Увеличение значения переменной #2 на 1)
O100 while [#1 GT 10] (Условие выхода из цикла) (выйти из цикла когда в переменной #1 будет значение 10)
Результат
Конструкция цикла, состоящая из 8 строк, заменяет около 40 команд линейной интерполяции, но так же заметим, что использование циклов и переменных считается устаревшим и официально не поддерживается многими производителями. В PUMOTIX подобные конструкции поддерживаются, но разработчики рекомендуют применять более изящные конструкции с помощью макросов на языке LUA.
Исходный код примера (доступен для скачивания в виде файла, который впоследствии можно загрузить в ЧПУ систему)
G40 G90 G91.1
G64 P0.1
M03
S20000
F750
#1 = 20
#2 = 1
G00 X0 Y0 Z0
O100 do
G1 X#1
G1 Y#1
G1 X#2
G1 Y#2
#1 = [#1 - 1]
#2 = [#2 + 1]
O100 while [#1 GT 10]
M05
M30
![image2019-11-27_8-14-46.png](/xwiki/bin/download/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F/%D0%9E%D1%82%D0%B2%D0%B5%D1%82%D1%8B%20%D0%BD%D0%B0%20%D1%82%D0%B8%D0%BF%D0%BE%D0%B2%D1%8B%D0%B5%20%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B/%D0%9E%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D1%86%D0%B8%D0%BA%D0%BB%D0%B0%20%D0%B2%20G-%D0%BA%D0%BE%D0%B4%D0%B5/WebHome/image2019-11-27_8-14-46.png?width=354&height=350&rev=1.2)
Визуализация примера
Исходный код управляющей программы:
Более сложный пример с возможностью ввода параметров в начале файла УП:
(Начало настройки, ввод параметров)
#12 = 30 (Диаметр окружности мм)
#13 = -20 (Глубина кармана мм)
#10 = 1750 (Подача)
#20 = 20000 (Шпиндель)
#30 = 1 (Высота подвода/отвода)
#50 = 0.5 (Шаг по XY мм)
#60 = 1 (Глубина за проход мм)
#70 = 0.02 (Допуск мм, для G64)
(Конец настройки)
(Тело программы)
#1 = 0
#2 = [#12 / 2]
#3 = 0
G21 (Metric)
G40 G90 G91.1
G64 P#70
M03
S#20
F#10
G00 Z#30
G00 X0 Y0
O100 do
G00 X0 Y0
G01 Z#3
O100 do
G01 X#1
G02 I#2
#1 = [#1 + #50]
#2 = [#2 - #50]
O100 while [#2 GT 0]
#1 = 0
#2 = [#12 / 2]
#3 = [#3 - #60]
O100 while [#3 GT #13]
G00 Z#30
G00 X0 Y0
M05
M30
![image2019-11-27_12-3-35.png](/xwiki/bin/download/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F/%D0%9E%D1%82%D0%B2%D0%B5%D1%82%D1%8B%20%D0%BD%D0%B0%20%D1%82%D0%B8%D0%BF%D0%BE%D0%B2%D1%8B%D0%B5%20%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B/%D0%9E%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D1%86%D0%B8%D0%BA%D0%BB%D0%B0%20%D0%B2%20G-%D0%BA%D0%BE%D0%B4%D0%B5/WebHome/image2019-11-27_12-3-35.png?width=437&height=350&rev=1.2)
Визуализация примера