Исходный код вики Организация цикла в G-коде

Версия 30.1 от writer на 2023/01/24 12:48

Последние авторы
1 {{error title="**Внимание!**"}}
2 G-коды, использующие параметрические команды, не поддерживают такие опции как "Быстрый запуск УП с произвольной строки" и "Продолжение выполнения УП с середины траектории (кадра)". Будьте внимательны!
3 {{/error}}
4
5 Иногда бывает необходимость зациклить часть или всю управляющую программу. Другой типичный пример обращения к циклу - необходимость изменять значения параметров обработки.  В этой ситуации иногда можно применять конструкцию цикла с переменными.
6
7 ===== **Определения** =====
8
9 Цикл — разновидность управляющей конструкции (подпрограммы), предназначенная для организации многократного исполнения набора инструкций (команд).
10
11 Переменная — именованная либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным. Данные, находящиеся в переменной называются значением этой переменной.
12
13 ===== **Обозначения** =====
14
15 * O100 do - начало тела цикла.
16 * O100 while [условие выхода] - конец тела цикла с условием выхода.
17 * #n - (n номер) обозначение переменной. Пример уменьшение значения переменной на 1, #1 = [#1 - 1].
18
19 ===== **Пример конструкции цикла** =====
20
21 {{code language="g-code" title="**Простая УП**"}}
22 #1 = 20 (В переменную #1 записывается число итераций, значение 20)
23 #2 = 1 (В переменную #2 записывается значение 1)
24 G0 X0 Y0 Z0
25 O100 do (Команда начала цикла)
26 (ниже - тело цикла)
27 G01 X#1
28 G01 Y#1
29 G01 X#2
30 G01 Y#2
31 #1 = [#1 - 1] (Уменьшение значения переменной #1 на 1)
32 #2 = [#2 + 1] (Увеличение значения переменной #2 на 1)
33 O100 while [#1 GT 10] (Условие выхода из цикла(выйти из цикла когда в переменной #1 будет значение 10))
34 {{/code}}
35
36 ===== **Результат** =====
37
38 Конструкция цикла, состоящая из 8 строк, заменяет около 40 команд линейной интерполяции, но так же заметим, что использование циклов и переменных считается устаревшим и официально не поддерживается многими производителями. В PUMOTIX подобные конструкции поддерживаются, но разработчики рекомендуют применять более изящные конструкции с помощью [[макросов на языке LUA>>doc:Руководство пользователя.Описание M-кодов.Описание функций макроязыка.WebHome]].
39 \\Исходный код примера (доступен для скачивания в виде файла, который впоследствии можно загрузить в ЧПУ систему)
40
41 {{code language="g-code" title="**Исходный код примера доступен в виде файла в конце статьи**"}}
42 G21 (Metric)
43 G40 G90 G91.1
44 G64 P0.1
45 M03
46 S20000
47 F750
48 #1 = 20
49 #2 = 1
50 G00 X0 Y0 Z0
51 O100 do
52 G1 X#1
53 G1 Y#1
54 G1 X#2
55 G1 Y#2
56 #1 = [#1 - 1] 
57 #2 = [#2 + 1]
58 O100 while [#1 GT 10] 
59 M05
60 M30
61 {{/code}}
62
63 [[image:attach:image2019-11-27_8-14-46.png||data-xwiki-image-style-alignment="center"]]
64
65 Исходный код управляющей программы: [[скачать файл УП>>attach:cycle_test.tap]]
66
67 Более сложный пример с возможностью ввода параметров в начале файла УП:
68
69 {{code language="g-code"}}
70 (Программа выборки кармана для фрезерного станка, окружности)
71 (Начало настройки, ввод параметров)
72 #12 = 30 (Диаметр окружности мм)
73 #13 = -20 (Глубина кармана мм)
74 #10 = 1750 (Подача)
75 #20 = 20000 (Шпиндель)
76 #30 = 1 (Высота подвода/отвода)
77 #50 = 0.5 (Шаг по XY мм)
78 #60 = 1 (Глубина за проход мм)
79 #70 = 0.02 (Допуск мм, для G64)
80 (Конец настройки)
81
82 (Тело программы)
83 #1 = 0
84 #2 = [#12 / 2]
85 #3 = 0
86 G21 (Metric)
87 G40 G90 G91.1
88 G64 P#70
89 M03
90 S#20
91 F#10
92 G00 Z#30
93 G00 X0 Y0
94 O100 do
95 G00 X0 Y0
96 G01 Z#3
97 O100 do
98 G01 X#1
99 G02 I#2
100 #1 = [#1 + #50]
101 #2 = [#2 - #50]
102 O100 while [#2 GT 0]
103 #1 = 0
104 #2 = [#12 / 2]
105 #3 = [#3 - #60]
106 O100 while [#3 GT #13]
107 G00 Z#30
108 G00 X0 Y0
109 M05
110 M30
111 {{/code}}
112
113 (% class="auto-cursor-target" %)
114 [[image:attach:image2019-11-27_12-3-35.png||data-xwiki-image-style-alignment="center"]]