LinuxCNC реверс Gкода

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
vmarkiv
Мастер
Сообщения: 516
Зарегистрирован: 21 янв 2012, 00:23
Репутация: 32
Откуда: Ивано-Франковск
Контактная информация:

Re: LinuxCNC реверс Gкода

Сообщение vmarkiv »

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

Re: LinuxCNC реверс Gкода

Сообщение Nick »

nkp писал(а):все это касается одной строки , размер перемещения в которой может быть небольшим
Т.е. работать будет только на одну строку назад? Потом опять поедет вперед, так?

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

Re: LinuxCNC реверс Gкода

Сообщение nkp »

vmarkiv писал(а):В HALe как кнопка + ( Zoom + ) будет называться ? Я туда заведу сигнал КЗ
ну так просто саму кнопку не подключить...
можно попробовать через компонент (так вначале и предполагалось) :

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

#!/usr/bin/python
import hal, time, linuxcnc
h = hal.component("rev")
h.newpin("rev", hal.HAL_BIT, hal.HAL_IN)
h.newpin("rerev", hal.HAL_BIT, hal.HAL_IN)

h.ready()
c = linuxcnc.command()
s = linuxcnc.stat()
def back():
	s.poll() 
        c.abort()

   	c.auto(linuxcnc.AUTO_RUN , (s.motion_line-1))
def again_forward ():
	s.poll() 
	c.abort()

	c.auto(linuxcnc.AUTO_RUN , (s.motion_line+1))
try:
    while 1:	 
	if h["rev"]==1:
		back()
		h["rev"]=0
	if h["rerev"]==1:
		again_forward()
		h["rerev"]=0
except KeyboardInterrupt:
    raise SystemExit
в хал появятся 2 пина , рисуем 2 кнопки pyvcp и коммутируем к ним наши пины в postgui:

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

net revgcode    rev.rev      pyvcp.rev
net rerevgcode  rev.rerev    pyvcp.rerev
вот конфиг.
пробовал - сбоит по непонятным пока причинам (надо разбираться с компонентом)
но попробовать можно
(вместо кнопок pyvcp подключаем сигнал КЗ)
EDM.rar
(4.41 КБ) 507 скачиваний
Последний раз редактировалось nkp 13 дек 2012, 00:04, всего редактировалось 1 раз.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: LinuxCNC реверс Gкода

Сообщение Nick »

А как сбоит?
ЗЫ у тебя в этом районе, проблема с отступами:
def back():
   s.poll()
        c.abort()[/quote]
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC реверс Gкода

Сообщение nkp »

Nick писал(а):ЗЫ у тебя в этом районе, проблема с отступами:
def back():
s.poll()
c.abort()
это почти всегда при вставке кода на форум(у меня по крайней мере :) )
Nick писал(а):А как сбоит?
дело в том ,что после c.abort() емс переходит в режим manual
когда пробовал без компонента (юзал кнопки zoom прямо в axis) - то
емс переходил в режим авто без проблем
а тут пробовал и принудительно :
(для просмотра содержимого нажмите на ссылку)

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

#!/usr/bin/python
import hal, time, linuxcnc
h = hal.component("rev")
h.newpin("rev", hal.HAL_BIT, hal.HAL_IN)
h.newpin("rerev", hal.HAL_BIT, hal.HAL_IN)

h.ready()
c = linuxcnc.command()
s = linuxcnc.stat()
def back():
	s.poll() 
        c.abort()
	c.mode(linuxcnc.MODE_AUTO)
   	c.auto(linuxcnc.AUTO_RUN , (s.motion_line-1))
def again_forward ():
	s.poll() 
	c.abort()
	c.mode(linuxcnc.MODE_AUTO)
	c.auto(linuxcnc.AUTO_RUN , (s.motion_line+1))
try:
    while 1:	 
	if h["rev"]==1:
		back()
		h["rev"]=0
	if h["rerev"]==1:
		again_forward()
		h["rerev"]=0
except KeyboardInterrupt:
    raise SystemExit

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

Re: LinuxCNC реверс Gкода

Сообщение Nick »

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

Re: LinuxCNC реверс Gкода

Сообщение nkp »

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

Re: LinuxCNC реверс Gкода

Сообщение Nick »

nkp писал(а):наверно нет - приучил себя к табам
Именно в этом месте - да:
1таб s.poll()
пробелы c.abort()

пробелы и таб c.auto(linuxcnc.AUTO_RUN , (s.motion_line-1))
nkp писал(а):в смысле изменять режим на авто ?
ps
хочешь сказать питон не успевает?
да в авто. не думаю, что он не успевает, просто могут быть какие-нибудь ограничения. Кстати, можно сделать доп проверку if is_auto
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC реверс Gкода

Сообщение nkp »

Nick писал(а):Кстати, можно сделать доп проверку if is_auto
да - вот это стоит попробовать...
upd:
добавил проверку по твоему совету - стало стабильней работать:

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

#!/usr/bin/python
import hal, time, emc
h = hal.component("rev")
h.newpin("rev", hal.HAL_BIT, hal.HAL_IN)
h.newpin("rerev", hal.HAL_BIT, hal.HAL_IN)

h.ready()
c = emc.command()
s = emc.stat()
def back():
	s.poll() 
	c.abort()
	if s.task_mode == 2:
		c.auto(emc.AUTO_RUN , (s.motion_line-1))
	else:
		c.mode(emc.MODE_AUTO)
def again_forward ():
	s.poll() 
	c.abort()
	if s.task_mode == 2:
		c.auto(emc.AUTO_RUN , (s.motion_line+1))
	else:
		c.mode(emc.MODE_AUTO)
try:
    while 1:	 
	if h["rev"]==1:
		back()
		h["rev"]=0
	if h["rerev"]==1:
		again_forward()
		h["rerev"]=0
except KeyboardInterrupt:
    raise SystemExit
и на счет табов ты был прав :oops:
--------------
теперь нужно как то через ладдер что ли пины прикрутить
у нас же rerev должен активироваться только после КЗ...
upd 2:
сейчас вставлял выше код - и посмотрел что сам написал ;) :
получается - если в данный момент режим авто - то делаем :

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

c.auto(emc.AUTO_RUN , (s.motion_line-1))
если нет - то устанавливаем его :

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

c.mode(emc.MODE_AUTO)
и больше, типа , ничего не делаем...
и оно почему то работает :thinking:
ну это я в смысле,что в else правильней было бы написать:

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

	else:
		c.mode(emc.MODE_AUTO)
		c.auto(emc.AUTO_RUN , (s.motion_line-1))
????
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC реверс Gкода

Сообщение nkp »

ошибка теперь такая: может это из-за компа
в нем latency не есть хороший (2 ядра+радион )
надо посмотреть - что за этой ошибкой стоит
-----------
а вообще что мы проверкой изменили
чем вот так:

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

def back():
	s.poll() 
	c.abort()
	c.mode(emc.MODE_AUTO)
	c.auto(emc.AUTO_RUN , (s.motion_line-1))
отличается от:

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

def back():
   s.poll() 
   c.abort()
   if s.task_mode == 2:
      c.auto(emc.AUTO_RUN , (s.motion_line-1))
   else:
      c.mode(emc.MODE_AUTO)
??
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: LinuxCNC реверс Gкода

Сообщение Nick »

Надо сделать ожидание режма auto. Для этого или сделать дпоплнительный event, или цикл (можно с максимальным временем ожидания) по условию s.task_mode != 2
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC реверс Gкода

Сообщение nkp »

Nick писал(а):Надо сделать ожидание режма auto
прописывал:

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

c.wait_complete()
стандартная команда дождаться исполнения
все равно глючит...
---------
тут ошибка связана с режимами построения траектории:
traj_mode(int)
set trajectory mode. Mode is one of MODE_FREE, MODE_COORD, or MODE_TELEOP.
(я так понял :thinking: )
это для меня темный лес
будем искать... (с) :)
vmarkiv
Мастер
Сообщения: 516
Зарегистрирован: 21 янв 2012, 00:23
Репутация: 32
Откуда: Ивано-Франковск
Контактная информация:

Re: LinuxCNC реверс Gкода

Сообщение vmarkiv »

У меня ошибка с #50 также выскакивает и программа LINUXCNC подтормаживает . Я оставил конфигурацию с реверсом в токарном , ребята точат детали и вспоминают меня выражениями ...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: LinuxCNC реверс Gкода

Сообщение nkp »

vmarkiv писал(а):оставил конфигурацию с реверсом в токарном
в принципе что то не то
если не нажимать кнопки zoom - то функции не вызываются и
все должно быть как обычно...
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: LinuxCNC реверс Gкода

Сообщение Lexxa »

вот можно ли на основе наработок по реверсу ж кода реализовать такую штуку?
Не важно фрезерный или токарный станок.
допустим фрезерный. в момент обработки мы понимаем, что надо бы заменить инструмент.
Включаем фид холд, нажимаем кнопку специально подготовленную, выключаем фид холд. После этого программа как бы приостанавливается и управление становится ручным.
вручную отводим инструмент от заотовки, ЧПУшка запоминает траекторию движения отвода. Меняем инструмент, привязываем если надо по Z, нажимаем вторую специальную кнопку,
далее станок по траектории отвода взвращается в "исходную точку". Нажимаем первую специальную кнопку и продолжаем обработку по программе.
:bender:
vmarkiv
Мастер
Сообщения: 516
Зарегистрирован: 21 янв 2012, 00:23
Репутация: 32
Откуда: Ивано-Франковск
Контактная информация:

Re: LinuxCNC реверс Gкода

Сообщение vmarkiv »

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

Re: LinuxCNC реверс Gкода

Сообщение Nick »

Lexxa писал(а):далее станок по траектории отвода взвращается в "исходную точку". Нажимаем первую специальную кнопку и продолжаем обработку по программе.
Исходная точка - начало кадра пойдет?
vmarkiv
Мастер
Сообщения: 516
Зарегистрирован: 21 янв 2012, 00:23
Репутация: 32
Откуда: Ивано-Франковск
Контактная информация:

Re: LinuxCNC реверс Gкода

Сообщение vmarkiv »

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

Re: LinuxCNC реверс Gкода

Сообщение nkp »

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

Re: LinuxCNC реверс Gкода

Сообщение Nick »

В середине кадра стартовать не всегда правильно, да и не всегда выйдет. Насколько я понимаю во многих случаях все это требуется при простой обработке с использованием базовых кодов G00-G03... и при этом пробеги там не большие.
Да и кстати, если фреза сломалась, то наверняка стартовать надо будет не с места остановки, а с места поломки фрезы...

Как вариант:
1. Запоминаем номер кадра.
2. Переходим в mdi
3. Запоминаем текущее положение: G28.1
4. Переходим в ручной режим.
5. Делаем свое грязное дело Едем куда надо, меняем инструмент.
6. Переходим в mdi
7. Едем на нужное место: G28
8. Продолжаем обработку с нужного кадра.

Если все это подходит, можно попробовать все это автоматизировать...
Ответить

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