yugles писал(а):И добавить паузу (или стоп) выполнения программы
Хмм... можно на авост вставать... или делать feed hold... Или feedhold+отруб плазмы. Что лучше?
С задержкой должно быть примерно так:
Код: Выделить всё
setp halui.jog-speed 3000
 # the jogging from the buttons
net remote-jog-x-plus halui.jog.0.plus <= gladevcp.hal_button1
net remote-jog-x-minus halui.jog.0.minus <= gladevcp.hal_button2
net remote-jog-y-plus halui.jog.1.plus <= gladevcp.hal_button3
net remote-jog-y-minus halui.jog.1.minus <= gladevcp.hal_button4
net remote-jog-z-plus halui.jog.2.plus <= gladevcp.hal_button5
net remote-jog-z-minus halui.jog.2.minus <= gladevcp.hal_button6
#Задержка антидребезг
unlinkp parport.0.pin-10-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-10-in-not => debounce.0.0.in
net probe-filter <= debounce.0.0.out
net probe-filter => gladevcp.hal_led1
# загружаем timedelay для задержки включения thc
loadrt timedelay names=timedelay.thc
addf timedelay.thc servo-thread
# время до включения 1 сек
setp timedelay.thc.on-delay 1.0
setp timedelay.thc.off-delay 0
net [сюда сигнал включения плазмы] => timedelay.thc.in 
#Компонент 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,and.timer-mask 
addf and.timer-mask servo-thread
addf and.up servo-thread 
addf and.down servo-thread 
net timer => and.timer-mask.in0
net thc-delay <= timedelay.thc.in => and.timer-mask.in1
net timer-masked <= and.timer-mask.out
# загружаем updown
loadrt updown names=updown.thc 
addf updown.thc  servo-thread
# загружаем sum2
loadrt sum2 names=sum2.thc
addf sum2.thc  servo-thread
# теперь на выходе and.up.out будут 10101010 только если на пине up есть 1. 
net timer-masked => and.up.in0 
net up-pin => and.up.in1  
# подключаем пины updown.thc 
net andup <= and.up.out => updown.thc.countup
# тоже самое с down
net timer-masked => 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
unlinkp axis.2.motor-pos-fb
net z-cmd => axis.2.motor-pos-fb
loadrt conv_s32_float names=conv_s32_float.updown,conv_s32_float.mod
addf conv_s32_float.updown servo-thread
#теперь к сумме:
net conv-in => conv_s32_float.updown.in <= updown.thc.count
net conv-out => conv_s32_float.updown.out <= sum2.thc.in0
net z-cmd <= axis.2.motor-pos-cmd => sum2.thc.in1 
# множитель для thc (в среднем скорость будет 500 единиц в секунду, т.е. 0.001 = 2.5 мм/сек)
setp sum2.thc.gain0 0.002
#изменил - было = 0.002
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 
net up-pin => gladevcp.Led-MoveUp
net down-pin => gladevcp.Led-MoveDown
#ArcOk
net wait <= parport.0.pin-15-in 
net wait => motion.digital-in-00
net Arc-ok => gladevcp.Led-ArcOk
Что добавилось: 
(сюда не забыть написать имя сигнала!)
Это компонент который добавляет задержку к сигналу включения плазмы, т.е. 1 на его выходе появится на 1 сек позже, чем включится плазма 
Код: Выделить всё
# загружаем timedelay для задержки включения thc
loadrt timedelay names=timedelay.thc
addf timedelay.thc servo-thread
# время до включения 1 сек
setp timedelay.thc.on-delay 1.0
setp timedelay.thc.off-delay 0
net [сюда сигнал включения плазмы] => timedelay.thc.in 
Потом мы делаем and выхода этого компонента и нашего timer, т.е. когда на timedelay.out  0 - мы не считаем thc. 
Изменились эти строки: 
Код: Выделить всё
loadrt and2 names=and.up,and.down,and.timer-mask 
addf and.timer-mask servo-thread
И вот эти:
Код: Выделить всё
net timer => and.timer-mask.in0
net thc-delay <= timedelay.thc.in => and.timer-mask.in1
net timer-masked <= and.timer-mask.out
также потом заменили timer на timer-masked: