Merge branch 'master' of gitlab.psi.ch-samenv:samenv/sea

This commit is contained in:
l_samenv
2023-08-22 17:23:46 +02:00
27 changed files with 140 additions and 54 deletions

View File

@ -4,7 +4,10 @@ defineTemperature tt
makenv tt -driver [lsdriver] { makenv tt -driver [lsdriver] {
lsc_sensor tm B -sensor pt1000e -sensorname main -alarm 650 lsc_sensor tm B -sensor pt1000e -sensorname main -alarm 650
# lsc_sensor te C -sensor x31318 -sensorname screen lsc_sensor te C -sensor x31318 -sensorname screen
# lsc_sensor tk A -sensor x31319 -sensorname coldfinger -alarm 310
# 2.8.2022 changed tk from ChA to ChD
#--this is a temporary fix-- needs to be undone when the wiring has been fixed
lsc_sensor tk A -sensor x31319 -sensorname coldfinger -alarm 310 lsc_sensor tk A -sensor x31319 -sensorname coldfinger -alarm 310
lsc_loop set -loop 1 -channel B -maxheater 100W -resist 25Ohm lsc_loop set -loop 1 -channel B -maxheater 100W -resist 25Ohm
if {[lsdriver] eq "336_lsc"} { if {[lsdriver] eq "336_lsc"} {

View File

@ -385,12 +385,14 @@ proc stdConfig::ccu4 {{title CCU4} args} {
} elseif {[string match valve* $a]} { } elseif {[string match valve* $a]} {
set nvalve [string range $a 5 end] set nvalve [string range $a 5 end]
for {set ch 1} {$ch <= 12} {incr ch} { for {set ch 1} {$ch <= 12} {incr ch} {
node v$ch upd node v$ch rd -int 10
prop read ccu4::readValve v$ch
prop enum valve_off,valve_on,no_valve,timeout,timeout1,boost prop enum valve_off,valve_on,no_valve,timeout,timeout1,boost
if {$ch > $nvalve} { if {$ch > $nvalve} {
prop visible false prop visible false
} }
node vc$ch out -int node vc$ch out -int
prop write ccu4::writeValve v$ch
prop enum valve_off,valve_on prop enum valve_off,valve_on
if {$ch > $nvalve} { if {$ch > $nvalve} {
prop visible false prop visible false
@ -404,6 +406,20 @@ proc stdConfig::ccu4 {{title CCU4} args} {
return "CCU4" return "CCU4"
} }
proc ccu4::readValve {valve} {
# for some strange reason, v... are not queried with '?'
# we have to do it here
sct send $valve
return ccu4::complete
}
proc ccu4::writeValve {valve} {
set res [ccu4::write]
# update readback value immediately
hupdate [sct parent]/$valve [sct target]
return $res
}
proc ccu4::completeStart {name} { proc ccu4::completeStart {name} {
set resval(cid) 0 set resval(cid) 0
set resval(cir) "" set resval(cir) ""

View File

@ -546,7 +546,7 @@ proc ccu4flow::ctrl {} {
} elseif {$now < $lastim + $period} { } elseif {$now < $lastim + $period} {
# wait # wait
} else { } else {
set slope [expr 0.01 + abs($dif) * $period / [hvali [sct]/ctrl/deriv$_dir]] set slope [expr 0.00 + abs($dif) * $period / [hvali [sct]/ctrl/deriv$_dir]]
set totalmin "" set totalmin ""
set ddif [format %.2f [expr -($dif - [sct olddif]) * [sct dir]]] set ddif [format %.2f [expr -($dif - [sct olddif]) * [sct dir]]]
sct filtered_ddif [expr max(0,[silent 0 sct filtered_ddif] * 0.9 + $ddif * 0.1)] sct filtered_ddif [expr max(0,[silent 0 sct filtered_ddif] * 0.9 + $ddif * 0.1)]

View File

@ -26,10 +26,9 @@ proc stdConfig::cryotel {} {
node cool wr node cool wr
prop label Cool prop label Cool
prop enum on,off prop enum 1
prop writecmd "SET SSTOP=%i" prop write cryotel::writecool
prop readcmd "SET SSTOP{2}" prop read cryotel::readcool
prop readfmt "SET SSTOP ,%i"
node control wr node control wr
default 1 default 1
@ -219,3 +218,23 @@ proc cryotel::checkcontrol {} {
hsetprop [sct] write stdSct::write hsetprop [sct] write stdSct::write
} }
} }
proc cryotel::writecool {} {
set flag [expr ! [sct target]]
sct send "SET SSTOP=$flag"
sct update [sct target]
return stdSct::complete
}
proc cryotel::readcool {} {
sct send "SET SSTOP{2}"
return cryotelboa::updatecool
}
proc cryotel::updatecool {} {
lassign [split [sct result] ,] _ value
sct update [expr $value == 0]
return idle
}

View File

@ -28,10 +28,9 @@ proc stdConfig::cryotelboa {} {
node cool wr node cool wr
prop label Cool prop label Cool
prop enum on,off prop enum 1
prop writecmd "SET SSTOP=%i" prop read cryotelboa::readcool
prop readcmd "SET SSTOP{2}" prop write cryotelboa::writecool
prop readfmt "SET SSTOP ,%i"
node control wr node control wr
default 1 default 1
@ -193,3 +192,22 @@ proc cryotelboa::checkcontrol {} {
sct write stdSct::write sct write stdSct::write
} }
} }
proc cryotelboa::writecool {} {
set flag [expr ! [sct target]]
sct send "SET SSTOP=$flag"
sct update [sct target]
return stdSct::complete
}
proc cryotelboa::readcool {} {
sct send "SET SSTOP{2}"
return cryotelboa::updatecool
}
proc cryotelboa::updatecool {} {
lassign [split [sct result] ,] _ value
sct update [expr $value == 0]
return idle
}

View File

@ -257,6 +257,9 @@ proc stdConfig::dil12 args {
prop label "remove mixture status" prop label "remove mixture status"
prop check dil12::check_removephase prop check dil12::check_removephase
prop write stdSct::completeUpdate prop write stdSct::completeUpdate
node ignore_vti_temp -int par 0
prop enum 1
} }
} }
hset $name/heatermode 0 hset $name/heatermode 0
@ -993,10 +996,15 @@ proc dil12::autostep {phase init} {
dil12::openvalves v1 v6 v12 v13 vm_open dil12::openvalves v1 v6 v12 v13 vm_open
sorb mode 0 sorb mode 0
dil12::set_VtiT 1.25
hset [sct]/onekstate 0 hset [sct]/onekstate 0
nv set [silent 5 hvali [sct]/circulateflow] nv set [silent 5 hvali [sct]/circulateflow]
if {[hval [sct]/ignore_vti_temp]} {
dil12::set_VtiT 0
nv 1 ;# controlled
} else {
dil12::set_VtiT 1.25
nv 2 ;# auto nv 2 ;# auto
}
dil12::msg "" dil12::msg ""
} }
circulate { circulate {
@ -1035,12 +1043,16 @@ proc dil12::autostep {phase init} {
sct optimize [clock seconds] sct optimize [clock seconds]
clientput "reduced VTI flow to [hvali [sct]/circulateflow]" clientput "reduced VTI flow to [hvali [sct]/circulateflow]"
nv set $circulateflow nv set $circulateflow
if {[hval [sct]/ignore_vti_temp]} {
nv 1 ;# controlled
} else {
nv 2 ;# auto nv 2 ;# auto
} }
} }
} }
} }
} }
}
init_finished { init_finished {
# close all valves and zero all powers # close all valves and zero all powers
dil12::clearButtons dil12::clearButtons

View File

@ -204,7 +204,7 @@ proc hepump::check_valve {} {
} }
proc hepump::set_valve {} { proc hepump::set_valve {} {
if {[sctval [sct parent]] != 0} return if {[sctval [sct parent]] % 8 != 0} {return idle}
set val [hvali [sct]] set val [hvali [sct]]
if {[sct target] < 2} { if {[sct target] < 2} {
if {[hvali [sct parent]/[sct @motname]/encoder] > 20} { if {[hvali [sct parent]/[sct @motname]/encoder] > 20} {
@ -238,7 +238,7 @@ proc hepump::slow_close {} {
} }
proc hepump::get_valve {} { proc hepump::get_valve {} {
if {[sctval [sct parent]] != 0} {return idle} if {[sctval [sct parent]] % 8 != 0} {return idle}
set p [sct parent]/[sct @motname] set p [sct parent]/[sct @motname]
set stat [hgetpropval $p status] set stat [hgetpropval $p status]
set pos [hvali $p/encoder] set pos [hvali $p/encoder]
@ -296,7 +296,7 @@ proc hepump::get_valve {} {
} }
proc hepump::chk_running {} { proc hepump::chk_running {} {
if {[sctval [sct parent]] != 0} return if {[sctval [sct parent]] % 8 != 0} return
if {[sct target]} { if {[sct target]} {
hset [sct parent]/[sct @motname]/output0 1 hset [sct parent]/[sct @motname]/output0 1
} else { # off } else { # off
@ -314,8 +314,8 @@ proc hepump::chk_running {} {
} }
proc hepump::get_running {} { proc hepump::get_running {} {
# only for xds35 # only for xds35 and neodry
if {[sctval [sct parent]] != 0} {return idle} if {[sctval [sct parent]] % 8 != 0} {return idle}
set running [sctval [sct parent]/[sct @motname]/output0] set running [sctval [sct parent]/[sct @motname]/output0]
set pumpoff [silent 1 hval [sct parent]/[sct @motname]/input3] set pumpoff [silent 1 hval [sct parent]/[sct @motname]/input3]
@ -361,6 +361,7 @@ proc hepump::get_running {} {
} }
proc hepump::set_eco {} { proc hepump::set_eco {} {
# xds35 only, not for neodry
if {[sctval [sct parent]] != 0} {return idle} if {[sctval [sct parent]] != 0} {return idle}
if {[sct target] != [hvali [sct]]} { if {[sct target] != [hvali [sct]]} {
hset [sct parent]/auto 0 hset [sct parent]/auto 0
@ -374,6 +375,7 @@ proc hepump::set_eco {} {
} }
proc hepump::get_eco {} { proc hepump::get_eco {} {
# xds35 only, not for neodry
if {[sctval [sct parent]] != 0} { if {[sctval [sct parent]] != 0} {
sct update 0 sct update 0
return idle return idle
@ -385,11 +387,13 @@ proc hepump::get_eco {} {
} }
proc hepump::set_auto {} { proc hepump::set_auto {} {
# xds35 only, not for neodry
if {[sctval [sct parent]] != 0} {return idle} if {[sctval [sct parent]] != 0} {return idle}
sct update [sct target] sct update [sct target]
} }
proc hepump::get_auto {} { proc hepump::get_auto {} {
# xds35 only, not for neodry
if {[sctval [sct parent]] != 0} {return idle} if {[sctval [sct parent]] != 0} {return idle}
set auto [hvali [sct]] set auto [hvali [sct]]
set oldeco [sctval [sct parent]/eco] set oldeco [sctval [sct parent]/eco]

View File

@ -758,7 +758,7 @@ proc secop::update_ {} {
} }
error_update { error_update {
lassign $val etype erepr lassign $val etype erepr
set etext erepr set etext $erepr
regexp {.*'(.*)'} $erepr -> etext regexp {.*'(.*)'} $erepr -> etext
hsetprop $path geterror "${etype}: $etext" hsetprop $path geterror "${etype}: $etext"
} }

View File

@ -496,10 +496,12 @@ proc trun::read_run {} {
} }
set now [DoubleTime] set now [DoubleTime]
set tr [silent none sct target] set tr [silent none sct target]
set prev_tr [silent $tr sct prev_tr]
if {$tr eq "none"} { if {$tr eq "none"} {
set tr $tmain set tr $tmain
sct prev_tr $tr
} else { } else {
set dif [expr abs($tr) - [hvali [sct]/target]] set dif [expr $tr - $prev_tr]
updateval_u [sct]/target $tr 0 updateval_u [sct]/target $tr 0
set dblmode [silent -1 hval [sct]/dblctrl/mode] set dblmode [silent -1 hval [sct]/dblctrl/mode]
if {$dblmode >= 0} { # not disabled if {$dblmode >= 0} { # not disabled

7
tcl/flexbox.addon Normal file
View File

@ -0,0 +1,7 @@
addonDesc = Coils from MLZ
set ::secop_version 4
makenv secop -driver secop -port flexbox:10767

View File

@ -9,7 +9,7 @@ makenv tt -driver 340_lsc -port @lsc340a {
lsc_sensor t2 D -sensor type-c-k1000 -sensorname t2 -alarm 1805 lsc_sensor t2 D -sensor type-c-k1000 -sensorname t2 -alarm 1805
# lsc_sensor te B -sensor rhfe4140 -sensorname outer -alarm 323 # lsc_sensor te B -sensor rhfe4140 -sensorname outer -alarm 323
lsc_sensor p A -sensor vacuum -sensorname vacuum lsc_sensor p A -sensor vacuum -sensorname vacuum
lsc_loop set -loop 1 -channel D -maxheater 0.05A -resist 1000Ohm -linearpower 3000 lsc_loop set -loop 1 -channel C -maxheater 0.05A -resist 1000Ohm -linearpower 3000
hsetprop /tt dblmode disabled hsetprop /tt dblmode disabled
hsetprop /tt/dblctrl visible false hsetprop /tt/dblctrl visible false
hdelprop /tt/dblctrl group hdelprop /tt/dblctrl group

View File

@ -2,7 +2,7 @@ deviceDesc = CCR with JT-stage
defineTemperature tt defineTemperature tt
makenv tt -driver [lsdriver] { makenv tt -driver 336_lsc -port jtccr-ls:7777 {
lsc_sensor main A x63710 lsc_sensor main A x63710
lsc_sensor ccr B x67737 lsc_sensor ccr B x67737
lsc_loop set -loop 1 -channel A -maxheater 5W -resist 500Ohm lsc_loop set -loop 1 -channel A -maxheater 5W -resist 500Ohm
@ -30,10 +30,6 @@ GraphAdd p4 bar p4 yellow
makenv -objname pressreg -driver bronkpreg -port jtccr-ts:3005 18 makenv -objname pressreg -driver bronkpreg -port jtccr-ts:3005 18
GraphAdd pressreg bar preg magenta GraphAdd pressreg bar preg magenta
#makenv -objname v -driver svumot -port jtccr-ts:3006 {
# v1 1 v2 2 v3 3 v4 4 v5 5 v6 6 v7 7 v8 mot
#}
makenv epc epc8210 -port jtccr-ts:3007 {jt-compressor 1 jt-pump 2 ccr-compressor 3} makenv epc epc8210 -port jtccr-ts:3007 {jt-compressor 1 jt-pump 2 ccr-compressor 3}
@ -41,8 +37,6 @@ makenv epc epc8210 -port jtccr-ts:3007 {jt-compressor 1 jt-pump 2 ccr-compressor
#makenv clt -driver loop -invar "/tt" -outvar "v motpos/set" \ #makenv clt -driver loop -invar "/tt" -outvar "v motpos/set" \
# -outmin 0.06 -outmax 0.9 -prop -1 -int 20 -maxdelta 10 -precision 0.01 # -outmin 0.06 -outmax 0.9 -prop -1 -int 20 -maxdelta 10 -precision 0.01
#makeCCU4 jtccr n2
#makenv n2 n2_ccu ccu #makenv n2 n2_ccu ccu
#appendVars n2.upper/K2/N2_Upper n2.lower/K2/N2_Lower #appendVars n2.upper/K2/N2_Upper n2.lower/K2/N2_Lower

View File

@ -17,13 +17,11 @@ tt set/limit 310
tt set/prop 15 tt set/prop 15
tt set/integ 10 tt set/integ 10
makeCCU4 ma02 nv n2 makeCCU4 ma02 nv n2 he_ilm
hupdate /nv/set 1.2 hupdate /nv/set 1.2
makeIps -limit 1.8 -startRamp 0.5 -port ma02-ts:3002 makeIps -limit 1.8 -startRamp 0.5 -port ma02-ts:3002
makeIlm -channels 1 -port ma02-ts:3001 makeIlm -channels 1 -port ma02-ts:3001
makeHeFill ccu4ilm
#makeHeFill lev

View File

@ -14,7 +14,7 @@ makenv tt -driver [lsdriver] {
} }
tt set/limit 310 tt set/limit 310
makeCCU4 ma10 nv_release_blocked makeCCU4 ma10 nv_release_blocked he_ilm
hupdate /nv/set 1.8 hupdate /nv/set 1.8
makenv mf -driver ipsmag -port ma10-ts:3001 -controller _mf makenv mf -driver ipsmag -port ma10-ts:3001 -controller _mf
@ -54,7 +54,6 @@ makeN2Fill ccu4ilm {
ln2fill minholdhours 12 ln2fill minholdhours 12
ln2fill maxholdhours 96 ln2fill maxholdhours 96
} }
makeHeFill ccu4ilm
# increase motor current # increase motor current
cc mc 75 cc mc 75

View File

@ -16,7 +16,7 @@ makenv tt -driver [lsdriver] {
} }
tt set/limit 310 tt set/limit 310
makeCCU4 ma11 nv makeCCU4 ma11 nv he_ilm
hupdate /nv/set 1.5 hupdate /nv/set 1.5
makeN2Fill ccu4ilm { makeN2Fill ccu4ilm {
ln2fill lowlevel 30 ln2fill lowlevel 30
@ -28,7 +28,6 @@ makeN2Fill ccu4ilm {
# appendVars ln2fill.smooth/%/N2smooth/13 # appendVars ln2fill.smooth/%/N2smooth/13
} }
makeHeFill ccu4ilm
catch { catch {
hefill minfillminutes 20 hefill minfillminutes 20
hefill maxfillminutes 60 hefill maxfillminutes 60

View File

@ -15,10 +15,10 @@ tt set/limit 310
makeCCU4 ma15 nv he_ilm makeCCU4 ma15 nv he_ilm
catch { catch {
hupdate /nv/set 1.5 hupdate /nv/set 1
nv ctrl/minpulse_o 0.01 nv ctrl/minpulse_o 0.01
nv ctrl/minpulse_c 0.05 nv ctrl/minpulse_c 0.05
nv tol 0.02 cc mc 75
} }
makeIps -limit 14.9 -startRamp 0.31 -port ma15-ts:3002 makeIps -limit 14.9 -startRamp 0.31 -port ma15-ts:3002

View File

@ -5,9 +5,11 @@ device stick_menu "ma6 dil2 dil3 dil4 coil"
makenv tt -driver [lsdriver] { makenv tt -driver [lsdriver] {
lsc_sensor tm A -sensor x48581 -sensorname VTI lsc_sensor tm A -sensor x48581 -sensorname VTI
lsc_sensor ts C -sensorname sample # 2023-07-06: sample sensor seems defect, use hx sensor
# lsc_sensor code D -sensor code -sensorname code # lsc_sensor ts C -sensorname sample
lsc_sensor ts_2 D -sensor code -sensorname sample2 # lsc_sensor ts_2 D -sensor code -sensorname sample2
lsc_sensor ts D -sensorname sample
lsc_sensor ts_2 C -sensor code -sensorname sample2
lsc_loop set -loop 1 -channel A -maxheater 32W -resist 80Ohm -color green lsc_loop set -loop 1 -channel A -maxheater 32W -resist 80Ohm -color green
if {[lsdriver] eq "336_lsc"} { if {[lsdriver] eq "336_lsc"} {
lsc_loop setsamp -loop 2 -channel C -maxheater 62.5W -resist 20Ohm -color dark_green -loopname sample lsc_loop setsamp -loop 2 -channel C -maxheater 62.5W -resist 20Ohm -color dark_green -loopname sample
@ -27,7 +29,6 @@ makeN2Fill ccu4ilm {
ln2fill minholdhours 12 ln2fill minholdhours 12
ln2fill maxholdhours 96 ln2fill maxholdhours 96
} }
makeHeFill ccu4ilm
makeIps -limit 6 -startRamp 0.3844 -port ma6-ts:3002 makeIps -limit 6 -startRamp 0.3844 -port ma6-ts:3002
if {[result instrument] eq "tasp"} { if {[result instrument] eq "tasp"} {

View File

@ -1,4 +1,4 @@
stickDesc = standard MA6 stick stickDesc = standard MA6 stick
stick_sensors x63161 undefined stick_sensors x63163 undefined
# stick_sensors x63161 x63163 # stick_sensors x63161 x63163

View File

@ -17,7 +17,7 @@ tt set/limit 310
makeCCU4 ma7 nv_release_blocked he_ilm makeCCU4 ma7 nv_release_blocked he_ilm
hupdate /nv/set 2.5 hupdate /nv/set 1.2
# increase n.v. motor current # increase n.v. motor current
cc mc 75 cc mc 75
nv ctrl/openpulse 2 nv ctrl/openpulse 2

View File

@ -11,7 +11,7 @@ makenv tt -driver [lsdriver] {
} }
tt set/limit 310 tt set/limit 310
makeCCU4 ori3 nv n2 he makeCCU4 ori3 nv n2 he
hupdate /nv/set 1.6 hupdate /nv/set 1.2
source maxi_orange.table source maxi_orange.table

View File

@ -1,6 +1,6 @@
addonDesc = Pfeiffer Pressure gauge RS232 addonDesc = Pfeiffer Pressure gauge RS232
makenv hvac -driver pfeiffertpg -port ldmse3-ts:3005 makenv hvac -driver pfeiffertpg
GraphAdd hvac mbar ivc blue GraphAdd hvac mbar hvac blue

View File

@ -2109,15 +2109,20 @@ proc ObjState {} {
lappend list $obj lappend list $obj
} }
set canNotConnect 0 set canNotConnect 0
set showRackList 0
set rack [silent no result device rack]
foreach obj $list { foreach obj $list {
if {$obj eq "_cc"} { if {$obj eq "_cc"} {
set canNotConnect [showStatus _cc 1] set canNotConnect [showStatus _cc 1]
if {$canNotConnect || $rack eq "no"} {
set showRackList 1
}
} else { } else {
showStatus $obj 1 showStatus $obj 1
} }
} }
if {[result device name] eq "none"} { if {[result device name] eq "none"} {
Group rack "choose rack" set showRackList 1
} elseif {$canNotConnect} { } elseif {$canNotConnect} {
Style warning Style warning
if {[silent no result device rack] eq "other"} { if {[silent no result device rack] eq "other"} {
@ -2136,6 +2141,8 @@ proc ObjState {} {
Style hotwarning Style hotwarning
Label "please select rack (rack number as labelled on the top of the rack)" Label "please select rack (rack number as labelled on the top of the rack)"
} }
}
if {$showRackList} {
Group rack "choose rack" Group rack "choose rack"
} }
} }

View File

@ -1,4 +1,7 @@
proc makeHeFill {levcmd} { proc makeHeFill {levcmd} {
# this seems obsolete
# use makeCCU4 ... he
# or makeCCU4 ... he_ilm
if {$levcmd eq "ccu"} { if {$levcmd eq "ccu"} {
makenv lev he_ccu ccu makenv lev he_ccu ccu
GraphAdd lev % HeLevel brown GraphAdd lev % HeLevel brown

View File

@ -266,10 +266,13 @@ proc frappy_async_client {} {
proc get_all_param {args} { proc get_all_param {args} {
foreach obj $args { foreach obj $args {
catch {
set hp [get_obj_path $obj] set hp [get_obj_path $obj]
hnotify $hp 1 hnotify $hp 1
get_param_values $hp get_param_values $hp
} }
# todo: create error message on failure
}
} }
proc error_update_script {hp} { proc error_update_script {hp} {

View File

@ -15,7 +15,7 @@ proc makeHePump {} {
} }
hset /hepump $type hset /hepump $type
if {$type == 0} { if {$type == 0 || $type == 8} {
makenv hemot -driver trinamic -base /hepump/ hepump makenv hemot -driver trinamic -base /hepump/ hepump
if {[silent 0 result instconfig sensirion]} { if {[silent 0 result instconfig sensirion]} {
makenv nvflow -driver sensirion -controller _hemot makenv nvflow -driver sensirion -controller _hemot

View File

@ -59,7 +59,8 @@ proc get_rack {{oldrack ""}} {
} }
} }
} }
if {$mysubnet ne "office" && [llength $inmynet]} { set hostname [lindex [split [info hostname] .] 0]
if {$mysubnet ne "office" && [llength $inmynet] && $hostname eq [result instrument]} {
# if any rack is in the instrument subnet, racks in office net are not shown # if any rack is in the instrument subnet, racks in office net are not shown
return $inmynet return $inmynet
} }

View File

@ -14,6 +14,6 @@ tt set/limit 310
tt set/prop 20 tt set/prop 20
tt set/integ 10 tt set/integ 10
makeCCU4 variox nv n2 he makeCCU4 variox nv n2 he
hupdate /nv/set 2.5 hupdate /nv/set 1.2
nv ctrl/minpulse_o 0.01 nv ctrl/minpulse_o 0.01
nv ctrl/minpulse_c 0.1 nv ctrl/minpulse_c 0.1