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

📄 set5view.cpp

📁 一套故障诊断监测系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		}

		dcMemory.MoveTo(nXCoordinate-5, rect.Height());
		dcMemory.LineTo(nXCoordinate-5, nAlarmRect);
		dcMemory.LineTo(nXCoordinate+5, nAlarmRect);
		dcMemory.LineTo(nXCoordinate+5, rect.Height());
	}
	//---------画小矩形框---------//

	if(m_bStart == TRUE)
	{
		double factorfrequence;	//工频
		double fx1;				//一倍频
		int m;					//频谱下标
		double dAlarmPr;		//频谱报警值
		double dScaleHeight;

		factorfrequence = m_nSampleFrenquence/1024.0;
		fx1 = m_dRPM/(1.522*60.0);	
		dAlarmPr = 1.5;		//假设报警值为1.5
		dScaleHeight = 0.5*rect.Height()/dAlarmPr;

		//对当前显示的测点进行FFT变换
		double fr[1024],fi[1024],pr[1024],pi[1024];
		int n,k,l,il;
		n=1024;k=10;l=0;il=1;
		for(i=0;i<1024;i++)
		{
			pr[i]=m_nData[m_nCurMP][i];
			pi[i]=0.0;
			fr[i]=0.0;
			fi[i]=0.0;
		}
		m_calculate.FFT(pr,pi,n,k,fr,fi,l,il);
	
//		scaleMaxPrHeiht = (double)((rect.Height()-3)/dMaxPr);
//		CString zuoBiao;
//		zuoBiao.Format("%.3f-",dMaxPr);
//		GetDlgItem(IDC_ZHADAI_ZUOBIAO)->SetWindowText(zuoBiao);
		
		dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_GreenPen));
		//计算倍频:半倍频,一倍频,二倍频,三倍频,二十倍频
		for(i=0;i<5;i++)
		{
			switch (i)
			{
			case 0:		//半倍频
				nXCoordinate = (int)(0.5*nSixth);
				m = (int)(0.5*fx1/factorfrequence);
				
				break;
			case 1:		//一倍频
				nXCoordinate = (int)(nSixth);
				m = (int)(fx1/factorfrequence);
//				dScaleHeight = 0.9*rect.Height()/dAlarmPr;
				break;
			case 2:		//二倍频
				nXCoordinate = (int)(2*nSixth);
				m = (int)(2*fx1/factorfrequence);
//				dScaleHeight = 0.5*rect.Height()/dAlarmPr;
				break;
			case 3:		//三倍频
				nXCoordinate = (int)(3*nSixth);
				m = (int)(3*fx1/factorfrequence);
//				dScaleHeight = 0.3*rect.Height()/dAlarmPr;
				break;
			case 4:		//二十倍频
				nXCoordinate = (int)(5*nSixth);
				m = (int)(20*fx1/factorfrequence);
//				dScaleHeight = 0.1*rect.Height()/dAlarmPr;
				break;
			}
			
			//画频谱
			if(m<1024)
			{	
				dcMemory.MoveTo(nXCoordinate-2, rect.Height());
				dcMemory.LineTo(nXCoordinate-1, rect.Height()-(int)(pr[m-1]*dScaleHeight));//
				dcMemory.LineTo(nXCoordinate, rect.Height()-(int)(pr[m]*dScaleHeight));//
				dcMemory.LineTo(nXCoordinate+1, rect.Height()-(int)(pr[m+1]*dScaleHeight));//
				dcMemory.LineTo(nXCoordinate+2, rect.Height());
			}
		}

	}

	pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dcMemory,0,0,SRCCOPY);

    dcMemory.SelectObject(oldPen);
	dcMemory.SelectObject(oldBitmap);
	pWnd->ReleaseDC(pDC);
	::DeleteObject(&oldPen);
	::DeleteObject(&oldBitmap);
}

