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

📄 set1view.cpp

📁 一套故障诊断监测系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// Set1View.cpp : implementation file
//

#include "stdafx.h"
#include "CDMS.h"
#include "Set1View.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSet1View

IMPLEMENT_DYNCREATE(CSet1View, CFormView)

CSet1View::CSet1View()
	: CFormView(CSet1View::IDD)
{
	//{{AFX_DATA_INIT(CSet1View)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	m_pMainFrame = NULL;
	m_bStart = FALSE;

	m_nCount = 0;	//视图循环计数器
	m_nCurMP = 0;	//测点循环计数器
	m_nTrendDataTimer = -1;		//趋势数据计数器

	m_nSampleFrenquence = 1024;		//采样频率
	m_dRPM = 3000.0;			//机组转速,转/分
	
	int i,j;

	//当前时刻所有测点数据的缓存
	for(i=0; i<2; i++)
		for(j=0; j<1024; j++)
			m_nData[i][j] = 0.00;

	//有效值,速度传感器的报警值,静态控件显示值,趋势数据
	for(i=0; i<2; i++)
		m_dVirtualValue[i] = 0.00;

	//有效值数组
	for(i=0; i<2; i++)
		for(j=0; j<3600; j++)
			m_dVirValArray[i][j] = 0.00;
}

CSet1View::~CSet1View()
{
}

void CSet1View::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSet1View)
	DDX_Control(pDX, IDC_STATIC2, m_cMP2);
	DDX_Control(pDX, IDC_STATIC1, m_cMP1);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSet1View, CFormView)
	//{{AFX_MSG_MAP(CSet1View)
	ON_WM_PAINT()
	ON_WM_DESTROY()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSet1View diagnostics

#ifdef _DEBUG
void CSet1View::AssertValid() const
{
	CFormView::AssertValid();
}

void CSet1View::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSet1View message handlers

void CSet1View::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();

	InitCobArray();

	//----隐藏滚动条----//
	CSize sizeTotal;
	sizeTotal.cx = sizeTotal.cy = 0;
	SetScrollSizes(MM_TEXT, sizeTotal);
	//----隐藏滚动条----//
	
	//<-------------获取主框架指针------------->
	m_pMainFrame = (CMainFrame*)AfxGetMainWnd();
	//<-------------获取主框架指针------------->

	m_pMainFrame->m_hViewSet1 = this->m_hWnd;
		
	// TODO: Add your specialized code here and/or call the base class
	
}

void CSet1View::InitCobArray()
{
	m_staticArray.SetSize(2);
	m_staticArray.SetAt(0,&m_cMP1);
	m_staticArray.SetAt(1,&m_cMP2);

	for(int i=0;i<2;i++)
	{
		((CLabel*)m_staticArray.GetAt(i))->ShowWindow(FALSE);
	}
}

void CSet1View::OnPaint() 
{
	CPaintDC dc(this); // device context for painting

	// TODO: Add your message handler code here 
	DrawTimeDomainWave();	//画时域波形
//	DrawHistoGram();		//画柱状图
	DrawNarrowbandAlarm();	//画窄带报警
	DrawTrendCurve();		//画趋势曲线

	//时域波形坐标
	dc.MoveTo(221,100);
	dc.LineTo(221,105);
	dc.MoveTo(345,100);
	dc.LineTo(345,105);
	dc.MoveTo(487,100);
	dc.LineTo(487,105);
	//窄带报警坐标
	dc.MoveTo(221,100);
	dc.LineTo(221,105);
	dc.MoveTo(345,100);
	dc.LineTo(345,105);
	dc.MoveTo(487,100);
	dc.LineTo(487,105);
	// Do not call CFormView::OnPaint() for painting messages
}

