📄 水箱实验view.cpp
字号:
m_pidkp2,m_pidti2,m_pidtd2); break; } case 2: { U1=dmccontrol2(PvData[datanumber-1],SvData[datanumber-1],PvDataOther[datanumber-1],SvDataOther[datanumber-1], m_pidkp2,m_pidti2,m_pidtd2); break; } case 3: { U1=othercontrol2(PvData[datanumber-1],SvData[datanumber-1],PvDataOther[datanumber-1],SvDataOther[datanumber-1], m_pidkp2,m_pidti2,m_pidtd2); break; } default: break; } } else { U1=float(m_getsetmv1)/1000; } mDataport.SetData1(float(U1)); //控制量输出到D/A转换器 mDataport.SetData2(4.00); //控制量输出到D/A转换器 MvData[datanumber]=float(m_getsetmv1)/1000; SvDataOther[datanumber]=float(m_getsetmv1)/4000; MvDataOther[datanumber]=4.00; SvData[datanumber]=PvData[datanumber]; //MvDataOther[datanumber]=SvData[datanumber]*4; m_getsetsv1=int(SvData[datanumber]*1000); } } if(aorm==2) { //////////////加入水箱一串级时的代码: //////////////自动时 if(aorm2==1) { PvDataValueOther=PvDataOther[datanumber]; PvDataValue=PvData[datanumber]; if(m_seriesoption==0) { switch(m_pidcontrolget) { case 0: { U1=pidcontrol2(PvData[datanumber-1],SvData[datanumber-1],PvDataOther[datanumber-1],SvDataOther[datanumber-1], m_pidkp1,m_pidti1,m_pidtd1); break; } //控制算法 case 1: { U1=smithcontrol2(PvData[datanumber-1],SvData[datanumber-1],PvDataOther[datanumber-1],SvDataOther[datanumber-1], m_pidkp1,m_pidti1,m_pidtd1); break; } case 2: { U1=dmccontrol2(PvData[datanumber-1],SvData[datanumber-1],PvDataOther[datanumber-1],SvDataOther[datanumber-1], m_pidkp1,m_pidti1,m_pidtd1); break; } case 3: { U1=othercontrol2(PvData[datanumber-1],SvData[datanumber-1],PvDataOther[datanumber-1],SvDataOther[datanumber-1], m_pidkp1,m_pidti1,m_pidtd1); break; } default: break; } mDataport.SetData2(4.00); //控制量输出到D/A转换器 mDataport.SetData1(float(U1)); //控制量输出到D/A转换器 SvDataOther[datanumber]=float(m_getsetsv2)/1000; MvData[datanumber]=U1; SvData[datanumber]=1; MvDataOther[datanumber]=4.00; } } ////////////////手动 else { PvDataValue=PvData[datanumber]; PvDataValueOther=PvDataOther[datanumber]; if(m_seriesoption==0) { U1=float(m_getsetmv2)/1000; mDataport.SetData2(4.00); //控制量输出到D/A转换器 mDataport.SetData1(float(U1)); //控制量输出到D/A转换器 MvDataOther[datanumber]=4; SvData[datanumber]=1; MvData[datanumber]=U1; SvDataOther[datanumber]=1; } } } //棒形图刷新: if(!(cout%(m_time/100))) { CRect RectShowBangValue(946,70,974,320); CRect RectShowBangValue1(946,370,974,620); InvalidateRect(RectShowBangValue,NULL); InvalidateRect(RectShowBangValue1,NULL); CRect RectShowMv(920,65,934,325); InvalidateRect(RectShowMv,NULL); CRect RectShowMv1(920,365,934,625); InvalidateRect(RectShowMv1,NULL); CRect RectShowSv(986,65,1000,325); InvalidateRect(RectShowSv,NULL); CRect RectShowSv1(986,365,1000,625); InvalidateRect(RectShowSv1,NULL); CRect Rectwarning1(920,45,990,64); InvalidateRect(Rectwarning1,NULL); CRect Rectwarning2(920,345,990,364); InvalidateRect(Rectwarning2,NULL); } datanumber++;//?? if(start+800<int(datanumber)&&!Move) { start+=50; clean=1; } if(StartOK) { Move=0; StartOK=TRUE; } if(newdisplay&&!(datanumber%1)) Displaydata(); } else { if(!(datanumber%1)) { CClientDC dc(this); CString str; dc.SetBkColor(RGB(120,100,80)); str.Format("%d",datanumber); dc.TextOut(860,72,str); str.Format("%d",datanumber); dc.TextOut(860,372,str); dc.SetTextColor(RGB(0,255,0)); str.Format("%4.3f",PvData[datanumber-1]); str+="v"; dc.TextOut(860,112,str); dc.SetTextColor(RGB(255,255,0)); str.Format("%3.2f",U1); str+="mA"; dc.TextOut(860,92,str); dc.SetTextColor(RGB(255,0,0)); str.Format("%4.3f",SvData[datanumber-1]); str+="v"; dc.TextOut(860,132,str); dc.SetTextColor(RGB(0,255,0)); str.Format("%4.3f",PvDataOther[datanumber-1]); str+="v"; dc.TextOut(860,412,str); dc.SetTextColor(RGB(255,255,0)); str.Format("%3.2f",U2); str+="mA"; dc.TextOut(860,392,str); dc.SetTextColor(RGB(255,0,0)); str.Format("%4.3f",SvDataOther[datanumber-1]); str+="v"; dc.TextOut(860,432,str); } } cout++; CFormView::OnTimer(nIDEvent);}void CMyView::Displaydata() //待修正{ CClientDC dc(this); /*获取窗口界面指针*/ CString number; if(clean==1)//Move==1) { CRect Rect3(80,330,890,345); InvalidateRect(&Rect3,NULL); CRect Rect4(80,630,890,645); InvalidateRect(&Rect4,NULL); } int x=1,y=1,z=1,Pvpriy,Mvpriy,Svpriy; int xOther=1,yOther=1,zOther=1,PvpriyOther,MvpriyOther,SvpriyOther; int Pvnext,Mvnext,Svnext; int PvnextOther,MvnextOther,SvnextOther; CRect fRect1(50,69,850,320); CRect fRect2(50,369,850,620); CBrush br1(RGB(m_showbkwhite1?255:0,m_showbkwhite1?255:0,m_showbkwhite1?255:0)); CBrush br2(RGB(m_showbkwhite2?255:0,m_showbkwhite2?255:0,m_showbkwhite2?255:0)); if(datanumber<=1) { if(clean) { dc.FillRect(fRect1,&br1); dc.FillRect(fRect2,&br2); clean=0; return; } else return; } time=datanumber-start; if(time>800) { time=800; } else newdisplay=1; CPen MvPen,SvPen,PvPen,*oldPen; CPen MvPenOther,SvPenOther,PvPenOther; MvPen.CreatePen(PS_SOLID,1,RGB(255,255,0)); SvPen.CreatePen(PS_SOLID,1,RGB(255,0,0)); PvPen.CreatePen(PS_SOLID,1,RGB(0,255,0)); MvPenOther.CreatePen(PS_SOLID,1,RGB(255,255,0)); SvPenOther.CreatePen(PS_SOLID,1,RGB(255,0,0)); PvPenOther.CreatePen(PS_SOLID,1,RGB(0,255,0)); //CBrush br(RGB(0,0,0)); //CBrush br(RGB(255,255,255));//论文打印时改变 CBrush brnumber(RGB(120,100,80)); CString str; if(clean==1) { dc.FillRect(fRect1,&br1); dc.FillRect(fRect2,&br2); clean=0; } Pvpriy=fRect1.bottom - int((PvData[start]-1)*50*1.25); Mvpriy=fRect1.bottom - int((MvData[start]-4)*12.5*1.25); Svpriy=fRect1.bottom - int((SvData[start]-1)*50*1.25); //Pv oldPen=dc.SelectObject(&PvPen); if(!m_hidepv1) { dc.MoveTo((x-1)+fRect1.left,Pvpriy-1); for(int i=0;i<time-1;i++) {//pv1 Pvnext=fRect1.bottom-int((PvData[x+start]-1)*50*1.25); dc.LineTo(x+fRect1.left,Pvnext-1); x++; } } //Mv1 dc.SelectObject(MvPen); if(!m_hidemv1) { dc.MoveTo((y-1)+fRect1.left,Mvpriy-1); for(int j=0;j<time-1;j++) { Mvnext=fRect1.bottom-int((MvData[y+start]-4)*12.5*1.25); dc.LineTo(y+fRect1.left,Mvnext-1); y++; } } //Sv1 dc.SelectObject(SvPen); if(!m_hidesv1) { dc.MoveTo((z-1)+fRect1.left,Svpriy-1); for(int k=0;k<time-1;k++) { Svnext=fRect1.bottom-int((SvData[z+start]-1)*50*1.25); dc.LineTo(z+fRect1.left,Svnext-1); z++; } } //网格二: PvpriyOther=fRect2.bottom - int((PvDataOther[start]-1)*50*1.25); MvpriyOther=fRect2.bottom - int((MvDataOther[start]-4)*12.5*1.25); SvpriyOther=fRect2.bottom - int((SvDataOther[start]-1)*50*1.25); //Pv dc.SelectObject(&PvPenOther); if(!m_hidepv2) { dc.MoveTo((xOther-1)+fRect2.left,PvpriyOther-1); for(int ii=0;ii<time-1;ii++) {//pv2 PvnextOther=fRect2.bottom-int((PvDataOther[xOther+start]-1)*50*1.25); dc.LineTo(xOther+fRect2.left,PvnextOther-1); xOther++; } } //Mv2 dc.SelectObject(MvPenOther); if(!m_hidemv2) { dc.MoveTo((yOther-1)+fRect2.left,MvpriyOther-1); for(int jj=0;jj<time-1;jj++) { MvnextOther=fRect2.bottom-int((MvDataOther[yOther+start]-4)*12.5*1.25); dc.LineTo(yOther+fRect2.left,MvnextOther-1); yOther++; } } //Sv2 dc.SelectObject(SvPenOther); if(!m_hidesv2) { dc.MoveTo((zOther-1)+fRect2.left,SvpriyOther-1); for(int kk=0;kk<time-1;kk++) { SvnextOther=fRect2.bottom-int((SvDataOther[zOther+start]-1)*50*1.25); dc.LineTo(zOther+fRect2.left,SvnextOther-1); zOther++; } } dc.SelectObject(oldPen);}void CMyView::OnLeftscrollpage() { // TODO: Add your control notification handler code here if(start>=800) { start=start-800; } else { start=0; } clean=1; Move=1; newdisplay=0; Displaydata(); }void CMyView::OnRightscrollpage() { // TODO: Add your control notification handler code here if(start+800<int(datanumber)) { start=start+800; newdisplay=0; if(start+800>int(datanumber)) { Move=1; newdisplay=1; } clean=1; } Displaydata();}void CMyView::OnDestroy() { CFormView::OnDestroy(); // TODO: Add your message handler code here KillTimer(1); }void CMyView::OnStart() { // TODO: Add your control notification handler code here if((AfxMessageBox("开始实验?",MB_YESNO))==IDYES) { if(!StartOK&&!StopOK) { time=1; Move=1; StartOK=TRUE; int iInstallResult; iInstallResult=SetTimer(1,94,NULL); if (iInstallResult==0) MessageBox("不能设定定时器!"); } else { if(!StartOK&&StopOK) { time=1; Move=1; cout=0; datanumber=0; start=0; newdisplay=1; StartOK=TRUE; StopOK=NULL; CRect RectAll(0,0,1024,768); InvalidateRect(&RectAll,NULL); int iInstallResult; iInstallResult=SetTimer(1,94,NULL); if (iInstallResult==0) MessageBox("不能设定定时器!"); } } } }void CMyView::OnStop() { // TODO: Add your control notification handler code here if((AfxMessageBox("确定结束实验?",MB_YESNO))==IDYES) { KillTimer(1); StopOK=TRUE; StartOK=NULL; if((AfxMessageBox("是否存盘?",MB_YESNO))==IDYES) { OnSave(); } } }void CMyView::OnLeftscroll() { // TODO: Add your control notification handler code here if(start>100) { start=start-100; } else { start=0; } clean=1; Move=1; newdisplay=0; if(start+800>int(datanumber)) { Move=1; clean=1; newdisplay=1; } Displaydata(); }void CMyView::OnRightscroll() { // TODO: Add your control notification handler code here if(start+800<int(datanumber)) { start=start+100; newdisplay=0; if(start+800>int(datanumber)) { Move=1; newdisplay=1; } clean=1; } Displaydata();}void CMyView::SetMv(int data){//data是Mv的数字值(满刻度为4095): if(data>4095) data=4095; if(data<0) data=0; CClientDC dc(this); Mv=data; dc.FillRgn(&mvRgn,&backBrush); int m=70+250-(data*250)/4095; mvRgn.OffsetRgn(0,m-_mv); _mv=m; dc.FillRgn(&mvRgn,&mvBrush);}void CMyView::SetMv1(int data){//data是Mv的数字值(满刻度为4095): if(data>4095) data=4095; if(data<0) data=0; CClientDC dc(this); Mv1=data; dc.FillRgn(&mvRgnOther,&backBrush); int m=620-(data*250)/4095; mvRgnOther.OffsetRgn(0,m-_mv1); _mv1=m; dc.FillRgn(&mvRgnOther,&mvBrush);}void CMyView::SetSv(int data){//data是Mv的数字值(满刻度为4095):
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -