📄 wavedlg.cpp
字号:
// WaveDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Ultrasonic.h"
#include "UltrasonicDoc.h"
#include "UltrasonicView.h"
#include "WaveDlg.h"
#include "matlib.h"
#include "viewoldwave.h"
#include "iostream.h"
#include "fstream.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// WaveDlg dialog
extern int rxnum[8],rxoldnum[8],RxData[8][24576],RxDataOld[8][24576],realorhis;
int channelx;
long int RxDataOldb[8][12288];
int ch;
WaveDlg::WaveDlg(CWnd* pParent /*=NULL*/)
: CDialog(WaveDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(WaveDlg)
m_datapath = _T("");
m_chuse = _T("");
// m_cha = 0;
//}}AFX_DATA_INIT
}
void WaveDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(WaveDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(WaveDlg, CDialog)
//{{AFX_MSG_MAP(WaveDlg)
ON_WM_PAINT()
ON_BN_CLICKED(IDC_OPEN, OnOpen)
ON_BN_CLICKED(IDC_VIEWWAVE, OnViewwave)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// WaveDlg message handlers
void WaveDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// Do not call CDialog::OnPaint() for painting messages
}
void WaveDlg::DisplayWave(int num)
{
channelx=num;
}
void WaveDlg::OnOpen()
{
char s[256];
::GetCurrentDirectory(sizeof(s),s);
int i,j,l;
for(i=0;i<8;i++)
for(j=0;j<5000;j++)
RxDataOld[i][j]=-1;
for(i=0;i<8;i++) rxoldnum[i]=0;
int numx=0,cha;
char header1[100],header2[100];
int chx[8];
/////////////打开历史数据文件////////////////////
LPCTSTR lpszFilter="Data Files(*.txt)|*.txt|所有文件(*.*)|*.*||";
CFileDialog dlg(TRUE,lpszFilter,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,lpszFilter,NULL);
CString a;
if(dlg.DoModal() == IDOK)
{
a = dlg.GetPathName();
}
m_datapath=a;
UpdateData(FALSE);
/////////////写入各通道对应数组////////////////////
fstream file1;
if(a=="")
{
return;
}
else
{
file1.open(a,ios::in);
file1.getline((char*)header1,80,'\n');
file1.getline((char*)header2,80,'\n');
for(j=4;j<80 && header1[j]!='\n';j++) m_chuse+=header1[j]; //显示使用通道
int chnum=header2[7]-48;//获取通道数目
for(i=0,l=8;i<chnum;i++)
{
chx[i]=header1[l]-49;
l+=6;
}
UpdateData(FALSE);
while(!file1.eof())
{
int c=numx%chnum;
cha=chx[c];
char ch1,ch2,ch3;
file1.read(&ch1,1);
file1.read(&ch2,1);
file1.read(&ch3,1);
RxDataOld[cha][rxoldnum[cha]]=Char2int(ch1,ch2);
rxoldnum[cha]++;
numx++;
if(numx>=65000) break;
}
}
file1.close();
if(cha!=8)
{ j=0;
for(i=0;i<rxoldnum[cha]-1 ;i++,i++) // 32000
{
if((int)(RxDataOld[cha][i+1]&0x8)==0)
RxDataOldb[cha][j]=(RxDataOld[cha][i+1]&0x7)*256+RxDataOld[cha][i]; //补码转换
else
RxDataOldb[cha][j]=-((((RxDataOld[cha][i+1]&0x7)*256+RxDataOld[cha][i])^0x7FF)+1); //要改
j++;
}
}
else
{
j=0;
for(i=0;i<rxoldnum[cha]-1 ;i++,i++) // 32000
{
RxDataOldb[cha][j]=RxDataOld[cha][i]*256+RxDataOld[cha][i+1]; //双字节合成速度
j++;
}
for(i=0;i<rxoldnum[cha]/2-1 ;i++) // 32000
{
if(RxDataOldb[cha][i]!=0)
{ RxDataOldb[cha][i]=720000/RxDataOldb[cha][i];} //转化成 公里/小时 11<speed<256
else
{ RxDataOldb[cha][i]=0;}
}
}
::SetCurrentDirectory(s);
initM(MATCOM_VERSION);
Mm(echo);
M_VECTOR(echo,RxDataOldb[cha]);
CWnd *p1=NULL;
p1=(CWnd *)GetDlgItem(IDC_PIC);
Mm plothandle=winaxes(p1->m_hWnd);
deleteobj(plothandle);
plothandle=winaxes(p1->m_hWnd);
title((CL(TM("压力波波形"))));
xlabel(CL(TM("时间(毫秒)")));
ylabel(CL(TM("幅值(帕)")));
viewoldwave(echo);
grid(TM("on"));
exitM();
}
int WaveDlg::Char2int(char ch0, char ch1)
{
int rxint;
int highint,lowint;
switch(ch0)
{
case '0': highint=0;break;
case '1': highint=1;break;
case '2': highint=2;break;
case '3': highint=3;break;
case '4': highint=4;break;
case '5': highint=5;break;
case '6': highint=6;break;
case '7': highint=7;break;
case '8': highint=8;break;
case '9': highint=9;break;
case 'A': highint=10;break;
case 'B': highint=11;break;
case 'C': highint=12;break;
case 'D': highint=13;break;
case 'E': highint=14;break;
case 'F': highint=15;break;
default:
//AfxMessageBox("数据格式错误0!");
return(-1);
}
switch(ch1)
{
case '0': lowint=0;break;
case '1': lowint=1;break;
case '2': lowint=2;break;
case '3': lowint=3;break;
case '4': lowint=4;break;
case '5': lowint=5;break;
case '6': lowint=6;break;
case '7': lowint=7;break;
case '8': lowint=8;break;
case '9': lowint=9;break;
case 'A': lowint=10;break;
case 'B': lowint=11;break;
case 'C': lowint=12;break;
case 'D': lowint=13;break;
case 'E': lowint=14;break;
case 'F': lowint=15;break;
default:
AfxMessageBox("数据格式错误!");
return(-1) ;
}
rxint=highint*16+lowint;
return rxint;
}
BOOL WaveDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void WaveDlg::OnViewwave()
{
double RxDataOldt[8][12000];
char s[256];
::GetCurrentDirectory(sizeof(s),s);
int i;
for(i=0;i<8;i++) rxoldnum[i]=0;
int numx=0,cha=0;
/////////////打开历史数据文件////////////////////
LPCTSTR lpszFilter="Data Files(*.txt_tec)|*.txt_tec|所有文件(*.*)|*.*||";
CFileDialog dlg(TRUE,lpszFilter,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,lpszFilter,NULL);
CString a,str;
if(dlg.DoModal() == IDOK)
{
a = dlg.GetPathName();
}
m_datapath=a;
UpdateData(FALSE);
/////////////写入各通道对应数组////////////////////
// fstream file1;
CStdioFile file2;
if(a=="")
{
return;
}
else
{
file2.Open(a,CFile::modeRead); // ios::in
UpdateData(FALSE);
// char ch1;
// file2.Read(&ch1,6);
while(1)
{
// file2.Read(&ch1,6);
file2.Seek(6,CFile::current);
file2.ReadString(str);
RxDataOldt[cha][rxoldnum[cha]]=atof(str);
rxoldnum[cha]++;
numx++;
if(numx>=12288) break;
}
}
file2.Close();
::SetCurrentDirectory(s);
initM(MATCOM_VERSION);
Mm(echo);
M_VECTOR(echo,RxDataOldt[ch]);
CWnd *p1=NULL;
p1=(CWnd *)GetDlgItem(IDC_PIC);
Mm plothandle=winaxes(p1->m_hWnd);
deleteobj(plothandle);
plothandle=winaxes(p1->m_hWnd);
title((CL(TM("压力波波形"))));
xlabel(CL(TM("时间(毫秒)")));
ylabel(CL(TM("幅值(帕)")));
viewoldwave(echo);
grid(TM("on"));
exitM();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -