105 lines
1.9 KiB
Tcl
105 lines
1.9 KiB
Tcl
namespace eval tc400 {} {
|
|
}
|
|
|
|
proc stdConfig::tc400 {adr} {
|
|
controller std "\r" 5
|
|
prop startcmd "0010031202=?101"
|
|
prop read tc400::read
|
|
prop write tc400::write
|
|
|
|
pollperiod 5 5
|
|
|
|
obj "TC400" wr
|
|
prop par 707
|
|
prop @adr $adr
|
|
prop type fix2
|
|
|
|
kids "turbo $adr" {
|
|
node on wr
|
|
prop par 10
|
|
prop type bool
|
|
prop enum 1
|
|
|
|
node motor wr
|
|
prop par 23
|
|
prop type bool
|
|
prop enum 1
|
|
|
|
node speed rd
|
|
prop par 309
|
|
prop type fix0
|
|
|
|
node nominalspeed rd
|
|
prop par 308
|
|
prop type fix0
|
|
|
|
node current rd
|
|
prop par 310
|
|
prop type fix2
|
|
|
|
node errorcode -text rd
|
|
prop par 303
|
|
prop type text
|
|
|
|
node ovtempelec rd
|
|
prop par 304
|
|
prop type bool
|
|
|
|
node ovtemppump rd
|
|
prop par 305
|
|
prop type bool
|
|
|
|
node temppmpbot rd
|
|
prop par 330
|
|
prop type fix0
|
|
|
|
node tempbearng rd
|
|
prop par 342
|
|
prop type fix0
|
|
|
|
node tempmotor rd
|
|
prop par 346
|
|
prop type fix0
|
|
|
|
}
|
|
|
|
return "TC400 turbo pump"
|
|
}
|
|
|
|
proc tc400::addcksum {str} {
|
|
set cksum 0
|
|
foreach num [scan $str [string repeat %c [string length $str]]] {
|
|
incr cksum $num
|
|
}
|
|
return "$str[format %3.3d [expr $cksum % 256]]"
|
|
}
|
|
|
|
proc tc400::read {} {
|
|
sct send [addcksum [format "%3.3d00%3.3d02=?" [sct @adr] [sct par]]]
|
|
return tc400::update
|
|
}
|
|
|
|
proc tc400::update {} {
|
|
set end 15
|
|
set value [string range [sct result] 10 $end]
|
|
if {![scan $value %d value]} {
|
|
error "$value"
|
|
}
|
|
switch [sct type] {
|
|
bool { sct update [expr $value != 0] }
|
|
fix2 { sct update [expr $value * 0.01] }
|
|
default { sct update $value }
|
|
}
|
|
return idle
|
|
}
|
|
|
|
proc tc400::write {} {
|
|
switch [sct type] {
|
|
bool {set val [format "06%6.6d" [expr ([sct target] != 0) * 111111]]}
|
|
fix2 {set val [format "06%6.6d" [expr int(0.5 + [sct target] * 100)]]}
|
|
default {set val [format "06%6.6d" [expr int(0.5 + [sct target])]]}
|
|
}
|
|
sct send [addcksum [format "%3.3d10%3.3d$val" [sct @adr] [sct par] [sct target]]]
|
|
return tc400::update
|
|
}
|