Add ";*IDN?" in SetValue and setPoint functions (after commands that don't elicit a response) to force a response that avoids the timeout and reconnect sequence that gives problems on the LS336

r3259 | dcl | 2011-10-18 16:13:01 +1100 (Tue, 18 Oct 2011) | 1 line
This commit is contained in:
Douglas Clowes
2011-10-18 16:13:01 +11:00
parent 27cb364855
commit a172bed449
3 changed files with 34 additions and 49 deletions

View File

@@ -149,7 +149,6 @@ debug_log "chkWrite new data for $tc_root [sct] result=\"$data\""
sct utime readtime sct utime readtime
debug_log "wrRun new data for $tc_root [sct] data=$data" debug_log "wrRun new data for $tc_root [sct] data=$data"
} }
set dev [getDev $tc_root]
debug_log "wrRun send: *RUN" debug_log "wrRun send: *RUN"
sct send "*RUN" sct send "*RUN"
debug_log "status: busy" debug_log "status: busy"
@@ -169,30 +168,27 @@ debug_log "chkWrite new data for $tc_root [sct] result=\"$data\""
debug_log "ValidateResponse $tc_root failure" debug_log "ValidateResponse $tc_root failure"
} }
if {[string equal -nocase -length 7 $data "ASCERR:"]} { if {[string equal -nocase -length 7 $data "ASCERR:"]} {
set rslt [list 0 "$data" ] set rslt [list 0 "$data" "XX" "XX"]
debug_log "ValidateResponse: $rslt"
return $rslt
} elseif {[string equal -nocase -length 1 $data "?"]} { } elseif {[string equal -nocase -length 1 $data "?"]} {
set rslt [list 0 "$data" ] set rslt [list 0 "$data" "XX" "XX"]
debug_log "ValidateResponse: $rslt" } elseif {![string equal -nocase -length 1 $data "\002"]} {
return $rslt set rslt [list 0 "$data" "XX" "XX"]
} else { } else {
if {[string equal -nocase -length 1 $data "\002"]} { set data [string range $data 1 end]
set data [string range $data 1 end] sct result $data
} set addr [string range $data 0 1]
set addr [string range $data 0 2]
if {[string equal -length 1 $addr "0"]} { if {[string equal -length 1 $addr "0"]} {
set addr [string range $addr 1 end] set addr [string range $addr 1 end]
} }
set stat [string range $data 2 3] set stat [string range $data 2 2]
set data [string range $data 3 end] set data [string range $data 3 end]
if { [hpropexists [sct] geterror] } { if { [hpropexists [sct] geterror] } {
hdelprop [sct] geterror hdelprop [sct] geterror
} }
set rslt [list 1 "$data" "$addr" "$stat"] set rslt [list 1 "$data" "$addr" "$stat"]
debug_log "ValidateResponse: $rslt"
return $rslt
} }
debug_log "ValidateResponse: $rslt"
return $rslt
} }
proc rdRat {tc_root} { proc rdRat {tc_root} {
@@ -556,39 +552,28 @@ debug_log "Registering node $nodeName for write callback"
set scobj_hpath /sics/$tempobj set scobj_hpath /sics/$tempobj
set deviceCommand {\ set deviceCommand {\
Pump0 Run 0 1 1 1 1 text user {} {} {RUN} {wrRun} {}\ Pump Run 0 1 1 1 1 text user {} {} {RUN} {wrRun} {}\
Pump0 Cld 0 1 1 1 0 text user {} {} {CLD} {wrCld} {}\ Pump Cld 0 1 1 1 0 text user {} {} {CLD} {wrCld} {}\
Pump0 Out 0 1 1 1 0 text user {} {} {OUT} {wrOut} {}\ Pump Out 0 1 1 1 0 text user {} {} {OUT} {wrOut} {}\
Pump0 Rat 1 1 1 1 0 text user {RAT} {rdRat} {RAT} {wrRat} {}\ Pump Rat 1 1 1 1 0 text user {RAT} {rdRat} {RAT} {wrRat} {}\
Pump0 Vol 1 1 1 1 0 text user {VOL} {rdVol} {VOL} {wrVol} {}\ Pump Vol 1 1 1 1 0 text user {VOL} {rdVol} {VOL} {wrVol} {}\
Pump0 Dir 1 1 1 1 0 text user {DIR} {rdDir} {DIR} {wrDir} {}\ Pump Dir 1 1 1 1 0 text user {DIR} {rdDir} {DIR} {wrDir} {}\
Pump0 Buz 1 1 1 1 0 text user {BUZ} {rdBuz} {BUZ} {wrBuz} {}\ Pump Buz 1 1 1 1 0 text user {BUZ} {rdBuz} {BUZ} {wrBuz} {}\
Pump0 Dis 1 0 1 1 0 text internal {DIS} {rdDis} {} {} {}\ Pump Dis 1 0 1 1 0 text internal {DIS} {rdDis} {} {} {}\
Pump0 In2 1 0 1 1 0 text internal {IN2} {rdInp} {} {} {}\ Pump In2 1 0 1 1 0 text internal {IN2} {rdInp} {} {} {}\
Pump0 In3 1 0 1 1 0 text internal {IN3} {rdInp} {} {} {}\ Pump In3 1 0 1 1 0 text internal {IN3} {rdInp} {} {} {}\
Pump0 In4 1 0 1 1 0 text internal {IN4} {rdInp} {} {} {}\ Pump In4 1 0 1 1 0 text internal {IN4} {rdInp} {} {} {}\
Pump0 In6 1 0 1 1 0 text internal {IN6} {rdInp} {} {} {}\ Pump In6 1 0 1 1 0 text internal {IN6} {rdInp} {} {} {}\
Pump0 Ver 1 0 1 1 0 text internal {VER} {rdVer} {} {} {}\ Pump Ver 1 0 1 1 0 text internal {VER} {rdVer} {} {} {}\
Pump1 Run 0 1 1 1 1 text user {} {} {RUN} {wrRun} {}\
Pump1 Cld 0 1 1 1 0 text user {} {} {CLD} {wrCld} {}\
Pump1 Out 0 1 1 1 0 text user {} {} {OUT} {wrOut} {}\
Pump1 Rat 1 1 1 1 0 text user {RAT} {rdRat} {RAT} {wrRat} {}\
Pump1 Vol 1 1 1 1 0 text user {VOL} {rdVol} {VOL} {wrVol} {}\
Pump1 Dir 1 1 1 1 0 text user {DIR} {rdDir} {DIR} {wrDir} {}\
Pump1 Buz 1 1 1 1 0 text user {BUZ} {rdBuz} {BUZ} {wrBuz} {}\
Pump1 Dis 1 0 1 1 0 text internal {DIS} {rdDis} {} {} {}\
Pump1 In2 1 0 1 1 0 text internal {IN2} {rdInp} {} {} {}\
Pump1 In3 1 0 1 1 0 text internal {IN3} {rdInp} {} {} {}\
Pump1 In4 1 0 1 1 0 text internal {IN4} {rdInp} {} {} {}\
Pump1 In6 1 0 1 1 0 text internal {IN6} {rdInp} {} {} {}\
Pump1 Ver 1 0 1 1 0 text internal {VER} {rdVer} {} {} {}\
} }
hfactory $scobj_hpath/Pump0 plain spy none set num_pumps 2
hfactory $scobj_hpath/Pump1 plain spy none for {set i 0} { i < $num_pumps } { incr i } {
set cmdGroup "Pump[set i]"
foreach {cmdGroup varName readable writable nexus gumtree drivable dataType permission rdCmd rdFunc wrCmd wrFunc allowedValues} $deviceCommand { hfactory $scobj_hpath/[set cmdGroup] plain spy none
createNode $scobj_hpath $sct_controller $cmdGroup $varName $readable $writable $nexus $gumtree $drivable $dataType $permission $rdCmd $rdFunc $wrCmd $wrFunc $allowedValues $klass foreach {cmdGroup varName readable writable nexus gumtree drivable dataType permission rdCmd rdFunc wrCmd wrFunc allowedValues} $deviceCommand {
createNode $scobj_hpath $sct_controller $cmdGroup $varName $readable $writable $nexus $gumtree $drivable $dataType $permission $rdCmd $rdFunc $wrCmd $wrFunc $allowedValues $klass
}
} }
hfactory $scobj_hpath/status plain spy text hfactory $scobj_hpath/status plain spy text

View File

@@ -733,7 +733,7 @@ proc setValue {tc_root nextState cmd {idx ""}} {
set par [sct target] set par [sct target]
} }
# Talking to a pseudo-node (no equivalent command in the device communication) # Talking to a pseudo-node (no equivalent command in the device communication)
sct send "$cmd$par" sct send "$cmd$par;*IDN?"
} message ]} { } message ]} {
return -code error "in setValue: $message." return -code error "in setValue: $message."
} }
@@ -800,7 +800,7 @@ proc setPoint {tc_root nextState cmd whichCtrlLoop} {
hsetprop $nodename driving 1 hsetprop $nodename driving 1
} }
#puts "setPoint(wrStatus=$wrStatus): sct send $cmd$par" #puts "setPoint(wrStatus=$wrStatus): sct send $cmd$par"
sct send "$cmd$par" sct send "$cmd$par;*IDN?"
} message ]} { } message ]} {
return -code error "in setPoint: $message." return -code error "in setPoint: $message."
} }

