⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssx-m02.c

📁 此程序是自抗扰控制器设计的原程序,不过是调节模块驱动的程序,就缺少液晶显示和键盘扫描,以用过,没问题
💻 C
📖 第 1 页 / 共 4 页
字号:
                                        y[m]=x2;
                                        y[m+1]=x1;
                                        }
                                }
                        }
                x1=0;
                i=19;
                while(i>=12)
                        {
                        x1=x1+y[i];
                        i--;
                        }
                x1=x1/8;
                x3=x1;
                s2[j]=s1[j];
                s1[j]=x3;
                s4[j]=s3[j];
                s3[j]=0.1*s2[j]+0.9*s4[j];
                x3=s2[j];                       /*2002.4.11改,应为(x3=s3[j];),但惯性太大*/
                jz[j]=x3;
                x4=read(j*2);
                x3=x3/x4;
                x3=x3*4095;
                fshc[j]=x3;
                }
}
/*==========================================================================================*/
void pid()
{
float data xx1,xx2,xx3;
unsigned int data xx4;
/*-------------------------------------单回路2----------------------------------------------*/
if((jshhc[0]==1)||(jshhc[0]==2))
        {
        if(dshbit==1)
	        {
                if(jshhc[0]==1){dshbit=0;}
                if(jshhc[14]==0)                        /*手自动2:1--手动*/
                        {
                        bz2=1;
		        te2=te1;
		        te1=tde;
		        if(jshhc[18]==1)                /*外给定2*/
                                {tde=fshc[2]-fshc[3];} /*tde=PV2-SV2*/
		            else{
                                xx1=jshhc[2];           /*是内给定2*/
                                xx1=xx1/1000;
                                xx2=4095*0.8;
                                xx1=xx1*xx2;
                                xx1=xx1+4095*0.2;
                                tde=xx1;
		                tde=fshc[2]-tde;
                                }
                        if(qsh2==0)
                                {
                                qsh2=1;
                                tel1=fshc[2];
                                }
		        tel2=tel1;
		        tel1=fshc[2];
		        tel2=tel1-tel2;         /*dPV2*/

		        xx2=tde+te2-2*te1;
		        xx1=jshhc[8];		/*10*Td2*/
		        xx1=xx1/10;		/*Td2是微分时间*/
		        xx3=1;	        	/*10*T2(其中,T2是采样时间(100ms),10是M微分增益)*/
		        xx3=xx1+xx3;		/*Td2+10*T2*/
		        xx3=xx1/xx3;		/*Td2/(Td2+10*T2)*/
		        xx1=xx2*xx3;            /*Td2*(tde+te2-2*te1)/(Td2+10*T2)*/
		        xx3=1;	                /*10*T2*/
		        xx2=jshhc[8];           /*10*Td2*/
		        xx2=xx2+xx3;            /*10*(T2+Td2)*/
		        xx2=xx3/xx2;            /*T2/(T2+Td2)*/
                        xx2=xx2/10;             /*T2/(10*(T2+Td2))*/
		        xx2=xx2*tf1;            /*tf1*T2/(10*(T2+Td2))*/
		        xx2=xx2+xx1;            /*Td2*(tde+te2-2*te1)/(Td2+10*T2)+tf1*T2/(10*(T2+Td2))*/
		        tf1=xx2;                /*tf1=Td2*(tde+te2-2*te1)/(Td2+10*T2)+tf1*T2/(10*(T2+Td2))*/
		        xx2=xx2+tel2;           /*tf1+dPV2*/
		        xx1=jshhc[6];	        /*10*Ti2(Ti2是积分时间)*/
                        xx1=xx1/10;
                        xx3=1;                  /*10*T2*/
		        xx1=xx3/xx1;	        /*10*T2/Ti2*/
                        xx1=xx1/10;
		        xx3=tde;                /*PV2-SV2*/
		        xx1=xx1*xx3;            /*tde*T2/Ti2*/
		        xx2=xx2+xx1;            /*tf1+dPV2+tde*T2/Ti2*/
         		xx1=jshhc[4];           /*10*P2*/
		        xx1=1000/xx1;           /*100/P2*/
		        xx1=xx1*xx2;            /*MV2=(100/p2)*(tf1+dPV2+tde*T2/Ti2)*/
                        xx2=read(4);
                        xx2=xx2*0.8;            /*(PH2-PL2)*/
		        xx1=xx1/xx2;            /*MV2/(PH2-PL2)*/
		        xx2=read(12);           /*1V输出校准值*/
		        xx3=read(14);           /*5V输出校准值*/
		        xx2=xx3-xx2;
		        xx1=xx1*xx2;            /*阀位输出变化值(数字量)*/

	                if(jshhc[16]==0)        /*正反作用2:0--正*/
		                {
                                shchf2=shchf2+xx1;
                                }
	                    else{
                                shchf2=shchf2-xx1;
                                }
		        xx2=read(14);
		        xx3=read(12);
		        /*xx2=xx2-xx3;
		        xx2=xx2*0.05;
		        xx3=xx3-xx2;*/
		        if(shchf2<xx3){shchf2=xx3;}
                        /*xx1=read(14);
		        xx2=xx1+xx2;*/
		        if(shchf2>xx2){shchf2=xx2;}
                        }
                    else{
                        if(bz2==1)
                                {
                                bz2=0;
                                xx1=read(14);
                                xx2=read(12);
                                xx1=xx1-xx2;
                                xx2=shchf2-xx2;
                                xx2=xx2/xx1;
                                if(xx2<0){xx2=0;}
                                if(xx2>1){xx2=1;}
                                xx2=xx2*1000;
                                jshhc[12]=xx2;
                                }
                        if(jshhc[12]!=haz2)
                                {
                                qsh2=0;
                                haz2=jshhc[12];
                                xx2=jshhc[12];
                                xx2=xx2/1000;
                                xx1=read(14);
                                xx3=read(12);
                                xx1=xx1-xx3;
                                xx1=xx1*xx2;
                                xx3=read(12);
                                xx1=xx1+xx3;
                                shchf2=xx1;
                                }
                        xx1=read(14);
                        xx2=read(12);
		        if(shchf2>xx1){shchf2=xx1;}
		        if(shchf2<xx2){shchf2=xx2;}
                        }
                xx1=shchf2;
                xx3=read(14);
                xx2=read(12);
                xx3=xx3-xx2;
                xx1=xx1-xx2;
                xx1=xx1/xx3;
                xx1=xx1*1000;
                fshc[5]=xx1;
                xx4=shchf2;
                if(jshhc[0]==2){xx4=xx4|0x1000;}
                if(jshhc[0]==1){xx4=xx4;}
                d_a(xx4);
	        }
        }
/*-------------------------------------单回路1----------------------------------------------*/
if((jshhc[0]==0)||(jshhc[0]==2))
        {
        if(dshbit==1)
	        {
		dshbit=0;
                if(jshhc[13]==0)                        /*手自动1:1--手动*/
                        {
                        bz1=1;
		        de2=de1;
		        de1=dde;
		        if(jshhc[17]==1)                /*外给定1*/
                                {dde=fshc[0]-fshc[1];}  /*dde=PV1-SV1*/
		            else{
                                xx1=jshhc[1];           /*是内给定1*/
                                xx1=xx1/1000;
                                xx2=4095*0.8;
                                xx1=xx1*xx2;
                                xx1=xx1+4095*0.2;
                                dde=xx1;
		                dde=fshc[0]-dde;
                                }
                        if(qsh1==0)
                                {
                                qsh1=1;
                                cel1=fshc[0];
                                }
		        cel2=cel1;
		        cel1=fshc[0];
		        cel2=cel1-cel2;         /*dPV1*/

		        xx2=dde+de2-2*de1;
		        xx1=jshhc[7];		/*10*Td1*/
		        xx1=xx1/10;		/*Td1是微分时间*/
		        xx3=1;	        	/*10*T1(其中,T1是采样时间(100ms),10是M微分增益)*/
		        xx3=xx1+xx3;		/*Td1+10*T1*/
		        xx3=xx1/xx3;		/*Td1/(Td1+10*T1)*/
		        xx1=xx2*xx3;            /*Td1*(dde+de2-2*de1)/(Td1+10*T1)*/
		        xx3=1;	                /*10*T1*/
		        xx2=jshhc[7];           /*10*Td1*/
		        xx2=xx2+xx3;            /*10*(T1+Td1)*/
		        xx2=xx3/xx2;            /*T1/(T1+Td1)*/
                        xx2=xx2/10;             /*T1/(10*(T1+Td1))*/
		        xx2=xx2*df1;            /*df1*T1/(10*(T1+Td1))*/
		        xx2=xx2+xx1;            /*Td1*(dde+de2-2*de1)/(Td1+10*T1)+df1*T1/(10*(T1+Td))*/
		        df1=xx2;                /*df1=Td1*(dde+de2-2*de1)/(Td1+10*T1)+df1*T1/(10*(T1+Td))*/
		        xx2=xx2+cel2;           /*df1+dPV1*/
		        xx1=jshhc[5];	        /*10*Ti1(Ti是积分时间)*/
                        xx1=xx1/10;
                        xx3=1;                  /*10*T1*/
		        xx1=xx3/xx1;	        /*10*T1/Ti1*/
                        xx1=xx1/10;
		        xx3=dde;                /*PV1-SV1*/
		        xx1=xx1*xx3;            /*dde*T1/Ti1*/
		        xx2=xx2+xx1;            /*df1+dPV1+dde*T1/Ti1*/
         		xx1=jshhc[3];           /*10*P1*/
		        xx1=1000/xx1;           /*100/P1*/
		        xx1=xx1*xx2;            /*MV1=(100/p1)*(df1+dPV1+dde*T1/Ti1)*/
                        xx2=read(0);
                        xx2=xx2*0.8;            /*(PH1-PL1)*/
		        xx1=xx1/xx2;            /*MV1/(PH1-PL1)*/
		        xx2=read(8);            /*1V输出校准值*/
		        xx3=read(10);           /*5V输出校准值*/
		        xx2=xx3-xx2;
		        xx1=xx1*xx2;            /*阀位输出变化值(数字量)*/

	                if(jshhc[15]==0)        /*正反作用1:0--正*/
		                {
                                shchf1=shchf1+xx1;
                                }
	                    else{
                                shchf1=shchf1-xx1;
                                }
		        xx2=read(10);
		        xx3=read(8);
		        /*xx2=xx2-xx3;
		        xx2=xx2*0.05;
		        xx3=xx3-xx2;*/
		        if(shchf1<xx3){shchf1=xx3;}
                        /*xx1=read(10);
		        xx2=xx1+xx2;*/
		        if(shchf1>xx2){shchf1=xx2;}
                        }
                    else{
                        if(bz1==1)
                                {
                                bz1=0;
                                xx1=read(10);
                                xx2=read(8);
                                xx1=xx1-xx2;
                                xx2=shchf1-xx2;
                                xx2=xx2/xx1;
                                if(xx2<0){xx2=0;}
                                if(xx2>1){xx2=1;}
                                xx2=xx2*1000;
                                jshhc[11]=xx2;
                                }
                        if(jshhc[11]!=haz1)
                                {
                                qsh1=0;
                                haz1=jshhc[11];
                                xx2=jshhc[11];
                                xx2=xx2/1000;
                                xx1=read(10);
                                xx3=read(8);
                                xx1=xx1-xx3;
                                xx1=xx1*xx2;
                                xx3=read(8);
                                xx1=xx1+xx3;
                                shchf1=xx1;
                                }
                        xx1=read(10);
                        xx2=read(8);
		        if(shchf1>xx1){shchf1=xx1;}
		        if(shchf1<xx2){shchf1=xx2;}
                        }
                xx1=shchf1;
                xx3=read(10);
                xx2=read(8);
                xx3=xx3-xx2;
                xx1=xx1-xx2;
                xx1=xx1/xx3;
                xx1=xx1*1000;
                fshc[4]=xx1;
                xx4=shchf1;
                xx4=xx4|0x8000;
                d_a(xx4);
	        }
        }
/*-------------------------------------串级控制---------------------------------------------*/
if(jshhc[0]==3)
        {
        if(dshbit==1)
	        {
                dshbit=0;
/*++++++++++++++++++++++++++++++++++++主控制回路++++++++++++++++++++++++++++++++++++++++++++*/
                if(jshhc[14]==0)                        /*手自动2:1--手动*/
                        {
                        bz2=1;
		        te2=te1;
		        te1=tde;
		        if(jshhc[18]==1)                /*外给定2*/
                                {tde=fshc[2]-fshc[3];} /*tde=PV2-SV2*/
		            else{
                                xx1=jshhc[2];           /*是内给定2*/
                                xx1=xx1/1000;
                                xx2=4095*0.8;
                                xx1=xx1*xx2;
                                xx1=xx1+4095*0.2;
                                tde=xx1;
		                tde=fshc[2]-tde;
                                }
                        if(qsh2==0)
                                {
                                qsh2=1;
                                tel1=fshc[2];
                                }
		        tel2=tel1;
		        tel1=fshc[2];
		        tel2=tel1-tel2;         /*dPV2*/

		        xx2=tde+te2-2*te1;
		        xx1=jshhc[8];		/*10*Td2*/
		        xx1=xx1/10;		/*Td2是微分时间*/
		        xx3=1;	        	/*10*T2(其中,T2是采样时间(100ms),10是M微分增益)*/
		        xx3=xx1+xx3;		/*Td2+10*T2*/
		        xx3=xx1/xx3;		/*Td2/(Td2+10*T2)*/
		        xx1=xx2*xx3;            /*Td2*(tde+te2-2*te1)/(Td2+10*T2)*/
		        xx3=1;	                /*10*T2*/
		        xx2=jshhc[8];           /*10*Td2*/
		        xx2=xx2+xx3;            /*10*(T2+Td2)*/
		        xx2=xx3/xx2;            /*T2/(T2+Td2)*/
                        xx2=xx2/10;             /*T2/(10*(T2+Td2))*/
		        xx2=xx2*tf1;            /*tf1*T2/(10*(T2+Td2))*/
		        xx2=xx2+xx1;            /*Td2*(tde+te2-2*te1)/(Td2+10*T2)+tf1*T2/(10*(T2+Td2))*/
		        tf1=xx2;                /*tf1=Td2*(tde+te2-2*te1)/(Td2+10*T2)+tf1*T2/(10*(T2+Td2))*/
		        xx2=xx2+tel2;           /*tf1+dPV2*/
		        xx1=jshhc[6];	        /*10*Ti2(Ti2是积分时间)*/
                        xx1=xx1/10;
                        xx3=1;                  /*10*T2*/
		        xx1=xx3/xx1;	        /*10*T2/Ti2*/
                        xx1=xx1/10;
		        xx3=tde;                /*PV2-SV2*/
		        xx1=xx1*xx3;            /*tde*T2/Ti2*/
		        xx2=xx2+xx1;            /*tf1+dPV2+tde*T2/Ti2*/
         		xx1=jshhc[4];           /*10*P2*/
		        xx1=1000/xx1;           /*100/P2*/
		        xx1=xx1*xx2;            /*MV2=(100/p2)*(tf1+dPV2+tde*T2/Ti2)*/
                        xx2=read(4);
                        xx2=xx2*0.8;            /*(PH2-PL2)*/
		        xx1=xx1/xx2;            /*MV2/(PH2-PL2)*/
		        xx2=read(12);           /*1V输出校准值*/
		        xx3=read(14);           /*5V输出校准值*/
		        xx2=xx3-xx2;
		        xx1=xx1*xx2;            /*阀位输出变化值(数字量)*/

	                if(jshhc[16]==0)        /*正反作用2:0--正*/
		                {
                                shchf2=shchf2+xx1;
                                }
	                    else{
                                shchf2=shchf2-xx1;
                                }
		        xx2=read(14);
		        xx3=read(12);
		        if(shchf2<xx3){shchf2=xx3;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -