61 lines
1.7 KiB
Tcl
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
|
|
}
|