From 6c69b59fcea8862d60a018531ec3108660e5612e Mon Sep 17 00:00:00 2001 From: zolliker Date: Mon, 18 Jun 2012 13:37:11 +0000 Subject: [PATCH] . --- tecs/pg_plus/makefile_linux | 5 +- tecs/six.c | 4 +- tecs/tecs.c | 201 +++++++----------------------------- 3 files changed, 42 insertions(+), 168 deletions(-) diff --git a/tecs/pg_plus/makefile_linux b/tecs/pg_plus/makefile_linux index 52c7b0a..a19696a 100644 --- a/tecs/pg_plus/makefile_linux +++ b/tecs/pg_plus/makefile_linux @@ -1,9 +1,10 @@ # Makefile for modifications to PGPLOT allowing for # timeout on cursor input for the devices VMAC, XWINDOW and XSERVE -ORIG=/usr/local/distsrc/pgplot5.2.2 +PGROOT=/afs/psi.ch/project/sinq/sl6 +ORIG=$(PGROOT)/lib -FFLAGS=-g -Wimplicit -Wall -g -I$(ORIG) +FFLAGS=-g -Wimplicit -Wall -g -I$(PGROOT)/include CFLAGS=-g -DPG_PPU -I. -I/usr/X11R6/include include make_gen diff --git a/tecs/six.c b/tecs/six.c index f01e7b0..2c8e65f 100644 --- a/tecs/six.c +++ b/tecs/six.c @@ -173,7 +173,7 @@ int CocCreateSockAdr( } char* readWrite(int tmo, int skip, char *find) { - int lbuf, go, iret, n, shortTmo, l, socket; + int lbuf, go, n, shortTmo, l, socket; Mode idx; char *msg, *p, *q; char chr; @@ -283,7 +283,7 @@ char* readWrite(int tmo, int skip, char *find) { shortTmo = 0; } fflush(stdout); - if (iret==0) laststat=0; + if (result==NULL) laststat=0; return result; OnError: return NULL; } diff --git a/tecs/tecs.c b/tecs/tecs.c index 3fbcc17..b39c6de 100644 --- a/tecs/tecs.c +++ b/tecs/tecs.c @@ -61,19 +61,14 @@ typedef struct { char typ; } SensorT; -enum Sensors { A, B, C, D, A0, A1, A2, A3, A4, N_SENSORS }; +enum Sensors { A, B, C, D, N_SENSORS }; static SensorT sensA={"A"}, sensB={"B"}, sensC={"C"}, sensD={"D"}, - sensA0={"A0", DATA_UNDEF}, - sensA1={"A1", DATA_UNDEF}, - sensA2={"A2", DATA_UNDEF}, - sensA3={"A3", DATA_UNDEF}, - sensA4={"A4", DATA_UNDEF}, - *sensors[N_SENSORS]={&sensA, &sensB, &sensC, &sensD, &sensA0, &sensA1, &sensA2, &sensA3, &sensA4 }, + *sensors[N_SENSORS]={&sensA, &sensB, &sensC, &sensD}, *ctlSens=NULL, /* control sensor */ *heliumSens=NULL, *auxSens=NULL, @@ -145,6 +140,7 @@ static float still=0, linearPower=0, /* normally 0. Maximum power when loop=2 and the power linear to the output */ shiftUp, shiftLow, /* upper and lower limit of tShift correction */ + maxpower2=1.0, state, mout; @@ -180,16 +176,15 @@ static int tim0, /* msec Time */ per, /* effective period */ mmInt, mmTime, /* interval and time for next min-max logging */ - nScan=0, /* number of scanned channels */ - iScan=1, /* actual scan channel */ alarmListSize=0, keepT=0, /* keep control over power-up */ swRangeOn=60, /* when not happen several times within less than 60 sec. delay, switch heater range on when controller switched it off */ initMaxPower=0, /* set MaxPower for the first time */ unit=1, /* 1: Kelvin, 2: Celsius */ - autoconfig=1, + autoconfig=0, /* automatic configuration 1: inside tecs, 0: done by SEA */ lockAlarm, + stickhtr=-1, cntError; static int tim, rdTim; /* actual time, read Time */ @@ -444,12 +439,7 @@ int InstalCurve(SensorT *sensor, char *devArg) { str_upcase(head, chead); ERR_P(LscCmd(ser, "CRVHDR [num]:[head]")); } - if (chan[1]>'1') { /* scanned inputs A2...A4 */ - ERR_P(LscCmd(ser, "INCRV?[chan]>buf2;INSET?[chan]>buf3")); - str_copy(buf1, intype); - } else { - ERR_P(LscCmd(ser, "INTYPE?[chan]>buf1;INCRV?[chan]>buf2;INSET?[chan]>buf3")); - } + ERR_P(LscCmd(ser, "INTYPE?[chan]>buf1;INCRV?[chan]>buf2;INSET?[chan]>buf3")); if (!LscEqPar(buf1, intype) || atoi(buf2)!=num || buf3[0]!='1') { ERR_P(LscCmd(ser, "ANALOG 2:0,3;INSET [chan],1")); if (chan[1]<='1') ERR_P(LscCmd(ser, "RANGE:0;INTYPE [chan]:[intype]")); @@ -628,10 +618,10 @@ again: twoloops=0; initMaxPower=1; resist=10; - nScan=0; unit=1; empty=0; full = -1; + stickhtr = -1; } else { InitSensor(&sensC); if (strcasecmp(nam, "none") == 0) { @@ -646,10 +636,6 @@ again: } } - for (i=5;i<9;i++) { - InitSensor(sensors[i]); - } - dev[0]='\0'; str_copy(heUnits, "%"); @@ -662,17 +648,6 @@ again: j=2; } str_copy(plug->descr, dev); - if (sensA.type[0]>'0' && sensA.type[0]<='4') { - nScan=sensA.type[0]-'0'; - for (i=5;i<5+nScan;i++) { - s=sensors[i]; - s->present=-1; - s->band=10; - if (s->scale==0.0) s->scale=1.0; - s->typ='1'+i-5; - } - sensA.type[0]='\0'; - } if (tLimit==0.0) { if (tMaxLimit==0.0) { tLimit=310; @@ -707,14 +682,6 @@ again: } } - for (i=5;i<9;i++) { - s=sensors[i]; - if (s->type[0] != '\0') { - s->present=-1; - } - s->typ=s->type[0]; - } - if (!plug->devcmd) { /* set device name */ str_copy(plug->device, nam); ConcatDevice(); @@ -873,16 +840,9 @@ void LogMinMax(int new) { sprintf(buf1, " Tk %.5g", tk); str_append(buf, buf1); } - } else if (nScan==0) { + } else { return; } - for (i=5; i<5+nScan; i++) { - s1=sensors[i]; - if (s1->t!=DATA_UNDEF) { - sprintf(buf1, " T%c %.5g", s1->ch[1], s1->t); - str_append(buf, buf1); - } - } if (power!=DATA_UNDEF) { sprintf(buf1, " P %.4g", power); str_append(buf, buf1); @@ -997,41 +957,13 @@ int ReadTemp(void) { int i, doit, stat; int tfill, dfill; static time_t lastRead=0; - time_t now; float hlev; SensorT *s; readTemp=0; doit=0; - if (nScan>0) { - time(&now); - if (lastRead == 0) { - lastRead = now; - } else if (now/30 != lastRead/30) { - s=sensors[iScan+4]; - str_copy(chan, s->ch); - /* find next sensor s2 */ - for (i = iScan; i < iScan - 1 + nScan; i++) { - sens = sensors[i % nScan + 5]; - if (sens->present >= 1) { - iScan = i % nScan + 1; - break; - } - } - ibuf = iScan-1; - if (unit == CELSIUS) { - ERR_P(LscCmd(ser, "CRDG?[chan]>fbuf;DOUT 3,[ibuf];XSCAN 1,[iScan];DISPFLD [sens.dispfld],[chan],[unit]")); - } else { - ERR_P(LscCmd(ser, "KRDG?[chan]>fbuf;DOUT 3,[ibuf];XSCAN 1,[iScan];DISPFLD [sens.dispfld],[chan],[unit]")); - } - lastRead = now; - s->t = fbuf; - s->readStat = 0; - } - } else { - lastRead = 0; - } + lastRead = 0; for (i=0; i<4; i++) { s=sensors[i]; s->stat1=0; @@ -1174,7 +1106,7 @@ int ReadTemp(void) { if (samp.temp==DATA_UNDEF) { samp.temp=cryo.temp; } - } else if (nScan==0) { + } else { tm=(rdTim % 3600) * 1.0e-4; ts=(rdTim % 60) * 60.0e-4+0.5; } @@ -1242,7 +1174,7 @@ int ReadHeater(int full) { } else { if (twoloops) { ERR_P(LscCmd(ser, "HTR?>htr;HTRST?>htrst;RELAYST?1>relay;RANGE?>ibuf;AOUT?2>fbuf")); - power2 = fbuf*fbuf*1e-5; + power2 = fbuf*fbuf*1e-4*maxpower2; } else { ERR_P(LscCmd(ser, "HTR?>htr;HTRST?>htrst;RELAYST?1>relay;RANGE?>ibuf")); } @@ -1346,7 +1278,7 @@ int SetTemp(int switchOn) { mout=0; ERR_P(LscCmd(ser, "CSET [loop]:[chan],[unit],1,[keepT];MOUT [loop],0")); if (twoloops) { - ERR_P(LscCmd(ser, "CSET 2:D,[unit],1,[keepT];MOUT [loop],0")); + ERR_P(LscCmd(ser, "CSET 2:C,[unit],1,[keepT];MOUT 2,0")); } if (loop==1) { ERR_P(LscCmd(ser, "RANGE:0")); @@ -1386,17 +1318,17 @@ int SetTemp(int switchOn) { } } ERR_P(LscCmd(ser, "SETP?[loop]>fbuf")); - if (fabsf(setH-fbuf) >= (fbuf+setH)*1.0e-5 || twoloops) { + if (fabsf(setH-fbuf) >= (fbuf+setH)*1.0e-5) { ERR_P(LscCmd(ser, "SETP [loop]:[setH]")); - if (twoloops) { - ERR_P(LscCmd(ser, "SETP 2:[set2]")); - } if (!doubleControl && !showSet) { logfileOut(LOG_MAIN, "set %g (on %s) (was changed %g -> %g)\n", set, ctlSens->ch, fbuf, setH); } } else { setH=fbuf; } + if (twoloops) { + ERR_P(LscCmd(ser, "SETP 2:[set2]")); + } tr=TrueScale(ctlSens, setH); if (showSet) { logfileOut(LOG_MAIN, "set %g (on %s)\n", set, ctlSens->ch); @@ -1675,7 +1607,7 @@ int ConfigAlarms(float genLimit) { ERR_P(LscCmd(ser, "RELAY 1:1;BEEP:0")); relay=0; k=0; - for (i=0;i<5+nScan;i++) { + for (i=0;i<4;i++) { s=sensors[i]; str_copy(buf1, s->ch); if (s->customAlarm==0 && genLimit>0.0) s->alarm=genLimit; @@ -1738,7 +1670,7 @@ void AssignTypes(void) { auxSens=NULL; testSens=NULL; test2Sens=NULL; - for (i=0; i<5+nScan; i++) { + for (i=0; i<4; i++) { s=sensors[i]; if (s->present==1) { typ=s->typ; @@ -1789,7 +1721,7 @@ int Settings(void) { SensorT *s; SensorT *fields[8]; char *cfg, *p; - int i,k,l,kk; + int i,k,l; if (remoteMode!=2) { remoteMode=2; /* set to remote mode */ @@ -1799,7 +1731,7 @@ int Settings(void) { } else { ERR_P(LscCmd(ser, "PID [loop],[prop],[integ],[deriv]")); } - for (i=0; i<5+nScan; i++) { + for (i=0; i<4; i++) { s=sensors[i]; if (i<4) { plug=plugs[i/2]; @@ -1808,24 +1740,9 @@ int Settings(void) { } if (s->present < 0) { if (settingsFlag) return 0; -/* - if (i==4) { - ERR_P(LscCmd(ser, "DOUT:2;XSCAN:2,,2")); - } -*/ ERR_I(InstalCurve(s, plug->device)); } } - if (nScan>0) { - for (out1=nScan+1;out1<=4;out1++) { - ERR_P(LscCmd(ser, "INSET A[out1],0")); - } - ERR_P(LscCmd(ser, "INSET A5,0;INSET A6,0;INSET A7,0;INSET A8,0")); - ERR_P(LscCmd(ser, "INSET A9,0;INSET A10,0;INSET A11,0;INSET A12,0")); - ERR_P(LscCmd(ser, "INSET A13,0;INSET A14,0;INSET A15,0;INSET A16,0")); - } else { - ERR_P(LscCmd(ser, "XSCAN:0")); - } AssignTypes(); @@ -1861,16 +1778,6 @@ int Settings(void) { DisplayFmt(testSens, fields, &k); DisplayFmt(test2Sens, fields, &k); DisplayFmt(auxSens, fields, &k); - if (nScan>0) { - i=0; - kk=k; - while (i4) k=kk; - i++; - } - /* k = kk + nScan + 1; */ - if (k > 4) k = 5; - } maxfld=k-1; /* fields 5-8 standard raw data */ @@ -1934,6 +1841,7 @@ int ConfigByCode(int plugNr) { logfileOut(LOG_MAIN ,"reset inputs on plug%d\n", plugNr); plug->sensor1->present=0; plug->sensor2->present=0; + settingsFlag=1; } else { if (plugNr == 0) { str_copy(devname0, "none"); @@ -1965,6 +1873,7 @@ int ConfigByCode(int plugNr) { str_append(buf, nam); str_append(buf, "'"); ERR_I(PrepInput(buf)); + settingsFlag=1; } else { logfileOut(LOG_MAIN+LOG_STAT ,"%s on plug%d (code %d)\n", nam, plugNr, plug->code); if (plugNr == 0) { @@ -1975,7 +1884,6 @@ int ConfigByCode(int plugNr) { } } } - settingsFlag=1; return 0; OnError: return -1; } @@ -2251,13 +2159,13 @@ int PeriodicTask(void) { /* static float shiftTarget=0; */ - if (nScan==0) { + if (stickhtr < 0) { ERR_P(LscCmd(ser, "DIOST?>cod1,out1;DOUT 3,29;BUSY?>busy")); } else { cod1=0; - ERR_P(LscCmd(ser, "BUSY?>busy")); + ERR_P(LscCmd(ser, "DOUT 3,0;BUSY?>busy")); } - if ((plug0.codDefined && plug1.codDefined) || nScan>0) { + if ((plug0.codDefined && plug1.codDefined)) { per=period; /* no timeout on above command and codes are defined: normal period */ if (per>logPeriod*1000) per=logPeriod*1000; } @@ -2412,7 +2320,7 @@ int PeriodicTask(void) { if (rdTim>=logTime) { ERR_I(DataPutAll(NULL, rdTim)); logTime=(rdTim / logPeriod + 1) * logPeriod; - if (rdTim>mmTime && (cryo.sensor1 != NULL || nScan>0)) LogMinMax(0); + if (rdTim>mmTime && (cryo.sensor1 != NULL)) LogMinMax(0); } if (set!=0 && remoteMode==2) { t=ctlSens->t; @@ -2439,7 +2347,7 @@ int PeriodicTask(void) { } if (htr == 100.0 && mout > 0) { mstep = 0.2; - while (htr == 0 && mout > 0) { + while (htr == 100.0 && mout > 0) { mstep *= 2; mout -= mstep; ERR_P(LscCmd(ser, "MOUT [loop],[mout]")); @@ -2560,13 +2468,13 @@ int PeriodicTask(void) { } oldSet = set; - if (nScan==0) { + if (stickhtr < 0) { ERR_P(LscCmd(ser, "KEYST?>key;DIOST?>cod2,out2;DOUT 3,30")); } else { ERR_P(LscCmd(ser, "KEYST?>key")); } if (busy==0) { - if (nScan==0) { + if (stickhtr < 0) { if (out1!=30) { ERR_P(LscCmd(ser, "DOUT:3,30")); ERR_P(LscCmd(ser, "DIOST?>cod1,out1")); @@ -2575,34 +2483,14 @@ int PeriodicTask(void) { ERR_P(LscCmd(ser, "DOUT:3,29")); ERR_P(LscCmd(ser, "DIOST?>cod2,out2;DOUT 3,30")); } + } else { + out1=0; + out2=0; } -/* obsolete - * if ((plug0.code1 & 0x2a) == 0x20) { - * sensA0.t = DATA_UNDEF; - * sensA1.t = DATA_UNDEF; - * sensA2.t = DATA_UNDEF; - * sensA3.t = DATA_UNDEF; - * switch ((int)scanChan) { - * case 0: sensA0.t = te; break; - * case 1: sensA1.t = te; break; - * case 2: sensA2.t = te; break; - * case 3: sensA3.t = te; break; - * default: break; - * } - * } - */ if (out1==30 && out2==29) { /* code conversion */ plug0.code1=3*decod[cod2 % 8] ^ 2*decod[cod1 % 8]; /* ^ is exclusive OR */ -/* obsolete, for external switch (MA09) - * if ((plug0.code1 & 0x2a) == 0x20) { - * scanChan = cod1 & 0x03; - * plug0.code1 = plug0.code1 & 0x30; - * } else { - * scanChan = DATA_UNDEF; - * } - */ plug1.code1=-(3*decod[cod2 / 8] ^ 2*decod[cod1 / 8]); for (i=0; i<2; i++) { plug=plugs[i]; @@ -3203,7 +3091,7 @@ int StatusHdl(int mode, void *base, int fd) { } ERR_I(ShowSensor(&buf, samp.sensor2, "T", "K", '<')); } - if (testSens!=NULL || test2Sens!=NULL || nScan>0) { + if (testSens!=NULL || test2Sens!=NULL) { ERR_I(StrPut(&buf, "\ntest", ':')); } if (testSens!=NULL) { @@ -3212,7 +3100,7 @@ int StatusHdl(int mode, void *base, int fd) { if (test2Sens!=NULL) { ERR_I(ShowSensor(&buf, test2Sens, "T", "K", 0)); } - for (i=5; i<5+nScan; i++) { + for (i=5; i<4; i++) { ERR_I(ShowSensor(&buf, sensors[i], "T", "K", 0)); } if (auxSens!=NULL) { @@ -3405,11 +3293,6 @@ int main(int argc, char *argv[]) { CocDefStruct(sensB, SensorT); CocDefStruct(sensC, SensorT); CocDefStruct(sensD, SensorT); - CocDefStruct(sensA0, SensorT); - CocDefStruct(sensA1, SensorT); - CocDefStruct(sensA2, SensorT); - CocDefStruct(sensA3, SensorT); - CocDefStruct(sensA4, SensorT); CocDefPtr(sens, SensorT); CocFltFld(SensorT, t, RD); @@ -3468,6 +3351,7 @@ int main(int argc, char *argv[]) { CocDefFlt(r2, RD); CocDefFlt(tShift, RW); CocDefFlt(linearPower, RW); + CocDefFlt(maxpower2, RW); CocDefFlt(scanChan, RW); CocDefFlt(shiftUp, RW); @@ -3535,8 +3419,7 @@ int main(int argc, char *argv[]) { CocDefInt(busy, RD); CocDefInt(serialNo, RD); CocDefInt(quit, RW); - CocDefInt(nScan, RD); - CocDefInt(iScan, RW); + CocDefInt(stickhtr, RW); CocDefInt(keepT, RW); CocDefInt(swRangeOn, RW); CocDefInt(doubleControl, RW); @@ -3555,11 +3438,6 @@ int main(int argc, char *argv[]) { CocAlias(Tb,sensB.t); CocAlias(Tc,sensC.t); CocAlias(Td,sensD.t); - CocAlias(T0,sensA0.t); - CocAlias(T1,sensA1.t); - CocAlias(T2,sensA2.t); - CocAlias(T3,sensA3.t); - CocAlias(T4,sensA4.t); CocAlias(P,power); CocAlias(tempC, set); CocAlias(int,integ); @@ -3590,7 +3468,7 @@ int main(int argc, char *argv[]) { use_stdout=1; opt=' '; } else if ('a'==opt) { - autoconfig=0; + autoconfig=1; opt=' '; } else if ('n'==opt) { i++; @@ -3683,11 +3561,6 @@ int main(int argc, char *argv[]) { ERR_P(DataCreateSet(NULL, "Te", &te, logPeriod, LOGLIFETIME, tim)); ERR_P(DataCreateSet(NULL, "Tk", &tk, logPeriod, LOGLIFETIME, tim)); ERR_P(DataCreateSet(NULL, "He", &he, logPeriod, LOGLIFETIME, tim)); - ERR_P(DataCreateSet(NULL, "T0", &sensA0.t, logPeriod, LOGLIFETIME, tim)); - ERR_P(DataCreateSet(NULL, "T1", &sensA1.t, logPeriod, LOGLIFETIME, tim)); - ERR_P(DataCreateSet(NULL, "T2", &sensA2.t, logPeriod, LOGLIFETIME, tim)); - ERR_P(DataCreateSet(NULL, "T3", &sensA3.t, logPeriod, LOGLIFETIME, tim)); - ERR_P(DataCreateSet(NULL, "T4", &sensA4.t, logPeriod, LOGLIFETIME, tim)); ERR_P(DataCreateSet(NULL, "Aux", &aux, logPeriod, LOGLIFETIME, tim)); ERR_P(DataCreateSet(NULL, "P", &power, logPeriod, LOGLIFETIME, tim)); ERR_P(DataCreateSet(NULL, "power2", &power2, logPeriod, LOGLIFETIME, tim));