67 lines
2.3 KiB
Tcl
67 lines
2.3 KiB
Tcl
#---------------------------------------------------------------
|
|
# This is a second generation simulation motor.
|
|
#
|
|
# copyright: see file COPYRIGHT
|
|
#
|
|
# Mark Koennecke, December 2008
|
|
#----------------------------------------------------------------
|
|
proc simhardset {motname newval} {
|
|
hset /sics/$motname/starttime [clock sec]
|
|
}
|
|
#--------------------------------------------------------------
|
|
proc simhardget {motname} {
|
|
set stat [hval /sics/$motname/status]
|
|
set val [hval /sics/$motname/targetposition]
|
|
if {[string first run $stat] >= 0 \
|
|
|| [string first error $stat] >= 0 } {
|
|
return [expr $val -.777]
|
|
} else {
|
|
return $val
|
|
}
|
|
}
|
|
#-------------------------------------------------------------
|
|
proc simhardfaultget {motname} {
|
|
set val [hval /sics/$motname/targetposition]
|
|
return [expr $val - .5]
|
|
}
|
|
#--------------------------------------------------------------
|
|
proc simstatusget {motname} {
|
|
set start [hval /sics/$motname/starttime]
|
|
if {$start < 0} {
|
|
return error
|
|
}
|
|
set delay [hval /sics/$motname/delay]
|
|
if {[clock sec] > $start + $delay} {
|
|
return idle
|
|
} else {
|
|
return run
|
|
}
|
|
}
|
|
#-------------------------------------------------------------
|
|
proc simstatusfault {motname } {
|
|
clientput "ERROR: I am feeling faulty!"
|
|
return error
|
|
}
|
|
#--------------------------------------------------------------
|
|
proc simhalt {motname} {
|
|
hset /sics/$motname/starttime -100
|
|
}
|
|
#---------------------------------------------------------------
|
|
proc MakeSecSim {name lower upper delay} {
|
|
MakeSecMotor $name
|
|
hfactory /sics/$name/delay plain user text
|
|
hfactory /sics/$name/starttime plain user int
|
|
hset /sics/$name/delay $delay
|
|
hdel /sics/$name/hardposition
|
|
hfactory /sics/$name/hardposition script "simhardget $name" "simhardset $name" float
|
|
# hfactory /sics/$name/hardposition script "simhardfaultget $name" "simhardset $name" float
|
|
hdel /sics/$name/status
|
|
hfactory /sics/$name/status script "simstatusget $name" hdbReadOnly text
|
|
# hfactory /sics/$name/status script "simstatusfault $name" hdbReadOnly text
|
|
$name makescriptfunc halt "simhalt $name" user
|
|
hupdate /sics/$name/hardupperlim $upper
|
|
hupdate /sics/$name/softupperlim $upper
|
|
hupdate /sics/$name/hardlowerlim $lower
|
|
hupdate /sics/$name/softlowerlim $lower
|
|
}
|