📄 set5view.cpp
字号:
}
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 + -