//画时域波形
void CSet1View::DrawTimeDomainWave()
{
	CWnd* pWnd = (CWnd*)GetDlgItem(IDC_SET1TIME);
	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 average;
		double max;
		average=m_calculate.GetAverage(m_nData[m_nCurMP],1024);
		double absdata[1024];
		for(int j=0;j<1024;j++)
		{
		   absdata[j]=m_nData[m_nCurMP][j]-average;
		}
		max=m_calculate.GetAbsaluteMax(absdata,1024);

		//标纵坐标值
		CString zuobiao;
		zuobiao.Format("%.2f-",max);
		GetDlgItem(IDC_TDY_UP)->SetWindowText(zuobiao);
		zuobiao.Format("-%.2f",max);
		GetDlgItem(IDC_TDY_DOWN)->SetWindowText(zuobiao);

		//标横坐标值
		CString temp;
		int m=(1000*1024)/m_nSampleFrenquence;
		temp.Format("%dms",m);
		GetDlgItem(IDC_TDX_RIGHT)->SetWindowText(temp);
		m=m/2;
		temp.Format("%dms",m);
		GetDlgItem(IDC_TDX_CENTER)->SetWindowText(temp);

		//画波形
		double scaleWidth = rect.Width()/256.0;
		double scaleHeight = (rect.Height()-20)/(max*2.0);
		dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_GreenPen));
		dcMemory.MoveTo(0,(int)(rect.Height()/2-absdata[0]*scaleHeight));
		for( i = 0; i<256; i++ )
		{
			dcMemory.LineTo((int)(i*scaleWidth),(int)(rect.Height()/2-absdata[i]*scaleHeight));
		}
	}
	//显示
	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 CSet1View::DrawHistoGram()
{
	CWnd* pWnd = (CWnd*)GetDlgItem(IDC_SET1HISTOGRAM);
	CDC *pDC = pWnd->GetDC();
	CRect rect;
    pWnd->GetClientRect(rect);

	CDC dcMemory;
	dcMemory.CreateCompatibleDC(pDC);

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

    CPen *oldPen;
	oldPen=dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_GrayPen));
	dcMemory.MoveTo(rect.Width()/2,0);
	dcMemory.LineTo(rect.Width()/2,rect.Height());
	dcMemory.MoveTo(0,rect.top + rect.Height()/5);
	dcMemory.LineTo(rect.Width(),rect.top + rect.Height()/5);
	dcMemory.MoveTo(0,rect.top + 3*rect.Height()/5);
	dcMemory.LineTo(rect.Width(),rect.top + 3*rect.Height()/5);

	if(m_bStart == TRUE)
	{
		double dAlarm = 62;		//警告值
		double dAlert = 64;		//报警值
		double scaleHeight = 2*rect.Height()/5.0/(dAlert-dAlarm);
		CRect rcRed, rcYellow, rcGreen, rcBlue;

		rcRed.left = rcYellow.left = rcGreen.left = rect.left;
		rcRed.right = rcYellow.right = rcGreen.right = rcBlue.left = rect.left + rect.Width()/2;
		rcRed.top = rect.top;
		rcRed.bottom = rcYellow.top = rect.top + rect.Height()/5;
		rcYellow.bottom = rcGreen.top = rect.top + 3*rect.Height()/5;
		rcGreen.bottom = rcBlue.bottom = rect.bottom;
		rcBlue.right = rect.right;
		rcBlue.top = rcGreen.top - (int)((m_dVirtualValue[m_nCurMP]-dAlarm) * scaleHeight);
	
		//标纵坐标值
		CString zuobiao;
		zuobiao.Format("%.1f-",dAlert);
		GetDlgItem(IDC_HGY_ALERT)->SetWindowText(zuobiao);
		zuobiao.Format("%.1f-",dAlarm);
		GetDlgItem(IDC_HGY_ALARM)->SetWindowText(zuobiao);

		//画左侧参考值
		dcMemory.FillRect(&rcRed,&(((CCDMSApp*) AfxGetApp())->m_RedBrush));
		dcMemory.FillRect(&rcYellow,&(((CCDMSApp*) AfxGetApp())->m_YellowBrush));
		dcMemory.FillRect(&rcGreen,&(((CCDMSApp*) AfxGetApp())->m_GreenBrush));
		//画右侧实际值
		dcMemory.FillRect(&rcBlue,&(((CCDMSApp*) AfxGetApp())->m_BlueBrush));
	}

	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 CSet1View::DrawNarrowbandAlarm()
{
	CWnd* pWnd = (CWnd*)GetDlgItem(IDC_SET1AMPLI);
	CDC *pDC = pWnd->GetDC();
	CRect rect;
    pWnd->GetClientRect(rect);

	int i;

	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));
	
	//---------画小矩形框---------//
	int nAlarmRect;		//小矩形框高度
	int nXCoordinate;	//小矩形中心的x坐标值
	double nSixth;		//窄带报警窗口宽度的1/6
	nSixth = rect.Width()/6.0;

	for(i=0;i<5;i++)
	{
		switch (i)
		{
		case 0:		//半倍频
			nXCoordinate = (int)(0.5*nSixth);
			nAlarmRect = (int)(rect.Height()*0.7);
			break;
		case 1:		//一倍频
			nXCoordinate = (int)nSixth;
			nAlarmRect = (int)(rect.Height()*0.1);
			break;
		case 2:		//二倍频
			nXCoordinate = (int)(2*nSixth);
			nAlarmRect = (int)(rect.Height()*0.5);
			break;
		case 3:		//三倍频
			nXCoordinate = (int)(3*nSixth);
			nAlarmRect = (int)(rect.Height()*0.7);
			break;
		case 4:		//二十倍频
			nXCoordinate = (int)(5*nSixth);
			nAlarmRect = (int)(rect.Height()*0.9);
			break;
		}

		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;				//一倍频

⌨️ 快捷键说明

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