//画趋势曲线
void CSet5View::DrawTrendCurve()
{
	CWnd* pWnd = (CWnd*)GetDlgItem(IDC_SET5TREND);
	CDC *pDC = pWnd->GetDC();
	CRect rect;
    pWnd->GetClientRect(rect);
	
	CDC dcMemory;
	dcMemory.CreateCompatibleDC(pDC);

	CBitmap *oldBitmap;
	oldBitmap=dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_BlackBitmap));
    CPen *oldPen;
	oldPen=dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_GrayPen));
	dcMemory.FillRect(&rect,&(((CCDMSApp*) AfxGetApp())->m_BlackBrush));

	//画方格
	double x,y;
    x=rect.Width()/8.0;
	y=rect.Height()/4.0;
	for(int i=1;i<11;i++)
	{
		dcMemory.MoveTo((int)(x*i),0);
		dcMemory.LineTo((int)(x*i),rect.Height());
	}
	for( i=0;i<2;i++)
	{
		dcMemory.MoveTo(0,rect.Height()/2-(int)(y*i));
		dcMemory.LineTo(rect.Width(),rect.Height()/2-(int)(y*i));
		dcMemory.MoveTo(0,rect.Height()/2+(int)(y*i));
		dcMemory.LineTo(rect.Width(),rect.Height()/2+(int)(y*i));
	}

	if(m_bStart == TRUE)
	{
		double dAlarm = 64.0;		//警告值
		double dAlert = 65.0;		//报警值

		double dScaleHeight;
		dScaleHeight = (double)rect.Height()/5.0/(dAlert-dAlarm);

		//在3/5高的地方画警告线
		dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_YellowPen));
		dcMemory.MoveTo(0,2*rect.Height()/5);
		dcMemory.LineTo(rect.Width(),2*rect.Height()/5);

		//在4/5高的地方画报警线
		dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_RedPen));
		dcMemory.MoveTo(0,rect.Height()/5);
		dcMemory.LineTo(rect.Width(),rect.Height()/5);

		//画趋势线
		dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_GreenPen));
		dcMemory.MoveTo(0,(int)(2.0*rect.Height()/5.0-(m_dChaValArray[m_nCurMP][0]-dAlarm)*dScaleHeight));
		for( i = 0; i<=m_nChaDataTimer; i++ )
		{
			dcMemory.LineTo(4*i,(int)(2.0*rect.Height()/5.0-(m_dChaValArray[m_nCurMP][i]-dAlarm)*dScaleHeight));
		}
	}

	pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dcMemory,0,0,SRCCOPY);

    dcMemory.SelectObject(oldPen);
	dcMemory.SelectObject(oldBitmap);
	pWnd->ReleaseDC(pDC);
	::DeleteObject(&oldPen);
	::DeleteObject(&oldBitmap);
}


//画左轴心轨迹
void CSet5View::DrawLeftAxesTrack()
{
	
	CWnd* pWnd=(CWnd*)GetDlgItem(IDC_SET5LEFTAXES);
	CDC *pDC = pWnd->GetDC();

	CRect rcClient;
	CRect rcDraw;
	CPoint cenPoint;
    pWnd->GetClientRect(rcClient);
	cenPoint=rcClient.CenterPoint();
	rcDraw.left=(int)(cenPoint.x-rcClient.Height()/2);
	rcDraw.right=(int)(cenPoint.x+rcClient.Height()/2);
	rcDraw.top=(int)(cenPoint.y-rcClient.Height()/2);
	rcDraw.bottom=(int)(cenPoint.y+rcClient.Height()/2);
		
	CDC dcMemory;
	dcMemory.CreateCompatibleDC(pDC);

	CBitmap *oldBitmap;
	oldBitmap=dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_BlackBitmap));
    CPen *oldPen;
	oldPen=dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_GrayPen));
	dcMemory.FillRect(&rcClient,&(((CCDMSApp*) AfxGetApp())->m_BlackBrush));

	//坐标
	dcMemory.SelectStockObject(NULL_BRUSH);
	dcMemory.Ellipse(rcDraw);
/*		
	dcMemory.SetTextColor(RGB(100,200,200));
	dcMemory.SetBkMode(TRANSPARENT);
//	m_pMemDc->SelectObject(&myapp->fMidFont);
	dcMemory.TextOut(rcDraw.right+5,cenPoint.y-8,"0");
	dcMemory.TextOut(cenPoint.x-8,rcDraw.top-18,"90");
	dcMemory.TextOut(rcDraw.left-30,cenPoint.y-8,"180");
	dcMemory.TextOut(cenPoint.x-10,rcDraw.bottom+5,"270");
*/
	dcMemory.MoveTo(rcDraw.left,cenPoint.y);
	dcMemory.LineTo(rcDraw.right,cenPoint.y);
    dcMemory.MoveTo(cenPoint.x,rcDraw.top);
	dcMemory.LineTo(cenPoint.x,rcDraw.bottom);

	//刻度
	for(int i=0;i<20;i++)
	{
		dcMemory.MoveTo(rcDraw.left+i*rcDraw.Width()/20,cenPoint.y-4);
		dcMemory.LineTo(rcDraw.left+i*rcDraw.Width()/20,cenPoint.y+4);
		dcMemory.MoveTo(cenPoint.x-4,rcDraw.top+i*rcDraw.Height()/20);
		dcMemory.LineTo(cenPoint.x+4,rcDraw.top+i*rcDraw.Height()/20);
	}
	for(i=0;i<24;i++)
	{
	    dcMemory.MoveTo((int)(cenPoint.x+(rcDraw.Width()/2-8)*cos(i*3.14159/12)),
			(int)(cenPoint.y+(rcDraw.Width()/2-8)*sin(i*3.14159/12)));
	    dcMemory.LineTo((int)(cenPoint.x+(rcDraw.Width()/2)*cos(i*3.14159/12)),
			(int)(cenPoint.y+(rcDraw.Width()/2)*sin(i*3.14159/12)));
	}


	/////////////////////////////

	int m_nSum;		//每转的采样点数
	m_nSum=(int)(60*m_nSampleFrenquence/m_dRPM);	

	double average1,average2,absdata1[1024],absdata2[1024];
	double maxZuobiao1,maxZuobiao2,iScale;
	average1=m_calculate.GetAverage(m_nData[1],1024);
	average2=m_calculate.GetAverage(m_nData[10],1024);
	//去直流成分
	for(int j=0;j<1024;j++)
	{
		absdata1[j]=m_nData[1][j]-average1;
		absdata2[j]=m_nData[10][j]-average2;
	}
	maxZuobiao1=m_calculate.GetAbsaluteMax(absdata1,1024);
	maxZuobiao2=m_calculate.GetAbsaluteMax(absdata2,1024);
	if(maxZuobiao1>maxZuobiao2)
		maxZuobiao2=maxZuobiao1;
	iScale=double(rcDraw.Height())/(maxZuobiao2*4);
	//图形
	dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_GreenPen));

	dcMemory.MoveTo((int)(cenPoint.x+absdata1[101]*iScale),(int)(cenPoint.y+absdata2[101]*iScale));
	for(i=101;i<m_nSum+111;i++)
	{
		dcMemory.LineTo((int)(cenPoint.x+absdata1[i]*iScale),(int)(cenPoint.y+absdata2[i]*iScale));
	}
	pDC->BitBlt(rcClient.left,rcClient.top,rcClient.Width(),rcClient.Height(),&dcMemory,0,0,SRCCOPY);

    dcMemory.SelectObject(oldPen);
	dcMemory.SelectObject(oldBitmap);
	pWnd->ReleaseDC(pDC);
	::DeleteObject(&oldPen);
	::DeleteObject(&oldBitmap);
}

