G-код G65, M98 и M99: подпрограмма и макрос для станка с ЧПУ

Подпрограмма
Spread the love
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Чтобы сделать g-код удобным для повторного использования, нам нужен способ централизовать его, а затем получить к нему доступ из программы детали. Язык G-Code предоставляет для этого два разных метода: подпрограмма и макрос. Думайте о каждом как о способе доступа к коду, который хранится в отдельной небольшой мини-программе. Вы «вызываете» этот код, он делает свое дело, а затем он «возвращается» в вашу основную программу, чтобы продолжить выполнение сразу после вызова.

Если у вас есть большая библиотека мощных сниппетов, у вас есть потенциал для реального повышения производительности. Даже если вы не пытаетесь повторно использовать код, использование вызовов может сделать ваш существующий код намного меньше и более легким для понимания. Рассмотрим процесс фрезерования кармана путем перехода на несколько уровней ниже и обработки той же траектории. Зачем повторять один и тот же путь для каждого уровня? GibbsCAM генерирует g-код, который генерирует путь для уровня один раз в качестве подпрограммы, а затем вызывает его несколько раз после установки z-уровня каждый раз глубже. Подходит для программ гораздо меньшего размера. Довольно крутой трюк!

G-коды M98 и M99: вызовы подпрограмм

Давайте начнем с вызовов подпрограмм, потому что они немного проще для понимания, чем вызовы макросов, хотя и менее эффективны. Вызов подпрограммы довольно прост. Сначала вставьте g-код подпрограммы под ее собственным номером подпрограммы — ее собственным номером «O». Ваша программа может выглядеть так:

%

O1000

N100 (Основная программа)

…

N330 (Вызов подпрограммы) M98 P2000

…

N1000 M2 (остановка программы)

O2000 (Подпрограмма)

N2000…

…

N2130 M99 (Вернуться в основную программу)

Как видите, основная программа и подпрограмма имеют свой собственный номер «O». Вызов подпрограммы — «M98», который принимает параметр, сообщающий ему номер «O», где можно найти подпрограмму. Когда он достигает M98, выполнение переходит к подпрограмме. Когда он достигает «M99» в подпрограмме, это заставляет его вернуться в основную программу с того места, где она остановилась, и продолжить работу.

Подпрограмма. Синтаксис вызова

В зависимости от вашего контроллера существует ряд различных синтаксисов, доступных для вызовов подпрограмм. 

Хотя существует множество разных стилей, в основном они просто немного по-разному говорят об одном и том же:

— Где мне найти подпрограмму? Чаще всего буква «P», обозначающее адрес. Этот адрес обычно представляет собой букву «O», но многие контроллеры имеют возможность искать «N», если O # не найдено.

— А как насчет повторения? Часто бывает удобно закодировать повтор подпрограммы в той же строке, используя другую букву. Например, «L» может указывать, сколько раз вызывать подпрограмму, прежде чем, наконец, перейти к следующей строке.

— Насколько глубоко я могу вложить подпрограммы и макросы? Ваша программа может вызывать подпрограмму, которая может вызывать другую подпрограмму. Сколько уровней глубины разрешено? У контроллеров есть ограничение на это.

— G-код G65 — это вызов макроса, а G-код M98 — вызов подпрограммы.

— Некоторые контроллеры позволяют G-коду M99 возвращаться к определенной строке вместо того, чтобы просто возвращаться туда, где была вызвана подпрограмма. Я не считаю это хорошей практикой, потому что это сбивает с толку. Если вы хотите «перейти» к строке, для этого есть макрос «GOTO», но он есть не у всех контроллеров.

Вот об этом. Не так уж и плохо. А пока просто сосредоточьтесь на вызове подпрограмм и возвращении из них.

Подпрограмма. Вызов.

Особенности специальной подпрограммы Haas

Производители контроллеров нередко имеют свои собственные функции «Special Sauce», которые делают их контроллер особенным. То же самое и с локальной подпрограммой Haas, M97. M97 — это быстрая подпрограмма, потому что вам не нужно беспокоиться о настройке чисел «O». Вы можете просто вызвать любой номер «N» с помощью M97 и «пуф», это подпрограмма. Это удобно, хотя у других контроллеров есть возможность искать букву «N», если буква «O» отсутствует, что немного ослабляет паруса быстроходного M97.

Обратите внимание, что Haas также будет использовать M98, у него есть только M97 для быстрых вызовов.

M97 включен в GWE по умолчанию. Если ваш контроллер не поддерживает его, перейдите в раздел «Настройка G / M-кодов» и отключите M97.

Макрос-вызовы или подпрограмма

С помощью вызовов подпрограмм в стиле M98 можно сделать много интересных вещей. Как только вы начнете их использовать, первое, что вы заметите, — это необходимость передать информацию в подпрограмму. Другими словами, вы хотите задать ему параметры. С учетом того, что вы узнали до сих пор, вы, вероятно, готовы сделать это, вставив значения в общие переменные перед вызовом подпрограммы. Но если ваш контроллер поддерживает макросы, есть способ лучше.

Макро-вызовы инициируются с помощью G-кода G65 вместо G-кода M98 (или G-кода M97 на Haas). Макро-вызовы имеют так называемые «аргументы». Аргументы позволяют использовать формат словесного адреса для отправки информации в макрос. Допустим, у нас есть специальный цикл сверления глубоких отверстий, который мы создали. Мы хотим передать ему координаты X и Y, где необходимо отверстие, а также координату Z, указывающую глубину сверления. С пользовательским вызовом подпрограммы это может выглядеть так:

…

N100 (вызов подпрограммы пользовательского цикла глубокого отверстия)

