Files
sics/tecs/tecs_tas.for
2000-04-11 11:07:06 +00:00

203 lines
5.9 KiB
Fortran
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
character startcmd*80
common /tecs_init_com/startcmd
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, CMD)
!! =============================
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'
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
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, i
character startcmd*80
common /tecs_init_com/startcmd
data startcmd/' '/
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)
port=0
if (startcmd .eq. ' ') then
call lib$get_lun (lun)
open (lun, file='mad_tecs:tecs.init', status='old',
+ readonly, iostat=ios)
if (ios .eq. 0) read (lun, '(a)', iostat=ios) startcmd
close(lun)
call lib$free_lun(lun)
endif
i=index(startcmd, '-p ')
if (i .ne. 0) then
read(startcmd(i+2:),*,iostat=ios) port
endif
if (port .eq. 0) port=9753
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