- various improvements
This commit is contained in:
@ -91,6 +91,7 @@ static int Euro2kMakePar(void *object, void *userarg, int argc, char *argv[])
|
||||
*last = par;
|
||||
par->unit = NULL;
|
||||
par->fmt = NULL;
|
||||
par->par = PAR_NAN;
|
||||
} else {
|
||||
if (par->unit) {
|
||||
free(par->unit); par->unit=NULL;
|
||||
|
39
ilmdriv.c
39
ilmdriv.c
@ -27,14 +27,18 @@ Markus Zolliker, April 2005
|
||||
#include "fsm.h"
|
||||
#include "initializer.h"
|
||||
|
||||
/*
|
||||
typedef enum { ALWAYSNEW, NEW, MEASURING, NOTYETREAD, OLD } ReadState;
|
||||
*/
|
||||
typedef enum { UNUSED, N2, PULSED_HE, CONTINOUS_HE, CHANNEL_ERROR = 9 } Usage;
|
||||
|
||||
typedef struct {
|
||||
EaseBase b;
|
||||
float lev[3];
|
||||
Usage usage[3];
|
||||
/*
|
||||
ReadState readState[3];
|
||||
*/
|
||||
} Ilm;
|
||||
|
||||
static ParClass ilmClass = { "ILM", sizeof(Ilm) };
|
||||
@ -49,23 +53,21 @@ static void IlmParDef(void *object) {
|
||||
if (drv->usage[0]) {
|
||||
ParFmt("%.1f"); ParTail(tails[drv->usage[0]]);
|
||||
}
|
||||
if (drv->readState[0] == NEW) {
|
||||
ParLogReady(PAR_NOW_READY);
|
||||
}
|
||||
/* if (drv->readState[0] == NEW) ParLogReady(PAR_NOW_READY); */
|
||||
ParFloat(&drv->lev[0], PAR_NAN);
|
||||
|
||||
ParName("lev2");
|
||||
if (drv->usage[1]) {
|
||||
ParFmt("%.1f"); ParTail(tails[drv->usage[1]]);
|
||||
};
|
||||
if (drv->readState[1] == NEW) ParLogReady(PAR_NOW_READY);
|
||||
/* if (drv->readState[1] == NEW) ParLogReady(PAR_NOW_READY); */
|
||||
ParFloat(&drv->lev[1], PAR_NAN);
|
||||
|
||||
ParName("lev3");
|
||||
if (drv->usage[2]) {
|
||||
ParFmt("%.1f"); ParTail(tails[drv->usage[2]]);
|
||||
}
|
||||
if (drv->readState[2] == NEW) ParLogReady(PAR_NOW_READY);
|
||||
/* if (drv->readState[2] == NEW) ParLogReady(PAR_NOW_READY); */
|
||||
ParFloat(&drv->lev[2], PAR_NAN);
|
||||
EaseBasePar(drv);
|
||||
EaseSendPar(drv);
|
||||
@ -93,14 +95,18 @@ static void IlmStatus(Ilm *drv) {
|
||||
}
|
||||
drv->usage[i] = ans[i+1] - '0';
|
||||
if (drv->usage[i] == PULSED_HE) {
|
||||
/*
|
||||
sscanf(ans+6+2*i, "%1x", &status);
|
||||
if (status & 1) { /* measuring */
|
||||
if (status & 1) { // measuring
|
||||
drv->readState[i] = MEASURING;
|
||||
} else if (drv->readState[i] == MEASURING) { /* new value */
|
||||
} else if (drv->readState[i] == MEASURING) { // new value
|
||||
drv->readState[i] = NOTYETREAD;
|
||||
}
|
||||
*/
|
||||
} else {
|
||||
/*
|
||||
drv->readState[i] = ALWAYSNEW;
|
||||
*/
|
||||
}
|
||||
}
|
||||
return;
|
||||
@ -117,37 +123,46 @@ static long IlmRead(long pc, void *object) {
|
||||
IlmStatus(drv); /* check for errors */
|
||||
EaseWrite(eab, "R1"); /* read sensor 1 */
|
||||
return __LINE__; case __LINE__: /**********************************/
|
||||
if (drv->readState[0] != MEASURING) {
|
||||
drv->lev[0] = OxiGet(eab, 1, NULL, drv->lev[0]);
|
||||
}
|
||||
/* if (drv->readState[0] != MEASURING) */
|
||||
|
||||
drv->lev[0] = OxiGet(eab, 1, NULL, drv->lev[0]);
|
||||
|
||||
/*
|
||||
if (drv->readState[0] == NOTYETREAD) {
|
||||
drv->readState[0] = NEW;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
if (drv->usage[1] == 0) goto skip2;
|
||||
EaseWrite(eab, "R2"); /* read sensor 2 */
|
||||
return __LINE__; case __LINE__: /**********************************/
|
||||
drv->lev[1] = OxiGet(eab, 1, NULL, drv->lev[1]);
|
||||
/*
|
||||
if (drv->readState[1] == NOTYETREAD) {
|
||||
drv->readState[1] = NEW;
|
||||
}
|
||||
*/
|
||||
skip2:
|
||||
|
||||
if (drv->usage[2] == 0) goto skip3;
|
||||
EaseWrite(eab, "R3"); /* read sensor 3 */
|
||||
return __LINE__; case __LINE__: /**********************************/
|
||||
drv->lev[2] = OxiGet(eab, 1, NULL, drv->lev[2]);
|
||||
/*
|
||||
if (drv->readState[2] == NOTYETREAD) {
|
||||
drv->readState[2] = NEW;
|
||||
}
|
||||
*/
|
||||
skip3:
|
||||
|
||||
|
||||
if (ParLog(drv) >= 0) { /* logging was done */
|
||||
/*
|
||||
for (i=0; i<3; i++) {
|
||||
if (drv->readState[i] == NEW) {
|
||||
drv->readState[i] = OLD;
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
return 0; } /* FSM END ********************************************/
|
||||
|
||||
|
16
pardef.c
16
pardef.c
@ -432,7 +432,7 @@ static int ParExecute(SConnection *con, SicsInterp *sics, void *object, int argc
|
||||
ctx->argc = argc - 3;
|
||||
ctx->argv = argv + 3;
|
||||
ctx->doit = toupper(argv[1][0]) != 'U';
|
||||
ctx->exact = 1;
|
||||
ctx->exact = 0;
|
||||
ParDo(con, o, PAR_LOGSWITCH, argv[2]);
|
||||
}
|
||||
} else if ((0 == strcasecmp(argv[1], "save") || 0 == strcasecmp(argv[1], "unsave"))) {
|
||||
@ -603,7 +603,7 @@ void ParFind(void) {
|
||||
long ParText2Int(char *text) {
|
||||
long num = 0;
|
||||
|
||||
if (strcasecmp(text, "undefined") == 0) {
|
||||
if (strcasecmp(text, "undefined") == 0 || text[0] == '\0') {
|
||||
return PAR_LNAN;
|
||||
}
|
||||
if (ctx->enumList) {
|
||||
@ -622,7 +622,7 @@ char *ParInt2Text(int num) {
|
||||
static char buf[12];
|
||||
|
||||
if (num == PAR_LNAN) {
|
||||
return "undefined";
|
||||
return ""; /* undefined */
|
||||
}
|
||||
if (! ctx->enumList) return NULL;
|
||||
for (i = 0; i <= num; i++) {
|
||||
@ -686,7 +686,7 @@ void ParName(char *name) {
|
||||
ctx->access = -1;
|
||||
ctx->doit = -1;
|
||||
ctx->logName = ""; /* log by default */
|
||||
ctx->exact = 1; /* exact by default */
|
||||
ctx->exact = 0; /* not exact by default */
|
||||
return;
|
||||
case PAR_GET:
|
||||
if (0 != strcasecmp(name, ctx->thisPar)) {
|
||||
@ -926,7 +926,7 @@ void ParOut(char *buf) {
|
||||
} else {
|
||||
p == NULL;
|
||||
}
|
||||
if (p == NULL) p = "undefined";
|
||||
if (p == NULL) p = ""; /* undefined */
|
||||
ParPrintf(NULL, eValue, "%s", p);
|
||||
break;
|
||||
}
|
||||
@ -1063,7 +1063,7 @@ void ParFloat(float *value, float defValue) {
|
||||
case FMT_OP:
|
||||
if (*value == PAR_NAN) {
|
||||
ctx->fmt = NULL;
|
||||
ParOut("undefined");
|
||||
ParOut(""); /* undefined */
|
||||
} else {
|
||||
if (ctx->fmt == NULL) {
|
||||
ctx->fmt = "%#.5g";
|
||||
@ -1110,7 +1110,7 @@ void ParInt(int *value, int defValue) {
|
||||
/* fall through */
|
||||
case FMT_OP:
|
||||
if (*value == PAR_LNAN) {
|
||||
ParOut("undefined");
|
||||
ParOut(""); /* undefined */
|
||||
} else {
|
||||
snprintf(buf, sizeof buf, "%d", *value);
|
||||
ParOut(buf);
|
||||
@ -1145,6 +1145,7 @@ void ParStr(char **value, char *defValue) {
|
||||
ParOut(*value);
|
||||
break;
|
||||
case INIT_OP:
|
||||
ctx->exact = 1;
|
||||
if (defValue != NULL) {
|
||||
*value = strdup(defValue);
|
||||
}
|
||||
@ -1170,6 +1171,7 @@ void ParFixedStr(char *value, int maxsize, char *defValue) {
|
||||
ParOut(value);
|
||||
break;
|
||||
case INIT_OP:
|
||||
ctx->exact = 1;
|
||||
if (defValue != NULL) {
|
||||
snprintf(value, maxsize, "%s", defValue);
|
||||
}
|
||||
|
16
tecs/tecs.c
16
tecs/tecs.c
@ -1399,8 +1399,8 @@ void CalcMaxPower(void) {
|
||||
maxCurrent = 1; /* must be 1 for Power2Percent */
|
||||
h=Power2Percent(maxPowerFlt)/100;
|
||||
p=h*h*resist; /* power before amplifier */
|
||||
plim=2500/resist;
|
||||
/* power limited by 50 V output. U*U/R=2500/R */
|
||||
plim=3025/resist;
|
||||
/* power limited by 55 V output. U*U/R=55*55/R */
|
||||
if (p>plim) p=plim;
|
||||
pa=resist*4; /* max. maxPower R*I*I (I=2 A) */
|
||||
low.p = 0;
|
||||
@ -1625,7 +1625,7 @@ int ConfigAlarms(float genLimit) {
|
||||
ERR_P(LscCmd(ser, "ALARM [buf1]:1,1,[r1],0,1,1"));
|
||||
alarmList[k]=s->ch;
|
||||
k++;
|
||||
} else {
|
||||
} else if (i != 4) { /* do not switch off A0 alarm */
|
||||
ERR_P(LscCmd(ser, "ALARM [buf1]:0")); /* switch off unused alarms */
|
||||
}
|
||||
}
|
||||
@ -2630,12 +2630,18 @@ int DeviceHdl(int mode, void *base, int fd) {
|
||||
}
|
||||
|
||||
int PidHdl(int mode, void *base, int fd) {
|
||||
char oldpid[128];
|
||||
|
||||
if (mode==COC_WR) {
|
||||
return COC_DWR;
|
||||
} else if (mode==COC_DWR) {
|
||||
ERR_P(LscCmd(ser,"PID [loop]:[prop],[integ],[deriv]"));
|
||||
assert(sizeof oldpid == sizeof pid);
|
||||
strcpy(oldpid, pid);
|
||||
PidSumHdl(COC_RD, base, fd);
|
||||
logfileOut(LOG_MAIN, "pid: %s\n", pid);
|
||||
if (strcmp(oldpid, pid) != 0) {
|
||||
ERR_P(LscCmd(ser,"PID [loop]:[prop],[integ],[deriv]"));
|
||||
logfileOut(LOG_MAIN, "pid: %s\n", pid);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
OnError: return -1;
|
||||
|
@ -1,2 +1,2 @@
|
||||
#define TECS_LOG 1
|
||||
#include "../logger.c"
|
||||
#include "../../logger.c"
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include "sys_select.h"
|
||||
|
||||
#define ESC_TMO 1000
|
||||
#define REF_TMO 100
|
||||
#define REF_TMO 50
|
||||
#define HISTORY_LINES 256
|
||||
|
||||
#define L_ARROW 0200
|
||||
|
Reference in New Issue
Block a user