В emc2 вместо G65 используются О-коды, в частности, для вызова подпрограммы используется команда Onnn call.
O коды
Каждый блок имеет ассоциированный номер, который используется после O. Нужно следить за тем, чтобы номера после O совпадали во всех частях оной подпрограммы. О-код начинается с латинской буквы O, а не ноля.
Подпрограммы: sub, endsub, return, call
Подпрограмма заключена между кодами O- sub и O- endsub. Строки внутри подпрограммы не выполняются в обычном порядке, они выполняются только когда подпрограмма вызвана при помощи O- call.
Пример:
Код: Выделить всё
O100 sub (подпрограмма для перемещения в ноль станка)
G53 G0 X0 Y0 Z0
O100 endsub
(...)
(много любых строчек)
(...)
O100 call
Внутри подпрограммы может быть использован код, O- return. Это приведет к немедленному возвращению к строчке вызывавшей подпрограмму, точно так же как если бы был встречен код O- endsub.
O- call принимает до 30 опциональных параметров, которые передаются вподпрограмму как #1, #2 ... #N, параметры #N+1, ..., #30 будут иметь значения параметров с тем же именем в контексте вызывающем подпрограмму. После возвращения из подпрограммы параметры #1, ..., #30 (вне зависимости от количества аргументов) будут возвращены к тем значениям, которые они имели до вызова подпрограммы. Параметры #1, ..., #30 локальны в подпрограмме.
Т.к. "1 2 3" будет распознаваться как число 123, параметры должны быть заключены в квадратные скобки. Следующая строчка вызовет подпрограмму с 3 параметрами:
Тела подпрограмм не могут быть вложенными. Подпрограммы могут быть вызваны только после того, как они определены при помощи O- sub. Они могут вызываться из других подпрограмм, и могут вызывать самих себя рекурсивно, если это имеет смысл. Максимальный уровень вложенности 10.
Подпрограммы не имеют возвращаемых значений, но могут изменять параметры больше чем #30 и эти изменения будут видны в вызывающем коде. Подпрограммы могут также менять значения глобальных именных параметров.
Циклы: do, while, endwhile, break, continue
У цикла "while loop" есть две структуры: while/endwhile и do/while. В каждом случае цикл заканчивается когда условие "while" равняется false.
Код: Выделить всё
(Отрисовка контура пилы)
F100
#1 = 0
O101 while [#1 lt 10]
G1 X0
G1 Y[#1/10] X1
#1 = [#1+1]
O101 endwhile
Внутри цикла while, O- break немедленно завершит цикл, а O- continue немедленно перейдет к следующему вычислению значения условия while, если оно все еще true, переходим к следующей итерации, если false цикл завершается.
Условия: if, else, endif
"if" выполняет одну группу выражений, если условие равно true и другую группу выражений если условие равно false.
(Установка подачи в зависимости от значения переменной)
Код: Выделить всё
O102 if [#2 GT 5]
F100
O102 else
F200
O102 endif
Повторения Repeat
"repeat" будет выполнять выражения внутри repeat/endrepeat указанное количество раз. Пример показывает как вы можете обработать серию контуров по расположенных диагонали, начиная с текущего положения.
Код: Выделить всё
(Обработать 5 контуров по диагонали)
G91 (Режим приращений)
O103 repeat [5]
(...)
(Вставьте сюда код для обработки.)
(...)
G0 X1 Y1 (перемещение к следующей позиции)
O103 endrepeat
G90 (Абсолютный режим)
Indirection
Коду O может быть дан параметр или вычисление. Например, следующий код вызовет подпрограмму с номером на 2 больше, чем значение параметра #101.
The O-number may be given by a parameter or calculation.
O[#101+2] call
Вычисления значений внутри О-кодов
В О-кодах могут использоваться параметры, выражения, бинарные операторы и функции.
Бинарные операторы: +, -, *, /, **, MOD, EQ, NE, GT, GE, LT, LE, AND, OR, XOR.
Функции: ATAN[Y]/[X], ABS[arg], ACOS[arg], ASIN[arg], COS[arg], EXP[arg], FIX[arg], FUP[arg], ROUND[arg], LN[arg], SIN[arg], SQRT[arg], TAN[arg].
Вызов файлов
Чтобы вызвать подпрограмму из файла создайте файл с таким же названием, как имя вызова, и включите в него sub и endsub. Файл должен быть в директории указанной в PROGRAM_PREFIX. Имя файла может включать только маленькие буквы, числа, тире и подчеркивание.
Код: Выделить всё
o<myfile> call (вызов именного файла)
(или)
o123 call (вызов файла с числовым именем)
В файл должны быть включены oxxx sub и oxxx endsub и файл должен быть валидным файлом.
Код: Выделить всё
(myfile.ngc)
o<myfile> sub
...
o<myfile> endsub
M2