⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wavedlg.cpp

📁 接收来自下位机的数据,然后进行数据处理和通讯
💻 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 + -