//画右轴心轨迹
void CSet5View::DrawRightAxesTrack()
{
	
	CWnd* pWnd=(CWnd*)GetDlgItem(IDC_SET5RIGHTAXES);
	CDC *pDC = pWnd->GetDC();

	CRect rcClient;
	CRect rcDraw;
	CPoint cenPoint;
    pWnd->GetClientRect(rcClient);
	cenPoint=rcClient.CenterPoint();
	rcDraw.left=(int)(cenPoint.x-rcClient.Height()/2);
	rcDraw.right=(int)(cenPoint.x+rcClient.Height()/2);
	rcDraw.top=(int)(cenPoint.y-rcClient.Height()/2);
	rcDraw.bottom=(int)(cenPoint.y+rcClient.Height()/2);
		
	CDC dcMemory;
	dcMemory.CreateCompatibleDC(pDC);

	CBitmap *oldBitmap;
	oldBitmap=dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_BlackBitmap));
    CPen *oldPen;
	oldPen=dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_GrayPen));
	dcMemory.FillRect(&rcClient,&(((CCDMSApp*) AfxGetApp())->m_BlackBrush));

	//坐标
	dcMemory.SelectStockObject(NULL_BRUSH);
	dcMemory.Ellipse(rcDraw);
/*		
	dcMemory.SetTextColor(RGB(100,200,200));
	dcMemory.SetBkMode(TRANSPARENT);
//	m_pMemDc->SelectObject(&myapp->fMidFont);
	dcMemory.TextOut(rcDraw.right+5,cenPoint.y-8,"0");
	dcMemory.TextOut(cenPoint.x-8,rcDraw.top-18,"90");
	dcMemory.TextOut(rcDraw.left-30,cenPoint.y-8,"180");
	dcMemory.TextOut(cenPoint.x-10,rcDraw.bottom+5,"270");
*/
	dcMemory.MoveTo(rcDraw.left,cenPoint.y);
	dcMemory.LineTo(rcDraw.right,cenPoint.y);
    dcMemory.MoveTo(cenPoint.x,rcDraw.top);
	dcMemory.LineTo(cenPoint.x,rcDraw.bottom);

	//刻度
	for(int i=0;i<20;i++)
	{
		dcMemory.MoveTo(rcDraw.left+i*rcDraw.Width()/20,cenPoint.y-4);
		dcMemory.LineTo(rcDraw.left+i*rcDraw.Width()/20,cenPoint.y+4);
		dcMemory.MoveTo(cenPoint.x-4,rcDraw.top+i*rcDraw.Height()/20);
		dcMemory.LineTo(cenPoint.x+4,rcDraw.top+i*rcDraw.Height()/20);
	}
	for(i=0;i<24;i++)
	{
	    dcMemory.MoveTo((int)(cenPoint.x+(rcDraw.Width()/2-8)*cos(i*3.14159/12)),
			(int)(cenPoint.y+(rcDraw.Width()/2-8)*sin(i*3.14159/12)));
	    dcMemory.LineTo((int)(cenPoint.x+(rcDraw.Width()/2)*cos(i*3.14159/12)),
			(int)(cenPoint.y+(rcDraw.Width()/2)*sin(i*3.14159/12)));
	}


	/////////////////////////////
	if(m_bStart == TRUE)
	{
		int m_nSum;		//每转的采样点数
		m_nSum=(int)(60*m_nSampleFrenquence/m_dRPM);	

		double average1,average2,absdata1[1024],absdata2[1024];
		double maxZuobiao1,maxZuobiao2,iScale;
		average1=m_calculate.GetAverage(m_nData[2],1024);
		average2=m_calculate.GetAverage(m_nData[9],1024);
		//去直流成分
		for(int j=0;j<1024;j++)
		{
			absdata1[j]=m_nData[2][j]-average1;
			absdata2[j]=m_nData[9][j]-average2;
		}
		maxZuobiao1=m_calculate.GetAbsaluteMax(absdata1,1024);
		maxZuobiao2=m_calculate.GetAbsaluteMax(absdata2,1024);
		if(maxZuobiao1>maxZuobiao2)
			maxZuobiao2=maxZuobiao1;
		iScale=double(rcDraw.Height())/(maxZuobiao2*4);
		//图形
		dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_GreenPen));

		dcMemory.MoveTo((int)(cenPoint.x+absdata1[101]*iScale),(int)(cenPoint.y+absdata2[101]*iScale));
		for(i=101;i<m_nSum+111;i++)
		{
			dcMemory.LineTo((int)(cenPoint.x+absdata1[i]*iScale),(int)(cenPoint.y+absdata2[i]*iScale));
		}
	}
	pDC->BitBlt(rcClient.left,rcClient.top,rcClient.Width(),rcClient.Height(),&dcMemory,0,0,SRCCOPY);

    dcMemory.SelectObject(oldPen);
	dcMemory.SelectObject(oldBitmap);
	pWnd->ReleaseDC(pDC);
	::DeleteObject(&oldPen);
	::DeleteObject(&oldBitmap);
}

