added test client

This commit is contained in:
cvs
2000-04-10 15:38:21 +00:00
parent ceb27b8fe5
commit f77ba1cc71
3 changed files with 238 additions and 0 deletions

8
tecs/get_lun.for Normal file
View File

@ -0,0 +1,8 @@
subroutine lib$get_lun(lun)
integer lun
lun=33
end
subroutine lib$free_lun(lun)
integer lun
end

190
tecs/tecs_tas.for Normal file
View File

@ -0,0 +1,190 @@
SUBROUTINE TECS_TAS ! File TAS_SRC:[TECS]TECS_TAS.FOR
c ===================
c
cdec$ ident 'V01B'
c------------------------------------------------------------------------------
c Interface to the TECS Client for TASMAD
c
c M. Zolliker, March 2000
c Updates:
c V01A 21-Mar-2000 DM. Integrate into TASMAD
c 05-Apr-2000 M.Z. modifed error handling/changed arguments in TeccGet3
c------------------------------------------------------------------------------
c Entry points in this Module:
c
c TECS_TAS - this is a dummy entry point to get module name in library
c to match the file name.
c TECS_INIT (ERRLUN) - initialising call.
c TECS_GET_TEMP (ERRLUN, TEMP) - read the temperature
c TECS_SET_TEMP (ERRLUN, SET_TEMP) - set the temperature
c TECS_SET_PAR (ERRLUN, NAME, PAR) - set parameter
c TECS_GET_PAR (ERRLUN, NAME, PAR) - get parameter
c TECS_SEND_CMD (ERRLUN, CMD, RESPONSE) - send command to TC
c TECS_OPEN (CONN, ERRLUN) - Open connection to TECS
c TECS_ERR_ROUTINE (LUN, TEXT) - report an error (for internal use only)
c------------------------------------------------------------------------------
implicit none
c Define the dummy arguments
integer ERRLUN !! lun to write error messages
real*4 TEMP(4) !! TASMAD temperature array: set-temp, regulation, sample, aux-temp
real*4 SET_TEMP !! set temperature
character NAME*(*) !! parameter name
character PAR*(*) !! parameter
character CMD*(*) !! command to send to temperature controller
character RESPONSE*(*) !! response from temperature controller
c------------------------------------------------------------------------------
integer iret, l
integer*8 conn/0/
save conn ! not needed for initialized variables
integer tecc_get3, tecc_set, tecc_set_par, tecc_get_par, tecc_send
external tecc_get3, tecc_set, tecc_set_par, tecc_get_par, tecc_send
integer tecc_quit_server, tecc_wait
external tecc_quit_server, tecc_wait
c------------------------------------------------------------------------------
stop 'TECS_TAS: do not call module header'
entry TECS_INIT (ERRLUN)
!! ========================
if (conn .eq. 0) call tecs_open(conn, errlun)
return
entry TECS_GET_TEMP (ERRLUN, TEMP)
!! ==================================
if (conn .eq. 0) then
call tecs_open(conn, errlun)
if (conn .eq. 0) return
endif
1 iret=tecc_get3(conn, temp(1), temp(3), temp(2)) ! temp(2) and temp(3) are exchanged in MSHOWT
if (iret .lt. 0) goto 9
if (iret .gt. 0) then
write(errlun, *) 'configuring temperature controller ...'
iret=tecc_wait(conn)
if (iret .lt. 0) goto 9
write(errlun, *) '... done'
endif
2 temp(4)=0.0 ! no auxilliary sensor
return
entry TECS_SET_TEMP (ERRLUN, SET_TEMP)
!! ======================================
if (conn .eq. 0) then
call tecs_open(conn, errlun)
if (conn .eq. 0) return
endif
iret=tecc_set(conn, set_temp)
if (iret .lt. 0) goto 9
return
entry TECS_SET_PAR (ERRLUN, NAME, PAR)
!! ======================================
if (conn .eq. 0) then
call tecs_open(conn, errlun)
if (conn .eq. 0) return
endif
iret=tecc_set_par(conn, name, par)
if (iret .lt. 0) goto 9
return
entry TECS_GET_PAR (ERRLUN, NAME, PAR)
!! ======================================
if (conn .eq. 0) then
call tecs_open(conn, errlun)
if (conn .eq. 0) return
endif
iret=tecc_get_par(conn, name, par)
if (iret .lt. 0) goto 9
par(iret+1:)=' '
return
entry TECS_SEND_CMD (ERRLUN, CMD, RESPONSE)
!! ===========================================
if (conn .eq. 0) then
call tecs_open(conn, errlun)
if (conn .eq. 0) return
endif
iret=tecc_send(conn, cmd, response)
if (iret .lt. 0) goto 9
response(iret+1:)=' '
return
entry TECS_QUIT(ERRLUN)
!! =======================
if (conn .eq. 0) then
call tecs_open(conn, errlun)
if (conn .eq. 0) return
endif
iret=tecc_quit_server(conn)
if (iret .lt. 0) goto 9
return
9 call err_show('Error in TECS_TAS')
return
end
SUBROUTINE TECS_OPEN (CONN, ERRLUN)
! ===================================
implicit none
c--------------------------------------------------------------
c Define the dummy arguments
integer*8 conn
integer errlun
c--------------------------------------------------------------
integer lun, port, ios
character startcmd*80/' '/
integer*8 tecc_init
external tecc_init, tecs_err_routine
c--------------------------------------------------------------
c If MAD_TECS:TECS.INIT exists, read it to get the port number and start command
call ErrSetOutRtn(tecs_err_routine, errlun)
call lib$get_lun (lun)
open (lun, file='mad_tecs:tecs.init', status='old',
+ readonly, iostat=ios)
if (ios .eq. 0) read (lun, *, iostat=ios) port
if (ios .eq. 0) read (lun, '(a)', iostat=ios) startcmd
close(lun)
call lib$free_lun(lun)
if (ios .ne. 0) port = 9753 ! Otherwise, use default
c--------------------------------------------------------------
conn = tecc_init(startcmd, port)
if (conn .eq. 0) then
call err_show('Error in TECS_OPEN')
endif
end
SUBROUTINE TECS_ERR_ROUTINE (LUN, TEXT)
! =======================================
c
c routine called from C
c
implicit none
c--------------------------------------------------------------
c Define the dummy arguments
byte text(128)
integer lun
c--------------------------------------------------------------
integer i, j
c--------------------------------------------------------------
do i=1,128
if (text(i) .eq. 0) then
write(lun, '(x,128a1)') (text(j), j=1,i-1)
return
endif
enddo
! no terminating ASCII NUL found
write(lun, *) 'error in TECS_ERR_ROUTINE: illegal error text'
end

