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

📄 speedcollect.cpp

📁 采集电压 用研华6220板卡采集电压值 实时显示 电压变化
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// SpeedCollect.cpp : implementation file
//

#include "stdafx.h"
#include "CSpeed.h"
#include "SpeedCollect.h"
#include "public.h"
#include "CSpeedSet.h"

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

#define PI 3.1415926
#define STARTX 0 
#define STARTX1 20
#define STARTX2 220
#define STARTX3 420
#define STARTY1 290//395


#define MIDDOW_LENTH 225//400 
#define BOTTOM_LENTH 30 


/////////////////////////////////////////////////////////////////////////////
// SpeedCollect dialog


SpeedCollect::SpeedCollect(CWnd* pParent /*=NULL*/)
	: CDialog(SpeedCollect::IDD, pParent), CMMTimers(1)
{
	//{{AFX_DATA_INIT(SpeedCollect)
	m_str = _T("");
	//}}AFX_DATA_INIT
}


void SpeedCollect::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(SpeedCollect)
	DDX_Control(pDX, IDC_DISPLAY, m_Canvas);
	DDX_Text(pDX, IDC_EDIT, m_str);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(SpeedCollect, CDialog)
	//{{AFX_MSG_MAP(SpeedCollect)
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_WM_PAINT()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// SpeedCollect message handlers

void SpeedCollect::OnCancel() 
{
	// TODO: Add extra cleanup here
	CFrameWnd *pFrame=GetParentFrame();
	CView *pView=pFrame->GetActiveView();
    pView->PostMessage(WM_DIALOG,IDCANCEL);
	
	CDialog::OnCancel();
	CDialog::OnCancel();
}

int SpeedCollect::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	m_pos=int(ControlParam.run_time);
	m_pos_h=m_pos/3600;
	m_pos_m=(m_pos-m_pos_h*3600)/60;
	m_pos_s=m_pos-m_pos_h*3600-m_pos_m*60;
	m_str.Format("%4d:%2d:%2d",m_pos_h,m_pos_m,m_pos_s);

	strcpy(OldT,"          ");
	strcpy(OldT1,"          ");
	strcpy(OldT2,"          ");
	strcpy(OldSpeed,"         ");
	strcpy(OldT,"               ");
	strcpy(OldCP,"              ");

	return 0;
	
}

void SpeedCollect::OnDestroy() 
{
	KillTimer(1);
	stopTimer();
	OutAlarmLampOn(TRUE);
	dcMemory.DeleteDC();
  
	bitmap.Detach();
    bitmap.DeleteObject();
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	
}

void SpeedCollect::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	CWnd * pwnd=GetDlgItem(IDC_DISPLAY);
	CPaintDC dc1(pwnd); // device context for painting
	dc1.BitBlt(0,0,WRect.Width() ,WRect.Height(),&dcMemory,0,0,SRCCOPY);
	ReleaseDC(&dc1);
	dc.SetBkColor(GetSysColor(COLOR_BTNFACE));//设置背景颜色;


	dc.TextOut(STARTX1,STARTY1, "时间(h:m:s):");
	dc.TextOut(STARTX2,STARTY1, "车速(km/h):");
	dc.TextOut(STARTX3,STARTY1, "转速 (rpm):");
	

	CFont myFont;
   	CFont *pFont=GetFont(); 
    LOGFONT lf;
    if(pFont!=NULL)
   	    pFont->GetObject(sizeof(LOGFONT),&lf);
	else
		::GetObject(GetStockObject(SYSTEM_FONT),sizeof(LOGFONT),&lf);

	lf.lfHeight=21;
	lf.lfWidth=7;

	myFont.CreateFontIndirect(&lf); 
	CFont *PreFont=dc.SelectObject(&myFont);
	CString Result;
	double comp_v;
	comp_v= (ControlParam.OtherParam.v_max*100)/(fr*6);
	Result.Format (" %5.0f ",comp_v);


		dc.TextOut(5,5, Result);
		dc.TextOut(10,27, "(r/min)");

		Result.Format (" %4.1f ",ControlParam.OtherParam.v_max);
		dc.SetTextColor(RGB(0,128,128));
		dc.TextOut(65,5, Result);
		dc.TextOut(65,27, "(km/h)");

		dc.SetTextColor(RGB(0,128,0));//绿
	

	ReleaseDC(&dc);
	
//加入设定曲线
	strcpy(OldT,"          ");
	strcpy(OldT1,"          ");
	strcpy(OldT2,"          ");
	strcpy(OldSpeed,"         ");
	strcpy(OldCP,"              ");
	// Do not call CDialog::OnPaint() for painting messages
}

