FAQ по Gcode, примеры

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Nick
Мастер
Сообщения: 22703
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1682
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

G38 straight probe

Сообщение Nick »

G38 прямая проба (G38.2-G38.5)

Используйте G38.2 <оси>, G38.3 <оси>, G38.4 <оси>, G38.5 <оси> чтобы выполнить прямую пробу. В параметрах <оси> не обязательно перечислять все оси, достаточно только одной. В шпинделе должен быть установлен щуп.

Будет ошибкой если:
  • текущая точка совпадает с запрограммированной
  • не задана ни одна ось
  • включена компенсация радиуса инструмента
  • значение подачи равно 0
  • щуп уже находится в конечном состоянии
В ответ на эту команду станок двигает контрольную точку (которая должна быть на конце щупа) по прямой линии с заданной подачей в направлении запрограммированной точки. В режиме "обратной подачи", значение подачи такое, что все движение от текущей точки до указанной точки займет заданное время. Движение останавливается (в пределах максимальных ускорений станка) когда достигается запрограммированная точка или когда появляется требуемое изменение в probe input.
GкодЦелевое состояниеНаправлениеСигнал ошибки
G38.2КонтактВ сторону деталиДа
G38.3КонтактВ сторону деталиНет
G38.4Разрыв контактаВ сторону от деталиДа
G38.5Разрыв контактаВ сторону от деталиНет
После удачной пробы, параметры 5061-5069 будут содержать значения координат X, Y, Z, A, B, C, U, V, W положения контрольной точки во время смены состояния probe-input. После неудачной пробы, они устанавливаются в координаты запрограммированной точки. Параметр 5070 устанавливается в 1 если проба удачна и в 0 если проба не удалась. Если проба не удалась G38.2 и G38.4 выдадут ошибку.

Комментарий вида (PROBEOPEN filename.txt) откроет файл filename.txt и запишет в него 9 чисел - координаты состоящие из X, Y, Z, A, B, C, U, V, W каждой удачной пробы. Файл должен быть закрыт при помощи (PROBECLOSE).

Пример

Код: Выделить всё

G0 X100 Y100 Z10
G38.2 Z0
Выполнит пробу до касания в направлении Z-

Код: Выделить всё

F100
G0 X100 Y100 Z10
G38.2 Z0
F1
G38.4 Z10
Выполнит пробу с уточнением на маленькой скорости.
Аватара пользователя
Nick
Мастер
Сообщения: 22703
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1682
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение Nick »

G33 Перемещение синхронизированное со шпинделем

G33 X- Y- Z- K-

Для перемещения синхронно со шпинделем в прямом направлении используйте код G33 X- Y- Z- K-, где К задает расстояние перемещения за каждый оборот шпинделя. Например, в точке Z=0 выполнив код G33 Z-10 K1 получим перемещение по Z на 10 мм с 10 оборотами шпинделя. Эта команда может быть частью программы нарезания резьбы с шагом 1мм.

Замечание: K - следит за перемещением в пространстве XYZ, а не только вдоль оси Z.

Перемещение синхронизированное со шпинделем ждет индекс шпинделя, поэтому можно выровнять несколько проходов. Движения G33 оканчивается в запрограммированной точке.

Все координаты опциональны, за исключением одной.

Это ошибка, если:
  • Если опущены все координаты.
  • Шпиндель не вращается когда команда выполняется.
  • Запрошенное линейное перемещение превышает пределы скорости из-за высокой скорости шпинделя.
Аватара пользователя
Nick
Мастер
Сообщения: 22703
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1682
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение Nick »

G33.1 Нарезание резьбы

G33.1 X- Y- Z- K-

Для прямого нарезания резьбы (перемещение синхронизированное со шпинделем с возвращением) запрограммируйте G 33.1 X- Y- Z- K-, где параметр K задает перемещение за каждый оборот шпинделя. Нарезание резьбы состоит из следующей последовательности:
  • Перемещение в заданную координату, синхронно со шпинделем с заданным отношением перемещения на оборот, начиная движение с индексным импульсом шпинделя.
  • После достижения заданной точки, подается команда для реверса шпинделя.
  • Синхронизированное движение продолжается за указанную точку до тех пор пока шпиндель не остановится и не начнет вращаться в обратную сторону.
  • Затем станок возвращается в исходное положение в синхронизированном режиме.
  • Когда достигается начальные координаты, снова подается команда на реверс шпинделя (для возвращения к изначальному направлению).
  • Синхронизированное движение продолжается за начальную точку до тех пор пока шпиндель не остановится.
  • Затем следует не синхронное возвращение к начальной точке.
Синхронизированное движение использует индексный импульс шпинделя, поэтому можно выровнять несколько проходов. G33.1 оставляет конечную точку в начальных координатах.

Все кроме одной координаты опциональны.

Будет ошибкой, если:
  • Если опущены все координаты.
  • Шпиндель не вращается когда команда выполняется.
  • Запрошенное линейное перемещение превышает пределы скорости из-за высокой скорости шпинделя.

Пример:

(перемещаемся в начальную точку)
G0 X1.000 Y1.000 Z0.100
(нарезание резьбы с шагом 1мм)
G33.1 Z-20 K1
Аватара пользователя
Nick
Мастер
Сообщения: 22703
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1682
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение Nick »

G76 Многозаходный цикл нарезания резьбы

G76 P- Z- I- J- R- K- Q- H- E- L-

Это ошибка, если:
  • Активная рабочая плоскость не ZX (не G18).
  • Указаны другие координаты X- или Y-.
  • Значение R- меньше чем 1.0.
  • Не указаны все необходимые параметры.
  • P-, J-, K- или H- отрицательные.
  • E- больше чем половина длинны привода.
emc2 G76 threading cycle.png <a class='original' href='./download/file.php?id=3768&sid=06ef0649beb77f0c185a391966b12be2&mode=view'>Загрузить оригинал (43.77 КБ)</a>
Изображение: G76 Нарезание резьбы

Линия прохода Линия проходящая через начальное положение по X параллельно оси Z.
P- Шаг резьбы в расстоянии за 1 оборот.
Z- Положение конца резьбы. В конце цикла инструмент останется в положении Z-.

I- "Вершина резьбы" отступ от линии прохода. Отрицательное значение I используется для внешних резьб, а положительное для внутренних резьб. Обычно материал стачивает до этого размера перед циклом G76.
J- Положительное значение обозначающее "глубину начального прохода". Первый проход будет на расстояние J- за вершиной резьбы.
K-
Положительное число задающее "полную глубину резьбы". Конечный проход будет за вершиной резьбы на величину К-.

Опциональные параметры:

[... Будет допереведено ...]
R-
The "depth degression". R1.0 selects constant depth on successive threading passes. R2.0 selects constant area. Values between 1.0 and 2.0 select decreasing depth but increasing area. Values above 2.0 select decreasing area. Beware that unnecessarily high degression values will cause a large number of passes to be used. (degression = a descent by stages or steps.)

Q-
The "compound slide angle" is the angle (in degrees) describing to what extent successive passes should be offset along the drive line. This is used to cause one side of the tool to remove more material than the other. A positive Q value causes the leading edge of the tool to cut more heavily. Typical values are 29, 29.5 or 30.
H-
The number of "spring passes". Spring passes are additional passes at full thread depth. If no additional passes are desired, program H0.

Tapered entry and exit moves can be programmed using E- and L-.
E-
Specifies the distance along the drive line used for the taper. The angle of the taper will be so the last pass tapers to the thread crest over the distance specified with E. E0.2 will give a taper for the first/last 0.2 length units along the thread. For a 45 degree taper program E the same as K
L-
Specifies which ends of the thread get the taper. Program L0 for no taper (the default), L1 for entry taper, L2 for exit taper, or L3 for both entry and exit tapers. Entry tapers will pause at the drive line to synchronize with the index pulse then feed in to the beginning of the taper. No entry taper and the tool will rapid to the cut depth then synchronize and begin the cut.

The tool is moved to the initial X and Z positions prior to issuing the G76. The X position is the "drive line" and the Z position is the start of the threads.

The tool will pause briefly for synchronization before each threading pass, so a relief groove will be required at the entry unless the beginning of the thread is past the end of the material or an entry taper is used.

Unless using an exit taper, the exit move (traverse to original X) is not synchronized to the spindle speed. With a slow spindle, the exit move might take only a small fraction of a revolution. If the spindle speed is increased after several passes are complete, subsequent exit moves will require a larger portion of a revolution, resulting in a very heavy cut during the exit move. This can be avoided by providing a relief groove at the exit, or by not changing the spindle speed while threading.

The final position of the tool will be at the end of the "drive line". A safe Z move will be needed with an internal thread to remove the tool from the hole.

The sample program g76.ngc shows the use of the G76 canned cycle, and can be previewed and executed on any machine using the sim/lathe.ini configuration.

The following example shows the result of running this G-Code:
G0 Z-.5 X .2
G76 P0.05 Z-1 I-.075 J0.008 K0.045 Q29.5 L2 E0.045

The tool is in the final position after the G76 cycle is completed. You can see the entry path on the right from the Q29.5 and the exit path on the left from the L2 E0.045. The white lines are the cutting moves.


Figure: Threading Example
nkp
Мастер
Сообщения: 8264
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1546
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение nkp »

В о-коде надо прописать примерно так:

Код: Выделить всё

#12=[360/[#10]] 
как обойти ошибку деления на 0 ?
xentaur
Опытный
Сообщения: 178
Зарегистрирован: 09 ноя 2010, 02:29
Репутация: 1
Откуда: Украина Харьков
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение xentaur »

Хочу поворот системы координат вокруг текущего нуля относительный и абсолютный http://wiki.linuxcnc.org/cgi-bin/wiki.p ... emRotation
и смещение нулевой точки относительное и абсолютное в текущей системе.
Как сделать?
nkp
Мастер
Сообщения: 8264
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1546
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение nkp »

xentaur
Опытный
Сообщения: 178
Зарегистрирован: 09 ноя 2010, 02:29
Репутация: 1
Откуда: Украина Харьков
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение xentaur »

Спасибо. Начну эксперименты, с какой версии добавили?
А если P не указывать текущую повернет? А если... И как назад вернуть. Пробую...
Кажись еще сыровато...

Объясните пожалуйста в чём будет разница
G10 L2 P6
и
G59
xentaur
Опытный
Сообщения: 178
Зарегистрирован: 09 ноя 2010, 02:29
Репутация: 1
Откуда: Украина Харьков
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение xentaur »

Спасибо сам прочитал. Продолжаю эксперименты. Как то через жо..пу офсеты и поворот сделали. Может не разобрался...
Что они курили для G10 ???
xentaur
Опытный
Сообщения: 178
Зарегистрирован: 09 ноя 2010, 02:29
Репутация: 1
Откуда: Украина Харьков
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение xentaur »

А поддержки полярной системы тоже нет?
...
Прочитал есть, но корявая - без дуг :cry: .
Последний раз редактировалось xentaur 09 июн 2012, 08:47, всего редактировалось 1 раз.
nkp
Мастер
Сообщения: 8264
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1546
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение nkp »

Не встречал........
xentaur
Опытный
Сообщения: 178
Зарегистрирован: 09 ноя 2010, 02:29
Репутация: 1
Откуда: Украина Харьков
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение xentaur »

В полярной системе удобно составлять программы для фрезеровки кулачков.
xentaur
Опытный
Сообщения: 178
Зарегистрирован: 09 ноя 2010, 02:29
Репутация: 1
Откуда: Украина Харьков
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение xentaur »

Есть такая задача.
Есть у меня программа на мой старенький станок (управление РУХ4) с двумя подпрограммами. Первая зеленые кружочки фрезерует (на самом деле там не кружочки, а на капли острием к центру кружков направлены), а вторая вызывает первую нужное количество раз поворачивая систему координат. Вот рисунок для наглядности.
пример.png <a class='original' href='./download/file.php?id=5804&sid=06ef0649beb77f0c185a391966b12be2&mode=view'>Загрузить оригинал (48.37 КБ)</a>
И начиная с нижнего левого угла основная прога, меняя абсолютное смещение координат вызывает вторую подпрограмму нужное количество раз. При это новый ноль оказывается в центре обрабатываемой заготовки. Подпрограммы написаны в абсолютных координатах и нет никакого желания их переписывать.

Как такое сделать в LinuxCNC?

P.S. Не смотрите, что рисунок кривой. У меня, почему-то не получается. Шаг сетки с заготовками может мыть неравномерным. Сейчас я на станке устанавливаю 24 заготовки.
Последний раз редактировалось xentaur 09 июн 2012, 15:23, всего редактировалось 1 раз.
nkp
Мастер
Сообщения: 8264
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1546
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение nkp »

xentaur писал(а):и нет никакого желания их переписыват
Ну несколько строк написать все же придется :)
Все это удобно обернуть в ngcgui-один раз написать мастер-и ставь заготовок сколько душа пожелает(станок позволяет)
xentaur
Опытный
Сообщения: 178
Зарегистрирован: 09 ноя 2010, 02:29
Репутация: 1
Откуда: Украина Харьков
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение xentaur »

Мне не нужен мастер. Я просто хочу менять подпрограммы для формы и количества отверстий. Там (на старой белорусской проге под DOS РУХ4) это было просто. Есть две G команды задания новой нулевой точки относительно и абсолютно и две G команды на относительный и абсолютный поворот. Причем эти задание происходят без перемещения.
Аватара пользователя
Nick
Мастер
Сообщения: 22703
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1682
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение Nick »

nkp писал(а):G10 L2 P0 R30 -поворот на 30гр
О, а я и не знал такого раньше :)
xentaur писал(а):Объясните пожалуйста в чём будет разница
G10 L2 P6 и G59
G10 - выставляет параметры системы координат, а G59 - активирует ее.
Т.е. для произвольного изменения системы координат тебе нужны оба кода:
G10 L2 P6 X10 R10 (установили параметры)
G59 (активировали систему)
(и продолжаем выполнение)
xentaur писал(а):две G команды на относительный и абсолютный поворот.
Чтобы делать относительный поворот можешь писать так
G10 L2 P9 R[#5330+#<step>]

А абсолютный поворот и оба задания нулевой точки и так есть.
nkp
Мастер
Сообщения: 8264
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1546
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение nkp »

xentaur писал(а):Я просто хочу менять подпрограммы для формы и количества отверстий

Код: Выделить всё

o133sub
п-программа
o133endsub

g1(x;y)
o133call

g1(x1;y1)
o133call
g1(x2;y2)
o133call
.............
m2
http://www.linuxcnc.org/docview/2.5/htm ... -code.html
xentaur
Опытный
Сообщения: 178
Зарегистрирован: 09 ноя 2010, 02:29
Репутация: 1
Откуда: Украина Харьков
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение xentaur »

Так уже что-то, а по человечески нельзя? Например

Код: Выделить всё

G54 (Выбрали систему координат, она совпадает с центром первой заготовки)
O001 call (Вызвали подпрограмму)
G72 H30 (повернули систему координат относительно текущего X0 Y0 в 30 градусов абсолютно (G73 относительно) против часовой стрелки)
O001 call (Вызвали подпрограмму)
G72 H60 (повернули систему координат относительно текущего X0 Y0 в 60 градусов абсолютно (G73 относительно) против часовой 
G72 H0 (повернули систему координат относительно текущего X0 Y0 в 0 градусов (вернули в начало) абсолютно (G73 относительно) против часовой )
G70 X100 Y0 (переместить Нуль в точку X100 Y0 абсолютно от нуля системе G54)
O001 call (Вызвали подпрограмму)
G72 H30 (повернули систему координат относительно текущего X0 Y0 в 30 градусов абсолютно (G73 относительно) против часовой стрелки)
O001 call (Вызвали подпрограмму)
G72 H60 (повернули систему координат относительно текущего X0 Y0 в 60 градусов абсолютно (G73 относительно) против часовой 
G72 H0 (повернули систему координат относительно текущего X0 Y0 в 0 градусов (вернули в начало) абсолютно (G73 относительно) против часовой )
Я хочу две пары G команды
1 - для относительного и абсолютного смещения нуля, например G70/G71
2 - для относительного и абсолютного поворота системы координат, например G72/G73 или G74/G75
xentaur
Опытный
Сообщения: 178
Зарегистрирован: 09 ноя 2010, 02:29
Репутация: 1
Откуда: Украина Харьков
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение xentaur »

nkp, у меня подпрограммы готовые и переписывать их не хочется, в них дофига строк. Написаны подпрограммы для абсолютной системы координат. Гнезд для обработки более 9, поэтому простое задание 9 доступных систем координат не подходит.

Код: Выделить всё

 G1 (x1:y1) 
Как это сработает?

Nick, а параметры #5330 из G-кода можно менять, тогда это хоть какой-то вариант! Я тогда находясь в G53 в #5330 запищу первый центр, потом G54 (или что там соответствует) и т.д. Вот это да! Вариант!
Последний раз редактировалось xentaur 09 июн 2012, 15:19, всего редактировалось 1 раз.
nkp
Мастер
Сообщения: 8264
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1546
Контактная информация:

Re: FAQ по Gcode, примеры

Сообщение nkp »

параметры менять можно
xentaur писал(а):Код: Выделить всё G1 (x1:y1) Как это сработает?
это я от лени так пишу-сорри(по аналогии с геометрией)
Ответить

Вернуться в «LinuxCNC»