void CSet5View::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) 
{
	// TODO: Add your specialized code here and/or call the base class
	if(bActivate)
	{
		//设置当前活动视图标志
		m_pMainFrame->SetCurActiveView(VIEW_TYPE_SET5);//
	}	
	CFormView::OnActivateView(bActivate, pActivateView, pDeactiveView);
}

void CSet5View::OnDestroy() 
{
	m_pMainFrame->m_hViewSet5 = NULL;

	CFormView::OnDestroy();
	
	// TODO: Add your message handler code here
	
}

LRESULT CSet5View::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class

	int i;

	switch(message)
	{
	case UM_ACTIVATE_VIEW5:
		//激活视图
		this->GetParentFrame()->ActivateFrame();
		//重新开始视图循环计数
		m_nCount = 0;
		break;

	//采样开始
	case UM_COLLECTSTART:
		for(i=0;i<12;i++)
		{
			((CLabel*)m_staticArray.GetAt(i))->ShowWindow(TRUE);
			((CLabel*)m_staticArray.GetAt(i))->SetFontSize(12);
			((CLabel*)m_staticArray.GetAt(i))->SetBkColor(RGB(153,255,255));
			((CLabel*)m_staticArray.GetAt(i))->SetText("0.00");
		}
		SetTimer(5, 1000, NULL);
		m_bStart = TRUE;
		break;

	//采样完毕
	case UM_COLLECTCOMPLETE:

		m_nChaDataTimer++;	//趋势数据计数器
		if(m_nChaDataTimer==3600)
			m_nChaDataTimer=0;

		for(i=0; i<12; i++)
		{
			//获取数据
			for(int j=0; j<1024; j++)
			{
				m_nData[i][j] = m_pMainFrame->m_nOriginalData[8+i][j];
			}

			//计算特征值(加速度取绝对最大峰值,位移取峰峰值)
			m_dCharacterValue[i] = m_calculate.GetVirtualValue(m_nData[i],1024);
			m_dChaValArray[i][m_nChaDataTimer]=m_dCharacterValue[i];//趋势数据
//			DecideAlarmStatus(i);
		}
		if(m_nChaDataTimer==3599)
			SaveTrendData();
		break;

	}	
	
	return CFormView::WindowProc(message, wParam, lParam);
}

void CSet5View::DecideAlarmStatus(int i)
{

}

void CSet5View::SaveTrendData()
{

}

void CSet5View::SetBackColor(int i)
{
/*
	if(theApp.m_sAlarm[i].alarm)
	{
		((CLabel*)m_staticArray.GetAt(m))->SetBkColor(RGB(255,0,0));//红色
	}
	else if(theApp.m_sAlarm[i].warn)
	{
		((CLabel*)m_staticArray.GetAt(m))->SetBkColor(RGB(255,255,0));//黄色
	}
	else
	{*/
		((CLabel*)m_staticArray.GetAt(i))->SetBkColor(RGB(153,255,255));	
//	}

}

⌨️ 快捷键说明

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