BOOL SpeedCollect::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	set_t=0;
	set_t0 =int( ControlParam.run_time);
	set_num=ControlParam.RunDataArray.start_num;
	repaint=TRUE;

	SampleParam.speed_meas_t=0.;
 	SampleParam.speed_meas_v=0.;
	//=========获取及时时间======//
				SYSTEMTIME  tim;  
					::GetSystemTime(&tim);
			    
				xt = tim.wMinute*60*1000+tim.wSecond*1000+tim.wMilliseconds;
	//===========================//

	array_searchcurve.RemoveAll();//测量数据清除
	mypaintpoint.RemoveAll();//绘图数据清除

	num_i=0;

	Change=FALSE;

	////////////初始化dcmemory/////////////////////
	CWnd * pwnd=GetDlgItem(IDC_DISPLAY);
	pwnd->GetClientRect(&WRect);

	PENREADY=FALSE;


	UpdateData(FALSE);
	////////////初始化dcmemory/////////////////////
	CClientDC dc(pwnd);
	dcMemory.CreateCompatibleDC(&dc);
	bitmap.CreateCompatibleBitmap(&dc,WRect.Width(),WRect.Height()); //创建一个和dc相同的dcmemory
	dcMemory.SelectObject(&bitmap);
	CRgn cliprgn;
	cliprgn.CreateRectRgnIndirect(&WRect);
	dcMemory.SelectClipRgn(&cliprgn);
	ClearDcMemory();
	//////////////////////////////////////////////
	nTime = 0;
	cur_sec = 0;

	Sample(FALSE);
	
	

	startTimer(10,FALSE);
	SetTimer(1,200,NULL);//300
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void SpeedCollect::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
		
	if(nIDEvent==1)
	{

		
		while(_inp(SysParam.basein+0))count++;
		
		// address to receive termination status 
		if(count==0)
		{
			CClientDC dc(this); // device context for painting
			
				addrecord();
			
		
			///加载模式曲线画实际图像

			g_mutex.Lock();
			int size = mypaintpoint.GetSize();
			g_mutex.Unlock();
			if(size>0)
				x0=int(STARTX+MIDDOW_LENTH-2*mypaintpoint[size-1].t);//像素点平移
			else
		        x0=int(STARTX+MIDDOW_LENTH-2*set_t0-2*SampleParam.speed_meas_t);

	
            {
			
				ClearDcMemory();
				DrawCoordinate();
				DrawGrid();
				DrawSampleVCurve();//画速度
				DrawSampleRVCurve();//画转速
				DrawAll();
				Invalidate(FALSE);			
			}
			
		}
		else
		{
			KillTimer(1);
			stopTimer();
			c_mutex.Lock();
			ControlParam.run_time=SampleParam.speed_meas_t;
			ControlParam.canrun_time+=SampleParam.count_t;
			c_mutex.Unlock();

			addrecord();
			SaveFilex();
			EndDialog(0);
		
		}
	}
	CDialog::OnTimer(nIDEvent);
}

void SpeedCollect::addrecord()
{
	//save file
	//save file
	
	CCSpeedSet *pSet=new CCSpeedSet();
	try{
		pSet->m_strFilter="speed_style=?";
		pSet->m_test_no=ControlParam.speed_model;
		if(pSet->Open())
		{
			pSet->AddNew();	
			//
			//
			pSet->m_test_no=ControlParam.speed_model;
			pSet->m_test_date=COleDateTime::GetCurrentTime();

			pSet->m_test_v=ControlParam.OtherParam.v_max;
			pSet->m_test_t=ControlParam.run_time;
			pSet->m_test_rv=(ControlParam.OtherParam.v_max)/((ControlParam.OtherParam.r)*2*PI);
	

			if(pSet->Update())
				TRACE("Record Added\n");
			else
				TRACE("Record Not Added\n"); 
			pSet->Close();
		}
	}
	catch(CDBException *p)
	{
		p->ReportError(MB_OK,0);

		
		p->Delete();
	}
	delete pSet;


}

void SpeedCollect::SaveFilex()
{
	g_mutex.Lock();//加锁
    int lenth=array_searchcurve.GetSize();
	CString ttt;
	ttt.Format("%s\\data\\%s.ddx", exepath, ControlParam.speed_model);
	CFile xzfile;

	if(xzfile.Open(ttt,CFile::modeWrite))
	{
		int len;
		len=xzfile.GetLength();
		if(len<=0)
		{
			xzfile.SeekToEnd();
			SPEEDSAMPLE point0;
			point0.t=0.;
			point0.test_v=0.;
	

			xzfile.Write(&point0,sizeof(SPEEDSAMPLE));
		}
	       xzfile.SeekToEnd();
		   for(int i=0; i<lenth; i++)
		       xzfile.Write(&array_searchcurve[i],sizeof(SPEEDSAMPLE));

	}
	xzfile.Close();

	array_searchcurve.RemoveAll();
	g_mutex.Unlock();//加锁

}
void SpeedCollect::ClearDcMemory()
{
	dcMemory.SelectStockObject(BLACK_PEN);

	dcMemory.BitBlt(0,0,WRect.Width() ,WRect.Height(),&dcMemory,0,0,WHITENESS);
    dcMemory.BitBlt(0,0,WRect.Width() ,WRect.Height(),&dcMemory,0,0,WHITENESS);

	zero=int(WRect.bottom-BOTTOM_LENTH);
	dcMemory.MoveTo(0,int(zero));
	dcMemory.LineTo(WRect.right,int(zero));


}
void SpeedCollect::DrawCoordinate()
{
	dcMemory.MoveTo(STARTX+MIDDOW_LENTH,zero);
	dcMemory.LineTo(STARTX+MIDDOW_LENTH,zero+60);

	set_t =0;
	while(x0+2*set_t0+2*set_t<STARTX-MIDDOW_LENTH)
		set_t+=100;

	CString lcx;
	int dd, dd1,dd2;
	dd = (int)set_t0 ;
	dd1 = (int)set_t;
	dd2 = (int)(set_t0 + set_t);

	lcx.Format("%d + %d", dd, dd1);

⌨️ 快捷键说明

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