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

📄 ultrasonicview.cpp

📁 接收来自下位机的数据,然后进行数据处理和通讯
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// UltrasonicView.cpp : implementation of the CUltrasonicView class
//
#include "stdafx.h"
#include "Ultrasonic.h"
#include "UltrasonicDoc.h"
#include "UltrasonicView.h"
#include "iostream.h"
#include "fstream.h"
#include "ParaDlg.h"
#include "RecDll.h"
#include "parameter.h"

#include"inputpara.h"
#include"cptime.h"
//#include <windows.h>
#include <math.h>                   // for exp(), log(), and log10()
#include <stdlib.h>
#include <stdio.h>

#include "WaveDlg.h"
#include "AllWaveDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CUltrasonicView
 int Allnum,channelnum,hisornow,realorhis;
 int RxData[9][24576];
 int RxDatab[9][12288];
 int RxDataOld[9][24576];
 int RxDataOldb[9][12288];
 CString strDate,strf,CurrentDirectory;
 int rxnum[9],rxoldnum[9];
 int channel,cha123[9];
 int com;
 int numx;
 int zoom,xcenter,oldcenter,adjust,tz,xzhou=0;
 int m_kk1,m_kk2,m_kk3,m_kk4,m_kk5,m_kk6,m_kk7,m_kk8,m_kk9;
 int l,v1,v2,ll,vv1,vv2,jt;
 float ratio,m_k;
 int showdata,showwave;
 int chus=16;//纵向缩小因子
 BYTE rxdata[262144]; //设置BYTE数组 An 8-bit integerthat is not signed.
 bool IsCH1=true,IsCH2,IsCH3,IsCH4,IsCH5,IsCH6,IsCH7,IsCH8,IsCH9;
 bool IsS1=true,IsS2,IsS3,IsS4,IsN1,IsN2,IsN3,IsN4;
 IMPLEMENT_DYNCREATE(CUltrasonicView, CFormView)

BEGIN_MESSAGE_MAP(CUltrasonicView, CFormView)
	//{{AFX_MSG_MAP(CUltrasonicView)
	ON_BN_CLICKED(IDC_BUTTON_OPENSERIAL, OnOpenserial)
	ON_BN_CLICKED(IDC_BUTTON_SENDCOMMAND, OnSendcommand)
	ON_COMMAND(ID_VIEWDATA_NOW, OnViewdataNow)
	ON_CBN_SELCHANGE(IDC_CH, OnSelchangeCh)
	ON_BN_CLICKED(IDC_BUTTON_ClearRX, OnBUTTONClearRX)
	ON_BN_CLICKED(IDC_RealTimeWave, OnRealTimeWave)
	ON_BN_CLICKED(IDC_HistoryWave, OnHistoryWave)
	ON_COMMAND(ID_SET_PARAMETER, OnSetParameter)
	ON_COMMAND(ID_VIEWWAVE_CH1, OnViewwaveCh1)
	ON_COMMAND(ID_VIEWWAVE_CH2, OnViewwaveCh2)
	ON_COMMAND(ID_VIEWWAVE_CH3, OnViewwaveCh3)
	ON_COMMAND(ID_VIEWWAVE_CH4, OnViewwaveCh4)
	ON_COMMAND(ID_VIEWWAVE_CH5, OnViewwaveCh5)
	ON_COMMAND(ID_VIEWWAVE_CH6, OnViewwaveCh6)
	ON_COMMAND(ID_VIEWWAVE_CH7, OnViewwaveCh7)
	ON_COMMAND(ID_VIEWWAVE_CH8, OnViewwaveCh8)
	ON_COMMAND(ID_VIEWWAVE_ALL, OnViewwaveAll)
	ON_BN_CLICKED(IDC_zoom, Onzoom)
	ON_BN_CLICKED(IDC_zoom_up, Onzoomup)
	ON_BN_CLICKED(IDC_zoom_down, Onzoomdown)
	ON_WM_LBUTTONDOWN()
	ON_WM_HSCROLL()
	ON_BN_CLICKED(IDC_showdata, Onshowdata)
	ON_BN_CLICKED(IDC_showwave, Onshowwave)
	ON_COMMAND(ID_automatic_adjust, Onautomaticadjust)
	ON_WM_VSCROLL()
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_COMMAND(ID_TecPlot_Format, OnTecPlotFormat)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, OnCustomdrawSlider1)
	ON_COMMAND(ID_STATISTIC_PARAMETER, OnStatisticParameter)
	ON_COMMAND(ID_COEFFICIENT, OnCoefficient)
	ON_COMMAND(ID_PARAMETER_READ, OnParameterRead)
	ON_BN_CLICKED(IDC_BUTTON_receive, OnBUTTONreceive)
	ON_COMMAND(ID_mAc6111_Format, OnmAc6111Format)
	ON_BN_CLICKED(IDC_RESULT_SAVE, OnResultSave)
	ON_COMMAND(ID_COMPUTE_TIME, OnComputeTime)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUltrasonicView construction/destruction

