Merge branch 'dingo' into merge-replace
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
|
||||
# Required by server_config.tcl
|
||||
VarMake Instrument Text Internal
|
||||
Instrument echidna
|
||||
Instrument bear
|
||||
Instrument lock
|
||||
|
||||
#START SERVER CONFIGURATION SECTION
|
||||
|
||||
@@ -76,6 +76,25 @@ proc ::scan::hmm_scan_collect {sobj uobj point} {
|
||||
clientput "Monitor $bmn [SplitReply [$bmon getcounts]]"
|
||||
}
|
||||
}
|
||||
|
||||
proc ::scan::cm_scan_collect {sobj uobj point} {
|
||||
set vlist [split [$sobj getvarpar 0] = ];
|
||||
|
||||
set w(NP) $point
|
||||
set sv [string trim [lindex [split [lindex $vlist 0] . ] 1]]
|
||||
set header [format "%-4.4s %-9.9s %-14s %-7.7s" NP $sv Counts Time]
|
||||
set varval [SplitReply [$sv]]
|
||||
set counts [SplitReply [::histogram_memory::total_counts]]
|
||||
set time [SplitReply [::histogram_memory::time]]
|
||||
set data [format "%-4d %-9.3f %-14d %-7.2f" $point $varval $counts $time]
|
||||
clientput $header
|
||||
clientput $data
|
||||
for {set bmn 1} {$bmn <= $::counter::isc_numchannels} {incr bmn} {
|
||||
set bmon bm$bmn
|
||||
clientput "Monitor $bmn [SplitReply [$bmon getcounts]]"
|
||||
}
|
||||
}
|
||||
|
||||
proc ::scan::hmscanend_event {} {
|
||||
::scan::runscan_cmd -set feedback status IDLE
|
||||
}
|
||||
@@ -86,6 +105,11 @@ proc ::scan::bmonscanend_event {} {
|
||||
}
|
||||
publish ::scan::bmonscanend_event user
|
||||
|
||||
proc ::scan::cmscanend_event {} {
|
||||
#::scan::iscan_cmd -set feedback status IDLE
|
||||
}
|
||||
publish ::scan::cmscanend_event user
|
||||
|
||||
proc ::scan::ic_initialize {} {
|
||||
if [ catch {
|
||||
variable ic_runscanpar
|
||||
@@ -93,8 +117,9 @@ proc ::scan::ic_initialize {} {
|
||||
|
||||
set ic_hmm_datatype HISTOGRAM_XYT
|
||||
|
||||
MakeScanCommand hmscan bm $::cfPath(scan)/scan_common_1.hdd recover.bin
|
||||
MakeScanCommand bmonscan bm $::cfPath(scan)/scan_common_1.hdd recover.bin
|
||||
#MakeScanCommand hmscan bm $::cfPath(scan)/scan_common_1.hdd recover.bin
|
||||
#MakeScanCommand bmonscan bm $::cfPath(scan)/scan_common_1.hdd recover.bin
|
||||
#MakeScanCommand iscan cm1 $::cfPath(scan)/scan_common_1.hdd recover.bin
|
||||
|
||||
bmonscan configure script
|
||||
bmonscan function writeheader ::scan::donothing
|
||||
@@ -104,7 +129,6 @@ proc ::scan::ic_initialize {} {
|
||||
bmonscan function prepare ::scan::bm_scan_prepare
|
||||
bmonscan function finish ::scan::bm_scan_finish
|
||||
|
||||
|
||||
hmscan configure script
|
||||
hmscan function writeheader ::scan::donothing
|
||||
hmscan function writepoint ::scan::hmm_writepoint
|
||||
@@ -113,6 +137,14 @@ proc ::scan::ic_initialize {} {
|
||||
hmscan function prepare ::scan::hmm_scan_prepare
|
||||
hmscan function finish ::scan::hmm_scan_finish
|
||||
|
||||
#iscan configure script
|
||||
#iscan function writeheader ::scan::donothing
|
||||
#iscan function writepoint ::scan:cm_writepoint
|
||||
#iscan function count ::scan::cm_count
|
||||
#iscan function collect ::scan::cm_scan_collect
|
||||
#iscan function prepare ::scan::cm_scan_prepare
|
||||
#iscan function finish ::scan::cm_scan_finish
|
||||
|
||||
# TODO Use ic_runscanpar to create the ::scan::runscan command and
|
||||
# to validate the "runscan" proc parameters.
|
||||
array set ic_runscanpar [subst {
|
||||
@@ -126,8 +158,9 @@ proc ::scan::ic_initialize {} {
|
||||
savetype text=save,nosave
|
||||
force boolean
|
||||
}]
|
||||
scriptcallback connect hmscan SCANEND ::scan::hmscanend_event
|
||||
scriptcallback connect bmonscan SCANEND ::scan::bmonscanend_event
|
||||
#scriptcallback connect hmscan SCANEND ::scan::hmscanend_event
|
||||
#scriptcallback connect bmonscan SCANEND ::scan::bmonscanend_event
|
||||
scriptcallback connect iscan SCANEND ::scan::cmscanend_event
|
||||
} message ] {
|
||||
if {$::errorCode=="NONE"} {return $message}
|
||||
return -code error $message
|
||||
@@ -327,7 +360,7 @@ proc ::scan::bm_scan_prepare {sobj uobj} {
|
||||
}
|
||||
|
||||
if [catch {
|
||||
#TODO Parameterise varindex in some way
|
||||
#TODO Parameterise varindex in some way
|
||||
set varindex 0;
|
||||
|
||||
set numpoints [SplitReply [$sobj np]]
|
||||
@@ -356,9 +389,87 @@ proc ::scan::bm_scan_prepare {sobj uobj} {
|
||||
} else {
|
||||
return -code error "BMONSCAN ABORTED: Instrument not ready"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
proc ::scan::cm_count {sobj uobj point mode preset} {
|
||||
# send "clear meta" command to the camera server
|
||||
clientput "sending clear meta"
|
||||
set cmd "clear meta\r\n"
|
||||
cm1 send $cmd
|
||||
# send motor position
|
||||
set cmd "set meta"
|
||||
foreach m [sicslist type motor] {
|
||||
append cmd "," "[$m]"
|
||||
}
|
||||
append cmd "\r\n"
|
||||
clientput $cmd
|
||||
cm1 send $cmd
|
||||
}
|
||||
|
||||
proc ::scan::cm_scan_prepare {sobj uobj} {
|
||||
|
||||
variable save_filetype
|
||||
variable check_instrument_ready
|
||||
variable force_scan
|
||||
|
||||
if {$force_scan || $check_instrument_ready && [::plc::inst_ready]} {
|
||||
set force_scan false
|
||||
if [catch {
|
||||
::scan::check_scanvar $sobj $uobj
|
||||
::scan::pre_hmm_scan_prepare
|
||||
}] {
|
||||
return -code error "ISCAN ABORTED: $::errorInfo"
|
||||
}
|
||||
|
||||
# send "shutter auto" command over
|
||||
clientput "shutter auto"
|
||||
shutter auto
|
||||
# send "focusflight off" command over
|
||||
clientput "focuslight off"
|
||||
focuslight off
|
||||
# send "clear meta" command to the camera server
|
||||
clientput "sending clear meta"
|
||||
set cmd "clear meta\r\n"
|
||||
cm1 send $cmd
|
||||
# send motor position
|
||||
set cmd "set meta"
|
||||
foreach m [sicslist type motor] {
|
||||
append cmd "," "[$m]"
|
||||
}
|
||||
append cmd "\r\n"
|
||||
clientput $cmd
|
||||
cm1 send $cmd
|
||||
|
||||
if [catch {
|
||||
#TODO Parameterise varindex in some way
|
||||
set varindex 0;
|
||||
|
||||
set numpoints [SplitReply [$sobj np]]
|
||||
set vlist [split [$sobj getvarpar $varindex] = ]
|
||||
set scanstart [lindex $vlist 1]
|
||||
set scanstep [lindex $vlist 2]
|
||||
#::scan::iscan_cmd -set NP $numpoints
|
||||
#::scan::iscan_cmd -set scan_variable [string trim [lindex [split [lindex $vlist 0] . ] 1]];
|
||||
#::scan::iscan_cmd -set scan_start $scanstart
|
||||
#::scan::iscan_cmd -set scan_increment $scanstep
|
||||
set scanvar_pts [SplitReply [$sobj getvardata $varindex]]
|
||||
|
||||
#::scan::iscan_cmd -set feedback status BUSY
|
||||
clientput "run_mode iscan"
|
||||
run_mode "iscan"
|
||||
|
||||
#::nexus::newfile BEAM_MONITOR $save_filetype
|
||||
stdscan prepare $sobj $uobj;
|
||||
clientput "Scan start: $scanstart, Scan step: $scanstep, Number of points: $numpoints"
|
||||
}] {
|
||||
run_mode "normal"
|
||||
return -code error $::errorInfo
|
||||
}
|
||||
} else {
|
||||
return -code error "ISCAN ABORTED: Instrument not ready"
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Publish ::scan::hmm_count user
|
||||
Publish ::scan::hmm_scan_prepare user
|
||||
@@ -373,6 +484,9 @@ Publish ::scan::bm_scan_collect user
|
||||
Publish ::scan::bm_writepoint user
|
||||
Publish ::scan::bm_count user
|
||||
|
||||
publish ::scan::cm_count user
|
||||
publish ::scan::cm_scan_prepare user
|
||||
|
||||
namespace eval scan {
|
||||
namespace export runscan
|
||||
VarMake ::scan::runscan_reset_position Text internal
|
||||
|
||||
@@ -6,10 +6,62 @@ namespace eval counter {
|
||||
variable isc_monitor_address
|
||||
variable isc_portlist
|
||||
variable isc_beam_monitor_list
|
||||
|
||||
variable isc_cm_address
|
||||
variable isc_cm_port
|
||||
|
||||
proc set_sobj_attributes {} {
|
||||
}
|
||||
}
|
||||
|
||||
proc ::counter::cm_initialize {} {
|
||||
if [ catch {
|
||||
variable isc_cm_address
|
||||
variable isc_cm_port
|
||||
|
||||
set isc_cm_address 137.157.204.193
|
||||
#set isc_cm_address localhost
|
||||
set isc_cm_port 33000
|
||||
|
||||
MakeAsyncQueue cmserver CAMERA $isc_cm_address $isc_cm_port
|
||||
MakeCounter cm1 anstocamera cmserver
|
||||
|
||||
sicslist setatt cm1 privilege internal
|
||||
::utility::macro::getset text cm1_mode {} {
|
||||
return [cm1 getmode]
|
||||
}
|
||||
sicslist setatt cm1_mode klass monitor
|
||||
sicslist setatt cm1_mode long_name mode
|
||||
sicslist setatt cm1_mode mutable false
|
||||
|
||||
::utility::macro::getset float cm1_preset {} {
|
||||
return [cm1 getpreset]
|
||||
}
|
||||
sicslist setatt cm1_preset klass monitor
|
||||
sicslist setatt cm1_preset long_name preset
|
||||
sicslist setatt cm1_preset mutable false
|
||||
|
||||
::utility::macro::getset int cm1_counts {} [subst -nocommands {
|
||||
return "[cm1 getcounts]"
|
||||
}]
|
||||
sicslist setatt cm1_counts klass monitor
|
||||
sicslist setatt cm1_counts long_name cm1_counts
|
||||
sicslist setatt cm1_counts mutable true
|
||||
|
||||
::utility::macro::getset float cm1_time {} [subst -nocommands {
|
||||
return "[cm1 gettime]"
|
||||
}]
|
||||
sicslist setatt cm1_time klass monitor
|
||||
sicslist setatt cm1_time long_name cm1_time
|
||||
sicslist setatt cm1_time mutable true
|
||||
} message ] {
|
||||
if {$::errorCode=="NONE"} {return $message}
|
||||
return -code error $message
|
||||
}
|
||||
}
|
||||
|
||||
publish ::counter::cm_initialize user
|
||||
|
||||
proc ::counter::isc_initialize {} {
|
||||
if [catch {
|
||||
variable isc_numchannels
|
||||
@@ -17,10 +69,14 @@ proc ::counter::isc_initialize {} {
|
||||
variable isc_portlist
|
||||
variable isc_beam_monitor_list {MONITOR_1 MONITOR_2 MONITOR_3}
|
||||
|
||||
set isc_monitor_address "das1-[SplitReply [instrument]]"
|
||||
set isc_portlist [list 33000 33001 33002 33003 33004 33005 33006 33007]
|
||||
set isc_numchannels [llength $isc_beam_monitor_list]
|
||||
::counter::ic_initialize
|
||||
#set isc_monitor_address "das1-[SplitReply [instrument]]"
|
||||
#set isc_portlist [list 33000 33001 33002 33003 33004 33005 33006 33007]
|
||||
#set isc_numchannels [llength $isc_beam_monitor_list]
|
||||
#::counter::ic_initialize
|
||||
|
||||
set isc_cm_address 137.157.204.193
|
||||
set isc_cm_port 33000
|
||||
::counter::cm_initialize
|
||||
} message ] {
|
||||
if {$::errorCode=="NONE"} {return $message}
|
||||
return -code error "$message"
|
||||
|
||||
@@ -17,78 +17,24 @@ set dmc2280_controller2(port) pmc2-$animal
|
||||
set dmc2280_controller3(host) mc3-$animal
|
||||
set dmc2280_controller3(port) pmc3-$animal
|
||||
|
||||
set dmc2280_controller4(host) mc4-$animal
|
||||
set dmc2280_controller4(port) pmc4-$animal
|
||||
#set dmc2280_controller4(host) mc4-$animal
|
||||
#set dmc2280_controller4(port) pmc4-$animal
|
||||
|
||||
if {$sim_mode == "true"} {
|
||||
set motor_driver_type asim
|
||||
} else {
|
||||
set motor_driver_type DMC2280
|
||||
# MakeAsyncQueue mc1 DMC2280 $dmc2280_controller1(host) $dmc2280_controller1(port)
|
||||
# MakeAsyncQueue mc2 DMC2280 $dmc2280_controller2(host) $dmc2280_controller2(port)
|
||||
MakeAsyncQueue mc1 DMC2280 $dmc2280_controller1(host) $dmc2280_controller1(port)
|
||||
MakeAsyncQueue mc2 DMC2280 $dmc2280_controller2(host) $dmc2280_controller2(port)
|
||||
MakeAsyncQueue mc3 DMC2280 $dmc2280_controller3(host) $dmc2280_controller3(port)
|
||||
MakeAsyncQueue mc4 DMC2280 $dmc2280_controller4(host) $dmc2280_controller4(port)
|
||||
# MakeAsyncQueue mc4 DMC2280 $dmc2280_controller4(host) $dmc2280_controller4(port)
|
||||
# MakeAsyncQueue mc6 DMC2280 $dmc2280_controller6(host) $dmc2280_controller6(port)
|
||||
}
|
||||
|
||||
|
||||
#Measured absolute encoder reading at home position
|
||||
set dummy_Home 0
|
||||
|
||||
set ftz_Home 0
|
||||
set ptz_Home 0
|
||||
set pom_Home 0
|
||||
set stth_Home 0
|
||||
set mtth_Home 0
|
||||
|
||||
set sv1_Home 0
|
||||
set sh1_Home 0
|
||||
set sv2_Home 0
|
||||
set sh2_Home 0
|
||||
set gom_Home 0
|
||||
set scor_Home 0
|
||||
|
||||
# AND abs Encoder Reading with FFF to get the lowest 12 bits only
|
||||
#set mra_Home 4286
|
||||
set mra_Home 191
|
||||
#set moma_Home 8386659
|
||||
set moma_Home 2147
|
||||
#set mrb_Home 294
|
||||
set mrb_Home 294
|
||||
#set momb_Home 8386694
|
||||
set momb_Home 2182
|
||||
#set mrc_Home 4558982
|
||||
set mrc_Home 86
|
||||
#set momc_Home 12499198
|
||||
set momc_Home 2302
|
||||
|
||||
set mphi_Home 0
|
||||
set mchi_Home 8383096
|
||||
set mx_Home 8390604
|
||||
set my_Home 8391084
|
||||
set mom_Home 8389414
|
||||
|
||||
set rco_Home 0
|
||||
set rcz_Home 0
|
||||
set bsr_Home 0
|
||||
set gv1_Home 0
|
||||
set gv2_Home 0
|
||||
|
||||
|
||||
# set movecount high to reduce the frequency of
|
||||
# hnotify messages to a reasonable level
|
||||
set move_count 100
|
||||
|
||||
############################
|
||||
# Motor Controller 1
|
||||
# Motor Controller 1
|
||||
# Motor Controller 1
|
||||
############################
|
||||
#
|
||||
|
||||
# Dummy translation motor, useful for testing scans
|
||||
|
||||
#Motor dummy_motor asim [params \
|
||||
set dummy_Home 0
|
||||
Motor dummy_motor asim [params \
|
||||
asyncqueue mc1\
|
||||
host mc1-dingo\
|
||||
port pmc1-dingo\
|
||||
@@ -103,17 +49,53 @@ set move_count 100
|
||||
absEnc 1\
|
||||
absEncHome $dummy_Home\
|
||||
cntsPerX [expr 8192.0/5.0]]
|
||||
#dummy_motor part instrument
|
||||
#dummy_motor long_name dummy_motor
|
||||
#dummy_motor softlowerlim -500
|
||||
#dummy_motor softupperlim 500
|
||||
#dummy_motor home 0
|
||||
dummy_motor part instrument
|
||||
dummy_motor long_name dummy_motor
|
||||
dummy_motor softlowerlim -500
|
||||
dummy_motor softupperlim 500
|
||||
dummy_motor home 0
|
||||
|
||||
# mc1: Polariser & Spin Flipper - Z translation slide
|
||||
# Moto: 100:1 gear, 2mm pitch
|
||||
set ptzStepRate [expr (300000.0/100.0)/2.0]
|
||||
############################
|
||||
# Motor Controller 1
|
||||
# Motor Controller 1
|
||||
# Motor Controller 1
|
||||
############################
|
||||
#
|
||||
|
||||
Motor ptz $motor_driver_type [params \
|
||||
# All motors are at 25000steps/turn if no other specify
|
||||
set motorrate 25000.0
|
||||
|
||||
# mc1: Sample rotation axis
|
||||
# Gearbox 100:1, Gear ratio 356:1
|
||||
set stth_Home 0
|
||||
set stthStepRate [expr $motorrate*100.0*356.0/360.0]
|
||||
Motor stth $motor_driver_type [params \
|
||||
asyncqueue mc1\
|
||||
host mc1-dingo\
|
||||
port pmc1-dingo\
|
||||
axis A\
|
||||
units degree\
|
||||
hardlowerlim 0\
|
||||
hardupperlim 360\
|
||||
maxSpeed [expr 400000.0/300000.0]\
|
||||
maxAccel [expr 150000.0/300000.0]\
|
||||
maxDecel [expr 150000.0/300000.0]\
|
||||
stepsPerX $stthStepRate\
|
||||
absEnc 1\
|
||||
absEncHome $stth_Home\
|
||||
cntsPerX 4096]
|
||||
stth part sample
|
||||
stth long_name stth
|
||||
stth softlowerlim 0
|
||||
stth softupperlim 360
|
||||
stth home 0
|
||||
|
||||
|
||||
# mc1: Sample X-translation sample stage
|
||||
# Gearbox 20:1, pitch 5mm
|
||||
set sx_Home 0
|
||||
set sxStepRate [expr $motorrate*20.0/5.0]
|
||||
Motor sx $motor_driver_type [params \
|
||||
asyncqueue mc1\
|
||||
host mc1-dingo\
|
||||
port pmc1-dingo\
|
||||
@@ -124,22 +106,21 @@ Motor ptz $motor_driver_type [params \
|
||||
maxSpeed [expr 400000.0/300000.0]\
|
||||
maxAccel [expr 150000.0/300000.0]\
|
||||
maxDecel [expr 150000.0/300000.0]\
|
||||
stepsPerX $ptzStepRate\
|
||||
stepsPerX $sxStepRate\
|
||||
absEnc 1\
|
||||
absEncHome $ptz_Home\
|
||||
absEncHome $sx_Home\
|
||||
cntsPerX 4096]
|
||||
ptz part crystal
|
||||
ptz long_name ptz
|
||||
ptz softlowerlim 0
|
||||
ptz softupperlim 500
|
||||
ptz home 0
|
||||
sx part sample
|
||||
sx long_name sx
|
||||
sx softlowerlim -250
|
||||
sx softupperlim 250
|
||||
sx home 0
|
||||
|
||||
#if $use_tiltstage {
|
||||
# mc1: Beryllium / Graphite filter shared - Z translation slide
|
||||
# Moto: 100:1 gear, 2mm pitch
|
||||
set ftzStepRate [expr (300000.0/100.0)/2.0]
|
||||
|
||||
Motor ftz $motor_driver_type [params \
|
||||
# mc1: Sample Y-translation sample stage
|
||||
# Gearbox 20:1, pitch 5mm
|
||||
set sy_Home 0
|
||||
set syStepRate [expr $motorrate*20.0/5.0]
|
||||
Motor sy $motor_driver_type [params \
|
||||
asyncqueue mc1\
|
||||
host mc1-dingo\
|
||||
port pmc1-dingo\
|
||||
@@ -150,87 +131,65 @@ Motor ftz $motor_driver_type [params \
|
||||
maxSpeed [expr 400000.0/300000.0]\
|
||||
maxAccel [expr 150000.0/300000.0]\
|
||||
maxDecel [expr 150000.0/300000.0]\
|
||||
stepsPerX $ftzStepRate\
|
||||
stepsPerX $syStepRate\
|
||||
absEnc 1\
|
||||
absEncHome $ftz_Home\
|
||||
absEncHome $sy_Home\
|
||||
cntsPerX 4096]
|
||||
ftz part crystal
|
||||
ftz long_name ftz
|
||||
ftz softlowerlim 0
|
||||
ftz softupperlim 500
|
||||
ftz home 0
|
||||
sy part sample
|
||||
sy long_name sy
|
||||
sy softlowerlim -250
|
||||
sy softupperlim 250
|
||||
sy home 0
|
||||
|
||||
# mc1: Polariser (& Spin Flipper) - Rotation + - 2 deg about polariser (i.e, The Elbow)
|
||||
set pomSetRate 25000
|
||||
|
||||
Motor pom $motor_driver_type [params \
|
||||
# mc1: Sample Z-translation sample stage
|
||||
# Gearbox 20:1, pitch ?
|
||||
set sz_Home 0
|
||||
set szStepRate ?
|
||||
Motor sz $motor_driver_type [params \
|
||||
asyncqueue mc1\
|
||||
host mc1-dingo\
|
||||
port pmc1-dingo\
|
||||
axis E\
|
||||
units degrees\
|
||||
axis D\
|
||||
units mm\
|
||||
hardlowerlim 0\
|
||||
hardupperlim 2\
|
||||
maxSpeed [expr 250000.0/$pomSetRate]\
|
||||
maxAccel [expr 25000.0/$pomSetRate]\
|
||||
maxDecel [expr 25000.0/$pomSetRate]\
|
||||
stepsPerX $pomSetRate\
|
||||
hardupperlim 500\
|
||||
maxSpeed [expr 400000.0/300000.0]\
|
||||
maxAccel [expr 150000.0/300000.0]\
|
||||
maxDecel [expr 150000.0/300000.0]\
|
||||
stepsPerX $szStepRate\
|
||||
absEnc 1\
|
||||
absEncHome $pom_Home\
|
||||
absEncHome $sz_Home\
|
||||
cntsPerX 4096]
|
||||
pom part crystal
|
||||
pom long_name pom
|
||||
pom softlowerlim 0
|
||||
pom softupperlim 2
|
||||
pom home 0
|
||||
sz part sample
|
||||
sz long_name sz
|
||||
sz softlowerlim -250
|
||||
sz softupperlim 250
|
||||
sz home 0
|
||||
|
||||
# mc1: Sample/Detector Chamber Rotation (Detector)
|
||||
set stthSetRate 25000
|
||||
|
||||
Motor stth $motor_driver_type [params \
|
||||
asyncqueue mc1\
|
||||
host mc1-dingo\
|
||||
port pmc1-dingo\
|
||||
axis F\
|
||||
units degrees\
|
||||
hardlowerlim -125\
|
||||
hardupperlim 8\
|
||||
maxSpeed [expr 150000.0/$stthSetRate]\
|
||||
maxAccel [expr 5000.0/$stthSetRate]\
|
||||
maxDecel [expr 5000.0/$stthSetRate]\
|
||||
stepsPerX $stthSetRate\
|
||||
absEnc 1\
|
||||
absEncHome $stth_Home\
|
||||
cntsPerX 4096]
|
||||
stth part detector
|
||||
stth long_name stth
|
||||
stth softlowerlim -125
|
||||
stth softupperlim 8
|
||||
stth home 0
|
||||
|
||||
# mc1: Instrument Drive System (Main Drive)
|
||||
set mtthSetRate 25000
|
||||
|
||||
Motor mtth $motor_driver_type [params \
|
||||
# mc1: End station Z-translation
|
||||
# Gearbox 5:1, Gear ratio 16:1, pitch 4mm
|
||||
set dz_Home 0
|
||||
set dzStepRate [expr $motorrate*5.0*16.0/4.0]
|
||||
Motor dz $motor_driver_type [params \
|
||||
asyncqueue mc1\
|
||||
host mc1-dingo\
|
||||
port pmc1-dingo\
|
||||
axis G\
|
||||
units mm\
|
||||
hardlowerlim 40\
|
||||
hardupperlim 140\
|
||||
maxSpeed [expr 150000.0/$mtthSetRate]\
|
||||
maxAccel [expr 25000.0/$mtthSetRate]\
|
||||
maxDecel [expr 25000.0/$mtthSetRate]\
|
||||
stepsPerX $mtthSetRate\
|
||||
hardlowerlim 0\
|
||||
hardupperlim 500\
|
||||
maxSpeed [expr 400000.0/300000.0]\
|
||||
maxAccel [expr 150000.0/300000.0]\
|
||||
maxDecel [expr 150000.0/300000.0]\
|
||||
stepsPerX $dzStepRate\
|
||||
absEnc 1\
|
||||
absEncHome $mtth_Home\
|
||||
absEncHome $dz_Home\
|
||||
cntsPerX 4096]
|
||||
mtth part detector
|
||||
mtth long_name mtth
|
||||
mtth softlowerlim 40
|
||||
mtth softupperlim 140
|
||||
mtth home 0
|
||||
dz part sample
|
||||
dz long_name dz
|
||||
dz softlowerlim -125
|
||||
dz softupperlim 125
|
||||
sz home 0
|
||||
|
||||
|
||||
############################
|
||||
@@ -238,478 +197,66 @@ mtth home 0
|
||||
# Motor Controller 2
|
||||
# Motor Controller 2
|
||||
############################
|
||||
#
|
||||
#
|
||||
|
||||
# mc2: Slits Set AB1- (After Beryllium Filter) (2 blades and 1 Motor & Encoder set)
|
||||
set sv1SetRate 25000
|
||||
|
||||
Motor sv1 $motor_driver_type [params \
|
||||
# mc2: Camera translation axis along beam
|
||||
# Gearbox ?, Gear ratio ?,
|
||||
set dy_Home 0
|
||||
set dyStepRate ?
|
||||
Motor dy $motor_driver_type [params \
|
||||
asyncqueue mc2\
|
||||
host mc2-dingo\
|
||||
port pmc2-dingo\
|
||||
axis A\
|
||||
units mm\
|
||||
hardlowerlim -2\
|
||||
hardupperlim 60\
|
||||
maxSpeed [expr 25000.0/$sv1SetRate]\
|
||||
maxAccel [expr 25000.0/$sv1SetRate]\
|
||||
maxDecel [expr 25000.0/$sv1SetRate]\
|
||||
stepsPerX $sv1SetRate\
|
||||
absEnc 1\
|
||||
absEncHome $sv1_Home\
|
||||
cntsPerX 4096]
|
||||
sv1 part aperture
|
||||
sv1 long_name sv1
|
||||
sv1 softlowerlim -2
|
||||
sv1 softupperlim 60
|
||||
sv1 home 0
|
||||
|
||||
# mc2: Slits Set AB2- (After Beryllium Filter) (2 blades and 1 Motor & Encoder set)
|
||||
set sh1SetRate 25000
|
||||
|
||||
Motor sh1 $motor_driver_type [params \
|
||||
asyncqueue mc2\
|
||||
host mc2-dingo\
|
||||
port pmc2-dingo\
|
||||
axis B\
|
||||
units mm\
|
||||
hardlowerlim -2\
|
||||
hardupperlim 50\
|
||||
maxSpeed [expr 25000.0/$sh1SetRate]\
|
||||
maxAccel [expr 25000.0/$sh1SetRate]\
|
||||
maxDecel [expr 25000.0/$sh1SetRate]\
|
||||
stepsPerX $sh1SetRate\
|
||||
absEnc 1\
|
||||
absEncHome $sh1_Home\
|
||||
cntsPerX 4096]
|
||||
sh1 part aperture
|
||||
sh1 long_name sh1
|
||||
sh1 softlowerlim -2
|
||||
sh1 softupperlim 50
|
||||
sh1 home 0
|
||||
|
||||
# mc2: Slits Set AF1- (After Fermi Chopper) (2 blades and 1 Motor & Encoder set)
|
||||
set sv2SetRate 25000
|
||||
|
||||
Motor sv2 $motor_driver_type [params \
|
||||
asyncqueue mc2\
|
||||
host mc2-dingo\
|
||||
port pmc2-dingo\
|
||||
axis C\
|
||||
units mm\
|
||||
hardlowerlim -2\
|
||||
hardupperlim 40\
|
||||
maxSpeed [expr 25000.0/$sv2SetRate]\
|
||||
maxAccel [expr 25000.0/$sv2SetRate]\
|
||||
maxDecel [expr 25000.0/$sv2SetRate]\
|
||||
stepsPerX $sv2SetRate\
|
||||
absEnc 1\
|
||||
absEncHome $sv2_Home\
|
||||
cntsPerX 4096]
|
||||
sv2 part aperture
|
||||
sv2 long_name sv2
|
||||
sv2 softlowerlim -2
|
||||
sv2 softupperlim 40
|
||||
sv2 home 0
|
||||
|
||||
# mc2: Slits Set AF2- (After Fermi Chopper) (2 blades and 1 Motor & Encoder set)
|
||||
set sh2SetRate 25000
|
||||
|
||||
Motor sh2 $motor_driver_type [params \
|
||||
asyncqueue mc2\
|
||||
host mc2-dingo\
|
||||
port pmc2-dingo\
|
||||
axis D\
|
||||
units mm\
|
||||
hardlowerlim -2\
|
||||
hardupperlim 30\
|
||||
maxSpeed [expr 25000.0/$sh2SetRate]\
|
||||
maxAccel [expr 25000.0/$sh2SetRate]\
|
||||
maxDecel [expr 25000.0/$sh2SetRate]\
|
||||
stepsPerX $sh2SetRate\
|
||||
absEnc 1\
|
||||
absEncHome $sh2_Home\
|
||||
cntsPerX 4096]
|
||||
sh2 part aperture
|
||||
sh2 long_name sh2
|
||||
sh2 softlowerlim -2
|
||||
sh2 softupperlim 30
|
||||
sh2 home 0
|
||||
|
||||
# mc2: Graphite filter rotation stage (post 1st slit and post 1st Fermi chopper)
|
||||
set gomSetRate 25000
|
||||
|
||||
Motor gom $motor_driver_type [params \
|
||||
asyncqueue mc2\
|
||||
host mc2-dingo\
|
||||
port pmc2-dingo\
|
||||
axis E\
|
||||
units degrees\
|
||||
hardlowerlim 0\
|
||||
hardupperlim 15\
|
||||
maxSpeed [expr 50000.0/$gomSetRate]\
|
||||
maxAccel [expr 25000.0/$gomSetRate]\
|
||||
maxDecel [expr 25000.0/$gomSetRate]\
|
||||
stepsPerX $gomSetRate\
|
||||
hardupperlim 500\
|
||||
maxSpeed [expr 400000.0/300000.0]\
|
||||
maxAccel [expr 150000.0/300000.0]\
|
||||
maxDecel [expr 150000.0/300000.0]\
|
||||
stepsPerX $dyStepRate\
|
||||
absEnc 1\
|
||||
absEncHome $gom_Home\
|
||||
absEncHome $dy_Home\
|
||||
cntsPerX 4096]
|
||||
gom part sample
|
||||
gom long_name gom
|
||||
gom softlowerlim 0
|
||||
gom softupperlim 15
|
||||
gom home 0
|
||||
|
||||
# mc2: Sample rotation correction - 10 deg rotation
|
||||
set scorSetRate 25000
|
||||
|
||||
Motor scor $motor_driver_type [params \
|
||||
asyncqueue mc2\
|
||||
host mc2-dingo\
|
||||
port pmc2-dingo\
|
||||
axis F\
|
||||
units degrees\
|
||||
hardlowerlim 0\
|
||||
hardupperlim 360\
|
||||
maxSpeed [expr 50000.0/$scorSetRate]\
|
||||
maxAccel [expr 25000.0/$scorSetRate]\
|
||||
maxDecel [expr 25000.0/$scorSetRate]\
|
||||
stepsPerX $scorSetRate\
|
||||
absEnc 1\
|
||||
absEncHome $scor_Home\
|
||||
cntsPerX 4096]
|
||||
scor part sample
|
||||
scor long_name scor
|
||||
scor softlowerlim 0
|
||||
scor softupperlim 360
|
||||
scor home 0
|
||||
dy part instrument
|
||||
dy long_name dy
|
||||
dy softlowerlim 0
|
||||
dy softupperlim 20
|
||||
dy home 0
|
||||
|
||||
############################
|
||||
# Motor Controller 3
|
||||
# Motor Controller 3
|
||||
# Motor Controller 3
|
||||
############################
|
||||
#
|
||||
#
|
||||
|
||||
# ROTATION STAGES 120:1 PLUS GEARBOX 8:1
|
||||
# ROTATION STAGE RESOLVER 360:55
|
||||
|
||||
# FOCUS STAGE GEARBOX 6:1
|
||||
# FOCUS STAGE RESOLVER DIRECT 310 DEG, 3527 COUNTS USABLE RANGE
|
||||
|
||||
# Computes Monochromator step rates (steps per degree) of focusing and Rotation
|
||||
# 1 unit here is 1 degree
|
||||
set monoRotateStepsPerUnit [expr 25000.0*8.0*120.0/360.0]
|
||||
|
||||
# Encode reading at the roation, 1 unit here is 1 degree
|
||||
set MonoRotateCntsPerUnit [expr 4096.0*360.0/55.0/360.0]
|
||||
|
||||
# Setup Focus range as min = 0 and max = 1, working range = 0 to 1 (310 degrees)
|
||||
# or, 0 for full focus and 1 for non focus
|
||||
# Focusing rate 25000 steps * 6:1 gears = 150000, 1 unit here is 310 degrees
|
||||
set monoFocusStepsPerUnit [expr -25000.0*6.0*310.0/360.0]
|
||||
|
||||
# Encode reading at Focusing stage, 1 unit here is 310 degrees
|
||||
set monoFocusCntsPerUnit [expr 4096.0*310.0/360.0]
|
||||
|
||||
# Max speed for Focusing , -- currently set as 0.083
|
||||
# speed unit here is 310 degrees
|
||||
set monoFocusSpeed 0.05
|
||||
set monoFocusMaxSpeed 0.083
|
||||
|
||||
# Precision setting turn/move, or 310*turn/move (degrees)
|
||||
set monoFocusprecision 0.001
|
||||
|
||||
# mc3: Monochromator Focusing 1 - Focus
|
||||
Motor mra $motor_driver_type [params \
|
||||
# mc3: Selector Wheel Rotation Axis (attenuator)
|
||||
# Gearbox 50:1, Gear ratio 119:14
|
||||
set at_Home 0
|
||||
set atStepRate [expr $motorrate*50.0*119.0/14.0/360.0]
|
||||
Motor at $motor_driver_type [params \
|
||||
asyncqueue mc3\
|
||||
host mc3-dingo\
|
||||
port pmc3-dingo\
|
||||
axis A\
|
||||
units degrees\
|
||||
hardlowerlim 0\
|
||||
hardupperlim 1\
|
||||
precision $monoFocusprecision\
|
||||
maxSpeed $monoFocusMaxSpeed\
|
||||
maxAccel [expr 25000.0/25000.0]\
|
||||
maxDecel [expr 25000.0/25000.0]\
|
||||
stepsPerX $monoFocusStepsPerUnit\
|
||||
absEnc 1\
|
||||
absEncHome $mra_Home\
|
||||
bias_bits 12\
|
||||
cntsPerX $monoFocusCntsPerUnit]
|
||||
mra speed $monoFocusSpeed
|
||||
mra accel $monoFocusSpeed
|
||||
mra decel $monoFocusSpeed
|
||||
mra part crystal
|
||||
mra long_name mra
|
||||
mra softlowerlim 0
|
||||
mra softupperlim 1
|
||||
mra home 0
|
||||
# fix the motor
|
||||
mra fixed -1
|
||||
|
||||
# mc3: Monochromator Focusing 1 - Rotation
|
||||
Motor moma $motor_driver_type [params \
|
||||
asyncqueue mc3\
|
||||
host mc3-dingo\
|
||||
port pmc3-dingo\
|
||||
axis B\
|
||||
units degrees\
|
||||
hardlowerlim -72.003174\
|
||||
hardupperlim -20.0379\
|
||||
maxSpeed 0.5\
|
||||
maxAccel 0.5\
|
||||
maxDecel 0.5\
|
||||
stepsPerX $monoRotateStepsPerUnit\
|
||||
absEnc 1\
|
||||
absEncHome $moma_Home\
|
||||
bias_bits 12\
|
||||
cntsPerX $MonoRotateCntsPerUnit]
|
||||
moma part crystal
|
||||
moma long_name moma
|
||||
moma softlowerlim -70
|
||||
moma softupperlim -20.537842
|
||||
moma home -45
|
||||
|
||||
# mc3: Monochromator Focusing 2 - Focus
|
||||
Motor mrb $motor_driver_type [params \
|
||||
asyncqueue mc3\
|
||||
host mc3-dingo\
|
||||
port pmc3-dingo\
|
||||
axis C\
|
||||
units degrees\
|
||||
hardlowerlim 0\
|
||||
hardupperlim 1\
|
||||
precision $monoFocusprecision\
|
||||
maxSpeed $monoFocusMaxSpeed\
|
||||
maxAccel [expr 25000.0/25000.0]\
|
||||
maxDecel [expr 25000.0/25000.0]\
|
||||
stepsPerX $monoFocusStepsPerUnit\
|
||||
absEnc 1\
|
||||
absEncHome $mrb_Home\
|
||||
bias_bits 12\
|
||||
cntsPerX $monoFocusCntsPerUnit]
|
||||
mrb speed $monoFocusSpeed
|
||||
mrb accel $monoFocusSpeed
|
||||
mrb decel $monoFocusSpeed
|
||||
mrb part crystal
|
||||
mrb long_name mrb
|
||||
mrb softlowerlim 0
|
||||
mrb softupperlim 1
|
||||
mrb home 0
|
||||
# fix the motor
|
||||
mrb fixed -1
|
||||
|
||||
# mc3: Monochromator Focusing 2 - Rotation
|
||||
Motor momb $motor_driver_type [params \
|
||||
asyncqueue mc3\
|
||||
host mc3-dingo\
|
||||
port pmc3-dingo\
|
||||
axis D\
|
||||
units degree\
|
||||
hardlowerlim -72.003174\
|
||||
hardupperlim -20.198975\
|
||||
maxSpeed 0.5\
|
||||
maxAccel 0.5\
|
||||
maxDecel 0.5\
|
||||
stepsPerX $monoRotateStepsPerUnit\
|
||||
absEnc 1\
|
||||
absEncHome $momb_Home\
|
||||
bias_bits 12\
|
||||
cntsPerX $MonoRotateCntsPerUnit]
|
||||
momb part crystal
|
||||
momb long_name momb
|
||||
momb softlowerlim -70
|
||||
momb softupperlim -20.698975
|
||||
momb home -45
|
||||
|
||||
# mc3: Monochromator Focusing 3 - Focus
|
||||
Motor mrc $motor_driver_type [params \
|
||||
asyncqueue mc3\
|
||||
host mc3-dingo\
|
||||
port pmc3-dingo\
|
||||
axis E\
|
||||
units degrees\
|
||||
hardlowerlim 0\
|
||||
hardupperlim 1\
|
||||
precision $monoFocusprecision\
|
||||
maxSpeed $monoFocusMaxSpeed\
|
||||
maxAccel [expr 25000.0/25000.0]\
|
||||
maxDecel [expr 25000.0/25000.0]\
|
||||
stepsPerX $monoFocusStepsPerUnit\
|
||||
hardupperlim 500\
|
||||
maxSpeed [expr 400000.0/300000.0]\
|
||||
maxAccel [expr 150000.0/300000.0]\
|
||||
maxDecel [expr 150000.0/300000.0]\
|
||||
stepsPerX $atStepRate\
|
||||
absEnc 1\
|
||||
absEncHome $mrc_Home\
|
||||
bias_bits 12\
|
||||
cntsPerX $monoFocusCntsPerUnit]
|
||||
mrc speed $monoFocusSpeed
|
||||
mrc accel $monoFocusSpeed
|
||||
mrc decel $monoFocusSpeed
|
||||
mrc part crystal
|
||||
mrc long_name mrc
|
||||
mrc softlowerlim 0
|
||||
mrc softupperlim 1
|
||||
mrc home 0
|
||||
# fix the motor
|
||||
mrc fixed -1
|
||||
|
||||
# mc3: Monochromator Focusing 3 - Rotation
|
||||
Motor momc $motor_driver_type [params \
|
||||
asyncqueue mc3\
|
||||
host mc3-dingo\
|
||||
port pmc3-dingo\
|
||||
axis F\
|
||||
units degree\
|
||||
hardlowerlim -72.003174\
|
||||
hardupperlim -21.246338\
|
||||
maxSpeed 0.5\
|
||||
maxAccel 0.5\
|
||||
maxDecel 0.5\
|
||||
stepsPerX $monoRotateStepsPerUnit\
|
||||
absEnc 1\
|
||||
absEncHome $momc_Home\
|
||||
bias_bits 12\
|
||||
cntsPerX $MonoRotateCntsPerUnit]
|
||||
momc part crystal
|
||||
momc long_name momc
|
||||
momc softlowerlim -70
|
||||
momc softupperlim -21.746338
|
||||
momc home -45
|
||||
|
||||
|
||||
############################
|
||||
# Motor Controller 4
|
||||
# Motor Controller 4
|
||||
# Motor Controller 4
|
||||
############################
|
||||
#
|
||||
|
||||
# mc4: Monochromator crystal stages tilt stage - G270
|
||||
set mphiSetRate 25000
|
||||
|
||||
Motor mphi $motor_driver_type [params \
|
||||
asyncqueue mc4\
|
||||
host mc4-dingo\
|
||||
port pmc4-dingo\
|
||||
axis A\
|
||||
units degrees\
|
||||
hardlowerlim -5\
|
||||
hardupperlim 5\
|
||||
maxSpeed [expr 50000.0/25000.0]\
|
||||
maxAccel [expr 12500.0/25000.0]\
|
||||
maxDecel [expr 12500.0/25000.0]\
|
||||
stepsPerX $mphiSetRate\
|
||||
absEnc 1\
|
||||
absEncHome $mphi_Home\
|
||||
absEncHome $at_Home\
|
||||
cntsPerX 4096]
|
||||
mphi part crystal
|
||||
mphi long_name mphi
|
||||
mphi softlowerlim -5
|
||||
mphi softupperlim 5
|
||||
mphi home 0
|
||||
|
||||
# mc4: Monochromator crystal stages tilt stage - G350
|
||||
set mchiSetRate 25000
|
||||
|
||||
Motor mchi $motor_driver_type [params \
|
||||
asyncqueue mc4\
|
||||
host mc4-dingo\
|
||||
port pmc4-dingo\
|
||||
axis B\
|
||||
units degrees\
|
||||
hardlowerlim -5\
|
||||
hardupperlim 5\
|
||||
maxSpeed [expr 50000.0/25000.0]\
|
||||
maxAccel [expr 12500.0/25000.0]\
|
||||
maxDecel [expr 12500.0/25000.0]\
|
||||
stepsPerX $mchiSetRate\
|
||||
absEnc 1\
|
||||
absEncHome $mchi_Home\
|
||||
cntsPerX 4096]
|
||||
mchi part crystal
|
||||
mchi long_name mchi
|
||||
mchi softlowerlim -5
|
||||
mchi softupperlim 5
|
||||
mchi home 0
|
||||
mchi speed 0.2
|
||||
mchi accel 0.1
|
||||
mchi decel 0.1
|
||||
|
||||
# mc4: Monochromator crystal stages Linear stage X - T250
|
||||
set mxSetRate 25000
|
||||
|
||||
Motor mx $motor_driver_type [params \
|
||||
asyncqueue mc4\
|
||||
host mc4-dingo\
|
||||
port pmc4-dingo\
|
||||
axis C\
|
||||
units mm\
|
||||
hardlowerlim -20\
|
||||
hardupperlim 20\
|
||||
maxSpeed [expr 50000.0/25000.0]\
|
||||
maxAccel [expr 12500.0/25000.0]\
|
||||
maxDecel [expr 12500.0/25000.0]\
|
||||
stepsPerX $mxSetRate\
|
||||
absEnc 1\
|
||||
absEncHome $mx_Home\
|
||||
cntsPerX 4096]
|
||||
mx part crystal
|
||||
mx long_name mx
|
||||
mx softlowerlim -20
|
||||
mx softupperlim 20
|
||||
mx home 0
|
||||
mx speed 1.0
|
||||
|
||||
# mc4: Monochromator crystal stages Linear stage Y - T250
|
||||
set mySetRate 25000
|
||||
|
||||
Motor my $motor_driver_type [params \
|
||||
asyncqueue mc4\
|
||||
host mc4-dingo\
|
||||
port pmc4-dingo\
|
||||
axis D\
|
||||
units mm\
|
||||
hardlowerlim -20\
|
||||
hardupperlim 20\
|
||||
maxSpeed [expr 50000.0/25000.0]\
|
||||
maxAccel [expr 12500.0/25000.0]\
|
||||
maxDecel [expr 12500.0/25000.0]\
|
||||
stepsPerX $mySetRate\
|
||||
absEnc 1\
|
||||
absEncHome $my_Home\
|
||||
cntsPerX 4096]
|
||||
my part crystal
|
||||
my long_name my
|
||||
my softlowerlim -10
|
||||
my softupperlim 10
|
||||
my home 0
|
||||
my speed 1.0
|
||||
|
||||
# mc4: Monochromator crystal stages Rotation stage - R275
|
||||
set momSetRate 25000
|
||||
|
||||
Motor mom $motor_driver_type [params \
|
||||
asyncqueue mc4\
|
||||
host mc4-dingo\
|
||||
port pmc4-dingo\
|
||||
axis E\
|
||||
units degrees\
|
||||
hardlowerlim -15\
|
||||
hardupperlim 15\
|
||||
maxSpeed [expr 50000.0/25000.0]\
|
||||
maxAccel [expr 12500.0/25000.0]\
|
||||
maxDecel [expr 12500.0/25000.0]\
|
||||
stepsPerX $momSetRate\
|
||||
absEnc 1\
|
||||
absEncHome $mom_Home\
|
||||
cntsPerX 4096]
|
||||
mom speed 0.5
|
||||
mom part crystal
|
||||
mom long_name mom
|
||||
mom softlowerlim -15
|
||||
mom softupperlim 15
|
||||
mom home 0
|
||||
at part sample
|
||||
at long_name at
|
||||
at softlowerlim 0
|
||||
at softupperlim 20
|
||||
|
||||
proc motor_set_sobj_attributes {} {
|
||||
}
|
||||
|
||||
# End of configuration file
|
||||
|
||||
|
||||
@@ -1,8 +1,21 @@
|
||||
set sim_mode [SplitReply [plc_simulation]]
|
||||
if {$sim_mode == "false"} {
|
||||
# MakeAsyncQueue plc_chan SafetyPLC 137.157.204.79 31001
|
||||
# MakeSafetyPLC plc plc_chan 0
|
||||
#if {$sim_mode == "false"} {
|
||||
MakeAsyncQueue plc_chan SafetyPLC 137.157.204.213 30000
|
||||
MakeSafetyPLC plc plc_chan 0
|
||||
#}
|
||||
|
||||
proc shutter {args} {
|
||||
set cmd "set shutter=$args\r\n"
|
||||
plc_chan send $cmd
|
||||
}
|
||||
|
||||
proc focuslight {args} {
|
||||
set cmd "set focuslight=$args\r\n"
|
||||
plc_chan send $cmd
|
||||
}
|
||||
|
||||
publish shutter user
|
||||
publish focuslight user
|
||||
|
||||
source $cfPath(plc)/plc_common_1.tcl
|
||||
|
||||
|
||||
@@ -3,4 +3,23 @@ proc ::scan::pre_hmm_scan_prepare {} {}
|
||||
|
||||
proc ::scan::isc_initialize {} {
|
||||
::scan::ic_initialize
|
||||
|
||||
foreach {n v} {
|
||||
clock 1
|
||||
bin 1
|
||||
size 2048
|
||||
gain 1
|
||||
flip 0
|
||||
xstart 1
|
||||
ystart 1
|
||||
xend 2048
|
||||
yend 2048
|
||||
exposure 0.777
|
||||
temperature -50
|
||||
threshold 800
|
||||
shutteropentime 100
|
||||
shutterclosetime 200
|
||||
} {
|
||||
cm1 setpar $n 0 $v
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,15 +15,36 @@ MakeDrive
|
||||
########################################
|
||||
# INSTRUMENT SPECIFIC CONFIGURATION
|
||||
|
||||
Motor dummy_motor asim [params \
|
||||
asyncqueue mc1\
|
||||
host mc1-dingo\
|
||||
port pmc1-dingo\
|
||||
axis A\
|
||||
units mm\
|
||||
hardlowerlim -500\
|
||||
hardupperlim 500\
|
||||
maxSpeed 1\
|
||||
maxAccel 5\
|
||||
maxDecel 5\
|
||||
stepsPerX [expr 25000.0/5.0]\
|
||||
absEnc 1\
|
||||
absEncHome 0\
|
||||
cntsPerX [expr 8192.0/5.0]]
|
||||
dummy_motor part instrument
|
||||
dummy_motor long_name dummy_motor
|
||||
dummy_motor softlowerlim -500
|
||||
dummy_motor softupperlim 500
|
||||
dummy_motor home 0
|
||||
|
||||
source $cfPath(hipadaba)/hipadaba_configuration.tcl
|
||||
|
||||
fileeval $cfPath(source)/source.tcl
|
||||
fileeval $cfPath(motors)/motor_configuration.tcl
|
||||
fileeval $cfPath(motors)/positmotor_configuration.tcl
|
||||
#fileeval $cfPath(motors)/motor_configuration.tcl
|
||||
#fileeval $cfPath(motors)/positmotor_configuration.tcl
|
||||
#fileeval $cfPath(motors)/extraconfig.tcl
|
||||
fileeval $cfPath(plc)/plc.tcl
|
||||
fileeval $cfPath(counter)/counter.tcl
|
||||
fileeval $cfPath(hmm)/hmm_configuration.tcl
|
||||
#fileeval $cfPath(hmm)/hmm_configuration.tcl
|
||||
fileeval $cfPath(nexus)/nxscripts.tcl
|
||||
fileeval $cfPath(scan)/scan.tcl
|
||||
fileeval $cfPath(commands)/commands.tcl
|
||||
@@ -31,8 +52,8 @@ fileeval $cfPath(anticollider)/anticollider.tcl
|
||||
|
||||
source gumxml.tcl
|
||||
|
||||
::utility::mkVar ::anticollider::protect_detector text manager protect_detector false detector true false
|
||||
::anticollider::protect_detector "true"
|
||||
#::utility::mkVar ::anticollider::protect_detector text manager protect_detector false detector true false
|
||||
#::anticollider::protect_detector "true"
|
||||
|
||||
# fix all motors
|
||||
foreach m [sicslist type motor] {
|
||||
@@ -45,6 +66,9 @@ foreach m [sicslist type motor] {
|
||||
}
|
||||
|
||||
server_init
|
||||
|
||||
clientput "serverport [get_portnum $::serverport]"
|
||||
|
||||
###########################################
|
||||
# WARNING: Do not add any code below server_init, if you do SICS may fail to initialise properly.
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
fileeval $cfPath(beamline)/sct_hv.tcl
|
||||
|
||||
::scobj::hv::mkHV {
|
||||
name "hv"
|
||||
IP localhost
|
||||
PORT 55010
|
||||
tuning 1
|
||||
interval 3
|
||||
}
|
||||
|
||||
@@ -1,193 +0,0 @@
|
||||
###########################################################################################################################
|
||||
# @file Proptocols between SICS and High Voltage Controller
|
||||
#
|
||||
# This is a driver for SICS to make following communication with the High Voltage Controller
|
||||
#
|
||||
#
|
||||
# 1. SICS uses TCP/IP protocol to interact with the HV component who shall provide an IP address
|
||||
# together with an port number.
|
||||
#
|
||||
# 2. Commands From SICS to HV component,
|
||||
# 1. HV_START hv1=xxx, i1=xxx, hv2=xxx, i2=xxx
|
||||
# :: Responses from HV component back to SICS are either
|
||||
# OK (if the system start correctly), or
|
||||
# Error Message (if the system does not start normally, the error message shall indicate
|
||||
# type of the errors)
|
||||
#
|
||||
# 2. HV_STOP (This will stop/shutdown the HV component totally)
|
||||
#
|
||||
# 3. HV_RESET (This will reset the HV component using the hv/i values specified in the Gumtree client GUI)
|
||||
# :: Responses from HV component back to SICS are either
|
||||
# OK (if the system start correctly), or
|
||||
# Error Message (if the system does not start normally, the error message will indicate type of the errors)
|
||||
#
|
||||
# 4. HV_STATUS (This command will send to HV component automatically and regularly, i.e. every 1 sec)
|
||||
# :: Responses from HV component back to SICS is "hv1=xxx, i1=xxx, hv2=xxx, i2=xxx, system=rampingup;\n",
|
||||
# SICS uses this information to update their values in the SICS system and on the Gumtree client as well.
|
||||
#
|
||||
# 3. HV parameters to be dsiaplyed on the Gumtree GUI are, hv1, i1, hv2, i2, system
|
||||
#
|
||||
# Author: Jing Chen (jgn@ansto.gov.au) July 2011
|
||||
#
|
||||
# The HV Controller can be installed with the following command,
|
||||
# ::scobj::hv::mkHV {
|
||||
# name "hv"
|
||||
# IP localhost
|
||||
# PORT 55010
|
||||
# tuning 1
|
||||
# interval 1
|
||||
#
|
||||
##############################################################################################################################
|
||||
|
||||
|
||||
namespace eval ::scobj::hv {
|
||||
}
|
||||
|
||||
proc ::scobj::hv:setting {par} {
|
||||
|
||||
set newPara [sct target]
|
||||
|
||||
if{[sct oldStatus] != $newPara} {
|
||||
set oldStatus $newPara
|
||||
switch $par {
|
||||
"hv1" {set comm "hv_set hv1 $newPara"}
|
||||
"hv2" {set comm "hv_set hv2 $newPara"}
|
||||
"i1" {set comm "hv_set i1 $newPara"}
|
||||
"i2" {set comm "hv_set i2 $newPara"}
|
||||
default {error "ERROR: illegal parameters, try "hv1","hv2","i1" or "i2""
|
||||
return idle}
|
||||
}
|
||||
|
||||
sct send $comm
|
||||
return checkReply
|
||||
} else {
|
||||
return idle
|
||||
}
|
||||
}
|
||||
|
||||
proc ::scobj::hv::checkReplyFunc {basePath} {
|
||||
set replyStr [sct result]
|
||||
#analysis the reply from the HV Device
|
||||
if {[string first "Error" $replyStr] != -1} {
|
||||
broadcast "ERROR command, check again!!"
|
||||
}
|
||||
hset $basePath/msg $replyStr
|
||||
return idle
|
||||
}
|
||||
|
||||
##
|
||||
|
||||
# @brief send "hv_get" command to the HV device and obtain the latest values of those parameters
|
||||
proc ::scobj::hv::getParaFunc {} {
|
||||
set comm "hv_get"
|
||||
sct send $comm
|
||||
return rdParaState
|
||||
}
|
||||
|
||||
##
|
||||
# @brief Read and record the parameters' values from the HV device
|
||||
proc ::scobj::hv::rdParaStateFunc {basePath} {
|
||||
set replyStr [sct result]
|
||||
#broadcast "Reply from hv_get: $replyStr"
|
||||
|
||||
if {[string first "Error" $replyStr] != -1} {
|
||||
broadcast "ERROR: cannot get the current parameters setting from the HV device, check again!"
|
||||
} elseif {$replyStr != [sct oldval]} {
|
||||
sct oldval $replyStr
|
||||
broadcast "oldval = [sct oldval]"
|
||||
set s1 [string trimright $replyStr "\n"]
|
||||
set s2 [split $s1 "=;"]
|
||||
|
||||
array set paraArr $s2
|
||||
|
||||
hset $basePath/hv1 $paraArr(hv1)
|
||||
hset $basePath/i1 $paraArr(i1)
|
||||
hset $basePath/hv2 $paraArr(hv2)
|
||||
hset $basePath/i2 $paraArr(i2)
|
||||
|
||||
#broadcast "HV1:$paraArr(hv1); I1:$paraArr(i1); HV2:$paraArr(hv2); I2:$paraArr(i2)\n"
|
||||
|
||||
sct utime readtime
|
||||
}
|
||||
|
||||
return idle
|
||||
}
|
||||
|
||||
|
||||
##
|
||||
# @brief Make a HV Controller
|
||||
#
|
||||
# @param argList, {name "hv" IP localhost PORT 65123 tuning 1 interval 1}
|
||||
#
|
||||
# name: name of hv controller object
|
||||
# IP: IP address of RF generator moxa box
|
||||
# PORT: Port number assigned to the generator on the moxa-box
|
||||
# tuning: boolean, set tuning=1 to allow instrument scientists to set the axe positions
|
||||
# interval: polling and ramping interval in seconds.
|
||||
|
||||
proc ::scobj::hv::mkHV {argList} {
|
||||
# Generate parameter array from the argument list
|
||||
foreach {k v} $argList {
|
||||
set KEY [string toupper $k]
|
||||
set pa($KEY) $v
|
||||
}
|
||||
|
||||
MakeSICSObj $pa(NAME) SCT_OBJECT
|
||||
sicslist setatt $pa(NAME) klass instrument
|
||||
sicslist setatt $pa(NAME) long_name $pa(NAME)
|
||||
hsetprop /sics/$pa(NAME) status "IDLE"
|
||||
|
||||
hfactory /sics/$pa(NAME)/hv1 plain user int
|
||||
hfactory /sics/$pa(NAME)/hv2 plain user int
|
||||
hfactory /sics/$pa(NAME)/i1 plain user int
|
||||
hfactory /sics/$pa(NAME)/i2 plain user int
|
||||
hfactory /sics/$pa(NAME)/msg plain user text
|
||||
|
||||
#makesctcontroller sct_hv rfamp $pa(IP):$pa(PORT)
|
||||
makesctcontroller sct_hv std $pa(IP):$pa(PORT)
|
||||
|
||||
hfactory /sics/$pa(NAME)/status plain user text
|
||||
hsetprop /sics/$pa(NAME)/status read ::scobj::hv::getParaFunc
|
||||
hsetprop /sics/$pa(NAME)/status rdParaState ::scobj::hv::rdParaStateFunc /sics/$pa(NAME)
|
||||
hsetprop /sics/$pa(NAME)/status oldval UNKNOWN
|
||||
hset /sics/$pa(NAME)/status idle
|
||||
|
||||
hsetprop /sics/$pa(NAME)/status tuning $pa(TUNING)
|
||||
|
||||
# Initialise properties required for generating the API for GumTree and to save data
|
||||
::scobj::hinitprops $pa(NAME) hv1 i1 hv2 i2 msg
|
||||
|
||||
sct_hv poll /sics/$pa(NAME)/status $pa(INTERVAL)
|
||||
|
||||
if {$pa(TUNING)} {
|
||||
hfactory /sics/$pa(NAME)/set_hv1 plain user int
|
||||
hfactory /sics/$pa(NAME)/set_hv2 plain user int
|
||||
hfactory /sics/$pa(NAME)/set_i1 plain user int
|
||||
hfactory /sics/$pa(NAME)/set_i2 plain user int
|
||||
|
||||
::scobj::hinitprops $pa(NAME) status set_hv1 set_hv2 set_i1 set_i2
|
||||
|
||||
hsetprop /sics/$pa(NAME)/set_hv1 write ::scobj::hv:setting "hv1"
|
||||
hsetprop /sics/$pa(NAME)/set_hv1 checkReply ::scobj::hv::checkReplyFunc /sics/$pa(NAME)
|
||||
hsetprop /sics/$pa(NAME)/set_hv1 oldStatus UNKNOWN
|
||||
|
||||
hsetprop /sics/$pa(NAME)/set_hv2 write ::scobj::hv:setting "hv2"
|
||||
hsetprop /sics/$pa(NAME)/set_hv2 checkReply ::scobj::hv::checkReplyFunc /sics/$pa(NAME)
|
||||
hsetprop /sics/$pa(NAME)/set_hv2 oldStatus UNKNOWN
|
||||
|
||||
hsetprop /sics/$pa(NAME)/set_i1 write ::scobj::hv:setting "i1"
|
||||
hsetprop /sics/$pa(NAME)/set_i1 checkReply ::scobj::hv::checkReplyFunc /sics/$pa(NAME)
|
||||
hsetprop /sics/$pa(NAME)/set_i1 oldStatus UNKNOWN
|
||||
|
||||
hsetprop /sics/$pa(NAME)/set_i2 write ::scobj::hv:setting "i2"
|
||||
hsetprop /sics/$pa(NAME)/set_i2 checkReply ::scobj::hv::checkReplyFunc /sics/$pa(NAME)
|
||||
hsetprop /sics/$pa(NAME)/set_i2 oldStatus UNKNOWN
|
||||
|
||||
sct_hv write /sics/$pa(NAME)/set_hv1 $pa(INTERVAL)
|
||||
sct_hv write /sics/$pa(NAME)/set_hv2 $pa(INTERVAL)
|
||||
sct_hv write /sics/$pa(NAME)/set_i1 $pa(INTERVAL)
|
||||
sct_hv write /sics/$pa(NAME)/set_i2 $pa(INTERVAL)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -29,7 +29,6 @@ fileeval $cfPath(scan)/scan.tcl
|
||||
fileeval $cfPath(commands)/commands.tcl
|
||||
fileeval $cfPath(commands)/monodrive.tcl
|
||||
fileeval $cfPath(anticollider)/anticollider.tcl
|
||||
fileeval $cfPath(beamline)/hv_control.tcl
|
||||
|
||||
source gumxml.tcl
|
||||
|
||||
|
||||
Reference in New Issue
Block a user