Независимый ремонт ЧПУ и технические материалы Контакты

FANUC G65 и M98: почему изменение #1 в подпрограмме иногда не видно вызывающей программе

Опубликовано Обновлено

Таблица переменных без движения осей по общему руководству 0i-D сравнивает G65 и M98. Рассмотрены передача A в #1, восстановление уровня локальных переменных и отсутствие такой изоляции у общих переменных.

Содержание
  1. Различайте повторное использование программы и область переменных
  2. Результат можно проследить без движения осей
  3. Восстановление локальных переменных не восстанавливает все состояния
  4. Проверяйте цепочку вызовов, а не только номера

Один и тот же фрагмент программы присваивает значение переменной, но после замены вызова на G65 переменная #1 основной программы при возврате будто не меняется. При M98 присвоенное значение сохраняется. Часто это различие семантики вызова, а не потеря присваивания в ЧПУ.

Различайте повторное использование программы и область переменных

Статья относится к 0i-D / 0i Mate-D с соответствующей функцией пользовательских макросов. В общедоступном зеркале оригинального руководства B-64304EN/02, §14.7, страница 206, вызовы различаются так: G65 передаёт аргументы макросу и меняет уровень локальных переменных; вызов подпрограммы M98 не предоставляет этого способа передачи аргументов и не меняет уровень. Возможность обратиться к одной O-программе не делает вызовы эквивалентными.

Результат можно проследить без движения осей

Ниже приведён авторский логический разбор без прерываний, сброса и других присваиваний. До вызова #1 текущего уровня равна 20.0. Вызываемая программа только присваивает видимой ей #1 значение 9.0, затем штатно возвращается.

Точка наблюденияG65 с передачей A4.0Обычный вызов подпрограммы M98
#1 при входе в вызываемую программу4.0 на новом уровне20.0 на исходном уровне
#1 после присваивания9.0 на новом уровне9.0 на исходном уровне
#1 после возврата вызывающей программеВосстановлено 20.0 исходного уровняОстаётся 9.0

Раздел 14.7.1, страницы 207–208, задаёт соответствие A и #1; страница 211 поясняет сохранение предыдущего уровня локальных переменных при макровызове и восстановление при возврате M99. В таблице аргумент содержит десятичную точку, чтобы не смешивать пример с правилами минимальной дискретности ввода для адресов без точки. Это схема области переменных, а не полная программа для непосредственного запуска на станке.

Восстановление локальных переменных не восстанавливает все состояния

На странице 211 той же главы общие переменные описаны как доступные для чтения и записи на разных уровнях макросов. Поэтому, если результат расчёта нужен вызывающей программе, интерфейс должен явно определять место его сохранения. #1 вложенного макроса не является автоматически возвращаемым значением; нельзя произвольно занимать общие переменные, уже используемые изготовителем станка.

Например, разделение входов, временных величин и выходов позволяет сохранить внешнюю #1 для расчёта расстояния между отверстиями независимо от временного расчёта на вложенном уровне. Напротив, старая программа, использующая M98 для совместного доступа к локальным переменным, после замены только команды вызова без пересмотра интерфейса может оставить внешнему уровню прежнее значение.

Проверяйте цепочку вызовов, а не только номера

Для каждого вызова укажите его тип, локальный уровень при входе и ожидаемое значение после возврата. Сравните их в логической модели без движения и записи в I/O. Одинаковые номера на разных уровнях рассматривайте как разные места хранения. Функцию макросов также нельзя смешивать с компилятором макросов; область функций рассмотрена в разделе OPTION.

Статьи по теме

Опциональное управление поворотной осью FANUC: как знак абсолютной команды задаёт направлениеВысокоскоростной позиционный переключатель FANUC с учётом направления: разные выходы при одной координатеГибкая синхронизация FANUC: выравнивание скоростей и фаз — два разных условия