📄 set1view.cpp
字号:
int m; //频谱下标
double dAlarmPr; //频谱报警值
double dScaleHeight;
factorfrequence = 1024/1024.0; //1024为采样频率
fx1 = 3000/(1.522*60.0); //3000为转速
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);
//标纵坐标值
CString zuobiao;
zuobiao.Format("%.2f-",dAlarmPr);
GetDlgItem(IDC_NBY_UP)->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);
break;
case 2: //二倍频
nXCoordinate = (int)(2*nSixth);
m = (int)(2*fx1/factorfrequence);
break;
case 3: //三倍频
nXCoordinate = (int)(3*nSixth);
m = (int)(3*fx1/factorfrequence);
break;
case 4: //二十倍频
nXCoordinate = (int)(5*nSixth);
m = (int)(20*fx1/factorfrequence);
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 CSet1View::DrawTrendCurve()
{
CWnd* pWnd = (CWnd*)GetDlgItem(IDC_SET1TREND);
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)
{
//标纵坐标值
CString zuobiao;
zuobiao.Format("%.2f-",2*m_dVirValArray[m_nCurMP][0]);
GetDlgItem(IDC_TAY_UP)->SetWindowText(zuobiao);
//标横坐标值
CString temp;
int m=(10*1024)/m_nSampleFrenquence;//600×1秒=10分钟
temp.Format("%d分钟",m);
GetDlgItem(IDC_TAX_RIGHT)->SetWindowText(temp);
m=m/2;
temp.Format("%d分钟",m);
GetDlgItem(IDC_TAX_CENTER)->SetWindowText(temp);
//画曲线
double dScaleWidth;
double dScaleHeight;
dScaleWidth = (double)rect.Width()/600.0;
dScaleHeight = (double)rect.Height()/10.0;
dcMemory.SelectObject(&(((CCDMSApp*) AfxGetApp())->m_GreenPen));
if(m_nTrendDataTimer<600)
{
dcMemory.MoveTo(0,rect.Height()/2);
for( i = 0; i<=m_nTrendDataTimer; i++ )
{
dcMemory.LineTo((int)(i*dScaleWidth),(int)(rect.Height()/2.0-(m_dVirValArray[m_nCurMP][i]-m_dVirValArray[m_nCurMP][0])*dScaleHeight));
}
}
if(m_nTrendDataTimer>600 && m_nTrendDataTimer<1200)
{
dcMemory.MoveTo(0,rect.Height()/2);
for( i = 0; i<=m_nTrendDataTimer; i++ )
{
dcMemory.LineTo((int)(i*dScaleWidth),(int)(rect.Height()/2.0-(m_dVirValArray[m_nCurMP][i-600]-m_dVirValArray[m_nCurMP][600])*dScaleHeight));
}
}
if(m_nTrendDataTimer>1200 && m_nTrendDataTimer<1800)
{
dcMemory.MoveTo(0,rect.Height()/2);
for( i = 0; i<=m_nTrendDataTimer; i++ )
{
dcMemory.LineTo((int)(i*dScaleWidth),(int)(rect.Height()/2.0-(m_dVirValArray[m_nCurMP][i-1200]-m_dVirValArray[m_nCurMP][1200])*dScaleHeight));
}
}
if(m_nTrendDataTimer>1800 && m_nTrendDataTimer<2400)
{
dcMemory.MoveTo(0,rect.Height()/2);
for( i = 0; i<=m_nTrendDataTimer; i++ )
{
dcMemory.LineTo((int)(i*dScaleWidth),(int)(rect.Height()/2.0-(m_dVirValArray[m_nCurMP][i-1800]-m_dVirValArray[m_nCurMP][1800])*dScaleHeight));
}
}
if(m_nTrendDataTimer>2400 && m_nTrendDataTimer<3000)
{
dcMemory.MoveTo(0,rect.Height()/2);
for( i = 0; i<=m_nTrendDataTimer; i++ )
{
dcMemory.LineTo((int)(i*dScaleWidth),(int)(rect.Height()/2.0-(m_dVirValArray[m_nCurMP][i-2400]-m_dVirValArray[m_nCurMP][2400])*dScaleHeight));
}
}
if(m_nTrendDataTimer>3000 && m_nTrendDataTimer<3600)
{
dcMemory.MoveTo(0,rect.Height()/2);
for( i = 0; i<=m_nTrendDataTimer; i++ )
{
dcMemory.LineTo((int)(i*dScaleWidth),(int)(rect.Height()/2.0-(m_dVirValArray[m_nCurMP][i-3000]-m_dVirValArray[m_nCurMP][3000])*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 CSet1View::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_SET1);//
}
CFormView::OnActivateView(bActivate, pActivateView, pDeactiveView);
}
LRESULT CSet1View::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_VIEW1:
this->GetParentFrame()->ActivateFrame();
break;
//采样开始
case UM_COLLECTSTART:
if(m_bStart == FALSE)
{
m_bStart = TRUE;
for(i=0;i<2;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(3, 1000, NULL);
}
break;
//采样完毕
case UM_COLLECTCOMPLETE:
m_nTrendDataTimer++; //趋势数据计数器
if(m_nTrendDataTimer==3600)
m_nTrendDataTimer=0;
for(i=0; i<2; i++)
{
//获取数据
for(int j=0; j<1024; j++)
{
m_nData[i][j] = m_pMainFrame->m_nOriginalData[i][j];
}
//计算有效值(均方根值)
m_dVirtualValue[i] = m_calculate.GetVirtualValue(m_nData[i],1024);
m_dVirValArray[i][m_nTrendDataTimer]=m_calculate.GetVirtualValue(m_nData[i],1024);//趋势数据
DecideAlarmStatus(i);
}
//采完一次计算一次趋势值,3600次存入硬盘
if(m_nTrendDataTimer==3599)
SaveTrendData();
break;
}
return CFormView::WindowProc(message, wParam, lParam);
}
void CSet1View::OnDestroy()
{
m_pMainFrame->m_hViewSet1 = NULL;
CFormView::OnDestroy();
// TODO: Add your message handler code here
}
void CSet1View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent == 3)
{
//设置静态控件数字
SetStaticValue();
//画时域波形
DrawTimeDomainWave();
//画柱状图
// DrawHistoGram();
//画窄带报警
DrawNarrowbandAlarm();
//画趋势曲线
DrawTrendCurve();
//测点循环计数
if(m_pMainFrame->m_bCycMp == TRUE)
m_nCurMP++;
if(m_nCurMP == 2)
m_nCurMP = 0;
//视图循环计数
if(m_pMainFrame->m_bIsSet1Active == TRUE)
{
if(m_pMainFrame->m_bCycSet == TRUE)
{
m_nCount++;
if(m_nCount == 2)
{
//显示完毕,发消息告诉主框架
::SendMessage(m_pMainFrame->m_hWnd, UM_SET1COMPLETE, NULL, NULL);
//重新开始视图循环计数
m_nCount = 0;
}
}
}
}
CFormView::OnTimer(nIDEvent);
}
void CSet1View::SetStaticValue()
{
CString ss;
for(int i=0;i<2;i++)
{
ss.Format("%.3f",m_dVirtualValue[i]);
SetBackColor(i);
((CLabel*)m_staticArray.GetAt(i))->SetText(ss);
}
CString ss2;
((CLabel*)m_staticArray.GetAt(m_nCurMP))->GetWindowText(ss2);
((CLabel*)m_staticArray.GetAt(m_nCurMP))->SetBkColor(RGB(0,255,0));
((CLabel*)m_staticArray.GetAt(m_nCurMP))->SetText(ss2);
}
void CSet1View::DecideAlarmStatus(int i)
{
}
void CSet1View::SaveTrendData()
{
}
void CSet1View::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 + -