Отправить G комманду из макроса

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
cnc-00
Новичок
Сообщения: 22
Зарегистрирован: 13 авг 2012, 23:56
Репутация: 0
Контактная информация:

Отправить G комманду из макроса

Сообщение cnc-00 »

Как из макроса (M100 to M199 User Defined Commands) отправить G комманду (например G0 X50) и чтобы станок ее отработал.

Хочу получить аналог Мачевской (Mach3) функции - code "G0 X50"
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение aftaev »

Что значит отправить?
Может при выполнении команды М100 должена быть отработан код G0 X50 ?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение nkp »

это лучше сделать о-кодами

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

o<name> sub
G0 X50
o<name> endsub
это сохраняешь в файл name.ngc
и ложишь его в /home/ЮЗЕР/emc2/nc_files
а в программе пишешь

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

o<name> call
http://www.linuxcnc.org/docs/2.5/html/gcode/o-code.html
cnc-00
Новичок
Сообщения: 22
Зарегистрирован: 13 авг 2012, 23:56
Репутация: 0
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение cnc-00 »

aftaev писал(а):Может при выполнении команды М100 должена быть отработан код G0 X50 ?
Да
nkp писал(а):o<name> subG0 X50o<name> endsub
Такое не подходит, нужен более гибкий вариант.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение nkp »

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

Re: Отправить G комманду из макроса

Сообщение nkp »

пишешь:

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

o<name1> sub
f50
G1 x[#1]
o<name1> endsub
а в ж-коде

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

o<name> call [50]
надо проехать 65- пишешь:

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

o<name> call [65]
то есть ты передаешь в код свой аргумент
ну это цветочки-переменных может быть до 30
cnc-00
Новичок
Сообщения: 22
Зарегистрирован: 13 авг 2012, 23:56
Репутация: 0
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение cnc-00 »

nkp писал(а):поясни-чего тебе в нем не хватает???
Как тогда получить координаты из G-code? :)

Поясняю. Есть круглошлифовальный станок который должен шлифовать заготовку до 25.00 мм
Шлифовщик измеряет заготовку она равна 26.4 мм т.е. нужно шлифонуть 1.4 мм. Он забивает отступ в экране Axis 1.4 мм (т.е. мы шлифуем до 0) и запускает G-Code.
В G-code макрос М150 который шлифует до 0, т.е. он получает текущее значение, в нашем случаи 1.4 мм и потихоньку обрабатывает заготовку (выждал 2 прохода, снял сотку, опять выждал 2 прохода, снял сотку и так до 0) следя за координатами.
Следующая заготовка 26.2, забиваем в экран отступ 1.2 мм. И запускаем шлифовку. И т.д. и т.п.

Сейчас это сделанно через g-code, но в этом минус, для каждого новой заготовки нужно редактировать g-code (изменяя начальный диаметр заготовки)

Я НИ ХОЧУ ЧТОБЫ ШЛИФОВЩИК ЛАЗИЛ G-CODE И ТАМ ЧТО-ТО МЕНЯЛ, ПУСТЬ ОН РАБОТАЕТ ТОЛЬКО С ЭКРАНОМ ЗАДАВАЯ КООРДИНАТЫ.

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

(LinuxCNC)
(шлифовка)
(для кругло-шлифовального)

#1=26.20 (начальный диаметр)
#2=25.00 (конечный диаметр)
#3=0.01 (шаг переезда)
#4=2 (количество выхаживаний перед переездом)
M103
G91
O101 while [#2 lt #1] (>)
	#100 = 1 				(сначало выхаживание)
	O102 while [#100 le #4] (< выхаживание)
		M101
		#100 = [#100 + 1]
	O102 endwhile
	G0 X-#3					(переезд)
	#2 = [#2+#3]
O101 endwhile

M101
M101
M101
M101
M101
M101

G90
G0 x50
(M120 стоп)
M102 (включить лампу)
M30
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение nkp »

приведенный код работает в виде ngcgui ??
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение nkp »

если б содержимое м101-
то сейчас набросали бы мастер
cnc-00
Новичок
Сообщения: 22
Зарегистрирован: 13 авг 2012, 23:56
Репутация: 0
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение cnc-00 »

nkp писал(а):приведенный код работает в виде ngcgui ??
Неа, обычный G-code, набранный в блокноте gedit.
Если я правильно понял вы хотите мастер сделать.
Мастер мастером, но я все же хочу функцию Code из Mach3
Изображение
cnc-00
Новичок
Сообщения: 22
Зарегистрирован: 13 авг 2012, 23:56
Репутация: 0
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение cnc-00 »

nkp писал(а):если б содержимое м101-
А еще М102, а завтра еще что-то добавится это нескончаемый процесс :)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение nkp »

cnc-00 писал(а):А еще М102, а завтра еще что-то добавится это нескончаемый процесс
я же как пример хотел показать
потом сам будешь править код как заблагорассудится
мастер-это очень удобно!!!
ввел значения -и поехали
cnc-00 писал(а):Мастер мастером, но я все же хочу функцию Code из Mach3
то есть задача-из м-файла запускать ж-код?
cnc-00
Новичок
Сообщения: 22
Зарегистрирован: 13 авг 2012, 23:56
Репутация: 0
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение cnc-00 »

nkp писал(а):то есть задача-из м-файла запускать ж-код?
Да
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение nkp »

Вид примерно такой:
Выделение(031).png (4549 просмотров) <a class='original' href='./download/file.php?id=7403&mode=view' target=_blank>Загрузить оригинал (74.8 КБ)</a>
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение nkp »

cnc-00 писал(а):Да
Ну смотри-в чем разница :
файл называется О101
или
файл называется М101
(ты что то имеешь против буквы О ;) ?)
:wik:
cnc-00
Новичок
Сообщения: 22
Зарегистрирован: 13 авг 2012, 23:56
Репутация: 0
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение cnc-00 »

Для большего прояснения - поставлю задачу иначе (вернее эта задача поставлена мне)

Имеется заготовка, которая на момент установки имеет неопределенный диаметр. (возможно даже неопределенную форму после термообработки)
Станочник клавишами двигает круг до касания. Далее нажимает "зеленую" кнопку на пульте и валит к следующему станку. (это все, что он должен знать про CNC)
"Зеленая" кнопка запускает макрос (M101 или O4847 до жопы), который запоминает текущее положение оси и ждет появления сигнала с концевика. Каждый раз при появлении сигнала сигналы макрос перемещает ось на фиксированый промежуток. При достижении заданного диаметра, макрос игнорирует концевик и "выхаживает" заготовку в течении заданного промежутка времени. Далее макрос "гасит" станок и зажигает "большой красный фонарь".
Далее дело рук станочника.

Все это с лехкостью реализовано на мач3.
Настало время одолевать linuxcnc.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение nkp »

ну так бы и раньше...
говорят же-в правильно поставленном вопросе-50% ответа
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение nkp »

для контроля состояния концевика можно использовать ж38.2
в хал добавляем:

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

net proba  parport.0.pin-13-in-not  motion.probe-input 
(пин парпорта по выбору)
вот наброски кода:

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

#<st_diam>  = 26.20 
#<end_diam> = 26.16  
#<step>     = 0.01  
#<amount>   = 2 
#<rep>      = 3  
g92 x0 z0
f50 
#<st_rad>  =[#<st_diam>/2]
#<end_rad> =[#<end_diam>/2]

O101 while [#<st_rad> gt #<end_rad>] 
     #<nv>=1       
   O102 while [#<nv> le 2]
      #<nv>=[#<nv>+1] 
      g38.2 z-222
      g4 p2
      g1 z#5223                
   O102 endwhile
 g91
  G1 X[-#<step>]
 g90
#<st_rad> = [#<st_rad>-#<step> ]     
O101 endwhile
O104 repeat [#<rep> ]      
      g38.2 z-222
      g4 p1
      g1 z#5223                
O104 endrepeat
g92.1
M2
но так как я понимаю хоть один параметр -но вносить надо(наверно конечный диаметр)
то можно прикрутить либо окошко pyvcp ,либо вкладку-что более кошерно.
Вот здесь пробовал его.
Файл мастера:
ch.ngc
(781 байт) 1120 скачиваний
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение nkp »

вот тот же код-но тело циклов теперь-это
вызов файла подпрограммы name.ngc

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

#<st_diam>  = 26.20 
#<end_diam> = 26.16  
#<step>     = 0.01  
#<amount>   = 2 
#<rep>      = 3  
g92 x0 z0
f50 
#<st_rad>  =[#<st_diam>/2]
#<end_rad> =[#<end_diam>/2]

O101 while [#<st_rad> gt #<end_rad>] 
     #<nv>=1       
   O102 while [#<nv> le 2]
      
      #<nv>=[#<nv>+1] 
      o<name> call         
   O102 endwhile
 g91
  G1 X[-#<step>]
 g90
#<st_rad> = [#<st_rad>-#<step> ]     
O101 endwhile
O104 repeat [#<rep> ]
      o<name> call      
               
O104 endrepeat
g92.1
M2
в name.ngc :

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

o<name> sub
      g38.2 z-222
      g1 z#5223  
o<name> endsub
это наметки-так как не понятны некоторые моменты:
что такое "выхаживание" (я предположил что это как бы повторный проход)?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Отправить G комманду из макроса

Сообщение nkp »

M64 P0 - команда для включения пина (лампы)
M65 P0 - команда для выключения пина (лампы)
в хал:

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

net lamp motion.digital-out-00  parport.0.pin-01-out
код:
(для просмотра содержимого нажмите на ссылку)

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

M65 P0
#<st_diam>  = 26.20 
#<end_diam> = 26.16  
#<step>     = 0.01  
#<amount>   = 2 
#<rep>      = 3  
g92 x0 z0
f50 
#<st_rad>  =[#<st_diam>/2]
#<end_rad> =[#<end_diam>/2]

O101 while [#<st_rad> gt #<end_rad>] 
     #<nv>=1       
   O102 while [#<nv> le 2]
      
      #<nv>=[#<nv>+1] 
      o<name> call         
   O102 endwhile
 g91
  G1 X[-#<step>]
 g90
#<st_rad> = [#<st_rad>-#<step> ]     
O101 endwhile
O104 repeat [#<rep> ]
      o<name> call      
               
O104 endrepeat
g92.1
M64 P0
M2
выключение лампы можно дублировать кнопкой
Ответить

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