• 优先调节阀位,条件调节阀位


    控制对象的执行机构可能存在多个,举例,压力通过变频和翻板这两个执行机构调节。默认调节翻板。这里定义一个全局布尔变量 bfgflag 初始默认为0;优先调节翻板,当翻板处于极限阀位时,bfgflag 赋值为1,开始调节变频,同样,当变频处于极限阀位时,bfgflag 赋值为0。当偏差特别大时,翻板和变频一起调节。
    x表示阀位开度值数组
    y表示阀位投切位数组
    e表示偏差
    em表示偏差最大值
    xl表示阀位下限数组
    xh表示阀位上限数组

    全局函数

    //选主阀组
    //数组返回值函数:返回值要么是全局变量,要么是静态变量。
    BOOL bfgflag=1;//0是大管 1是小管
    //double out2[2];//动作函数中无需定义变量接收
    double* BFGV2Sel(double *x,BOOL *y,int n,double e,double em,double lmn,double *xl,double *xh)
    {
    	int model;
    	double out2[2];//动作函数中必须定义变量接收
    	int i;
    	//C++写法
    	//double *rangefloat = NULL;
    	//BOOL *rangebool = NULL;
    	//double *rangenumbers = NULL;
    	//double *out = NULL;
    	//C++写法和WinCC写法
    	double rangefloat[2]={0,0};//
    	BOOL rangebool[2]={0,0};
    	double xlfloat[2]={0,0};//
    	double xhfloat[2]={0,0};//
    	for(i=0; i=em)
    			{out2[0]=rangefloat[0]+lmn;out2[1]=rangefloat[1]+1.5*lmn;}
    			else {out2[0]=rangefloat[0]+lmn;out2[1]=rangefloat[1];}
    
    			if(out2[0]>=xhfloat[0] && out2[0]<=xlfloat[0]){bfgflag=1;}else{bfgflag=0;}
    		}
    		else{
    			if(fabs(e)>=em)
    			{out2[0]=rangefloat[0]+lmn;out2[1]=rangefloat[1]+1.5*lmn;}
    			else {out2[0]=rangefloat[0];out2[1]=rangefloat[1]+1.5*lmn;}
    
    			if(out2[0]>=xhfloat[1] && out2[0]<=xlfloat[1]){bfgflag=0;}else{bfgflag=1;}
    		}
          	break;
    
    	default:
            out2[0]=rangefloat[0]+lmn;out2[1]=rangefloat[1]+1.5*lmn;bfgflag=1;
    	}
    
    
    		//大阀位上下限
    		if(out2[0]>=xhfloat[0])
    		{
    			out2[0]=xhfloat[0];
    		}
    		if(out2[0]<=xlfloat[0])
    		{
    			out2[0]=xlfloat[0];
    		}
    		//小阀位上下限
    		if(out2[1]>=xhfloat[1])
    		{
    			out2[1]=xhfloat[1];
    		}
    		if(out2[1]<=xlfloat[1])
    		{
    			out2[1]=xlfloat[1];
    		}
    
    
    	//printf("%4.4f——%4.4f\r\n", out2[0], out2[1]);
    
    	return out2;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86

    全局动作

    double *mixfpvv;
    double mixfpvva;//定义变量接收
    double mixfpvvb;//定义变量接收
    
    mixfpvv = BFGV2Sel(rmixvv,bmixvv,2,eecff[0],mixffem,mixfpvvini,mixdnlimit,mixuplimit);
    mixfpvva=mixfpvv[0];
    mixfpvvb=mixfpvv[1];
    SetTagDouble("BFGVAS",mixfpvva);
    SetTagDouble("BFGVBS",mixfpvvb);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    编程语言为什么有null?
    Super Apps 超级应用们背后的道家哲学
    【车联网原型系统|六】效果展示
    jQuery常用API--尺寸、位置操作
    Commonsense Knowledge Base Completion with Structural and Semantic Context
    OneNote 教程,如何在 OneNote 中创建更多空间?
    GCC - 基于win10平台搭建Cmake + MinGW + gcc-arm-none 开源开发环境
    如何将Python打包后的exe还原成.py?
    【Android从零单排系列十】《Android视图控件——RadioButton》
    Numpy入门[18]——数组读写
  • 原文地址:https://blog.csdn.net/weixin_37928884/article/details/133800841