举例:热值调节的过程中,调节周期在偏差较小时,可以设置较大些,调节周期在偏差较大时,可以设置较小些。并且在偏差较大时,立刻进入调节(计时器清零)。
-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;
elsetime=20;
if(timer!=0)
{ if(r-rset<-350 || r-rset>600)mode=1;elsemode=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);
elsedout = 0;if(timer>=time)timer=0;
elsetimer=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