40
tecs/test.for Normal file
View File

@ -0,0 +1,40 @@
program test
real*4 temp(4)
character device*32, cmd*80, response*80
integer i
call tecs_init(6)
print *
print *,'s <temp> set temperature'
print *,'device <device> set cryo device'
print *,'<command> direct command to LSC340'
print *,'"empty line" show temperature and device'
1 read(*,'(a)',end=9) cmd
if (cmd(1:2) .eq. 's') then
read(cmd(3:),*) temp(1)
call tecs_set_temp(6, temp(1))
elseif (cmd(1:2) .eq. 'c') then
call tecs_send_cmd(6, cmd(3:), response)
print *,response
elseif (cmd(1:2) .eq. 'q') then
call tecs_quit(6)
goto 9
elseif (cmd .ne. ' ') then
i=index(cmd,' ')
if (i .gt. 1) then
if (cmd(i+1:) .eq. ' ') then
call tecs_get_par(6, cmd(1:i-1), response)
print *,response
else
call tecs_set_par(6, cmd(1:i-1), cmd(i+1:))
endif
endif
else
call tecs_get_temp(6, temp)
print *,' x ', temp(2),' p ',temp(3),' set ',temp(1)
call tecs_get_par(6, 'device', device)
print *,'device=',device
endif
goto 1
9 end