CUltrasonicView::CUltrasonicView()
	: CFormView(CUltrasonicView::IDD)
{
	//{{AFX_DATA_INIT(CUltrasonicView)
	m_strRXData = _T("");
	m_strTXData = _T("");
	m_realorhis = 0;          //0为当前波形,1为历史波形
	m_path = _T("");
	m_3 = 0;
	m_2 = 0;
	m_chnow = _T("");
	m_bandrate =0;
	m_data = 0;
	m_parity = 0;
	m_com = _T("0");
	m_stop = 0;
	m_1 = 0.0f;
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CUltrasonicView::~CUltrasonicView()
{
}

void CUltrasonicView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUltrasonicView)
	DDX_Control(pDX, IDC_SLIDER1, m_Slider);
	DDX_Control(pDX, IDC_PROGRESS1, m_Progress);
	DDX_Control(pDX, IDC_SCROLLBAR2, m_Scroll1);
	DDX_Control(pDX, IDC_showwave, m_showwave);
	DDX_Control(pDX, IDC_showdata, m_showdata);
	DDX_Control(pDX, IDC_SCROLLBAR1, m_Scroll);
	DDX_Control(pDX, IDC_CH, m_CH);
	DDX_Control(pDX, IDC_BUTTON_OPENSERIAL, m_openserial);
	DDX_Control(pDX, IDC_MSCOMM1, m_ctrlComm);
	DDX_Text(pDX, IDC_RXData, m_strRXData);
	DDX_Text(pDX, IDC_TXData, m_strTXData);
	DDX_Radio(pDX, IDC_RealTimeWave, m_realorhis);
	DDX_Text(pDX, IDC_Path, m_path);
	DDX_Text(pDX, IDC_EDIT12, m_3);
	DDX_Text(pDX, IDC_EDIT11, m_2);
	DDX_Text(pDX, IDC_chnow, m_chnow);
	DDX_Text(pDX, IDC_bandrate, m_bandrate);
	DDX_Text(pDX, IDC_data, m_data);
	DDX_Text(pDX, IDC_parity, m_parity);
	DDX_Text(pDX, IDC_showcom, m_com);
	DDX_Text(pDX, IDC_stop, m_stop);
	DDX_Text(pDX, IDC_EDIT10, m_1);
	//}}AFX_DATA_MAP
}

BOOL CUltrasonicView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

int GetCurrentPath(CString &strCurrentPath) 
{ 
// 获取当前路径, 
int returnCode = GetCurrentDirectory(MAX_PATH,strCurrentPath.GetBuffer(MAX_PATH)); 
strCurrentPath.ReleaseBuffer(); 
return returnCode; 
} 

void CUltrasonicView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
//	Record();
    for(int i=0;i<9;i++) 
		for(int j=0;j<32000;j++)  
			RxData[i][j]=-1;
    for(i=0;i<9;i++) 
		for(int j=0;j<32000;j++)  
			RxDataOld[i][j]=-1;
	for(i=0;i<9;i++)  {rxnum[i]=0;rxoldnum[i]=0;}
