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

📄 ssx-m02.c

📁 此程序是自抗扰控制器设计的原程序,不过是调节模块驱动的程序,就缺少液晶显示和键盘扫描,以用过,没问题
💻 C
📖 第 1 页 / 共 4 页
字号:
		        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;
                xx2=4095*0.8;
                xx1=xx1*xx2;
                xx1=xx1+4095*0.2;
                fshc[5]=xx1;
/*++++++++++++++++++++++++++++++++++++副控制回路++++++++++++++++++++++++++++++++++++++++++++*/
                if(jshhc[13]==0)                        /*手自动1:1--手动*/
                        {
                        bz1=1;
		        de2=de1;
		        de1=dde;
                        dde=fshc[0]-fshc[5];            /*dde=PV1-SV1*/
                        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+Td1))*/
		        df1=xx2;                /*df1=Td1*(dde+de2-2*de1)/(Td1+10*T1)+df1*T1/(10*(T1+Td1))*/
		        xx2=xx2+cel2;            /*df1+dPV1*/
		        xx1=jshhc[5];	        /*10*Ti1(Ti1是积分时间)*/
                        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+dPV+dde*T1/Ti1*/
         		xx1=jshhc[3];           /*10*P1*/
		        xx1=1000/xx1;           /*100/P1*/
		        xx1=xx1*xx2;            /*MV1=(100/p1)*(df1+dPV1+de1*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(14);
                xx2=read(12);
                xx3=xx3-xx2;
                xx1=xx1-xx2;
                xx1=xx1/xx3;
                xx1=xx1*1000;
                fshc[4]=xx1;
                xx4=shchf1;
                xx4=xx4|0x8000;
                d_a(xx4);
	        }
        }
}
/*==========================================================================================*/
void gzh()
{
float xdata x1,x2;
int data ss;
if((jshhc[0]==0)||(jshhc[0]==2)||(jshhc[0]==3))
        {
        if(jshhc[0]==0){fshc[6]=fshc[6]&0x0f;}
        x1=fshc[0];
        x1=x1/4095;
        if(x1>1.05){fshc[6]=fshc[6]|0x01;}                /*测量1大于5.2V(20.8MA)*/
            else{fshc[6]=fshc[6]&0xfe;}
        if(x1<0.15){fshc[6]=fshc[6]|0x02;}                 /*测量1小于0.8V(3.2MA)*/
            else{fshc[6]=fshc[6]&0xfd;}
        if(jshhc[17]==1&&jshhc[0]!=3)
                {
                x1=fshc[1];
                x1=x1/4095;
                if(x1>1.05){fshc[6]=fshc[6]|0x04;}        /*外给1大于5.2V(20.8MA)*/
                    else{fshc[6]=fshc[6]&0xfb;}
                if(x1<0.15){fshc[6]=fshc[6]|0x08;}         /*外给1小于0.8V(3.2MA)*/
                    else{fshc[6]=fshc[6]&0xf7;}
                }
        }
if((jshhc[0]==1)||(jshhc[0]==2)||(jshhc[0]==3))
        {
        if(jshhc[0]==1){fshc[6]=fshc[6]&0xf0;}
        x1=fshc[2];
        x1=x1/4095;
        if(x1>1.05){fshc[6]=fshc[6]|0x10;}                 /*测量2大于5.2V(20.8MA)*/
            else{fshc[6]=fshc[6]&0xef;}
        if(x1<0.15){fshc[6]=fshc[6]|0x20;}                 /*测量2小于0.8V(3.2MA)*/
            else{fshc[6]=fshc[6]&0xdf;}
        if(jshhc[18]==1)
                {
                x1=fshc[3];
                x1=x1/4095;
                if(x1>1.05){fshc[6]=fshc[6]|0x40;}         /*外给2大于5.2V(20.8MA)*/
                    else{fshc[6]=fshc[6]&0xbf;}
                if(x1<0.15){fshc[6]=fshc[6]|0x80;}         /*外给2小于0.8V(3.2MA)*/
                    else{fshc[6]=fshc[6]&0x7f;}
                }
        }

if(fshc[6]!=0){gzhd=0;}
    else{gzhd=1;}
ss=fshc[6];
ss=ss/256;
if(ss!=0){gzh2=0;}
    else{gzh2=1;}
ss=fshc[6];
ss=ss%256;
if(ss!=0){gzh1=0;}
    else{gzh1=1;}
}
/*==========================================================================================*/
kongzhi()
{
int data x1;
char data i;
        if(bjzh==1)
                {
                bjzh=0;
                write(zhhao,16);
                }
        if(shchjzh==1)
                {
                shchjzh=0;
                switch(mingling)
                        {
                        case 0:fshc[4]=735;
                               x1=fshc[4]|0x8000;
                               d_a(x1);
                               break;
                        case 1:fshc[4]=fshc[4]+1;
                               x1=fshc[4]|0x8000;
                               d_a(x1);
                               break;
                        case 2:fshc[4]=fshc[4]-1;
                               x1=fshc[4]|0x8000;
                               d_a(x1);
                               break;
                        case 3:write(fshc[4],8);
                               break;
                        case 4:fshc[4]=3660;
                               x1=fshc[4]|0x8000;
                               d_a(x1);
                               break;
                        case 5:fshc[4]=fshc[4]+1;
                               x1=fshc[4]|0x8000;
                               d_a(x1);
                               break;
                        case 6:fshc[4]=fshc[4]-1;
                               x1=fshc[4]|0x8000;
                               d_a(x1);
                               break;
                        case 7:write(fshc[4],10);
                               break;
                        case 8:fshc[5]=735;
                               d_a(fshc[5]);
                               break;
                        case 9:fshc[5]=fshc[5]+1;
                               d_a(fshc[5]);
                               break;
                        case 10:fshc[5]=fshc[5]-1;
                                d_a(fshc[5]);
                                break;
                        case 11:write(fshc[5],12);
                                break;
                        case 12:fshc[5]=3660;
                                d_a(fshc[5]);
                                break;
                        case 13:fshc[5]=fshc[5]+1;
                                d_a(fshc[5]);
                                break;
                        case 14:fshc[5]=fshc[5]-1;
                                d_a(fshc[5]);
                                break;
                        case 15:write(fshc[5],14);
                                break;
                        }
                }

        if(shrjzh==1)
                {
                ep_cs!=ep_cs;
                shrjzh=0;
                ad();
                for(i=0;i<=3;i++)
                        {
                        write(jz[i],i*2);
                        rdsr();
                        }
                }
        if(tx_bzh==1)
                {
                tx_bzh=0;
                com_bzh=rd_dat[5];
                tx_js=0-9*com_bzh;                /*标志=1时,38400波特,T2重装值为FFF7H*/
                RCAP2H=tx_js/256;
                RCAP2L=tx_js;
                write(com_bzh,100);
                rdsr();
                }
}
/*==========================================================================================*/
main()
{
        //ep_wip=1;                            /*2002。6。5改,打开X25045写保护,*/
        //ep_cs!=ep_cs;
        shamao();
        TMOD=0X11;                           /*T0,方式1,通讯超时处理;T1,方式1,系统定时器*/
/*------------------------------------------------------------------------------------------*/
        RCLK=1;
        TCLK=1;                              /*T2做接受和发送时钟*/
        EXEN2=0;
        C_T2=0;                              /*T2为定时方式*/
        CP_RL2=0;
        tx_js=0-9*com_bzh;                   /*标志=1时,38400波特,T2重装值为FFF7H*/
        RCAP2H=tx_js/256;
        RCAP2L=tx_js;
        TR2=1;                               /*11.059MHZ主振*/
/*------------------------------------------------------------------------------------------*/
      	TH1=-(9216/256);
 	TL1=-(9216%256);
        TR1=1;
/*------------------------------------------------------------------------------------------*/
        SCON=0X50; /*01010000B,SM0=0(D7),SM1=1(D6),工作方式选方式1,10位异步收发,波特率由定时器
                    ;SM2=0(D5),接收到字符RI就置位;REN=1(D4),允许串行口接受;TB8=0(D3),它与
                    方式1无关;RB8=0(D2),为接受到的停止位;TI(D1),RI(D0)*/
/*------------------------------------------------------------------------------------------*/
        EA=1;      /*ES=1,允许串行口中断;EA=1,CPU开中断;ET1=1,T1开中断*/
        ES=1;
        PS=1;
        PT0=1;     /*防止串口干扰发送*/
        ET1=1;
/*------------------------------------------------------------------------------------------*/
        DE=0;
/*------------------------------------------------------------------------------------------*/
        //ep_cs!=ep_cs;
        xscs=1;
        ysh();
        xscs=0;
        while(xseoc==0){};
        chsh(0x00);
        while(xseoc==0){};
        chsh(0x00);
        ysh();

        while(1){
                //ep_cs!=ep_cs;
                kongzhi();

                //ep_cs!=ep_cs;
                ad();

                if(rd_dat[1]!=9)
                        {
                        //ep_cs!=ep_cs;
                        pid();
                        }

                //ep_cs!=ep_cs;
                gzh();
                }
}

⌨️ 快捷键说明

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