View File

@@ -842,7 +842,7 @@ proc setValue {tc_root nextState cmd {idx ""}} {
} }
set ::scobj::ls340::ls340_lastWriteCmd "$cmd$par" set ::scobj::ls340::ls340_lastWriteCmd "$cmd$par"
# Talking to a pseudo-node (no equivalent command in the device communication) # Talking to a pseudo-node (no equivalent command in the device communication)
sct send "$cmd$par" sct send "$cmd$par;*IDN?"
} message ]} { } message ]} {
return -code error "in setValue: $message. While sending command: $::scobj::ls340::ls340_lastWriteCmd" return -code error "in setValue: $message. While sending command: $::scobj::ls340::ls340_lastWriteCmd"
} }
@@ -912,7 +912,7 @@ proc setPoint {tc_root nextState cmd whichCtrlLoop} {
hsetprop $nodename driving 1 hsetprop $nodename driving 1
} }
#puts "setPoint(wrStatus=$wrStatus): sct send $cmd$par" #puts "setPoint(wrStatus=$wrStatus): sct send $cmd$par"
sct send "$cmd$par" sct send "$cmd$par;*IDN?"
} message ]} { } message ]} {
return -code error "in setPoint: $message. Last write command: $::scobj::ls340::ls340_lastWriteCmd" return -code error "in setPoint: $message. Last write command: $::scobj::ls340::ls340_lastWriteCmd"
} }