Files called from SICServer should now compile under linux
This commit is contained in:
@ -3,10 +3,11 @@
|
|||||||
#
|
#
|
||||||
# Markus Zolliker, March 2000
|
# Markus Zolliker, March 2000
|
||||||
#--------------------------------------------------------------------------
|
#--------------------------------------------------------------------------
|
||||||
LIBR_OBJ= coc_util.o err_handling.o str_util.o str_buf.o sys_util.o tecs_dlog.o
|
LIBR_OBJ= coc_util.o err_handling.o str_util.o str_buf.o
|
||||||
CLI_OBJ= tecs_cli.o coc_client.o
|
DLOG_OBJ= sys_util.o tecs_dlog.o
|
||||||
SERV_OBJ= tecs.o coc_server.o tecs_lsc.o tecs_serial.o coc_logfile.o
|
SERV_OBJ= tecs.o coc_server.o tecs_lsc.o tecs_serial.o coc_logfile.o $(LIBR_OBJ) $(DLOG_OBJ)
|
||||||
TCLI_OBJ= tecs_client.o tecs_plot.o tecs_for.o sys_aunix.o sys_aunix_c.o
|
CLI_OBJ= tecs_cli.o coc_client.o $(LIBR_OBJ)
|
||||||
|
TCLI_OBJ= tecs_client.o tecs_plot.o tecs_for.o sys_aunix.o sys_aunix_c.o str.o cho.o $(CLI_OBJ) $(DLOG_OBJ)
|
||||||
|
|
||||||
#------------ for DigitalUnix (add -DFORTIFY to CFLAGS for fortified version)
|
#------------ for DigitalUnix (add -DFORTIFY to CFLAGS for fortified version)
|
||||||
CC=cc
|
CC=cc
|
||||||
@ -20,9 +21,9 @@ CFLAGS= -std1 -g -warnprotos -I../ -I. -I../hardsup
|
|||||||
.c.o:
|
.c.o:
|
||||||
$(CC) $(CFLAGS) -c $*.c
|
$(CC) $(CFLAGS) -c $*.c
|
||||||
|
|
||||||
libtecsl.a: $(LIBR_OBJ) $(CLI_OBJ)
|
libtecsl.a: $(CLI_OBJ)
|
||||||
- rm libtecsl.a
|
- rm libtecsl.a
|
||||||
ar cr libtecsl.a $(LIBR_OBJ) $(CLI_OBJ)
|
ar cr libtecsl.a $(CLI_OBJ)
|
||||||
ranlib libtecsl.a
|
ranlib libtecsl.a
|
||||||
|
|
||||||
all: libtecsl.a bin/TecsServer tecs
|
all: libtecsl.a bin/TecsServer tecs
|
||||||
@ -30,13 +31,13 @@ all: libtecsl.a bin/TecsServer tecs
|
|||||||
tecs_plot.o: tecs_plot.f90
|
tecs_plot.o: tecs_plot.f90
|
||||||
f90 -c -g tecs_plot.f90
|
f90 -c -g tecs_plot.f90
|
||||||
|
|
||||||
bin/TecsServer: $(LIBR_OBJ) $(SERV_OBJ)
|
bin/TecsServer: $(SERV_OBJ)
|
||||||
- rm bin/TecsServer
|
- rm bin/TecsServer
|
||||||
$(CC) $(CFLAGS) -o bin/TecsServer -g $(LIBR_OBJ) $(SERV_OBJ) fortify1.c \
|
$(CC) $(CFLAGS) -o bin/TecsServer -g $(SERV_OBJ) fortify1.c \
|
||||||
-lm -L../hardsup -lhlib -lfor
|
-lm -L../hardsup -lhlib -lfor
|
||||||
|
|
||||||
tecs: $(TCLI_OBJ) $(CLI_OBJ) $(LIBR_OBJ)
|
tecs: $(TCLI_OBJ)
|
||||||
f77 -o tecs -g $(TCLI_OBJ) $(CLI_OBJ) $(LIBR_OBJ) \
|
f77 -o tecs -g $(TCLI_OBJ) \
|
||||||
-L/data/lnslib/lib -lpgplot -so_archive -lreadline -ltermcap -lX11 -lXm
|
-L/data/lnslib/lib -lpgplot -so_archive -lreadline -ltermcap -lX11 -lXm
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
@ -99,7 +99,7 @@ int CocHandle1Request(int tmo_msec, int fd) {
|
|||||||
close(cl->fd);
|
close(cl->fd);
|
||||||
FD_CLR(cl->fd, &mask);
|
FD_CLR(cl->fd, &mask);
|
||||||
cl0->next=cl->next;
|
cl0->next=cl->next;
|
||||||
my_free(cl);
|
FREE(cl);
|
||||||
cl=cl0;
|
cl=cl0;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@ -237,9 +237,9 @@ void CocCloseServer() {
|
|||||||
close(cl->fd);
|
close(cl->fd);
|
||||||
cl0=cl;
|
cl0=cl;
|
||||||
cl=cl->next;
|
cl=cl->next;
|
||||||
my_free(cl0);
|
FREE(cl0);
|
||||||
}
|
}
|
||||||
my_free(cList);
|
FREE(cList);
|
||||||
close(mainFd);
|
close(mainFd);
|
||||||
str_free_buf(buf); str_free_buf(bufo);
|
str_free_buf(buf); str_free_buf(bufo);
|
||||||
logfileClose();
|
logfileClose();
|
||||||
|
@ -246,8 +246,7 @@ void CocFreeVarList(CocVar **varList) {
|
|||||||
p=v;
|
p=v;
|
||||||
v=p->next;
|
v=p->next;
|
||||||
p->next=NULL;
|
p->next=NULL;
|
||||||
/* printf("my_free %s\n", p->name); */
|
FREE(p);
|
||||||
my_free(p);
|
|
||||||
}
|
}
|
||||||
*varList=NULL;
|
*varList=NULL;
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,9 @@ void ERR_EXIT(char *text) {
|
|||||||
|
|
||||||
/* FORTRAN wrappers */
|
/* FORTRAN wrappers */
|
||||||
|
|
||||||
|
#ifdef F_CHAR
|
||||||
|
/* compile only when fortran c interface stuff is defined */
|
||||||
|
|
||||||
#ifdef __VMS
|
#ifdef __VMS
|
||||||
#define err_show_ err_show
|
#define err_show_ err_show
|
||||||
#define err_txt_ err_txt
|
#define err_txt_ err_txt
|
||||||
@ -129,3 +132,5 @@ void err_set_outrtn_(void (*rtn)(), void *arg) {
|
|||||||
void err_short_(void) {
|
void err_short_(void) {
|
||||||
ErrShort(ErrMessage);
|
ErrShort(ErrMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -160,7 +160,7 @@ Str_Buf *str_create_buf(size_t size, char separator)
|
|||||||
{ Str_Buf *buf;
|
{ Str_Buf *buf;
|
||||||
|
|
||||||
NEW(buf);
|
NEW(buf);
|
||||||
ERR_P(buf->buf=my_malloc(size, "buf"));
|
ERR_P(buf->buf=MALLOC(size));
|
||||||
buf->dsize=size;
|
buf->dsize=size;
|
||||||
buf->sep=separator;
|
buf->sep=separator;
|
||||||
buf->wrpos=0;
|
buf->wrpos=0;
|
||||||
@ -184,6 +184,6 @@ void str_link_buf(Str_Buf *buf, char *str, int size, char separator) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void str_free_buf(Str_Buf *buf)
|
void str_free_buf(Str_Buf *buf)
|
||||||
{ my_free(buf->buf);
|
{ FREE(buf->buf);
|
||||||
my_free(buf);
|
FREE(buf);
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ char *str_read_file(char *file) {
|
|||||||
i=stat(file, &statbuf);
|
i=stat(file, &statbuf);
|
||||||
if (i<0) ERR_MSG("file not found");
|
if (i<0) ERR_MSG("file not found");
|
||||||
size=statbuf.st_size+4;
|
size=statbuf.st_size+4;
|
||||||
ERR_SP(str=my_malloc(size, file));
|
ERR_SP(str=MALLOC(size));
|
||||||
e=&str[size-1];
|
e=&str[size-1];
|
||||||
ERR_SP(fil=fopen(file, "r"));
|
ERR_SP(fil=fopen(file, "r"));
|
||||||
s=str;
|
s=str;
|
||||||
|
115
tecs/sys_aunix.f
115
tecs/sys_aunix.f
@ -82,6 +82,120 @@
|
|||||||
endif
|
endif
|
||||||
end
|
end
|
||||||
|
|
||||||
|
!!-----------------------------------------------------------------------------
|
||||||
|
!!
|
||||||
|
subroutine SYS_TEMP_NAME(NAME, PATH) !!
|
||||||
|
!! ====================================
|
||||||
|
!! get a temporary file name
|
||||||
|
!!
|
||||||
|
character*(*) NAME !! (in) name
|
||||||
|
character*(*) PATH !! (out) path
|
||||||
|
|
||||||
|
character line*64, pid*5
|
||||||
|
integer i, l
|
||||||
|
|
||||||
|
integer getppid
|
||||||
|
|
||||||
|
call sys_getenv('USER', line)
|
||||||
|
if (line .eq. ' ') then
|
||||||
|
call str_trim(line, '/tmp/.'//name, l)
|
||||||
|
else
|
||||||
|
call str_trim(line, '/tmp/.'//name//'_'//line, l)
|
||||||
|
endif
|
||||||
|
|
||||||
|
write(pid,'(i5)') getppid()
|
||||||
|
i=1
|
||||||
|
1 if (pid(i:i) .eq. ' ') then
|
||||||
|
i=i+1
|
||||||
|
goto 1
|
||||||
|
endif
|
||||||
|
path=line(1:l)//'.'//pid(i:5)
|
||||||
|
end
|
||||||
|
|
||||||
|
!!-----------------------------------------------------------------------------
|
||||||
|
!!
|
||||||
|
subroutine SYS_LOAD_ENV(FILE) !!
|
||||||
|
!! =============================
|
||||||
|
!! load environment from temporary file
|
||||||
|
!!
|
||||||
|
character*(*) FILE !! filename
|
||||||
|
|
||||||
|
character path*128, line*128
|
||||||
|
integer lun, i, l
|
||||||
|
|
||||||
|
integer getppid
|
||||||
|
|
||||||
|
call sys_temp_name(file, path)
|
||||||
|
call sys_get_lun(lun)
|
||||||
|
open(lun,file=path,status='old',readonly,err=9)
|
||||||
|
5 read(lun,'(q,a)',end=8) l, line
|
||||||
|
l=min(l,len(line))
|
||||||
|
i=index(line,'=')
|
||||||
|
if (i .eq. 0) then
|
||||||
|
if (l .gt. 0) call sys_setenv(line(1:l), ' ')
|
||||||
|
elseif (i .gt. 1 .and. i .lt. l) then
|
||||||
|
call sys_setenv(line(1:i-1),line(i+1:l))
|
||||||
|
endif
|
||||||
|
goto 5
|
||||||
|
8 close(lun)
|
||||||
|
9 call sys_free_lun(lun)
|
||||||
|
end
|
||||||
|
|
||||||
|
!!-----------------------------------------------------------------------------
|
||||||
|
!!
|
||||||
|
subroutine SYS_SAVE_ENV(FILE, NAMES, N_NAMES) !!
|
||||||
|
!! =============================================
|
||||||
|
!! save environment on temporary file
|
||||||
|
!!
|
||||||
|
character*(*) FILE !! filename
|
||||||
|
integer N_NAMES !! number of names
|
||||||
|
character*(*) NAMES(N_NAMES) !! names of variables to save
|
||||||
|
|
||||||
|
character path*128, line*128
|
||||||
|
integer lun, i, j, l
|
||||||
|
|
||||||
|
call sys_temp_name(file, path)
|
||||||
|
call sys_get_lun(lun)
|
||||||
|
|
||||||
|
open(lun,file=path,status='unknown',carriagecontrol='list'
|
||||||
|
1,err=19)
|
||||||
|
|
||||||
|
do i=1,n_names
|
||||||
|
call sys_getenv(names(i), line)
|
||||||
|
call str_trim(names(i),names(i), j)
|
||||||
|
call str_trim(line,line, l)
|
||||||
|
write(lun,'(3a)') names(i)(1:j),'=',line(1:l)
|
||||||
|
enddo
|
||||||
|
|
||||||
|
close(lun)
|
||||||
|
9 call sys_free_lun(lun)
|
||||||
|
return
|
||||||
|
|
||||||
|
19 type *,'SYS_SAVE_ENV: can not open tmp. file'
|
||||||
|
goto 9
|
||||||
|
end
|
||||||
|
|
||||||
|
!!-----------------------------------------------------------------------------
|
||||||
|
!!
|
||||||
|
subroutine SYS_WAIT(SECONDS) !!
|
||||||
|
!! ============================
|
||||||
|
!! wait for SECONDS
|
||||||
|
real SECONDS !! resolution should be better than 0.1 sec.
|
||||||
|
|
||||||
|
real tim, del
|
||||||
|
|
||||||
|
tim=secnds(0.0)
|
||||||
|
1 del=seconds-secnds(tim)
|
||||||
|
if (del .ge. 0.999) then
|
||||||
|
call sleep(int(del))
|
||||||
|
goto 1
|
||||||
|
endif
|
||||||
|
if (del .gt. 0) then
|
||||||
|
call usleep(int(del*1E6))
|
||||||
|
goto 1
|
||||||
|
endif
|
||||||
|
end
|
||||||
|
|
||||||
!!-----------------------------------------------------------------------------
|
!!-----------------------------------------------------------------------------
|
||||||
!!
|
!!
|
||||||
subroutine SYS_GET_LUN(LUN) !!
|
subroutine SYS_GET_LUN(LUN) !!
|
||||||
@ -242,4 +356,3 @@
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ int called=0; /* env is valid only if called==1 */
|
|||||||
jmp_buf env;
|
jmp_buf env;
|
||||||
|
|
||||||
void (*inthdl)(int sig);
|
void (*inthdl)(int sig);
|
||||||
void (*errhdl)();
|
void (*errhdl)(void);
|
||||||
|
|
||||||
void sighdl(int sig)
|
void sighdl(int sig)
|
||||||
{ if (called) longjmp(env,sig);
|
{ if (called) longjmp(env,sig);
|
||||||
@ -128,3 +128,77 @@ void sys_get_raw_key_(char *key, int *tmo, int k_len)
|
|||||||
ires=tcsetattr(STDIN_FILENO,TCSANOW,&atts); /* restore term. attributes */
|
ires=tcsetattr(STDIN_FILENO,TCSANOW,&atts); /* restore term. attributes */
|
||||||
if (ires!=0) {perror("***\n");};
|
if (ires!=0) {perror("***\n");};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void usleep_(int *usec) { usleep(*usec); }
|
||||||
|
int getppid_(void) { return getppid(); }
|
||||||
|
|
||||||
|
int sys_setenv_(ename,evalue,ilen1,ilen2)
|
||||||
|
char *ename, *evalue;
|
||||||
|
int ilen1, ilen2;
|
||||||
|
{
|
||||||
|
int setenv(char *p1, char *p2, int ow), i1, i2, ow, rc;
|
||||||
|
char *p1, *p2;
|
||||||
|
|
||||||
|
i1 = lnblnk_(ename,ilen1);
|
||||||
|
i2 = lnblnk_(evalue,ilen2);
|
||||||
|
|
||||||
|
p1 = malloc((unsigned) i1+1); if( p1 == NULL ) return (-1);
|
||||||
|
p2 = malloc((unsigned) i2+1); if( p2 == NULL ) { free(p1); return (-1); }
|
||||||
|
|
||||||
|
strncpy(p1,ename,i1); p1[i1] = '\0';
|
||||||
|
strncpy(p2,evalue,i2); p2[i2] = '\0';
|
||||||
|
|
||||||
|
ow = 1;
|
||||||
|
|
||||||
|
rc = setenv(p1, p2, ow);
|
||||||
|
free(p1); free(p2);
|
||||||
|
return(rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct termios atts;
|
||||||
|
|
||||||
|
void sys_rd_tmo_(char *prompt, char *result, int *reslen, int p_len, int r_len)
|
||||||
|
{
|
||||||
|
struct termios attr;
|
||||||
|
int ires, i, ntmo, chr;
|
||||||
|
|
||||||
|
ires=tcgetattr(STDIN_FILENO,&attr);
|
||||||
|
atts=attr; /* save term. attr. */
|
||||||
|
if (ires!=0) {perror("***\n");}
|
||||||
|
attr.c_lflag &= ~(ICANON) & ~(ECHO); /* canonical mode off, echo off */
|
||||||
|
attr.c_cc[VMIN]=0;
|
||||||
|
ires= tcsetattr(STDIN_FILENO,TCSANOW,&attr);
|
||||||
|
if (ires!=0) {perror("***\n");}
|
||||||
|
|
||||||
|
do { chr=fgetc(stdin); } while (chr!=EOF);
|
||||||
|
|
||||||
|
for (i=0; i<p_len; i++)
|
||||||
|
{ fputc(prompt[i], stderr);
|
||||||
|
};
|
||||||
|
|
||||||
|
ires=fflush(stdin);
|
||||||
|
ires=fflush(stderr);
|
||||||
|
|
||||||
|
*reslen=0;
|
||||||
|
if (prompt[0]=='\0') { ntmo=10; }
|
||||||
|
else { ntmo=200; }; /* wait 2 sec. for the first char */
|
||||||
|
while (*reslen<r_len)
|
||||||
|
{ chr=fgetc(stdin);
|
||||||
|
if (chr==EOF)
|
||||||
|
{ while ((chr==EOF) & (ntmo>0))
|
||||||
|
{ usleep(10000); /* wait 10 ms */
|
||||||
|
chr=fgetc(stdin);
|
||||||
|
ntmo--;
|
||||||
|
};
|
||||||
|
if (chr==EOF) break;
|
||||||
|
if (chr==10) {ntmo=10;} else {ntmo=100;}; /* wait 0.1 sec after LF, 1 sec else */
|
||||||
|
};
|
||||||
|
result[(*reslen)++]=(char)chr;
|
||||||
|
if (chr==24) {(*reslen)=0;}; /* ctrl-X purges buffer */
|
||||||
|
};
|
||||||
|
if (result[(*reslen)-1]=10) {(*reslen)--;}; /* strip trailing LF */
|
||||||
|
|
||||||
|
ires=tcsetattr(STDIN_FILENO,TCSANOW,&atts); /* restore term. attributes */
|
||||||
|
if (ires!=0) {perror("***\n");};
|
||||||
|
}
|
||||||
|
@ -2,18 +2,6 @@
|
|||||||
#include "str_util.h"
|
#include "str_util.h"
|
||||||
#include "sys_util.h"
|
#include "sys_util.h"
|
||||||
|
|
||||||
void *my_malloc(size_t size, const char *text) {
|
|
||||||
void *ptr;
|
|
||||||
ptr=calloc(1,size);
|
|
||||||
/* printf("new %s %X %d\n", text, ptr, size); */
|
|
||||||
return(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void my_free(void *ptr) {
|
|
||||||
/* printf("my_free %X\n", ptr); */
|
|
||||||
free(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if __VMS
|
#if __VMS
|
||||||
|
|
||||||
#include <unixio.h>
|
#include <unixio.h>
|
||||||
|
@ -5,12 +5,13 @@
|
|||||||
#include "fortify.h"
|
#include "fortify.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* secure allocation stuff ---------------------------------- */
|
/* secure allocation stuff ----------------------------------
|
||||||
|
change these macros if you want to log dynamic memory access
|
||||||
|
*/
|
||||||
|
|
||||||
#define NEW(PTR) ERR_SP(PTR=my_malloc(sizeof(*PTR),#PTR))
|
#define NEW(PTR) ERR_SP(PTR=calloc(1,sizeof(*PTR)))
|
||||||
|
#define MALLOC(SIZ) calloc(1,SIZ)
|
||||||
void *my_malloc(size_t size, const char *text);
|
#define FREE(PTR) free(PTR)
|
||||||
void my_free(void *ptr);
|
|
||||||
|
|
||||||
/* fortran interface stuff ----------------------------------
|
/* fortran interface stuff ----------------------------------
|
||||||
|
|
||||||
@ -35,7 +36,9 @@ typedef struct { short size, dummy; char *text; } SysVmsChar;
|
|||||||
#define STR_TO_F(DST,SRC) str_npad(DST, SRC, DST##_len)
|
#define STR_TO_F(DST,SRC) str_npad(DST, SRC, DST##_len)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error this machine is not supported
|
|
||||||
|
/* other machines are not yet supported */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _SYS_UTIL_H_ */
|
#endif /* _SYS_UTIL_H_ */
|
||||||
|
228
tecs/tecs.c
228
tecs/tecs.c
@ -3,6 +3,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <sys/timeb.h>
|
#include <sys/timeb.h>
|
||||||
|
#include <time.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "sys_util.h"
|
#include "sys_util.h"
|
||||||
@ -15,7 +16,7 @@
|
|||||||
|
|
||||||
int ftime (struct timeb *__timeptr); /* for some reason not defined in timeb.h with flag -std1 */
|
int ftime (struct timeb *__timeptr); /* for some reason not defined in timeb.h with flag -std1 */
|
||||||
|
|
||||||
#define TABLE_FILE "lsci.tab"
|
#define TABLE_FILE "tecs.tab"
|
||||||
#define Progress(I) if (configuring) { configuring+=I; }
|
#define Progress(I) if (configuring) { configuring+=I; }
|
||||||
#define undef -65535.
|
#define undef -65535.
|
||||||
|
|
||||||
@ -25,7 +26,7 @@ static char *binDir=NULL;
|
|||||||
static char *logDir=NULL;
|
static char *logDir=NULL;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
float t, t1, t2, min, max; /* temperatures */
|
float t, t1, t2, min, max, band; /* temperatures */
|
||||||
int stat1, stat2; /* reading status summary */
|
int stat1, stat2; /* reading status summary */
|
||||||
int present; /* sensor is present */
|
int present; /* sensor is present */
|
||||||
int readStat; /* reading status */
|
int readStat; /* reading status */
|
||||||
@ -65,6 +66,8 @@ static float
|
|||||||
tLimit, maxPower, /* heater parameters */
|
tLimit, maxPower, /* heater parameters */
|
||||||
tLow=0, tHigh=0, /* lower limit of high-T sensor, upper limit of low-T sensor */
|
tLow=0, tHigh=0, /* lower limit of high-T sensor, upper limit of low-T sensor */
|
||||||
tShift=0, /* setpoint shift */
|
tShift=0, /* setpoint shift */
|
||||||
|
aux, /* auxilliary value, i.e. helium level */
|
||||||
|
full, /* full value for helium level */
|
||||||
prop, integ, deriv, /* pid */
|
prop, integ, deriv, /* pid */
|
||||||
maxShift=2, /* maximal shift in when controlMode=2 */
|
maxShift=2, /* maximal shift in when controlMode=2 */
|
||||||
tInt=0; /* integral time (sec.) for setpoint shift */
|
tInt=0; /* integral time (sec.) for setpoint shift */
|
||||||
@ -80,6 +83,7 @@ static int
|
|||||||
noResp=2, /* no response */
|
noResp=2, /* no response */
|
||||||
quit, /* quit server */
|
quit, /* quit server */
|
||||||
controlMode=2, /* 0: control on heater, 1: control on sample, 3: 2nd loop for difference heater-sample */
|
controlMode=2, /* 0: control on heater, 1: control on sample, 3: 2nd loop for difference heater-sample */
|
||||||
|
heliumMode, /* 0: no level meter, 1: constant current, 2: pulsed */
|
||||||
int2=30, /* inegration time for controlMode 2 */
|
int2=30, /* inegration time for controlMode 2 */
|
||||||
remoteMode, /* 1: local, 2: remote */
|
remoteMode, /* 1: local, 2: remote */
|
||||||
maxfld, /* last used display field */
|
maxfld, /* last used display field */
|
||||||
@ -115,7 +119,10 @@ static char
|
|||||||
chan[2], /* actual channel */
|
chan[2], /* actual channel */
|
||||||
alarms[20], /* alarm status */
|
alarms[20], /* alarm status */
|
||||||
alarmList[4], /* alarm list */
|
alarmList[4], /* alarm list */
|
||||||
dlogfile[128];
|
chanS[4], chanM[4], /* channels in input routine */
|
||||||
|
helium[80], /* helium level status */
|
||||||
|
dlogfile[128],
|
||||||
|
controlChannel[2]="A";
|
||||||
|
|
||||||
static char
|
static char
|
||||||
*table=NULL, /* environment devices table */
|
*table=NULL, /* environment devices table */
|
||||||
@ -217,7 +224,7 @@ int instCurve(char *nam, char *channel, int dispFld) {
|
|||||||
points=str_split(intype, t, '\n');
|
points=str_split(intype, t, '\n');
|
||||||
}
|
}
|
||||||
if (points==NULL) ERR_MSG("illegal curve file");
|
if (points==NULL) ERR_MSG("illegal curve file");
|
||||||
if (cache==NULL) { ERR_SP(cache=my_malloc(1,"one")); *cache='\0'; } /* create empty cache if undefined */
|
if (cache==NULL) { ERR_SP(cache=MALLOC(1)); *cache='\0'; } /* create empty cache if undefined */
|
||||||
|
|
||||||
start=strchr(cache, '\n'); /* skip permanent data */
|
start=strchr(cache, '\n'); /* skip permanent data */
|
||||||
if (start==NULL) { start=cache; } else { start++; }
|
if (start==NULL) { start=cache; } else { start++; }
|
||||||
@ -327,7 +334,7 @@ int instCurve(char *nam, char *channel, int dispFld) {
|
|||||||
logfileOut(LOG_MAIN, "curve selected on channel %s\n", chan);
|
logfileOut(LOG_MAIN, "curve selected on channel %s\n", chan);
|
||||||
saveTime=tim+30;
|
saveTime=tim+30;
|
||||||
}
|
}
|
||||||
my_free(crv); crv=NULL;
|
FREE(crv); crv=NULL;
|
||||||
|
|
||||||
if (num<=20) return(0); /* standard curve, do not touch cache */
|
if (num<=20) return(0); /* standard curve, do not touch cache */
|
||||||
|
|
||||||
@ -354,83 +361,95 @@ int instCurve(char *nam, char *channel, int dispFld) {
|
|||||||
ERR_SI(fputc('\0', fil));
|
ERR_SI(fputc('\0', fil));
|
||||||
ERR_SI(fclose(fil));
|
ERR_SI(fclose(fil));
|
||||||
fil=NULL;
|
fil=NULL;
|
||||||
my_free(cache);
|
FREE(cache);
|
||||||
/* re-read it */
|
/* re-read it */
|
||||||
ERR_P(cache=str_read_file(nbuf));
|
ERR_P(cache=str_read_file(nbuf));
|
||||||
return(0);
|
return(0);
|
||||||
|
|
||||||
OnError:
|
OnError:
|
||||||
if (crv!=NULL) my_free(crv);
|
if (crv!=NULL) FREE(crv);
|
||||||
if (fil!=NULL) fclose(fil);
|
if (fil!=NULL) fclose(fil);
|
||||||
return(retstat);
|
return(retstat);
|
||||||
}
|
}
|
||||||
|
|
||||||
int configInput(void) {
|
int configInput(void) {
|
||||||
char *t;
|
char *t, *e;
|
||||||
char buf[80], nam[16], nbuf[256], ch0[4], ch[4];
|
char buf[80], nam[16], nbuf[256], ch[4];
|
||||||
int i, n, nn, dispFld;
|
int i, l, n, nn, dispFld;
|
||||||
int retstat;
|
int retstat;
|
||||||
char *ext;
|
char *ext;
|
||||||
|
Str_Buf sbuf;
|
||||||
|
|
||||||
retstat=-2; /* errors in following section are severe */
|
retstat=-2; /* errors in following section are severe */
|
||||||
if (tpoint->manual) {
|
if (tpoint->manual) {
|
||||||
sprintf(buf, "'%s'", tpoint->device);
|
sprintf(buf, "'%s'", tpoint->device);
|
||||||
} else {
|
} else {
|
||||||
sprintf(buf, "%+d ", tpoint->code);
|
sprintf(buf, "%+d,", tpoint->code);
|
||||||
if (tpoint->code==0) return(0);
|
if (tpoint->code==0) return(0);
|
||||||
}
|
}
|
||||||
if (table!=NULL && tim>tableTime+60) { my_free(table); table=NULL; }; /* clear old table */
|
if (table!=NULL && tim>tableTime+60) { FREE(table); table=NULL; }; /* clear old table */
|
||||||
if (table==NULL) { /* read table */
|
if (table==NULL) { /* read table */
|
||||||
str_copy(nbuf, binDir);
|
str_copy(nbuf, binDir);
|
||||||
str_append(nbuf, TABLE_FILE);
|
str_append(nbuf, TABLE_FILE);
|
||||||
ERR_P(table=str_read_file(nbuf));
|
ERR_P(table=str_read_file(nbuf));
|
||||||
tableTime=tim;
|
tableTime=tim;
|
||||||
str_replace_char(table, 9, ' '); /* replace TAB (9) by space in order to find codes terminated by tab */
|
|
||||||
}
|
}
|
||||||
t=strstr(table, buf);
|
t=strstr(table, buf);
|
||||||
if (t==NULL) ERR_MSG("device not found");
|
if (t==NULL) ERR_MSG("device not found");
|
||||||
i=sscanf(t, "%79[^\n!]", buf); /* read line */
|
e=strchr(t, '\'');
|
||||||
t=strchr(buf, '\'');
|
if (e==NULL || e>strchr(t,'\n')) ERR_MSG("missing ' or device name in table file");
|
||||||
if (t==NULL) ERR_MSG("missing ' in table file");
|
t=e+1;
|
||||||
t++;
|
|
||||||
if (tpoint==&samp) {
|
if (tpoint==&samp) {
|
||||||
sens3.present=0;
|
sens3.present=0;
|
||||||
sens4.present=0;
|
sens4.present=0;
|
||||||
str_copy(ch, "C");
|
|
||||||
i=sscanf(t, "%12s %7s %7s", nam, ch0, ch);
|
|
||||||
if (i<1) ERR_MSG("missing sensor name");
|
|
||||||
str_copy(ch0, "CD");
|
|
||||||
ext=".s";
|
ext=".s";
|
||||||
dispFld=2;
|
dispFld=2;
|
||||||
} else {
|
} else {
|
||||||
sens1.present=0;
|
sens1.present=0;
|
||||||
sens2.present=0;
|
sens2.present=0;
|
||||||
|
ext=".x";
|
||||||
|
dispFld=1;
|
||||||
tLow=0; tHigh=0;
|
tLow=0; tHigh=0;
|
||||||
controlMode=0;
|
controlMode=0;
|
||||||
str_copy(ch, "A");
|
heliumMode=0;
|
||||||
i=sscanf(t, "%12s %s %s %d %f %d %f %f %f", nam, ch, ch0, &controlMode, &tLimit, &resist, &maxPower, &tLow, &tHigh);
|
}
|
||||||
if (i<7) ERR_MSG("missing some sensor parameters");
|
chanS[0]='\0';
|
||||||
if (!samp.manual && (NULL!=strchr(ch0,'A') || NULL!=strchr(ch0,'B'))) {
|
chanM[0]='\0';
|
||||||
|
|
||||||
|
i=sscanf(t, "%12s%n", nam, &l);
|
||||||
|
if (i<1) ERR_MSG("missing device name");
|
||||||
|
t+=l;
|
||||||
|
|
||||||
|
/* interprete settings until '+' appeares */
|
||||||
|
i=sscanf(t, "%64s%n", buf, &l);
|
||||||
|
while (i>0 && buf[0]!='+') {
|
||||||
|
t+=l;
|
||||||
|
e=strchr(buf,'=');
|
||||||
|
if (e==NULL) ERR_MSG("syntax error");
|
||||||
|
*e='\0';
|
||||||
|
str_link_buf(&sbuf, e+1, 0, ',');
|
||||||
|
ERR_I(CocGetVar(serverVarList, &sbuf, buf, 0));
|
||||||
|
i=sscanf(t, "%64s%n", buf, &l);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tpoint==&samp) {
|
||||||
|
str_copy(ch, chanS);
|
||||||
|
} else {
|
||||||
|
if (!samp.manual && (NULL!=strchr(chanS,'A') || NULL!=strchr(chanS,'B'))) {
|
||||||
samp.dirty=1; /* sample and heat exchanger are on main plug */
|
samp.dirty=1; /* sample and heat exchanger are on main plug */
|
||||||
samp.code=cryo.code;
|
samp.code=cryo.code;
|
||||||
}
|
}
|
||||||
str_copy(ch0, "AB");
|
str_copy(ch, chanM);
|
||||||
ext=".x";
|
if (heliumMode==0) {
|
||||||
dispFld=1;
|
sprintf(helium, "no He-level meter for '%s", nam);
|
||||||
}
|
} else {
|
||||||
n=strlen(ch);
|
sprintf(helium, "He-level meter not yet read", nam);
|
||||||
if (n==1) {
|
|
||||||
if (ch[0]=='0') {
|
|
||||||
n=0;
|
|
||||||
} else if (ch[0]=='1') {
|
|
||||||
ch[0]=ch0[0];
|
|
||||||
} else if (ch[0]=='2') {
|
|
||||||
str_copy(ch, ch0); n=2;
|
|
||||||
}
|
}
|
||||||
} else if (n>2) {
|
|
||||||
ERR_MSG("no more than 2 channels per plug allowed");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n=strlen(ch);
|
||||||
if (n==0) return(0);
|
if (n==0) return(0);
|
||||||
|
if (n>2) ERR_MSG("no more than 2 channels per plug allowed");
|
||||||
|
|
||||||
nam[strlen(nam)-1]='\0'; /* strip off quote */
|
nam[strlen(nam)-1]='\0'; /* strip off quote */
|
||||||
if (!tpoint->manual) { /* set device name */
|
if (!tpoint->manual) { /* set device name */
|
||||||
@ -443,13 +462,28 @@ int configInput(void) {
|
|||||||
tpoint->sensor1->ch[1]='\0';
|
tpoint->sensor1->ch[1]='\0';
|
||||||
ERR_I(retstat=instCurve(nam, tpoint->sensor1->ch, dispFld));
|
ERR_I(retstat=instCurve(nam, tpoint->sensor1->ch, dispFld));
|
||||||
tpoint->sensor1->present=1;
|
tpoint->sensor1->present=1;
|
||||||
|
tpoint->sensor1->band=10;
|
||||||
if (n==2) {
|
if (n==2) {
|
||||||
if (ch[1]<'A' || ch[1]>'D') ERR_MSG("illegal channel");
|
if (ch[1]>='a' && ch[1]<='d') {
|
||||||
tpoint->sensor2->ch[0]=ch[1];
|
tpoint->sensor2->ch[0]=ch[1];
|
||||||
tpoint->sensor2->ch[1]='\0';
|
tpoint->sensor2->ch[1]='\0';
|
||||||
str_append(nam, "l");
|
str_copy(chan, ch+1);
|
||||||
ERR_I(retstat=instCurve(nam, tpoint->sensor2->ch, dispFld+2));
|
logfileOut(LOG_MAIN, "auxilliary input on channel %s\n", chan);
|
||||||
tpoint->sensor2->present=1;
|
if (ch[0]>'b') {
|
||||||
|
ERR_P(LscCmd(ser, "INTYPE [chan]:0,1,2,1,13;MNMX [chan]:1,3"));
|
||||||
|
} else {
|
||||||
|
ERR_P(LscCmd(ser, "INTYPE [chan]:0,1,2,1,12;MNMX [chan]:1,3"));
|
||||||
|
}
|
||||||
|
tpoint->sensor2->present=2;
|
||||||
|
} else {
|
||||||
|
if (ch[1]<'A' || ch[1]>'D') ERR_MSG("illegal channel");
|
||||||
|
tpoint->sensor2->ch[0]=ch[1];
|
||||||
|
tpoint->sensor2->ch[1]='\0';
|
||||||
|
str_append(nam, "l");
|
||||||
|
ERR_I(retstat=instCurve(nam, tpoint->sensor2->ch, dispFld+2));
|
||||||
|
tpoint->sensor2->present=1;
|
||||||
|
}
|
||||||
|
tpoint->sensor2->band=10;
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
OnError: return(retstat);
|
OnError: return(retstat);
|
||||||
@ -532,12 +566,14 @@ void LogMinMax(int new) {
|
|||||||
s2->min=0;
|
s2->min=0;
|
||||||
s2->max=0;
|
s2->max=0;
|
||||||
}
|
}
|
||||||
sprintf(buf, "@%.3f < T < %.3f K", cryo.tMin, cryo.tMax);
|
if (cryo.tMax>0.0) {
|
||||||
if (samp.tMax>0.0) {
|
sprintf(buf, "@%.3f < T < %.3f K", cryo.tMin, cryo.tMax);
|
||||||
sprintf(buf1, " (reg), %.3f < T < %.3f K (samp)", samp.tMin, samp.tMax);
|
if (samp.tMax>0.0) {
|
||||||
str_append(buf, buf1);
|
sprintf(buf1, " (reg), %.3f < T < %.3f K (samp)", samp.tMin, samp.tMax);
|
||||||
|
str_append(buf, buf1);
|
||||||
|
}
|
||||||
|
logfileOut(LOG_MAIN, "%s\n", buf);
|
||||||
}
|
}
|
||||||
logfileOut(LOG_MAIN, "%s\n", buf);
|
|
||||||
if (new) {
|
if (new) {
|
||||||
mmInt=60;
|
mmInt=60;
|
||||||
} else if (mmInt<600) {
|
} else if (mmInt<600) {
|
||||||
@ -549,6 +585,7 @@ void LogMinMax(int new) {
|
|||||||
int ReadTemp(void) {
|
int ReadTemp(void) {
|
||||||
char buf[256], bufs[256];
|
char buf[256], bufs[256];
|
||||||
int i, l, ls, stat;
|
int i, l, ls, stat;
|
||||||
|
struct tm *tb;
|
||||||
|
|
||||||
readTemp=0;
|
readTemp=0;
|
||||||
|
|
||||||
@ -568,17 +605,17 @@ int ReadTemp(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ls>0) {
|
if (ls>0) {
|
||||||
bufs[ls-1]='\0'; /* strip off ';' */
|
buf[l-1]='\0'; /* strip off ';' */
|
||||||
ERR_P(LscCmd(ser, bufs));
|
|
||||||
str_append(buf, "MNMXRST");
|
|
||||||
ERR_P(LscCmd(ser, buf));
|
ERR_P(LscCmd(ser, buf));
|
||||||
|
str_append(bufs, "MNMXRST");
|
||||||
|
ERR_P(LscCmd(ser, bufs));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check for reading errors */
|
/* check for reading errors */
|
||||||
for (i=1; i<=4; i++) {
|
for (i=1; i<=4; i++) {
|
||||||
sensor=sensors[i];
|
sensor=sensors[i];
|
||||||
if (sensor->present) {
|
if (sensor->present) {
|
||||||
stat=sensor->stat1 | sensor->stat2;
|
stat=(sensor->stat1 | sensor->stat2) & 255;
|
||||||
if (stat != sensor->readStat) {
|
if (stat != sensor->readStat) {
|
||||||
sensor->readStat=stat;
|
sensor->readStat=stat;
|
||||||
if (stat & 1) logfileOut(LOG_MAIN, "invalid reading %s\n", sensor->ch);
|
if (stat & 1) logfileOut(LOG_MAIN, "invalid reading %s\n", sensor->ch);
|
||||||
@ -591,12 +628,39 @@ int ReadTemp(void) {
|
|||||||
if (stat==0) logfileOut(LOG_MAIN, "reading o.k. %s\n", sensor->ch);
|
if (stat==0) logfileOut(LOG_MAIN, "reading o.k. %s\n", sensor->ch);
|
||||||
}
|
}
|
||||||
if (stat==0) {
|
if (stat==0) {
|
||||||
if (sensor->t1 < 0.8*sensor->t2) {
|
|
||||||
|
if (sensor->present==2 && heliumMode==2) {
|
||||||
|
sensor->t = sensor->t1; /* take minimum only */
|
||||||
|
} else if (sensor->t2 - sensor->t1 <= sensor->band*2) { /* normal case */
|
||||||
|
sensor->t = (sensor->t1 + sensor->t2) * 0.5; /* mean of min and max */
|
||||||
|
sensor->band = sensor->band/2;
|
||||||
|
} else { /* probably noisy values */
|
||||||
logfileOut(LOG_MAIN, "min/max %s: %f %f\n", sensor->ch, sensor->t1, sensor->t2);
|
logfileOut(LOG_MAIN, "min/max %s: %f %f\n", sensor->ch, sensor->t1, sensor->t2);
|
||||||
|
if (fabs(sensor->t1 - sensor->t) < fabs(sensor->t2 - sensor->t) ) {
|
||||||
|
sensor->t=sensor->t1;
|
||||||
|
sensor->t2 = sensor->t1;
|
||||||
|
} else {
|
||||||
|
sensor->t=sensor->t2;
|
||||||
|
sensor->t1 = sensor->t1;
|
||||||
|
}
|
||||||
|
sensor->t1 = sensor->t;
|
||||||
|
sensor->t2 = sensor->t;
|
||||||
|
}
|
||||||
|
if (sensor->present==2) {
|
||||||
|
aux=sensor->t; sensor->t=0;
|
||||||
|
if (full>0 && heliumMode>0) {
|
||||||
|
tb=localtime(&tim);
|
||||||
|
if (aux<full && aux>0) {
|
||||||
|
sprintf(helium, "%5.1f %% (%02d.%02d., %02d:%02d)", 100.0*aux/full
|
||||||
|
, tb->tm_mday, tb->tm_mon+1, tb->tm_hour, tb->tm_min);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sensor->t = (sensor->t1 + sensor->t2) * 0.5; /* mean of min and max */
|
|
||||||
if (sensor->t1 < sensor->min || sensor->min==0.0) sensor->min = sensor->t1;
|
if (sensor->t1 < sensor->min || sensor->min==0.0) sensor->min = sensor->t1;
|
||||||
if (sensor->t2 > sensor->max) sensor->max = sensor->t2;
|
if (sensor->t2 > sensor->max) sensor->max = sensor->t2;
|
||||||
|
if (sensor->max - sensor->min > sensor->band) {
|
||||||
|
sensor->band = sensor->max - sensor->min;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
sensor->t=0;
|
sensor->t=0;
|
||||||
}
|
}
|
||||||
@ -604,7 +668,7 @@ int ReadTemp(void) {
|
|||||||
sensor->t=0;
|
sensor->t=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cryo.temp=WeightedAverage(sens1.t, sens2.t)*cryo.scale;
|
cryo.temp=WeightedAverage(sens1.t, sens2.t)*cryo.scale;
|
||||||
samp.temp=WeightedAverage(sens3.t, sens4.t)*samp.scale;
|
samp.temp=WeightedAverage(sens3.t, sens4.t)*samp.scale;
|
||||||
if (samp.temp==0.0) samp.temp=cryo.temp;
|
if (samp.temp==0.0) samp.temp=cryo.temp;
|
||||||
@ -624,20 +688,22 @@ int SetTemp(int switchOn) {
|
|||||||
char *ch;
|
char *ch;
|
||||||
float scale;
|
float scale;
|
||||||
|
|
||||||
if (tempC>tLimit) tempC=tLimit;
|
if (tempC>tLimit) {
|
||||||
|
tempC=tLimit;
|
||||||
|
logfileOut(LOG_MAIN, "set point too high, reset to %f\n", tempC);
|
||||||
|
}
|
||||||
if (switchOn) {
|
if (switchOn) {
|
||||||
ERR_I(ReadTemp());
|
ERR_I(ReadTemp());
|
||||||
LogMinMax(1);
|
LogMinMax(1);
|
||||||
logfileOut(LOG_MAIN, "set %.3f\n", tempC);
|
|
||||||
}
|
}
|
||||||
scale=cryo.scale;
|
scale=cryo.scale;
|
||||||
ch=sens1.ch;
|
ch=sens1.ch;
|
||||||
if (sens2.present && tempC<(tLow+tHigh)/2) ch=sens2.ch;
|
if (sens2.present==1 && tempC<(tLow+tHigh)/2) ch=sens2.ch;
|
||||||
if (sens3.present) {
|
if (sens3.present) {
|
||||||
if (controlMode==1) { /* control directly on sample sensor */
|
if (controlMode==1) { /* control directly on sample sensor */
|
||||||
tShift=0;
|
tShift=0;
|
||||||
ch=sens3.ch;
|
if (sens3.t!=0) ch=sens3.ch;
|
||||||
if (sens2.present && tempC<(tLow+tHigh)/2) ch=sens4.ch;
|
if (sens4.present==1 && tempC<(tLow+tHigh)/2 && sens4.t!=0) ch=sens4.ch;
|
||||||
scale=samp.scale;
|
scale=samp.scale;
|
||||||
} else if (controlMode!=2) {
|
} else if (controlMode!=2) {
|
||||||
tShift=0;
|
tShift=0;
|
||||||
@ -660,11 +726,16 @@ int SetTemp(int switchOn) {
|
|||||||
ERR_P(LscCmd(ser, "CSET 1:[chan],1,1,0;RANGE:0;SETP 1:0"));
|
ERR_P(LscCmd(ser, "CSET 1:[chan],1,1,0;RANGE:0;SETP 1:0"));
|
||||||
} else if (remoteMode==1) { /* in local mode: do not switch on heater */
|
} else if (remoteMode==1) { /* in local mode: do not switch on heater */
|
||||||
ERR_P(LscCmd(ser, "SETP 1:[tempH]"));
|
ERR_P(LscCmd(ser, "SETP 1:[tempH]"));
|
||||||
|
ch=controlChannel;
|
||||||
} else if (switchOn || (htrst>=5 && relay==0)) { /* switch on also when bad heater message and no alarms */
|
} else if (switchOn || (htrst>=5 && relay==0)) { /* switch on also when bad heater message and no alarms */
|
||||||
ERR_P(LscCmd(ser, "CSET 1:[chan],1,1,0;RANGE:[iRange];SETP 1:[tempH]"));
|
ERR_P(LscCmd(ser, "CSET 1:[chan],1,1,0;RANGE:[iRange];SETP 1:[tempH]"));
|
||||||
} else {
|
} else {
|
||||||
ERR_P(LscCmd(ser, "CSET 1:[chan],1;SETP 1:[tempH]"));
|
ERR_P(LscCmd(ser, "CSET 1:[chan],1;SETP 1:[tempH]"));
|
||||||
}
|
}
|
||||||
|
if (0!=strcmp(ch, controlChannel) || switchOn) {
|
||||||
|
str_copy(controlChannel, ch);
|
||||||
|
logfileOut(LOG_MAIN, "set %f (on %s)\n", tempC, ch);
|
||||||
|
}
|
||||||
return(0);
|
return(0);
|
||||||
OnError: return(-1);
|
OnError: return(-1);
|
||||||
}
|
}
|
||||||
@ -690,12 +761,12 @@ int PeriodicTask(void) {
|
|||||||
if (0!=strcmp(buf1, "LSCI") || 0!=strcmp(buf2, "MODEL340") || serialNo==0) return(0);
|
if (0!=strcmp(buf1, "LSCI") || 0!=strcmp(buf2, "MODEL340") || serialNo==0) return(0);
|
||||||
if (k!=serialNo) { /* controller exchanged or we are initializing */
|
if (k!=serialNo) { /* controller exchanged or we are initializing */
|
||||||
if (!configuring) {
|
if (!configuring) {
|
||||||
str_copy(status, "controller connected");
|
logfileOut(LOG_MAIN, "controller connected\n");
|
||||||
}
|
}
|
||||||
if (remoteMode==2) configuring++;
|
if (remoteMode==2) configuring++;
|
||||||
tempC=0;
|
tempC=0;
|
||||||
/* reload curve cache: */
|
/* reload curve cache: */
|
||||||
if (cache!=NULL) my_free(cache);
|
if (cache!=NULL) FREE(cache);
|
||||||
sprintf(lbuf, "lsc.%d", serialNo);
|
sprintf(lbuf, "lsc.%d", serialNo);
|
||||||
str_copy(buf, logDir);
|
str_copy(buf, logDir);
|
||||||
str_append(buf, lbuf);
|
str_append(buf, lbuf);
|
||||||
@ -797,7 +868,7 @@ int PeriodicTask(void) {
|
|||||||
t3[1]=samp.temp;
|
t3[1]=samp.temp;
|
||||||
i=2;
|
i=2;
|
||||||
} else {
|
} else {
|
||||||
if (sens2.present) {
|
if (sens2.present==1) {
|
||||||
t3[1]=sens2.t;
|
t3[1]=sens2.t;
|
||||||
i=2;
|
i=2;
|
||||||
} else {
|
} else {
|
||||||
@ -818,7 +889,7 @@ int PeriodicTask(void) {
|
|||||||
if (tempC!=0) {
|
if (tempC!=0) {
|
||||||
if (sens1.present && sens3.present && controlMode==2) {
|
if (sens1.present && sens3.present && controlMode==2) {
|
||||||
t=sens1.t;
|
t=sens1.t;
|
||||||
if (sens2.present && tempC<(tLow+tHigh)/2) t=sens2.t;
|
if (sens2.present==1 && tempC<(tLow+tHigh)/2) t=sens2.t;
|
||||||
d=(tempH-t)/t-1.0; /* relative difference */
|
d=(tempH-t)/t-1.0; /* relative difference */
|
||||||
w=exp(-d*d*230); /* gaussian */
|
w=exp(-d*d*230); /* gaussian */
|
||||||
if (w<0.1) tInt=0; /* reset when far from setpoint (more than 10 %) */
|
if (w<0.1) tInt=0; /* reset when far from setpoint (more than 10 %) */
|
||||||
@ -861,12 +932,12 @@ int PeriodicTask(void) {
|
|||||||
if (tpoint->codChanged) { /* code change confirmed */
|
if (tpoint->codChanged) { /* code change confirmed */
|
||||||
tpoint->codChanged=0;
|
tpoint->codChanged=0;
|
||||||
Progress(1);
|
Progress(1);
|
||||||
|
tpoint->manual=0;
|
||||||
if (tpoint->code1==0) {
|
if (tpoint->code1==0) {
|
||||||
logfileOut(LOG_MAIN, "%s unplugged\n", tpoint->tname);
|
logfileOut(LOG_MAIN, "%s unplugged\n", tpoint->tname);
|
||||||
} else {
|
} else {
|
||||||
logfileOut(LOG_MAIN, "plugged %d on %s\n", tpoint->code1, tpoint->tname);
|
logfileOut(LOG_MAIN, "plugged %d on %s\n", tpoint->code1, tpoint->tname);
|
||||||
}
|
}
|
||||||
tpoint->manual=0;
|
|
||||||
tempC=0;
|
tempC=0;
|
||||||
remoteMode=2; /* set to remote mode */
|
remoteMode=2; /* set to remote mode */
|
||||||
LscCmd(ser, "MODE:[remoteMode]");
|
LscCmd(ser, "MODE:[remoteMode]");
|
||||||
@ -893,7 +964,11 @@ int PeriodicTask(void) {
|
|||||||
ERR_P(LscCmd(ser, "RANGE?>iRange"));
|
ERR_P(LscCmd(ser, "RANGE?>iRange"));
|
||||||
if (iRange==0) tempC=0;
|
if (iRange==0) tempC=0;
|
||||||
} else {
|
} else {
|
||||||
ERR_P(LscCmd(ser, "RANGE?>iRange;SETP?1>tempC"));
|
ERR_P(LscCmd(ser, "RANGE?>iRange;CSET?1>,cod1,;SETP?1>tempC"));
|
||||||
|
if (cod1!=1) {
|
||||||
|
tempC=0;
|
||||||
|
logfileOut(LOG_MAIN, "set point was not in K, set to 0\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
setFlag=(iRange>0);
|
setFlag=(iRange>0);
|
||||||
}
|
}
|
||||||
@ -921,6 +996,9 @@ int inputSettings(Testpoint *this) {
|
|||||||
} else {
|
} else {
|
||||||
if (tpoint->code==0) {
|
if (tpoint->code==0) {
|
||||||
logfileOut(LOG_MAIN ,"reset %s inputs\n", tpoint->tname);
|
logfileOut(LOG_MAIN ,"reset %s inputs\n", tpoint->tname);
|
||||||
|
if (cryo.code==0 && samp.code==0) {
|
||||||
|
logfileOut(LOG_MAIN, "no more sensor connected\n");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
logfileOut(LOG_MAIN ,"configure %s inputs for code %+d\n", tpoint->tname, tpoint->code);
|
logfileOut(LOG_MAIN ,"configure %s inputs for code %+d\n", tpoint->tname, tpoint->code);
|
||||||
}
|
}
|
||||||
@ -988,7 +1066,7 @@ int Display(void) {
|
|||||||
s=sensors[i];
|
s=sensors[i];
|
||||||
if (s->present) {
|
if (s->present) {
|
||||||
flds[k]=s->ch[0];
|
flds[k]=s->ch[0];
|
||||||
fmt[k]='1';
|
if (s->present==1) { fmt[k]='1'; } else { fmt[k]='3'; } /* special value */
|
||||||
if (k>maxfld) maxfld=k;
|
if (k>maxfld) maxfld=k;
|
||||||
} else {
|
} else {
|
||||||
flds[k]='\0';
|
flds[k]='\0';
|
||||||
@ -1075,7 +1153,7 @@ int Settings(void) {
|
|||||||
p=str_split(buf, p, '\n');
|
p=str_split(buf, p, '\n');
|
||||||
ERR_P(LscCmd(ser, buf));
|
ERR_P(LscCmd(ser, buf));
|
||||||
}
|
}
|
||||||
my_free(cfg);
|
FREE(cfg);
|
||||||
} else {
|
} else {
|
||||||
cryo.scale=1;
|
cryo.scale=1;
|
||||||
samp.scale=1;
|
samp.scale=1;
|
||||||
@ -1085,7 +1163,7 @@ int Settings(void) {
|
|||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
OnError:
|
OnError:
|
||||||
if (cfg!=NULL) my_free(cfg);
|
if (cfg!=NULL) FREE(cfg);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1322,7 +1400,11 @@ int main(int argc, char *argv[])
|
|||||||
CocDefFlt(deriv, pidFlag);
|
CocDefFlt(deriv, pidFlag);
|
||||||
CocDefFlt(tempC, setFlag);
|
CocDefFlt(tempC, setFlag);
|
||||||
CocDefFlt(tempH, CocRD);
|
CocDefFlt(tempH, CocRD);
|
||||||
|
CocDefFlt(aux, CocRD);
|
||||||
|
CocDefFlt(full, CocWR);
|
||||||
CocDefFlt(tLimit, CocRD);
|
CocDefFlt(tLimit, CocRD);
|
||||||
|
CocDefFlt(tLow, CocRD);
|
||||||
|
CocDefFlt(tHigh, CocRD);
|
||||||
CocDefFlt(maxShift, CocWR);
|
CocDefFlt(maxShift, CocWR);
|
||||||
|
|
||||||
CocDefStr(device, deviceFlag);
|
CocDefStr(device, deviceFlag);
|
||||||
@ -1333,6 +1415,9 @@ int main(int argc, char *argv[])
|
|||||||
CocDefStr(buf4, CocRD);
|
CocDefStr(buf4, CocRD);
|
||||||
CocDefStr(head, CocRD);
|
CocDefStr(head, CocRD);
|
||||||
CocDefStr(chan, CocRD);
|
CocDefStr(chan, CocRD);
|
||||||
|
CocDefStr(chanS, CocRD);
|
||||||
|
CocDefStr(chanM, CocRD);
|
||||||
|
CocDefStr(helium, CocRD);
|
||||||
CocDefStr(intype, CocRD);
|
CocDefStr(intype, CocRD);
|
||||||
CocDefStr(status, CocRD);
|
CocDefStr(status, CocRD);
|
||||||
CocDefStr(dlogfile, CocRD);
|
CocDefStr(dlogfile, CocRD);
|
||||||
@ -1350,6 +1435,7 @@ int main(int argc, char *argv[])
|
|||||||
CocDefInt(iAmp, CocRD);
|
CocDefInt(iAmp, CocRD);
|
||||||
CocDefInt(iRange, CocRD);
|
CocDefInt(iRange, CocRD);
|
||||||
CocDefInt(remoteMode, CocRD);
|
CocDefInt(remoteMode, CocRD);
|
||||||
|
CocDefInt(heliumMode, CocRD);
|
||||||
CocDefInt(htrst, CocRD);
|
CocDefInt(htrst, CocRD);
|
||||||
|
|
||||||
CocDefInt(logPeriod, CocWR);
|
CocDefInt(logPeriod, CocWR);
|
||||||
|
@ -13,7 +13,11 @@ pTecsClient TeccInit(char *startcmd, int port) {
|
|||||||
CocConn *conn;
|
CocConn *conn;
|
||||||
|
|
||||||
NEW(conn);
|
NEW(conn);
|
||||||
ERR_I(CocInitClient(conn, "", port, "#rwacs", 0, startcmd));
|
if (startcmd[0]=='#') {
|
||||||
|
ERR_I(CocInitClient(conn, startcmd+1, port, "#rwacs", 0, ""));
|
||||||
|
} else {
|
||||||
|
ERR_I(CocInitClient(conn, "", port, "#rwacs", 0, startcmd));
|
||||||
|
}
|
||||||
CocDefFlt(tempC, CocRD);
|
CocDefFlt(tempC, CocRD);
|
||||||
CocDefFlt(tempP, CocRD);
|
CocDefFlt(tempP, CocRD);
|
||||||
CocDefFlt(tempX, CocRD);
|
CocDefFlt(tempX, CocRD);
|
||||||
@ -115,7 +119,7 @@ int TeccQuitServer(pTecsClient conn) {
|
|||||||
void TeccClose(pTecsClient conn) {
|
void TeccClose(pTecsClient conn) {
|
||||||
if (conn!=NULL) {
|
if (conn!=NULL) {
|
||||||
CocCloseClient(conn);
|
CocCloseClient(conn);
|
||||||
my_free(conn);
|
FREE(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,6 +130,10 @@ void TeccClose(pTecsClient conn) {
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef F_CHAR
|
||||||
|
/* compile only when fortran c interface stuff is defined */
|
||||||
|
|
||||||
|
|
||||||
#ifdef __VMS
|
#ifdef __VMS
|
||||||
#define tecs_get_par_ tecs_get_par
|
#define tecs_get_par_ tecs_get_par
|
||||||
#define tecs_set_par_ tecs_set_par
|
#define tecs_set_par_ tecs_set_par
|
||||||
@ -211,3 +219,4 @@ int tecs_quit_server_(void) {
|
|||||||
return(TeccQuitServer(conn));
|
return(TeccQuitServer(conn));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -96,6 +96,7 @@
|
|||||||
l=0
|
l=0
|
||||||
goto 11
|
goto 11
|
||||||
elseif (cmd .eq. 'plot') then
|
elseif (cmd .eq. 'plot') then
|
||||||
|
call cho_choose('G')
|
||||||
iret=tecs_get_par('dlogfile', file)
|
iret=tecs_get_par('dlogfile', file)
|
||||||
if (iret .lt. 0) goto 19
|
if (iret .lt. 0) goto 19
|
||||||
call tecs_plot(file)
|
call tecs_plot(file)
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
parameter version=106, recs=1024, mdat=4, recl=mdat*recs
|
integer version, recs, mdat, recl
|
||||||
parameter step=5, size=8*24*3600/step, dirlen=size/recs+1
|
parameter (version=106, recs=1024, mdat=4, recl=mdat*recs)
|
||||||
parameter undef=-65535.0
|
integer step,size,dirlen
|
||||||
|
parameter (step=5, size=8*24*3600/step, dirlen=size/recs+1)
|
||||||
|
real undef
|
||||||
|
parameter (undef=-65535.0)
|
||||||
|
|
||||||
integer lunw, lunr, wrec, rrec
|
integer lunw, lunr, wrec, rrec
|
||||||
integer vers, stim, etim
|
integer vers, stim, etim
|
||||||
|
@ -31,6 +31,10 @@ subroutine tecs_plot(file)
|
|||||||
right=.true.
|
right=.true.
|
||||||
call pgopen(" ")
|
call pgopen(" ")
|
||||||
call pgqinf('TYPE', buf, l)
|
call pgqinf('TYPE', buf, l)
|
||||||
|
if (buf=='NULL') then
|
||||||
|
print *,'No PGPLOT-Device defined'
|
||||||
|
goto 9
|
||||||
|
endif
|
||||||
xwin=(buf(1:1)=='X')
|
xwin=(buf(1:1)=='X')
|
||||||
live=.not. xwin ! live switched off by default on X-Windows
|
live=.not. xwin ! live switched off by default on X-Windows
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user