# $Log: mksrga.mac,v $
# Revision 1.4 2016/12/02 10:26:45 guilloud
# changed TANGO_ERR test.
#
# Revision 1.3 2011/11/07 12:30:39 claustre
# # missing, added again some macros like mksrgalim and enhanced mksrgastatus
#
# Revision 1.2 2011/11/07 09:41:23 claustre
# Added new macros.
#
# Revision 1.1 2011/10/20 14:53:59 claustre
# Initial revision
#
#%NAME%
# MKSRGA.MAC - pseudo counters for MKS RGA controller partial pressure measurement
#
#%DESCRIPTION%
#
# %BR%
#
# This macro set is based on the use of the MKS_MicrovisionIP_RGA Tango device server. %BR%
# This device server is available from the package Control/Tango/Server/MKS_MicrovisionIP_RGA.
#%END%
#
#%UU% <name> <device name>
#%MDESC%
def mksrgasetup '{
local rga_name rga_device arrayname
global MKSRGA_DEV[]
global MKSRGA_UNIT
list_init MKSRGA_DEV
if ($# !=2){
print "Usage: $0 <name> <mksrga device name>"
exit
}
rga_name = "$1"
rga_device = "$2"
list_add(MKSRGA_DEV,rga_name)
MKSRGA_DEV[rga_name]["device"] = rga_device
MKSRGA_DEV[rga_name]["enable"] = 1
MKSRGA_DEV[rga_name]["cnt_on"] = 0
tango_io(rga_device,"State")
if (TANGO_ERR != "0") {
_mksrga_error rga_name; printf ("device is not reachable\n")
MSKRGA_DEV[rga_name]["enable"] = 0
exit
}
tango_io(rga_device,"timeout", 10)
MKSRGA_UNIT = rga_name
arrayname = sprintf("mksrga_data_%s", rga_name)
double array @arrayname[101]
MKSRGA_DEV[rga_name]["arrayname"] = arrayname
startmass = tango_get(rga_device,"StartMass")
endmass = tango_get(rga_device,"EndMass")
MKSRGA_DEV[rga_name]["startmass"] = startmass
MKSRGA_DEV[rga_name]["endmass"] = endmass
MKSRGA_DEV[rga_name]["cnt_on"] = 1
setup_tail("mksrga", rga_name)
}'
#%UU% <name>
#%MDESC% unsetup rga name %BR%
# Remove all cdefs
def mksrgaunsetup '{
local rganame
if (!$#) {
print "Usage: $0 <rganame>"
exit
}
rganame= "$1"
if (list_check(MKSRGA_DEV, rganame)>0) {
arrname= MKSRGA_DEV[rganame]["arrname"]
unglobal @arrname
MKSRGA_DEV[rganame]["cnt_on"] = 0
}
if (MKSRGA_UNIT==rganame) {
if (list_n(MKSRGA_DEV)>0) {
MKSRGA_UNIT= list_item(MKSRGA_DEV, 1)
} else {
MKSRGA_UNIT= 0
}
}
}'
#%UU% <rga name> <cnt mne> <mass>
#%MDESC%
# Create a new pseudo counter for rga "rga name" on mass "mass" using counter "cnt mne".
def mksrga_add_counter '{
if ($# != 3) {
print "Usage: $0 <rganame> <cntmne> <mass>"
exit
}
_mksrga_add_counter("$1", "$2", $3)
}'
#%IU% ()
#%MDESC%
# Add a mass pseudo counter for rga "rganame" and mass "mass"
def _mksrga_add_counter(rganame, cntmne, mass) '{
_mksrga_counter_init()
if (list_check(MKSRGA_DEV, rganame)<=0) {
_mksrga_error ; printf("<%s> is not a MKS RGA\n", "$1")
exit
}
if (list_item(MKSRGA_CNT, cntmne)==-1)
list_add(MKSRGA_CNT, cntmne)
MKSRGA_CNT[cntmne]["rganame"] = rganame
MKSRGA_CNT[cntmne]["mass"] = mass
}'
#%IU% ()
#%MDESC%
# Initialise associative array %B%MKSRGA_CNT%B% and create user_getcounts cdef
#
def _mksrga_counter_init ()'{
global MKSRGA_CNT[]
if (list_n(MKSRGA_CNT)<0)
list_init MKSRGA_CNT
cdef ("user_getcounts","_mksrga_getcounts\n","mksrga_counters", 0x20)
}'
#%UU% <roimne>
#%MDESC%
# Remove the specified mass counter
#
def mksrga_remove_counter '{
local cntmne
if ($#!=1) {
print "Usage: $0 <cntmne>"
exit
}
cntmne= "$1"
if (list_check(MKSRGA_CNT, cntmne)<=0) {
_mksrga_error ; printf("Unknown ROI <%s>\n", cntmne)
} else {
_mksrga_remove_counter(cntmne)
}
}'
#%IU% (cntmne)
#%MDESC%
# Remove the specified mass counter
#
def _mksrga_remove_counter(cntmne) '{
local cntnum rganame
rganame= MKSRGA_CNT[cntmne]["rganame"]
list_remove(MKSRGA_CNT, cntmne)
if ((cntnum= cnt_num(cntmne))!=-1) {
S[cntnum]= 0
}
if (list_n(MKSRGA_CNT)<1) {
cdef("", "", "mksrga_counters", "delete")
}
}'
#%UU% [<rga name>]
#%MDESC%
# Show or change active MKS RGA.
# Active MKS RGA has to be set for acquisition macros like %B%mksrga_start%B%
#
def mksrgadev '{
if ($#==1) {
local rganame
rganame= "$1"
if (rganame == rganame + 0) {
if (!_mksrga_setunit(rganame)) {
_mksrga_error; printf("rga unit <%d> is not a RGA\n", rganame)
}
} else {
if (!_mksrga_setname(rganame)) {
_mksrga_error; printf("rga name <%s> is not a MKS RGA\n", rganame)
}
}
} else {
if (!MKSRGA_UNIT) {
_mksrga_trace; printf("No default MKS RGA set !!\n")
} else {
_mksrga_trace; printf("Using <%s>\n", MKSRGA_UNIT)
}
}
}'
#%IU% (rgaunit)
def _mksrga_getname(unit) '{
local irga rganame
for (irga=1; irga<=list_n(MKSRGA_DEV); irga++) {
rganame= list_item(MKSRGA_DEV, irga)
if (MKSRGA_DEV[rganame]["unit"]==unit)
return rganame
}
return 0
}'
#%IU% (rgaunit)
def _mksrga_setunit(unit) '{
local rganame
rganame= _mksrga_getname(unit)
if (rganame) {
MKSRGA_UNIT= rganame
return rganame
}
return 0
}'
#%IU% (rganame)
def _mksrga_setname(rganame) '{
local irga
for (irga=1; irga<=list_n(MKSRGA_DEV); irga++) {
if (rganame == list_item(MKSRGA_DEV, irga)
MKSRGA_UNIT= rganame
return rganame
}
return 0
}'
#%UU% [rganame]
#%MDESC% Switch on rga pseudo counters
def mksrgaon '{
local rganame
_mksrga_check_unit $*
MKSRGA_DEV[rganame]["cnt_on"] = 1
}'
#%UU%
#%MDESC% Switch off rga pseudo counters
def mksrgaoff '{
local rganame
_mksrga_check_unit $*
MKSRGA_DEV[rganame]["cnt_on"] = 0
}'
#%UU% [rganame]
#%MDESC% Switch off the rga filament, see mksrgasetfil to select the filament number
def mksrgafilon '{
local rganame
_mksrga_check_unit $*
tango_io(MKSRGA_DEV[rganame]["device"],"On")
_mksrga_trace ; printf("unit %s, filament switched ON\n", rganame)
}'
#%UU% [rganame]
#%MDESC% Switch on the rga filament, see mksrgasetfil to select the filament number
def mksrgafiloff '{
local rganame
_mksrga_check_unit $*
tango_io(MKSRGA_DEV[rganame]["device"],"Off")
_mksrga_trace ; printf("unit %s, filament switched OFF\n", rganame)
}'
#%UU% [filament number (1-2)]
#%MDESC% Set or return the rga filament number, see mksrgafilon/off to switch on/off the filament
def mksrgafil '{
local filn rganame
rganame = MKSRGA_UNIT
rgadev = MKSRGA_DEV[rganame]["device"]
if ($#==1 && ($1!=1 && $1!=2)) {
print "Usage: $0 <filament number (1-2)>"
exit
} else {
if ($#==0){
filn = tango_get(rgadev,"FilamentNumber")
_mksrga_trace; printf("unit %s, active filament is %d\n",rganame, filn)
}else {
filn = $1
tango_put(rgadev,"FilamentNumber", filn)
}
}
}'
#%UU% [<startmass> <endmass>]
#%MDESC% Set the rga mass interval limits for scanning
def mksrgalim '{
local startmass endmass rganame rgadev
rganame = MKSRGA_UNIT
rgadev = MKSRGA_DEV[rganame]["device"]
if ($#!=2) {
if ($#==0) {
startmass = tango_get(rgadev,"StartMass")
endmass = tango_get(rgadev,"EndMass")
MKSRGA_DEV[rganame]["startmass"] = startmass
MKSRGA_DEV[rganame]["endmass"] = endmass
_mksrga_trace; printf("unit %s, mass interval = [%d - %d]\n",rganame,startmass, endmass)
} else {
print "Usage: $0 [<startmass> <endmass>]"
exit
}
}else if ($# == 2) {
startmass = $1; endmass = $2
MKSRGA_DEV[rganame]["startmass"] = startmass
MKSRGA_DEV[rganame]["endmass"] = endmass
tango_put(rgadev,"StartMass", startmass)
tango_put(rgadev,"EndMass", startmass)
_mksrga_trace; printf("unit %s, new mass interval limits set\n", rganame)
}
}'
#%UU% [rganame]
#%MDESC% Display the rga status
def mksrgastatus '{
local rganame _status
_mksrga_check_unit $*
_status = tango_get(MKSRGA_DEV[rganame]["device"],"Status")
_mksrga_trace; printf("%s\n", _status)
mksrgafil
mksrgalim
}'
#%UU% [rganame]
#%MDESC% Ask the device server to release the rga device, allows other application %BR%
# like web browser to get control of the device.
def mksrga_release '{
local rganame
_mksrga_check_unit $*
tango_io(MKSRGA_DEV[rganame]["device"],"Release")
_mksrga_trace ; printf("unit %s Released\n", rganame)
mksrgastatus
}'
#%UU% [rganame]
#%MDESC% Ask the device server to take control the rga device %BR%
# it Supposes there is no more other client connected to the device (like a web browser).
def mksrga_init '{
local rganame
_mksrga_check_unit $*
tango_io(MKSRGA_DEV[rganame]["device"],"Init")
_mksrga_trace ; printf("unit %s Under control\n", rganame)
mksrgastatus
}'
#%IU%
def _mksrga_check_unit '
if ($#==1){
rganame= "$1"
if (list_check(MKSRGA_DEV, rganame)<=0) {
_mksrga_error ; printf("<%s> is not a MKS RGA\n", "$1")
exit
}
} else{
rganame = MKSRGA_UNIT
}
'
#%IU%
#%MDESC%
def _mksrga_getcounts '{
local irga rganame arrayname device cnti
local cntmne cntnum
local device_list[] dev
for (irga = 1; irga <= list_n(MKSRGA_CNT); irga++) {
cntmne = list_item(MKSRGA_CNT, irga)
cntnum = cnt_num(cntmne)
rganame = MKSRGA_CNT[cntmne]["rganame"]
if (MKSRGA_DEV[rganame]["enable"] && MKSRGA_DEV[rganame]["cnt_on"]) {
device = MKSRGA_DEV[rganame]["device"]
dev = (device in device_list)? 1:0
# only read once the masses for each device
if (!dev) {
device_list[device]=1
arrayname = MKSRGA_DEV[rganame]["arrayname"]
tango_get(device,"Masses", @arrayname)
}
if (cntnum !=-1 && counter_par(cntnum,"disable")!=-1) {
S[cntnum] = @arrayname[MKSRGA_CNT[cntmne]["mass"]]
}
}else {
device_list[device]=1
}
}
}'
#%IU%
#%MDESC%
def _mksrga_error '{
tty_cntl("md")
printf("MKS-RGA%s ERROR > ", ($#==1) ? sprintf("[%s]", $1) : "")
tty_cntl("me")
}'
#%IU%
def _mksrga_trace '{
tty_cntl("md")
printf("MKS-RGA%s > ", ($#==1) ? sprintf("[%s]", $1) : "")
tty_cntl("me")
}'
#%MACROS%
#%IMACROS%
#%TOC%
#%AUTHOR% L.Claustre, $Revision: 1.4 $, $Date: 2016/12/02 10:26:45 $
|