📄 水箱实验view.cpp
字号:
{ m_delaytime1=int(dlg.m_delaytime1*1000/m_time)*m_time/1000; m_delaytime2=int(dlg.m_delaytime2*1000/m_time)*m_time/1000; } } else if(m_delaytime1==dlg.m_delaytime1&&m_delaytime1==dlg.m_delaytime1) ; else AfxMessageBox("Exam is running,if you want to change delaytime,please new the exam!",MB_OK); } }void CMyView::OnSystemUpdownlimit() { // TODO: Add your command handler code here Cupdownlimit dlg; dlg.m_mvdownlimit1=m_mvdownlimit1; dlg.m_mvdownlimit2=m_mvdownlimit2; dlg.m_mvuplimit1=m_mvuplimit1; dlg.m_mvuplimit2=m_mvuplimit2; if(dlg.DoModal()==IDOK) { if((AfxMessageBox("决定改变报警设定?",MB_YESNO))==IDYES) { m_mvdownlimit1=dlg.m_mvdownlimit1; m_mvdownlimit2=dlg.m_mvdownlimit2; m_mvuplimit1=dlg.m_mvuplimit1; m_mvuplimit2=dlg.m_mvuplimit2; } } }void CMyView::OnSystemDrawfilter() { // TODO: Add your command handler code here CDrawfilter dlg; dlg.m_hidemv1=m_hidemv1; dlg.m_hidemv2=m_hidemv2; dlg.m_hidepv1=m_hidepv1; dlg.m_hidepv2=m_hidepv2; dlg.m_hidesv1=m_hidesv1; dlg.m_hidesv2=m_hidesv2; dlg.m_showbkwhite1=m_showbkwhite1; dlg.m_showbkwhite2=m_showbkwhite2; dlg.m_getfilternun1=m_getfilternun1; dlg.m_getfilternun2=m_getfilternun2; dlg.m_filteryes1=m_filteryes1; dlg.m_filteryes2=m_filteryes2; if(dlg.DoModal()==IDOK) { m_hidemv1=dlg.m_hidemv1; m_hidemv2=dlg.m_hidemv2; m_hidepv1=dlg.m_hidepv1; m_hidepv2=dlg.m_hidepv2; m_hidesv1=dlg.m_hidesv1; m_hidesv2=dlg.m_hidesv2; m_showbkwhite1=dlg.m_showbkwhite1; m_showbkwhite2=dlg.m_showbkwhite2; m_filteryes1=dlg.m_filteryes1; m_filteryes2=dlg.m_filteryes2; m_getfilternun1=dlg.m_getfilternun1; m_getfilternun2=dlg.m_getfilternun2; clean=1; Displaydata(); }}void CMyView::OnSystemWarninglimit() { // TODO: Add your command handler code here Cwarninglimit dlg; dlg.m_downwarning1=m_downwarning1; dlg.m_downwarning2=m_downwarning2; dlg.m_upwarning1=m_upwarning1; dlg.m_upwarning2=m_upwarning2; if(dlg.DoModal()==IDOK) { if((AfxMessageBox("决定改变报警设定?",MB_YESNO))==IDYES) { m_downwarning1=dlg.m_downwarning1; m_downwarning2=dlg.m_downwarning2; m_upwarning1=dlg.m_upwarning1; m_upwarning2=dlg.m_upwarning2; } } }void CMyView::OnOptionSeries() { // TODO: Add your command handler code here Cseriesoption dlg; ///m_seriesoption为0时,采用双PID参数;为1时,采用单PID参数: dlg.m_seriesoption=m_seriesoption; if(dlg.DoModal()==IDOK) { m_seriesoption=dlg.m_seriesoption; }}BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo) { // TODO: call DoPreparePrinting to invoke the Print dialog box return DoPreparePrinting(pInfo);}//功能函数:float CMyView::pidcontrol1(float inDataOne,float SetDataOne,float inDataTwo,float SetDataTwo,double Kp,
double Ki,double Kd)
{
//TODO:add controler code for PID control method here:
static float e1=0,e2=0,e3=0;
static float u1=4,u2=4,eu=0;
u1=yellowv;
u2=yellowv;
u1=u2;
e1=e2;
e2=e3;
e3=SetDataOne-inDataOne;
static float eupi=0,eudi2=0,eudi1=0,T=1.128,Td=2.9024;
//T=1.1795;
Td=9.45;
T = 1;
Td=float(9);
eudi1=eudi2;
eupi=float((Kp+Ki)*e3-Kp*e2);
if(Td!=0 && Kd!=0)
eudi2=float((Td/(Kd*T+Td))*(eudi1+Kp*Kd*(e3-2*e2+e1)));
else
eudi2=0;
eu=eudi2+eupi;
u2=float(u1+eu);
if(u2>float(m_mvuplimit1)/1000)
u2 = float(m_mvuplimit1)/1000;
if(u2<float(m_mvdownlimit1)/1000)
u2 = float(m_mvdownlimit1)/1000;
yellowv=u2;
return u2;
}float CMyView::pidcontrol2(float inDataOne,float SetDataOne,float inDataTwo,float SetDataTwo,double Kp,
double Ki,double Kd)
{ //TODO:add controler code for PID control method here:
static float e1=0,e2=0,e3=0;
static float u21=4,u22=4,eu2=0;
u21=yellowv2;
u22=yellowv2;
u21=u22;
e1=e2;
e2=e3;
e3=SetDataTwo-inDataTwo;
static float eupi2=0,eudi4=0,eudi3=0,T2=1.128,Td2=10.1538;
//T=1.1795;
T2 = 1;
Td2=float(9);
eudi3=eudi4;
eupi2=float((Kp+Ki)*e3-Kp*e2);
if(Td2!=0 && Kd!=0)
eudi4=float((Td2/(Kd*T2+Td2))*(eudi3+Kp*Kd*(e3-2*e2+e1)));
else
eudi4=0;
eu2=eudi4+eupi2;
u22=float(u21+eu2);
if(u22>float(m_mvuplimit1)/1000)
u22 = float(m_mvuplimit1)/1000;
if(u22<float(m_mvdownlimit1)/1000)
u22 = float(m_mvdownlimit1)/1000;
yellowv2=u22;
return u22;
}
static float v[21]={0};
float CMyView::smithcontrol1(float dataone,float SetDataone,float inDataTwo,float SetDataTwo,double Kp, double Ki,double Kd){
double Ke=0.15961;
int Te=70;
float out;
//static float v[21]={0};
//int Ts=m_time/1000;
int Ts=1;
int l=40;
float q = float (Ts/(Ts+Te));
double Cls=Ke*(v[l]-v[0]);
out=(float) pidcontrol1(dataone+Cls,SetDataone,inDataTwo,SetDataTwo,Kp,Ki,Kd);
//
for (int i=0;i<l;i++)
{
v[i]=v[i+1];
}
v[l]=(l-q)*v[l-1]+q*out;
if (out>float(m_mvuplimit1)/1000)
out=float (m_mvuplimit1)/1000;
if (out<float (m_mvdownlimit1)/1000)
out=float(m_mvdownlimit1)/1000;
return out;
//return 4;
}
float CMyView::smithcontrol2(float dataone,float SetDataone,float inDataTwo,float SetDataTwo,double Kp, double Ki,double Kd){ //TODO:add controler code for Smith control method here:
double Ke=0.3375;
int Te=60;
float out;
static float v[21]={0};
//int Ts=m_time/1000;
int Ts=1;
int l=20;
float q = float (Ts/(Ts+Te));
double Cls=Ke*(v[l]-v[0]);
out=(float) pidcontrol2(dataone+Cls,SetDataone,inDataTwo,SetDataTwo,Kp,Ki,Kd);
//
for (int i=0;i<l;i++)
{
v[i]=v[i+1];
}
v[l]=(l-q)*v[l-1]+q*out;
if (out>float(m_mvuplimit1)/1000)
out=float (m_mvuplimit1)/1000;
if (out<float (m_mvdownlimit1)/1000)
out=float(m_mvdownlimit1)/1000;
return out; //return 4;}float CMyView::dmccontrol1(float dataOne,float SetDataOne,float inDataTwo,float SetDataTwo,double Kp, double Ki,double Kd){
//TODO:add controler code for Dmc control method here:
static float e2=0,e3=0;
static float u1=4,u2=4,eu=0;
static float v[65535];
static int L=0,i=0;
static float a=0,b=0,c=0;
L=22;
u1=yellowv;
u2=yellowv;
e2=e3;
e3=SetDataOne-dataOne;
u1=u2;
v[i]=u2;
float T=1.0;
float t1=36.11;
float t=t1/2;
float K=0.2;
b=(float)exp(-T/t1);
c=(float)exp(-T/t);
a=(float)(1-c)/(K*(1-b));
a=a/3;
a = 2;
//b=float(0.9917);
//c=float(0.9835);
//a=float(2.0);
i=i+1;
if(i<=L)
u2=(a*e3*4)-(a*b*e2*4)+c*u1;
else
u2=(a*e3*4)-(a*b*e2*4)+c*u1+(1-c)*v[i-L-1];
if(u2>float(m_mvuplimit1)/1000)
u2=float(m_mvuplimit1)/1000;
if(u2<float(m_mvdownlimit1)/1000)
u2=float(m_mvdownlimit1)/1000;
if(u2>yellov_backup)
dmconce=dmconce+1;
if(dmconce==1)
limit=u2;
if(u2<limit&&dmconce<=40)
u2=limit;
yellowv=u2;
return u2;
//return out;
}float CMyView::dmccontrol2(float dataOne,float SetDataOne,float inDataTwo,float SetDataTwo,double Kp, double Ki,double Kd){ //TODO:add controler code for Dmc control method here: return 4;// return out;}float CMyView::othercontrol1(float dataOne,float SetDataOne,float inDataTwo,float SetDataTwo,double Kp,
double Ki,double Kd)
{ double sd=SetDataOne;
//TODO:add controler code for othercontrol method here:
int t=datanumber;
if(t<10)
return out = 6;
else
{
int na,nb,k,p,pu;
na =2;
nb = 2;
k =10;
p =20;
pu =5;
double belta,lamta,arfa;
belta = 1;
lamta = 0.9;
arfa = 0.95;
float u_min,u_max,y_min,y_max;
u_min =4;
u_max =20;
y_min = 0;
y_max =5;
double delta;
int n,m,j,i;
double G[30][32] ={0.004462,-0.001438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,-0.0027631,-0.0027631,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,-0.0068352,-0.0040721,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,-0.0094315,-0.0053594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,-0.011985,-0.0066256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,-0.014497,-0.0078711,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,-0.016967,-0.0090962,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,-0.019398,-0.010301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,-0.021788,-0.011487,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,-0.024139,-0.012653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,-0.026452,-0.0138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,-0.028728,-0.014928,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,-0.030965,-0.016038,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,-0.033167,-0.017129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,-0.035332,-0.018203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,-0.037462,-0.019259,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,-0.039557,-0.020298,0,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,0.026597,-0.041618,-0.02132,0,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,0.026597,0.027655,-0.043645,-0.022325,0,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,0.026597,0.027655,0.028696,-0.045639,-0.023314,0,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,0.026597,0.027655,0.028696,0.02972,-0.0476,-0.024287,0,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,0.026597,0.027655,0.028696,0.02972,0.030727,-0.04953,-0.025243,0,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,0.026597,0.027655,0.028696,0.02972,0.030727,0.031718,-0.051427,-0.026184,0,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,0.026597,0.027655,0.028696,0.02972,0.030727,0.031718,0.032692,-0.053294,-0.02711,0,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,0.026597,0.027655,0.028696,0.02972,0.030727,0.031718,0.032692,0.033651,-0.05513,-0.02802,0,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,0.026597,0.027655,0.028696,0.02972,0.030727,0.031718,0.032692,0.033651,0.034594,-0.056936,-0.028916,0,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,0.026597,0.027655,0.028696,0.02972,0.030727,0.031718,0.032692,0.033651,0.034594,0.035521,-0.058713,-0.029797,0,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,0.026597,0.027655,0.028696,0.02972,0.030727,0.031718,0.032692,0.033651,0.034594,0.035521,0.036434,-0.060461,-0.030664,0,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,0.026597,0.027655,0.028696,0.02972,0.030727,0.031718,0.032692,0.033651,0.034594,0.035521,0.036434,0.037331,-0.06218,-0.031516,0,
0.004462,0.0071357,0.0098723,0.0097945,0.011127,0.012438,0.013728,0.014997,0.016245,0.017472,0.01868,0.019868,0.021036,0.022185,0.023315,0.024427,0.025521,0.026597,0.027655,0.028696,0.02972,0.030727,0.031718,0.032692,0.033651,0.034594,0.035521,0.036434,0.037331,0.038214,-0.06387,-0.032354
};
double F[30][3] ={1.9215,-0.86037,-0.06113,
2.8318,-1.7143,-0.11746,
3.727,-2.5539,-0.17311,
4.6075,-3.3797,-0.22783,
5.4736,-4.192,-0.28166,
6.3256,-4.991,-0.3346,
7.1637,-5.777,-0.38668,
7.988,-6.5501,-0.43791,
8.7989,-7.3105,-0.48831,
9.5964,-8.0586,-0.53787,
10.381,-8.7944,-0.58663,
11.153,-9.5181,-0.63459,
11.912,-10.23,-0.68177,
12.659,-10.93,-0.72817,
13.393,-11.619,-0.77381,
14.115,-12.297,-0.81871,
14.826,-12.963,-0.86288,
15.525,-13.619,-0.90632,
16.213,-14.264,-0.94905,
16.889,-14.898,-0.99108,
17.554,-15.522,-1.0324,
18.209,-16.136,-1.0731,
18.852,-16.739,-1.1131,
19.486,-17.333,-1.1525,
20.109,-17.917,-1.1912,
20.721 -18.492 -1.2292,
21.324,-19.057,-1.2667,
21.917,-19.613,-1.3035,
22.5,-20.16,-1.3398,
23.073,-20.698,-1.3754
};
//double E[1][28];
//double F[28][3];
//double G[28][30];
//for(n=0;n<=0;n++)
//{for(m=0;m<=27;m++)
//{E[n][m]=0;}}
//for (n=0;n<=27;n++)
//{for(m=0;m<=2;m++)
//{F[n][m]=0;}}
//for (n=0;n<=27;n++)
//{for(m=0;m<=29;m++)
//{E[n][m]=0;}}
//double a[2][1]={0.84437,0.13497};
//double b[3][1]={0.0043973,-0.00066984,0.000049188};
//E[0][0]=1;
//F[0][0]=1-a[0][0];
//F[0][1]=a[0][0]-a[1][0];
//F[0][2]=a[1][0];
//G[0][0]=b[0][0];
//G[0][1]=b[1][0];
//G[0][2]=b[2][0];
//for(j=2;j<=28;j++)
// {E[0][j-1]=F[j-2][0];
// F[j-1][0]=F[j-2][1]-E[0][j-1]*(a[0][0]-1);
// F[j-1][1]=F[j-2][2]-E[0][j-1]*(a[1][0]-a[0][0]);
// F[j-1][2]=E[0][j-1]*a[1][0];
// F[j-1][0]=F[j-2][1]-F[j-2][0]*(a[0][0]-1);
// F[j-1][1]=F[j-2][2]-F[j-2][0]*(a[1][0]-a[0][0]);
// F[j-1][2]=F[j-2][0]*a[1][0];
// for(i=1;i<=j-1;i++)
// {G[j-1][i-1]=G[j-2][i-1];
// }
// G[j-1][i-1]=G[j-2][i-1]+E[0][j-1]*b[0][0];
// G[j-1][i]=G[j-2][i]+E[0][j-1]*b[1][0];
// G[j-1][i+1]=E[0][j-1]*b[1][0];
// }
double G2[20];
double fenmu;
for( i = 0; i < p; i++)
{
G2[i] = 0;
for(int j = 0;j<=i;j++)
{
G2[i] = G2[i] + pow(belta,(i-j))*G[p-1][j];
}
}
double sum1,sum2;
sum1 = 0;
sum2 = 0;
for( i =0; i < p; i++)
{
sum1 = sum1 + G2[i]* G2[i];
}
for (i = 0; i<= 2*(pu-1);)
{
sum2 =sum2 + pow(belta,i);
i = i+2;
}
fenmu = sum1 + lamta*sum2;
//????Y1??y(k-1)(IntY);
double Y1[20],IntY;
sum1 =0;
sum2 = 0;
for (m =0; m <= (nb+k-2); m++)
{
if (t >=(m+2)) {
sum1 = sum1 + G[k-2][m]*(MvData[t-m-1]-MvData[t-m-2]);
}
}
for ( n =0; n <= na;n++ )
{
if (t >= n) {
sum2 = sum2 + F[k-2][n]*PvData[t-n];
}
}
IntY = sum1 + sum2;
for (i =0;i<p;i++)
{
Y1[i] = 0;
sum1 = sum2 = 0;
for (int j = 0; j<= na;j++)
{
if (t>j) {
sum1 = sum1 + F[k+i-1][j]*PvData[t-j];
}
}
for (int c = i;c<(nb+i);c++)
{
if(t+i-c-2>=0)
{
sum2 = sum2 + G[k+i-1][c+1]*(MvData[t+i-c-1]-MvData[t+i-c-2]);
}
}
Y1[i] = sum1 +sum2;
}
//??W??
double W[20];
W[0] = arfa*IntY +(1-arfa)*SetDataOne;
for
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -