add simramp feature
This commit is contained in:
71
tcl/drivers/simramp.tcl
Normal file
71
tcl/drivers/simramp.tcl
Normal file
@ -0,0 +1,71 @@
|
||||
# simulate a ramping device
|
||||
#
|
||||
|
||||
namespace eval simramp {} {
|
||||
}
|
||||
|
||||
proc stdConfig::simramp {{initvalue 0} {minvalue 0} {maxvalue 100} {time_const 60} {ramp 1e10} } {
|
||||
variable name
|
||||
|
||||
controller syncedprot 30
|
||||
prop write stdSct::complete
|
||||
|
||||
pollperiod 6 6
|
||||
|
||||
obj SIMRAMP_$name rd
|
||||
default $initvalue
|
||||
prop read simramp::poll
|
||||
prop lasttime 0
|
||||
prop minvalue $minvalue
|
||||
prop time_const $time_const
|
||||
|
||||
kids $name {
|
||||
node set out
|
||||
default $initvalue
|
||||
prop check simramp::check_set
|
||||
|
||||
node limit par $maxvalue
|
||||
|
||||
node reg upd
|
||||
|
||||
node ramp par $ramp
|
||||
|
||||
node command par -text noop
|
||||
}
|
||||
}
|
||||
|
||||
proc simramp::check_set {} {
|
||||
if {[sct target] > [hval [sct parent]/limit]} {
|
||||
error "[sct] [sct target] is above limit ([hval [sct parent]/limit])"
|
||||
}
|
||||
sct update [sct target]
|
||||
}
|
||||
|
||||
proc simramp::poll {{step 0}} {
|
||||
set now [doubleTime]
|
||||
set delay [expr $now - [sct lasttime]]
|
||||
sct lasttime $now
|
||||
set weight [expr 1.0 - exp(-$delay / double([sct time_const]))]
|
||||
putIntoLimits delay 0 10
|
||||
|
||||
get_values [sct] set reg ramp
|
||||
set meas [hvali [sct]]
|
||||
|
||||
if {$set > $reg} {
|
||||
set reg [expr $reg + $delay * $ramp]
|
||||
putIntoLimits reg [sct minvalue] $set
|
||||
} else {
|
||||
set reg [expr $reg - $delay * $ramp]
|
||||
putIntoLimits reg $set 1e10
|
||||
}
|
||||
update_values [sct] reg
|
||||
|
||||
putIntoLimits reg [sct minvalue] $reg
|
||||
set meas [expr $meas + $weight * ($reg - $meas)]
|
||||
sct update $meas
|
||||
eval "[hval [sct]/command] $meas"
|
||||
return idle
|
||||
}
|
||||
|
||||
proc noop {value} {
|
||||
}
|
3
tcl/simramp.addon
Normal file
3
tcl/simramp.addon
Normal file
@ -0,0 +1,3 @@
|
||||
addonDesc = simulate ramp
|
||||
|
||||
makenv ramp -driver simramp 0 0 400 0.01 0.0166666666
|
Reference in New Issue
Block a user