N110 # 1 = 2,5 (загрузить X в # 1)

N120 # 2 = 3.0 (загрузить Y в # 2)

N130 # 3 = 5,4 (загрузить Z в # 3)

N140 M98 P1000 (вызов цикла глубокого отверстия)

…

Как видите, мы загрузили X, Y и Z в локальные переменные. Подпрограмма знает, какие локальные переменные содержат какую информацию, и может продолжить свою работу после получения этих значений. Вот как это может выглядеть при вызове макроса:

…

N100 (пользовательский макрос цикла обработки глубоких отверстий)

N120 G65 X2.5 Y3.0 Z5.4

…

Это намного легче для глаз, не так ли? И запомнить тоже легче. Как макрос получает доступ к X, Y и Z?

Это происходит с помощью специального процесса, в котором локальные переменные # 1 .. # 33 хранятся на так называемых «уровнях». Когда я вызываю G65, текущие значения всех этих локальных переменных копируются на уровень, и любые буквы, которые я использую при вызове G65, передаются в локальные переменные. В этой таблице показано, как они отображаются в локальные переменные:

АргументЛокальная переменная
А# 1
B# 2
C# 3
D# 7
E# 8
F№9
H# 11
I# 4
J# 5
K№6
M# 13
Q# 17
P# 18
S# 19
Т# 20
U# 21
V# 22
W# 23
X# 24
Y# 25
Z# 26
Аргументы и в какую локальную переменную они передаются

Как видите, каждое возможное слово-аргумент имеет предварительно назначенную локальную переменную. Если вы используете X, Y и Z, как в нашем примере, их значения будут перенесены в # 24, # 25 и # 26. Довольно прост в использовании и очень удобен.

А что насчет этих уровней?

Как мы уже упоминали выше, подпрограммы и макросы могут быть вложенными. Одина может вызывать другую. Каждый раз, когда вызывается макрос, его локальные переменные сохраняются на уровне. Таким образом, когда выполнение вернется к этому макросу, локальные переменные будут сохранены на уровне, и их можно будет восстановить без изменений. Несмотря на то, что другие вызовы макросов могут использовать те же аргументы слов, которые отображаются на одни и те же локальные переменные, у них есть собственная копия этих локальных переменных на их собственном уровне, поэтому они не мешают. На практике, чтобы объяснить, что происходит с уровнями, требуется больше времени, чем просто использовать аргументы макроса и не беспокоиться о том, не перезаписывается ли локальная переменная другим макросом — это не так.

Но, и это важное «но», оно может быть перезаписано вызовом подпрограммы. Ответ — просто прекратить использование вызовов подпрограмм, когда у вас есть макросы, или, по крайней мере, использовать переменные вне диапазона локальных переменных и понять, что они могут быть перезаписаны.

Примечание: многие контроллеры не имеют макросов.

Не каждый контроллер имеет удобство макросов. Например, Mach3 этого не делает. Но они всего лишь удобство. Вы можете выполнить все, что вам действительно нужно, с помощью обычных вызовов подпрограмм, просто потребуется немного больше работы.

Номера макросов и подпрограмм «O»

Первое, что нужно знать, это то, что числа «O» не должны появляться в каком-либо определенном порядке в вашем программном файле — они просто должны быть уникальными. У вас не может быть двух записей «O1000».

Во-вторых, следует отметить, что на некоторых контроллерах можно обеспечить защиту для некоторых диапазонов чисел О. Это позволяет размещать на машине стандартные макросы, которые невозможно подделать. Например, возможно, вы вложили большие средства в набор пробных макросов и не хотите, чтобы они менялись или перезаписывались. Вам нужно будет проконсультироваться с руководством к вашему контроллеру, чтобы узнать, предлагает ли он защиту, и если да, то как она работает. А пока просто предположим, что у защищенных макросов числа «O» находятся в верхнем диапазоне. Для Fanuc от O0001 до O7999 не защищены, и именно там вы должны разместить свои макросы.

Совет по преобразованию обычного G-кода в подпрограмму или макрос

Я собираюсь завершить это обсуждение советом, который поможет вам преобразовать ваш «обычный» g-код в подпрограмму или макрос.  

Допустим, у вас есть g-код, который делает что-то полезное. Возможно, на нем выгравирован ваш логотип на детали. Вы сгенерировали его с помощью своего программного обеспечения CAM, и теперь вы хотите иметь подпрограмму, которая будет выгравировать логотип в любой выбранной вами координате XY. Какой самый быстрый и простой способ сделать это?

Я бы посоветовал преобразовать g-код логотипа для использования относительных координат. Кстати, в G-Wizard Editor есть команда, которая упрощает это — всего несколько шагов. В главе, посвященной кодам G91 и G90, в которой описывается, как относительные и абсолютные координаты работают в ЧПУ.

После того, как вы преобразовали g-код в относительный, завершите его как подпрограмму. Теперь просто переместитесь в позицию XY, в которую хотите поместить логотип, и вызовите подпрограмму. Поскольку его координаты относительны, гравировка будет относиться к начальной позиции. Не забывайте возвращать абсолютные координаты после вызова подпрограммы, предполагая, что это то, что ожидает остальная часть g-кода.

Заключение

Теперь у вас есть несколько мощных инструментов для упаковки вашего g-кода в блоки, которые можно перекомбинировать. Думайте об этом как о возможности создавать свои собственные постоянные циклы для выполнения различных задач. В нашей следующей главе мы познакомимся с условиями и циклами, которые позволяют g-коду самостоятельно принимать решения о том, что делать, и выполнять список инструкций переменное количество раз на основе этих решений.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован.