Полноценная стойка на стол плазменного раскроя на базе ЕМС2

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

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение Nick »

С высотой, можно сделать так:

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

O#<find_metal> SUB
  G38.2 Z-10 (ищем метал)
  G92 Z0 (обнуление Z)
  M66 E1 L0  (смотрим, что на пине motion.analog-in-00, значение сохраняется в #5399)
  G0 Z[#5399] (едем на нужную высоту)
O#<find_metal> ENDSUB
В hal надо добавить

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

net pen-height => motion.analog-in-00
net pen-height <= сюда пин из gladevcp
Все :).
lobzik писал(а):Да и как мне добавлять строку перед каждым M03?
В какой CAM готовишь Gкод?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение nkp »

Nick писал(а):С высотой, можно сделать так:
Код: Выделить всё • Развернуть
O#<find_metal> SUB
G38.2 Z-10 (ищем метал)
G92 Z0 (обнуление Z)
M66 E1 L0 (смотрим, что на пине motion.analog-in-00, значение сохраняется в #5399)
G0 Z[#5399] (едем на нужную высоту)
O#<find_metal> ENDSUB
решетки вроде в коде лишние...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение Nick »

Вроде нет... ... хотя да - лишние! :)
Вот так правильно:

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

O<find_metal> SUB
  G38.2 Z-10 (ищем метал)
  G92 Z0 (обнуление Z)
  M66 E1 L0  (смотрим, что на пине motion.analog-in-00, значение сохраняется в #5399)
  G0 Z[#5399] (едем на нужную высоту)
O<find_metal> ENDSUB
Аватара пользователя
lobzik
Кандидат
Сообщения: 53
Зарегистрирован: 22 ноя 2012, 14:33
Репутация: 32
Контактная информация:

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение lobzik »

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

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение Nick »

lobzik писал(а):Как там у вас разработка автораскладчика?
Пока подзависла...
Sheetcam пробовал? Вроде как он и под linux идет.
Кстати, можно попробовать pronest под wine запустить. (sudo apt-get install wine) и потом на файле инсталятора кликаешь правой кнопкой и открыть в wine.
Аватара пользователя
lobzik
Кандидат
Сообщения: 53
Зарегистрирован: 22 ноя 2012, 14:33
Репутация: 32
Контактная информация:

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение lobzik »

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

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение Nick »

Попробуй вот такое: http://www.linuxcnc.org/index.php/forum ... glish#5670

По поводу сохраненения значений: http://linuxcnc.org/docs/html/gui/glade ... p_shutdown
Аватара пользователя
lobzik
Кандидат
Сообщения: 53
Зарегистрирован: 22 ноя 2012, 14:33
Репутация: 32
Контактная информация:

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение lobzik »

По поводу дребезга все получилось, а вот по поводу сохранения значения ничего не понял. И еще вопрос по регулировке высоты по напряжению: как лучше сделать, читать напряжение по RS232, а потом сравнимать с заданным и регулировать высоту, или регулировать по дискретным сигналам UP и DOWN? И еще, как подключить компонент UPDOWN?
Аватара пользователя
lobzik
Кандидат
Сообщения: 53
Зарегистрирован: 22 ноя 2012, 14:33
Репутация: 32
Контактная информация:

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение lobzik »

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

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение Nick »

Что-то не могу найти, где-то я в общих словах это уже описывал...

сигнал на который на пины приходит это постоянный сигнал или дискретный.
Т.е.:
1. пока на пине up висит 1 постоянно поднимаем
или
2. на пине up появилась 1 подняли на 0.1мм, потом ждем 0 и снова 1 для еще 0.1
Аватара пользователя
lobzik
Кандидат
Сообщения: 53
Зарегистрирован: 22 ноя 2012, 14:33
Репутация: 32
Контактная информация:

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение lobzik »

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

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение Nick »

примерно так:

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

# делаем пин который будет тикать раз в servo-thread, not раз в период будет менять свое значение.
loadrt not names=timer
addf timer servo-thread 
net timer <= timer.out => timer.in

# загружаем два and  - они будут в качестве масок для таймера. 
loadrt and2 names=and.up, and.down 
addf and.up servo-thread 
addf and.down servo-thread 

# загружаем updown
loadrt updown names=updown.thc 
addf updown.thc  servo-thread

# загружаем sum2
loadrt sum2 names=sum2.thc

# теперь на выходе and.up.out будут 10101010 только если на пине up есть 1. 
net timer => and.up.in0 
net up-pin => and.up.in1  
# подключаем пины updown.thc 
net andup <= and.up.out => updown.thc.countup

# тоже самое с down
net timer => and.down.in0 
net down-pin => and.down.in1  
# подключаем пины updown.thc 
net anddown <= and.down.out => updown.thc.countdown

# настраиваем updown максимум и минимум, помноженные на коэффициент суммы ниже
setp updown.thc.max 10000 
setp updown.thc.min -10000 
setp updown.thc.wrap 0

#теперь к сумме:
net updownd <= updown.thc.count => sum2.thc.in0
net z-cmd <= axis.2.motor-pos-cmd => sum2.thc.in1 
# множитель для thc (в среднем скорость будет 500 единиц в секунду, т.е. 0.001 = 0.5 мм/сек)
setp sum2.thc.gain0 0.001

net z-motor-cmd <= sum2.thc.out => stepgen.2.position-cmd
Вроде более менее все.
Останется убрать предыдущую строку с axis.2.motor-pos-cmd и добавить пины к up-pin и down-pin.
Аватара пользователя
lobzik
Кандидат
Сообщения: 53
Зарегистрирован: 22 ноя 2012, 14:33
Репутация: 32
Контактная информация:

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение lobzik »

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

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение Nick »

А ты с нее обратную связь не отключил? Покаж hal.
Аватара пользователя
lobzik
Кандидат
Сообщения: 53
Зарегистрирован: 22 ноя 2012, 14:33
Репутация: 32
Контактная информация:

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение lobzik »

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

# Include your customized HAL commands here

setp halui.jog-speed 300
 # the jogging from the buttons
net remote-jog-x-plus halui.jog.0.plus <= gladevcp.hal_button6
net remote-jog-x-minus halui.jog.0.minus <= gladevcp.hal_button4

net remote-jog-y-plus halui.jog.1.plus <= gladevcp.hal_button2
net remote-jog-y-minus halui.jog.1.minus <= gladevcp.hal_button8

net remote-jog-z-plus halui.jog.2.plus <= gladevcp.hal_button3
net remote-jog-z-minus halui.jog.2.minus <= gladevcp.hal_button9

#Пробник высотомер
net pen-height => motion.analog-in-00
net pen-height <= gladevcp.hal_spinbutton1-f



#Задержка антидребезг
unlinkp parport.0.pin-11-in-not
unlinkp motion.probe-input
net probe-filter => motion.probe-input
loadrt debounce cfg=1
addf debounce.0 base-thread
setp debounce.0.delay  100
net probe-raw parport.0.pin-11-in-not => debounce.0.0.in
net probe-filter <= debounce.0.0.out
net probe-filter => gladevcp.hal_led1

net u_thc => gladevcp.hal_spinbutton2-f
net u_thc => gladevcp.hal_meter1

#Компонент updown
# делаем пин который будет тикать раз в servo-thread, not раз в период будет менять свое значение.
loadrt not names=timer
addf timer servo-thread 
net timer <= timer.out => timer.in

# загружаем два and  - они будут в качестве масок для таймера. 
loadrt and2 names=and.up,and.down 
addf and.up servo-thread 
addf and.down servo-thread 

# загружаем updown
loadrt updown names=updown.thc 
addf updown.thc  servo-thread

# загружаем sum2
loadrt sum2 names=sum2.thc


# теперь на выходе and.up.out будут 10101010 только если на пине up есть 1. 
net timer => and.up.in0 
net up-pin => and.up.in1  
# подключаем пины updown.thc 
net andup <= and.up.out => updown.thc.countup

# тоже самое с down
net timer => and.down.in0 
net down-pin => and.down.in1  
# подключаем пины updown.thc 
net anddown <= and.down.out => updown.thc.countdown

# настраиваем updown максимум и минимум, помноженные на коэффициент суммы ниже
setp updown.thc.max 10000 
setp updown.thc.min -10000 
setp updown.thc.wrap 0
##########
unlinkp axis.2.motor-pos-cmd
unlinkp stepgen.2.position-cmd

#теперь к сумме:
net updownd  <=sum2.thc.in0  updown.thc.count  
net z-cmd <= axis.2.motor-pos-cmd => sum2.thc.in1 
# множитель для thc (в среднем скорость будет 500 единиц в секунду, т.е. 0.001 = 0.5 мм/сек)
setp sum2.thc.gain0 0.001

net z-motor-cmd <= sum2.thc.out => stepgen.2.position-cmd

net up-pin parport.0.pin-12-in-not
net down-pin parport.0.pin-13-in-not
Вот он.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение Nick »

И основной еще давай!
В двух словах: надо отключить feedback оси Z от stepgen и выдавать на него тот же z-cmd. Это не очень хорошо, т.к. мы реально не знаем куда может уехать ось.

Или можно сделать так: если знаем пределы до которых должен работать THC, скажем +-5см, то просто поставь в ini в [AXIS_2] FERROR = 50 и все.
Аватара пользователя
lobzik
Кандидат
Сообщения: 53
Зарегистрирован: 22 ноя 2012, 14:33
Репутация: 32
Контактная информация:

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение lobzik »

Вот основной HAL

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

# Создан stepconf в Wed Dec 19 16:38:53 2012
# Все изменения в этом файле будут перезаписаны
# при следующем запуске stepconf
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt probe_parport
loadrt hal_parport cfg="0x378 out  "
setp parport.0.reset-time 5000
loadrt stepgen step_type=0,0,0

addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread

addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf stepgen.update-freq servo-thread
net spindle-cmd <= motion.spindle-speed-out
net spindle-cw <= motion.spindle-forward

net probe-in => motion.probe-input


net xstep => parport.0.pin-02-out
setp parport.0.pin-02-out-reset 1
setp parport.0.pin-03-out-invert 1
net xdir => parport.0.pin-03-out
net ystep => parport.0.pin-04-out
setp parport.0.pin-04-out-reset 1
setp parport.0.pin-05-out-invert 1
net ydir => parport.0.pin-05-out
net zstep => parport.0.pin-06-out
setp parport.0.pin-06-out-reset 1
net zdir => parport.0.pin-07-out
net astep => parport.0.pin-08-out
setp parport.0.pin-08-out-reset 1
net adir => parport.0.pin-09-out
net estop-out => parport.0.pin-14-out
setp parport.0.pin-16-out-invert 1
net spindle-cw => parport.0.pin-16-out
setp parport.0.pin-17-out-invert 1
net spindle-cw => parport.0.pin-17-out


net all-home <= parport.0.pin-10-in
net probe-in <= parport.0.pin-11-in-not


setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 43000
setp stepgen.0.dirsetup 43000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd
net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
net xenable axis.0.amp-enable-out => stepgen.0.enable
net all-home => axis.0.home-sw-in

setp stepgen.1.position-scale [AXIS_1]SCALE
setp stepgen.1.steplen 1
setp stepgen.1.stepspace 0
setp stepgen.1.dirhold 43000
setp stepgen.1.dirsetup 43000
setp stepgen.1.maxaccel [AXIS_1]STEPGEN_MAXACCEL
net ypos-cmd axis.1.motor-pos-cmd => stepgen.1.position-cmd
net ypos-fb stepgen.1.position-fb => axis.1.motor-pos-fb
net ystep <= stepgen.1.step
net ydir <= stepgen.1.dir
net yenable axis.1.amp-enable-out => stepgen.1.enable
net all-home => axis.1.home-sw-in

setp stepgen.2.position-scale [AXIS_2]SCALE
setp stepgen.2.steplen 1
setp stepgen.2.stepspace 0
setp stepgen.2.dirhold 43000
setp stepgen.2.dirsetup 43000
setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zpos-cmd axis.2.motor-pos-cmd => stepgen.2.position-cmd
net zpos-fb stepgen.2.position-fb => axis.2.motor-pos-fb
net zstep <= stepgen.2.step
net zdir <= stepgen.2.dir
net zenable axis.2.amp-enable-out => stepgen.2.enable
net all-home => axis.2.home-sw-in

net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in

loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение Nick »

Значит, либо вот эту строчки добавить:

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

unlinkp axis.2.motor-pos-fb
net z-cmd => axis.2.motor-pos-fb
Но, лучше наверное FFERROR для оси Z увеличить. Так на экране будет показываться реальная координата оси и вообще лучше будет....
Аватара пользователя
lobzik
Кандидат
Сообщения: 53
Зарегистрирован: 22 ноя 2012, 14:33
Репутация: 32
Контактная информация:

Re: Полноценная стойка на стол плазменного раскроя на базе Е

Сообщение lobzik »

Ничего не получилось, при ручном управлении положение оси на экране меняется, двигатель не крутится :(
Ответить

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