G92 - отступ координатной системы

Материал из NikiWiki
(перенаправлено с «G92»)
Перейти к:навигация, поиск
YourBunnyWroute.pngАвтор предупреждает!
Данные этой статьи получены из открытых источников и/или документации на обсуждаемое оборудование или из моей экспериментальной деятельности и являются моим персональным мнением и/или комментарием. Смотрите: NikiWiki:Отказ от ответственности


G92 устанавливает отступ координатной системы.

Определение

N0001 G00 X4
N0002 G92 X7

Тогда, все координаты, все отступы и т.п. будут смещены на -3 по оси X (4-7=3). Данное изменение будет записано в файл linuxcnc.var под номером переменной 5211 (вообще за координаты в этом контексте отвечают переменные 5211, 5212, 5213, 5214, 5215, 5216, 5217, 5218 и 5219 соответствено осям X, Y, Z, A, B и C, U, V и W).

Этот же алгоритм действует и на группу команд G54, да и вообще на все "сдвиги" координатных систем (G55, G56, G57, G58, G59, G59.1, G59.2, G59.3).

Лично для меня это было совершенно не очевидно.

G92 - входит в не модальную группу команд. Очередная путанциа! Учитывая тот факт, что значения сохраняются в файл linuxcnc.var, который доступен и после перезапуска - можно сказать, что G92 - супер модальная. И ее действие распространяется не только на весь текущий файл, пока не отменишь командой G92.1 или G92.2, но и на все после загружаемые файлы. Не понимаю, бага это или фича, но так оно есть.

(i) Обратите внимание на тот факт, что любые действия с кодом G92 записываются в файл linuxcnc.var, что приводит к тому, что при следующем запуске все значения отступов будут восстановлены. Чтобы этого не происходило, нужно воспользоваться командами G92.1 и G92.2

Пример

Изображение экрана LinuxCNC при выполнении примера TestG92.ngc

"Нарисуем" квадратик, чтобы в интерфейсе LinuxCNC было видно что происходит. Конечно, любой человек, испытавший магию LinuxCNC скажет, что пример не корректен. Первый квадрат вышел за пределы станка и пример неработоспособен. А я отвечу: если поменять координаты, то пример не будет таким наглядным.

Код теста testG92.ngc

Предположим, что в данный момент никаких отступов G92 не задано, да мы их и сбросим строкой N0000, тогда:

%
N0000 G17 G49 G21 G40 G92.1  
N0001 G00 X0 Y-317 Z-90
N0002 G92 X-10 Y-10 Z-10
N0003 M1
N0004 G00 X4
N0009 M1
N0011 M1
N0020 G00 X0 Y0
N0021 G01 X20 F200
N0022 G01 Y20 F200
N0023 G01 X0 F200
N0024 G01 Y0 F200
N0025 M1
%

Состояние переменных перед выполнением теста testG92.ngc

Перед выполнением теста выполним проверку состояния переменных в файле linuxcnc.var:

egrep "521[1-9]" ../configs/YourBunnyCNC/linuxcnc.var
5211    0.000000
5212    0.000000
5213    0.000000
...

Состояние переменных после выполнением теста testG92.ngc

Затем загрузим в интерфейс LinuxCNC файл testG92.ngc (его код приведен выше полностью, посему специальной ссылки на загрузку не предусмотрено) и, после выполнения, посмотрим что получилось в файле linuxcnc.var

egrep "521[1-9]" ../configs/YourBunnyCNC/linuxcnc.var
5211    10.000000
5212    -307.000000
5213    -80.000000
...

Разъяснения теста testG92.ngc

Не понятно? Вот и мне тоже не совсем. Но, давайте рассмотрим пример по-шагово (M01 пропустим, итак понятно, что это остановка по-требованию):

  • N0000 - командой G17 G49 G21 G40 G92.1 сбрасываем от греха все переменные 5211-5219 и вообще все, что можно сбросить. Если этого не сделать, то в файле linuxcnc.var, после нескольких выполнений этого теста, будет нечто космическое! К стати, эта последовательность команд полезна в начале всех файлов G кода.
  • N0001 - командой G00 едем в "разумное положение в левом переднем нижнем углу станка, там, где обычно будут размещаться заготовки, но отступаем по оси Z немного, чтобы не "пропилить" чего лишнего.G00 X0 Y-317 Z-90
  • N0002 - собственно, командой G92 устанавливаем, что текущая позиция имеет координаты X-10 Y-10 Z-10
  • N0004 - командой G00 "переезжаем" в позицию X=4. Вот тут и начинается магия! Рассмотрим по-подробнее. На шаге N0001 мы приехали в точку с координатой X=0, а на этапе N0002 мы сказали, что "текущая позиция" это X=-10. И теперь, когда мы "захотели" попасть в позицию X=4, станок "переезжает" в абсолютную позицию по X аж 14. Разобравшись понимаешь, что LinuxCNC взял позицию первого шага, потом, на втором этапе он понял, что это не 0 вовсе, а целых -10 и, чтобы попасть в X=4 подвинул X на 10 + 4 мм. Т.е. в абсолютную позицию X=14, а относительную, как и следовало ожидать - X=4. Снимки экрана LinuxCNC тому доказательством.
  • N0020-N0025 - "Рисуют" квадратик. Но, уже отступая от нового 0

Очень надеюсь, что эту науку я объяснил и себе и Вам достаточно понятно.

Практика применения

Одним из вариантов компенсации длинны инструмента является проверка его положения и изменение отступов командой G92 на получившиеся в результате теста с учетом толщины жертвенного стола и других особенностей. Хотя бы толщины самого датчика. Сей вопрос развернуто рассматривается в статье Жертвенный стол и Программно-аппаратная смена инструмента.

"Кайф" от такого решения кроется в двух вещах:

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