Files
sics/site_ansto/instrument/config/environment/hiden_xcs.sct

133 lines
3.9 KiB
Plaintext

#
# Simple driver generator for the Hiden Isochema XCS vapour delivery system
# vim: ts=8 sts=2 sw=2 expandtab autoindent smartindent
#
driver hiden_xcs_gen = {
usecreatenode = false
vendor = hiden; device = xcs; protocol = std;
class = environment
simulation_group = environment_simulation
add_args = 'terminator {tol 0.5}';
make_args = 'tol';
protocol_args = '${terminator}';
#
# Unnamed group has variables at device level
#
group = {
type = float
priv = user
var temperature
var flow1
var flow2
var flow3
var humidity = {
driveable = humidity
readable = 1
read_command = '?ALL DATA'
read_function = read_all_data
value = 50
lowerlimit = 10
upperlimit = 90
tolerance = 5
}
}
#
# The named group is at the device level, variables below that
#
group analog = {
type = float;
priv = user;
readable = 1;
read_function = read_sixteen;
var ain0 = { read_command = '?AIN,0'; };
var ain1 = { read_command = '?AIN,1'; };
var ain2 = { read_command = '?AIN,2'; };
var ain8 = { read_command = '?AIN,8'; };
var ain9 = { read_command = '?AIN,9'; };
var ain12 = { read_command = '?AIN,12'; };
writeable = 1;
read_function = read_twelve;
write_function = write_twelve;
var aout0 = { read_command = '?AOUT,0'; write_command = '!AOUT,0,'; }
var aout1 = { read_command = '?AOUT,1'; write_command = '!AOUT,1,'; }
var aout2 = { read_command = '?AOUT,2'; write_command = '!AOUT,2,'; }
};
group digital = {
type = int;
priv = user;
readable = 1;
writeable = 1;
read_function = read_digital;
write_Function = write_digital;
var dout2 = { read_command = '?DOUT,2'; write_command = '!DOUT,2,'; allowed = '0,1'; readable = 5}
}
#
# Code lines start with '@' which is stripped before being emitted into generated driver
# The code is emitted at the appropriate place in the given function
#
code read_function read_digital = {
@ if { [string equal -nocase -length 5 "${data}" "DOUT ="] } {
@ set result [scan "${data}" "DOUT = %d OK" val]
@ if { ${result} == 1 } {
@ set data ${val}
@ } else {
@ sct geterror "Syntax error (Result=${result}) in: '${data}'"
@ }
@ } else {
@ sct geterror "Syntax error in: '${data}'"
@ }
}
code read_function read_twelve = {
@ if { [string equal -nocase -length 5 "${data}" "AOUT ="] } {
@ set result [scan "${data}" "AOUT = %d OK" val]
@ if { ${result} == 1 } {
@ set data [expr (100.0 * ${val}) / 4095.0]
@ } else {
@ sct geterror "Syntax (Result=${result}) error in: '${data}'"
@ }
@ } else {
@ sct geterror "Syntax error in: '${data}'"
@ }
}
code read_function read_sixteen = {
@ if { [string equal -nocase -length 5 "${data}" "AIN ="] } {
@ set result [scan "${data}" "AIN = %d OK" val]
@ if { ${result} == 1 } {
@ set data [expr (100.0 * ${val}) / 65535.0]
@ } else {
@ sct geterror "Syntax error (Result=${result}) in: '${data}'"
@ }
@ } else {
@ sct geterror "Syntax error in: '${data}'"
@ }
}
code read_function read_all_data = {
@ if { [string equal -nocase -length 2 "${data}" "A "] } {
@ set lust [split [string range "${data}" 2 end-3] ',']
@ if { [llength ${lust}] == 8 } {
@ set data [expr [lindex ${lust} 0]]
@ hupdate ${tc_root}/temperature [expr [lindex ${lust} 1]]
@ hupdate ${tc_root}/flow1 [expr [lindex ${lust} 3]]
@ hupdate ${tc_root}/flow2 [expr [lindex ${lust} 4]]
@ hupdate ${tc_root}/flow3 [expr [lindex ${lust} 5]]
@ } else {
@ sct geterror "Syntax error (Result=${result}) in: '${data}'"
@ }
@ } else {
@ sct geterror "Syntax error for read_all_data in: '${data}'"
@ }
}
code write_function write_digital = {
}
code write_function write_twelve = {
@ set par [expr int(4095.0 * ${par} / 100.0)]
@ set cmd "${cmd_str}${par}"
}
#
# This code is after database creation
#
code mkDriver = {
}
};