//	IsCH1=IsCH2=IsCH3=IsCH4=IsCH5=IsCH6=IsCH7=IsCH8=true;//默认八个通道均使用
	CString str[9]={"通道一","通道二","通道三","通道四","通道五","通道六","通道七","通道八","速度通道"};
    int nIndex;
	for(int p=0;p<9;p++)
	{
	  nIndex=m_CH.AddString(str[p]);
	  m_CH.SetItemData(nIndex,p);

	}
	oldcenter=xcenter=6000;
	zoom=0;ratio=1;
	GetDlgItem(IDC_zoom)->EnableWindow(true);
    GetDlgItem(IDC_zoom_up)->EnableWindow(true);
    GetDlgItem(IDC_zoom_down)->EnableWindow(true);
	m_Scroll.SetScrollRange(0,1200);//2000
	m_Scroll1.SetScrollRange(1,32);
    m_Scroll1.SetScrollPos(16);
	m_Slider.SetRange(0,28,TRUE);
	m_Slider.SetPos(0);
    m_Slider.SetTicFreq(2);
	m_Slider.SetLineSize(1);
	m_Slider.SetPageSize(2);
	m_CH.SetCurSel(0);
	m_Progress.SetRange(0,200);
    m_Progress.SetPos(0);
	m_Progress.SetStep(1);
   ((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(0);	
	showdata=showwave=1;
    channel=0;realorhis=0;
	Allnum=0;channelnum=0;tz=0;
    SYSTEMTIME st;
	com=0;
    CString strTime;
    GetLocalTime(&st);
    strDate.Format("%d-%d-%d ",st.wYear,st.wMonth,st.wDay);
    strTime.Format("%d-%d",st.wHour,st.wMinute);//-%d,st.wSecond.txt
    strf= strDate+ strTime;

 //  GetCurrentDirectory(10,lpBuffer);
//   CurrentDirectory.Format("%s",lpBuffer);
   GetCurrentPath(CurrentDirectory);
   DWORD dwAttr = GetFileAttributes("实验数据");//
   if(dwAttr == 0xFFFFFFFF)  //文件夹不存在
   CreateDirectory("实验数据",NULL);//"实验数据\\"+
   SetCurrentDirectory("实验数据");

   dwAttr = GetFileAttributes(strDate+"数据");//
   if(dwAttr == 0xFFFFFFFF)  //文件夹不存在
   CreateDirectory(strDate+"数据",NULL);//"实验数据\\"+
   SetCurrentDirectory(strDate+"数据");

//   	strf+=m_chnow;//文件名为时间加通道

}

/////////////////////////////////////////////////////////////////////////////
// CUltrasonicView printing

BOOL CUltrasonicView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CUltrasonicView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CUltrasonicView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

void CUltrasonicView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
	// TODO: add customized printing code here
}

/////////////////////////////////////////////////////////////////////////////
// CUltrasonicView diagnostics

#ifdef _DEBUG
void CUltrasonicView::AssertValid() const
{
	CFormView::AssertValid();
}

void CUltrasonicView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CUltrasonicDoc* CUltrasonicView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CUltrasonicDoc)));
	return (CUltrasonicDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CUltrasonicView message handlers

void CUltrasonicView::OnDraw(CDC* pDC) 
{
	// TODO: Add your specialized code here and/or call the base class
	
    CUltrasonicDoc* pDoc=GetDocument();
	CDC MemDC;
  	MemDC.CreateCompatibleDC(pDC);
	CBitmap MemBitmap;
     MemBitmap.LoadBitmap(IDB_background);
	BITMAP bm;
    MemBitmap.GetObject(sizeof(BITMAP),&bm);
    //MemBitmap.CreateCompatibleBitmap(pDC,800,256);
    CBitmap *pOldbmp=MemDC.SelectObject(&MemBitmap);
	int zw=129;//零位
	//用MemDC画图
    CPen Pen,Pen2,Pen3,Pen4;
    Pen.CreatePen(PS_SOLID, 1, RGB(200, 200,200,));
    Pen2.CreatePen(PS_SOLID, 1, RGB(0, 0,0,));
    Pen3.CreatePen(PS_SOLID, 1, RGB(0, 0,150,)); 
    Pen4.CreatePen(PS_SOLID, 1, RGB(150, 0,0,)); 
	   	 

			 MemDC.SelectObject(&Pen);
			for(int i=251;i>=0;i-=10)
			{   
		      MemDC.MoveTo(0,i);
              MemDC.LineTo(12000,i);
			}//画横线

             MemDC.SelectObject(&Pen);   
          if(channel!=8)
		  {for(i=0;i<=12000;i+=400) 
			{   
	  	      MemDC.MoveTo(i,0);
              MemDC.LineTo(i,256);
			}
		  }//画竖线
		  else
           {
			  for(i=88;i<=12000;i+=101) 
			  {   
	  	      MemDC.MoveTo(i,0);
              MemDC.LineTo(i,256);
			  }
		  }//画竖线(速度)
		    
			  CFont font0,font1;

		font0.CreateFont(
                          14,                        // nHeight
                          160/ratio,                         // nWidth
                          0,                         // nEscapement
                          0,                         // nOrientation
                          5,                      // nWeight,FW_NORMAL
                          FALSE,                     // bItalic
                          FALSE,                     // bUnderline
                          0,                         // cStrikeOut
                          ANSI_CHARSET,              // nCharSet
                          OUT_STROKE_PRECIS,        // nOutPrecision,OUT_DEFAULT_PRECIS
                          CLIP_DEFAULT_PRECIS,       // nClipPrecision
                          PROOF_QUALITY,           // nQuality,DEFAULT_QUALITY
                          DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
                          _T("Arial"));
	                     MemDC.SelectObject(&font0);
	                     MemDC.SetTextColor(RGB(0,0,255));

       
 		font1.CreatePointFont(116, "Batang");
//		MemDC.SelectObject(&font0);
//		MemDC.SetTextColor(RGB(255,0,0));
//		MemDC.TextOut(80,128,"0");
		if(channel==8)
		{ m_Scroll.ShowScrollBar(FALSE);m_Scroll1.ShowScrollBar(FALSE);}
		else
        { m_Scroll.ShowScrollBar(TRUE);m_Scroll1.ShowScrollBar(TRUE);}
        if(channel!=8)
        {
             MemDC.SelectObject(&Pen2);
             MemDC.MoveTo(0,zw);
             MemDC.LineTo(24000,zw); //画横轴
			 MemDC.SelectObject(&Pen3);
             MemDC.MoveTo(0,zw+49);
             MemDC.LineTo(24000,zw+49); 
			 MemDC.MoveTo(0,zw-49);
             MemDC.LineTo(24000,zw-49); 
             MemDC.SelectObject(&Pen4);
             MemDC.MoveTo(0,zw+49*2);
             MemDC.LineTo(24000,zw+49*2); 
			 MemDC.MoveTo(0,zw-49*2);
             MemDC.LineTo(24000,zw-49*2); 

		    intialpara();
           

		char ss[8];int xend;
		sprintf(ss,"%4.2f",m_k*chus/20.33);//3.85*16=61.6,0.24,******0.06

		xend=xcenter+int(6000/ratio)-700/ratio; //标度横向位置 
		MemDC.TextOut(xend,74,ss);//9,382-49,
        
		sprintf(ss,"%4.2f",2*m_k*chus/20.33);//0.12
		MemDC.TextOut(xend,25,ss);	
        pDC->TextOut(865,382-49,"(KPa)");
		pDC->TextOut(865,382-49*2,"(KPa)");
		}
        else
		{int yt=51;//47
        pDC->SelectObject(&font1);
		pDC->TextOut(865,382-49*2,"公里/小时");
		pDC->TextOut(28, 516-yt,"50");
		pDC->TextOut(20, 516-yt*2,"100");
		pDC->TextOut(20, 516-yt*3,"150");
		pDC->TextOut(20, 516-yt*4,"200");
		pDC->TextOut(20, 516-yt*5,"250");
		pDC->TextOut(20, 516-yt*6,"300");
		if(zoom==0)
		{int sht=79;
		pDC->SetTextColor(RGB(80,0,220));
		pDC->TextOut(28+sht, 516,"10");
		pDC->TextOut(28+sht*2, 516,"20");
		pDC->TextOut(28+sht*3, 516,"30");
		pDC->TextOut(28+sht*4, 516,"40");
		pDC->TextOut(28+sht*5, 516,"50");
		pDC->TextOut(28+sht*6, 516,"60");
		pDC->TextOut(28+sht*7, 516,"70");
		pDC->TextOut(28+sht*8, 516,"80");
		pDC->TextOut(28+sht*9, 516,"90");
		}
		pDC->TextOut(848,516,"米");
		}
//		pDC->TextOut(6,382+49,"-3.85");
//		pDC->TextOut(6,382+49*2,"-7.7");

 	if(m_realorhis==0)
	{
		    
           MemDC.SelectObject(&Pen2);
	    if(showwave==1 && Allnum>=24575 && channel!=8)//
		{
           	int j=0,t1,t2;
		    for(i=0;i<rxnum[channel]-1 ;i++,i++) //  32000
			{   
			if((int)(RxData[channel][i]&0x8)==0)
			  RxDatab[channel][j]=(RxData[channel][i]&0x7)*256+RxData[channel][i+1];  //补码转换	
            else
              RxDatab[channel][j]=-((((RxData[channel][i]&0x7)*256+RxData[channel][i+1])^0x7FF)+1);  //要改
            j++;   
			} 
	       int  temp[65000],i,nl;

           //负延迟处理	
		        int w1,w2,tp1,tp2;
				tp1=RxData[channel][24573];
				tp2=RxData[channel][24572];
				w1= (tp2*256+tp1)/16;
				//w1= RxDatab[channel][1]/16;
				w2=1664-w1;
				for(i=2;i<w1;i++) //1443=23088/2/8(5A30H)
				temp[12287-i-w2]=RxDatab[channel][12287-i];//+3536
				for(i=1;i<=w2+1;i++)
					temp[12287-i]=RxDatab[channel][12287-i-w1];
				for(i=1;i<1664;i++)//1664=26624/2/8(6800H)
					RxDatab[channel][12287-i]=temp[12287-i];
				//****************************

	       nl=xzhou;
	       for (j=nl+1;j<Allnum/2-nl;j++)
		   {
		      long int s1=0,s2=0,s3=0;
		      for (i=0;i<=nl;i++)
			  { s1=s1+RxDatab[channel][j+i]; 
			    s2=s2+RxDatab[channel][j-i]; 
			  } 
              s3=s1+s2-RxDatab[channel][j]; 

⌨️ 快捷键说明

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