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

Пустое значение и ноль в макропрограммах FANUC: почему «прибавить 0» меняет смысл пропущенного аргумента

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

Правила макропрограмм 16i/18i-MB различают неопределённую переменную, числовой ноль, прямое присваивание и арифметическое преобразование. Авторские координаты и таблица условий показывают, почему пропуск нужно выявлять до вычислений, а не проверкой ненулевого значения.

Содержание
  1. Правило этой редакции: пустое значение не является другой записью 0
  2. Вычисление до проверки может уничтожить признак «не задано»
  3. Последствия для траектории могут быть значительными

Разрешить пропуск входного аргумента макропрограммы и разрешить числовое значение 0 — разные решения. Если программа их смешивает, пустой ввод, означавший отсутствие участия оси, может превратиться в нулевую целевую координату этой оси.

Правило этой редакции: пустое значение не является другой записью 0

Руководство оператора FANUC 16i/18i-MB B-63534EN/02, §15.1, страницы 394–395, и §15.5, страница 414 (общедоступное зеркало оригинального руководства) поясняет: #0 всегда имеет пустое значение; при непосредственном использовании пустой переменной как значения адреса оси этот адрес игнорируется. Прямое присваивание сохраняет пустое состояние, арифметика обрабатывает его как 0. EQ и NE различают пустое значение и 0, остальные сравнения принимают пустое за 0. Здесь рассматривается только семантика Custom Macro этой редакции, без предположения об одинаковом времени жизни переменных в других сериях.

Вычисление до проверки может уничтожить признак «не задано»

В авторском примере входная #1 обозначает необязательную абсолютную координату Y. При прямом копировании #2=#1 пустая #1 оставляет #2 пустой. Если ради «единого формата» заменить это на #2=#1+0, #2 станет числовым 0. Число как будто не изменилось, но состояние ввода уже другое.

Состояние ввода#1 EQ #0#1 NE 0Результат #1+0
Не определеноИстинаИстинаЧисловой 0
Явно задано 0ЛожьЛожьЧисловой 0
Явно задано 12ЛожьИстинаЧисловое 12

Поэтому истинность NE 0 не доказывает, что вызывающая программа передала ненулевой аргумент: неопределённое значение тоже удовлетворяет этому условию. Пропуск следует выявлять до умножения на масштаб, добавления смещения или вычисления математической функции. После вычисления 0 уже не показывает, получен ли он из пропуска или явного ввода.

Последствия для траектории могут быть значительными

Это автономная геометрическая схема, а не программа резания. Пусть текущие XY=(10,37) mm, движение линейное в абсолютных координатах, цель X равна 32, а Y берётся из #2; других преобразований и коррекции инструмента нет. При пустой #2 адрес Y не задаётся, конечная точка (32,37), длина 22 mm. При #2 равной 0 конечная точка становится (32,0), длина √(22²+37²)≈43.046 mm.

Меняется не только длина пути: добавляется перемещение по Y на 37 mm. Поэтому интерфейс макропрограммы сначала должен различать пропуск, явно заданный ноль и другие числа, затем решать допустимость по смыслу аргумента. Нельзя просто запретить 0 там, где нулевая координата допустима, или незаметно превращать пропуск в действующую координату прибавлением 0. Другие темы макропрограмм — в разделе OPTION.

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

Электронный редуктор FANUC: почему коэффициент синхронизации не равен просто числу заходов фрезы, делённому на число зубьевТрёхмерная дуга FANUC G02.4/G03.4: что задаёт направление и обязана ли промежуточная точка быть посерединеЭкспоненциальная интерполяция FANUC: почему на равных осевых расстояниях поворот постепенно уменьшается