Files
sea/tcl/drivers/bronkhorst.tcl
2022-08-18 15:04:28 +02:00

57 lines
1.3 KiB
Tcl

namespace eval bronkhorst {} {
}
proc stdConfig::bronkhorst {} {
controller std "\r\n"
# driver for mass flow meter Bronkhorst MassView
# 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
obj BRONKHORST upd
kids "flow meter" {
node counter rd
# 0C=length
# 80=address
# 04=read
# 00 process (only process)
# 80 parameter
# 68 41=process 104,float, fbnr 1
# 80 parameter
# 21 40=process 33, float, fbnr 0
# 00 last parameter
# 01 20=process 1, int, fbnr 0
prop readcmd ":0C800400806841802140000120"
prop readfmt ":1080020080%8s80%8s00%4x"
prop update bronkhorst::update
node ff upd
node fi upd
}
}
proc bronkhorst::update {} {
if {[scan [sct result] [sct readfmt] cn f1 f2] != 3} {
error "bad result format: '[sct result]' $cn $f1 $f2"
}
set cn [cnvrt xieee2float $cn]
set f1 [cnvrt xieee2float $f1]
hupdate /flow/counter $cn
hupdate /flow/ff $f1
set t [silent 0 sct read_time]
if {$t != 0} {
catch {
set tim [expr [sct utime] - $t]
hupdate /flow [expr ($cn - [sct last_counter]) / $tim]
hupdate /flow/fi $tim
}
}
sct last_counter $cn
return idle
}