📄 set1view.cpp
字号:
// 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 + -