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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
s_nick
Новичок
Сообщения: 17
Зарегистрирован: 21 июл 2013, 21:33
Репутация: 0
Контактная информация:

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

Сообщение s_nick »

Спасибо!
Baha
Мастер
Сообщения: 605
Зарегистрирован: 29 сен 2008, 17:37
Репутация: 26
Откуда: Тараз-Москва

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

Сообщение Baha »

s_nick писал(а): оси но через G код.
попробуй G28 или G30
Сферический ватник в вакууме.
s_nick
Новичок
Сообщения: 17
Зарегистрирован: 21 июл 2013, 21:33
Репутация: 0
Контактная информация:

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

Сообщение s_nick »

G28 и G30 вроде как не подразумевают касание концевика, G38 совместно с G10 L20 P1 и G54. Создают нужный эффект, завтра на станке попробую.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Все правильно. Только лучше два G38 - один на большом F, второй на уточнение на маленьком, и потом можно и через G10, а можно и просто через G92 Z0.
А что ты такое хитрое пытаешься сделать?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

А вот как-бы гарантированно доехать до датчика командой g38.2 вне зависимости от начального положения и смещений по Z?.. Изображение
Абсолютные MIN и MAX по оси известны.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

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

Сообщение Сергей Саныч »

UAVpilot писал(а):А вот как-бы гарантированно доехать до датчика командой g38.2 вне зависимости от начального положения и смещений по Z?..
Если я правильно понял условия задачи, то вот пример решения:
Ищет центр отверстия с учетом границ рабочего поля. Правда, не по Z, но принцип тот же.

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

o<find_center> sub
; Поиск центра отверстия.
; Зонд должен быть введен в отверстие до запуска подпрограммы

#<fspeed> = 600.
#<probe_diam> = 1.6 ; Диаметр зонда центроискателя
#<min_xlimit> = 0. ; Границы рабочего поля
#<max_xlimit> = 290. ;
#<min_ylimit> = -1. ;
#<max_ylimit> = 150. ;

G40 G49 
G92.2 ; Отключим смещения по G92

G10 L2 P9 X0 Y0 ; Работать будем в G59.3 (= G53)
G59.3 ; Станочные координаты

M68 E0 Q0.
M68 E1 Q0.

G90 G38.2 X#<min_xlimit> F#<fspeed> ; Найдем касание слева
G91 G38.5 X1. ; Отъезд
G38.2 X-1. F[#<fspeed>/10.] ; Уточнение
#<left> = #5061 ; Запомним
G91 G38.5 X0.5 F#<fspeed> ; Отъезд

G90 G38.2 X#<max_xlimit> ; Справа
G91 G38.5 X-1. ; Отъезд
G38.2 X1. F[#<fspeed>/10.] ; Уточнение
#<right> = #5061 ; Запомним
G91 G38.5 X-0.5 F#<fspeed>
#<xmid> = [[#<left> + #<right>] / 2.]
G90 G0 X#<xmid>


G90 G38.2 Y#<min_ylimit> F#<fspeed> ; Найдем касание снизу
G91 G38.5 Y1. ; Отъезд
G38.2 Y-1. F[#<fspeed>/10.] ; Уточнение
#<bottom> = #5062 ; Запомним
G91 G38.5 Y0.5 F#<fspeed> ; Отъезд

G90 G38.2 Y#<max_ylimit> ; Сверху
G91 G38.5 Y-1. ; Отъезд
G38.2 Y1. F[#<fspeed>/10.] ; Уточнение
#<top> = #5062 ; Запомним
G91 G38.5 Y-0.5 F#<fspeed>
#<ymid> = [[#<bottom> + #<top>] / 2.]
G90 G0 Y#<ymid>

; Уточнение по X
G90 G38.2 X#<min_xlimit> F#<fspeed> ; Найдем касание слева
G91 G38.5 X1. ; Отъезд
G38.2 X-1. F[#<fspeed>/10.] ; Уточнение
#<left> = #5061 ; Запомним
G91 G38.5 X0.5 F#<fspeed> ; Отъезд

G90 G38.2 X#<max_xlimit> ; Справа
G91 G38.5 X-1. ; Отъезд
G38.2 X1. F[#<fspeed>/10.] ; Уточнение
#<right> = #5061 ; Запомним
G91 G38.5 X-0.5 F#<fspeed>
#<xmid> = [[#<left> + #<right>] / 2.]
#<xsize> = [#<right> - #<left> + #<probe_diam>]
G90 G0 X#<xmid>
M68 E0 Q#<xsize>
#<ysize> = [#<top> - #<bottom> + #<probe_diam>]
M68 E1 Q#<ysize>

G54 ; Вернем систему координат по умолчанию
G92.3 ; Вернем смещения по G92

G90
o<find_center> endsub
M02
Суть решения - мы временно подменяем систему координат G54 на другую (G59.3), приравняв ее к станочной.
G40 G49 G92.1

G10 L2 P9 X0 Y0 ; Работать будем в G59.3 (= G53)
G59.3 ; Станочные координаты
G92.2 ; Отключим смещения по G92
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

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

P.S. Почему нельзя было сделать группу переменных, содержащих абс. координаты?..
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

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

Сообщение Сергей Саныч »

UAVpilot писал(а):Почему нельзя было сделать группу переменных, содержащих абс. координаты?..
я ее долго и безуспешно искал :(
Чудес не бывает. Бывают фокусы.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

UAVpilot писал(а):Почему нельзя было сделать группу переменных, содержащих абс. координаты?..
а разве на пинах pos-cmd не абсолютные координаты?
Рабочий стол 1_027.png (3542 просмотра) <a class='original' href='./download/file.php?id=24808&mode=view' target=_blank>Загрузить оригинал (87.74 КБ)</a>
можно через пины брать ,или через питон-интерфейс:

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

#!/usr/bin/python
import hal 
import linuxcnc
s = linuxcnc.stat()
axis = ['x','y','z']
pins = ['actual_position','g5x_offset','g92_offset','tool_offset','position']
h = hal.component("paramGUI")
def st_def(a,p):
	if a=='x':i=0 		
	if a=='y':i=1		
	if a=='z':i=2	 	
	if p=='actual_position':return s.actual_position[i]		
	elif p=='g5x_offset':   return s.g5x_offset[i]		
	elif p=='g92_offset':   return s.g92_offset[i]		
	elif p=='tool_offset':  return s.tool_offset[i]		
	elif p=='position':     return s.position[i]		
for a in axis:
	for p in pins:
		h.newpin(p+a, hal.HAL_FLOAT, hal.HAL_OUT)
h.ready()
try:
    while 1:
	s.poll()
	for a in axis:
		for p in pins:
			h[p+a] = st_def(a,p)
except KeyboardInterrupt:
    raise SystemExit
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Дык хочется ж в G-коде. :)

В принципе если порассуждать, то не так уж всё и страшно. При поиске нуля заготовки по Z можно тупо менять смещение по Z текущей системы координат не заботясь о его сохранности - ведь результатом будет новое смещение по Z, а остальные оси не используются.
При измерении длины инструмента при смене тоже можно не парится, ведь после смены инструмента он находится в заранее определённой точке с заранее известными абсолютными координатами...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

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

Сообщение Сергей Саныч »

По Z у меня достаточно просто сделано

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

o<zero_z> sub
G49
G40
G10 L2 P1 Z0.
G91
G38.3 Z-25 F500
o123 if[#5070 NE 0]
 G38.5 Z2. ; Отъедем назад
 G38.2 Z-3. F30 ; Уточним на малой скорости
o123 else
 M100 P0 ; Сообщение "Датчик не обнаружен"
o123 endif
G10 L20 P1 Z43.23
G00 Z20
G90
o<zero_z> endsub
Предполагается, что мы
- работаем в G54
- высота срабатывания датчика 43.23 мм от поверхности заготовки (я в курсе, что "магические числа" - не по фэншую :hehehe: )
- вручную подводим инструмент к датчику на расстояние по Z не более 25 мм
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Почти тоже самое:

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

O<zero-z> sub
G49 G40
G90
G92.1
G10 L2 P[#5220] Z0
G38.2 Z[#1] F[#2]
O<no_probe> IF [#5070 NE 0]
        G91
        G38.4 Z10 F20
        G38.2 Z-5 F10
        G10 L20 P[#5220] Z[#3]
        G90
        G53 G0 Z0
O<no_probe> ENDIF
O<zero-z> endsub
M02
Хочу ещё сделать подъём в конце не на самый верх, а туда, откуда начинали, но сегодня уже лень. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

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

Сообщение Сергей Саныч »

Надо только в шестой строчке вместо G38.2 поставить G38.3. А то ругаться будет.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

UAVpilot писал(а):А вот как-бы гарантированно доехать до датчика командой g38.2 вне зависимости от начального положения и смещений по Z?..
Абсолютные MIN и MAX по оси известны.
А почему просто вот так не сделать:

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

G91 (incremental)
G38.2 Z-1000 
G90 (abs)
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

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

Сообщение Сергей Саныч »

Nick писал(а):G38.2 Z-1000
Еще при загрузке скажет "вылезаешь за пределы".
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Сергей Саныч писал(а):Надо только в шестой строчке вместо G38.2 поставить G38.3. А то ругаться будет.
Специально G38.2 поставил, чтоб не заморачиваться с выводом своего сообщения. :)
Nick писал(а):А почему просто вот так не сделать:
А я-то думал, что здесь уже не осталось тех, кто это ещё не попробовал... :hehehe:
Опять-же не хочется въезжать в стол, если мимо заготовки и датчика промазал. ;)

P.S. Нипиши уже probe-tool-l.ini, а то ещё немного и придётся самому писать... :pssdoff: :think:
Последний раз редактировалось Serg 17 фев 2014, 10:34, всего редактировалось 1 раз.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

хммм... да...
можно еще через использование:
5420-5428 - Current Position including offsets in current program units (X Y Z A B C U V W)
-
5401-5409 - Tool Offset (X Y Z A B C U V W)
-
5210 - 1 if G92 offsets are active, 0 if not
5211-5219 - G92 offset (X Y Z A B C U V W)
-
5220 - Current Coordinate System number 1 - 9 for G54 - G59.3
5221-5230 - Coordinate System 1, G54 (X Y Z A B C U V W R) - R denotes the XY rotation angle around the Z axis

но это правда кучу всего писать надо...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

UAVpilot писал(а):P.S. Нипиши уже probe-tool-l.ini, а то ещё немного и придётся самому писать...
А там же вроде есть уже что-то... или нет?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

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

Сообщение Serg »

Nick писал(а):А там же вроде есть уже что-то... или нет?
А покажи вот тут пальчиком? :)
https://github.com/cnc-club/linuxcnc-fe ... ubroutines
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

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