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

📄 testdlg.cpp

📁 这是一个手机与外界通信的程序
💻 CPP
字号:
// testDlg.cpp : implementation file
//

#include "stdafx.h"
#include "test.h"
#include "testDlg.h"
#include "math.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTestDlg dialog

CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTestDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTestDlg)
	m_js = 0;
	m_strx = _T("");
	m_stry = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTestDlg)
	DDX_Text(pDX, IDC_EDIT1, m_js);
	DDX_Text(pDX, IDC_EDIT2, m_strx);
	DDX_Text(pDX, IDC_EDIT3, m_stry);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
	//{{AFX_MSG_MAP(CTestDlg)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestDlg message handlers

BOOL CTestDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	CenterWindow(GetDesktopWindow());	// center to the hpc screen
	aFile=CreateFile(_T("\\My Documents\\test\\data.txt"),GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

	CRect rect;
	rect.left = 0;
	rect.top = 0;
	rect.right = 248;
	rect.bottom = 180;
	//创建曲线控件实例
	m_2DGraph.m_crBackColor = RGB(118,146,131); //控件背景色
	m_2DGraph.m_crGridColor = RGB(56,104,169); //边框颜色
	m_2DGraph.m_crTextColor = RGB(122,122,122); //字体颜色
	m_2DGraph.Create(_T(""),_T(""),WS_VISIBLE | WS_CHILD, rect, this,0,NULL) ; 
	
	flag1=1;
	flag2=0;
	fs=256;
	fcx=26;
	fcy=20;
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CTestDlg::OpenCom()
{ 
  DWORD dwError;
  DCB dcb;
  COMMTIMEOUTS TimeOuts;
 
  hCom=CreateFile(_T("COM7:"),GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
  if(hCom==INVALID_HANDLE_VALUE)
  {dwError=GetLastError();}
    
  SetupComm(hCom,7,7);
  TimeOuts.ReadIntervalTimeout=1000;
  TimeOuts.ReadTotalTimeoutMultiplier=500;
  TimeOuts.ReadTotalTimeoutConstant=5000;
  TimeOuts.WriteTotalTimeoutMultiplier=500;
  TimeOuts.WriteTotalTimeoutConstant=5000;
  SetCommTimeouts(hCom,&TimeOuts);
  
  GetCommState(hCom,&dcb);
  dcb.BaudRate=57600;
  dcb.ByteSize=8;
  dcb.Parity=NOPARITY;
  dcb.StopBits=ONESTOPBIT;
  SetCommState(hCom,&dcb);
}

DWORD CTestDlg::ReadThreadFunc(PVOID pArg)
{
	char buf[5],bufx[5],bufy[5];
	int i,j=0,k=0,nx=0,ny=0,m;
	int js=0;
	char fh1[1]={0};
	char fh2[2]={0};
	DWORD b,a;
	double x[512],y[512];



	BYTE  *readBuf=NULL ;    //读取的字节
	DWORD actualReadLen=0;   //实际读取的字节数
	CEdit *pedit;
	pedit=(CEdit *)pArg;

    CTestDlg *pDlg;
    pDlg=(CTestDlg *)AfxGetMainWnd();
	for(m=0;m<512;m++)
	 {
		x[m]=0;
		y[m]=0;
	}
    for(m=0;m<5;m++)
	{
		bufx[m]='0';
		bufy[m]='0';
		buf[m]='0';
	}
	pDlg->OpenCom();
    fh1[0]=' ';
	fh2[0]=0x0D;
	fh2[1]=0x0A;
	// 清空缓冲,并检查串口是否打开。
	ASSERT(pDlg->hComm !=INVALID_HANDLE_VALUE); 
	
	//清空串口
	PurgeComm(pDlg->hCom, PURGE_RXCLEAR | PURGE_TXCLEAR );
	//寻找数据的起始位置
	while(TRUE)
	{
				
		        readBuf = new BYTE[1];
				ReadFile(pDlg->hCom, readBuf, 1, &actualReadLen,0);
				if(*readBuf==0x0D)
				break;
	}
	//读数
	i=0;
	while (TRUE)
	{   	

			        readBuf = new BYTE[1];
					ReadFile(pDlg->hCom, readBuf, 1, &actualReadLen,0);
				    if(*readBuf>='0'&&*readBuf<='9')
					{
						buf[i]=*readBuf;
						i++;
					}
				     if(*readBuf==',')
					{
					for(j=5-i,m=0;j<5;j++,m++)
		                   bufx[j]=buf[m];
						
					x[nx]=atoi(bufx);
					nx++;
					SetFilePointer(pDlg->aFile,0,NULL,FILE_END);
	                WriteFile(pDlg->aFile,bufx,5,&a,NULL);
					SetFilePointer(pDlg->aFile,0,NULL,FILE_END);
	                WriteFile(pDlg->aFile,fh1,1,&a,NULL);

					i=0;
					for(m=0;m<5;m++)
		                   bufx[m]='0';
					}				
					
					if(*readBuf==0x0D)
					{
					    for(j=5-i,m=0;j<5;j++,m++)
		                   bufy[j]=buf[m];
						y[ny]=atoi(bufy);
						ny++;			
						SetFilePointer(pDlg->aFile,0,NULL,FILE_END);
	                    WriteFile(pDlg->aFile,bufy,5,&b,NULL);
					    SetFilePointer(pDlg->aFile,0,NULL,FILE_END);
	                    WriteFile(pDlg->aFile,fh2,2,&b,NULL);

						for(m=0;m<5;m++)
		                   bufy[m]='0';
						i=0;
						js++;
					}
					if(js%128==0)
					{
						pDlg->UpdateData(TRUE);				
				        pDlg->m_js=js;
                        pDlg->UpdateData(FALSE);
					}

	//处理数据	
	if(js==512)
	{
		nx=ny=0;
		js=0;
		pDlg->chuli(x,y);	

	}
		
		//如果收到读线程退出信号,则退出线程
		if (WaitForSingleObject(pDlg->m_hReadCloseEvent,500) == WAIT_OBJECT_0)
		{
			break;
		}
	}
	return 0;
}

void CTestDlg::OnButton1() 
{
	DWORD ThreadID;
	CEdit *pedit1;
	pedit1=(CEdit *)GetDlgItem(IDC_EDIT1);
	m_hReadThread=CreateThread(NULL,0,ReadThreadFunc,pedit1,0,&ThreadID);

}

void CTestDlg::OnButton2() 
{
	 SetEvent(m_hReadCloseEvent);
	//设置所有事件无效无效
	SetCommMask(hCom, 0);
	//清空所有将要读的数据
    PurgeComm( hCom,  PURGE_RXCLEAR );
    //等待1秒,如果读线程没有退出,则强制退出
    if (WaitForSingleObject(m_hReadThread,1000) == WAIT_TIMEOUT)
	{
		TerminateThread(m_hReadThread,0);
	}
	m_hReadThread = NULL;
	CloseHandle(hCom);
	CDialog::OnOK();
	CloseHandle(aFile);
	CloseHandle(bFile);
	
}

void CTestDlg::chuli(double x[],double y[])
{
	int i;
	DWORD a,b,c,d;
	DWORD FileSize;
	CString sx,sy;
    double fy1[512],fy2[512],sumx=0,sumy=0;
	double x1,x2,y1,y2;
	double wls,wvs;
	double ccx[512],ccy[512],cc1x[512],cc1y[512],cc2x[512],cc2y[512],cc3x[512],cc3y[512],cc4x[512],cc4y[512],cc5x[512],cc5y[512],cc6x[512],cc6y[512],cc7x[512],cc7y[512],cc8x[512],cc8y[512],cc9x[512],cc9y[512],cc10x[512],cc10y[512];
	char stime[22]={0},strx[7]={0},stry[7]={0};
    FILETIME filetime,localtime;
    SYSTEMTIME st;
	char *fh="\r\n";
	char bt[]="       测量时间         x    y";

	//数据转换,变为工程单位
	for(i=0;i<fs*2;i++)
	{
		x[i]=(x[i]-8249.5)*2/5453;
		sumx+=x[i];
		y[i]=(y[i]-8220.5)*2/5489;
		sumy+=y[i];
	}
	x1=sumx/(fs*2); 
	y1=sumy/(fs*2);
       sumx=0;
	   sumy=0;
	for(i=0;i<fs*2;i++)
	{
		x[i]=x[i]-x1;
		if(fabs(x[i])>0.2)
			x[i]=0;
		sumx+=x[i];

		y[i]=y[i]-y1;
		if(fabs(y[i])>0.2)
			y[i]=0;
		sumy+=y[i];

	}

//	zuotu(x);

	x2=sumx/(fs*2);
	y2=sumy/(fs*2);
	   sumx=0;
	   sumy=0;

	for(i=0;i<fs*2;i++)
	{
		x[i]=x[i]-x2;
		y[i]=y[i]-y2;

	}

    //频谱分析
	rfft(x,fy1,fs*2);
    rfft(y,fy2,fs*2);


	//构造加权系数
	freq[0]=0.5;
	for(i=1;i<fs;i++)
	{
		freq[i]=freq[i-1]+0.5;
	}

	for(i=0;i<10;i++)
	{
		ffx[i]=0.8*pow(freq[i],2);
	}
    for(i=10;i<52;i++)
	{
		ffx[i]=650/pow(freq[i],2);
	}
	for(i=52;i<fs;i++)
	{
		ffx[i]=1;
	}
	for(i=97;i<102;i++)
	{
		ffx[i]=0;
		ffy[i]=0;
	}
	for(i=0;i<11;i++)
	{
		ffy[i]=0.325*pow(freq[i],2);
	}
    for(i=11;i<40;i++)
	{
		ffy[i]=400/pow(freq[i],2);
	}
	for(i=40;i<fs;i++)
	{
		ffy[i]=1;
	}
	


	//分条件计算平稳性指标
    switch(flag1)
	{
	case 1:
	{
		for(i=0;i<fs*2;i++)
		{
			cc1x[i]=sqrt(pow(x[i],2)+pow(fy1[i],2))/fs;
			cc1y[i]=sqrt(pow(y[i],2)+pow(fy2[i],2))/fs;
		}
		if(flag2==0)
		{
			for(i=0;i<=fcx/0.5;i++)
	           sumx+=pow(cc1x[i+1],3)*ffx[i]/freq[i];
			for(i=0;i<=fcy/0.5;i++)
	           sumy+=pow(cc1y[i+1],3)*ffy[i]/freq[i];
	           wls=7.08*pow(sumx,0.1);
	           wvs=7.08*pow(sumy,0.1);
		}	
		flag1++;
		sumx=sumy=0;
		break;
	}

	case 2:
	{
		for(i=0;i<fs*2;i++)
		{
			cc2x[i]=sqrt(pow(x[i],2)+pow(fy1[i],2))/fs;
			cc2y[i]=sqrt(pow(y[i],2)+pow(fy2[i],2))/fs;
		}
	
		if(flag2==0)
		{
			for(i=0;i<=fcx/0.5;i++)
	           sumx+=pow(cc2x[i+1],3)*ffx[i]/freq[i];
			for(i=0;i<=fcy/0.5;i++)
	           sumy+=pow(cc2y[i+1],3)*ffy[i]/freq[i];
	           wls=7.08*pow(sumx,0.1);
	           wvs=7.08*pow(sumy,0.1);
		}
		flag1++;
		sumx=sumy=0;
		break;
	}

	case 3:
	{
		for(i=0;i<fs*2;i++)
		{
			cc3x[i]=sqrt(pow(x[i],2)+pow(fy1[i],2))/fs;
			cc3y[i]=sqrt(pow(y[i],2)+pow(fy2[i],2))/fs;
		}
	
		if(flag2==0)
		{
			for(i=0;i<=fcx/0.5;i++)
	           sumx+=pow(cc3x[i+1],3)*ffx[i]/freq[i];
			for(i=0;i<=fcy/0.5;i++)
	           sumy+=pow(cc3y[i+1],3)*ffy[i]/freq[i];
	           wls=7.08*pow(sumx,0.1);
	           wvs=7.08*pow(sumy,0.1);
		}
		flag1++;
		sumx=sumy=0;
		break;
	}
	
	case 4:
	{
		for(i=0;i<fs*2;i++)
		{
			cc4x[i]=sqrt(pow(x[i],2)+pow(fy1[i],2))/fs;
			cc4y[i]=sqrt(pow(y[i],2)+pow(fy2[i],2))/fs;
		}
	
		if(flag2==0)
		{
			for(i=0;i<=fcx/0.5;i++)
	           sumx+=pow(cc4x[i+1],3)*ffx[i]/freq[i];
			for(i=0;i<=fcy/0.5;i++)
	           sumy+=pow(cc4y[i+1],3)*ffy[i]/freq[i];
	           wls=7.08*pow(sumx,0.1);
	           wvs=7.08*pow(sumy,0.1);
		}
		flag1++;
		sumx=sumy=0;
		break;
	}

	case 5:
	{
		for(i=0;i<fs*2;i++)
		{
			cc5x[i]=sqrt(pow(x[i],2)+pow(fy1[i],2))/fs;
			cc5y[i]=sqrt(pow(y[i],2)+pow(fy2[i],2))/fs;
		}
	
		if(flag2==0)
		{
			for(i=0;i<=fcx/0.5;i++)
	           sumx+=pow(cc5x[i+1],3)*ffx[i]/freq[i];
			for(i=0;i<=fcy/0.5;i++)
	           sumy+=pow(cc5y[i+1],3)*ffy[i]/freq[i];
	           wls=7.08*pow(sumx,0.1);
	           wvs=7.08*pow(sumy,0.1);
		}
		flag1++;
		sumx=sumy=0;
        break;
	}

	case 6:
	{
		for(i=0;i<fs*2;i++)
		{
			cc6x[i]=sqrt(pow(x[i],2)+pow(fy1[i],2))/fs;
			cc6y[i]=sqrt(pow(y[i],2)+pow(fy2[i],2))/fs;
		}
	
		if(flag2==0)
		{
			for(i=0;i<=fcx/0.5;i++)
	           sumx+=pow(cc6x[i+1],3)*ffx[i]/freq[i];
			for(i=0;i<=fcy/0.5;i++)
	           sumy+=pow(cc6y[i+1],3)*ffy[i]/freq[i];
	           wls=7.08*pow(sumx,0.1);
	           wvs=7.08*pow(sumy,0.1);
		}
		flag1++;
		sumx=sumy=0;
        break;
	}

	case 7:
	{
		for(i=0;i<fs*2;i++)
		{
			cc7x[i]=sqrt(pow(x[i],2)+pow(fy1[i],2))/fs;
			cc7y[i]=sqrt(pow(y[i],2)+pow(fy2[i],2))/fs;
		}
	
		if(flag2==0)
		{
			for(i=0;i<=fcx/0.5;i++)
	           sumx+=pow(cc7x[i+1],3)*ffx[i]/freq[i];
			for(i=0;i<=fcy/0.5;i++)
	           sumy+=pow(cc7y[i+1],3)*ffy[i]/freq[i];
	           wls=7.08*pow(sumx,0.1);
	           wvs=7.08*pow(sumy,0.1);
		}
		flag1++;
		sumx=sumy=0;
        break;
	}
	
	case 8:
	{
		for(i=0;i<fs*2;i++)
		{
			cc8x[i]=sqrt(pow(x[i],2)+pow(fy1[i],2))/fs;
			cc8y[i]=sqrt(pow(y[i],2)+pow(fy2[i],2))/fs;
		}
	
		if(flag2==0)
		{
			for(i=0;i<=fcx/0.5;i++)
	           sumx+=pow(cc8x[i+1],3)*ffx[i]/freq[i];
			for(i=0;i<=fcy/0.5;i++)
	           sumy+=pow(cc8y[i+1],3)*ffy[i]/freq[i];
	           wls=7.08*pow(sumx,0.1);
	           wvs=7.08*pow(sumy,0.1);
		}
		flag1++;
		sumx=sumy=0;
		break;
	}

	case 9:
	{
		for(i=0;i<fs*2;i++)
		{
			cc9x[i]=sqrt(pow(x[i],2)+pow(fy1[i],2))/fs;
			cc9y[i]=sqrt(pow(y[i],2)+pow(fy2[i],2))/fs;
		}
	
		if(flag2==0)
		{
			for(i=0;i<=fcx/0.5;i++)
	           sumx+=pow(cc9x[i+1],3)*ffx[i]/freq[i];
			for(i=0;i<=fcy/0.5;i++)
	           sumy+=pow(cc9y[i+1],3)*ffy[i]/freq[i];
	           wls=7.08*pow(sumx,0.1);
	           wvs=7.08*pow(sumy,0.1);
		}
		flag1++;
		sumx=sumy=0;
        break;
	}
	
	case 10:
	{
		for(i=0;i<fs*2;i++)
		{
			cc10x[i]=sqrt(pow(x[i],2)+pow(fy1[i],2))/fs;
			cc10y[i]=sqrt(pow(y[i],2)+pow(fy2[i],2))/fs;
		}

		flag1=1;
		flag2=1;
		break;

	}
}
	if(flag2==1)
	{
		for(i=0;i<fs*2;i++)
		{
			ccx[i]=(cc1x[i]+cc2x[i]+cc3x[i]+cc4x[i]+cc5x[i]+cc6x[i]+cc7x[i]+cc8x[i]+cc9x[i]+cc10x[i])/10;
			ccy[i]=(cc1y[i]+cc2y[i]+cc3y[i]+cc4y[i]+cc5y[i]+cc6y[i]+cc7y[i]+cc8y[i]+cc9y[i]+cc10y[i])/10;
		}

		for(i=0;i<=fcx/0.5;i++)
	      sumx+=pow(ccx[i+1],3)*ffx[i]/freq[i];
	    for(i=0;i<=fcy/0.5;i++)
	      sumy+=pow(ccy[i+1],3)*ffy[i]/freq[i];
	      wls=7.08*pow(sumx,0.1);
	      wvs=7.08*pow(sumy,0.1);
		  sumx=sumy=0;
	}

	sx.Format(_T("%.3f"),wls);
	sy.Format(_T("%.3f"),wvs);
	
	UpdateData(TRUE);
	m_strx=sx;
    UpdateData(FALSE);
	UpdateData(TRUE);
	m_stry=sy;
    UpdateData(FALSE);
	for(i=0;i<7;i++)
	{
		strx[i]='0';
		stry[i]='0';
	}

   _gcvt(wls,5,strx);
   strx[5]=' ';
   strx[6]=' ';

   _gcvt(wvs,5,stry);
   stry[5]=0x0D;
   stry[6]=0X0A;


   bFile=CreateFile(_T("\\My Documents\\test\\results.txt"),GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);   
   GetFileTime(bFile,NULL,NULL,&filetime);	
   FileTimeToLocalFileTime(&filetime,&localtime);
   FileTimeToSystemTime(&localtime,&st);      
   sprintf(stime,"%4d-%02d-%02d  %02d:%02d:%02d",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
   stime[20]=' ';
   stime[21]=' ';
        
   FileSize=GetFileSize(bFile,NULL);
		  if(FileSize==0)
		  {  		    
			 strcat(bt,fh);	        
			 SetFilePointer(bFile,0,NULL,FILE_END);
	         WriteFile(bFile,bt,32,&a,NULL);
		  }

		  {

               SetFilePointer(bFile,0,NULL,FILE_END);
               WriteFile(bFile,stime,22,&b,NULL);
               SetFilePointer(bFile,0,NULL,FILE_END);
               WriteFile(bFile,strx,7,&c,NULL);
			   SetFilePointer(bFile,0,NULL,FILE_END);
               WriteFile(bFile,stry,7,&d,NULL);

		  }

}

void CTestDlg::rfft(double x[],double y[],int n)
{
	int i,j,k,m,i1,i2,i3,i4,n1,n2,n4;
	double a,e,cc,ss,xt,t1,t2;
	for(j=1,i=1;i<16;i++)
	{
		m=i;
		j=2*j;
		if(j==n) break;
	}
	n1=n-1;
	for(j=0,i=0;i<n1;i++)
	{
		if(i<j)
		{
			xt=x[j];
			x[j]=x[i];
			x[i]=xt;
		}
		k=n/2;
		while(k<(j+1))
		{
			j=j-k;
			k=k/2;
		}
		j=j+k;
	}
	for(i=0;i<n;i+=2)
	{
		xt=x[i];
		x[i]=xt+x[i+1];
		x[i+1]=xt-x[i+1];
	}
	n2=1;
	for(k=2;k<=m;k++)
	{
		n4=n2;
		n2=2*n4;
		n1=2*n2;
		e=6.28318530718/n1;
		for(i=0;i<n;i+=n1)
		{
			xt=x[i];
			x[i]=xt+x[i+n2];
			x[i+n2]=xt-x[i+n2];
			x[i+n2+n4]=-x[i+n2+n4];
			a=e;
			for(j=1;j<=(n4-1);j++)
			{
				i1=i+j;
				i2=i-j+n2;
				i3=i+j+n2;
				i4=i-j+n1;
				cc=cos(a);
				ss=sin(a);
				a=a+e;
				t1=cc*x[i3]+ss*x[i4];
				t2=ss*x[i3]-cc*x[i4];
				x[i4]=x[i2]-t2;
				x[i3]=-x[i2]-t2;
				x[i2]=x[i1]-t1;
				x[i1]=x[i1]+t1;
			}
		}
	}
	y[0]=y[n/2]=0.;
	for(i=1;i<n/2;i++)
		y[i]=x[n-i];
	for(i=n/2+1;i<n;i++)
	{
		y[i]=-x[i];
		x[i]=x[n-i];
	}

}
void CTestDlg::zuotu(double xy[])
{
	int i;
	double a[512];
	m_2DGraph.m_crLineColor = RGB(136,253,57); //曲线颜色
	for(i=0;i<512;i++)
		a[i]=i+1;	
	m_2DGraph.AppendPoint(a,xy);	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -