变周期控制思路

19 篇文章 12 订阅
2 篇文章 0 订阅

举例:热值调节的过程中,调节周期在偏差较小时,可以设置较大些,调节周期在偏差较大时,可以设置较小些。并且在偏差较大时,立刻进入调节(计时器清零)。
-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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨铮...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值