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