- various enhancements in drivers

This commit is contained in:
zolliker
2009-02-19 13:28:52 +00:00
parent a0e7c9782b
commit f6e5826e19
6 changed files with 193 additions and 47 deletions

View File

@ -36,6 +36,8 @@ Markus Zolliker, Nov 2006
typedef struct {
EaseDriv d;
char *unit;
float kelvin;
float t;
float t2;
float set;
@ -147,19 +149,26 @@ static void HaakeParDef(void *object)
ParName("");
ParFmt("%.2f");
ParTail("K");
ParTail(drv->unit);
ParFloat(&drv->t, PAR_NAN);
ParName("unit");
if (drv->unit == NULL) {
ParAccess(usUser);
}
ParLogAs(NULL);
ParStr(&drv->unit, NULL);
ParName("t2");
if (drv->with2sensors) {
if (drv->with2sensors > 0) {
ParFmt("%.2f");
ParTail("K");
ParTail(drv->unit);
}
ParFloat(&drv->t2, PAR_NAN);
ParName("set");
ParFmt("%.2f");
ParTail("K");
ParTail(drv->unit);
ParFloat(&drv->set, PAR_NAN);
ParName("running");
@ -200,7 +209,7 @@ static void HaakeParDef(void *object)
EaseBasePar(drv);
EaseSendPar(drv);
EaseDrivPar(drv, "%.2f", "K");
EaseDrivPar(drv, "%.2f", drv->unit);
ParStdDef();
EaseMsgPar(drv);
}
@ -236,13 +245,13 @@ static long HaakeRead(long pc, void *object)
EaseWrite(eab, "F1");
return __LINE__;
case __LINE__: /**********************************/
drv->t = atof(eab->ans) + 273.15;
if (!drv->with2sensors)
drv->t = atof(eab->ans) + drv->kelvin;
if (drv->with2sensors < 1)
goto nof2;
EaseWrite(eab, "F2");
return __LINE__;
case __LINE__: /**********************************/
drv->t2 = atof(eab->ans) + 273.15;
drv->t2 = atof(eab->ans) + drv->kelvin;
if (drv->t2 < -222) {
drv->t2 = PAR_NAN;
}
@ -250,7 +259,7 @@ static long HaakeRead(long pc, void *object)
EaseWrite(eab, "S");
return __LINE__;
case __LINE__: /**********************************/
drv->set = atof(eab->ans) + 273.15;
drv->set = atof(eab->ans) + drv->kelvin;
skipGetSet:
ParLog(drv);
@ -263,6 +272,7 @@ static long HaakeStart(long pc, void *object)
{
Haake *drv = ParCast(&haakeClass, object);
EaseBase *eab = object;
char unitcmd[8] = "W TE K";
switch (pc) {
default: /* FSM BEGIN ****************************** */
@ -276,8 +286,18 @@ static long HaakeStart(long pc, void *object)
EaseStop(eab);
goto quit;
}
ParPrintf(drv, eLog, "connected to haake thermostat %s", eab->version);
EaseWrite(eab, "W TE K");
ParPrintf(drv, eLog, "connected to haake thermostat %s",
eab->version);
if (drv->unit == NULL) {
drv->unit = strdup("K");
}
if (*drv->unit == 'C') {
EaseWrite(eab, "W TE C");
drv->kelvin = 0;
} else {
EaseWrite(eab, "W TE K");
drv->kelvin = 273.15;
}
return __LINE__;
case __LINE__: /**********************************/
FsmCall(HaakeRead);
@ -302,7 +322,8 @@ static long HaakeSet(long pc, void *object)
upd = EaseNextUpdate(drv);
switch (upd) {
case EASE_RUN:
snprintf(cmd, sizeof cmd, "w sw %.5g", drv->d.targetValue - 273.17);
snprintf(cmd, sizeof cmd, "w sw %.5g",
drv->d.targetValue - drv->kelvin);
break;
case HAAKE_ON:
snprintf(cmd, sizeof cmd, "w ts%d", drv->running);