📄 pulseeddyview.cpp
字号:
{
// TODO: Add your control notification handler code here
float PerLsbVolt = 10000/4096;
static CPoint pointxy[32][2048];
int ChannelCount=1;
int Center=100;
CDC* pDC=m_ctrlPicture.GetDC();
CRect ClientRect;
m_ctrlPicture.GetClientRect(&ClientRect);
CBrush brwhite(RGB(255,255,255));
CBrush*poldbrush=NULL;
poldbrush=pDC->SelectObject(&brwhite);
pDC->Rectangle(ClientRect);
pDC->SelectObject(poldbrush);
CPen penred(PS_SOLID,1,RGB(255,0,0));
CPen*poldpen=NULL;
poldpen= pDC->SelectObject(&penred);
////////////////////////////////////////
//画坐标轴
//x轴
pDC->MoveTo(0,100);
pDC->LineTo(ClientRect.Width()+1,100);
pDC->LineTo(ClientRect.Width()-5,105);
pDC->MoveTo(ClientRect.Width()+1,100);
pDC->LineTo(ClientRect.Width()-5,95);
pDC->SetTextColor(RGB(255,0,0));
pDC->TextOut(2,105,"0");
pDC->TextOut(ClientRect.Width()-30,105,"频率");
//Y轴
pDC->MoveTo(0,105);
pDC->LineTo(0,0);
pDC->LineTo(5,5);
pDC->MoveTo(0,0);
pDC->MoveTo(0,5);
pDC->TextOut(5,5,"幅值");
pDC->TextOut(250,150,"频谱图");
////////////////////////////////////////
int k=0;
for(int j=0; j<ChannelCount; j++)
{
int x=ClientRect.left;
pointxy[j][0].x=ClientRect.left;
pointxy[j][0].y=(int)(Center-80*(FuZhi[k]/max1));
for(int i=1; i<=ClientRect.Width(); i++)
{
pointxy[j][i].x=x+i;
int nn=(int)(SAMPLEDIAN/ClientRect.Width());
if(nn>=1)
k=k+nn;
else
k=k+1;
pointxy[j][i].y=(int)(Center-80*(FuZhi[k]/max1));
}
pDC->Polyline(pointxy[j], ClientRect.Width()+1);
}
pDC->SelectObject(poldpen);
}
void CPulseeddyView::OnPhasetu()
{
// TODO: Add your control notification handler code here
float PerLsbVolt = 10000/4096;
static CPoint pointxy[32][2048];
int ChannelCount=1;
int Center=100;
CDC* pDC=m_ctrlPicture.GetDC();
CRect ClientRect;
m_ctrlPicture.GetClientRect(&ClientRect);
CBrush brwhite(RGB(255,255,255));
CBrush*poldbrush=NULL;
poldbrush=pDC->SelectObject(&brwhite);
pDC->Rectangle(ClientRect);
pDC->SelectObject(poldbrush);
CPen penred(PS_SOLID,1,RGB(255,0,0));
CPen*poldpen=NULL;
poldpen= pDC->SelectObject(&penred);
////////////////////////////////////////
//画坐标轴
//x轴
pDC->MoveTo(0,100);
pDC->LineTo(ClientRect.Width()+1,100);
pDC->LineTo(ClientRect.Width()-5,105);
pDC->MoveTo(ClientRect.Width()+1,100);
pDC->LineTo(ClientRect.Width()-5,95);
pDC->SetTextColor(RGB(255,0,0));
pDC->TextOut(2,105,"0");
pDC->TextOut(ClientRect.Width()-30,105,"时间");
//Y轴
pDC->MoveTo(0,105);
pDC->LineTo(0,0);
pDC->LineTo(5,5);
pDC->MoveTo(0,0);
pDC->MoveTo(0,5);
pDC->TextOut(5,5,"相位");
pDC->TextOut(250,150,"相位图");
////////////////////////////////////////
float phase[2048],max=0;
for(int i=0;i<SAMPLEDIAN;i++)
phase[i]=0;
for(int k=0;k<SAMPLEDIAN;k++)
{
phase[k]=atan(Imag[k]/Real[k]);
if(Real[k]>=0&&Imag[k]>=0)
{
}
if(Real[k]>0&&Imag[k]<0)
{
}
if(Real[k]<0&&Imag[k]<0)
{
phase[k]=phase[k]-3.1416;
}
if(Real[k]<0&&Imag[k]>0)
{
phase[k]=phase[k]+3.1416;
}
if(max<phase[k])
{
max=phase[k];
}
}
/////////////////////////////////
k=0;
for(int j=0; j<ChannelCount; j++)
{
int x=ClientRect.left;
pointxy[j][0].x=ClientRect.left;
pointxy[j][0].y=(int)(Center-80*(phase[k]/max));
for(int i=1; i<=ClientRect.Width(); i++)
{
pointxy[j][i].x=x+i;
int nn=(int)(SAMPLEDIAN/ClientRect.Width());
if(nn>=1)
k=k+nn;
else
k=k+1;
pointxy[j][i].y=(int)(Center-80*(phase[k]/max));
}
pDC->Polyline(pointxy[j], ClientRect.Width()+1);
}
pDC->SelectObject(poldpen);
CurrentIndex1++;
if(CurrentIndex1==MAX_SEGMENT) CurrentIndex1=0;
}
void CPulseeddyView::OnCunpan()
{
// TODO: Add your control notification handler code here
CPulseeddyApp *app=(CPulseeddyApp*)AfxGetApp();
int kk;
if(!m_bFirstCreateDeviceFile)
{
if(!PCI2000_ReleaseFile(hFileObject))
{
MessageBox("关闭文件失败","提醒您...");
}
else
m_bFirstCreateDeviceFile=TRUE;
}
for(int k=0;k<app->zijie;k++)
{
kk=4096*m;
if(kk==0)
{
m_File.Open(strNewFileName, PCI2000_modeRead);
m_pSet->MoveFirst();
while( !m_pSet->IsEOF())
{
m_pSet->Delete();
m_pSet->MoveNext();
}
m_pSet->MoveFirst();
}
m_File.Seek(kk,CFile::begin);
m_File.Read(m_InUserRegion,2048*2);
//int k=0;
//float f1=0;
float PerLsbVolt;
PerLsbVolt =10000.0/4096;
for(int b1=0;b1<SAMPLEDIAN;b1++)
{
float c1= ((m_InUserRegion[b1]&0x0FFF)*PerLsbVolt-5000);//0x800
InUser[b1]=c1;
}
float maxvalue=0;
for(int j=0;j<2048;j++)
{
if(maxvalue<=InUser[j])
maxvalue=InUser[j];
else
maxvalue=maxvalue;
}
m_pSet->AddNew();
m_pSet->m_RData=maxvalue;
m_pSet->m_ID=m;
m_pSet->Update();
m_pSet->MoveNext();
m++;
}
m_File.Close();
/*CString sPath;
int nPos;
CString FileAddress,name;
name=strNewFileName;
nPos=name.ReverseFind ('\\');
sPath=name.Left (nPos);
FileAddress=sPath+_T("\\Data1.txt");
m_pSet->MoveFirst();
for(int i=0;i<app->zijie;i++)
{
InUser[i]=m_pSet->m_RData;
m_pSet->MoveNext();
}
CFile writefile(FileAddress,CFile::modeCreate|CFile::modeWrite);
for( i=0;i<1;i++)
{
int zz=app->zijie;
writefile.Write(InUser,zz*sizeof(float));
}
///////////////////////////////////////////////////////////////////////////
writefile.Close();*/
CString sPath;
int nPos;
CString FileAddress,name;
name=strNewFileName;
nPos=name.ReverseFind ('\\');
sPath=name.Left (nPos);
FileAddress=sPath+_T("\\Data1.dat");
CFile writefile(FileAddress,CFile::modeCreate|CFile::modeWrite);
for( int i=0;i<1;i++)
{
writefile.Write(InUser,2048*sizeof(float));
}
writefile.Close();
MessageBox("存盘完毕!","提醒您...");
m=0;
}
void CPulseeddyView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CPulseeddyApp *app=(CPulseeddyApp*)AfxGetApp();
float PerLsbVolt;
PerLsbVolt =10000.0/4096;
int Center=150;
CDC* pDC=m_ctrlPicture.GetDC();
if(nIDEvent==2)
{
huifangwave();
}
if(nIDEvent==1)
{
if(km==0)
{
yuanzhi=0;
CRect ClientRect;
m_ctrlPicture.GetClientRect(&ClientRect);
CBrush brwhite(RGB(255,255,255));
CBrush*poldbrush=NULL;
poldbrush=pDC->SelectObject(&brwhite);
pDC->Rectangle(ClientRect);
pDC->SelectObject(poldbrush);
m_Height=ClientRect.Height();
m_Width=ClientRect.Width();
pery=(int)(m_Height/10);
perx=(int)(m_Width/20);
int y1=pery;
int x1=perx;
for(int i=0;i<10;i++)
{
pDC->MoveTo(0,y1);
pDC->LineTo(m_Width,y1);
y1+=pery;
}
for( i=0;i<20;i++)
{
pDC->MoveTo(x1,0);
pDC->LineTo(x1,m_Height);
x1+=perx;
}
Sleep(500);
}
for(int b1=0;b1<SAMPLEDIAN;b1++)
{
float c1= ((InUserRegion[CurrentIndex][b1]&0x0FFF)*PerLsbVolt-5000);//0x800
InUser1[b1]=c1;
}
for(int j=0;j<2048;j++)
{
if(maxzhi<=InUser1[j])
maxzhi=InUser1[j];
else
maxzhi=maxzhi;
}
ggd++;
if(ggd==1)
avemax1=maxzhi;
if(ggd==2)
avemax2=maxzhi+avemax1;
if(ggd==3)
avemax3=maxzhi+avemax2;
if(ggd==4)
avemax4=maxzhi+avemax3;
if(ggd==5)
{
avemax5=maxzhi+avemax4;
}
if(ggd==6)
{
avemax6=maxzhi+avemax5;
}
if(ggd==7)
{
avemax7=maxzhi+avemax6;
}
if(ggd==8)
{
maxzhi=(maxzhi+avemax7)/20;
}
if(km==0)
{
maxzhi1=maxzhi;
}
if(ggd==8)
{
CPen penred(PS_SOLID,1,RGB(255,0,0));
CPen*poldpen=NULL;
poldpen= pDC->SelectObject(&penred);
maxzhi=maxzhi-maxzhi1;
float jnjn=maxzhi;
pDC->MoveTo(km,150-yuanzhi);
km++;
pDC->LineTo(km,150-maxzhi);
yuanzhi=maxzhi;
maxzhi=0;
ggd=0;
if(km>=m_Width)
km=0;
pDC->SelectObject(poldpen);
}
jindu();
}
CRecordView::OnTimer(nIDEvent);
}
void CPulseeddyView::OnPaint()
{
CPaintDC dc(this);
CWnd*pWnd=GetDlgItem(IDC_EDIT5);
CDC*pDC=pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
CRect ClientRect;
m_ctrlPicture.GetClientRect(&ClientRect);
m_Height=ClientRect.Height();
m_Width=ClientRect.Width();
pery=(int)(m_Height/10);
perx=(int)(m_Width/20);
int y1=pery;
int x1=perx;
for(int i=0;i<10;i++)
{
pDC->MoveTo(0,y1);
pDC->LineTo(m_Width,y1);
y1+=pery;
}
for( i=0;i<20;i++)
{
pDC->MoveTo(x1,0);
pDC->LineTo(x1,m_Height);
x1+=perx;
}
}
void CPulseeddyView::jindu()
{
CPulseeddyApp *app=(CPulseeddyApp*)AfxGetApp();
CProgressCtrl* pMB=(CProgressCtrl*)(GetDlgItem(IDC_PROGRESS2_MB));
CProgressCtrl* pKB=(CProgressCtrl*)(GetDlgItem(IDC_PROGRESS1_KB));
CEdit* pWroteMB=(CEdit*)(GetDlgItem(IDC_MB));
CEdit* pWroteKB=(CEdit*)(GetDlgItem(IDC_KB));
CString str;
if(app->kb>=512)
{
MB++;
pMB->SetPos(MB);
str.Format("%d",MB);
pWroteMB->SetWindowText(str);
app->kb=0;
}
pKB->SetPos(app->kb);
str.Format("%d",app->kb);
pWroteKB->SetWindowText(str);
}
void CPulseeddyView::huifangwave()
{
CPulseeddyApp *app=(CPulseeddyApp*)AfxGetApp();
CDC* pDC=m_ctrlPicture.GetDC();
if(waveflag==1&&km==0)
{
m_pSet->MoveFirst();
CRect ClientRect;
m_ctrlPicture.GetClientRect(&ClientRect);
CBrush brwhite(RGB(255,255,255));
CBrush*poldbrush=NULL;
poldbrush=pDC->SelectObject(&brwhite);
pDC->Rectangle(ClientRect);
pDC->SelectObject(poldbrush);
m_Height=ClientRect.Height();
m_Width=ClientRect.Width();
pery=(int)(m_Height/10);
perx=(int)(m_Width/20);
int y1=pery;
int x1=perx;
for(int i=0;i<10;i++)
{
pDC->MoveTo(0,y1);
pDC->LineTo(m_Width,y1);
y1+=pery;
}
for( i=0;i<20;i++)
{
pDC->MoveTo(x1,0);
pDC->LineTo(x1,m_Height);
x1+=perx;
}
}
avemax1=m_pSet->m_RData;
m_pSet->MoveNext();
m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
avemax2=m_pSet->m_RData;
m_pSet->MoveNext();
m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
avemax3=m_pSet->m_RData;
m_pSet->MoveNext();
m_pSet->MoveNext();
m_pSet->MoveNext();
m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
avemax4=m_pSet->m_RData;
m_pSet->MoveNext();
m_pSet->MoveNext();
m_pSet->MoveNext();
m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
avemax5=m_pSet->m_RData;
m_pSet->MoveNext();
m_pSet->MoveNext();
m_pSet->MoveNext();
m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
avemax6=m_pSet->m_RData;
m_pSet->MoveNext();
m_pSet->MoveNext();
m_pSet->MoveNext();
m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
avemax7=m_pSet->m_RData;
m_pSet->MoveNext();
m_pSet->MoveNext();
m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
avemax8=m_pSet->m_RData;
m_pSet->MoveNext();
m_pSet->MoveNext();
m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
//m_pSet->MoveNext();
maxzhi=(avemax1+avemax2+avemax3+avemax4+avemax5+avemax6+avemax7+avemax8)/10;
if(km==0)
maxzhi1=maxzhi;
CPen penred(PS_SOLID,1,RGB(255,0,0));
CPen*poldpen=NULL;
poldpen= pDC->SelectObject(&penred);
maxzhi=(maxzhi-maxzhi1)/2;
float mm=maxzhi;
pDC->MoveTo(km,150-yuanzhi);
km++;
int kk=km;
pDC->LineTo(km,150-maxzhi);
yuanzhi=maxzhi;
maxzhi=0;
pDC->SelectObject(poldpen);
if(km>=m_Width)
{
km=0;
waveflag=2;
CRect ClientRect;
m_ctrlPicture.GetClientRect(&ClientRect);
CBrush brwhite(RGB(255,255,255));
CBrush*poldbrush=NULL;
poldbrush=pDC->SelectObject(&brwhite);
pDC->Rectangle(ClientRect);
pDC->SelectObject(poldbrush);
m_Height=ClientRect.Height();
m_Width=ClientRect.Width();
pery=(int)(m_Height/10);
perx=(int)(m_Width/20);
int y1=pery;
int x1=perx;
for(int i=0;i<10;i++)
{
pDC->MoveTo(0,y1);
pDC->LineTo(m_Width,y1);
y1+=pery;
}
for( i=0;i<20;i++)
{
pDC->MoveTo(x1,0);
pDC->LineTo(x1,m_Height);
x1+=perx;
}
}
Sleep(50);
int dd=km*30;
int ff=(app->zijie)-dd;
if(ff<30)
{
KillTimer(2);
MessageBox("波形回放完毕!","提醒您...");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -