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

61 lines
1.7 KiB
Tcl

# horst T controller for humidity cell
# serial settings: 9600 baud/8 bits/parity even/1 stop
# special binary protocol, byte order is inversed! (float3 means byte 0 is at position 3)
namespace eval horst {} {
}
proc stdConfig::horst {{label ""}} {
if {$label eq ""} {
variable name
set label $name
}
controller bin
# authentication (including serial number of the device!)
# prop startcmd "hex 68 10 10 68 fe 69 ff 52 44 31 30 35 31 31 31 34 38 32 36 00 f9 16 / skip6 hex hex skip2"
prop startcmd "hex 68 10 10 68 fe 69 ff str12 RD1051114826 hex 00 crcc4 16 / skip6 hex hex skip2"
obj Horst_MC1 rd
prop readcmd "hex 10 00 99 crcc1 16 / 0x68 12 12 0x68 0 0 float3 float3 int1 0 crcc4 0x16"
prop update horst::update
prop fmt "%.4g"
kids $label {
node set out
prop write horst::write
prop fmt "%.4g"
node out upd
node remote wr
prop readcmd "hex 68 03 03 68 00 89 f4 crcc4 16 / 0x68 4 4 0x68 0 0 int1 0 crcc4 0x16"
prop writecmd "hex 68 05 05 68 00 69 f4 %x 00 crcc4 16 / hex dump"
prop enum 1
}
}
# switch to remote!
proc horst::update {} {
lassign [sct result] soll ist htr
sct update $ist
updateval [sct]/set $soll
updateval [sct]/out [expr $htr * 0.01]
return idle
}
proc horst::write {{remotecheck 0}} {
clientput "write [sct] [sct target]"
if {$remotecheck} {
hupdate [sct objectPath]/remote 1
}
if {![hvali [sct objectPath]/remote]} {
sct send "hex 68 05 05 68 00 69 f4 01 00 crcc4 16 / 0x10 0 0 0 0x16"
return "horst::write 1"
}
sct send "hex 68 07 07 68 00 79 e9 float3 [sct target] crcc4 hex 16 / 0x10 0 0 0 0x16"
[sct controller] queue [sct objectPath] read read
sct update [sct target]
return stdSct::complete
}