99 lines
2.6 KiB
Plaintext
99 lines
2.6 KiB
Plaintext
#
|
|
# Simple driver generator for the non-motor galil controls on mc8
|
|
# vim: ts=8 sts=2 sw=2 expandtab autoindent smartindent nocindent
|
|
#
|
|
driver tank = {
|
|
vendor = galil; device = mc8; protocol = dmc2280;
|
|
class = instrument
|
|
simulation_group = motor_simulation
|
|
#
|
|
# Unnamed group has variables at device level
|
|
#
|
|
#
|
|
# The named group is at the device level, variables below that
|
|
#
|
|
group = {
|
|
var pos = {
|
|
type = float;
|
|
priv = spy;
|
|
mutable = true;
|
|
readable = 1;
|
|
read_function = read_pos;
|
|
read_command = 'MG _TPH';
|
|
}
|
|
}
|
|
group switches = {
|
|
type = text;
|
|
priv = user;
|
|
readable = 1;
|
|
read_function = read_switch;
|
|
var forward = {
|
|
read_command = 'MG @IN[5]'
|
|
}
|
|
var reverse = {
|
|
read_command = 'MG @IN[6]'
|
|
}
|
|
};
|
|
group limits = {
|
|
type = text;
|
|
priv = user;
|
|
readable = 1;
|
|
read_function = read_switch;
|
|
var forward = {
|
|
read_command = 'MG _LFH'
|
|
}
|
|
var reverse = {
|
|
read_command = 'MG _LRH'
|
|
}
|
|
};
|
|
|
|
#
|
|
# Code lines start with '@' which is stripped before being emitted
|
|
# The code is emitted at the appropriate place in the given function
|
|
#
|
|
code read_function read_switch = {
|
|
@ if { [string equal -nocase -length 1 "${data}" "?"] } {
|
|
@ sct geterror "Galil error in: '${data}'"
|
|
@ } else {
|
|
@ set data_list [split [string trim "${data}"]]
|
|
@ if { [llength ${data_list}] > 1 && [lindex ${data_list} end] == ":" } {
|
|
@ set data_list [lrange ${data_list} 0 0]
|
|
@ }
|
|
@ if { [llength ${data_list}] == 1 } {
|
|
@ set left [expr [lindex ${data_list} 0]]
|
|
@ if { ${left} == 1 } { # open
|
|
@ set data "open"
|
|
@ } else { # closed
|
|
@ set data "closed"
|
|
@ }
|
|
@ } else {
|
|
@ sct geterror "Syntax error in: '${data}'=>'${data_list}'"
|
|
@ }
|
|
@ }
|
|
}
|
|
code read_function read_pos = {
|
|
@ global tank_absenchome tank_cnts_per_x tank_home
|
|
@ if { [string equal -nocase -length 1 "${data}" "?"] } {
|
|
@ sct geterror "Galil error in: '${data}'"
|
|
@ } else {
|
|
@ set data_list [split [string trim "${data}"]]
|
|
@ if { [llength ${data_list}] > 1 && [lindex ${data_list} end] == ":" } {
|
|
@ set data_list [lrange ${data_list} 0 0]
|
|
@ }
|
|
@ if { [llength ${data_list}] == 1 } {
|
|
@ set absenc [unpad [lindex ${data_list} 0]]
|
|
@ set data [expr {($absenc - $tank_absenchome) / $tank_cnts_per_x + $tank_home}]
|
|
@ vessel_y $data
|
|
@ } else {
|
|
@ sct geterror "Syntax error in: '${data}'=>'${data_list}'"
|
|
@ }
|
|
@ }
|
|
}
|
|
#
|
|
# This code is after database creation
|
|
#
|
|
code mkDriver = {
|
|
@ ::utility::mkVar vessel_y float user vessel_y true instrument true true
|
|
}
|
|
};
|