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

📄 pulseeddyview.cpp

📁 一个用于远场涡流检测的数据采集系统的界面编程
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
	// TODO: Add your control notification handler code here
	float  PerLsbVolt = 10000/4096; 
    static CPoint pointxy[32][2048];
    int ChannelCount=1;
    int  Center=100;
	CDC* pDC=m_ctrlPicture.GetDC();
	CRect ClientRect;
	m_ctrlPicture.GetClientRect(&ClientRect);  
		
	CBrush brwhite(RGB(255,255,255));
	CBrush*poldbrush=NULL;
	poldbrush=pDC->SelectObject(&brwhite);
	pDC->Rectangle(ClientRect);
	pDC->SelectObject(poldbrush);
	
	
	CPen penred(PS_SOLID,1,RGB(255,0,0));
	CPen*poldpen=NULL;
	poldpen= pDC->SelectObject(&penred);
	////////////////////////////////////////
	//画坐标轴
	//x轴
	    pDC->MoveTo(0,100);
	    pDC->LineTo(ClientRect.Width()+1,100);
	    pDC->LineTo(ClientRect.Width()-5,105);
        pDC->MoveTo(ClientRect.Width()+1,100);
        pDC->LineTo(ClientRect.Width()-5,95);
		pDC->SetTextColor(RGB(255,0,0));
        pDC->TextOut(2,105,"0");
    	pDC->TextOut(ClientRect.Width()-30,105,"频率");
	//Y轴
        pDC->MoveTo(0,105);
        pDC->LineTo(0,0);
        pDC->LineTo(5,5);
        pDC->MoveTo(0,0);
        pDC->MoveTo(0,5);
        pDC->TextOut(5,5,"幅值");
		pDC->TextOut(250,150,"频谱图");
	////////////////////////////////////////
	int k=0;
	for(int j=0; j<ChannelCount; j++)
	{
		int x=ClientRect.left;
		pointxy[j][0].x=ClientRect.left;
		pointxy[j][0].y=(int)(Center-80*(FuZhi[k]/max1));
		
		for(int i=1; i<=ClientRect.Width(); i++)	
		{  				
			pointxy[j][i].x=x+i;
			int nn=(int)(SAMPLEDIAN/ClientRect.Width());
			if(nn>=1)
		    	k=k+nn;
			else
				k=k+1;
			pointxy[j][i].y=(int)(Center-80*(FuZhi[k]/max1));
			
		} 		
	
		pDC->Polyline(pointxy[j], ClientRect.Width()+1);
	}
	pDC->SelectObject(poldpen);	
}
void CPulseeddyView::OnPhasetu() 
{
	// TODO: Add your control notification handler code here

    float  PerLsbVolt = 10000/4096; 
    static CPoint pointxy[32][2048];
    int ChannelCount=1;
    int  Center=100;
	CDC* pDC=m_ctrlPicture.GetDC();
	CRect ClientRect;
	m_ctrlPicture.GetClientRect(&ClientRect);  
	
	
	CBrush brwhite(RGB(255,255,255));
	CBrush*poldbrush=NULL;
	poldbrush=pDC->SelectObject(&brwhite);
	pDC->Rectangle(ClientRect);
	pDC->SelectObject(poldbrush);
	
	
	CPen penred(PS_SOLID,1,RGB(255,0,0));
	CPen*poldpen=NULL;
	poldpen= pDC->SelectObject(&penred);
	////////////////////////////////////////
	//画坐标轴
	//x轴
	    pDC->MoveTo(0,100);
	    pDC->LineTo(ClientRect.Width()+1,100);
	    pDC->LineTo(ClientRect.Width()-5,105);
        pDC->MoveTo(ClientRect.Width()+1,100);
        pDC->LineTo(ClientRect.Width()-5,95);
		pDC->SetTextColor(RGB(255,0,0));
        pDC->TextOut(2,105,"0");
    	pDC->TextOut(ClientRect.Width()-30,105,"时间");
	//Y轴
        pDC->MoveTo(0,105);
        pDC->LineTo(0,0);
        pDC->LineTo(5,5);
        pDC->MoveTo(0,0);
        pDC->MoveTo(0,5);
        pDC->TextOut(5,5,"相位");
		pDC->TextOut(250,150,"相位图");
	////////////////////////////////////////
		float	phase[2048],max=0;	
    	for(int i=0;i<SAMPLEDIAN;i++)
		  phase[i]=0;
	for(int k=0;k<SAMPLEDIAN;k++)
	{
		phase[k]=atan(Imag[k]/Real[k]);
		if(Real[k]>=0&&Imag[k]>=0)
		{
		}
		if(Real[k]>0&&Imag[k]<0)
		{
			
		}
		if(Real[k]<0&&Imag[k]<0)
		{
			phase[k]=phase[k]-3.1416;
		}
		if(Real[k]<0&&Imag[k]>0)
		{
			phase[k]=phase[k]+3.1416;
		}
		
		if(max<phase[k])
		{
			max=phase[k];
		}
	}
		/////////////////////////////////
	k=0;
    for(int j=0; j<ChannelCount; j++)
	{
		int x=ClientRect.left;
		pointxy[j][0].x=ClientRect.left;
		pointxy[j][0].y=(int)(Center-80*(phase[k]/max));
		
		for(int i=1; i<=ClientRect.Width(); i++)	
		{  				
			pointxy[j][i].x=x+i;
			int nn=(int)(SAMPLEDIAN/ClientRect.Width());
			if(nn>=1)
		    	k=k+nn;
			else
				k=k+1;
			pointxy[j][i].y=(int)(Center-80*(phase[k]/max));
			
		} 		
		pDC->Polyline(pointxy[j], ClientRect.Width()+1);
	}
	pDC->SelectObject(poldpen);
    CurrentIndex1++;
	if(CurrentIndex1==MAX_SEGMENT) CurrentIndex1=0;

	
}

void CPulseeddyView::OnCunpan() 
{
	// TODO: Add your control notification handler code here
	CPulseeddyApp *app=(CPulseeddyApp*)AfxGetApp();
	int kk;
	if(!m_bFirstCreateDeviceFile)
	{
		if(!PCI2000_ReleaseFile(hFileObject))
		{
			MessageBox("关闭文件失败","提醒您...");
		}
		else
			m_bFirstCreateDeviceFile=TRUE; 
	}
	
	for(int k=0;k<app->zijie;k++)
	{
		kk=4096*m;
		if(kk==0)
		{
			m_File.Open(strNewFileName, PCI2000_modeRead);
			m_pSet->MoveFirst();
			while(	!m_pSet->IsEOF())
			{
				m_pSet->Delete();
				m_pSet->MoveNext();
			}
			m_pSet->MoveFirst();
		}
		m_File.Seek(kk,CFile::begin);  
		m_File.Read(m_InUserRegion,2048*2);
		//int    k=0;
		//float   f1=0;
		float   PerLsbVolt;
		PerLsbVolt =10000.0/4096;
		
		for(int b1=0;b1<SAMPLEDIAN;b1++)
		{
			float  c1= ((m_InUserRegion[b1]&0x0FFF)*PerLsbVolt-5000);//0x800
			InUser[b1]=c1;	
		}
		
		float  maxvalue=0;
		for(int j=0;j<2048;j++)
		{
			if(maxvalue<=InUser[j])
				maxvalue=InUser[j];
			else 
				maxvalue=maxvalue;
		}
		m_pSet->AddNew();
		m_pSet->m_RData=maxvalue;
		m_pSet->m_ID=m;
		m_pSet->Update();
		m_pSet->MoveNext();
		m++;
	}
	m_File.Close();
	/*CString      sPath;
	int        nPos;
	CString   FileAddress,name;
	name=strNewFileName;
	nPos=name.ReverseFind ('\\');
	sPath=name.Left (nPos);
	FileAddress=sPath+_T("\\Data1.txt");

		m_pSet->MoveFirst();
	for(int i=0;i<app->zijie;i++)
	{
		
		InUser[i]=m_pSet->m_RData;
		m_pSet->MoveNext();
	}
	CFile writefile(FileAddress,CFile::modeCreate|CFile::modeWrite);
    for( i=0;i<1;i++)
	{
	   int zz=app->zijie;
	   writefile.Write(InUser,zz*sizeof(float));
	}
	///////////////////////////////////////////////////////////////////////////
	writefile.Close();*/

	CString      sPath;
	int        nPos;
	CString   FileAddress,name;
	name=strNewFileName;
	nPos=name.ReverseFind ('\\');
	sPath=name.Left (nPos);
	FileAddress=sPath+_T("\\Data1.dat");
	CFile writefile(FileAddress,CFile::modeCreate|CFile::modeWrite);
    for( int i=0;i<1;i++)
	{
	   writefile.Write(InUser,2048*sizeof(float));
	}
	writefile.Close();

    MessageBox("存盘完毕!","提醒您...");
	m=0;
}


void CPulseeddyView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	CPulseeddyApp *app=(CPulseeddyApp*)AfxGetApp();
	float   PerLsbVolt;
	PerLsbVolt =10000.0/4096;
	int  Center=150;
	CDC* pDC=m_ctrlPicture.GetDC();	
	if(nIDEvent==2)
	{
		huifangwave();
	}
	if(nIDEvent==1)
	{
		if(km==0)
		{	
			yuanzhi=0;
			CRect ClientRect;
			m_ctrlPicture.GetClientRect(&ClientRect);  
			
			CBrush brwhite(RGB(255,255,255));
			CBrush*poldbrush=NULL;
			poldbrush=pDC->SelectObject(&brwhite);
			pDC->Rectangle(ClientRect);
			pDC->SelectObject(poldbrush);
			m_Height=ClientRect.Height();
			m_Width=ClientRect.Width();
			pery=(int)(m_Height/10);
			perx=(int)(m_Width/20);
			int y1=pery;
			int x1=perx;
			
			for(int i=0;i<10;i++)
			{
				pDC->MoveTo(0,y1);
				pDC->LineTo(m_Width,y1);
				y1+=pery;
				
			}
			for( i=0;i<20;i++)
			{
				pDC->MoveTo(x1,0);
				pDC->LineTo(x1,m_Height);
				x1+=perx;
				
			}
			Sleep(500);
		}
		
		for(int b1=0;b1<SAMPLEDIAN;b1++)
		{
			float  c1= ((InUserRegion[CurrentIndex][b1]&0x0FFF)*PerLsbVolt-5000);//0x800
			InUser1[b1]=c1;	
		}
		
		for(int j=0;j<2048;j++)
		{
			if(maxzhi<=InUser1[j])
				maxzhi=InUser1[j];
			else 
				maxzhi=maxzhi;
		}
		
		ggd++;
		if(ggd==1)
			avemax1=maxzhi;
		if(ggd==2)
			avemax2=maxzhi+avemax1;
		if(ggd==3)
			avemax3=maxzhi+avemax2;
		if(ggd==4)
			avemax4=maxzhi+avemax3;
		if(ggd==5)
		{
			avemax5=maxzhi+avemax4;
		}
		if(ggd==6)
		{
			avemax6=maxzhi+avemax5;
		}
		if(ggd==7)
		{
			avemax7=maxzhi+avemax6;
		}
		if(ggd==8)
		{
			maxzhi=(maxzhi+avemax7)/20;
			
		}
		if(km==0)
		{
			maxzhi1=maxzhi;
		}
		if(ggd==8)
		{
			
			CPen penred(PS_SOLID,1,RGB(255,0,0));
			CPen*poldpen=NULL;
			poldpen= pDC->SelectObject(&penred);
			maxzhi=maxzhi-maxzhi1;
			float jnjn=maxzhi;
			pDC->MoveTo(km,150-yuanzhi);
			km++;
			pDC->LineTo(km,150-maxzhi);
			yuanzhi=maxzhi;
			maxzhi=0;
			ggd=0;
			if(km>=m_Width)
				km=0;
			pDC->SelectObject(poldpen);
		}
		jindu();
	}
	CRecordView::OnTimer(nIDEvent);
}

void CPulseeddyView::OnPaint() 
{
	CPaintDC dc(this); 
	CWnd*pWnd=GetDlgItem(IDC_EDIT5);
	CDC*pDC=pWnd->GetDC();
	pWnd->Invalidate();
	pWnd->UpdateWindow();
	CRect ClientRect;
	m_ctrlPicture.GetClientRect(&ClientRect);  
	m_Height=ClientRect.Height();
	m_Width=ClientRect.Width();
	pery=(int)(m_Height/10);
	perx=(int)(m_Width/20);
	int y1=pery;
	int x1=perx;
	
	for(int i=0;i<10;i++)
	{
		pDC->MoveTo(0,y1);
		pDC->LineTo(m_Width,y1);
		y1+=pery;
		
	}
	for( i=0;i<20;i++)
	{
		pDC->MoveTo(x1,0);
		pDC->LineTo(x1,m_Height);
		x1+=perx;
		
	}
}

