- various enhancements
This commit is contained in:
2
arrobj.c
2
arrobj.c
@ -201,7 +201,7 @@ static int ArrayMakeItem(void *object, void *delete, int argc, char *argv[]) {
|
|||||||
if (item->unit) item->unit = strdup(item->unit);
|
if (item->unit) item->unit = strdup(item->unit);
|
||||||
if (item->value) item->value = strdup(item->value);
|
if (item->value) item->value = strdup(item->value);
|
||||||
ParInitPar(object, item->name);
|
ParInitPar(object, item->name);
|
||||||
SCparChange(SCLoad(&arr->p.conn));
|
SCparChange(SCLoad(arr->p.conn));
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
Usage:
|
Usage:
|
||||||
|
1
ease.c
1
ease.c
@ -170,6 +170,7 @@ void EaseSavePars(void) {
|
|||||||
static int EaseRestart(EaseBase *eab) {
|
static int EaseRestart(EaseBase *eab) {
|
||||||
int iRet;
|
int iRet;
|
||||||
|
|
||||||
|
eab->errCode = 0;
|
||||||
if (eab->task) {
|
if (eab->task) {
|
||||||
FsmStop(eab->task, eab->idle);
|
FsmStop(eab->task, eab->idle);
|
||||||
FsmRestartTask(eab->task, eab->idle);
|
FsmRestartTask(eab->task, eab->idle);
|
||||||
|
@ -42,6 +42,7 @@ typedef struct {
|
|||||||
int persmode; /* 0: leave switch on, 1: go to persistant mode */
|
int persmode; /* 0: leave switch on, 1: go to persistant mode */
|
||||||
int perswitch; /* state of switch */
|
int perswitch; /* state of switch */
|
||||||
int remote; /* 0: local, 1: remote, do not check, 2: remote, check */
|
int remote; /* 0: local, 1: remote, do not check, 2: remote, check */
|
||||||
|
int nowait; /* 0: normal, 1: drive finishes immediately, ramp in background */
|
||||||
int heaterFault;
|
int heaterFault;
|
||||||
char *fmt; /* fmt for field */
|
char *fmt; /* fmt for field */
|
||||||
int force; /* force = 2: put heater switch even when stored field does not match */
|
int force; /* force = 2: put heater switch even when stored field does not match */
|
||||||
@ -125,6 +126,9 @@ void IpsParDef(void *object) {
|
|||||||
ParName("perswitch"); ParEnum(onOff); ParList(0);
|
ParName("perswitch"); ParEnum(onOff); ParList(0);
|
||||||
ParInt(&drv->perswitch, PAR_NAN);
|
ParInt(&drv->perswitch, PAR_NAN);
|
||||||
|
|
||||||
|
ParName("nowait"); ParAccess(usUser); ParEnum(onOff); ParList(0);
|
||||||
|
ParInt(&drv->nowait, 0);
|
||||||
|
|
||||||
ParName("maxlimit"); ParSave(1); ParFloat(&drv->maxlimit, 0.0);
|
ParName("maxlimit"); ParSave(1); ParFloat(&drv->maxlimit, 0.0);
|
||||||
|
|
||||||
ParName("limit"); ParAccess(usUser); ParFmt(drv->fmt); ParTail("Tesla");
|
ParName("limit"); ParAccess(usUser); ParFmt(drv->fmt); ParTail("Tesla");
|
||||||
@ -302,6 +306,10 @@ static long IpsChangeField(long pc, void *object) {
|
|||||||
|
|
||||||
switch (pc) { default: /* FSM BEGIN *******************************/
|
switch (pc) { default: /* FSM BEGIN *******************************/
|
||||||
EaseSetUpdate(eab, EASE_RUN, 0);
|
EaseSetUpdate(eab, EASE_RUN, 0);
|
||||||
|
if (drv->nowait) {
|
||||||
|
drv->d.hwstate = HWIdle;
|
||||||
|
drv->d.eMode = EVMonitor; /* finish drive, continue in background */
|
||||||
|
}
|
||||||
EaseWrite(eab, "C3");
|
EaseWrite(eab, "C3");
|
||||||
drv->remote = 1;
|
drv->remote = 1;
|
||||||
return __LINE__; case __LINE__: /**********************************/
|
return __LINE__; case __LINE__: /**********************************/
|
||||||
|
49
pardef.c
49
pardef.c
@ -128,7 +128,7 @@ int ParPrintf(void *object, int iOut, const char *fmt, ...) {
|
|||||||
if (ctx && pobj == ctx->obj && ctx->con) {
|
if (ctx && pobj == ctx->obj && ctx->con) {
|
||||||
con = ctx->con;
|
con = ctx->con;
|
||||||
} else {
|
} else {
|
||||||
con = SCLoad(&pobj->conn);
|
con = SCLoad(pobj->conn);
|
||||||
}
|
}
|
||||||
} else if (ctx) {
|
} else if (ctx) {
|
||||||
con = ctx->con;
|
con = ctx->con;
|
||||||
@ -278,17 +278,27 @@ int ParLog(void *object) {
|
|||||||
ParData *o = ParCheck(&parClass, object);
|
ParData *o = ParCheck(&parClass, object);
|
||||||
int next;
|
int next;
|
||||||
|
|
||||||
|
if (o->desc == NULL) {
|
||||||
|
free(o);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (o->logPending == 2) {
|
||||||
|
o->logPending = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
ParBegin();
|
ParBegin();
|
||||||
ctx->now = time(NULL);
|
ctx->now = time(NULL);
|
||||||
next = ctx->now - (o->logTime / o->period + 1) * o->period;
|
next = ctx->now - (o->logTime / o->period + 1) * o->period;
|
||||||
if (next >= 0) {
|
if (next < 0) {
|
||||||
showTime = 1;
|
ParEnd();
|
||||||
ParDo(0, o, PAR_LOG, NULL);
|
return 1;
|
||||||
o->logTime = ctx->now;
|
|
||||||
o->logPending = 0;
|
|
||||||
}
|
}
|
||||||
|
showTime = 1;
|
||||||
|
ParDo(0, o, PAR_LOG, NULL);
|
||||||
|
o->logTime = ctx->now;
|
||||||
|
o->logPending = 0;
|
||||||
ParEnd();
|
ParEnd();
|
||||||
return next;
|
return 0;
|
||||||
}
|
}
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
void ParLogForced(void *object) {
|
void ParLogForced(void *object) {
|
||||||
@ -300,7 +310,9 @@ void ParLogForced(void *object) {
|
|||||||
showTime = 1;
|
showTime = 1;
|
||||||
ParDo(0, o, PAR_LOG, NULL);
|
ParDo(0, o, PAR_LOG, NULL);
|
||||||
o->logTime = ctx->now;
|
o->logTime = ctx->now;
|
||||||
o->logPending = 0;
|
if (o->logPending) {
|
||||||
|
o->logPending = 2; /* tell ParLog that we are done already, but task is still pending */
|
||||||
|
}
|
||||||
ParEnd();
|
ParEnd();
|
||||||
}
|
}
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
@ -382,7 +394,7 @@ void ParSaveConn(void *object, SConnection *con) {
|
|||||||
|
|
||||||
rights = SCGetRights(con);
|
rights = SCGetRights(con);
|
||||||
if (rights >= usMugger && rights <= usUser && con->pSock != NULL) {
|
if (rights >= usMugger && rights <= usUser && con->pSock != NULL) {
|
||||||
SCSave(&o->conn, con);
|
o->conn = SCSave(con, o->conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
@ -457,6 +469,10 @@ static int ParExecute(SConnection *con, SicsInterp *sics, void *object, int argc
|
|||||||
ctx->enumText = 1;
|
ctx->enumText = 1;
|
||||||
ParDo(con, o, PAR_SHOW, argv[2]);
|
ParDo(con, o, PAR_SHOW, argv[2]);
|
||||||
}
|
}
|
||||||
|
} else if (strcmp(argv[1],"endinit") == 0) {
|
||||||
|
initObj = NULL;
|
||||||
|
ParEnd();
|
||||||
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
if (strcmp(argv[1], "=") == 0) {
|
if (strcmp(argv[1], "=") == 0) {
|
||||||
ctx->argc = argc - 2;
|
ctx->argc = argc - 2;
|
||||||
@ -1198,13 +1214,7 @@ void *ParObject(void) {
|
|||||||
return ctx->obj;
|
return ctx->obj;
|
||||||
}
|
}
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
static int ParEndInit(void *object, void *arg, int argc, char *argv[]) {
|
|
||||||
initObj = NULL;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
void ParStdDef(void) {
|
void ParStdDef(void) {
|
||||||
ParName("endinit"); ParCmd(ParEndInit, NULL);
|
|
||||||
ParName("verbose"); ParAccess(usUser); ParSave(0); ParLogAs(NULL); ParInt(&ctx->obj->verbose, 1);
|
ParName("verbose"); ParAccess(usUser); ParSave(0); ParLogAs(NULL); ParInt(&ctx->obj->verbose, 1);
|
||||||
ParName("driver"); ParLogAs(NULL); ParStr(&ctx->obj->desc->name, NULL);
|
ParName("driver"); ParLogAs(NULL); ParStr(&ctx->obj->desc->name, NULL);
|
||||||
ParName("creationCmd"); ParLogAs(NULL); ParStr(&ctx->obj->creationCmd, NULL);
|
ParName("creationCmd"); ParLogAs(NULL); ParStr(&ctx->obj->creationCmd, NULL);
|
||||||
@ -1238,6 +1248,7 @@ void ParKill(void *object) {
|
|||||||
if (o->creationCmd) free(o->creationCmd);
|
if (o->creationCmd) free(o->creationCmd);
|
||||||
if (o->pCall) DeleteCallBackInterface(o->pCall);
|
if (o->pCall) DeleteCallBackInterface(o->pCall);
|
||||||
if (o->desc) DeleteDescriptor(o->desc);
|
if (o->desc) DeleteDescriptor(o->desc);
|
||||||
|
if (o->conn) SCStoreFree(o->conn);
|
||||||
p = o->infoList;
|
p = o->infoList;
|
||||||
while (p) {
|
while (p) {
|
||||||
q = p->next;
|
q = p->next;
|
||||||
@ -1246,7 +1257,11 @@ void ParKill(void *object) {
|
|||||||
free(p);
|
free(p);
|
||||||
p = q;
|
p = q;
|
||||||
}
|
}
|
||||||
free(o);
|
if (o->logPending) { /* will be free in scheduled ParLog function */
|
||||||
|
o->desc = NULL;
|
||||||
|
} else {
|
||||||
|
free(o);
|
||||||
|
}
|
||||||
ParEnd();
|
ParEnd();
|
||||||
if (ctx == NULL && pServ->pSics->iDeleting) { /* finish, no more contexts nested -> free all of them */
|
if (ctx == NULL && pServ->pSics->iDeleting) { /* finish, no more contexts nested -> free all of them */
|
||||||
while (freeContexts) {
|
while (freeContexts) {
|
||||||
@ -1300,6 +1315,8 @@ void *ParMake(SConnection *con, char *name, ParClass *class, ParDef pardef,
|
|||||||
o->period = 5;
|
o->period = 5;
|
||||||
o->infoList = NULL;
|
o->infoList = NULL;
|
||||||
o->verbose = 0;
|
o->verbose = 0;
|
||||||
|
o->logPending = 0;
|
||||||
|
o->conn = NULL;
|
||||||
ParSaveConn(o, con);
|
ParSaveConn(o, con);
|
||||||
o->pardef = pardef;
|
o->pardef = pardef;
|
||||||
ParBegin();
|
ParBegin();
|
||||||
|
@ -428,7 +428,7 @@ static int TASHeader(pScanData self)
|
|||||||
fVal = pDrive->GetValue(pDum,self->pCon);
|
fVal = pDrive->GetValue(pDum,self->pCon);
|
||||||
pTem = (pEVControl)pCom->pData;
|
pTem = (pEVControl)pCom->pData;
|
||||||
EVCGetPar(pTem,"target",&fVal2);
|
EVCGetPar(pTem,"target",&fVal2);
|
||||||
fprintf(self->fd,"PARAM: TT=%8.4f, RT=%8.4f\n",fVal, fVal2);
|
fprintf(self->fd,"PARAM: TEM=%8.4f, RT=%8.4f\n",fVal, fVal2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -494,7 +494,7 @@ int CocShowLog(CocConn *conn, char *loglist, int start, int lines) {
|
|||||||
|
|
||||||
void CocCloseClient(CocConn *conn) {
|
void CocCloseClient(CocConn *conn) {
|
||||||
assert(conn!=NULL);
|
assert(conn!=NULL);
|
||||||
close(conn->fd);
|
if (conn->fd >= 0) close(conn->fd);
|
||||||
conn->fd=-1;
|
conn->fd=-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@ sens=g26550
|
|||||||
unit=Ohm ! sensor format (mV,V,Ohm), log formats are choosen automatically
|
unit=Ohm ! sensor format (mV,V,Ohm), log formats are choosen automatically
|
||||||
!tlim=325 ! setpoint limit (automatic if omitted)
|
!tlim=325 ! setpoint limit (automatic if omitted)
|
||||||
type=Ge ! sensor type (Special,Si,GaAlAs,Pt250,Pt500,Pt2500,RhFe,C,Cernox,RuOx,Ge) (special if omitted)
|
type=Ge ! sensor type (Special,Si,GaAlAs,Pt250,Pt500,Pt2500,RhFe,C,Cernox,RuOx,Ge) (special if omitted)
|
||||||
|
range=60000
|
||||||
|
form=loglog
|
||||||
curv ! curve (sensor,temp/K) follows, must be ordered, but can be increasing or decreasing
|
curv ! curve (sensor,temp/K) follows, must be ordered, but can be increasing or decreasing
|
||||||
51675.31367 1.26557
|
51675.31367 1.26557
|
||||||
35429.70923 1.40134
|
35429.70923 1.40134
|
||||||
|
@ -5,6 +5,7 @@ type=cernox ! sensor type (Special,Si,GaAlAs,Pt250,Pt500,Pt2500,RhFe,C,Cerno
|
|||||||
!excit=300uA ! (off,30nA,100nA,300nA,1uA,3uA,10uA,30uA,100uA,300uA,1mA,10mV,1mV) (if omitted: default from sensor type)
|
!excit=300uA ! (off,30nA,100nA,300nA,1uA,3uA,10uA,30uA,100uA,300uA,1mA,10mV,1mV) (if omitted: default from sensor type)
|
||||||
!range=0 ! range in sensor units (if rang=0: determine range from table, if omitted: default from sensor type)
|
!range=0 ! range in sensor units (if rang=0: determine range from table, if omitted: default from sensor type)
|
||||||
curv ! curve (sensor,temp/K) follows, must be ordered, but can be increasing or decreasing
|
curv ! curve (sensor,temp/K) follows, must be ordered, but can be increasing or decreasing
|
||||||
|
27000 1.1
|
||||||
15213.49 1.407016
|
15213.49 1.407016
|
||||||
13018.43 1.5035
|
13018.43 1.5035
|
||||||
11293.78 1.601262
|
11293.78 1.601262
|
||||||
@ -50,4 +51,5 @@ curv ! curve (sensor,temp/K) follows, must be ordered, but can be inc
|
|||||||
57.69399 273.2733
|
57.69399 273.2733
|
||||||
57.65295 273.5096
|
57.65295 273.5096
|
||||||
53.45707 300.0828
|
53.45707 300.0828
|
||||||
|
49 335
|
||||||
|
|
||||||
|
@ -1,92 +1,91 @@
|
|||||||
sens=x22644
|
sens=x22644k
|
||||||
unit=Ohm ! sensor format (mV,V,Ohm), log formats are choosen automatically
|
unit=Ohm ! sensor format (mV,V,Ohm), log formats are choosen automatically
|
||||||
!tlim=325 ! setpoint limit (automatic if omitted)
|
!tlim=325 ! setpoint limit (automatic if omitted)
|
||||||
type=cernox ! sensor type (Special,Si,GaAlAs,Pt250,Pt500,Pt2500,RhFe,C,Cernox,RuOx,Ge) (special if omitted)
|
type=cernox ! sensor type (Special,Si,GaAlAs,Pt250,Pt500,Pt2500,RhFe,C,Cernox,RuOx,Ge) (special if omitted)
|
||||||
!excit=300uA ! (off,30nA,100nA,300nA,1uA,3uA,10uA,30uA,100uA,300uA,1mA,10mV,1mV) (if omitted: default from sensor type)
|
!excit=300uA ! (off,30nA,100nA,300nA,1uA,3uA,10uA,30uA,100uA,300uA,1mA,10mV,1mV) (if omitted: default from sensor type)
|
||||||
!range=0 ! range in sensor units (if rang=0: determine range from table, if omitted: default from sensor type)
|
!range=0 ! range in sensor units (if rang=0: determine range from table, if omitted: default from sensor type)
|
||||||
curv ! curve (sensor,temp/K) follows, must be ordered, but can be increasing or decreasing
|
curv ! curve (sensor,temp/K) follows, must be ordered, but can be increasing or decreasing
|
||||||
16007.79518 1.200721786
|
15490.92284 1.200721786
|
||||||
13255.8808 1.298891069
|
12954.34936 1.298891069
|
||||||
11205.15286 1.39943304
|
11076.20151 1.39943304
|
||||||
8443.928222 1.599937175
|
8520.068684 1.599937175
|
||||||
6702.327773 1.800442288
|
6861.930851 1.800442288
|
||||||
5534.122213 2.00019607
|
5720.174664 2.00019607
|
||||||
4704.584196 2.199969718
|
4893.450319 2.199969718
|
||||||
4084.913232 2.400603038
|
4267.228514 2.400603038
|
||||||
3610.312949 2.600633851
|
3782.811454 2.600633851
|
||||||
3230.256645 2.802896079
|
3392.064692 2.802896079
|
||||||
2936.389321 2.998094443
|
3088.314838 2.998094443
|
||||||
2686.653219 3.198715722
|
2829.143213 3.198715722
|
||||||
2478.1989 3.399484728
|
2612.128987 3.399484728
|
||||||
2300.553298 3.602485184
|
2426.727308 3.602485184
|
||||||
2151.36877 3.800490872
|
2270.720446 3.800490872
|
||||||
2022.540635 3.998439887
|
2135.786463 3.998439887
|
||||||
1908.79865 4.197156641
|
2016.497011 4.197156641
|
||||||
1709.313903 4.621681363
|
1806.950796 4.621681363
|
||||||
1557.368026 5.030523733
|
1647.078313 5.030523733
|
||||||
1406.421873 5.540281439
|
1488.052584 5.540281439
|
||||||
1243.706071 6.25898771
|
1316.419467 6.25898771
|
||||||
1105.603956 7.076289652
|
1170.596974 7.076289652
|
||||||
977.4489794 8.098257051
|
1035.166504 8.098257051
|
||||||
880.4428612 9.126725378
|
932.58957 9.126725378
|
||||||
804.8003471 10.14989046
|
852.5687804 10.14989046
|
||||||
743.7218062 11.1730348
|
787.9348812 11.1730348
|
||||||
693.7309884 12.18383727
|
735.021783 12.18383727
|
||||||
651.4548886 13.19332605
|
690.2662946 13.19332605
|
||||||
615.7657565 14.18572326
|
652.4786656 14.18572326
|
||||||
584.5828244 15.17662749
|
619.4583612 15.17662749
|
||||||
557.2403338 16.16073706
|
590.5019897 16.16073706
|
||||||
532.9508371 17.14074973
|
564.7767246 17.14074973
|
||||||
511.1072589 18.11815111
|
541.6403519 18.11815111
|
||||||
491.3416812 19.09726974
|
520.7037071 19.09726974
|
||||||
473.3439969 20.07459081
|
501.6387006 20.07459081
|
||||||
455.2101691 21.15478955
|
482.4285499 21.15478955
|
||||||
431.4309748 22.73367042
|
457.2366045 22.73367042
|
||||||
410.1806618 24.3324661
|
434.7225473 24.3324661
|
||||||
390.407091 26.00456745
|
413.7720569 26.00456745
|
||||||
373.2423216 27.6242651
|
395.5849007 27.6242651
|
||||||
357.4650865 29.26937996
|
378.8673435 29.26937996
|
||||||
341.3901179 31.1270676
|
361.8337601 31.1270676
|
||||||
324.8832171 33.25128091
|
344.3419371 33.25128091
|
||||||
304.5451078 36.23921994
|
322.7895815 36.23921994
|
||||||
287.1316191 39.19190152
|
304.3358536 39.19190152
|
||||||
271.3027429 42.22413357
|
287.5609455 42.22413357
|
||||||
257.4885798 45.23979471
|
272.9208287 45.23979471
|
||||||
245.297921 48.23143543
|
260.0010408 48.23143543
|
||||||
237.8548894 50.22289595
|
252.1127299 50.22289595
|
||||||
221.3051609 55.19735291
|
234.5726345 55.19735291
|
||||||
207.0981627 60.20938313
|
219.515172 60.20938313
|
||||||
194.8252865 65.20351886
|
206.5074101 65.20351886
|
||||||
184.1071589 70.19674071
|
195.1473491 70.19674071
|
||||||
174.6169591 75.18080073
|
185.0886532 75.18080073
|
||||||
166.126924 80.17225392
|
176.0899553 80.17225392
|
||||||
158.5229665 85.16939558
|
168.0303614 85.16939558
|
||||||
151.626774 90.16147891
|
160.7208948 90.16147891
|
||||||
145.4056367 95.15586553
|
154.1269009 95.15586553
|
||||||
139.6765896 100.1540934
|
148.0544602 100.1540934
|
||||||
129.6293513 110.1362537
|
137.4049343 110.1362537
|
||||||
120.9858687 120.1370202
|
128.24325 120.1370202
|
||||||
113.5180198 130.13073
|
120.3276383 130.13073
|
||||||
106.9678656 140.1252385
|
113.3847137 140.1252385
|
||||||
101.1878636 150.1234354
|
107.2580994 150.1234354
|
||||||
96.03408894 160.1165839
|
101.7952486 160.1165839
|
||||||
91.42205476 170.1168663
|
96.90661397 170.1168663
|
||||||
87.26057763 180.1290119
|
92.49554787 180.1290119
|
||||||
83.5052218 190.1274068
|
88.51495284 190.1274068
|
||||||
80.09071577 200.1278156
|
84.89564499 200.1278156
|
||||||
76.96422711 210.1345051
|
81.58162485 210.1345051
|
||||||
74.10488591 220.1302898
|
78.55077213 220.1302898
|
||||||
71.49685195 230.1260865
|
75.7862976 230.1260865
|
||||||
69.07286887 240.1285934
|
73.21691146 240.1285934
|
||||||
66.84323633 250.1146862
|
70.85353186 250.1146862
|
||||||
64.77194872 260.1210378
|
68.6579939 260.1210378
|
||||||
62.85425529 270.1122296
|
66.6252623 270.1122296
|
||||||
61.06392683 280.1125128
|
64.72753475 280.1125128
|
||||||
59.42108067 289.9881766
|
62.9861357 289.9881766
|
||||||
57.86899725 299.992933
|
61.34094329 299.992933
|
||||||
56.40163103 310.0918565
|
59.78554947 310.0918565
|
||||||
55.70314445 315.0849843
|
59.04516028 315.0849843
|
||||||
55.03104128 320.106081
|
58.33273711 320.106081
|
||||||
54.25379641 326.0894698
|
57.5088645 326.0894698
|
||||||
53.76781249 329.9611435
|
56.9937258 329.9611435
|
||||||
|
|
||||||
|
@ -99,7 +99,8 @@ void Usage(int cmds_only) {
|
|||||||
" -a or a ask always for username/password, forget passwords\n"
|
" -a or a ask always for username/password, forget passwords\n"
|
||||||
" -c or c use background color instead of # and |\n"
|
" -c or c use background color instead of # and |\n"
|
||||||
" -s or s simulation mode (on some instruments)\n"
|
" -s or s simulation mode (on some instruments)\n"
|
||||||
" <host> connect to a server on a different host\n"
|
" <instr> connect to the server for instr\n"
|
||||||
|
" -h <host> connect to a server on a different host\n"
|
||||||
" -p <port> connect to a server on a different port\n"
|
" -p <port> connect to a server on a different port\n"
|
||||||
" -n do only a minimal login (no check of instrument)\n"
|
" -n do only a minimal login (no check of instrument)\n"
|
||||||
" no option login with default privilege\n"
|
" no option login with default privilege\n"
|
||||||
|
41
tecs/tecs.c
41
tecs/tecs.c
@ -58,18 +58,19 @@ typedef struct {
|
|||||||
char typ;
|
char typ;
|
||||||
} SensorT;
|
} SensorT;
|
||||||
|
|
||||||
enum Sensors { A, B, C, D, A1, A2, A3, A4, N_SENSORS };
|
enum Sensors { A, B, C, D, A0, A1, A2, A3, A4, N_SENSORS };
|
||||||
|
|
||||||
static SensorT
|
static SensorT
|
||||||
sensA={"A"},
|
sensA={"A"},
|
||||||
sensB={"B"},
|
sensB={"B"},
|
||||||
sensC={"C"},
|
sensC={"C"},
|
||||||
sensD={"D"},
|
sensD={"D"},
|
||||||
|
sensA0={"A0", DATA_UNDEF},
|
||||||
sensA1={"A1", DATA_UNDEF},
|
sensA1={"A1", DATA_UNDEF},
|
||||||
sensA2={"A2", DATA_UNDEF},
|
sensA2={"A2", DATA_UNDEF},
|
||||||
sensA3={"A3", DATA_UNDEF},
|
sensA3={"A3", DATA_UNDEF},
|
||||||
sensA4={"A4", DATA_UNDEF},
|
sensA4={"A4", DATA_UNDEF},
|
||||||
*sensors[N_SENSORS]={&sensA, &sensB, &sensC, &sensD, &sensA1, &sensA2, &sensA3, &sensA4 },
|
*sensors[N_SENSORS]={&sensA, &sensB, &sensC, &sensD, &sensA0, &sensA1, &sensA2, &sensA3, &sensA4 },
|
||||||
*ctlSens=NULL, /* control sensor */
|
*ctlSens=NULL, /* control sensor */
|
||||||
*heliumSens=NULL,
|
*heliumSens=NULL,
|
||||||
*auxSens=NULL,
|
*auxSens=NULL,
|
||||||
@ -672,15 +673,15 @@ again:
|
|||||||
}
|
}
|
||||||
if (sensA.type[0]>'0' && sensA.type[0]<='4') {
|
if (sensA.type[0]>'0' && sensA.type[0]<='4') {
|
||||||
nScan=sensA.type[0]-'0';
|
nScan=sensA.type[0]-'0';
|
||||||
for (i=4;i<4+nScan;i++) {
|
for (i=5;i<5+nScan;i++) {
|
||||||
s=sensors[i];
|
s=sensors[i];
|
||||||
s->present=-1;
|
s->present=-1;
|
||||||
s->band=10;
|
s->band=10;
|
||||||
if (s->scale==0.0) s->scale=1.0;
|
if (s->scale==0.0) s->scale=1.0;
|
||||||
s->typ='1'+i-4;
|
s->typ='1'+i-5;
|
||||||
}
|
}
|
||||||
sensA.type[0]='\0';
|
sensA.type[0]='\0';
|
||||||
for (i=4+nScan; i<N_SENSORS; i++) {
|
for (i=5+nScan; i<N_SENSORS; i++) {
|
||||||
sensors[i]->t=DATA_UNDEF;
|
sensors[i]->t=DATA_UNDEF;
|
||||||
sensors[i]->present=0;
|
sensors[i]->present=0;
|
||||||
}
|
}
|
||||||
@ -879,7 +880,7 @@ void LogMinMax(int new) {
|
|||||||
} else if (nScan==0) {
|
} else if (nScan==0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (i=4; i<4+nScan; i++) {
|
for (i=5; i<5+nScan; i++) {
|
||||||
s1=sensors[i];
|
s1=sensors[i];
|
||||||
if (s1->t!=DATA_UNDEF) {
|
if (s1->t!=DATA_UNDEF) {
|
||||||
sprintf(buf1, " T%c %.5g", s1->ch[1], s1->t);
|
sprintf(buf1, " T%c %.5g", s1->ch[1], s1->t);
|
||||||
@ -1009,7 +1010,7 @@ int ReadTemp(void) {
|
|||||||
if (nScan>0) {
|
if (nScan>0) {
|
||||||
while (1) { /* read until a non-selected channel found */
|
while (1) { /* read until a non-selected channel found */
|
||||||
if (iScan>=nScan) iScan=0;
|
if (iScan>=nScan) iScan=0;
|
||||||
s=sensors[iScan+4];
|
s=sensors[iScan+5];
|
||||||
if (s->present<1) break;
|
if (s->present<1) break;
|
||||||
str_copy(chan, s->ch);
|
str_copy(chan, s->ch);
|
||||||
ERR_P(LscCmd(ser, "KRDG?[chan]>fbuf;DIOST?>,out1"));
|
ERR_P(LscCmd(ser, "KRDG?[chan]>fbuf;DIOST?>,out1"));
|
||||||
@ -1615,7 +1616,7 @@ int ConfigAlarms(float genLimit) {
|
|||||||
ERR_P(LscCmd(ser, "RELAY 1:1;BEEP:0"));
|
ERR_P(LscCmd(ser, "RELAY 1:1;BEEP:0"));
|
||||||
relay=0;
|
relay=0;
|
||||||
k=0;
|
k=0;
|
||||||
for (i=0;i<4+nScan;i++) {
|
for (i=0;i<5+nScan;i++) {
|
||||||
s=sensors[i];
|
s=sensors[i];
|
||||||
str_copy(buf1, s->ch);
|
str_copy(buf1, s->ch);
|
||||||
if (s->customAlarm==0 && genLimit>0.0) s->alarm=genLimit;
|
if (s->customAlarm==0 && genLimit>0.0) s->alarm=genLimit;
|
||||||
@ -1675,7 +1676,7 @@ void AssignTypes(void) {
|
|||||||
auxSens=NULL;
|
auxSens=NULL;
|
||||||
testSens=NULL;
|
testSens=NULL;
|
||||||
test2Sens=NULL;
|
test2Sens=NULL;
|
||||||
for (i=0; i<4+nScan; i++) {
|
for (i=0; i<5+nScan; i++) {
|
||||||
s=sensors[i];
|
s=sensors[i];
|
||||||
if (s->present==1) {
|
if (s->present==1) {
|
||||||
typ=s->typ;
|
typ=s->typ;
|
||||||
@ -1736,7 +1737,7 @@ int Settings(void) {
|
|||||||
} else {
|
} else {
|
||||||
ERR_P(LscCmd(ser, "PID [loop],[prop],[integ],[deriv]"));
|
ERR_P(LscCmd(ser, "PID [loop],[prop],[integ],[deriv]"));
|
||||||
}
|
}
|
||||||
for (i=0; i<4+nScan; i++) {
|
for (i=0; i<5+nScan; i++) {
|
||||||
s=sensors[i];
|
s=sensors[i];
|
||||||
if (i<4) {
|
if (i<4) {
|
||||||
plug=plugs[i/2];
|
plug=plugs[i/2];
|
||||||
@ -1796,7 +1797,7 @@ int Settings(void) {
|
|||||||
DisplayFmt(auxSens, fields, &k);
|
DisplayFmt(auxSens, fields, &k);
|
||||||
if (nScan>0) {
|
if (nScan>0) {
|
||||||
i=0;
|
i=0;
|
||||||
while (i<nScan && DisplayFmt(sensors[i+4], fields, &k)) {
|
while (i<nScan && DisplayFmt(sensors[i+5], fields, &k)) {
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2491,6 +2492,19 @@ int PeriodicTask(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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) {
|
if (out1==30 && out2==29) {
|
||||||
/* code conversion */
|
/* code conversion */
|
||||||
plug0.code1=3*decod[cod2 % 8] ^ 2*decod[cod1 % 8]; /* ^ is exclusive OR */
|
plug0.code1=3*decod[cod2 % 8] ^ 2*decod[cod1 % 8]; /* ^ is exclusive OR */
|
||||||
@ -3105,7 +3119,7 @@ int StatusHdl(int mode, void *base, int fd) {
|
|||||||
if (test2Sens!=NULL) {
|
if (test2Sens!=NULL) {
|
||||||
ERR_I(ShowSensor(&buf, test2Sens, "T", "K", 0));
|
ERR_I(ShowSensor(&buf, test2Sens, "T", "K", 0));
|
||||||
}
|
}
|
||||||
for (i=4; i<4+nScan; i++) {
|
for (i=5; i<5+nScan; i++) {
|
||||||
ERR_I(ShowSensor(&buf, sensors[i], "T", "K", 0));
|
ERR_I(ShowSensor(&buf, sensors[i], "T", "K", 0));
|
||||||
}
|
}
|
||||||
if (auxSens!=NULL) {
|
if (auxSens!=NULL) {
|
||||||
@ -3298,6 +3312,7 @@ int main(int argc, char *argv[]) {
|
|||||||
CocDefStruct(sensB, SensorT);
|
CocDefStruct(sensB, SensorT);
|
||||||
CocDefStruct(sensC, SensorT);
|
CocDefStruct(sensC, SensorT);
|
||||||
CocDefStruct(sensD, SensorT);
|
CocDefStruct(sensD, SensorT);
|
||||||
|
CocDefStruct(sensA0, SensorT);
|
||||||
CocDefStruct(sensA1, SensorT);
|
CocDefStruct(sensA1, SensorT);
|
||||||
CocDefStruct(sensA2, SensorT);
|
CocDefStruct(sensA2, SensorT);
|
||||||
CocDefStruct(sensA3, SensorT);
|
CocDefStruct(sensA3, SensorT);
|
||||||
@ -3438,6 +3453,7 @@ int main(int argc, char *argv[]) {
|
|||||||
CocAlias(Tb,sensB.t);
|
CocAlias(Tb,sensB.t);
|
||||||
CocAlias(Tc,sensC.t);
|
CocAlias(Tc,sensC.t);
|
||||||
CocAlias(Td,sensD.t);
|
CocAlias(Td,sensD.t);
|
||||||
|
CocAlias(T0,sensA0.t);
|
||||||
CocAlias(T1,sensA1.t);
|
CocAlias(T1,sensA1.t);
|
||||||
CocAlias(T2,sensA2.t);
|
CocAlias(T2,sensA2.t);
|
||||||
CocAlias(T3,sensA3.t);
|
CocAlias(T3,sensA3.t);
|
||||||
@ -3561,6 +3577,7 @@ int main(int argc, char *argv[]) {
|
|||||||
ERR_P(DataCreateSet(NULL, "Te", &te, logPeriod, LOGLIFETIME, tim));
|
ERR_P(DataCreateSet(NULL, "Te", &te, logPeriod, LOGLIFETIME, tim));
|
||||||
ERR_P(DataCreateSet(NULL, "Tk", &tk, 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, "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, "T1", &sensA1.t, logPeriod, LOGLIFETIME, tim));
|
||||||
ERR_P(DataCreateSet(NULL, "T2", &sensA2.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, "T3", &sensA3.t, logPeriod, LOGLIFETIME, tim));
|
||||||
|
Reference in New Issue
Block a user