59 lines
1.5 KiB
Tcl
59 lines
1.5 KiB
Tcl
namespace eval bronkpreg {} {
|
|
}
|
|
|
|
proc stdConfig::bronkpreg {convfact} {
|
|
controller std "\r\n"
|
|
|
|
# driver for Bronkhorst Pressure regulator (i.e.P-602CV-21KA-AAD)
|
|
# serial interface is set to:
|
|
# Char Size/Stop Bits: 8/1 Input Speed: 38400
|
|
# Flow Ctrl: None Output Speed: 38400
|
|
# Parity: None Modem Control: None
|
|
|
|
set convfact [expr $convfact / 32000.]
|
|
|
|
obj bpress rd
|
|
prop label Pressure
|
|
prop readcmd ":06800401210120"
|
|
prop readfmt ":0680020121%4x"
|
|
prop update bronkpreg::conv $convfact
|
|
kids "pressure regulator" {
|
|
node setpoint wr
|
|
prop label Setpoint
|
|
prop write bronkpreg::setp $convfact
|
|
prop readcmd ":06800401210121"
|
|
prop readfmt ":0680020121%4x"
|
|
prop update bronkpreg::conv $convfact
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
proc bronkpreg::conv {convfact} {
|
|
if {[scan [sct result] [sct readfmt] pres ] != 1} {
|
|
error "bad result format: '[sct result]' $pres"
|
|
}
|
|
sct update [format %.3f [expr $pres * $convfact]]
|
|
return idle
|
|
}
|
|
|
|
|
|
proc bronkpreg::setp {convfact} {
|
|
set setval [expr int( [sct target] / $convfact) ]
|
|
if {$setval > 32000 } {
|
|
set setval 32000
|
|
} elseif {$setval < 0 } {
|
|
set setval 0
|
|
}
|
|
sct send [format :0680010121%04X $setval]
|
|
return bronkpreg::acknowledge
|
|
}
|
|
|
|
proc bronkpreg::acknowledge {} {
|
|
if {[string compare [sct result] ":0480000005" ] != 0} {
|
|
error "bad result format: '[sct result]' [sct result]"
|
|
}
|
|
return read
|
|
}
|