举例:热值调节的过程中,调节周期在偏差较小时,可以设置较大些,调节周期在偏差较大时,可以设置较小些。并且在偏差较大时,立刻进入调节(计时器清零)。
-350<=偏差<=600,调节周期20秒,从零开始计数,大于等于20,清零,计时器等于0,调节一次,其它计数值不调节,当偏差>600 || 偏差<-350时,计数器立刻清零,调节一次,且调节周期由20变为10。
#include "apdefap.h"
int gscAction( void )
{
double r=GetTagDouble("R");
double rset=GetTagDouble("RSET");
double dout;
static int timer;
static int mode;
static int modearray[2];
int i;
int inum;
int time;
//modearray[2]数组大小为2
inum=2;
if(mode==1)
time=10;
else
time=20;
if(timer!=0)
{
if(r-rset<-350 || r-rset>600)
mode=1;
else
mode=2;
}
//if(modearray[0]-modearray[1]<0)//模式2到模式1(下降沿)
// timer=0;
if(fabs(modearray[0]-modearray[1])>0)
timer=0;
if(mode==1 && timer==0)
dout = xtoy(r-rset,-1,1, 200,-0.5,-200, 0.5);
else if(mode==2 && timer==0)
dout = xtoy(r-rset,-1,1, 200,-0.5,-200, 0.5);
else
dout = 0;
if(timer>=time)
timer=0;
else
timer=timer+1;
for(i = inum-1;i>=1;i--)
{
modearray[i]=modearray[i-1];
}
modearray[0]=mode;
//modearray[1]=modearray[0];
//modearray[0]=mode;
SetTagDouble("DOUT",dout);
SetTagWord("TIMER",timer);
SetTagWord("MODE",mode);
return 0;
}
源代码下载地址`
https://download.csdn.net/download/weixin_37928884/88552808