267 lines
7.2 KiB
Tcl
267 lines
7.2 KiB
Tcl
# SICS common configuration
|
|
|
|
# Author: Ferdi Franceschini (ffr@ansto.gov.au)
|
|
|
|
#set sicsroot /usr/local/sics
|
|
VarMake opal_simulation Text internal
|
|
opal_simulation true
|
|
|
|
VarMake detector_simulation Text internal
|
|
detector_simulation false
|
|
|
|
VarMake hmm_simulation Text internal
|
|
hmm_simulation false
|
|
|
|
VarMake environment_simulation Text internal
|
|
environment_simulation false
|
|
|
|
VarMake counter_simulation Text internal
|
|
counter_simulation false
|
|
|
|
VarMake motor_simulation Text internal
|
|
motor_simulation false
|
|
|
|
VarMake chopper_simulation Text internal
|
|
chopper_simulation false
|
|
|
|
VarMake velsel_simulation Text internal
|
|
velsel_simulation false
|
|
|
|
VarMake plc_simulation Text internal
|
|
plc_simulation false
|
|
|
|
VarMake rfgen_simulation Text internal
|
|
rfgen_simulation false
|
|
|
|
VarMake goniometer_simulation Text internal
|
|
goniometer_simulation false
|
|
|
|
VarMake sics_fullsimulation Text internal
|
|
|
|
source util/utility.tcl
|
|
source util/script_context_util.tcl
|
|
|
|
proc syncbackup {file} {
|
|
backup motorSave
|
|
backup $file
|
|
backup motorSave
|
|
}
|
|
publish syncbackup Spy
|
|
if {[info exists env(SICS_SIMULATION)] != 1} {
|
|
set sicsroot ../
|
|
source sics_ports.tcl
|
|
sics_fullsimulation false
|
|
} else {
|
|
switch $env(SICS_SIMULATION) {
|
|
"full" {
|
|
set sicsroot ../
|
|
source sics_ports.tcl
|
|
sics_fullsimulation true
|
|
}
|
|
"script_validator" {
|
|
VarMake sics_script_validator Text internal
|
|
sics_script_validator true
|
|
set sicsroot ../script_validator/
|
|
source script_validator_ports.tcl
|
|
sics_fullsimulation true
|
|
MakeSync localhost [expr [get_portnum $serverport ]-10] spy 007 ../log/syncfile.tcl
|
|
}
|
|
default {
|
|
error "ERROR: SICS_SIMULATION must be full or script_validator, not $env(SICS_SIMULATION)"
|
|
}
|
|
}
|
|
}
|
|
|
|
if {[string trim [lindex [split [sics_fullsimulation] =] 1]] == "true"} {
|
|
opal_simulation true
|
|
detector_simulation true
|
|
hmm_simulation true
|
|
counter_simulation true
|
|
environment_simulation true
|
|
motor_simulation true
|
|
chopper_simulation true
|
|
velsel_simulation true
|
|
plc_simulation true
|
|
rfgen_simulation true
|
|
goniometer_simulation true
|
|
}
|
|
|
|
set cfParent config
|
|
|
|
#WARNING Make sure there are no spaces after the back-slashes
|
|
array set cfPath [list\
|
|
parameters $cfParent/parameters\
|
|
source $cfParent/source\
|
|
anticollider $cfParent/anticollider\
|
|
motors $cfParent/motors\
|
|
optics $cfParent/optics\
|
|
counter $cfParent/counter\
|
|
chopper $cfParent/chopper\
|
|
environment $cfParent/environment\
|
|
hmm $cfParent/hmm\
|
|
scan $cfParent/scan\
|
|
velsel $cfParent/velsel\
|
|
nexus $cfParent/nexus\
|
|
hipadaba $cfParent/hipadaba\
|
|
plc $cfParent/plc\
|
|
commands $cfParent/commands\
|
|
beamline $cfParent/beamline\
|
|
goniometer $cfParent/goniometer\
|
|
]
|
|
|
|
ServerOption LogFileBaseName $sicsroot/log/serverlog
|
|
|
|
installprotocolhandler
|
|
|
|
|
|
ServerOption statusfile $sicsroot/log/status.tcl
|
|
ServerOption RedirectFile $sicsroot/log/stdout
|
|
ServerOption LogFileDir $sicsroot/log
|
|
ServerOption QuieckPort [get_portnum $quieckport ]
|
|
ServerOption ServerPort [get_portnum $serverport ]
|
|
ServerOption InterruptPort [get_portnum $interruptport ]
|
|
ServerOption TelWord sicslogin
|
|
ServerOption TelnetPort [get_portnum $telnetport ]
|
|
ServerOption ReadUserPasswdTimeout 600000
|
|
ServerOption AcceptTimeOut 10
|
|
ServerOption ReadTimeOut 10
|
|
SicsUser manager ansto 1
|
|
SicsUser user sydney 2
|
|
SicsUser spy 007 3
|
|
|
|
MakeDataNumber SicsDataNumber $sicsroot/DataNumber
|
|
|
|
#Instrument specific configs must set the Instrument variable
|
|
::utility::mkVar SicsDataPrefix Text internal
|
|
SicsDataPrefix [SplitReply [Instrument]]
|
|
|
|
::utility::mkVar SicsDataPostFix Text manager
|
|
SicsDataPostFix nx.hdf
|
|
|
|
foreach {var val klass priv} {
|
|
program_name "SICS" entry manager
|
|
run_mode "normal" entry user
|
|
} {
|
|
::utility::mkVar $var Text $priv $var true $klass true true
|
|
$var $val
|
|
}
|
|
|
|
::utility::mkVar SicsDataPath Text internal
|
|
SicsDataPath $sicsroot/data/
|
|
SicsDataPath lock
|
|
::utility::mkVar Title Text user title true experiment true true
|
|
::utility::mkVar SampleDescription Text user description true sample true true
|
|
::utility::mkVar SampleName Text user name true sample true true
|
|
::utility::mkVar SampleTitle Text user short_title true sample true true
|
|
::utility::mkVar User Text user name true user true true
|
|
::utility::mkVar Email Text user email true user true true
|
|
::utility::mkVar Phone Text user phone true user true true
|
|
::utility::mkVar starttime Text user start true experiment true true
|
|
MakeDrive
|
|
|
|
exe batchpath ../batch
|
|
exe syspath ../batch
|
|
|
|
|
|
::utility::mkVar dataFileName Text user file_name true experiment true true
|
|
|
|
##
|
|
# @brief Internal action command procedure
|
|
proc _action {drivecmd obj action args} {
|
|
if [ catch {
|
|
if { [SplitReply [sicslist $obj type]] != "ActionObject" } {
|
|
error "ERROR: $obj must be an ActionObject"
|
|
}
|
|
$obj act $action
|
|
$drivecmd $obj 1
|
|
} message ] {
|
|
if {$::errorCode=="NONE"} {return $message}
|
|
return -code error $message
|
|
}
|
|
}
|
|
|
|
##
|
|
# @brief Non-blocking action command
|
|
proc action {obj action args} {
|
|
if [ catch {
|
|
_action run $obj $action $args
|
|
} message ] {
|
|
if {$::errorCode=="NONE"} {return $message}
|
|
return -code error $message
|
|
}
|
|
}
|
|
publish action user
|
|
|
|
##
|
|
# @brief Blocking action command, this will wait for the action to complete.
|
|
proc waitaction {obj action args} {
|
|
if [ catch {
|
|
_action drive $obj $action $args
|
|
} message ] {
|
|
if {$::errorCode=="NONE"} {return $message}
|
|
return -code error $message
|
|
}
|
|
}
|
|
publish waitaction user
|
|
|
|
proc server_set_sobj_attributes {} {
|
|
if [ catch {
|
|
foreach m [lrange [sicslist type Motor] 1 end] {
|
|
$m movecount 500
|
|
}
|
|
motor_set_sobj_attributes
|
|
::utility::set_motor_attributes
|
|
#XXX::utility::set_histomem_attributes
|
|
::utility::set_sobj_attributes
|
|
::utility::set_envcontrol_attributes
|
|
::plc::set_sobj_attributes
|
|
::counter::set_sobj_attributes
|
|
::nexus::set_sobj_attributes
|
|
::histogram_memory::set_sobj_attributes
|
|
::utility::set_chopper_attributes
|
|
::utility::set_sctobj_attributes
|
|
::utility::set_sct_object_attributes
|
|
## TODO move the following to the new ansto gumxml.tcl
|
|
sicslist setatt getgumtreexml privilege internal
|
|
clientput "serverport [get_portnum $::serverport]"
|
|
} message ] {
|
|
if {$::errorCode=="NONE"} {return $message}
|
|
return -code error $message
|
|
}
|
|
}
|
|
|
|
proc server_init {} {
|
|
set catch_status [ catch {
|
|
::source::isc_initialize
|
|
::counter::isc_initialize
|
|
::histogram_memory::isc_initialize
|
|
::scan::isc_initialize
|
|
::anticollider::init
|
|
::commands::isc_initialize
|
|
::nexus::isc_initialize
|
|
########
|
|
# Parameters set above the restore command will be clobbered by
|
|
# the values in the status.tcl file
|
|
if [file exists $::sicsroot/log/status.tcl ] {
|
|
restore
|
|
}
|
|
MakeStateMon hmscan
|
|
sicslist setatt sics_suid privilege readonly
|
|
sicslist setatt sics_suid klass data
|
|
sicslist setatt sics_suid kind hobj
|
|
sicslist setatt sics_suid mutable true
|
|
sicslist setatt sics_suid data true
|
|
sicslist setatt sics_suid control true
|
|
sicslist setatt sics_suid nxsave true
|
|
sicslist setatt sics_suid long_name sics_suid
|
|
|
|
if [file exists ../extraconfig.tcl] {
|
|
fileeval ../extraconfig.tcl
|
|
}
|
|
server_set_sobj_attributes
|
|
buildHDB instrument_dictionary
|
|
|
|
} message ]
|
|
handle_exception $catch_status $message
|
|
}
|