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 писал(а):С высотой, можно сделать так:
Код: Выделить всё • Развернуть
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
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
Пока пользовался мачем готовил в пронесте, а сейчас нужно наверное переходить на что-то под линукс. Может Gcode tools? Как там у вас разработка автораскладчика?
lobzik писал(а):Как там у вас разработка автораскладчика?
Пока подзависла...
Sheetcam пробовал? Вроде как он и под linux идет.
Кстати, можно попробовать pronest под wine запустить. (sudo apt-get install wine) и потом на файле инсталятора кликаешь правой кнопкой и открыть в wine.
Попробовал установить код поиска металла, один раз сработал, а сейчас пишет: probe tripped during non-probe MDI command Подозреваю, что это дребег контакта между пробником и металлом. Как это можно исправить? Да, и еще значение подпрыжки не сохраняетя после перезагрузки ЕМС, неудобно...
По поводу дребезга все получилось, а вот по поводу сохранения значения ничего не понял. И еще вопрос по регулировке высоты по напряжению: как лучше сделать, читать напряжение по RS232, а потом сравнимать с заданным и регулировать высоту, или регулировать по дискретным сигналам UP и DOWN? И еще, как подключить компонент UPDOWN?
Что-то не могу найти, где-то я в общих словах это уже описывал...
сигнал на который на пины приходит это постоянный сигнал или дискретный.
Т.е.:
1. пока на пине up висит 1 постоянно поднимаем
или
2. на пине up появилась 1 подняли на 0.1мм, потом ждем 0 и снова 1 для еще 0.1
# делаем пин который будет тикать раз в 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.
# 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
И основной еще давай!
В двух словах: надо отключить feedback оси Z от stepgen и выдавать на него тот же z-cmd. Это не очень хорошо, т.к. мы реально не знаем куда может уехать ось.
Или можно сделать так: если знаем пределы до которых должен работать THC, скажем +-5см, то просто поставь в ini в [AXIS_2] FERROR = 50 и все.