#%TITLE% DCP3000.MAC
#
#%NAME%
# DCP3000.MAC - Macros to control DCP3000 pressure controller
#
#%OVERVIEW%
#
#
#%END%
def dcp3000_setup '{
global DCP3000_LIST[]
global DCP3000_SCANON
global DCP3000_WAIT
DCP3000_WAIT = 0.2
list_init DCP3000_LIST
# ct
cdef("user_getcounts","_dcp3000_set_cnts; ","dcp3000")
#screen
cdef("user_prescan_head","_dcp3000_scan_read();","_dcp3000_scan")
#datafile
cdef("user_Fheader","_dcp3000_scan_read();","_dcp3000_scan")
#screen
cdef("user_scan_tail","_dcp3000_scan_read();","_dcp3000_scan")
#datafile
cdef("Ftail","_dcp3000_scan_read();","_dcp3000_scan")
}'
#%UU%
#%MDESC%
# Syntax : dcp3000_add [name] [counter] [serial device number]%BR%
# Add pressure sensor controller DCP3000
def dcp3000_add '{
local name counter dev
if ($# != 3) {
printf("Usage: dcp3000_add [name] [counter] [serial device number]\n")
exit
}
name = "$1"
counter = "$2"
dev = $3
if (cnt_num(counter) == -1) {
printf("Counter \"%s\" not configured in SPEC, exit !!!\n", counter)
exit
}
if (!list_check(DCP3000_LIST, name)) {
list_add(DCP3000_LIST, name)
list_setpar(DCP3000_LIST, name, "on", 0)
}
list_setpar(DCP3000_LIST, name, "counter", counter)
list_setpar(DCP3000_LIST, name, "dev", dev)
}'
#%UU%
#%MDESC%
# Syntax : dcp3000_scanon%BR%
# To introduce the printing of pressure in scans
def dcp3000scanon '{
DCP3000_SCANON = 1
}'
#%UU%
#%MDESC%
# Syntax : dcp3000_scanoff%BR%
# To remove the printing of pressure in scans
def dcp3000scanoff '{
DCP3000_SCANON = 0
}'
#%IU%()
#%MDESC% writes the pressure in scans macro
def _dcp3000_scan_read()'{
local dcp_name temp1 temp2 dcp_pres
if (DCP3000_SCANON) {
dcp_n = list_n(DCP3000_LIST)
for (dcp_nb=1 ; dcp_nb<=dcp_n ; dcp_nb++) {
dcp_name = DCP3000_LIST[dcp_nb]
dcp_dev = list_getpar(DCP3000_LIST, dcp_name, "dev")
dcp_pres = _dcp3000_read(dcp_dev)
printf("#C DCP3000 PRES (%s) = %7.3f \n",DCP3000_LIST[dcp_name], dcp_pres)
}
}
}'
def _dcp3000_read(dev) '{
local msg_in msg_out myarr
msg_in = sprintf("IN_PV_1\r")
ser_put(dev, msg_in)
sleep(DCP3000_WAIT)
msg_out = ser_get(dev)
split(msg_out,myarr)
return myarr[0]
}'
#IU%
#%MDESC%
# Syntax : _dcp3000_set_cnts()%BR%
# Read pressure and set the corresponding pseudo counters
# added by %B%dcp3000_add%B%
def _dcp3000_set_cnts '{
local dcp_n dcp_counter dcp_dev dcp_pres
dcp_n = list_n(DCP3000_LIST)
if(dcp_n != 0){
for (dcp_nb=1 ; dcp_nb<=dcp_n ; dcp_nb++) {
dcp_name = DCP3000_LIST[dcp_nb]
if (list_getpar(DCP3000_LIST, dcp_name, "on")){
dcp_counter = list_getpar(DCP3000_LIST, dcp_name, "counter")
dcp_dev = list_getpar(DCP3000_LIST, dcp_name, "dev")
dcp_pres = _dcp3000_read(dcp_dev)
num_cnt = cnt_num(dcp_counter)
S[num_cnt] = dcp_pres
}
}
}
}'
#%UU%
#%MDESC%
# Syntax : dcp3000on%BR%
# Switch pressure logging on. Spec will read the pressure at each
# count and load sensor values into the pseudo counters
# added by %B%dcp3000_add%B%
# Syntax : dcp3000on [name1] [name2] [name4] [...]
# Switch pressure logging on. Spec will read the pressure at each
# count and load sensor values into the pseudo counters for the selected DCP3000%BR%
def dcp3000on '{
local dcp_n dcp_nb dcp_name str dcp_list[]
if ($# == 0) {
dcp_n = list_n(DCP3000_LIST)
if (dcp_n != 0){
for (dcp_nb=1 ; dcp_nb<=dcp_n ; dcp_nb++) {
dcp_name = DCP3000_LIST[dcp_nb]
list_setpar(DCP3000_LIST, dcp_name, "on", 1)
}
}
} else {
str = "$*"
dcp_n = split(str, dcp_list)
for (dcp_nb=0 ; dcp_nb<dcp_n ; dcp_nb++) {
dcp_name = dcp_list[dcp_nb]
if (list_check(DCP3000_LIST, dcp_name)){
list_setpar(DCP3000_LIST, dcp_name, "on", 1)
}
}
}
}'
#%UU%
#%MDESC%
# Syntax : dcp3000off%BR%
# Switch pressure logging off.
def dcp3000off '{
local dcp_n dcp_nb dcp_name str dcp_list[] dcp_counter num_cnt
if ($# == 0) {
dcp_n = list_n(DCP3000_LIST)
if (dcp_n != 0){
for (dcp_nb=1 ; dcp_nb<=dcp_n ; dcp_nb++) {
dcp_name = DCP3000_LIST[dcp_nb]
dcp_counter = list_getpar(DCP3000_LIST, dcp_name, "counter")
num_cnt = cnt_num(dcp_counter)
S[num_cnt] = -1
list_setpar(DCP3000_LIST, dcp_name, "on", 0)
}
}
} else {
str = "$*"
dcp_n = split(str, dcp_list)
for (dcp_nb=0 ; dcp_nb<dcp_n ; dcp_nb++) {
dcp_name = dcp_list[dcp_nb]
if (list_check(DCP3000_LIST, dcp_name)){
list_setpar(DCP3000_LIST, dcp_name, "on", 0)
dcp_counter = list_getpar(DCP3000_LIST, dcp_name, "counter")
num_cnt = cnt_num(dcp_counter)
S[num_cnt] = -1
}
}
}
}'
#%MACROS%
#%DEPENDENCIES%
# No dependencies
#%AUTHOR% A. Mauro, G. Berruyer, (Original 04/14). %BR%
# $Revision: 1.0 $ / $Date: 2014/04/07 09:14:39 $
#%TOC%
|