void CPulseeddyView::jindu()
{
	CPulseeddyApp *app=(CPulseeddyApp*)AfxGetApp();
	CProgressCtrl* pMB=(CProgressCtrl*)(GetDlgItem(IDC_PROGRESS2_MB));
	CProgressCtrl* pKB=(CProgressCtrl*)(GetDlgItem(IDC_PROGRESS1_KB)); 
	CEdit* pWroteMB=(CEdit*)(GetDlgItem(IDC_MB));
	CEdit* pWroteKB=(CEdit*)(GetDlgItem(IDC_KB));   
	CString str;
	if(app->kb>=512)  
	{
		MB++; 
		pMB->SetPos(MB);  
		str.Format("%d",MB);
		pWroteMB->SetWindowText(str);
		app->kb=0;  
	}
	
	pKB->SetPos(app->kb);
	str.Format("%d",app->kb);
	pWroteKB->SetWindowText(str);  	
	
}
void CPulseeddyView::huifangwave()
{
    CPulseeddyApp *app=(CPulseeddyApp*)AfxGetApp();
	CDC* pDC=m_ctrlPicture.GetDC();	
	if(waveflag==1&&km==0)
	{
		m_pSet->MoveFirst();
		CRect ClientRect;
		m_ctrlPicture.GetClientRect(&ClientRect);  
		
		CBrush brwhite(RGB(255,255,255));
		CBrush*poldbrush=NULL;
		poldbrush=pDC->SelectObject(&brwhite);
		pDC->Rectangle(ClientRect);
		pDC->SelectObject(poldbrush);
		m_Height=ClientRect.Height();
		m_Width=ClientRect.Width();
		pery=(int)(m_Height/10);
		perx=(int)(m_Width/20);
		int y1=pery;
		int x1=perx;
		
		for(int i=0;i<10;i++)
		{
			pDC->MoveTo(0,y1);
			pDC->LineTo(m_Width,y1);
			y1+=pery;
			
		}
		for( i=0;i<20;i++)
		{
			pDC->MoveTo(x1,0);
			pDC->LineTo(x1,m_Height);
			x1+=perx;
			
		}

	}
	avemax1=m_pSet->m_RData;
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	avemax2=m_pSet->m_RData;
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	avemax3=m_pSet->m_RData;
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	avemax4=m_pSet->m_RData;
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	avemax5=m_pSet->m_RData;
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	avemax6=m_pSet->m_RData;
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	avemax7=m_pSet->m_RData;
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	avemax8=m_pSet->m_RData;
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	//m_pSet->MoveNext();
	maxzhi=(avemax1+avemax2+avemax3+avemax4+avemax5+avemax6+avemax7+avemax8)/10;
	if(km==0)
		maxzhi1=maxzhi;
	
	CPen penred(PS_SOLID,1,RGB(255,0,0));
	CPen*poldpen=NULL;
	poldpen= pDC->SelectObject(&penred);
	maxzhi=(maxzhi-maxzhi1)/2;
	float mm=maxzhi;
	pDC->MoveTo(km,150-yuanzhi);
	km++;
	int kk=km;
	pDC->LineTo(km,150-maxzhi);
	yuanzhi=maxzhi;
	maxzhi=0;
	pDC->SelectObject(poldpen);
	if(km>=m_Width)
	{
		km=0;
		waveflag=2;
		CRect ClientRect;
		m_ctrlPicture.GetClientRect(&ClientRect);  
		
		CBrush brwhite(RGB(255,255,255));
		CBrush*poldbrush=NULL;
		poldbrush=pDC->SelectObject(&brwhite);
		pDC->Rectangle(ClientRect);
		pDC->SelectObject(poldbrush);
		m_Height=ClientRect.Height();
		m_Width=ClientRect.Width();
		pery=(int)(m_Height/10);
		perx=(int)(m_Width/20);
		int y1=pery;
		int x1=perx;
		
		for(int i=0;i<10;i++)
		{
			pDC->MoveTo(0,y1);
			pDC->LineTo(m_Width,y1);
			y1+=pery;
			
		}
		for( i=0;i<20;i++)
		{
			pDC->MoveTo(x1,0);
			pDC->LineTo(x1,m_Height);
			x1+=perx;
			
		}
	}
	Sleep(50);	
	int dd=km*30;
	int ff=(app->zijie)-dd;
    if(ff<30)
	{
	 KillTimer(2);
	 MessageBox("波形回放完毕!","提醒您...");
	}
	
}

⌨️ 快捷键说明

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