Merge branch 'RELEASE-3_1' into RELEASE-3_2
Conflicts: sics/site_ansto/instrument/hipd/wombat_configuration.tcl sics/site_ansto/instrument/hrpd/echidna_configuration.tcl sics/site_ansto/instrument/kookaburra/kookaburra_configuration.tcl sics/site_ansto/instrument/reflectometer/platypus_configuration.tcl sics/site_ansto/instrument/sans/config/environment/sct_antonparr_MCR500.tcl sics/site_ansto/instrument/tas/taipan_configuration.tcl
This commit is contained in:
@ -324,7 +324,7 @@ static int scaqaAsconInit(Ascon *a, SConnection *pCon, int argc, char *argv[])
|
|||||||
for (i = 0; i < argc; ++i) {
|
for (i = 0; i < argc; ++i) {
|
||||||
SCPrintf(pCon, eStatus, "scaqaAsconInit: arg[%d] = %s\n", i, argv[i]);
|
SCPrintf(pCon, eStatus, "scaqaAsconInit: arg[%d] = %s\n", i, argv[i]);
|
||||||
}
|
}
|
||||||
if (argc < 1) {
|
if (argc < 2) {
|
||||||
SCPrintf(pCon, eError, "Insufficient arguments to scaqaAsconInit: %d\n", argc);
|
SCPrintf(pCon, eError, "Insufficient arguments to scaqaAsconInit: %d\n", argc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
124
site_ansto/instrument/TEST_SICS/fakeOLV/FakeOLV.py
Executable file
124
site_ansto/instrument/TEST_SICS/fakeOLV/FakeOLV.py
Executable file
@ -0,0 +1,124 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
# vim: ft=python ts=8 sts=4 sw=4 et autoindent smartindent nocindent
|
||||||
|
# author: Douglas Clowes (douglas.clowes@ansto.gov.au) 2015
|
||||||
|
'''
|
||||||
|
Fake Oxford LabView program for the 10/12 Tesla magnet driver
|
||||||
|
'''
|
||||||
|
|
||||||
|
from twisted.internet import reactor, protocol
|
||||||
|
from twisted.internet.task import LoopingCall
|
||||||
|
|
||||||
|
devices = []
|
||||||
|
|
||||||
|
class FakeOLV(protocol.Protocol):
|
||||||
|
'''Fake Oxford Labview Protocol Object'''
|
||||||
|
def __init__(self):
|
||||||
|
self.setpoint = 0.0
|
||||||
|
self.field = 0.0
|
||||||
|
self.rate = 0.0
|
||||||
|
self.hsw = 0
|
||||||
|
self.t_1 = 120.0
|
||||||
|
self.t_2 = 120.0
|
||||||
|
self.t_3 = 120.0
|
||||||
|
self.dsp = 0.0
|
||||||
|
self.dpv = 0.0
|
||||||
|
self.hsp = 0.0
|
||||||
|
self.hpv = 0.0
|
||||||
|
|
||||||
|
def dataReceived(self, data):
|
||||||
|
print "RECEIVED ", data
|
||||||
|
reply = ""
|
||||||
|
cmd_pars = data.split()
|
||||||
|
if len(cmd_pars) < 1:
|
||||||
|
return
|
||||||
|
cmd = cmd_pars[0].lower()
|
||||||
|
if cmd.startswith("set"):
|
||||||
|
reply = self.set_command(cmd, cmd_pars)
|
||||||
|
elif cmd.startswith("get"):
|
||||||
|
reply = self.get_command(cmd)
|
||||||
|
else:
|
||||||
|
reply = "Error Command!"
|
||||||
|
print "REPLY ", reply
|
||||||
|
self.transport.write(reply + "\r\n")
|
||||||
|
|
||||||
|
def set_command(self, cmd, cmd_pars):
|
||||||
|
'''Execute a setXX command'''
|
||||||
|
reply = ""
|
||||||
|
if len(cmd_pars) < 2:
|
||||||
|
reply = "Error Command!"
|
||||||
|
elif cmd == "setr":
|
||||||
|
self.rate = float(cmd_pars[1])
|
||||||
|
elif cmd == "seths":
|
||||||
|
if cmd_pars[1].lower() == "on":
|
||||||
|
self.hsw = 1
|
||||||
|
if cmd_pars[1].lower() == "off":
|
||||||
|
self.hsw = 0
|
||||||
|
elif cmd == "sethelioxtemp":
|
||||||
|
self.hsp = float(cmd_pars[1])
|
||||||
|
elif cmd == "setdiluttemp":
|
||||||
|
self.dsp = float(cmd_pars[1])
|
||||||
|
elif cmd == "setf":
|
||||||
|
self.setpoint = float(cmd_pars[1])
|
||||||
|
else:
|
||||||
|
reply = "Error Command!"
|
||||||
|
return reply
|
||||||
|
|
||||||
|
def get_command(self, cmd):
|
||||||
|
'''Execute a getXX command'''
|
||||||
|
reply = ""
|
||||||
|
if cmd == "getf":
|
||||||
|
current = self.field * 10.0
|
||||||
|
reply = "Field_Current=%.6f;" % current
|
||||||
|
reply += "Field_Tesla=%.6f" % self.field
|
||||||
|
elif cmd == "gett":
|
||||||
|
reply = "T1=120.000000;T2=120.000000;T3=120.000000"
|
||||||
|
elif cmd == "gethelioxtemp":
|
||||||
|
reply = "Temp=0.000000;SetPoint=0.000000 Cdeg"
|
||||||
|
elif cmd == "getdilutiontemp":
|
||||||
|
reply = "Temp=0.000000;SetPoint=0.000000"
|
||||||
|
else:
|
||||||
|
reply = "Error Command!"
|
||||||
|
return reply
|
||||||
|
|
||||||
|
def iterate(self):
|
||||||
|
'''Iterate the setpoints'''
|
||||||
|
if abs(self.field - self.setpoint) > 0.01:
|
||||||
|
self.field += 0.1 * (self.setpoint - self.field)
|
||||||
|
else:
|
||||||
|
self.field = self.setpoint
|
||||||
|
if abs(self.dsp - self.dpv) > 0.01:
|
||||||
|
self.dpv += 0.1 * (self.dsp - self.dpv)
|
||||||
|
else:
|
||||||
|
self.dpv = self.dsp
|
||||||
|
if abs(self.hsp - self.hpv) > 0.01:
|
||||||
|
self.hpv += 0.1 * (self.hsp - self.hpv)
|
||||||
|
else:
|
||||||
|
self.hpv = self.hsp
|
||||||
|
|
||||||
|
def connectionMade(self):
|
||||||
|
'''Add this new connection to the list of devices'''
|
||||||
|
print "connectionMade"
|
||||||
|
devices.append(self)
|
||||||
|
|
||||||
|
def connectionLost(self, reason):
|
||||||
|
'''Drop this old connection from the list of devices'''
|
||||||
|
print "connectionLost"
|
||||||
|
devices.remove(self)
|
||||||
|
|
||||||
|
def device_iterator():
|
||||||
|
'''Iterate over all connected devices and do them'''
|
||||||
|
#print "device_iterator"
|
||||||
|
for dev in devices:
|
||||||
|
dev.iterate()
|
||||||
|
|
||||||
|
def main():
|
||||||
|
'''Main program'''
|
||||||
|
dev_iter = LoopingCall(device_iterator)
|
||||||
|
dev_iter.start(1.0)
|
||||||
|
factory = protocol.ServerFactory()
|
||||||
|
factory.protocol = FakeOLV
|
||||||
|
reactor.listenTCP(55001, factory)
|
||||||
|
reactor.run()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
@ -3,7 +3,7 @@ driver he3_polanal = {
|
|||||||
protocol = std;
|
protocol = std;
|
||||||
class = instrument;
|
class = instrument;
|
||||||
simulation_group = rfgen_simulation;
|
simulation_group = rfgen_simulation;
|
||||||
make_args = '{has_pol true} {has_anal true}';
|
make_args = '{has_pol true} {has_anal true} {has_coil false}';
|
||||||
|
|
||||||
group polariser = {
|
group polariser = {
|
||||||
conditional = '[string equal -nocase ${has_pol} "true"]';
|
conditional = '[string equal -nocase ${has_pol} "true"]';
|
||||||
@ -11,7 +11,7 @@ driver he3_polanal = {
|
|||||||
var spin = {
|
var spin = {
|
||||||
readable = 900;
|
readable = 900;
|
||||||
read_command = 'polariser';
|
read_command = 'polariser';
|
||||||
read_function = rdValue;
|
read_function = read_spin;
|
||||||
writeable = 1;
|
writeable = 1;
|
||||||
write_command = 'polariser';
|
write_command = 'polariser';
|
||||||
check_function = chkWrite;
|
check_function = chkWrite;
|
||||||
@ -42,7 +42,7 @@ driver he3_polanal = {
|
|||||||
var spin = {
|
var spin = {
|
||||||
readable = 900;
|
readable = 900;
|
||||||
read_command = 'analyser';
|
read_command = 'analyser';
|
||||||
read_function = rdValue;
|
read_function = read_spin;
|
||||||
writeable = 1;
|
writeable = 1;
|
||||||
write_command = 'analyser';
|
write_command = 'analyser';
|
||||||
check_function = chkWrite;
|
check_function = chkWrite;
|
||||||
@ -67,12 +67,82 @@ driver he3_polanal = {
|
|||||||
var timestamp = { type = int; }
|
var timestamp = { type = int; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
group magnet = {
|
||||||
|
conditional = '[string equal -nocase ${has_coil} "true"]';
|
||||||
|
type = float;
|
||||||
|
group sense = {
|
||||||
|
var x_voltage = {}
|
||||||
|
var x_current = {}
|
||||||
|
var y_voltage = {}
|
||||||
|
var y_current = {}
|
||||||
|
var z_voltage = {}
|
||||||
|
var z_current = {}
|
||||||
|
var sense = {
|
||||||
|
type = int; data = false; mutable = false; nxsave = false;
|
||||||
|
readable = 30;
|
||||||
|
read_command = 'magnet_xyz';
|
||||||
|
read_function = read_magnet;
|
||||||
|
writeable = 1;
|
||||||
|
write_function = fetch_magnet;
|
||||||
|
write_command = 'magnet_xyz';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
group setpoint = {
|
||||||
|
var x_current_sp = {}
|
||||||
|
var y_current_sp = {}
|
||||||
|
var z_current_sp = {}
|
||||||
|
var store = {
|
||||||
|
type = int; data = false; mutable = false; nxsave = false;
|
||||||
|
writeable = 1;
|
||||||
|
write_function = write_magnet;
|
||||||
|
write_command = 'magnet_xyz';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
code read_magnet = {
|
||||||
|
@TCL
|
||||||
|
set dlist [split [string trim ${data}]]
|
||||||
|
if {[llength $dlist] != 7} {
|
||||||
|
error "Syntax error: '${data}'"
|
||||||
|
}
|
||||||
|
set index 1
|
||||||
|
set path [pathname [sct]]
|
||||||
|
set ns [namespace current]
|
||||||
|
foreach node {x_voltage x_current y_voltage y_current z_voltage z_current} {
|
||||||
|
hsetprop ${path}/${node} result [lindex $dlist ${index}]
|
||||||
|
sct with ${path}/${node} "${ns}::rdValue ${tc_root}"
|
||||||
|
incr index
|
||||||
|
}
|
||||||
|
set data 0
|
||||||
|
@END
|
||||||
|
}
|
||||||
|
|
||||||
|
code fetch_magnet = {
|
||||||
|
@TCL
|
||||||
|
# Just do a fetch and go on to the read state
|
||||||
|
set cmd "${cmd_str}"
|
||||||
|
set nextState "read_magnet"
|
||||||
|
@END
|
||||||
|
}
|
||||||
|
|
||||||
|
code write_magnet = {
|
||||||
|
@TCL
|
||||||
|
# Just do a fetch and go on to the read state
|
||||||
|
set path [pathname [sct]]
|
||||||
|
set cmd "${cmd_str}"
|
||||||
|
set cmd "${cmd} [hval ${path}/x_current_sp]"
|
||||||
|
set cmd "${cmd} [hval ${path}/y_current_sp]"
|
||||||
|
set cmd "${cmd} [hval ${path}/z_current_sp]"
|
||||||
|
@END
|
||||||
|
}
|
||||||
|
|
||||||
code chkWrite = {%%
|
code chkWrite = {%%
|
||||||
[namespace current]::rdValue ${tc_root}
|
[namespace current]::read_spin ${tc_root}
|
||||||
clientput [sct result]
|
clientput [sct result]
|
||||||
%%}
|
%%}
|
||||||
|
|
||||||
code rdValue = {%%
|
code read_spin = {%%
|
||||||
set dlist [split [string trim ${data}]]
|
set dlist [split [string trim ${data}]]
|
||||||
if {[llength ${dlist}] < 2} {
|
if {[llength ${dlist}] < 2} {
|
||||||
sct geterror "Syntax Error: '${data}'"
|
sct geterror "Syntax Error: '${data}'"
|
||||||
|
@ -72,7 +72,7 @@ proc ::scobj::he3_polanal::chkWrite {tc_root} {
|
|||||||
set catch_status [ catch {
|
set catch_status [ catch {
|
||||||
debug_log ${tc_root} 1 "chkWrite tc_root=${tc_root} sct=[sct] resp=[sct result]"
|
debug_log ${tc_root} 1 "chkWrite tc_root=${tc_root} sct=[sct] resp=[sct result]"
|
||||||
# chkWrite hook code starts
|
# chkWrite hook code starts
|
||||||
[namespace current]::rdValue ${tc_root}
|
[namespace current]::read_spin ${tc_root}
|
||||||
clientput [sct result]
|
clientput [sct result]
|
||||||
# chkWrite hook code ends
|
# chkWrite hook code ends
|
||||||
return "idle"
|
return "idle"
|
||||||
@ -80,6 +80,38 @@ proc ::scobj::he3_polanal::chkWrite {tc_root} {
|
|||||||
handle_exception ${catch_status} ${catch_message}
|
handle_exception ${catch_status} ${catch_message}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# function to write a parameter value on a device
|
||||||
|
proc ::scobj::he3_polanal::fetch_magnet {tc_root nextState cmd_str} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "fetch_magnet tc_root=${tc_root} sct=[sct] cmd=${cmd_str}"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set par [sct target]
|
||||||
|
set cmd "${cmd_str}${par}"
|
||||||
|
# fetch_magnet hook code starts
|
||||||
|
# Just do a fetch and go on to the read state
|
||||||
|
set cmd "${cmd_str}"
|
||||||
|
set nextState "read_magnet"
|
||||||
|
# fetch_magnet hook code ends
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
debug_log ${tc_root} 9 "[sct] error: [sct geterror]"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
if { [hpropexists [sct] driving] } {
|
||||||
|
if { [hpropexists [sct] writestatus] && [sct writestatus] == "start" } {
|
||||||
|
sct driving 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
debug_log ${tc_root} 1 "fetch_magnet sct send ${cmd}"
|
||||||
|
if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} {
|
||||||
|
sct send "${cmd}"
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
# function to request the read of a parameter on a device
|
# function to request the read of a parameter on a device
|
||||||
proc ::scobj::he3_polanal::getValue {tc_root nextState cmd_str} {
|
proc ::scobj::he3_polanal::getValue {tc_root nextState cmd_str} {
|
||||||
set catch_status [ catch {
|
set catch_status [ catch {
|
||||||
@ -122,7 +154,77 @@ proc ::scobj::he3_polanal::rdValue {tc_root} {
|
|||||||
sct geterror "${data}"
|
sct geterror "${data}"
|
||||||
error "[sct geterror]"
|
error "[sct geterror]"
|
||||||
}
|
}
|
||||||
# rdValue hook code starts
|
# rdValue hook code goes here
|
||||||
|
if { ${data} != [sct oldval] } {
|
||||||
|
debug_log ${tc_root} 1 "[sct] changed to new:${data}, from old:[sct oldval]"
|
||||||
|
sct oldval ${data}
|
||||||
|
sct update ${data}
|
||||||
|
sct utime readtime
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to parse the read of a parameter on a device
|
||||||
|
proc ::scobj::he3_polanal::read_magnet {tc_root} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "read_magnet tc_root=${tc_root} sct=[sct] result=[sct result]"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set data [sct result]
|
||||||
|
set nextState "idle"
|
||||||
|
if {[string equal -nocase -length 7 ${data} "ASCERR:"]} {
|
||||||
|
# the protocol driver has reported an error
|
||||||
|
sct geterror "${data}"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
# read_magnet hook code starts
|
||||||
|
set dlist [split [string trim ${data}]]
|
||||||
|
if {[llength $dlist] != 7} {
|
||||||
|
error "Syntax error: '${data}'"
|
||||||
|
}
|
||||||
|
set index 1
|
||||||
|
set path [pathname [sct]]
|
||||||
|
set ns [namespace current]
|
||||||
|
foreach node {x_voltage x_current y_voltage y_current z_voltage z_current} {
|
||||||
|
hsetprop ${path}/${node} result [lindex $dlist ${index}]
|
||||||
|
sct with ${path}/${node} "${ns}::rdValue ${tc_root}"
|
||||||
|
incr index
|
||||||
|
}
|
||||||
|
set data 0
|
||||||
|
# read_magnet hook code ends
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
debug_log ${tc_root} 9 "[sct] error: [sct geterror]"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
if { ${data} != [sct oldval] } {
|
||||||
|
debug_log ${tc_root} 1 "[sct] changed to new:${data}, from old:[sct oldval]"
|
||||||
|
sct oldval ${data}
|
||||||
|
sct update ${data}
|
||||||
|
sct utime readtime
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to parse the read of a parameter on a device
|
||||||
|
proc ::scobj::he3_polanal::read_spin {tc_root} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "read_spin tc_root=${tc_root} sct=[sct] result=[sct result]"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set data [sct result]
|
||||||
|
set nextState "idle"
|
||||||
|
if {[string equal -nocase -length 7 ${data} "ASCERR:"]} {
|
||||||
|
# the protocol driver has reported an error
|
||||||
|
sct geterror "${data}"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
# read_spin hook code starts
|
||||||
set dlist [split [string trim ${data}]]
|
set dlist [split [string trim ${data}]]
|
||||||
if {[llength ${dlist}] < 2} {
|
if {[llength ${dlist}] < 2} {
|
||||||
sct geterror "Syntax Error: '${data}'"
|
sct geterror "Syntax Error: '${data}'"
|
||||||
@ -148,7 +250,7 @@ proc ::scobj::he3_polanal::rdValue {tc_root} {
|
|||||||
[namespace current]::do_update ${path}/time2 ${dlist} 5
|
[namespace current]::do_update ${path}/time2 ${dlist} 5
|
||||||
[namespace current]::do_update ${path}/field ${dlist} 6
|
[namespace current]::do_update ${path}/field ${dlist} 6
|
||||||
hupdateif ${path}/timestamp ${timestamp}
|
hupdateif ${path}/timestamp ${timestamp}
|
||||||
# rdValue hook code ends
|
# read_spin hook code ends
|
||||||
if { [hpropexists [sct] geterror] } {
|
if { [hpropexists [sct] geterror] } {
|
||||||
debug_log ${tc_root} 9 "[sct] error: [sct geterror]"
|
debug_log ${tc_root} 9 "[sct] error: [sct geterror]"
|
||||||
error "[sct geterror]"
|
error "[sct geterror]"
|
||||||
@ -200,8 +302,43 @@ proc ::scobj::he3_polanal::setValue {tc_root nextState cmd_str} {
|
|||||||
handle_exception ${catch_status} ${catch_message}
|
handle_exception ${catch_status} ${catch_message}
|
||||||
}
|
}
|
||||||
|
|
||||||
proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulation_flag ip_address tcp_port {has_pol true} {has_anal true} } {
|
# function to write a parameter value on a device
|
||||||
::scobj::he3_polanal::sics_log 9 "::scobj::he3_polanal::mkDriver ${sct_controller} ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port} ${has_pol} ${has_anal}"
|
proc ::scobj::he3_polanal::write_magnet {tc_root nextState cmd_str} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "write_magnet tc_root=${tc_root} sct=[sct] cmd=${cmd_str}"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set par [sct target]
|
||||||
|
set cmd "${cmd_str}${par}"
|
||||||
|
# write_magnet hook code starts
|
||||||
|
# Just do a fetch and go on to the read state
|
||||||
|
set path [pathname [sct]]
|
||||||
|
set cmd "${cmd_str}"
|
||||||
|
set cmd "${cmd} [hval ${path}/x_current_sp]"
|
||||||
|
set cmd "${cmd} [hval ${path}/y_current_sp]"
|
||||||
|
set cmd "${cmd} [hval ${path}/z_current_sp]"
|
||||||
|
# write_magnet hook code ends
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
debug_log ${tc_root} 9 "[sct] error: [sct geterror]"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
if { [hpropexists [sct] driving] } {
|
||||||
|
if { [hpropexists [sct] writestatus] && [sct writestatus] == "start" } {
|
||||||
|
sct driving 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
debug_log ${tc_root} 1 "write_magnet sct send ${cmd}"
|
||||||
|
if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} {
|
||||||
|
sct send "${cmd}"
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulation_flag ip_address tcp_port {has_pol true} {has_anal true} {has_coil false} } {
|
||||||
|
::scobj::he3_polanal::sics_log 9 "::scobj::he3_polanal::mkDriver ${sct_controller} ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port} ${has_pol} ${has_anal} ${has_coil}"
|
||||||
set ns "[namespace current]"
|
set ns "[namespace current]"
|
||||||
set catch_status [ catch {
|
set catch_status [ catch {
|
||||||
|
|
||||||
@ -264,8 +401,8 @@ proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulatio
|
|||||||
hsetprop ${scobj_hpath}/analyser/phase nxalias "${name}_analyser_phase"
|
hsetprop ${scobj_hpath}/analyser/phase nxalias "${name}_analyser_phase"
|
||||||
|
|
||||||
hfactory ${scobj_hpath}/analyser/spin plain user float
|
hfactory ${scobj_hpath}/analyser/spin plain user float
|
||||||
hsetprop ${scobj_hpath}/analyser/spin read ${ns}::getValue ${scobj_hpath} rdValue {analyser}
|
hsetprop ${scobj_hpath}/analyser/spin read ${ns}::getValue ${scobj_hpath} read_spin {analyser}
|
||||||
hsetprop ${scobj_hpath}/analyser/spin rdValue ${ns}::rdValue ${scobj_hpath}
|
hsetprop ${scobj_hpath}/analyser/spin read_spin ${ns}::read_spin ${scobj_hpath}
|
||||||
hsetprop ${scobj_hpath}/analyser/spin write ${ns}::setValue ${scobj_hpath} chkWrite {analyser}
|
hsetprop ${scobj_hpath}/analyser/spin write ${ns}::setValue ${scobj_hpath} chkWrite {analyser}
|
||||||
hsetprop ${scobj_hpath}/analyser/spin chkWrite ${ns}::chkWrite ${scobj_hpath}
|
hsetprop ${scobj_hpath}/analyser/spin chkWrite ${ns}::chkWrite ${scobj_hpath}
|
||||||
hsetprop ${scobj_hpath}/analyser/spin check ${ns}::checkrange ${scobj_hpath}
|
hsetprop ${scobj_hpath}/analyser/spin check ${ns}::checkrange ${scobj_hpath}
|
||||||
@ -404,6 +541,167 @@ proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulatio
|
|||||||
hsetprop ${scobj_hpath}/analyser_start type "part"
|
hsetprop ${scobj_hpath}/analyser_start type "part"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if {[string equal -nocase ${has_coil} "true"]} {
|
||||||
|
hfactory ${scobj_hpath}/magnet plain spy none
|
||||||
|
hsetprop ${scobj_hpath}/magnet data "true"
|
||||||
|
hsetprop ${scobj_hpath}/magnet klass "@none"
|
||||||
|
hsetprop ${scobj_hpath}/magnet type "part"
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/sense plain spy none
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/sense/sense plain user int
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense read ${ns}::getValue ${scobj_hpath} read_magnet {magnet_xyz}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense read_magnet ${ns}::read_magnet ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense write ${ns}::fetch_magnet ${scobj_hpath} noResponse {magnet_xyz}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense noResponse ${ns}::noResponse ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense check ${ns}::checkrange ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense data false
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense mutable false
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense nxsave false
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense oldval 0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense nxalias "${name}_magnet_sense_sense"
|
||||||
|
|
||||||
|
if {[string equal -nocase "${simulation_flag}" "false"]} {
|
||||||
|
${sct_controller} poll ${scobj_hpath}/magnet/sense/sense 30
|
||||||
|
${sct_controller} write ${scobj_hpath}/magnet/sense/sense
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense simulated false
|
||||||
|
} else {
|
||||||
|
::scobj::he3_polanal::sics_log 9 "simulation_flag=${simulation_flag} => No poll/write for he3_polanal"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/sense simulated true
|
||||||
|
}
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/sense/x_current plain user float
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_current control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_current data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_current mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_current nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_current oldval 0.0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_current klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_current sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_current type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_current nxalias "${name}_magnet_sense_x_current"
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/sense/x_voltage plain user float
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_voltage control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_voltage data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_voltage mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_voltage nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_voltage oldval 0.0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_voltage klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_voltage sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_voltage type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/x_voltage nxalias "${name}_magnet_sense_x_voltage"
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/sense/y_current plain user float
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_current control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_current data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_current mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_current nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_current oldval 0.0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_current klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_current sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_current type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_current nxalias "${name}_magnet_sense_y_current"
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/sense/y_voltage plain user float
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_voltage control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_voltage data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_voltage mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_voltage nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_voltage oldval 0.0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_voltage klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_voltage sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_voltage type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/y_voltage nxalias "${name}_magnet_sense_y_voltage"
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/sense/z_current plain user float
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_current control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_current data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_current mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_current nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_current oldval 0.0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_current klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_current sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_current type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_current nxalias "${name}_magnet_sense_z_current"
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/sense/z_voltage plain user float
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_voltage control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_voltage data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_voltage mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_voltage nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_voltage oldval 0.0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_voltage klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_voltage sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_voltage type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense/z_voltage nxalias "${name}_magnet_sense_z_voltage"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense data "true"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense klass "@none"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/sense type "part"
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/setpoint plain spy none
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/setpoint/store plain user int
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/store write ${ns}::write_magnet ${scobj_hpath} noResponse {magnet_xyz}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/store noResponse ${ns}::noResponse ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/store check ${ns}::checkrange ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/store control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/store data false
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/store mutable false
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/store nxsave false
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/store oldval 0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/store sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/store type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/store nxalias "${name}_magnet_setpoint_store"
|
||||||
|
|
||||||
|
if {[string equal -nocase "${simulation_flag}" "false"]} {
|
||||||
|
${sct_controller} write ${scobj_hpath}/magnet/setpoint/store
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/store simulated false
|
||||||
|
} else {
|
||||||
|
::scobj::he3_polanal::sics_log 9 "simulation_flag=${simulation_flag} => No poll/write for he3_polanal"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/store simulated true
|
||||||
|
}
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/setpoint/x_current_sp plain user float
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/x_current_sp control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/x_current_sp data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/x_current_sp mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/x_current_sp nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/x_current_sp oldval 0.0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/x_current_sp klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/x_current_sp sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/x_current_sp type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/x_current_sp nxalias "${name}_magnet_setpoint_x_current_sp"
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/setpoint/y_current_sp plain user float
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/y_current_sp control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/y_current_sp data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/y_current_sp mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/y_current_sp nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/y_current_sp oldval 0.0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/y_current_sp klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/y_current_sp sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/y_current_sp type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/y_current_sp nxalias "${name}_magnet_setpoint_y_current_sp"
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/setpoint/z_current_sp plain user float
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/z_current_sp control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/z_current_sp data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/z_current_sp mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/z_current_sp nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/z_current_sp oldval 0.0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/z_current_sp klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/z_current_sp sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/z_current_sp type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint/z_current_sp nxalias "${name}_magnet_setpoint_z_current_sp"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint data "true"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint klass "@none"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint type "part"
|
||||||
|
}
|
||||||
|
|
||||||
if {[string equal -nocase ${has_pol} "true"]} {
|
if {[string equal -nocase ${has_pol} "true"]} {
|
||||||
hfactory ${scobj_hpath}/polariser plain spy none
|
hfactory ${scobj_hpath}/polariser plain spy none
|
||||||
|
|
||||||
@ -455,8 +753,8 @@ proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulatio
|
|||||||
hsetprop ${scobj_hpath}/polariser/phase nxalias "${name}_polariser_phase"
|
hsetprop ${scobj_hpath}/polariser/phase nxalias "${name}_polariser_phase"
|
||||||
|
|
||||||
hfactory ${scobj_hpath}/polariser/spin plain user float
|
hfactory ${scobj_hpath}/polariser/spin plain user float
|
||||||
hsetprop ${scobj_hpath}/polariser/spin read ${ns}::getValue ${scobj_hpath} rdValue {polariser}
|
hsetprop ${scobj_hpath}/polariser/spin read ${ns}::getValue ${scobj_hpath} read_spin {polariser}
|
||||||
hsetprop ${scobj_hpath}/polariser/spin rdValue ${ns}::rdValue ${scobj_hpath}
|
hsetprop ${scobj_hpath}/polariser/spin read_spin ${ns}::read_spin ${scobj_hpath}
|
||||||
hsetprop ${scobj_hpath}/polariser/spin write ${ns}::setValue ${scobj_hpath} chkWrite {polariser}
|
hsetprop ${scobj_hpath}/polariser/spin write ${ns}::setValue ${scobj_hpath} chkWrite {polariser}
|
||||||
hsetprop ${scobj_hpath}/polariser/spin chkWrite ${ns}::chkWrite ${scobj_hpath}
|
hsetprop ${scobj_hpath}/polariser/spin chkWrite ${ns}::chkWrite ${scobj_hpath}
|
||||||
hsetprop ${scobj_hpath}/polariser/spin check ${ns}::checkrange ${scobj_hpath}
|
hsetprop ${scobj_hpath}/polariser/spin check ${ns}::checkrange ${scobj_hpath}
|
||||||
@ -605,7 +903,7 @@ proc ::scobj::he3_polanal::mkDriver { sct_controller name device_class simulatio
|
|||||||
|
|
||||||
proc ::scobj::he3_polanal::add_driver {name device_class simulation_flag ip_address tcp_port} {
|
proc ::scobj::he3_polanal::add_driver {name device_class simulation_flag ip_address tcp_port} {
|
||||||
set catch_status [ catch {
|
set catch_status [ catch {
|
||||||
::scobj::he3_polanal::sics_log 9 "::scobj::he3_polanal::add_driver ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port} ${has_pol} ${has_anal}"
|
::scobj::he3_polanal::sics_log 9 "::scobj::he3_polanal::add_driver ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port} ${has_pol} ${has_anal} ${has_coil}"
|
||||||
if {[string equal -nocase "${simulation_flag}" "false"]} {
|
if {[string equal -nocase "${simulation_flag}" "false"]} {
|
||||||
if {[string equal -nocase "aqadapter" "${ip_address}"]} {
|
if {[string equal -nocase "aqadapter" "${ip_address}"]} {
|
||||||
::scobj::he3_polanal::sics_log 9 "makesctcontroller sct_${name} aqadapter ${tcp_port}"
|
::scobj::he3_polanal::sics_log 9 "makesctcontroller sct_${name} aqadapter ${tcp_port}"
|
||||||
@ -619,8 +917,8 @@ proc ::scobj::he3_polanal::add_driver {name device_class simulation_flag ip_addr
|
|||||||
::scobj::he3_polanal::sics_log 9 "makesctcontroller sct_${name} aqadapter NULL"
|
::scobj::he3_polanal::sics_log 9 "makesctcontroller sct_${name} aqadapter NULL"
|
||||||
makesctcontroller sct_${name} aqadapter NULL
|
makesctcontroller sct_${name} aqadapter NULL
|
||||||
}
|
}
|
||||||
::scobj::he3_polanal::sics_log 1 "::scobj::he3_polanal::mkDriver sct_${name} ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port} ${has_pol} ${has_anal}"
|
::scobj::he3_polanal::sics_log 1 "::scobj::he3_polanal::mkDriver sct_${name} ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port} ${has_pol} ${has_anal} ${has_coil}"
|
||||||
::scobj::he3_polanal::mkDriver sct_${name} ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port} ${has_pol} ${has_anal}
|
::scobj::he3_polanal::mkDriver sct_${name} ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port} ${has_pol} ${has_anal} ${has_coil}
|
||||||
} catch_message ]
|
} catch_message ]
|
||||||
handle_exception ${catch_status} ${catch_message}
|
handle_exception ${catch_status} ${catch_message}
|
||||||
}
|
}
|
||||||
@ -721,8 +1019,8 @@ proc ::scobj::he3_polanal::read_config {} {
|
|||||||
set arg_list [list]
|
set arg_list [list]
|
||||||
set missing_list [list]
|
set missing_list [list]
|
||||||
array unset default_map
|
array unset default_map
|
||||||
array set default_map [list has_pol true has_anal true]
|
array set default_map [list has_pol true has_anal true has_coil false]
|
||||||
foreach arg {has_pol has_anal} {
|
foreach arg {has_pol has_anal has_coil} {
|
||||||
if {[dict exists $u $arg]} {
|
if {[dict exists $u $arg]} {
|
||||||
lappend arg_list "[dict get $u $arg]"
|
lappend arg_list "[dict get $u $arg]"
|
||||||
} elseif {[dict exists $v $arg]} {
|
} elseif {[dict exists $v $arg]} {
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
|
|
||||||
set scaleval 1000.0
|
set scaleval 2000.0
|
||||||
|
set rampstep 100
|
||||||
|
set rampdelay 3
|
||||||
|
set motdir 1
|
||||||
|
set pulserstate 0
|
||||||
|
|
||||||
proc SetVoltScale {newscaleval} {
|
proc SetVoltScale {newscaleval} {
|
||||||
global scaleval
|
global scaleval
|
||||||
@ -11,17 +15,58 @@ proc VoltScale {involt} {
|
|||||||
return [expr {($involt*1.0)/$scaleval}]
|
return [expr {($involt*1.0)/$scaleval}]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc SetRampParms {_rampstep _rampdelay} {
|
||||||
|
global rampstep rampdelay
|
||||||
|
set rampstep $_rampstep
|
||||||
|
set rampdelay $_rampdelay
|
||||||
|
}
|
||||||
|
|
||||||
proc SetVolt {volt} {
|
proc SetVolt {volt} {
|
||||||
|
global pulserstate
|
||||||
if {$volt== 0} {
|
if {$volt== 0} {
|
||||||
PulserOff
|
PulserOff
|
||||||
|
set pulserstate 0
|
||||||
} else {
|
} else {
|
||||||
set pulservolt [VoltScale $volt]
|
set pulservolt [VoltScale $volt]
|
||||||
sct_pulser send "VOLT:OFFS $pulservolt; OFFS?"
|
# sct_pulser send "VOLT:OFFS $pulservolt; OFFS?"
|
||||||
PulserDC $pulservolt
|
# PulserDC $pulservolt
|
||||||
PulserOn
|
if {$pulserstate==0} {
|
||||||
|
PulserDC $pulservolt
|
||||||
|
PulserOn
|
||||||
|
set pulserstate 1
|
||||||
|
} else {
|
||||||
|
sct_pulser send "VOLT:OFFS $pulservolt; OFFS?"
|
||||||
|
PulserOn
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc VoltSetStep {start step fin delay} {
|
||||||
|
set i [expr {$start*1.0}]
|
||||||
|
set loopvar 1
|
||||||
|
SetVolt $i
|
||||||
|
if {($start == $fin) || ($step == 0)} {break}
|
||||||
|
while {$loopvar} {
|
||||||
|
wait $delay
|
||||||
|
if {($start < $fin)} {
|
||||||
|
set i [expr {$i + abs($step)}]
|
||||||
|
if {$i >= $fin} {
|
||||||
|
set i $fin
|
||||||
|
set loopvar 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if {($start > $fin)} {
|
||||||
|
set i [expr {$i - abs($step)}]
|
||||||
|
if {$i <= $fin} {
|
||||||
|
set i $fin
|
||||||
|
set loopvar 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SetVolt $i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
proc GetVolt {} {
|
proc GetVolt {} {
|
||||||
sct_pulser transact VOLT:OFFS?
|
sct_pulser transact VOLT:OFFS?
|
||||||
}
|
}
|
||||||
@ -29,25 +74,18 @@ proc GetVolt {} {
|
|||||||
proc SingleVolt {volt oscno} {
|
proc SingleVolt {volt oscno} {
|
||||||
histmem mode unlimited
|
histmem mode unlimited
|
||||||
newfile HISTOGRAM_XY
|
newfile HISTOGRAM_XY
|
||||||
if {$volt== 0} {
|
SetVolt $volt
|
||||||
PulserOff
|
oct oscillate_count $oscno
|
||||||
} else {
|
oct oscillate start
|
||||||
set pulservolt [VoltScale $volt]
|
|
||||||
sct_pulser send "VOLT:OFFS $pulservolt; OFFS?"
|
|
||||||
pulserDC $pulservolt
|
|
||||||
PulserOn
|
|
||||||
}
|
|
||||||
oscmd start $oscno
|
|
||||||
hmm countblock
|
|
||||||
save 0
|
save 0
|
||||||
oscmd stop
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc SetDC {} {
|
proc SetDC {} {
|
||||||
pulseroff
|
pulseroff
|
||||||
#NOTE: Setting FUNC DC generates a remote ctrl error if the
|
#NOTE: Setting FUNC DC generates a remote ctrl error if the
|
||||||
# burst mode happens to be on
|
# burst mode happens to be on
|
||||||
set resp [sct_pulser transact "BURS:STAT OFF;:FUNC DC;:VOLT:OFFS 0; OFFS?"]
|
set resp [sct_pulser send "BURS:STAT OFF;:FUNC DC;:VOLT:OFFS 0; OFFS?"]
|
||||||
pulseron
|
pulseron
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,55 +99,58 @@ proc VoltRamp {start step fin oscno} {
|
|||||||
set j [expr {$i*$step+$start}]
|
set j [expr {$i*$step+$start}]
|
||||||
if {$j> $fin && $step > 0} {break}
|
if {$j> $fin && $step > 0} {break}
|
||||||
if {$j< $fin && $step < 0} {break}
|
if {$j< $fin && $step < 0} {break}
|
||||||
if {$j== 0} {
|
SetVolt $j
|
||||||
PulserOff
|
oct oscillate_count $oscno
|
||||||
} else {
|
oct oscillate start
|
||||||
set pulservolt [VoltScale $j]
|
|
||||||
pulserDC $pulservolt
|
|
||||||
PulserOn
|
|
||||||
}
|
|
||||||
oscmd start $oscno
|
|
||||||
hmm countblock
|
|
||||||
save $i
|
save $i
|
||||||
incr i
|
incr i
|
||||||
}
|
}
|
||||||
oscmd stop
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc VoltTextureRamp {start step fin mot tstart tstep tfin oscno} {
|
proc SingleVTexScan {mot tstart tstep tfin oscno} {
|
||||||
histmem mode unlimited
|
global motdir
|
||||||
|
broadcast in singlevtexscan
|
||||||
|
set loopvar 1
|
||||||
set loopvar 1
|
set i_bool 0
|
||||||
|
histmem mode unlimited
|
||||||
|
if {$motdir == 1} {
|
||||||
|
set currentmot $tstart
|
||||||
set i 0
|
set i 0
|
||||||
while {$loopvar} {
|
} else {
|
||||||
set j [expr {$i*$step+$start}]
|
set currentmot $tfin
|
||||||
if {$j> $fin && $step > 0} {break}
|
set i [expr {int(($tfin-$tstart)/$tstep)}]
|
||||||
if {$j< $fin && $step < 0} {break}
|
}
|
||||||
if {$j== 0} {
|
newfile HISTOGRAM_XY
|
||||||
PulserOff
|
while {$i_bool==0} {
|
||||||
} else {
|
drive $mot $currentmot
|
||||||
set pulservolt [VoltScale $j]
|
oct oscillate_count $oscno
|
||||||
pulserDC $pulservolt
|
oct oscillate start
|
||||||
PulserOn
|
hmm countblock
|
||||||
}
|
save $i
|
||||||
sampledescription voltage $j
|
if {($motdir > 0)} {
|
||||||
broadcast voltage $j
|
|
||||||
newfile HISTOGRAM_XY
|
set currentmot [expr {$currentmot + $tstep}]
|
||||||
set m 0
|
if {$currentmot > $tfin} {set i_bool 1}
|
||||||
while {1} {
|
incr i
|
||||||
set n [expr {$m*$tstep+$tstart}]
|
} else {
|
||||||
if {$n> $tfin && $tstep > 0} {break}
|
set currentmot [expr {$currentmot - $tstep}]
|
||||||
if {$n< $tfin && $tstep < 0} {break}
|
if {$currentmot < $tstart} {set i_bool 1}
|
||||||
drive $mot $n
|
incr i -1
|
||||||
oscmd start $oscno
|
}
|
||||||
hmm countblock
|
}
|
||||||
save $m
|
set motdir [expr {(-1*$motdir)}]
|
||||||
incr m
|
}
|
||||||
}
|
|
||||||
oscmd stop
|
proc VListTexScan {voltlist mot tstart tstep tfin oscno} {
|
||||||
incr i
|
global rampstep rampdelay
|
||||||
}
|
set curvolt [lindex $voltlist 0]
|
||||||
|
broadcast $curvolt
|
||||||
|
SetVolt $curvolt
|
||||||
|
foreach volt $voltlist {
|
||||||
|
broadcast $volt
|
||||||
|
VoltSetStep $curvolt $rampstep $volt $rampdelay
|
||||||
|
SingleVTexScan $mot $tstart $tstep $tfin $oscno
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -124,12 +165,10 @@ proc SquarePulseTexture {motor start step numsteps volt freq bins oscno} {
|
|||||||
|
|
||||||
for {set i 0} {$i < $numsteps} {incr i} {
|
for {set i 0} {$i < $numsteps} {incr i} {
|
||||||
drive $motor [expr $i*$step+$start]
|
drive $motor [expr $i*$step+$start]
|
||||||
oscmd start $oscno
|
oct oscillate_count $oscno
|
||||||
hmm countblock
|
oct oscillate start
|
||||||
save $i
|
save $i
|
||||||
}
|
}
|
||||||
|
|
||||||
oscmd stop
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc UniPulseTexture {motor start step numsteps volt freq bins oscno} {
|
proc UniPulseTexture {motor start step numsteps volt freq bins oscno} {
|
||||||
@ -144,12 +183,10 @@ proc UniPulseTexture {motor start step numsteps volt freq bins oscno} {
|
|||||||
|
|
||||||
for {set i 0} {$i < $numsteps} {incr i} {
|
for {set i 0} {$i < $numsteps} {incr i} {
|
||||||
drive $motor [expr $i*$step+$start]
|
drive $motor [expr $i*$step+$start]
|
||||||
oscmd start $oscno
|
oct oscillate_count $oscno
|
||||||
hmm countblock
|
oct oscillate start
|
||||||
save $i
|
save $i
|
||||||
}
|
}
|
||||||
|
|
||||||
oscmd stop
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -162,8 +199,8 @@ proc BehlkePulseTexture {motor start step numsteps freq bins oscno} {
|
|||||||
PulserOn
|
PulserOn
|
||||||
for {set i 0} {$i < $numsteps} {incr i} {
|
for {set i 0} {$i < $numsteps} {incr i} {
|
||||||
drive $motor [expr $i*$step+$start]
|
drive $motor [expr $i*$step+$start]
|
||||||
oscmd start $oscno
|
oct oscillate_count $oscno
|
||||||
hmm countblock
|
oct oscillate start
|
||||||
save $i
|
save $i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -189,12 +226,11 @@ proc SquarePulseVolt {start step fin freq bins oscno} {
|
|||||||
PulserOn
|
PulserOn
|
||||||
# sct_pulser send "APPL:SQU $freq,$pulservolt,0"
|
# sct_pulser send "APPL:SQU $freq,$pulservolt,0"
|
||||||
}
|
}
|
||||||
oscmd start $oscno
|
oct oscillate_count $oscno
|
||||||
hmm countblock
|
oct oscillate start
|
||||||
save $i
|
save $i
|
||||||
incr i
|
incr i
|
||||||
}
|
}
|
||||||
oscmd stop
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc SquarePulseFreq {volt freqlist bins oscno} {
|
proc SquarePulseFreq {volt freqlist bins oscno} {
|
||||||
@ -209,12 +245,11 @@ proc SquarePulseFreq {volt freqlist bins oscno} {
|
|||||||
PulserSquare $freq $pulservolt
|
PulserSquare $freq $pulservolt
|
||||||
PulserOn
|
PulserOn
|
||||||
# sct_pulser send "APPL:SQU $freq,$pulservolt,0"
|
# sct_pulser send "APPL:SQU $freq,$pulservolt,0"
|
||||||
oscmd start $oscno
|
oct oscillate_count $oscno
|
||||||
hmm countblock
|
oct oscillate start
|
||||||
save $i
|
save $i
|
||||||
incr i
|
incr i
|
||||||
}
|
}
|
||||||
oscmd stop
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc BehlkePulseFreq {freqlist bins oscno} {
|
proc BehlkePulseFreq {freqlist bins oscno} {
|
||||||
@ -227,12 +262,11 @@ proc BehlkePulseFreq {freqlist bins oscno} {
|
|||||||
wait 3
|
wait 3
|
||||||
PulserSquareOffs $freq 2.5 2.5
|
PulserSquareOffs $freq 2.5 2.5
|
||||||
PulserOn
|
PulserOn
|
||||||
oscmd start $oscno
|
oct oscillate_count $oscno
|
||||||
hmm countblock
|
oct oscillate start
|
||||||
save $i
|
save $i
|
||||||
incr i
|
incr i
|
||||||
}
|
}
|
||||||
oscmd stop
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc SinePulseFreq {volt freqlist bins oscno} {
|
proc SinePulseFreq {volt freqlist bins oscno} {
|
||||||
@ -246,12 +280,11 @@ proc SinePulseFreq {volt freqlist bins oscno} {
|
|||||||
wait 3
|
wait 3
|
||||||
PulserSin $freq $pulservolt
|
PulserSin $freq $pulservolt
|
||||||
PulserOn
|
PulserOn
|
||||||
oscmd start $oscno
|
oct oscillate_count $oscno
|
||||||
hmm countblock
|
oct oscillate start
|
||||||
save $i
|
save $i
|
||||||
incr i
|
incr i
|
||||||
}
|
}
|
||||||
oscmd stop
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -271,12 +304,11 @@ proc UniPulseFreq {volt freqlist bins oscno} {
|
|||||||
PulserSquareOffs $freq $pulservolt $pulseroffs
|
PulserSquareOffs $freq $pulservolt $pulseroffs
|
||||||
PulserOn
|
PulserOn
|
||||||
# sct_pulser send "APPL:SQU $freq,$pulservolt,[expr {$pulservolt/2}]"
|
# sct_pulser send "APPL:SQU $freq,$pulservolt,[expr {$pulservolt/2}]"
|
||||||
oscmd start $oscno
|
oct oscillate_count $oscno
|
||||||
hmm countblock
|
oct oscillate start
|
||||||
save $i
|
save $i
|
||||||
incr i
|
incr i
|
||||||
}
|
}
|
||||||
oscmd stop
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc UniPulseFatigue {volt freq bins oscno reps runs} {
|
proc UniPulseFatigue {volt freq bins oscno reps runs} {
|
||||||
@ -290,13 +322,14 @@ proc UniPulseFatigue {volt freq bins oscno reps runs} {
|
|||||||
for {set i 0} {$i<$runs} {incr i} {
|
for {set i 0} {$i<$runs} {incr i} {
|
||||||
newfile HISTOGRAM_XYT
|
newfile HISTOGRAM_XYT
|
||||||
for {set j 0} {$j<$reps} {incr j} {
|
for {set j 0} {$j<$reps} {incr j} {
|
||||||
oscmd start $oscno
|
oct oscillate_count $oscno
|
||||||
hmm countblock
|
oct oscillate start
|
||||||
save $j
|
save $j
|
||||||
}
|
}
|
||||||
oscmd stop
|
oscmd stop
|
||||||
}
|
}
|
||||||
PulserOff
|
PulserOff
|
||||||
|
set pulserstate 0
|
||||||
Histmem_strobo_off
|
Histmem_strobo_off
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -315,6 +348,7 @@ proc PulserBurst {} {
|
|||||||
if {[string first 1 $sval] >-1} {break}
|
if {[string first 1 $sval] >-1} {break}
|
||||||
}
|
}
|
||||||
PulserOff
|
PulserOff
|
||||||
|
set pulserstate 0
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -338,6 +372,7 @@ proc VoltPulseRun {vlo vhi freq cycl} {
|
|||||||
sct_pulser send "BURS:NCYC $prem; NCYC?"
|
sct_pulser send "BURS:NCYC $prem; NCYC?"
|
||||||
PulserBurst
|
PulserBurst
|
||||||
PulserOff
|
PulserOff
|
||||||
|
set pulserstate 0
|
||||||
sct_pulser send "BURS:STAT OFF; STAT?"
|
sct_pulser send "BURS:STAT OFF; STAT?"
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -376,6 +411,7 @@ proc OneTri {volt period} {
|
|||||||
sct_pulser send "BURS:NCYC 1; NCYC?"
|
sct_pulser send "BURS:NCYC 1; NCYC?"
|
||||||
PulserBurst
|
PulserBurst
|
||||||
PulserOff
|
PulserOff
|
||||||
|
set pulserstat 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -384,6 +420,9 @@ publish GetVolt user
|
|||||||
publish SetDC user
|
publish SetDC user
|
||||||
publish SetVolt user
|
publish SetVolt user
|
||||||
publish SetVoltScale user
|
publish SetVoltScale user
|
||||||
|
publish SingleVTexScan user
|
||||||
|
publish VListTexScan user
|
||||||
|
publish SetRampParms user
|
||||||
publish SingleVolt user
|
publish SingleVolt user
|
||||||
publish VoltRamp user
|
publish VoltRamp user
|
||||||
publish SquarePulseVolt user
|
publish SquarePulseVolt user
|
||||||
@ -399,5 +438,6 @@ publish SquarePulseTexture user
|
|||||||
publish BehlkePulseTexture user
|
publish BehlkePulseTexture user
|
||||||
publish BehlkePulseFreq user
|
publish BehlkePulseFreq user
|
||||||
publish UniPulseTexture user
|
publish UniPulseTexture user
|
||||||
|
publish VoltSetStep user
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ proc PulserSquareOffs {Freq Volt Offs} {
|
|||||||
proc PulserDC {Volt} {
|
proc PulserDC {Volt} {
|
||||||
#NOTE: Setting FUNC DC generates a remote ctrl error if the
|
#NOTE: Setting FUNC DC generates a remote ctrl error if the
|
||||||
# burst mode happens to be on
|
# burst mode happens to be on
|
||||||
set resp [sct_pulser transact "BURS:STAT OFF;:FUNC DC;:VOLT:OFFS $Volt; OFFS?"]
|
set resp [sct_pulser send "BURS:STAT OFF;:FUNC DC;:VOLT:OFFS $Volt; OFFS?"]
|
||||||
broadcast $resp
|
broadcast $resp
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -35,8 +35,8 @@ proc ::counter::ic_initialize {args} {
|
|||||||
# This must be sourced before the hmm_configuration.tcl until we separate the scan setup from the hmm setup
|
# This must be sourced before the hmm_configuration.tcl until we separate the scan setup from the hmm setup
|
||||||
for {set i 0; set n 1} {$i < $isc_numchannels} {incr i; incr n} {
|
for {set i 0; set n 1} {$i < $isc_numchannels} {incr i; incr n} {
|
||||||
MakeCounter bm$n anstomonitor [ params host $isc_monitor_address port [lindex $isc_portlist $i] ]
|
MakeCounter bm$n anstomonitor [ params host $isc_monitor_address port [lindex $isc_portlist $i] ]
|
||||||
bm$n send scan=1
|
bm$n send set scan=1
|
||||||
bm$n send sample=10
|
bm$n send set sample=10
|
||||||
append bm_list "bm$n "
|
append bm_list "bm$n "
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,860 @@
|
|||||||
|
# Generated driver for oxford10tlv
|
||||||
|
# vim: ft=tcl tabstop=8 softtabstop=2 shiftwidth=2 nocindent smartindent
|
||||||
|
#
|
||||||
|
|
||||||
|
namespace eval ::scobj::oxford10tlv {
|
||||||
|
set debug_threshold 5
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ::scobj::oxford10tlv::debug_log {tc_root debug_level debug_string} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
set debug_threshold [hgetpropval ${tc_root} debug_threshold]
|
||||||
|
if {${debug_level} >= ${debug_threshold}} {
|
||||||
|
set now [clock seconds]
|
||||||
|
set ts [clock format ${now} -format "%Y%m%d"]
|
||||||
|
set log_file_name "../log/oxford10tlv_[basename ${tc_root}]_${ts}.log"
|
||||||
|
set fd [open "${log_file_name}" "a"]
|
||||||
|
set ts [clock format ${now} -format "%T"]
|
||||||
|
puts ${fd} "${ts} ${debug_string}"
|
||||||
|
close ${fd}
|
||||||
|
}
|
||||||
|
} catch_message ]
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ::scobj::oxford10tlv::sics_log {debug_level debug_string} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
set debug_threshold ${::scobj::oxford10tlv::debug_threshold}
|
||||||
|
if {${debug_level} >= ${debug_threshold}} {
|
||||||
|
sicslog "::scobj::oxford10tlv::${debug_string}"
|
||||||
|
}
|
||||||
|
} catch_message ]
|
||||||
|
}
|
||||||
|
|
||||||
|
# check function for hset change
|
||||||
|
proc ::scobj::oxford10tlv::check_error {tc_root} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "check_error tc_root=${tc_root} sct=[sct] target=[sct target]"
|
||||||
|
set setpoint [sct target]
|
||||||
|
if { [hpropexists [sct] lowerlimit] } {
|
||||||
|
set lolimit [sct lowerlimit]
|
||||||
|
} else {
|
||||||
|
# lowerlimit not set, use target
|
||||||
|
set lolimit [sct target]
|
||||||
|
}
|
||||||
|
if { [hpropexists [sct] upperlimit] } {
|
||||||
|
set hilimit [sct upperlimit]
|
||||||
|
} else {
|
||||||
|
# upperlimit not set, use target
|
||||||
|
set hilimit [sct target]
|
||||||
|
}
|
||||||
|
# check_error hook code starts
|
||||||
|
if { [hpropexists [sct] driving] } {
|
||||||
|
if { [hpropexists [sct] writestatus] && [sct writestatus] == "start" } {
|
||||||
|
set my_state [hval ${tc_root}/magnet/state]
|
||||||
|
if {${my_state} != "IDLE"} {
|
||||||
|
error "Cannot run/drive in state '${my_state}', must be 'IDLE'"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
error "Use run/drive and not hset"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# check_error hook code ends
|
||||||
|
if { ${setpoint} < ${lolimit} || ${setpoint} > ${hilimit} } {
|
||||||
|
error "setpoint ${setpoint} violates limits (${lolimit}..${hilimit}) on [sct]"
|
||||||
|
}
|
||||||
|
return OK
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# checklimits function for driveable interface
|
||||||
|
proc ::scobj::oxford10tlv::checklimits {tc_root} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "checklimits tc_root=${tc_root} sct=[sct] target=[sct target]"
|
||||||
|
set setpoint [sct target]
|
||||||
|
if { [hpropexists [sct] lowerlimit] } {
|
||||||
|
set lolimit [sct lowerlimit]
|
||||||
|
} else {
|
||||||
|
# lowerlimit not set, use target
|
||||||
|
set lolimit [sct target]
|
||||||
|
}
|
||||||
|
if { [hpropexists [sct] upperlimit] } {
|
||||||
|
set hilimit [sct upperlimit]
|
||||||
|
} else {
|
||||||
|
# upperlimit not set, use target
|
||||||
|
set hilimit [sct target]
|
||||||
|
}
|
||||||
|
# checklimits hook code goes here
|
||||||
|
if { ${setpoint} < ${lolimit} || ${setpoint} > ${hilimit} } {
|
||||||
|
sct driving 0
|
||||||
|
error "setpoint ${setpoint} violates limits (${lolimit}..${hilimit}) on [sct]"
|
||||||
|
}
|
||||||
|
return OK
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# check function for hset change
|
||||||
|
proc ::scobj::oxford10tlv::checkrange {tc_root} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "checkrange tc_root=${tc_root} sct=[sct] target=[sct target]"
|
||||||
|
set setpoint [sct target]
|
||||||
|
if { [hpropexists [sct] lowerlimit] } {
|
||||||
|
set lolimit [sct lowerlimit]
|
||||||
|
} else {
|
||||||
|
# lowerlimit not set, use target
|
||||||
|
set lolimit [sct target]
|
||||||
|
}
|
||||||
|
if { [hpropexists [sct] upperlimit] } {
|
||||||
|
set hilimit [sct upperlimit]
|
||||||
|
} else {
|
||||||
|
# upperlimit not set, use target
|
||||||
|
set hilimit [sct target]
|
||||||
|
}
|
||||||
|
# checkrange hook code goes here
|
||||||
|
if { ${setpoint} < ${lolimit} || ${setpoint} > ${hilimit} } {
|
||||||
|
error "setpoint ${setpoint} violates limits (${lolimit}..${hilimit}) on [sct]"
|
||||||
|
}
|
||||||
|
return OK
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# checkstatus function for driveable interface
|
||||||
|
proc ::scobj::oxford10tlv::checkstatus {tc_root} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
# checkstatus hook code goes here
|
||||||
|
if {[sct driving]} {
|
||||||
|
set sp "[sct target]"
|
||||||
|
if {[hpropexists [sct] simulated] && [sct simulated] == "true"} {
|
||||||
|
set pv "${sp}"
|
||||||
|
hupdateif ${tc_root}/[sct driveable] ${sp}
|
||||||
|
} else {
|
||||||
|
set pv "[hval ${tc_root}/[sct driveable]]"
|
||||||
|
}
|
||||||
|
if { abs(${pv} - ${sp}) <= [sct tolerance] } {
|
||||||
|
if { [hpropexists [sct] settle_time] } {
|
||||||
|
if { [hpropexists [sct] settle_time_start] } {
|
||||||
|
if { [sct utime] - [sct settle_time_start] >= [sct settle_time]} {
|
||||||
|
sct driving 0
|
||||||
|
return "idle"
|
||||||
|
}
|
||||||
|
return "busy"
|
||||||
|
} else {
|
||||||
|
sct utime settle_time_start
|
||||||
|
return "busy"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sct driving 0
|
||||||
|
return "idle"
|
||||||
|
}
|
||||||
|
if { [hpropexists [sct] settle_time_start] } {
|
||||||
|
hdelprop [sct] settle_time_start
|
||||||
|
}
|
||||||
|
return "busy"
|
||||||
|
} else {
|
||||||
|
return "idle"
|
||||||
|
}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to request the read of a parameter on a device
|
||||||
|
proc ::scobj::oxford10tlv::fetch_state {tc_root nextState cmd_str} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "fetch_state tc_root=${tc_root} sct=[sct] cmd=${cmd_str}"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set cmd "${cmd_str}"
|
||||||
|
# fetch_state hook code starts
|
||||||
|
set my_state [hval [sct]]
|
||||||
|
set cmd "@@NOSEND@@"
|
||||||
|
if {${my_state} == "START"} {
|
||||||
|
set cmd "setHS ON\r\n@@NOREPLY@@"
|
||||||
|
sct utime start_time
|
||||||
|
hupdate [sct] "HTRON"
|
||||||
|
} elseif {${my_state} == "HTRON"} {
|
||||||
|
if {[hpropexists [sct] htron_delay]} {
|
||||||
|
set htron_delay [sct htron_delay]
|
||||||
|
if {$htron_delay < 10} {
|
||||||
|
set htron_delay 30
|
||||||
|
} elseif {$htron_delay > 60} {
|
||||||
|
set htron_delay 30
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
set htron_delay 30
|
||||||
|
}
|
||||||
|
if {[sct utime] - [sct start_time] > $htron_delay} {
|
||||||
|
set cmd "setF [hval ${tc_root}/magnet/setpoint]\r\n@@NOREPLY@@"
|
||||||
|
hupdate [sct] "DRIVE"
|
||||||
|
} else {
|
||||||
|
set nextState "idle"
|
||||||
|
}
|
||||||
|
} elseif {${my_state} == "DRIVE"} {
|
||||||
|
if {[hgetpropval ${tc_root}/magnet/setpoint driving] == 0} {
|
||||||
|
set cmd "setHS OFF\r\n@@NOREPLY@@"
|
||||||
|
sct utime start_time
|
||||||
|
hupdate [sct] "HTROFF"
|
||||||
|
} else {
|
||||||
|
set nextState "idle"
|
||||||
|
}
|
||||||
|
} elseif {${my_state} == "HTROFF"} {
|
||||||
|
if {[hpropexists [sct] htroff_delay]} {
|
||||||
|
set htroff_delay [sct htroff_delay]
|
||||||
|
if {$htroff_delay <= 10} {
|
||||||
|
set htroff_delay 30
|
||||||
|
} elseif {$htroff_delay >= 60} {
|
||||||
|
set htroff_delay 30
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
set htroff_delay 30
|
||||||
|
}
|
||||||
|
if {[sct utime] - [sct start_time] > $htroff_delay} {
|
||||||
|
hupdate [sct] "IDLE"
|
||||||
|
} else {
|
||||||
|
set nextState "idle"
|
||||||
|
}
|
||||||
|
} elseif {${my_state} == "IDLE"} {
|
||||||
|
set nextState "idle"
|
||||||
|
}
|
||||||
|
# fetch_state hook code ends
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
debug_log ${tc_root} 9 "[sct] error: [sct geterror]"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
debug_log ${tc_root} 1 "fetch_state sct send ${cmd}"
|
||||||
|
if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} {
|
||||||
|
sct send "${cmd}"
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to request the read of a parameter on a device
|
||||||
|
proc ::scobj::oxford10tlv::getValue {tc_root nextState cmd_str} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "getValue tc_root=${tc_root} sct=[sct] cmd=${cmd_str}"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set cmd "${cmd_str}"
|
||||||
|
# getValue hook code goes here
|
||||||
|
debug_log ${tc_root} 1 "getValue sct send ${cmd}"
|
||||||
|
if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} {
|
||||||
|
sct send "${cmd}"
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# halt function for driveable interface
|
||||||
|
proc ::scobj::oxford10tlv::halt {tc_root} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "halt tc_root=${tc_root} sct=[sct] driving=[sct driving]"
|
||||||
|
### TODO hset [sct] [hval [sct]]
|
||||||
|
# halt hook code goes here
|
||||||
|
sct driving 0
|
||||||
|
return "idle"
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to check the write parameter on a device
|
||||||
|
proc ::scobj::oxford10tlv::noResponse {tc_root} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "noResponse tc_root=${tc_root} sct=[sct] resp=[sct result]"
|
||||||
|
# noResponse hook code goes here
|
||||||
|
return "idle"
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to parse the read of a parameter on a device
|
||||||
|
proc ::scobj::oxford10tlv::rdValue {tc_root} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "rdValue tc_root=${tc_root} sct=[sct] result=[sct result]"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set data [sct result]
|
||||||
|
set nextState "idle"
|
||||||
|
if {[string equal -nocase -length 7 ${data} "ASCERR:"]} {
|
||||||
|
# the protocol driver has reported an error
|
||||||
|
sct geterror "${data}"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
# rdValue hook code goes here
|
||||||
|
if { ${data} != [sct oldval] } {
|
||||||
|
debug_log ${tc_root} 1 "[sct] changed to new:${data}, from old:[sct oldval]"
|
||||||
|
sct oldval ${data}
|
||||||
|
sct update ${data}
|
||||||
|
sct utime readtime
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to parse the read of a parameter on a device
|
||||||
|
proc ::scobj::oxford10tlv::read_field {tc_root} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "read_field tc_root=${tc_root} sct=[sct] result=[sct result]"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set data [sct result]
|
||||||
|
set nextState "idle"
|
||||||
|
if {[string equal -nocase -length 7 ${data} "ASCERR:"]} {
|
||||||
|
# the protocol driver has reported an error
|
||||||
|
sct geterror "${data}"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
# read_field hook code starts
|
||||||
|
set s1 [string trimright [sct result] "\n"]
|
||||||
|
set s2 [split $s1 ";"]
|
||||||
|
if {[llength $s2] > 1} {
|
||||||
|
if {[string equal -nocase -length 14 "Field_Current=" [lindex $s2 0]]} {
|
||||||
|
#hupdateif ${tc_root}/magnet/current [string range [lindex $s2 0] 14 end]
|
||||||
|
set current [string range [lindex $s2 0] 14 end]
|
||||||
|
hsetprop ${tc_root}/magnet/current result ${current}
|
||||||
|
set ns [namespace current]
|
||||||
|
sct with ${tc_root}/magnet/current "${ns}::rdValue ${tc_root}"
|
||||||
|
}
|
||||||
|
if {[string equal -nocase -length 12 "Field_Tesla=" [lindex $s2 1]]} {
|
||||||
|
set data [string range [lindex $s2 1] 12 end]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# read_field hook code ends
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
debug_log ${tc_root} 9 "[sct] error: [sct geterror]"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
if { ${data} != [sct oldval] } {
|
||||||
|
debug_log ${tc_root} 1 "[sct] changed to new:${data}, from old:[sct oldval]"
|
||||||
|
sct oldval ${data}
|
||||||
|
sct update ${data}
|
||||||
|
sct utime readtime
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to parse the read of a parameter on a device
|
||||||
|
proc ::scobj::oxford10tlv::read_heater {tc_root} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "read_heater tc_root=${tc_root} sct=[sct] result=[sct result]"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set data [sct result]
|
||||||
|
set nextState "idle"
|
||||||
|
if {[string equal -nocase -length 7 ${data} "ASCERR:"]} {
|
||||||
|
# the protocol driver has reported an error
|
||||||
|
sct geterror "${data}"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
# read_heater hook code goes here
|
||||||
|
if { ${data} != [sct oldval] } {
|
||||||
|
debug_log ${tc_root} 1 "[sct] changed to new:${data}, from old:[sct oldval]"
|
||||||
|
sct oldval ${data}
|
||||||
|
sct update ${data}
|
||||||
|
sct utime readtime
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to parse the read of a parameter on a device
|
||||||
|
proc ::scobj::oxford10tlv::read_rate {tc_root} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "read_rate tc_root=${tc_root} sct=[sct] result=[sct result]"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set data [sct result]
|
||||||
|
set nextState "idle"
|
||||||
|
if {[string equal -nocase -length 7 ${data} "ASCERR:"]} {
|
||||||
|
# the protocol driver has reported an error
|
||||||
|
sct geterror "${data}"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
# read_rate hook code goes here
|
||||||
|
if { ${data} != [sct oldval] } {
|
||||||
|
debug_log ${tc_root} 1 "[sct] changed to new:${data}, from old:[sct oldval]"
|
||||||
|
sct oldval ${data}
|
||||||
|
sct update ${data}
|
||||||
|
sct utime readtime
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to parse the read of a parameter on a device
|
||||||
|
proc ::scobj::oxford10tlv::read_state {tc_root} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "read_state tc_root=${tc_root} sct=[sct] result=[sct result]"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set data [sct result]
|
||||||
|
set nextState "idle"
|
||||||
|
if {[string equal -nocase -length 7 ${data} "ASCERR:"]} {
|
||||||
|
# the protocol driver has reported an error
|
||||||
|
sct geterror "${data}"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
# read_state hook code starts
|
||||||
|
return "idle"
|
||||||
|
# read_state hook code ends
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
debug_log ${tc_root} 9 "[sct] error: [sct geterror]"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
if { ${data} != [sct oldval] } {
|
||||||
|
debug_log ${tc_root} 1 "[sct] changed to new:${data}, from old:[sct oldval]"
|
||||||
|
sct oldval ${data}
|
||||||
|
sct update ${data}
|
||||||
|
sct utime readtime
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to write a parameter value on a device
|
||||||
|
proc ::scobj::oxford10tlv::setValue {tc_root nextState cmd_str} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "setValue tc_root=${tc_root} sct=[sct] cmd=${cmd_str}"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set par [sct target]
|
||||||
|
set cmd "${cmd_str}${par}"
|
||||||
|
# setValue hook code goes here
|
||||||
|
if { [hpropexists [sct] driving] } {
|
||||||
|
if { [hpropexists [sct] writestatus] && [sct writestatus] == "start" } {
|
||||||
|
sct driving 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
debug_log ${tc_root} 1 "setValue sct send ${cmd}"
|
||||||
|
if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} {
|
||||||
|
sct send "${cmd}"
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to write a parameter value on a device
|
||||||
|
proc ::scobj::oxford10tlv::write_heater {tc_root nextState cmd_str} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "write_heater tc_root=${tc_root} sct=[sct] cmd=${cmd_str}"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set par [sct target]
|
||||||
|
set cmd "${cmd_str}${par}"
|
||||||
|
# write_heater hook code starts
|
||||||
|
if {${par} == 0} {
|
||||||
|
set cmd "setHS OFF\r\n@@NOREPLY@@"
|
||||||
|
} elseif {${par} == 1} {
|
||||||
|
set cmd "setHS ON\r\n@@NOREPLY@@"
|
||||||
|
} else {
|
||||||
|
error "Invalid parameter '${par}' should be 0 or 1"
|
||||||
|
}
|
||||||
|
# Invoke the read function to set the value as if read back
|
||||||
|
sct result $par
|
||||||
|
read_heater ${tc_root}
|
||||||
|
# write_heater hook code ends
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
debug_log ${tc_root} 9 "[sct] error: [sct geterror]"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
if { [hpropexists [sct] driving] } {
|
||||||
|
if { [hpropexists [sct] writestatus] && [sct writestatus] == "start" } {
|
||||||
|
sct driving 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
debug_log ${tc_root} 1 "write_heater sct send ${cmd}"
|
||||||
|
if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} {
|
||||||
|
sct send "${cmd}"
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to write a parameter value on a device
|
||||||
|
proc ::scobj::oxford10tlv::write_rate {tc_root nextState cmd_str} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "write_rate tc_root=${tc_root} sct=[sct] cmd=${cmd_str}"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set par [sct target]
|
||||||
|
set cmd "${cmd_str}${par}"
|
||||||
|
# write_rate hook code starts
|
||||||
|
if {${par} >= 0 && ${par} <= 10} {
|
||||||
|
set cmd "setR ${par}\r\n@@NOREPLY@@"
|
||||||
|
} else {
|
||||||
|
error "Invalid parameter '${par}' should be 0 to 10"
|
||||||
|
}
|
||||||
|
# Invoke the read function to set the value as if read back
|
||||||
|
sct result $par
|
||||||
|
read_rate ${tc_root}
|
||||||
|
# write_rate hook code ends
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
debug_log ${tc_root} 9 "[sct] error: [sct geterror]"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
if { [hpropexists [sct] driving] } {
|
||||||
|
if { [hpropexists [sct] writestatus] && [sct writestatus] == "start" } {
|
||||||
|
sct driving 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
debug_log ${tc_root} 1 "write_rate sct send ${cmd}"
|
||||||
|
if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} {
|
||||||
|
sct send "${cmd}"
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to write a parameter value on a device
|
||||||
|
proc ::scobj::oxford10tlv::write_setpoint {tc_root nextState cmd_str} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
debug_log ${tc_root} 1 "write_setpoint tc_root=${tc_root} sct=[sct] cmd=${cmd_str}"
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
hdelprop [sct] geterror
|
||||||
|
}
|
||||||
|
set par [sct target]
|
||||||
|
set cmd "${cmd_str}${par}"
|
||||||
|
# write_setpoint hook code starts
|
||||||
|
hset ${tc_root}/magnet/state "START"
|
||||||
|
# Force the driving flag for the state check
|
||||||
|
sct driving 1
|
||||||
|
# Set the value on the field
|
||||||
|
hupdateif [sct] $par
|
||||||
|
# It's all over now
|
||||||
|
set cmd "@@NOSEND@@"
|
||||||
|
set nextState "idle"
|
||||||
|
# write_setpoint hook code ends
|
||||||
|
if { [hpropexists [sct] geterror] } {
|
||||||
|
debug_log ${tc_root} 9 "[sct] error: [sct geterror]"
|
||||||
|
error "[sct geterror]"
|
||||||
|
}
|
||||||
|
if { [hpropexists [sct] driving] } {
|
||||||
|
if { [hpropexists [sct] writestatus] && [sct writestatus] == "start" } {
|
||||||
|
sct driving 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
debug_log ${tc_root} 1 "write_setpoint sct send ${cmd}"
|
||||||
|
if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} {
|
||||||
|
sct send "${cmd}"
|
||||||
|
}
|
||||||
|
return ${nextState}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ::scobj::oxford10tlv::mkDriver { sct_controller name device_class simulation_flag ip_address tcp_port id datype interval } {
|
||||||
|
::scobj::oxford10tlv::sics_log 9 "::scobj::oxford10tlv::mkDriver ${sct_controller} ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port} ${id} ${datype} ${interval}"
|
||||||
|
set ns "[namespace current]"
|
||||||
|
set catch_status [ catch {
|
||||||
|
|
||||||
|
MakeSICSObj ${name} SCT_OBJECT
|
||||||
|
|
||||||
|
sicslist setatt ${name} driver oxford10tlv
|
||||||
|
sicslist setatt ${name} klass ${device_class}
|
||||||
|
sicslist setatt ${name} long_name ${name}
|
||||||
|
|
||||||
|
set scobj_hpath /sics/${name}
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet plain spy none
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/current plain user float
|
||||||
|
hsetprop ${scobj_hpath}/magnet/current control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/current data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/current mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/current nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/current oldval 0.0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/current klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/current sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/current type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/current nxalias "${name}_magnet_current"
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/field plain user float
|
||||||
|
hsetprop ${scobj_hpath}/magnet/field read ${ns}::getValue ${scobj_hpath} read_field {getF}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/field read_field ${ns}::read_field ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/field control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/field data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/field mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/field nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/field oldval 0.0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/field klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/field sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/field type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/field nxalias "${name}_magnet_field"
|
||||||
|
|
||||||
|
if {[string equal -nocase "${simulation_flag}" "false"]} {
|
||||||
|
${sct_controller} poll ${scobj_hpath}/magnet/field 5
|
||||||
|
hsetprop ${scobj_hpath}/magnet/field simulated false
|
||||||
|
} else {
|
||||||
|
::scobj::oxford10tlv::sics_log 9 "simulation_flag=${simulation_flag} => No poll/write for oxford10tlv"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/field simulated true
|
||||||
|
}
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/htr_sw plain user int
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw write ${ns}::write_heater ${scobj_hpath} noResponse {}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw noResponse ${ns}::noResponse ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw check ${ns}::checkrange ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw values 0,1
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw oldval 0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw nxalias "${name}_magnet_htr_sw"
|
||||||
|
|
||||||
|
if {[string equal -nocase "${simulation_flag}" "false"]} {
|
||||||
|
${sct_controller} write ${scobj_hpath}/magnet/htr_sw
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw simulated false
|
||||||
|
} else {
|
||||||
|
::scobj::oxford10tlv::sics_log 9 "simulation_flag=${simulation_flag} => No poll/write for oxford10tlv"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/htr_sw simulated true
|
||||||
|
}
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/rate plain user float
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate write ${ns}::write_rate ${scobj_hpath} noResponse {}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate noResponse ${ns}::noResponse ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate check ${ns}::checkrange ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate oldval 0.0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate nxalias "${name}_magnet_rate"
|
||||||
|
|
||||||
|
if {[string equal -nocase "${simulation_flag}" "false"]} {
|
||||||
|
${sct_controller} write ${scobj_hpath}/magnet/rate
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate simulated false
|
||||||
|
} else {
|
||||||
|
::scobj::oxford10tlv::sics_log 9 "simulation_flag=${simulation_flag} => No poll/write for oxford10tlv"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/rate simulated true
|
||||||
|
}
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/setpoint plain user float
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint write ${ns}::write_setpoint ${scobj_hpath} noResponse {}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint noResponse ${ns}::noResponse ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint check ${ns}::check_error ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint driving 0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint checklimits ${ns}::checklimits ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint checkstatus ${ns}::checkstatus ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint halt ${ns}::halt ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint driveable magnet/field
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint data true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint mutable true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint nxsave true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint lowerlimit -10
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint upperlimit 10
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint tolerance 0.01
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint oldval 0.0
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint klass "parameter"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint settle_time "30"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint type "drivable"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint nxalias "${name}_magnet_setpoint"
|
||||||
|
|
||||||
|
if {[string equal -nocase "${simulation_flag}" "false"]} {
|
||||||
|
${sct_controller} write ${scobj_hpath}/magnet/setpoint
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint simulated false
|
||||||
|
} else {
|
||||||
|
::scobj::oxford10tlv::sics_log 9 "simulation_flag=${simulation_flag} => No poll/write for oxford10tlv"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/setpoint simulated true
|
||||||
|
}
|
||||||
|
|
||||||
|
hfactory ${scobj_hpath}/magnet/state plain user text
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state read ${ns}::fetch_state ${scobj_hpath} read_state {}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state read_state ${ns}::read_state ${scobj_hpath}
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state control true
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state data false
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state mutable false
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state nxsave false
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state oldval IDLE
|
||||||
|
hset ${scobj_hpath}/magnet/state IDLE
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state htroff_delay "10"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state htron_delay "10"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state type "part"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state nxalias "${name}_magnet_state"
|
||||||
|
|
||||||
|
if {[string equal -nocase "${simulation_flag}" "false"]} {
|
||||||
|
${sct_controller} poll ${scobj_hpath}/magnet/state 1
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state simulated false
|
||||||
|
} else {
|
||||||
|
::scobj::oxford10tlv::sics_log 9 "simulation_flag=${simulation_flag} => No poll/write for oxford10tlv"
|
||||||
|
hsetprop ${scobj_hpath}/magnet/state simulated true
|
||||||
|
}
|
||||||
|
hsetprop ${scobj_hpath}/magnet data "true"
|
||||||
|
hsetprop ${scobj_hpath}/magnet klass "@none"
|
||||||
|
hsetprop ${scobj_hpath}/magnet type "part"
|
||||||
|
ansto_makesctdrive ${name}_magnet_setpoint ${scobj_hpath}/magnet/setpoint ${scobj_hpath}/magnet/field ${sct_controller}
|
||||||
|
hsetprop ${scobj_hpath} driver oxford10tlv
|
||||||
|
hsetprop ${scobj_hpath} klass ${device_class}
|
||||||
|
hsetprop ${scobj_hpath} data true
|
||||||
|
hsetprop ${scobj_hpath} debug_threshold 5
|
||||||
|
# mkDriver hook code goes here
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ::scobj::oxford10tlv::add_driver {name device_class simulation_flag ip_address tcp_port id datype interval} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
::scobj::oxford10tlv::sics_log 9 "::scobj::oxford10tlv::add_driver ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port} ${id} ${datype} ${interval}"
|
||||||
|
if {[string equal -nocase "${simulation_flag}" "false"]} {
|
||||||
|
if {[string equal -nocase "aqadapter" "${ip_address}"]} {
|
||||||
|
::scobj::oxford10tlv::sics_log 9 "makesctcontroller sct_${name} aqadapter ${tcp_port}"
|
||||||
|
makesctcontroller sct_${name} aqadapter ${tcp_port}
|
||||||
|
} else {
|
||||||
|
::scobj::oxford10tlv::sics_log 9 "makesctcontroller sct_${name} std ${ip_address}:${tcp_port}"
|
||||||
|
makesctcontroller sct_${name} std ${ip_address}:${tcp_port}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
::scobj::oxford10tlv::sics_log 9 "simulation_flag=${simulation_flag} => Null sctcontroller for oxford10tlv"
|
||||||
|
::scobj::oxford10tlv::sics_log 9 "makesctcontroller sct_${name} aqadapter NULL"
|
||||||
|
makesctcontroller sct_${name} aqadapter NULL
|
||||||
|
}
|
||||||
|
::scobj::oxford10tlv::sics_log 1 "::scobj::oxford10tlv::mkDriver sct_${name} ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port} ${id} ${datype} ${interval}"
|
||||||
|
::scobj::oxford10tlv::mkDriver sct_${name} ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port} ${id} ${datype} ${interval}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace eval ::scobj::oxford10tlv {
|
||||||
|
namespace export debug_threshold
|
||||||
|
namespace export debug_log
|
||||||
|
namespace export sics_log
|
||||||
|
namespace export mkDriver
|
||||||
|
namespace export add_driver
|
||||||
|
}
|
||||||
|
|
||||||
|
proc add_oxford10tlv {name ip_address tcp_port id datype interval} {
|
||||||
|
set simulation_flag "[string tolower [SplitReply [environment_simulation]]]"
|
||||||
|
::scobj::oxford10tlv::add_driver ${name} "environment" ${simulation_flag} ${ip_address} ${tcp_port} ${id} ${datype} ${interval}
|
||||||
|
}
|
||||||
|
|
||||||
|
clientput "file evaluation of sct_oxford10tlv.tcl"
|
||||||
|
::scobj::oxford10tlv::sics_log 9 "file evaluation of sct_oxford10tlv.tcl"
|
||||||
|
|
||||||
|
proc ::scobj::oxford10tlv::read_config {} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
set ns "::scobj::oxford10tlv"
|
||||||
|
dict for {k u} $::config_dict {
|
||||||
|
if { [dict exists $u "implementation"] } {
|
||||||
|
set simulation_flag "[string tolower [SplitReply [environment_simulation]]]"
|
||||||
|
set device_class "environment"
|
||||||
|
if { !([dict exists $u "name"] && [dict exists $u "enabled"]) } {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
set enabled [string tolower [dict get $u "enabled"]]
|
||||||
|
if { ! ([string equal -nocase $enabled "true" ] || [string equal -nocase $enabled "always"]) } {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if { [dict exists $u "simulation_group"] } {
|
||||||
|
set simulation_flag [SplitReply [[string tolower [dict get $u "simulation_group"]]]]
|
||||||
|
}
|
||||||
|
if { [dict exists $u "device_class"] } {
|
||||||
|
set device_class "[dict get $u "device_class"]"
|
||||||
|
}
|
||||||
|
set name [dict get $u name]
|
||||||
|
set implementation [dict get $u "implementation"]
|
||||||
|
if { !([dict exists $::config_dict $implementation]) } {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
set v [dict get $::config_dict $implementation]
|
||||||
|
if { !([dict exists $v "driver"]) } {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if { [string equal -nocase [dict get $v "driver"] "oxford10tlv"] } {
|
||||||
|
if { ![string equal -nocase "${simulation_flag}" "false"] } {
|
||||||
|
set asyncqueue "null"
|
||||||
|
${ns}::sics_log 9 "simulation_flag=${simulation_flag} => using null asyncqueue"
|
||||||
|
${ns}::sics_log 9 "makesctcontroller sct_${name} aqadapter NULL"
|
||||||
|
makesctcontroller sct_${name} aqadapter NULL
|
||||||
|
} elseif { [dict exists $v "asyncqueue"] } {
|
||||||
|
set asyncqueue [dict get $v "asyncqueue"]
|
||||||
|
if { [string equal -nocase ${asyncqueue} "sct"] } {
|
||||||
|
set ip_address [dict get $v ip]
|
||||||
|
set tcp_port [dict get $v port]
|
||||||
|
makesctcontroller sct_${name} std ${ip_address}:${tcp_port}
|
||||||
|
} else {
|
||||||
|
makesctcontroller sct_${name} aqadapter ${asyncqueue}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if { [dict exists $v "asyncprotocol"] } {
|
||||||
|
set asyncprotocol [dict get $v "asyncprotocol"]
|
||||||
|
} else {
|
||||||
|
set asyncprotocol ${name}_protocol
|
||||||
|
MakeAsyncProtocol ${asyncprotocol}
|
||||||
|
if { [dict exists $v "sendterminator"] } {
|
||||||
|
${asyncprotocol} sendterminator "[dict get $v "sendterminator"]"
|
||||||
|
} elseif { [dict exists $v "terminator"] } {
|
||||||
|
${asyncprotocol} sendterminator "[dict get $v "terminator"]"
|
||||||
|
}
|
||||||
|
if { [dict exists $v "replyterminator"] } {
|
||||||
|
${asyncprotocol} replyterminator "[dict get $v "replyterminator"]"
|
||||||
|
} elseif { [dict exists $v "terminator"] } {
|
||||||
|
${asyncprotocol} replyterminator "[dict get $v "terminator"]"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set asyncqueue ${name}_queue
|
||||||
|
set ip_address [dict get $v ip]
|
||||||
|
set tcp_port [dict get $v port]
|
||||||
|
MakeAsyncQueue ${asyncqueue} ${asyncprotocol} ${ip_address} ${tcp_port}
|
||||||
|
if { [dict exists $v "timeout"] } {
|
||||||
|
${asyncqueue} timeout "[dict get $v "timeout"]"
|
||||||
|
}
|
||||||
|
makesctcontroller sct_${name} aqadapter ${asyncqueue}
|
||||||
|
}
|
||||||
|
set arg_list [list]
|
||||||
|
set missing_list [list]
|
||||||
|
foreach arg {id datype interval} {
|
||||||
|
if {[dict exists $u $arg]} {
|
||||||
|
lappend arg_list "[dict get $u $arg]"
|
||||||
|
} elseif {[dict exists $v $arg]} {
|
||||||
|
lappend arg_list "[dict get $v $arg]"
|
||||||
|
} else {
|
||||||
|
${ns}::sics_log 9 "Missing configuration value $arg"
|
||||||
|
lappend missing_list $arg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if { [llength $missing_list] > 0 } {
|
||||||
|
error "$name is missing configuration values $missing_list"
|
||||||
|
}
|
||||||
|
${ns}::mkDriver sct_${name} ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port} {*}$arg_list
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
if { [info exists ::config_dict] } {
|
||||||
|
::scobj::oxford10tlv::read_config
|
||||||
|
} else {
|
||||||
|
::scobj::oxford10tlv::sics_log 5 "No config dict"
|
||||||
|
}
|
@ -22,7 +22,7 @@ driver tsi_smc = {
|
|||||||
permlink = 'B.SP01';
|
permlink = 'B.SP01';
|
||||||
writeable = 1;
|
writeable = 1;
|
||||||
write_function = setGauss;
|
write_function = setGauss;
|
||||||
lowerlimit = 0; upperlimit = 500.0; tolerance = 10;
|
lowerlimit = 0; upperlimit = 15000.0; tolerance = 10;
|
||||||
property settle_time = 5;
|
property settle_time = 5;
|
||||||
mutable = true;
|
mutable = true;
|
||||||
property klass = 'sensor';
|
property klass = 'sensor';
|
||||||
@ -49,7 +49,7 @@ driver tsi_smc = {
|
|||||||
priv = user;
|
priv = user;
|
||||||
type = text;
|
type = text;
|
||||||
var Rate = { type = float; write_command = "A"; };
|
var Rate = { type = float; write_command = "A"; };
|
||||||
var Lower = { type = float; write_command = "L"; lowerlimit = 0; upperlimit = 2; property 'units' = "A"; };
|
var Lower = { type = float; write_command = "L"; lowerlimit = 0; upperlimit = 60; property 'units' = "A"; };
|
||||||
var Ramp = { type = int; write_command = "R"; allowed = "0,1"; lowerlimit = 0; upperlimit = 1; };
|
var Ramp = { type = int; write_command = "R"; allowed = "0,1"; lowerlimit = 0; upperlimit = 1; };
|
||||||
var Pause = { type = int; write_command = "P"; allowed = "0,1"; lowerlimit = 0; upperlimit = 1; };
|
var Pause = { type = int; write_command = "P"; allowed = "0,1"; lowerlimit = 0; upperlimit = 1; };
|
||||||
};
|
};
|
||||||
|
@ -298,7 +298,7 @@ proc ::scobj::tsi_smc::mkDriver { sct_controller name device_class simulation_fl
|
|||||||
hsetprop ${scobj_hpath}/setpoint mutable true
|
hsetprop ${scobj_hpath}/setpoint mutable true
|
||||||
hsetprop ${scobj_hpath}/setpoint nxsave true
|
hsetprop ${scobj_hpath}/setpoint nxsave true
|
||||||
hsetprop ${scobj_hpath}/setpoint lowerlimit 0
|
hsetprop ${scobj_hpath}/setpoint lowerlimit 0
|
||||||
hsetprop ${scobj_hpath}/setpoint upperlimit 500.0
|
hsetprop ${scobj_hpath}/setpoint upperlimit 15000.0
|
||||||
hsetprop ${scobj_hpath}/setpoint tolerance 10
|
hsetprop ${scobj_hpath}/setpoint tolerance 10
|
||||||
hsetprop ${scobj_hpath}/setpoint permlink data_set "B[format "%02d" ${id}]SP01"
|
hsetprop ${scobj_hpath}/setpoint permlink data_set "B[format "%02d" ${id}]SP01"
|
||||||
hsetprop ${scobj_hpath}/setpoint @description "B[format "%02d" ${id}]SP01"
|
hsetprop ${scobj_hpath}/setpoint @description "B[format "%02d" ${id}]SP01"
|
||||||
@ -475,7 +475,7 @@ proc ::scobj::tsi_smc::mkDriver { sct_controller name device_class simulation_fl
|
|||||||
hsetprop ${scobj_hpath}/b/Lower mutable true
|
hsetprop ${scobj_hpath}/b/Lower mutable true
|
||||||
hsetprop ${scobj_hpath}/b/Lower nxsave true
|
hsetprop ${scobj_hpath}/b/Lower nxsave true
|
||||||
hsetprop ${scobj_hpath}/b/Lower lowerlimit 0
|
hsetprop ${scobj_hpath}/b/Lower lowerlimit 0
|
||||||
hsetprop ${scobj_hpath}/b/Lower upperlimit 2
|
hsetprop ${scobj_hpath}/b/Lower upperlimit 60
|
||||||
hsetprop ${scobj_hpath}/b/Lower oldval 0.0
|
hsetprop ${scobj_hpath}/b/Lower oldval 0.0
|
||||||
hsetprop ${scobj_hpath}/b/Lower klass "parameter"
|
hsetprop ${scobj_hpath}/b/Lower klass "parameter"
|
||||||
hsetprop ${scobj_hpath}/b/Lower sdsinfo "::nexus::scobj::sdsinfo"
|
hsetprop ${scobj_hpath}/b/Lower sdsinfo "::nexus::scobj::sdsinfo"
|
||||||
|
@ -22,7 +22,7 @@ driver julabo_lh45_gen = {
|
|||||||
permlink = 'T.SP01';
|
permlink = 'T.SP01';
|
||||||
writeable = 1; write_function = setPoint; write_command = 'out_sp_00';
|
writeable = 1; write_function = setPoint; write_command = 'out_sp_00';
|
||||||
driveable = sensor/'value';
|
driveable = sensor/'value';
|
||||||
lowerlimit = 10; upperlimit = 90; tolerance = '${tol}';
|
lowerlimit = -20; upperlimit = 90; tolerance = '${tol}';
|
||||||
}
|
}
|
||||||
var overtemp_warnlimit = {
|
var overtemp_warnlimit = {
|
||||||
read_command = 'in_sp_03';
|
read_command = 'in_sp_03';
|
||||||
|
@ -485,7 +485,7 @@ proc ::scobj::julabo_lh45_gen::mkDriver { sct_controller name device_class simul
|
|||||||
hsetprop ${scobj_hpath}/setpoint data true
|
hsetprop ${scobj_hpath}/setpoint data true
|
||||||
hsetprop ${scobj_hpath}/setpoint mutable true
|
hsetprop ${scobj_hpath}/setpoint mutable true
|
||||||
hsetprop ${scobj_hpath}/setpoint nxsave true
|
hsetprop ${scobj_hpath}/setpoint nxsave true
|
||||||
hsetprop ${scobj_hpath}/setpoint lowerlimit 10
|
hsetprop ${scobj_hpath}/setpoint lowerlimit -20
|
||||||
hsetprop ${scobj_hpath}/setpoint upperlimit 90
|
hsetprop ${scobj_hpath}/setpoint upperlimit 90
|
||||||
hsetprop ${scobj_hpath}/setpoint tolerance ${tol}
|
hsetprop ${scobj_hpath}/setpoint tolerance ${tol}
|
||||||
hsetprop ${scobj_hpath}/setpoint permlink data_set "T[format "%02d" ${id}]SP01"
|
hsetprop ${scobj_hpath}/setpoint permlink data_set "T[format "%02d" ${id}]SP01"
|
||||||
|
@ -439,3 +439,88 @@ proc add_julabo_lh45 { name IP port {sensor "bath"} {_tol 5.0} {CID 1} {CTYPE T}
|
|||||||
}
|
}
|
||||||
makesctemon $name /sics/$name/emon/monmode /sics/$name/emon/isintol /sics/$name/emon/errhandler
|
makesctemon $name /sics/$name/emon/monmode /sics/$name/emon/isintol /sics/$name/emon/errhandler
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace eval ::scobj::julabo_lh45 {
|
||||||
|
set debug_threshold 5
|
||||||
|
}
|
||||||
|
proc ::scobj::julabo_lh45::sics_log {debug_level debug_string} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
set debug_threshold ${::scobj::julabo_lh45::debug_threshold}
|
||||||
|
if {${debug_level} >= ${debug_threshold}} {
|
||||||
|
sicslog "::scobj::julabo_lh45::${debug_string}"
|
||||||
|
}
|
||||||
|
} catch_message ]
|
||||||
|
}
|
||||||
|
|
||||||
|
clientput "file evaluation of sct_julabo_lh45.tcl"
|
||||||
|
::scobj::julabo_lh45::sics_log 9 "file evaluation of sct_julabo_lh45.tcl"
|
||||||
|
|
||||||
|
proc ::scobj::julabo_lh45::read_config {} {
|
||||||
|
set catch_status [ catch {
|
||||||
|
set ns "::scobj::julabo_lh45"
|
||||||
|
dict for {k v} $::config_dict {
|
||||||
|
if { [dict exists $v "implementation"] } {
|
||||||
|
if { !([dict exists $v "name"] && [dict exists $v "enabled"]) } {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
set name [dict get $v name]
|
||||||
|
set enabled [string tolower [dict get $v "enabled"]]
|
||||||
|
set implementation [dict get $v "implementation"]
|
||||||
|
if { !([dict exists $::config_dict $implementation]) } {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
set v [dict get $::config_dict $implementation]
|
||||||
|
if { !([dict exists $v "driver"]) } {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if { [string equal -nocase [dict get $v "driver"] "julabo_lh45"] } {
|
||||||
|
if { [string equal -nocase $enabled "true" ] || [string equal -nocase $enabled "always"] } {
|
||||||
|
if { ![string equal -nocase [SplitReply [environment_simulation]] "false"] } {
|
||||||
|
set asyncqueue "null"
|
||||||
|
${ns}::sics_log 9 "[environment_simulation] => using null asyncqueue"
|
||||||
|
} elseif { [dict exists $v "asyncqueue"] } {
|
||||||
|
set asyncqueue [dict get $v "asyncqueue"]
|
||||||
|
} else {
|
||||||
|
if { [dict exists $v "asyncprotocol"] } {
|
||||||
|
set asyncprotocol [dict get $v "asyncprotocol"]
|
||||||
|
} else {
|
||||||
|
set asyncprotocol ${name}_protocol
|
||||||
|
MakeAsyncProtocol ${asyncprotocol}
|
||||||
|
if { [dict exists $v "terminator"] } {
|
||||||
|
${asyncprotocol} sendterminator "[dict get $v "terminator"]"
|
||||||
|
${asyncprotocol} replyterminator "[dict get $v "terminator"]"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set asyncqueue ${name}_queue
|
||||||
|
set IP [dict get $v ip]
|
||||||
|
set PORT [dict get $v port]
|
||||||
|
MakeAsyncQueue ${asyncqueue} ${asyncprotocol} ${IP} ${PORT}
|
||||||
|
if { [dict exists $v "timeout"] } {
|
||||||
|
${asyncqueue} timeout "[dict get $v "timeout"]"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set arg_list [list]
|
||||||
|
foreach arg {ctrl_sensor tol id type} {
|
||||||
|
if {[dict exists $v $arg]} {
|
||||||
|
lappend arg_list "[dict get $v $arg]"
|
||||||
|
} else {
|
||||||
|
${ns}::sics_log 9 "Missing configuration value $arg"
|
||||||
|
error "Missing configuration value $arg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
add_julabo_lh45 ${name} "aqadapter" ${asyncqueue} {*}$arg_list
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch_message ]
|
||||||
|
handle_exception ${catch_status} ${catch_message}
|
||||||
|
}
|
||||||
|
|
||||||
|
if { [info exists ::config_dict] } {
|
||||||
|
::scobj::julabo_lh45::read_config
|
||||||
|
} else {
|
||||||
|
::scobj::julabo_lh45::sics_log 5 "No config dict"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ namespace eval ::scobj::[set vendor]_[set device] {
|
|||||||
|
|
||||||
proc debug_log {debug_level arg_string} {
|
proc debug_log {debug_level arg_string} {
|
||||||
# write a timestamped string message to a log file for debugging
|
# write a timestamped string message to a log file for debugging
|
||||||
set debug_threshold 0
|
set debug_threshold 5
|
||||||
if {$debug_level >= $debug_threshold} {
|
if {$debug_level >= $debug_threshold} {
|
||||||
set fd [open "[set [namespace current]::log_file]" "a"]
|
set fd [open "[set [namespace current]::log_file]" "a"]
|
||||||
set line "[clock format [clock seconds] -format "%T"] $arg_string"
|
set line "[clock format [clock seconds] -format "%T"] $arg_string"
|
||||||
|
@ -1471,6 +1471,26 @@ sicslist setatt ::histogram_memory::ratemap_xy_total klass detector
|
|||||||
sicslist setatt ::histogram_memory::ratemap_xy_total long_name total_maprate
|
sicslist setatt ::histogram_memory::ratemap_xy_total long_name total_maprate
|
||||||
sicslist setatt ::histogram_memory::ratemap_xy_total mutable true
|
sicslist setatt ::histogram_memory::ratemap_xy_total mutable true
|
||||||
|
|
||||||
|
# Returns 0 If all trips acknowledged, -n if n trips unacknowledged, +n if too many acks?
|
||||||
|
::utility::macro::getset float ::histogram_memory::reset_trip {args} {
|
||||||
|
set num_trips [ SplitReply [hmm configure detector_protect_num_trip] ]
|
||||||
|
set num_acks [ SplitReply [hmm configure detector_protect_num_trip_ack] ]
|
||||||
|
set trip_cnt_diff [expr {$num_acks - $num_trips}]
|
||||||
|
if {$args == ""} {
|
||||||
|
return "reset_trip = $trip_cnt_diff"
|
||||||
|
} else {
|
||||||
|
if {$trip_cnt_diff != 0} {
|
||||||
|
hmm configure fat_detector_protect_num_trip_ack $num_trips
|
||||||
|
hmm astop
|
||||||
|
wait 2
|
||||||
|
hmm init
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sicslist setatt ::histogram_memory::reset_trip klass detector
|
||||||
|
sicslist setatt ::histogram_memory::reset_trip long_name reset_trip
|
||||||
|
sicslist setatt ::histogram_memory::reset_trip data false
|
||||||
|
|
||||||
##
|
##
|
||||||
# @brief Update the beam monitors when the histmem has finished counting.
|
# @brief Update the beam monitors when the histmem has finished counting.
|
||||||
proc ::histogram_memory::countend_event {} {
|
proc ::histogram_memory::countend_event {} {
|
||||||
|
@ -150,21 +150,24 @@ proc ::commands::isc_initialize {} {
|
|||||||
proc RadCollScanRange {motor start step fin oscno} {
|
proc RadCollScanRange {motor start step fin oscno} {
|
||||||
if {$step==0} {break}
|
if {$step==0} {break}
|
||||||
if {($start > $fin) && ($step > 0)} {break}
|
if {($start > $fin) && ($step > 0)} {break}
|
||||||
if {($start < $fin) && ($step < 0)} {break}
|
if {($start < $fin) && ($step < 0)} {break}
|
||||||
set i_bool 0
|
set i_bool 0
|
||||||
histmem mode unlimited
|
histmem mode unlimited
|
||||||
set currentmot $start
|
set currentmot $start
|
||||||
set i 0
|
set i 0
|
||||||
newfile HISTOGRAM_XY
|
newfile HISTOGRAM_XY
|
||||||
while {$i_bool==0} {
|
while {$i_bool==0} {
|
||||||
drive $motor $currentmot
|
drive $motor $currentmot
|
||||||
|
$motor send SH`
|
||||||
oct oscillate_count $oscno
|
oct oscillate_count $oscno
|
||||||
oct oscillate start
|
oct oscillate start
|
||||||
hmm countblock
|
hmm countblock
|
||||||
save $i
|
|
||||||
set currentmot [expr {$currentmot + $step}]
|
set currentmot [expr {$currentmot + $step}]
|
||||||
if {($step > 0) && ($currentmot > $fin)} {set i_bool 1}
|
if {($step > 0) && ($currentmot > $fin)} {set i_bool 1}
|
||||||
if {($step < 0) && ($currentmot < $fin)} {set i_bool 1}
|
if {($step < 0) && ($currentmot < $fin)} {set i_bool 1}
|
||||||
|
if {($i_bool == 0)} {run $motor $currentmot}
|
||||||
|
save $i
|
||||||
incr i
|
incr i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -172,34 +175,50 @@ proc RadCollScanRange {motor start step fin oscno} {
|
|||||||
publish RadCollScanRange user
|
publish RadCollScanRange user
|
||||||
|
|
||||||
#RadCollScanBi
|
#RadCollScanBi
|
||||||
proc RadCollScanBi {motor start step fin oscno motdir} {
|
proc RadCollScanBi {motor start step fin oscno motdir} {
|
||||||
|
|
||||||
set i_bool 0
|
set i_bool 0
|
||||||
histmem mode unlimited
|
set spx -12500
|
||||||
|
set spstep [expr {$spx * $step * $motdir}]
|
||||||
|
histmem stop
|
||||||
|
histmem mode unlimited
|
||||||
|
|
||||||
if {$motdir == 1} {
|
if {$motdir == 1} {
|
||||||
set currentmot $start
|
set currentmot $start
|
||||||
set i 0
|
set i 0
|
||||||
} else {
|
} else {
|
||||||
set currentmot $fin
|
set currentmot $fin
|
||||||
set i [expr {int(($fin-$start)/$step)}]
|
set i [expr {int(($fin-$start)/$step)}]
|
||||||
}
|
}
|
||||||
|
drive $motor $currentmot
|
||||||
newfile HISTOGRAM_XY
|
newfile HISTOGRAM_XY
|
||||||
|
|
||||||
while {$i_bool==0} {
|
while {$i_bool==0} {
|
||||||
# drive $motor $currentmot
|
|
||||||
oct oscillate_count $oscno
|
oct oscillate_count $oscno
|
||||||
oct oscillate start
|
oct oscillate start
|
||||||
hmm countblock
|
hmm countblock
|
||||||
|
|
||||||
if {($motdir > 0)} {
|
if {($motdir > 0)} {
|
||||||
set currentmot [expr {$currentmot + $step}]
|
set currentmot [expr {$currentmot + $step}]
|
||||||
if {$currentmot > $fin} {set i_bool 1}
|
if {$currentmot > $fin} {set i_bool 1}
|
||||||
incr i
|
|
||||||
} else {
|
} else {
|
||||||
set currentmot [expr {$currentmot - $step}]
|
set currentmot [expr {$currentmot - $step}]
|
||||||
if {$currentmot < $start} {set i_bool 1}
|
if {$currentmot < $start} {set i_bool 1}
|
||||||
incr i -1
|
|
||||||
}
|
}
|
||||||
run $motor $currentmot
|
|
||||||
save $i
|
if {($i_bool == 0)} {run $motor $currentmot}
|
||||||
|
save $i
|
||||||
|
if {($motdir > 0)} {incr i 1} else {incr i -1}
|
||||||
|
|
||||||
|
# if {($i_bool == 0)} {
|
||||||
|
# $motor send SH`
|
||||||
|
# $motor send PR` $spstep
|
||||||
|
# $motor send BG`
|
||||||
|
#
|
||||||
|
# }
|
||||||
|
# save $i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,22 @@
|
|||||||
# Euler cradle scan commands for texture runs
|
# Euler cradle scan commands for texture runs
|
||||||
# AJS Dec 2010
|
# AJS Dec 2010
|
||||||
|
|
||||||
|
proc EulerScan {mstart mstep mend oscno} {
|
||||||
|
ephi speed 5
|
||||||
|
ephi accel 5
|
||||||
|
ephi decel 5
|
||||||
|
echi speed 2
|
||||||
|
set motdir 1
|
||||||
|
drive echi 0 ephi $mstart
|
||||||
|
foreach chival {0 15 30 45 60 75 90} {
|
||||||
|
drive echi $chival
|
||||||
|
RadCollScanBi ephi $mstart $mstep $mend $oscno $motdir
|
||||||
|
set motdir [expr {$motdir * -1}]
|
||||||
|
}
|
||||||
|
drive echi 0 ephi $mstart
|
||||||
|
}
|
||||||
|
|
||||||
|
publish EulerScan user
|
||||||
|
|
||||||
# continous scan for EPHI- the euler cradle phi stage (innermost axis)
|
# continous scan for EPHI- the euler cradle phi stage (innermost axis)
|
||||||
# note make sure controller 2 has the PHISCAN code in it
|
# note make sure controller 2 has the PHISCAN code in it
|
||||||
|
@ -28,7 +28,7 @@ proc ::histogram_memory::init_OAT_TABLE {args} {
|
|||||||
hmm configure fat_frame_source INTERNAL
|
hmm configure fat_frame_source INTERNAL
|
||||||
|
|
||||||
|
|
||||||
# set resolution "double_x"
|
# set resolution "double_x"
|
||||||
|
|
||||||
switch $resolution {
|
switch $resolution {
|
||||||
"hires" {
|
"hires" {
|
||||||
|
@ -26,7 +26,7 @@ set mx_Home 8390583
|
|||||||
#set mom_Home 9274794
|
#set mom_Home 9274794
|
||||||
##set mom_Home 8391038
|
##set mom_Home 8391038
|
||||||
#set mom_Home 8147038
|
#set mom_Home 8147038
|
||||||
set mom_Home 7736816
|
set mom_Home 7979102
|
||||||
set mtth_Home 19927837
|
set mtth_Home 19927837
|
||||||
#set mphi_Home 7613516
|
#set mphi_Home 7613516
|
||||||
#set mphi_Home 27847793
|
#set mphi_Home 27847793
|
||||||
@ -34,6 +34,7 @@ set mphi_Home 8384818
|
|||||||
#set mchi_Home 9050090
|
#set mchi_Home 9050090
|
||||||
#set mchi_Home 25561619
|
#set mchi_Home 25561619
|
||||||
set mchi_Home 8389526
|
set mchi_Home 8389526
|
||||||
|
#set mchi_Home 6847710
|
||||||
#set my_Home 6767221
|
#set my_Home 6767221
|
||||||
set my_Home 8378212
|
set my_Home 8378212
|
||||||
set som_Home 17214054
|
set som_Home 17214054
|
||||||
@ -343,7 +344,7 @@ Motor $sample_stage_rotate $motor_driver_type [params \
|
|||||||
asyncqueue mc2\
|
asyncqueue mc2\
|
||||||
axis E\
|
axis E\
|
||||||
units degrees\
|
units degrees\
|
||||||
hardlowerlim -71\
|
hardlowerlim -121\
|
||||||
hardupperlim 116\
|
hardupperlim 116\
|
||||||
maxSpeed 5\
|
maxSpeed 5\
|
||||||
maxAccel 3\
|
maxAccel 3\
|
||||||
@ -363,8 +364,10 @@ Motor stth $motor_driver_type [params \
|
|||||||
asyncqueue mc2\
|
asyncqueue mc2\
|
||||||
axis F\
|
axis F\
|
||||||
units degrees\
|
units degrees\
|
||||||
hardlowerlim 15.8\
|
hardlowerlim 13\
|
||||||
hardupperlim 29.7\
|
hardupperlim 29.7\
|
||||||
|
softlowerlim 13.4\
|
||||||
|
softupperlim 29.6\
|
||||||
maxSpeed 0.5\
|
maxSpeed 0.5\
|
||||||
maxAccel 0.1\
|
maxAccel 0.1\
|
||||||
maxDecel 0.1\
|
maxDecel 0.1\
|
||||||
@ -374,7 +377,7 @@ Motor stth $motor_driver_type [params \
|
|||||||
bias_bits 25\
|
bias_bits 25\
|
||||||
bias_bias 932070\
|
bias_bias 932070\
|
||||||
cntsPerX -93207]
|
cntsPerX -93207]
|
||||||
stth softlowerlim 15.9
|
stth softlowerlim 13.4
|
||||||
stth softupperlim 29.6
|
stth softupperlim 29.6
|
||||||
stth home 28.481113
|
stth home 28.481113
|
||||||
#stth home 18.981113
|
#stth home 18.981113
|
||||||
@ -414,28 +417,34 @@ oct long_name oct
|
|||||||
############################
|
############################
|
||||||
#
|
#
|
||||||
|
|
||||||
# Monochromator Focusing (HOPG)
|
set mf_config 1
|
||||||
#Motor mf1 $motor_driver_type [params \
|
|
||||||
# asyncqueue mc3\
|
|
||||||
# axis A\
|
|
||||||
# units degrees\
|
|
||||||
# hardlowerlim xxxx\
|
|
||||||
# hardupperlim xxxx\
|
|
||||||
# maxSpeed xxxx\
|
|
||||||
# maxAccel xxxx\
|
|
||||||
# maxDecel xxxx\
|
|
||||||
# stepsPerX xxxx\
|
|
||||||
# absEnc 1\
|
|
||||||
# absEncHome $mf1_Home\
|
|
||||||
# cntsPerX xxxx]
|
|
||||||
#setHomeandRange -motor mf1 -home 0 -lowrange 0 -uprange 360
|
|
||||||
#mf1 speed 1
|
|
||||||
#mf1 movecount $move_count
|
|
||||||
#mf1 precision 0.01
|
|
||||||
#mf1 part monochromator
|
|
||||||
#mf1 long_name mf1
|
|
||||||
|
|
||||||
|
|
||||||
|
switch $mf_config {
|
||||||
|
1 {
|
||||||
|
# Monochromator Focusing (HOPG)
|
||||||
|
Motor mf1 $motor_driver_type [params \
|
||||||
|
asyncqueue mc3\
|
||||||
|
axis A\
|
||||||
|
units degrees\
|
||||||
|
hardlowerlim -0.1\
|
||||||
|
hardupperlim 1.1\
|
||||||
|
maxSpeed 0.1\
|
||||||
|
maxAccel 0.1\
|
||||||
|
maxDecel 0.1\
|
||||||
|
stepsPerX 22000\
|
||||||
|
absEnc 1\
|
||||||
|
absEncHome 3965\
|
||||||
|
cntsPerX -3500]
|
||||||
|
setHomeandRange -motor mf1 -home 0 -lowrange 0 -uprange 1
|
||||||
|
mf1 speed 0.02
|
||||||
|
# mf1 movecount $move_count
|
||||||
|
mf1 precision 0.005
|
||||||
|
mf1 part monochromator
|
||||||
|
mf1 long_name mf1
|
||||||
|
}
|
||||||
# Monochromator Focusing (Ge)
|
# Monochromator Focusing (Ge)
|
||||||
|
|
||||||
## ffr 31/7/2012
|
## ffr 31/7/2012
|
||||||
## absEncHome was found to be 16777217 on 31/7/2012 when the
|
## absEncHome was found to be 16777217 on 31/7/2012 when the
|
||||||
## encoder clocked over to 114 counts to give a posn
|
## encoder clocked over to 114 counts to give a posn
|
||||||
@ -444,26 +453,32 @@ oct long_name oct
|
|||||||
## and has a 24bit range (ie max cnt=16777216)
|
## and has a 24bit range (ie max cnt=16777216)
|
||||||
## I set a bias of 10000 counts with absenchome = 10000
|
## I set a bias of 10000 counts with absenchome = 10000
|
||||||
## so that SICS can drive the axis to the allowed limits.
|
## so that SICS can drive the axis to the allowed limits.
|
||||||
Motor mf2 $motor_driver_type [params \
|
|
||||||
asyncqueue mc3\
|
2 {
|
||||||
axis A\
|
|
||||||
units degrees\
|
Motor mf2 $motor_driver_type [params \
|
||||||
hardlowerlim -2\
|
asyncqueue mc3\
|
||||||
hardupperlim 2\
|
axis A\
|
||||||
maxSpeed 0.1\
|
units degrees\
|
||||||
maxAccel 0.1\
|
hardlowerlim -0.1\
|
||||||
maxDecel 0.1\
|
hardupperlim 1.1\
|
||||||
stepsPerX 22000\
|
maxSpeed 0.1\
|
||||||
absEnc 1\
|
maxAccel 0.1\
|
||||||
absEncHome 42768\
|
maxDecel 0.1\
|
||||||
bias_bits 24\
|
stepsPerX 22000\
|
||||||
bias_bias 10000\
|
absEnc 1\
|
||||||
cntsPerX -3500]
|
absEncHome 10000\
|
||||||
setHomeandRange -motor mf2 -home 0 -lowrange 0 -uprange 2
|
bias_bits 24\
|
||||||
mf2 speed 0.02
|
bias_bias 10000\
|
||||||
mf2 precision 0.005
|
cntsPerX -3500]
|
||||||
mf2 part monochromator
|
setHomeandRange -motor mf2 -home 0 -lowrange 0 -uprange 1
|
||||||
mf2 long_name mf2
|
mf2 speed 0.02
|
||||||
|
mf2 precision 0.005
|
||||||
|
mf2 part monochromator
|
||||||
|
mf2 long_name mf2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Slit 1, right
|
# Slit 1, right
|
||||||
Motor ss1r $motor_driver_type [params \
|
Motor ss1r $motor_driver_type [params \
|
||||||
|
@ -324,7 +324,6 @@ driver = "west_6100"
|
|||||||
imptype = temperature
|
imptype = temperature
|
||||||
ip = 10.157.205.24
|
ip = 10.157.205.24
|
||||||
port = 502
|
port = 502
|
||||||
timeout = 2000
|
|
||||||
|
|
||||||
[vf2_west4100]
|
[vf2_west4100]
|
||||||
asyncprotocol = modbus_ap
|
asyncprotocol = modbus_ap
|
||||||
@ -334,5 +333,4 @@ driver = "west_6100"
|
|||||||
imptype = temperature
|
imptype = temperature
|
||||||
ip = 10.157.205.25
|
ip = 10.157.205.25
|
||||||
port = 502
|
port = 502
|
||||||
timeout = 2000
|
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ fileeval $cfPath(environment)/huber_pilot_sct.tcl
|
|||||||
fileeval $cfPath(environment)/isotech_ps_sct.tcl
|
fileeval $cfPath(environment)/isotech_ps_sct.tcl
|
||||||
fileeval $cfPath(environment)/temperature/sct_eurotherm_2000.tcl
|
fileeval $cfPath(environment)/temperature/sct_eurotherm_2000.tcl
|
||||||
fileeval $cfPath(environment)/temperature/eurotherm_m2000_sct.tcl
|
fileeval $cfPath(environment)/temperature/eurotherm_m2000_sct.tcl
|
||||||
|
fileeval $cfPath(environment)/temperature/eurotherm_3200_sct.tcl
|
||||||
fileeval $cfPath(environment)/sct_keithley_2700.tcl
|
fileeval $cfPath(environment)/sct_keithley_2700.tcl
|
||||||
fileeval $cfPath(environment)/keithley_m2700_sct.tcl
|
fileeval $cfPath(environment)/keithley_m2700_sct.tcl
|
||||||
fileeval $cfPath(environment)/temperature/lakeshore_218_sct.tcl
|
fileeval $cfPath(environment)/temperature/lakeshore_218_sct.tcl
|
||||||
@ -61,13 +62,16 @@ fileeval $cfPath(commands)/pulser.tcl
|
|||||||
fileeval $cfPath(commands)/hvcommands.tcl
|
fileeval $cfPath(commands)/hvcommands.tcl
|
||||||
fileeval $cfPath(commands)/vactex.tcl
|
fileeval $cfPath(commands)/vactex.tcl
|
||||||
fileeval $cfPath(commands)/eulerscan.tcl
|
fileeval $cfPath(commands)/eulerscan.tcl
|
||||||
|
fileeval $cfPath(commands)/cfcommands.tcl
|
||||||
fileeval $cfPath(anticollider)/anticollider.tcl
|
fileeval $cfPath(anticollider)/anticollider.tcl
|
||||||
|
fileeval $cfPath(beamline)/sct_he3_polanal.tcl
|
||||||
fileeval $cfPath(hmm)/hmm_rapid.tcl
|
fileeval $cfPath(hmm)/hmm_rapid.tcl
|
||||||
source gumxml.tcl
|
source gumxml.tcl
|
||||||
|
|
||||||
# Wombat only change to hvcommands' scaleval variable
|
# Wombat only change to hvcommands' scaleval variable
|
||||||
SetVoltScale 2000.0
|
SetVoltScale 2000.0
|
||||||
|
|
||||||
|
|
||||||
# The Alice Thing
|
# The Alice Thing
|
||||||
# Qlink : 9600, 8 data, 1 stop, No Parity, None Flow
|
# Qlink : 9600, 8 data, 1 stop, No Parity, None Flow
|
||||||
# LS340 : 9600, 7 data, 1 stop, Odd Parity, None Flow
|
# LS340 : 9600, 7 data, 1 stop, Odd Parity, None Flow
|
||||||
|
@ -24,7 +24,8 @@ set my_Home 8389613
|
|||||||
#set mx_Home 7580366
|
#set mx_Home 7580366
|
||||||
set mx_Home 8392083
|
set mx_Home 8392083
|
||||||
#set mom_Home 13442930
|
#set mom_Home 13442930
|
||||||
set mom_Home 8218065
|
#set mom_Home 8218065
|
||||||
|
set mom_Home 8295887
|
||||||
set mtth_Home 11534660
|
set mtth_Home 11534660
|
||||||
set pcx_Home 6330515
|
set pcx_Home 6330515
|
||||||
set pcr_Home 21650101
|
set pcr_Home 21650101
|
||||||
|
@ -7,3 +7,7 @@ forbid {-inf 200} for m2y when m2om in {10 170}
|
|||||||
# Following two rules allow recovery if m2om position has crept above 10 or below 170
|
# Following two rules allow recovery if m2om position has crept above 10 or below 170
|
||||||
forbid {11 inf} for m2om whenall {m2y in {-inf 200} m2om in {10 11}}
|
forbid {11 inf} for m2om whenall {m2y in {-inf 200} m2om in {10 11}}
|
||||||
forbid {-inf 169} for m2om whenall {m2y in {-inf 200} m2om in {169 170}}
|
forbid {-inf 169} for m2om whenall {m2y in {-inf 200} m2om in {169 170}}
|
||||||
|
|
||||||
|
# Protect long Cd tunnel
|
||||||
|
forbid {-5.65 inf} for m2x when m2om in {170 182}
|
||||||
|
forbid {55.43 inf} for m2x when m2om in {-2 10}
|
||||||
|
@ -12,3 +12,24 @@ proc ::anticollider::enable {args} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
::anticollider::loadscript acscript.txt
|
::anticollider::loadscript acscript.txt
|
||||||
|
|
||||||
|
# Default enable or disable anticollision for all axes
|
||||||
|
# TODO: Provide a list of motors to enable or disable
|
||||||
|
proc anticollider {args} {
|
||||||
|
set usage "Usage: anticollider (enable | disable)"
|
||||||
|
if {$args == "enable"} {
|
||||||
|
# TODO change protect_detector to just 'protect'
|
||||||
|
::anticollider::protect_detector "true"
|
||||||
|
} elseif {$args == "disable"} {
|
||||||
|
::anticollider::protect_detector "false"
|
||||||
|
} elseif {$args == "help"} {
|
||||||
|
clientput $usage
|
||||||
|
} else {
|
||||||
|
if {[SplitReply [::anticollider::protect_detector]] == "false"} {
|
||||||
|
clientput "Anticollision disabled on all axes"
|
||||||
|
} else {
|
||||||
|
clientput "Anticollision enabled on all axes"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
publish anticollider user
|
||||||
|
@ -235,7 +235,7 @@ Motor m1chi $motor_driver_type [params \
|
|||||||
cntsPerX [expr 131072*100.0/68.681]\
|
cntsPerX [expr 131072*100.0/68.681]\
|
||||||
nopowersave 1]
|
nopowersave 1]
|
||||||
m1chi precision 0.001
|
m1chi precision 0.001
|
||||||
m1chi speed 0.200
|
m1chi speed 0.137362
|
||||||
m1chi part crystal
|
m1chi part crystal
|
||||||
m1chi long_name m1chi
|
m1chi long_name m1chi
|
||||||
m1chi softlowerlim -2
|
m1chi softlowerlim -2
|
||||||
@ -435,7 +435,7 @@ Motor samz $motor_driver_type [params \
|
|||||||
stepsPerX [expr 25000.0 * 100 / 10.0]\
|
stepsPerX [expr 25000.0 * 100 / 10.0]\
|
||||||
cntsPerX 819.2\
|
cntsPerX 819.2\
|
||||||
absEnc 1\
|
absEnc 1\
|
||||||
absEncHome 72607]
|
absEncHome 75330]
|
||||||
samz part sample
|
samz part sample
|
||||||
samz long_name samz
|
samz long_name samz
|
||||||
samz softlowerlim 0
|
samz softlowerlim 0
|
||||||
@ -590,7 +590,7 @@ Motor m2chi $motor_driver_type [params \
|
|||||||
cntsPerX [expr 131072*100.0/68.681]\
|
cntsPerX [expr 131072*100.0/68.681]\
|
||||||
nopowersave 1]
|
nopowersave 1]
|
||||||
m2chi precision 0.001
|
m2chi precision 0.001
|
||||||
m2chi speed 0.200
|
m2chi speed 0.137362
|
||||||
m2chi part crystal
|
m2chi part crystal
|
||||||
m2chi long_name m2chi
|
m2chi long_name m2chi
|
||||||
m2chi softlowerlim -2
|
m2chi softlowerlim -2
|
||||||
@ -610,7 +610,7 @@ Motor m2om $motor_driver_type [params \
|
|||||||
port pmc3-kookaburra\
|
port pmc3-kookaburra\
|
||||||
axis F\
|
axis F\
|
||||||
units degrees\
|
units degrees\
|
||||||
hardlowerlim 0\
|
hardlowerlim -2\
|
||||||
hardupperlim 182\
|
hardupperlim 182\
|
||||||
maxSpeed [expr 300000.0/$m2omSetRate]\
|
maxSpeed [expr 300000.0/$m2omSetRate]\
|
||||||
maxAccel [expr 25000.0/$m2omSetRate]\
|
maxAccel [expr 25000.0/$m2omSetRate]\
|
||||||
@ -673,7 +673,7 @@ Motor m2y $motor_driver_type [params \
|
|||||||
axis H\
|
axis H\
|
||||||
units mm\
|
units mm\
|
||||||
hardlowerlim -4.35\
|
hardlowerlim -4.35\
|
||||||
hardupperlim 357.9\
|
hardupperlim 400\
|
||||||
maxSpeed [expr 100000.0/$m2ySetRate]\
|
maxSpeed [expr 100000.0/$m2ySetRate]\
|
||||||
maxAccel [expr 25000.0/$m2ySetRate]\
|
maxAccel [expr 25000.0/$m2ySetRate]\
|
||||||
maxDecel [expr 25000.0/$m2ySetRate]\
|
maxDecel [expr 25000.0/$m2ySetRate]\
|
||||||
@ -685,7 +685,7 @@ m2y speed 0.5
|
|||||||
m2y part crystal
|
m2y part crystal
|
||||||
m2y long_name m2y
|
m2y long_name m2y
|
||||||
m2y softlowerlim -4.3
|
m2y softlowerlim -4.3
|
||||||
m2y softupperlim 355
|
m2y softupperlim 399
|
||||||
m2y home 0
|
m2y home 0
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ proc thresholdscan {minVoltage maxVoltage stepVoltage minBMThreshold manBMThresh
|
|||||||
|
|
||||||
clientput "Start scanning loop now"
|
clientput "Start scanning loop now"
|
||||||
for {set vol $minVoltage} {$vol <= $maxVoltage} {incr vol $stepVoltage} {
|
for {set vol $minVoltage} {$vol <= $maxVoltage} {incr vol $stepVoltage} {
|
||||||
emHV1 $vol
|
# emHV1 $vol
|
||||||
set curCount ""
|
set curCount ""
|
||||||
for {set thres $minBMThreshold} {$thres <= $manBMThreshold} {incr thres $stepBMThreshold} {
|
for {set thres $minBMThreshold} {$thres <= $manBMThreshold} {incr thres $stepBMThreshold} {
|
||||||
clientput "set thredshold to $thres"
|
clientput "set thredshold to $thres"
|
||||||
|
@ -45,6 +45,8 @@ fileeval $cfPath(environment)/temperature/mercury_valve_sct.tcl
|
|||||||
fileeval $cfPath(environment)/sct_protek_common.tcl
|
fileeval $cfPath(environment)/sct_protek_common.tcl
|
||||||
fileeval $cfPath(environment)/protekmm_sct.tcl
|
fileeval $cfPath(environment)/protekmm_sct.tcl
|
||||||
fileeval $cfPath(environment)/temperature/julabo_lh45_gen_sct.tcl
|
fileeval $cfPath(environment)/temperature/julabo_lh45_gen_sct.tcl
|
||||||
|
fileeval $cfPath(environment)/sct_rheometer.tcl
|
||||||
|
fileeval $cfPath(environment)/sct_antonparr_MCR500.tcl
|
||||||
fileeval $cfPath(counter)/sct_bm.tcl
|
fileeval $cfPath(counter)/sct_bm.tcl
|
||||||
fileeval $cfPath(hmm)/hmm_configuration.tcl
|
fileeval $cfPath(hmm)/hmm_configuration.tcl
|
||||||
fileeval $cfPath(nexus)/nxscripts.tcl
|
fileeval $cfPath(nexus)/nxscripts.tcl
|
||||||
@ -54,6 +56,7 @@ fileeval $cfPath(commands)/commands.tcl
|
|||||||
fileeval $cfPath(anticollider)/anticollider.tcl
|
fileeval $cfPath(anticollider)/anticollider.tcl
|
||||||
fileeval $cfPath(parameters)/parameters.tcl
|
fileeval $cfPath(parameters)/parameters.tcl
|
||||||
|
|
||||||
|
|
||||||
source gumxml.tcl
|
source gumxml.tcl
|
||||||
|
|
||||||
::utility::mkVar ::anticollider::protect_detector text manager protect_detector false detector true false
|
::utility::mkVar ::anticollider::protect_detector text manager protect_detector false detector true false
|
||||||
|
@ -112,3 +112,8 @@ server_init
|
|||||||
# WARNING: Do not add any code below server_init, if you do SICS may fail to initialise properly.
|
# WARNING: Do not add any code below server_init, if you do SICS may fail to initialise properly.
|
||||||
|
|
||||||
# You can add extra-configuration code in ../extraconfig.tcl
|
# You can add extra-configuration code in ../extraconfig.tcl
|
||||||
|
# Update chopper speed and phase if a stop or idle command is issued.
|
||||||
|
sicspoll add /instrument/fermi_chopper/mchs hdb 5
|
||||||
|
sicspoll add /instrument/fermi_chopper/mchp hdb 5
|
||||||
|
sicspoll add /instrument/fermi_chopper/schs hdb 5
|
||||||
|
sicspoll add /instrument/fermi_chopper/schp hdb 5
|
||||||
|
1
site_ansto/instrument/qld/MANIFEST.TXT
Normal file → Executable file
1
site_ansto/instrument/qld/MANIFEST.TXT
Normal file → Executable file
@ -4,6 +4,5 @@ hipadaba_configuration.tcl
|
|||||||
hpaths.tcl
|
hpaths.tcl
|
||||||
koala.hdd
|
koala.hdd
|
||||||
troubleshoot_setup.tcl
|
troubleshoot_setup.tcl
|
||||||
extraconfig.tcl
|
|
||||||
InstXML.xml
|
InstXML.xml
|
||||||
sics_simulation.tcl
|
sics_simulation.tcl
|
||||||
|
1
site_ansto/instrument/reflectometer/MANIFEST.TXT
Normal file → Executable file
1
site_ansto/instrument/reflectometer/MANIFEST.TXT
Normal file → Executable file
@ -2,7 +2,6 @@ runsics_def.py
|
|||||||
platypus_configuration.tcl
|
platypus_configuration.tcl
|
||||||
sics_ports.tcl
|
sics_ports.tcl
|
||||||
script_validator_ports.tcl
|
script_validator_ports.tcl
|
||||||
extraconfig.tcl
|
|
||||||
config
|
config
|
||||||
util
|
util
|
||||||
hostport_config.tcl
|
hostport_config.tcl
|
||||||
|
@ -14,10 +14,14 @@ evfactory new dhv1 nhq200 acq 1
|
|||||||
dhv1 tolerance 5
|
dhv1 tolerance 5
|
||||||
dhv1 rate 25
|
dhv1 rate 25
|
||||||
dhv1 upper 3000
|
dhv1 upper 3000
|
||||||
|
dhv1 max 3000
|
||||||
|
dhv1 upperlimit 3000
|
||||||
#dhv1 lock
|
#dhv1 lock
|
||||||
evfactory new dhv2 nhq200 acq 2
|
evfactory new dhv2 nhq200 acq 2
|
||||||
dhv2 tolerance 5
|
dhv2 tolerance 5
|
||||||
dhv2 rate 25
|
dhv2 rate 25
|
||||||
dhv2 upper 1500
|
dhv2 upper 1500
|
||||||
|
dhv1 max 1500
|
||||||
|
dhv1 upperlimit 1500
|
||||||
#dhv2 lock
|
#dhv2 lock
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ fileeval $cfPath(environment)/mvp_valve_sct.tcl
|
|||||||
fileeval $cfPath(environment)/sct_protek_common.tcl
|
fileeval $cfPath(environment)/sct_protek_common.tcl
|
||||||
fileeval $cfPath(environment)/protekmm_sct.tcl
|
fileeval $cfPath(environment)/protekmm_sct.tcl
|
||||||
fileeval $cfPath(environment)/omron_hldc_sct.tcl
|
fileeval $cfPath(environment)/omron_hldc_sct.tcl
|
||||||
|
fileeval $cfPath(environment)/keysight_N8740A_sct.tcl
|
||||||
fileeval $cfPath(environment)/magneticField/sct_bruker_BEC1.tcl
|
fileeval $cfPath(environment)/magneticField/sct_bruker_BEC1.tcl
|
||||||
fileeval $cfPath(environment)/magneticField/bruker_sct.tcl
|
fileeval $cfPath(environment)/magneticField/bruker_sct.tcl
|
||||||
fileeval $cfPath(environment)/temperature/sct_lakeshore_336.tcl
|
fileeval $cfPath(environment)/temperature/sct_lakeshore_336.tcl
|
||||||
@ -48,6 +49,7 @@ fileeval $cfPath(chopper)/chopper.tcl
|
|||||||
fileeval $cfPath(commands)/commands.tcl
|
fileeval $cfPath(commands)/commands.tcl
|
||||||
fileeval $cfPath(anticollider)/anticollider.tcl
|
fileeval $cfPath(anticollider)/anticollider.tcl
|
||||||
fileeval $cfPath(beamline)/polanal.tcl
|
fileeval $cfPath(beamline)/polanal.tcl
|
||||||
|
fileeval $cfPath(beamline)/he3_polanal_sct.tcl
|
||||||
fileeval $cfPath(commands)/pulser.tcl
|
fileeval $cfPath(commands)/pulser.tcl
|
||||||
fileeval $cfPath(commands)/hvcommands.tcl
|
fileeval $cfPath(commands)/hvcommands.tcl
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# icsval column = settings when running on the Instrument Control Server (ie SICS_SIMULATION not defined)
|
# icsval column = settings when running on the Instrument Control Server (ie SICS_SIMULATION not defined)
|
||||||
# fakedev column = settings for test platforms (ie SICS_SIMULATION=fakedev)
|
# fakedev column = settings for test platforms (ie SICS_SIMULATION=fakedev)
|
||||||
foreach {simflag icsval fakedev} {
|
foreach {simflag icsval fakedev} {
|
||||||
opal_simulation true true
|
opal_simulation false true
|
||||||
detector_simulation false true
|
detector_simulation false true
|
||||||
hmm_simulation false true
|
hmm_simulation false true
|
||||||
environment_simulation false true
|
environment_simulation false true
|
||||||
|
1
site_ansto/instrument/rsd/MANIFEST.TXT
Normal file → Executable file
1
site_ansto/instrument/rsd/MANIFEST.TXT
Normal file → Executable file
@ -2,7 +2,6 @@ runsics_def.py
|
|||||||
sics_ports.tcl
|
sics_ports.tcl
|
||||||
script_validator_ports.tcl
|
script_validator_ports.tcl
|
||||||
kowari_configuration.tcl
|
kowari_configuration.tcl
|
||||||
extraconfig.tcl
|
|
||||||
config
|
config
|
||||||
util
|
util
|
||||||
hostport_config.tcl
|
hostport_config.tcl
|
||||||
|
1
site_ansto/instrument/sans/MANIFEST.TXT
Normal file → Executable file
1
site_ansto/instrument/sans/MANIFEST.TXT
Normal file → Executable file
@ -2,7 +2,6 @@ runsics_def.py
|
|||||||
quokka_configuration.tcl
|
quokka_configuration.tcl
|
||||||
sics_ports.tcl
|
sics_ports.tcl
|
||||||
script_validator_ports.tcl
|
script_validator_ports.tcl
|
||||||
extraconfig.tcl
|
|
||||||
config
|
config
|
||||||
util
|
util
|
||||||
hostport_config.tcl
|
hostport_config.tcl
|
||||||
|
@ -100,4 +100,5 @@ proc add_rheo {rhControl tol settle} {
|
|||||||
hfactory /sics/$rhControl/settletime plain user float
|
hfactory /sics/$rhControl/settletime plain user float
|
||||||
hset /sics/$rhControl/settletime $settle
|
hset /sics/$rhControl/settletime $settle
|
||||||
hsetprop /sics/$rhControl timecheck 0
|
hsetprop /sics/$rhControl timecheck 0
|
||||||
|
hsetprop /sics/$rhControl callBack "rhCallBack /sics/$rhControl"
|
||||||
}
|
}
|
||||||
|
@ -718,7 +718,7 @@ Motor apx $motor_driver_type [params \
|
|||||||
axis E\
|
axis E\
|
||||||
units mm\
|
units mm\
|
||||||
hardlowerlim -260\
|
hardlowerlim -260\
|
||||||
hardupperlim 5\
|
hardupperlim 45\
|
||||||
maxSpeed 5\
|
maxSpeed 5\
|
||||||
maxAccel 5\
|
maxAccel 5\
|
||||||
maxDecel 5\
|
maxDecel 5\
|
||||||
@ -730,7 +730,7 @@ apx part collimator
|
|||||||
apx long_name apx
|
apx long_name apx
|
||||||
apx home 0
|
apx home 0
|
||||||
apx softlowerlim -255
|
apx softlowerlim -255
|
||||||
apx softupperlim 5
|
apx softupperlim 45
|
||||||
apx speed 5
|
apx speed 5
|
||||||
|
|
||||||
# Sample aperture y
|
# Sample aperture y
|
||||||
|
@ -61,12 +61,16 @@ fileeval $cfPath(hmm)/detector.tcl
|
|||||||
fileeval $cfPath(scan)/scan.tcl
|
fileeval $cfPath(scan)/scan.tcl
|
||||||
fileeval $cfPath(commands)/commands.tcl
|
fileeval $cfPath(commands)/commands.tcl
|
||||||
fileeval $cfPath(anticollider)/anticollider.tcl
|
fileeval $cfPath(anticollider)/anticollider.tcl
|
||||||
fileeval $cfPath(environment)/temperature/sct_julabo_lh45.tcl
|
fileeval $cfPath(environment)/temperature/sct_julabo_lh45_gen.tcl
|
||||||
fileeval $cfPath(environment)/temperature/sct_qlink.tcl
|
fileeval $cfPath(environment)/temperature/sct_qlink.tcl
|
||||||
fileeval $cfPath(environment)/magneticField/tsi_smc_sct.tcl
|
fileeval $cfPath(environment)/magneticField/tsi_smc_sct.tcl
|
||||||
fileeval $cfPath(environment)/temperature/sct_oxford_itc.tcl
|
fileeval $cfPath(environment)/temperature/sct_oxford_itc.tcl
|
||||||
fileeval $cfPath(environment)/magneticField/oxford_labview.tcl
|
fileeval $cfPath(environment)/magneticField/oxford_labview.tcl
|
||||||
|
fileeval $cfPath(environment)/magneticField/sct_oxford10tlv.tcl
|
||||||
|
fileeval $cfPath(environment)/magneticField/sct_oxford12tlv.tcl
|
||||||
fileeval $cfPath(environment)/magneticField/sct_bruker_BEC1.tcl
|
fileeval $cfPath(environment)/magneticField/sct_bruker_BEC1.tcl
|
||||||
|
fileeval $cfPath(environment)/magneticField/sct_bruker.tcl
|
||||||
|
fileeval $cfPath(beamline)/sct_he3_polanal.tcl
|
||||||
fileeval $cfPath(environment)/environment.tcl
|
fileeval $cfPath(environment)/environment.tcl
|
||||||
fileeval $cfPath(environment)/sct_rheometer.tcl
|
fileeval $cfPath(environment)/sct_rheometer.tcl
|
||||||
fileeval $cfPath(environment)/sct_antonparr_MCR500.tcl
|
fileeval $cfPath(environment)/sct_antonparr_MCR500.tcl
|
||||||
|
@ -104,25 +104,58 @@ if { [ info exists ::config_dict ] } {
|
|||||||
set axis_config 0
|
set axis_config 0
|
||||||
} elseif {$implementation == "12tmagnet_sample_insert"} {
|
} elseif {$implementation == "12tmagnet_sample_insert"} {
|
||||||
set axis_config 1
|
set axis_config 1
|
||||||
|
} elseif {$implementation == "eulerian_cradle"} {
|
||||||
|
set axis_config 2
|
||||||
} else {
|
} else {
|
||||||
set axis_config 0
|
set axis_config 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if { [ dict exists $::config_dict m2s2 implementation ] } {
|
||||||
|
set implementation [ dict get $::config_dict m2s2 implementation ]
|
||||||
|
if {$implementation == "normal_m2s2"} {
|
||||||
|
set m2_speed 0.4
|
||||||
|
set m2_accel 0.04
|
||||||
|
set m2_decel 0.04
|
||||||
|
set s2_speed 0.8
|
||||||
|
set s2_accel 0.2
|
||||||
|
set s2_decel 0.2
|
||||||
|
} elseif {$implementation == "extended_m2s2"} {
|
||||||
|
set m2_speed 0.1
|
||||||
|
set m2_accel 0.025
|
||||||
|
set m2_decel 0.025
|
||||||
|
set s2_speed 0.4
|
||||||
|
set s2_accel 0.1
|
||||||
|
set s2_decel 0.1
|
||||||
|
} else {
|
||||||
|
set m2_speed 0.4
|
||||||
|
set m2_accel 0.04
|
||||||
|
set m2_decel 0.04
|
||||||
|
set s2_speed 0.8
|
||||||
|
set s2_accel 0.2
|
||||||
|
set s2_decel 0.2
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch $axis_config {
|
switch $axis_config {
|
||||||
0 {
|
0 {
|
||||||
set use_normal_config "true"
|
set use_s1_stage "true"
|
||||||
set tilt_motor_driver_type $motor_driver_type
|
set tilt_motor_driver_type $motor_driver_type
|
||||||
|
fileeval $cfPath(motors)/tilt_configuration.tcl
|
||||||
}
|
}
|
||||||
1 {
|
1 {
|
||||||
set magmot s1
|
set magmot s1
|
||||||
set magmot_aq "mc2"
|
set magmot_aq "mc2"
|
||||||
set magmot_axis "A"
|
set magmot_axis "A"
|
||||||
set use_normal_config "false"
|
set use_s1_stage "false"
|
||||||
set tilt_motor_driver_type asim
|
set tilt_motor_driver_type asim
|
||||||
|
fileeval $cfPath(motors)/tilt_configuration.tcl
|
||||||
fileeval $cfPath(motors)/magnet_configuration.tcl
|
fileeval $cfPath(motors)/magnet_configuration.tcl
|
||||||
}
|
}
|
||||||
|
2 {
|
||||||
|
set use_s1_stage "true"
|
||||||
|
fileeval $cfPath(motors)/euler_configuration.tcl
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -250,9 +283,9 @@ m2 motOffDelay 0
|
|||||||
m2 backlash_offset -0.5
|
m2 backlash_offset -0.5
|
||||||
m2 creep_offset 0.1
|
m2 creep_offset 0.1
|
||||||
m2 creep_precision 0.0
|
m2 creep_precision 0.0
|
||||||
m2 speed 0.4
|
m2 speed $m2_speed
|
||||||
m2 accel 0.04
|
m2 accel $m2_accel
|
||||||
m2 decel 0.04
|
m2 decel $m2_decel
|
||||||
|
|
||||||
# mc1: Detector Rotate
|
# mc1: Detector Rotate
|
||||||
Motor a2 $motor_driver_type [params \
|
Motor a2 $motor_driver_type [params \
|
||||||
@ -292,100 +325,8 @@ a2 decel 0.2
|
|||||||
############################
|
############################
|
||||||
#
|
#
|
||||||
|
|
||||||
# mc2: Sample Tilt 1
|
|
||||||
Motor sgu $tilt_motor_driver_type [params \
|
|
||||||
asyncqueue mc2\
|
|
||||||
host mc2-taipan\
|
|
||||||
port pmc2-taipan\
|
|
||||||
axis A\
|
|
||||||
units degrees\
|
|
||||||
hardlowerlim -13\
|
|
||||||
hardupperlim 16.5\
|
|
||||||
maxSpeed 2\
|
|
||||||
maxAccel 1\
|
|
||||||
maxDecel 1\
|
|
||||||
stepsPerX 25000\
|
|
||||||
absEnc 1\
|
|
||||||
absEncHome 7745478\
|
|
||||||
cntsPerX 8192]
|
|
||||||
sgu part sample
|
|
||||||
sgu long_name sgu
|
|
||||||
sgu softlowerlim -13
|
|
||||||
sgu softupperlim 16.5
|
|
||||||
sgu home 0
|
|
||||||
sgu backlash_offset -0.2
|
|
||||||
|
|
||||||
# mc2: Sample Tilt 2
|
|
||||||
Motor sgl $tilt_motor_driver_type [params \
|
|
||||||
asyncqueue mc2\
|
|
||||||
host mc2-taipan\
|
|
||||||
port pmc2-taipan\
|
|
||||||
axis B\
|
|
||||||
units degrees\
|
|
||||||
hardlowerlim -16.5\
|
|
||||||
hardupperlim 17.5\
|
|
||||||
maxSpeed 2\
|
|
||||||
maxAccel 1\
|
|
||||||
maxDecel 1\
|
|
||||||
stepsPerX 25000\
|
|
||||||
absEnc 1\
|
|
||||||
absEncHome 7499135\
|
|
||||||
cntsPerX 8192]
|
|
||||||
sgl part sample
|
|
||||||
sgl long_name sgl
|
|
||||||
sgl softlowerlim -16.5
|
|
||||||
sgl softupperlim 17.5
|
|
||||||
sgl home 0
|
|
||||||
sgl backlash_offset -0.2
|
|
||||||
|
|
||||||
# mc2: Sample Up Tanslation
|
|
||||||
Motor stu $motor_driver_type [params \
|
|
||||||
asyncqueue mc2\
|
|
||||||
host mc2-taipan\
|
|
||||||
port pmc2-taipan\
|
|
||||||
axis C\
|
|
||||||
units mm\
|
|
||||||
hardlowerlim -15\
|
|
||||||
hardupperlim 15\
|
|
||||||
maxSpeed 2\
|
|
||||||
maxAccel 1\
|
|
||||||
maxDecel 1\
|
|
||||||
stepsPerX -25000\
|
|
||||||
absEnc 1\
|
|
||||||
absEncHome 7392933\
|
|
||||||
cntsPerX -8192]
|
|
||||||
stu part sample
|
|
||||||
stu long_name stu
|
|
||||||
stu softlowerlim -15
|
|
||||||
stu softupperlim 15
|
|
||||||
stu home 0.0
|
|
||||||
stu backlash_offset -0.2
|
|
||||||
|
|
||||||
# mc2: Sample Lower Tanslation
|
|
||||||
Motor stl $motor_driver_type [params \
|
|
||||||
asyncqueue mc2\
|
|
||||||
host mc2-taipan\
|
|
||||||
port pmc2-taipan\
|
|
||||||
axis D\
|
|
||||||
units mm\
|
|
||||||
hardlowerlim -15\
|
|
||||||
hardupperlim 15\
|
|
||||||
maxSpeed 2\
|
|
||||||
maxAccel 1\
|
|
||||||
maxDecel 1\
|
|
||||||
stepsPerX 25000\
|
|
||||||
absEnc 1\
|
|
||||||
absEncHome 7582773\
|
|
||||||
cntsPerX 8192]
|
|
||||||
stl part sample
|
|
||||||
stl long_name stl
|
|
||||||
stl softlowerlim -15
|
|
||||||
stl softupperlim 15
|
|
||||||
stl home 0.0
|
|
||||||
stl backlash_offset -0.2
|
|
||||||
|
|
||||||
# mc2: Sample Rotate
|
# mc2: Sample Rotate
|
||||||
if {$use_normal_config == "true"} {
|
if {$use_s1_stage == "true"} {
|
||||||
Motor s1 $motor_driver_type [params \
|
Motor s1 $motor_driver_type [params \
|
||||||
asyncqueue mc2\
|
asyncqueue mc2\
|
||||||
host mc2-taipan\
|
host mc2-taipan\
|
||||||
@ -409,6 +350,7 @@ if {$use_normal_config == "true"} {
|
|||||||
s1 backlash_offset -0.2
|
s1 backlash_offset -0.2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# mc2: Analyser Detector Rotate -- Sample Scattering Angle
|
# mc2: Analyser Detector Rotate -- Sample Scattering Angle
|
||||||
# absEncHome 20728908\ at -50
|
# absEncHome 20728908\ at -50
|
||||||
Motor s2 $motor_driver_type [params \
|
Motor s2 $motor_driver_type [params \
|
||||||
@ -440,9 +382,9 @@ s2 backlash_offset 0.5
|
|||||||
s2 blockage_thresh 1
|
s2 blockage_thresh 1
|
||||||
s2 creep_offset 0.015
|
s2 creep_offset 0.015
|
||||||
s2 creep_precision 0.005
|
s2 creep_precision 0.005
|
||||||
s2 speed 0.8
|
s2 speed $s2_speed
|
||||||
s2 accel 0.2
|
s2 accel $s2_accel
|
||||||
s2 decel 0.2
|
s2 decel $s2_decel
|
||||||
|
|
||||||
# mc2: Analyser Horizontal Focus
|
# mc2: Analyser Horizontal Focus
|
||||||
Motor ahfocus $motor_driver_type [params \
|
Motor ahfocus $motor_driver_type [params \
|
||||||
@ -520,9 +462,10 @@ mvfocus long_name mvfocus
|
|||||||
mvfocus softlowerlim 0
|
mvfocus softlowerlim 0
|
||||||
mvfocus softupperlim 300
|
mvfocus softupperlim 300
|
||||||
mvfocus home 0.0
|
mvfocus home 0.0
|
||||||
mvfocus Blockage_Thresh 2
|
mvfocus Blockage_Thresh 4
|
||||||
mvfocus Blockage_Check_Interval 2
|
mvfocus Blockage_Check_Interval 2
|
||||||
mvfocus creep_offset 0.2
|
mvfocus creep_offset 0.2
|
||||||
|
mvfocus backlash_offset -4
|
||||||
# mc3: Monochromator Horizontal Focus
|
# mc3: Monochromator Horizontal Focus
|
||||||
Motor mhfocus $motor_driver_type [params \
|
Motor mhfocus $motor_driver_type [params \
|
||||||
asyncqueue mc3\
|
asyncqueue mc3\
|
||||||
@ -531,25 +474,26 @@ Motor mhfocus $motor_driver_type [params \
|
|||||||
axis B\
|
axis B\
|
||||||
units degrees\
|
units degrees\
|
||||||
precision 0.2\
|
precision 0.2\
|
||||||
hardlowerlim -80\
|
hardlowerlim -10\
|
||||||
hardupperlim 240\
|
hardupperlim 280\
|
||||||
maxSpeed 3.6\
|
maxSpeed 3.6\
|
||||||
maxAccel 1.728\
|
maxAccel 1.728\
|
||||||
maxDecel 1.728\
|
maxDecel 1.728\
|
||||||
stepsPerX [expr -25000.0 * 50.0 / 360.0]\
|
stepsPerX [expr 25000.0 * 50.0 / 360.0]\
|
||||||
absEnc 1\
|
absEnc 1\
|
||||||
bias_bits 12\
|
bias_bits 12\
|
||||||
bias_bias 1540\
|
bias_bias 1300\
|
||||||
absEncHome 2788\
|
absEncHome 243\
|
||||||
cntsPerX [expr -4096.0 / 360.0]]
|
cntsPerX [expr 4096.0 / 360.0]]
|
||||||
mhfocus part crystal
|
mhfocus part crystal
|
||||||
mhfocus long_name mhfocus
|
mhfocus long_name mhfocus
|
||||||
mhfocus softlowerlim -75
|
mhfocus softlowerlim -10
|
||||||
mhfocus softupperlim 235
|
mhfocus softupperlim 280
|
||||||
mhfocus home 0
|
mhfocus home 0
|
||||||
mhfocus Blockage_Thresh 2
|
mhfocus Blockage_Thresh 4
|
||||||
mhfocus Blockage_Check_Interval 2
|
mhfocus Blockage_Check_Interval 2
|
||||||
mhfocus creep_offset 0.2
|
mhfocus creep_offset 0.2
|
||||||
|
mhfocus backlash_offset -4
|
||||||
|
|
||||||
# mc3: Monochromator Rotate
|
# mc3: Monochromator Rotate
|
||||||
Motor m1 $motor_driver_type [params \
|
Motor m1 $motor_driver_type [params \
|
||||||
|
@ -0,0 +1,92 @@
|
|||||||
|
# mc2: Sample Tilt 1
|
||||||
|
Motor sgu $tilt_motor_driver_type [params \
|
||||||
|
asyncqueue mc2\
|
||||||
|
host mc2-taipan\
|
||||||
|
port pmc2-taipan\
|
||||||
|
axis A\
|
||||||
|
units degrees\
|
||||||
|
hardlowerlim -13\
|
||||||
|
hardupperlim 16.5\
|
||||||
|
maxSpeed 2\
|
||||||
|
maxAccel 1\
|
||||||
|
maxDecel 1\
|
||||||
|
stepsPerX 25000\
|
||||||
|
absEnc 1\
|
||||||
|
absEncHome 7745478\
|
||||||
|
cntsPerX 8192]
|
||||||
|
sgu part sample
|
||||||
|
sgu long_name sgu
|
||||||
|
sgu softlowerlim -13
|
||||||
|
sgu softupperlim 16.5
|
||||||
|
sgu home 0
|
||||||
|
sgu backlash_offset -0.2
|
||||||
|
|
||||||
|
# mc2: Sample Tilt 2
|
||||||
|
Motor sgl $tilt_motor_driver_type [params \
|
||||||
|
asyncqueue mc2\
|
||||||
|
host mc2-taipan\
|
||||||
|
port pmc2-taipan\
|
||||||
|
axis B\
|
||||||
|
units degrees\
|
||||||
|
hardlowerlim -16.5\
|
||||||
|
hardupperlim 17.5\
|
||||||
|
maxSpeed 2\
|
||||||
|
maxAccel 1\
|
||||||
|
maxDecel 1\
|
||||||
|
stepsPerX 25000\
|
||||||
|
absEnc 1\
|
||||||
|
absEncHome 7499135\
|
||||||
|
cntsPerX 8192]
|
||||||
|
sgl part sample
|
||||||
|
sgl long_name sgl
|
||||||
|
sgl softlowerlim -16.5
|
||||||
|
sgl softupperlim 17.5
|
||||||
|
sgl home 0
|
||||||
|
sgl backlash_offset -0.2
|
||||||
|
|
||||||
|
# mc2: Sample Up Tanslation
|
||||||
|
Motor stu $motor_driver_type [params \
|
||||||
|
asyncqueue mc2\
|
||||||
|
host mc2-taipan\
|
||||||
|
port pmc2-taipan\
|
||||||
|
axis C\
|
||||||
|
units mm\
|
||||||
|
hardlowerlim -15\
|
||||||
|
hardupperlim 15\
|
||||||
|
maxSpeed 2\
|
||||||
|
maxAccel 1\
|
||||||
|
maxDecel 1\
|
||||||
|
stepsPerX -25000\
|
||||||
|
absEnc 1\
|
||||||
|
absEncHome 7392933\
|
||||||
|
cntsPerX -8192]
|
||||||
|
stu part sample
|
||||||
|
stu long_name stu
|
||||||
|
stu softlowerlim -15
|
||||||
|
stu softupperlim 15
|
||||||
|
stu home 0.0
|
||||||
|
stu backlash_offset -0.2
|
||||||
|
|
||||||
|
# mc2: Sample Lower Tanslation
|
||||||
|
Motor stl $motor_driver_type [params \
|
||||||
|
asyncqueue mc2\
|
||||||
|
host mc2-taipan\
|
||||||
|
port pmc2-taipan\
|
||||||
|
axis D\
|
||||||
|
units mm\
|
||||||
|
hardlowerlim -15\
|
||||||
|
hardupperlim 15\
|
||||||
|
maxSpeed 2\
|
||||||
|
maxAccel 1\
|
||||||
|
maxDecel 1\
|
||||||
|
stepsPerX 25000\
|
||||||
|
absEnc 1\
|
||||||
|
absEncHome 7582773\
|
||||||
|
cntsPerX 8192]
|
||||||
|
stl part sample
|
||||||
|
stl long_name stl
|
||||||
|
stl softlowerlim -15
|
||||||
|
stl softupperlim 15
|
||||||
|
stl home 0.0
|
||||||
|
stl backlash_offset -0.2
|
||||||
|
|
@ -40,18 +40,22 @@ fileeval $cfPath(environment)/agilent_33220A_sct.tcl
|
|||||||
fileeval $cfPath(environment)/sct_protek_common.tcl
|
fileeval $cfPath(environment)/sct_protek_common.tcl
|
||||||
fileeval $cfPath(environment)/protekmm_sct.tcl
|
fileeval $cfPath(environment)/protekmm_sct.tcl
|
||||||
fileeval $cfPath(environment)/temperature/sct_eurotherm_2000.tcl
|
fileeval $cfPath(environment)/temperature/sct_eurotherm_2000.tcl
|
||||||
|
fileeval $cfPath(environment)/temperature/sct_eurotherm_3200.tcl
|
||||||
fileeval $cfPath(environment)/temperature/sct_julabo_lh45.tcl
|
fileeval $cfPath(environment)/temperature/sct_julabo_lh45.tcl
|
||||||
fileeval $cfPath(environment)/temperature/sct_lakeshore_336.tcl
|
fileeval $cfPath(environment)/temperature/sct_lakeshore_336.tcl
|
||||||
fileeval $cfPath(environment)/temperature/ls336_sct.tcl
|
fileeval $cfPath(environment)/temperature/ls336_sct.tcl
|
||||||
fileeval $cfPath(environment)/temperature/sct_lakeshore_340.tcl
|
fileeval $cfPath(environment)/temperature/sct_lakeshore_340.tcl
|
||||||
fileeval $cfPath(environment)/temperature/ls340_sct.tcl
|
fileeval $cfPath(environment)/temperature/ls340_sct.tcl
|
||||||
fileeval $cfPath(environment)/temperature/sct_lakeshore_370.tcl
|
fileeval $cfPath(environment)/temperature/sct_lakeshore_370.tcl
|
||||||
|
fileeval $cfPath(environment)/temperature/sct_lakeshore_m370.tcl
|
||||||
fileeval $cfPath(environment)/temperature/sct_oxford_itc.tcl
|
fileeval $cfPath(environment)/temperature/sct_oxford_itc.tcl
|
||||||
fileeval $cfPath(environment)/temperature/oxford_mercury_sct.tcl
|
fileeval $cfPath(environment)/temperature/oxford_mercury_sct.tcl
|
||||||
fileeval $cfPath(environment)/temperature/west400.tcl
|
fileeval $cfPath(environment)/temperature/west400.tcl
|
||||||
|
fileeval $cfPath(environment)/temperature/sct_west_6100.tcl
|
||||||
|
fileeval $cfPath(environment)/he3/sct_he3.tcl
|
||||||
fileeval $cfPath(environment)/magneticField/oxford_labview.tcl
|
fileeval $cfPath(environment)/magneticField/oxford_labview.tcl
|
||||||
fileeval $cfPath(environment)/magneticField/oxford12tlv_sct.tcl
|
fileeval $cfPath(environment)/magneticField/oxford12tlv_sct.tcl
|
||||||
fileeval $cfPath(environment)/he3/sct_he3.tcl
|
fileeval $cfPath(beamline)/he3_polanal_sct.tcl
|
||||||
fileeval config/load_setup.tcl
|
fileeval config/load_setup.tcl
|
||||||
fileeval log.tcl
|
fileeval log.tcl
|
||||||
publish logbook spy
|
publish logbook spy
|
||||||
@ -60,18 +64,36 @@ source gumxml.tcl
|
|||||||
::utility::mkVar ::anticollider::protect_detector text manager protect_detector false detector true false
|
::utility::mkVar ::anticollider::protect_detector text manager protect_detector false detector true false
|
||||||
::anticollider::protect_detector "true"
|
::anticollider::protect_detector "true"
|
||||||
|
|
||||||
|
if { [ dict exists $::config_dict sample_stage implementation ] } {
|
||||||
|
set sample_stage [ dict get $::config_dict sample_stage implementation ]
|
||||||
|
} else {
|
||||||
|
set sample_stage "normal_sample_stage"
|
||||||
|
}
|
||||||
|
switch $sample_stage {
|
||||||
|
"eulerian_cradle" {
|
||||||
|
# s1-> eom, sgu -> ephi, sgl -> echi
|
||||||
|
set OMEGA s1
|
||||||
|
set PHI ephi
|
||||||
|
set CHI echi
|
||||||
|
}
|
||||||
|
"normal_sample_stage" - default {
|
||||||
|
set OMEGA s1
|
||||||
|
set PHI sgu
|
||||||
|
set CHI sgl
|
||||||
|
}
|
||||||
|
}
|
||||||
# init for the tasUB
|
# init for the tasUB
|
||||||
#make mcv mch acv ach into mvfocus mhfocus avfocus ahfocus when it works
|
#make mcv mch acv ach into mvfocus mhfocus avfocus ahfocus when it works
|
||||||
puts "doing tasub"
|
puts "doing tasub"
|
||||||
MakeTasUB tasub m1 m2 mvfocus mhfocus s1 s2 sgu sgl a1 a2 avfocus ahfocus
|
MakeTasUB tasub m1 m2 mvfocus mhfocus $OMEGA s2 $PHI $CHI a1 a2 avfocus ahfocus
|
||||||
tasub mono dd 3.35416
|
tasub mono dd 3.35416
|
||||||
tasub ana dd 3.35416
|
tasub ana dd 3.35416
|
||||||
# NOTE Autofocussing parameters persist in status.tcl
|
# NOTE Autofocussing parameters (vbn, hbn) persist in status.tcl
|
||||||
# You must set them in extraconfig.tcl to override this behaviour
|
# To override this behaviour you can set them in extraconfig.tcl
|
||||||
tasub mono vb1 102.2
|
tasub mono vb1 102.2
|
||||||
tasub mono vb2 1.78
|
tasub mono vb2 1.78
|
||||||
tasub mono hb1 184.42
|
tasub mono hb1 18.28
|
||||||
tasub mono hb2 -60.1
|
tasub mono hb2 60.1
|
||||||
tasub mono hb3 0.951
|
tasub mono hb3 0.951
|
||||||
tasub ana vb1 115
|
tasub ana vb1 115
|
||||||
tasub ana vb2 2.13
|
tasub ana vb2 2.13
|
||||||
@ -90,6 +112,16 @@ server_init
|
|||||||
###########################################
|
###########################################
|
||||||
# WARNING: Do not add any code below server_init, if you do SICS may fail to initialise properly.
|
# WARNING: Do not add any code below server_init, if you do SICS may fail to initialise properly.
|
||||||
|
|
||||||
|
puts "Making hkl command"
|
||||||
|
MakeMono mono PG m1 m2
|
||||||
|
mono dd 3.35416
|
||||||
|
MakeWaveLength lambda mono
|
||||||
|
MakeEnergy energy mono
|
||||||
|
#MakeSingleX singlex
|
||||||
|
#MakeHKL s2 $OMEGA $PHI $CHI
|
||||||
|
#MakeHKLMot hkl
|
||||||
|
#MakeUBcalc ubcalc hkl
|
||||||
|
|
||||||
# Provide tasmot notifications to GumTree when real motors move
|
# Provide tasmot notifications to GumTree when real motors move
|
||||||
proc m2tasupdate {} {
|
proc m2tasupdate {} {
|
||||||
tasub update
|
tasub update
|
||||||
@ -125,7 +157,7 @@ proc a2tasupdate {} {
|
|||||||
publish a2tasupdate user
|
publish a2tasupdate user
|
||||||
|
|
||||||
scriptcallback connect m2 MOTEND m2tasupdate
|
scriptcallback connect m2 MOTEND m2tasupdate
|
||||||
scriptcallback connect s1 MOTEND s1s2tasupdate
|
scriptcallback connect $OMEGA MOTEND s1s2tasupdate
|
||||||
scriptcallback connect s2 MOTEND s1s2tasupdate
|
scriptcallback connect s2 MOTEND s1s2tasupdate
|
||||||
scriptcallback connect a2 MOTEND a2tasupdate
|
scriptcallback connect a2 MOTEND a2tasupdate
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user