M.Z. 20.08.2003
This commit is contained in:
105
tecs/tecs.c
105
tecs/tecs.c
@@ -115,6 +115,7 @@ static float
|
||||
fbuf, /* float buffer */
|
||||
r1, r2, /* temporary values */
|
||||
still=0,
|
||||
mout,
|
||||
tInt=0; /* integral time (sec.) for setpoint shift */
|
||||
|
||||
static int
|
||||
@@ -865,7 +866,8 @@ int ReadTemp(void) {
|
||||
s->t2 = s->t1;
|
||||
s->stat2 = s->stat1;
|
||||
}
|
||||
if (s->t1 == 63.0 || s->t2 == 63.0 || s->t0 == 63.0) {
|
||||
if (set != 63.0 &&
|
||||
(s->t1 == 63.0 || s->t2 == 63.0 || s->t0 == 63.0)) {
|
||||
/* probably noisy values */
|
||||
logfileOut(LOG_MAIN, "magic %s: %g %g %g\n", s->ch, s->t1, s->t2, s->t0);
|
||||
}
|
||||
@@ -1098,7 +1100,7 @@ void CalcMaxPower(void) {
|
||||
float pa, pr, pw, quo, p, pl, plim;
|
||||
|
||||
iAmp=1; iRange=0;
|
||||
if (scalPower==0) scalPower=maxPower;
|
||||
/* if (scalPower==0) */ scalPower=maxPower;
|
||||
if (maxPower>0) {
|
||||
p=scalPower/powFact;
|
||||
plim=2500/resist;
|
||||
@@ -1110,9 +1112,13 @@ void CalcMaxPower(void) {
|
||||
pr=pa;
|
||||
for (j=5; j>0; j--) {
|
||||
if (p<pr) {
|
||||
if (p/pr>quo) { quo=p/pr; pw=pr; iAmp=i; iRange=j; }
|
||||
if (p/pr>quo) {
|
||||
quo=p/pr; pw=pr; iAmp=i; iRange=j;
|
||||
}
|
||||
} else if (p<plim || pw==0) {
|
||||
if (pr/p>quo) { quo=pr/p; pw=pr; iAmp=i; iRange=j; }
|
||||
if (pr/p>quo) {
|
||||
quo=pr/p; pw=pr; iAmp=i; iRange=j;
|
||||
}
|
||||
}
|
||||
pr=pr/10;
|
||||
}
|
||||
@@ -1188,6 +1194,7 @@ int SetMaxPower(void) {
|
||||
}
|
||||
logfileOut(LOG_MAIN, "maxPower changed from %g to %g\n", pold, maxPower);
|
||||
ERR_P(LscCmd(ser, "CDISP 1:[loop],[resist],1;MOUT [loop]:0;CMODE [loop]:1"));
|
||||
mout=0;
|
||||
if (slope<0) slope=-slope;
|
||||
if (slope!=0 && slope<0.1) slope=0.1;
|
||||
fbuf=tLimit/CtlScale();
|
||||
@@ -1831,8 +1838,69 @@ int AlarmHdl(int mode, void *base, int fd) {
|
||||
OnError: return -1;
|
||||
}
|
||||
|
||||
int SetPower(float setpower) {
|
||||
float htr1, htr0, diff, dist;
|
||||
int cnt;
|
||||
|
||||
if (setpower<0) return 0;
|
||||
if (setpower>maxPower) setpower=maxPower;
|
||||
if (setpower<0) setpower=0;
|
||||
htr1=sqrt(setpower/scalPower*1e4);
|
||||
ERR_P(LscCmd(ser, "HTR?>htr"));
|
||||
diff=htr1-htr;
|
||||
if (abs(diff) <0.11) return 0;
|
||||
if (htr==0) {
|
||||
if (diff<10) diff=10;
|
||||
if (diff>50) diff=50;
|
||||
diff+=diff*0.5+10;
|
||||
while (htr==0) {
|
||||
mout+=diff;
|
||||
ERR_P(LscCmd(ser, "MOUT 1,[mout]"));
|
||||
ERR_P(LscCmd(ser, "HTR?>htr"));
|
||||
}
|
||||
}
|
||||
if (htr==100) {
|
||||
if (diff>-10) diff=-10;
|
||||
if (diff<-50) diff=-50;
|
||||
while (htr==100) {
|
||||
mout+=diff;
|
||||
ERR_P(LscCmd(ser, "MOUT 1,[mout]"));
|
||||
ERR_P(LscCmd(ser, "HTR?>htr"));
|
||||
}
|
||||
}
|
||||
diff=htr1-htr;
|
||||
if (abs(diff) >0.11) {
|
||||
cnt=20;
|
||||
if (mout+diff >= 100) {
|
||||
if (mout>99.89) cnt=0;
|
||||
mout=100;
|
||||
} else if (mout+diff <= -100) {
|
||||
if (mout<-99.89) cnt=0;
|
||||
mout=-100; cnt=0;
|
||||
} else {
|
||||
mout+=diff;
|
||||
}
|
||||
ERR_P(LscCmd(ser, "MOUT 1,[mout]"));
|
||||
htr0=htr;
|
||||
while (htr0 == htr && cnt>0) {
|
||||
ERR_P(LscCmd(ser, "HTR?>htr"));
|
||||
cnt--;
|
||||
}
|
||||
}
|
||||
if (abs(htr1-htr) > 0.11) {
|
||||
power=htr*htr*scalPower*1e-4;
|
||||
logfileOut(LOG_MAIN, "power: %f (tried %f)\n", power, setpower);
|
||||
} else {
|
||||
logfileOut(LOG_MAIN, "power: %f\n", setpower);
|
||||
}
|
||||
return 0;
|
||||
OnError: return -1;
|
||||
}
|
||||
|
||||
int MaxPowerHdl(int mode, void *base, int fd) {
|
||||
static float setpower;
|
||||
if (mode==COC_WR) {
|
||||
setpower=power;
|
||||
scalPower=maxPower;
|
||||
CalcMaxPower();
|
||||
if (remoteMode!=2) {
|
||||
@@ -1847,7 +1915,31 @@ int MaxPowerHdl(int mode, void *base, int fd) {
|
||||
return COC_DWR;
|
||||
} else if (mode==COC_DWR && remoteMode==2) {
|
||||
ERR_I(SetMaxPower());
|
||||
ERR_I(SetTemp(1));
|
||||
ERR_I(SetPower(setpower));
|
||||
}
|
||||
return 0;
|
||||
OnError: return -1;
|
||||
}
|
||||
|
||||
int PowerHdl(int mode, void *base, int fd) {
|
||||
static float setpower=0;
|
||||
float htr1, diff;
|
||||
if (mode==COC_WR) {
|
||||
if (power>maxPower) power=maxPower;
|
||||
htr1=sqrt(power/scalPower*1e4);
|
||||
diff=htr1-htr;
|
||||
if (mout+diff>100) {
|
||||
diff=100-mout;
|
||||
power=(htr+diff)*(htr+diff)*scalPower/1e4;
|
||||
} else if (mout+diff<-100) {
|
||||
diff=-100-mout;
|
||||
power=(htr+diff)*(htr+diff)*scalPower/1e4;
|
||||
}
|
||||
if (power<0) power=0;
|
||||
setpower=power;
|
||||
return COC_DWR;
|
||||
} else if (mode==COC_DWR && scalPower>0) {
|
||||
ERR_I(SetPower(setpower));
|
||||
}
|
||||
return 0;
|
||||
OnError: return -1;
|
||||
@@ -2293,12 +2385,13 @@ int main(int argc, char *argv[]) {
|
||||
CocDefFlt(set, RW); CocHdl(SetHdl);
|
||||
CocDefFlt(ramp, RW); CocHdl(SetHdl);
|
||||
CocDefFlt(still, RW); CocHdl(StillHdl);
|
||||
CocDefFlt(power, RW); CocHdl(PowerHdl);
|
||||
CocDefFlt(mout, RD);
|
||||
CocDefFlt(scalPower, RD);
|
||||
CocDefFlt(smooth, RW);
|
||||
CocDefFlt(powFact, RW);
|
||||
CocDefFlt(resist, RD);
|
||||
CocDefFlt(htr, RD);
|
||||
CocDefFlt(power, RD);
|
||||
CocDefFlt(setH, RD);
|
||||
CocDefFlt(full, RW);
|
||||
CocDefFlt(tLimit, RD);
|
||||
|
||||
Reference in New Issue
Block a user