diff --git a/site_ansto/instrument/pelican/config/beamline/sct_power.tcl b/site_ansto/instrument/pelican/config/beamline/sct_power.tcl index d133ef01..9e1ac479 100644 --- a/site_ansto/instrument/pelican/config/beamline/sct_power.tcl +++ b/site_ansto/instrument/pelican/config/beamline/sct_power.tcl @@ -108,20 +108,22 @@ proc ::scobj::ag1010::setValue {tc_root nextState rdPara wrPara} { broadcast "Error: The Limit for the Forward Power is 0~$ForPowerLimit dW" return idle } else { - set RPL [hval $ns/limits/ReversePower] - set data [format %04x%04x%04x%04x $newPara $RPL 0 0] + # scale W to dW + set FPL [expr int([hval $ns/limits/ForwardPower] * 10)] + set data [format %04x%04x%04x%04x $newPara $FPL 0 0] } } "RPL" { if {$newPara > $RefPowerLimit || $newPara < 0} { broadcast "Error: The Limit for the Reverse Power is 0~$RefPowerLimit dW" return idle } else { - set FPL [hval $ns/limits/ForwardPower] - set data [format %04x%04x%04x%04x $FPL $newPara 0 0] + # scale W to dW + set RPL [expr int([hval $ns/limits/ReversePower] * 10)] + set data [format %04x%04x%04x%04x $RPL $newPara 0 0] } } - "PAGC" { set data [format %04x $newPara] } - "PMGC" { set data [format %04x $newPara] } + "PAGC" { set data [expr [format %04x int($newPara * 10)]] } + "PMGC" { set data [expr [format %04x int($newPara * 10)]] } "FREQ" { if {$newPara<$FreqDownLimit || $newPara>$FreqUpLimit} { broadcast "Error: Freqence shall be set between $FreqDownLimit Hz and $FreqUpLimit Hz" return idle @@ -371,8 +373,7 @@ proc ::scobj::ag1010::rdValue {} { set ns /sics/ag1010 #set ns [sct] if {[ catch { - set curVal [sct result] - set data [string trim $curVal " "] + set data [string trim [sct result] " "] hset $ns/responseMsg "$data" #broadcast "rdValue : $data" @@ -397,16 +398,19 @@ proc ::scobj::ag1010::rdValue {} { set RPLH [string range $data 10 11] set RPLL [string range $data 12 13] - hset $ns/limits/ForwardPower [format %d [expr 0x$FPLH$FPLL]] - hset $ns/limits/ReversePower [format %d [expr 0x$RPLH$RPLL]] + # scale dW to W + hset $ns/limits/ForwardPower [expr [format %d [expr 0x$FPLH$FPLL]]/10.0] + hset $ns/limits/ReversePower [expr [format %d [expr 0x$RPLH$RPLL]]/10.0] } 3 { set AGCPoH [string range $data 6 7] set AGCPoL [string range $data 8 9] - hset $ns/AGC/PAGC [format %d [expr 0x$AGCPoH$AGCPoL]] + # scale dW to W + hset $ns/AGC/PAGC [expr [[format %d [expr 0x$AGCPoH$AGCPoL]]/10.0] } 4 { set MGCPoH [string range $data 6 7] set MGCPoL [string range $data 8 9] - hset $ns/MGC/PMGC [format %d [expr 0x$MGCPoH$MGCPoL]] + #scale by 0.1 + hset $ns/MGC/PMGC [expr [format %d [expr 0x$MGCPoH$MGCPoL]]/10.0] } 5 { set FreqH [string range $data 6 7] set FreqL [string range $data 8 9] @@ -496,15 +500,17 @@ proc ::scobj::ag1010::rdValue {} { } 14 { set FPH [string range $data 6 7] set FPL [string range $data 8 9] - hset $ns/MEAS/ForwardPower [format %d [expr 0x$FPH$FPL]] + # sacle dW to W + hset $ns/MEAS/ForwardPower [expr [format %d [expr 0x$FPH$FPL]]/10.0] + # sacle dW to W set RPH [string range $data 10 11] set RPL [string range $data 12 13] - hset $ns/MEAS/ReversePower [format %d [expr 0x$RPH$RPL]] + hset $ns/MEAS/ReversePower [expr [format %d [expr 0x$RPH$RPL]]/10.0] set TPH [string range $data 18 19] set TPL [string range $data 20 21] - hset $ns/MEAS/Temperature [format %d [expr 0x$TPH$TPL / 26.4]] + hset $ns/MEAS/Temperature [expr [format %d [expr 0x$TPH$TPL]]/ 26.4] } 15 { set MainState [format %d 0x[string range $data 6 7]] switch $MainState { @@ -582,13 +588,8 @@ proc ::scobj::ag1010::rdValue {} { hset $ns/STA/keyState/Key3 "Off" } } - default { return -code error "Unexpected returned values from the device in rdValue()" } - } - if {$curVal != [sct oldval]} { - sct oldval $curVal - sct update $curVal - sct utime readtime - } + default { return -code error "Unexpected returned values from the device in rdValue()" } + } } message ]} { return -code error "Error in rdValue: $message." } @@ -627,9 +628,11 @@ proc createNode {scobj_hpath sct_controller cmdGroup varName readable writable p } hfactory $nodeName plain $permission $dataType switch $dataType { - "int" {hsetprop $nodeName oldval 0} - "float" {hsetprop $nodeName oldval 0.0} - default {hsetprop $nodeName oldval UNKNOWN} + "none" {hset $nodeName none} + "text" {hset $nodeName UNKNOWN} + "int" {hset $nodeName 0} + "float" {hset $nodeName 0.0} + default {hset $nodeName UNKNOWN} } if {$readable == 1} { hsetprop $nodeName read ${ns}::getValue $scobj_hpath $rdFunc $rdPara @@ -718,12 +721,12 @@ proc ::scobj::ag1010::mkAG {argList} { set deviceCommandToplevel { P limits 1 0 1 1 none {} spy {2 18} {rdValue} {} {} - limits ForwardPower 0 0 0 1 int {dW} user {} {} {} {} - limits ReversePower 0 0 0 1 int {dW} user {} {} {} {} + limits ForwardPower 0 0 0 1 float {W} user {} {} {} {} + limits ReversePower 0 0 0 1 float {W} user {} {} {} {} P AGC 1 0 1 1 none {} user {2 19} {rdValue} {} {} - AGC PAGC 0 0 0 1 int {dW} user {} {} {} {} + AGC PAGC 0 0 0 1 float {W} user {} {} {} {} P MGC 1 0 1 1 none {} user {2 20} {rdValue} {} {} - MGC PMGC 0 0 0 1 int {dW} user {} {} {} {} + MGC PMGC 0 0 0 1 float {} user {} {} {} {} P FRE 1 0 1 1 none {} user {2 21} {rdValue} {} {} FRE FREQ 0 0 0 1 int {Hz} user {} {} {} {} P SKEY 1 0 1 1 none {} spy {3 23} {rdValue} {} {} @@ -746,10 +749,10 @@ proc ::scobj::ag1010::mkAG {argList} { SVER SWVersion 0 0 0 1 text {} user {} {} {} {} SVER DeviceVersion 0 0 0 1 text {} user {} {} {} {} P MEAS 1 0 1 1 none {} spy {2 30} {rdValue} {} {} - MEAS ForwardPower 0 0 0 1 int {dW} user {} {} {} {} - MEAS ReversePower 0 0 0 1 int {dW} user {} {} {} {} - MEAS Temperature 0 0 0 1 int {0C} user {} {} {} {} - P STA 1 0 1 1 none {} spy {2 31} {rdValue} {} {} + MEAS ForwardPower 0 0 0 1 float {W} user {} {} {} {} + MEAS ReversePower 0 0 0 1 float {W} user {} {} {} {} + MEAS Temperature 0 0 0 1 float {0C} user {} {} {} {} + P STA 1 0 1 1 none {} spy {2 31} {rdValue} {} {} STA MainState 0 0 0 1 text {} user {} {} {} {} STA State 0 0 0 1 int {} user {} {} {} {} STA/State FstRemote 0 0 0 1 text {} user {} {} {} {} @@ -768,10 +771,10 @@ proc ::scobj::ag1010::mkAG {argList} { P responseMsg 0 0 0 1 text {} spy {2 42} {} {} {} - P SetLimitsFPL 0 1 1 1 int {dW} user {10 2} {rdValue} {FPL} {} - P SetLimitsRPL 0 1 1 1 int {dW} user {10 2} {rdValue} {RPL} {} - P SetPAGC 0 1 1 1 int {dW} user {4 3} {rdValue} {PAGC} {} - P SetPMGC 0 1 1 1 int {dW} user {4 4} {rdValue} {PMGC} {} + P SetLimitsFPL 0 1 1 1 float {W} user {10 2} {rdValue} {FPL} {} + P SetLimitsRPL 0 1 1 1 float {W} user {10 2} {rdValue} {RPL} {} + P SetPAGC 0 1 1 1 float {W} user {4 3} {rdValue} {PAGC} {} + P SetPMGC 0 1 1 1 float {} user {4 4} {rdValue} {PMGC} {} P SetFREQ 0 1 1 1 int {Hz} user {6 5} {rdValue} {FREQ} {} P SetSoftOn 0 1 1 1 int {} user {3 7} {rdValue} {SoftOn} {1,0} P SetKey1 0 1 1 1 int {} user {3 7} {rdValue} {Key1} {1,0} @@ -838,7 +841,7 @@ namespace import ::scobj::ag1010::par proc lf_pagc {{para ""} args} { if {$para == ""} { - broadcast "[hget /instrument/ag1010/AGC/PAGC] dW" + broadcast "[hget /instrument/ag1010/AGC/PAGC] W" } else { set HEAD 0x96 set LEN 4 @@ -848,10 +851,12 @@ proc lf_pagc {{para ""} args} { set ns /instrument/ag1010 set newPara [string trim $para " "] + # scale W to dW + set newPara [expr int($newPara * 10)] set data [format %04x $newPara] set cmd [format %02x%02x%02x%s%02x $HEAD $LEN $CTRL $data $CRC] - broadcast "Set Power Level for AGC mode to $newPara dW" + broadcast "Set Power Level for AGC mode to $newPara W" sct_ag1010 send "$cmd" } } @@ -859,7 +864,7 @@ proc lf_pagc {{para ""} args} { proc lf_pmgc {{para ""} args} { if {$para == ""} { - broadcast "[hget /instrument/ag1010/MGC/PMGC] dW" + broadcast "[hget /instrument/ag1010/MGC/PMGC]%" } else { set HEAD 0x96 set LEN 4 @@ -869,10 +874,12 @@ proc lf_pmgc {{para ""} args} { set ns /instrument/ag1010 set newPara [string trim $para " "] + # scale by 10 + set newPara [expr int($newPara * 10)] set data [format %04x $newPara] set cmd [format %02x%02x%02x%s%02x $HEAD $LEN $CTRL $data $CRC] - broadcast "Set Power Level for MGC mode to $newPara dW" + broadcast "Set Power Level for MGC mode to $newPara%" sct_ag1010 send "$cmd" } } @@ -932,8 +939,8 @@ proc lf_sweep_run {startF stepF scyc {mode 2} args} { proc lf_limits {args} { if {$args == ""} { - broadcast "[hget /instrument/ag1010/limits/ForwardPower] dW" - broadcast "[hget /instrument/ag1010/limits/ReversePower] dW" + broadcast "[hget /instrument/ag1010/limits/ForwardPower] W" + broadcast "[hget /instrument/ag1010/limits/ReversePower] W" } else { set HEAD 0x96 set LEN 10 @@ -945,21 +952,25 @@ proc lf_limits {args} { foreach {arg val} $args { switch $arg { "FPL" { if {$val > 10040 || $val < 0} { - broadcast "Error: The Limit for the Forward Power is 0~10040 dW" + broadcast "Error: The Limit for the Forward Power is 0~10040 W" } else { - set RPL [hval $ns/limits/ReversePower] - set data [format %04x%04x%04x%04x $val $RPL 0 0] + set FPL [hval $ns/limits/ForwardPower] + # scale W to dW + set FPL [expr int($FPL * 10)] + set data [format %04x%04x%04x%04x $val $FPL 0 0] set cmd [format %02x%02x%02x%s%02x $HEAD $LEN $CTRL $data $CRC] - broadcast "Set Forward Power Limits to $val dW" + broadcast "Set Forward Power Limits to $val W" sct_ag1010 send "$cmd" } } "RPL" { if {$val > 1630 || $val < 0} { broadcast "Error: The Limit for the Reflected Power is 0~1630 dW" } else { - set FPL [hval $ns/limits/ForwardPower] - set data [format %04x%04x%04x%04x $FPL $val 0 0] + set RPL [hval $ns/limits/ReversePower] + # scale W to dW + set RPL [expr int($RPL * 10)] + set data [format %04x%04x%04x%04x $RPL $val 0 0] set cmd [format %02x%02x%02x%s%02x $HEAD $LEN $CTRL $data $CRC] broadcast "Set Reverse Power Limits to $val dW" @@ -1075,15 +1086,15 @@ proc lf_sweep {args} { broadcast "Set Step Frequency in Sweep Mode to $val Hz" } - "scyc" { set SCyc $val + "np" { set np $val broadcast "Set Number of Steps in Full Sweep Cycle to $val" } - default { error "ERROR: $arg should be 'mode', 'startF', 'stepF' or 'scyc'" } + default { error "ERROR: $arg should be 'mode', 'startF', 'stepF' or 'np'" } } } - set data [format %02x%02x%02x%02x%02x%02x $SweepMode $SStr $SStp $SCyc $SStrHz $SStpHz] + set data [format %02x%02x%02x%02x%02x%02x $SweepMode $SStr $SStp $np $SStrHz $SStpHz] set cmd [format %02x%02x%02x%s%02x $HEAD $LEN $CTRL $data $CRC] sct_ag1010 send "$cmd" } @@ -1091,8 +1102,8 @@ proc lf_sweep {args} { proc lf_meas {} { - broadcast "[hget /instrument/ag1010/MEAS/ForwardPower] dW" - broadcast "[hget /instrument/ag1010/MEAS/ReversePower] dW" + broadcast "[hget /instrument/ag1010/MEAS/ForwardPower] W" + broadcast "[hget /instrument/ag1010/MEAS/ReversePower] W" broadcast "[hget /instrument/ag1010/MEAS/Temperature] Degree" } @@ -1112,15 +1123,13 @@ publish lf_sweep user # @param turning if the parameter is turnable and can be set from the Gumtree # @internal time internal in polling the nodes - # IP 137.157.202.219 -# Following lines are sued to create the driver -#::scobj::ag1010::mkAG { -# name "ag1010" -# IP 137.157.202.219 -# PORT 4001 -# tuning 1 -# interval 5 -#} +::scobj::ag1010::mkAG { + name "ag1010" + IP 137.157.202.219 + PORT 4001 + tuning 1 + interval 5 +}