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

📄 水箱实验view.cpp

📁 这是一个水箱的液位控制程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
								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 + -