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

📄 cgedoc.cpp

📁 《面向对象程序设计实用教程》一书的源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
   //用正弦曲线模拟数据
   if(!m_CMyLineList.IsEmpty())
   {	
		//m_CMyLineList.RemoveAll();// CAge's aren't destroyed.	
		//ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.			
		CMyLine *pMyLine;
		POSITION ps;
		ps = m_CMyLineList.GetHeadPosition();
		while ( ps != NULL )
		{			
			pMyLine = (CMyLine *)m_CMyLineList.GetNext(ps);
			delete pMyLine; // Now delete the CAge objects.
		}
		m_CMyLineList.RemoveHead();
		m_CMyLineList.RemoveAll();// CAge's aren't destroyed.	
		
		ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.			

   }

	for( i=0;i<Num_Line;i++)
	{
		for( j=0;j<Num_Pointes;j++)
		{      
    		//y = 21448 * sin(j*0.0314159); //m_stepY = 60;i*basline+			
			y = 32768 * sin(j*0.0314159); //模拟原始数据
			//而实际采样数据 512*x = 512* y / 放大倍数
			//其中y是从硬件直接获得的数据,x是硬件放大器放大以前的数据,
			//其中512是归一系数
			//stepY
			AddLine(y);		 		 
		  //m_dlg.StepIt(); //修改进度条的值		 
		}   
		m_dlg.StepIt(); //修改进度条的值		 

	}

	m_dlg.DestroyWindow ();

	//调用绘图函数(直接使用链表中的数据)
	
	SetModifiedFlag(true);//设置修改标志为真,提醒存盘    
	caiyangKey = false;
	drawlineKey = true;
	Y_Max(); //获得最大值
	E_Value(); //获得算术平均值

	//OnYmanping();
	Num_TimelabelStep = (int(Num_Pointes / m_TimelabelStep) + 1) * m_TimelabelStep;	
	pView->GetClientRect (&ViewRect);
	basline = ViewRect.bottom*1.0 / (Num_Line + 1);
	m_stepY0 = 3.0*basline/(32768*512.0);	//m412
	if(Num_Line != 2)
	{
		basline = (ViewRect.bottom*1.0-3*basline) / (Num_Line + 1);
	}else
	{	
		basline = (ViewRect.bottom*1.0-2*basline) / (Num_Line + 1);
	}
//	m_viewY0 = 3*basline;//m412
	m_HAddX = 50;
	m_stepX = 1;	
	m_stepY0 = 3.0*basline/(32768*512.0);	//m412	
	//标准时以下面的步长为基准将样点放大6dB的整数倍
	//m_stepY = pow(2,int(log(32768*512/m_maxY)/log(2)) )* m_stepY0; //1000/0x7fffffff //纵向比例				
	m_stepY = pow(2,int(log(m_averY)/log(2)) )* m_stepY0;
	//m611
	//m_viewY0 = m_maxY * m_stepY + 2;
	
	m_viewY0 = basline;
	
	double tempx,mlog2;
	tempx = log(m_stepY/m_stepY0);
	mlog2 = log(2);
	m_Ndb = tempx/mlog2;	
	
	m_H = 0;
	
	
	m_xyAxisSize.cx = m_viewX0 + Num_TimelabelStep + m_HAddX ;			
	m_xyAxisSize.cy = (Num_Line + 1) * basline ;//修改纵向滚动轴
	
//m412

	s[9].Format("%d", 1) ;
	m_Mcishu = 1;
	UpdateAllViews(NULL);  //立刻画线
	canshuKey = false;
	drawlineKey = false;	

	olddataKey = false;// 采样后是新数据
}

BOOL CCgeDoc::yiqi_zjiaozhun()
{

	MyTTY.CloseConnection(); //关闭串口
	//初始化串口
	MyTTY.ComPort = m_com;
	MyTTY.CreateTTYInfo();
	if(MyTTY.OpenConnection() == FALSE)
		return false;		

	BYTE testbyte=0x0f; //仪器自校准	
	BOOL bret;
	int nLength;
	BYTE abIn[1];
//	char s_abIn[10];
	CString sd;
	DWORD dwwritenlen;	
	int Iepp0;
	float Temp_Data_v0[512];
	
	POSITION Position;
	Position = GetFirstViewPosition();
	CView* pVView = GetNextView(Position);
	CCgeView *pView;
	while(pVView!=NULL)
	{
		if(pVView->IsKindOf(RUNTIME_CLASS(CCgeView)))
		{ break;};
		pVView = GetNextView(Position);
	}
	pView = (CCgeView *)pVView;
	CProgressDlg m_dlg;	
	m_dlg.Create (pView);  //(this);
	m_dlg.SetWindowText(_T("              仪器正在校准"));
	m_dlg.SetRange (0,120);
	//m_dlg.SetRange (0,Num_Line);
    m_dlg.SetPos (10);
    //m_dlg.SetStep (1);   
	m_dlg.SetStep (10); //(Num_Line/4);  
	//读第一片
	if (MyTTY.npTTYInfo!=NULL)
	{		
		bret = WriteCommBlock( MyTTY.npTTYInfo, &testbyte , 1,&dwwritenlen); //(DWORD )strlen(c_temp) = 6
		if (bret && (dwwritenlen>0))
		{
			PurgeComm(COMDEV(MyTTY.npTTYInfo),PURGE_TXCLEAR);
//			char temp[256];
//			sprintf(temp,"write %d success!",dwwritenlen);
//			AfxMessageBox(temp);
		}
		else
		{	AfxMessageBox("Write failed!");
			return false;
		}
	}
	else
	{	AfxMessageBox("COM not opened!");
		return false;
	}

	//回读0x0e
	do
	{
	nLength = ReadCommBlock( MyTTY.npTTYInfo, (LPSTR) abIn, 2); //MAXBLOCK );
	
	if (nLength>0)
		{	
//			itoa(abIn[0],s_abIn,16);
//			AfxMessageBox(s_abIn);
		}
	
	}while (nLength<=0);  //(nLength<=0);
	
	
	if(abIn[0]!=0x0e)	
	{
	  AfxMessageBox("通讯失败...");
	  return false;
	}
	if(abIn[0]==0x0e)	
	{
	  AfxMessageBox("发送正确...");	  
	}

	//回读0x0d
	do
	{
	nLength = ReadCommBlock( MyTTY.npTTYInfo, (LPSTR) abIn, 2); //MAXBLOCK );
	
	if (nLength>0)
		{	
//			itoa(abIn[0],s_abIn,16);
//			AfxMessageBox(s_abIn);
		m_dlg.StepIt ();
		}
	
	}while (nLength<=0);  //(nLength<=0);
	
	
	if(abIn[0]!=0x0d)	
	{
	  AfxMessageBox("通讯失败...");
	  return false;
	}

	//读电压和零点(+8v,-8v,-5v)
	BOOL Read_key,ReadKey;
	ReadKey = true;
	BYTE Data_epp[3];
	float Data_v0[8]; //零点电压
	float Data_v[3];  //电源电压
	
	//第一片的零点电压
	Read_key = Read_Epp(Data_epp);  //空读	
	for(Iepp0=0;Iepp0<512;Iepp0++)
		{
			Read_Epp(Data_epp);
			ReadKey = ReadKey && Read_key;
			Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //增益1
		}	
	Read_key = Read_Epp(Data_epp);  //空读
	//ReadKey = ReadKey && Read_key;
	//Data_v0[0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //增益1
	Data_v0[0] = E_Data_v0(Temp_Data_v0);
	m_dlg.StepIt ();

	Read_key = Read_Epp(Data_epp);  //空读	
	for(Iepp0=0;Iepp0<512;Iepp0++)
		{
			Read_Epp(Data_epp);
			ReadKey = ReadKey && Read_key;
			Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/8; //增益8
		}
	Read_key = Read_Epp(Data_epp);  //空读
	//ReadKey = ReadKey && Read_key;
	//Data_v0[1] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/8; //增益8
	Data_v0[1] = E_Data_v0(Temp_Data_v0);
	m_dlg.StepIt ();

	Read_key = Read_Epp(Data_epp);  //空读	
	for(Iepp0=0;Iepp0<512;Iepp0++)
		{
			Read_Epp(Data_epp);
			ReadKey = ReadKey && Read_key;
			Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/64; //增益64
	}
	Read_key = Read_Epp(Data_epp);  //空读
	//ReadKey = ReadKey && Read_key;			
	//Data_v0[2] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/64; //增益64
	Data_v0[2] = E_Data_v0(Temp_Data_v0);
	
	Read_key = Read_Epp(Data_epp);  //空读	
	for(Iepp0=0;Iepp0<512;Iepp0++)
		{
			Read_Epp(Data_epp);
			ReadKey = ReadKey && Read_key;
			Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/512; //增益512
	}
	Read_key = Read_Epp(Data_epp);  //空读
	//ReadKey = ReadKey && Read_key;
	//Data_v0[3] = 2500.00*BtoInt(Data_epp[1],Data_epp[2])/(512*32767); //增益512
	Data_v0[3] = E_Data_v0(Temp_Data_v0);
	m_dlg.StepIt ();

	//电源电压(+8v,+5,-8v)
	Read_key = Read_Epp(Data_epp);  //空读
	for(Iepp0=0;Iepp0<512;Iepp0++)
		{
			Read_Epp(Data_epp);
			ReadKey = ReadKey && Read_key;
			ReadKey = ReadKey && Read_key;
			Temp_Data_v0[Iepp0] = 25*2.5/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //+8v
		}
	Read_key = Read_Epp(Data_epp);  //空读
	//ReadKey = ReadKey && Read_key;
	//Data_v[0] = 25*2.5/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //+8v
	Data_v[0] = E_Data_v0(Temp_Data_v0);
	m_dlg.StepIt ();

	Read_key = Read_Epp(Data_epp);  //空读
	for(Iepp0=0;Iepp0<512;Iepp0++)
		{
			Read_Epp(Data_epp);
			ReadKey = ReadKey && Read_key;
			Temp_Data_v0[Iepp0] = 25*2.5/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //+5v
		}
	Read_key = Read_Epp(Data_epp);  //空读
	//ReadKey = ReadKey && Read_key;
	//Data_v[1] = 25*2.5/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //+5v
	Data_v[1] = E_Data_v0(Temp_Data_v0);
	m_dlg.StepIt ();

	Read_key = Read_Epp(Data_epp);  //空读
	for(Iepp0=0;Iepp0<512;Iepp0++)
		{
			Read_Epp(Data_epp);
			ReadKey = ReadKey && Read_key;	
			Temp_Data_v0[Iepp0] = 25*2.5/32767*BtoInt(Data_epp[1],Data_epp[2])/1.0;	//-8v
		}
	Read_key = Read_Epp(Data_epp);  //空读
	//ReadKey = ReadKey && Read_key;	
	//Data_v[2] = 25*2.5/32767*BtoInt(Data_epp[1],Data_epp[2])/1;	//-8v
	Data_v[2] = E_Data_v0(Temp_Data_v0);
	m_dlg.StepIt ();

	if(!ReadKey)
	{
		AfxMessageBox("读并口第一片失败...");
	//	return false;	  	
	}


	if(Data_v[0]<7.5 || Data_v[0]>8.5 )
	{
		sd.Format("%f",Data_v[0]);
		sd = "电源电压异常...\n  +8v = " + sd; 
		AfxMessageBox(sd);
		//return false;	  	
	}
	if(Data_v[2]<-8.5 || Data_v[2]>-7.5 )
	{
		sd.Format("%f",Data_v[2]);
		sd = "电源电压异常...\n  -8v = " + sd; 
		AfxMessageBox(sd);
		//return false;	  	
	}

	//读第二片
	 testbyte=0x0e; //通知读第二片	
	 bret = WriteCommBlock( MyTTY.npTTYInfo, &testbyte , 1,&dwwritenlen); //(DWORD )strlen(c_temp) = 6
		if (bret && (dwwritenlen>0))
		{
			PurgeComm(COMDEV(MyTTY.npTTYInfo),PURGE_TXCLEAR);
//			char temp[256];
//			sprintf(temp,"write %d success!",dwwritenlen);
//			AfxMessageBox(temp);
		}
		else
		{	AfxMessageBox("Write failed!");
			return false;
		}

	//回读0x0d
	do
	{
	nLength = ReadCommBlock( MyTTY.npTTYInfo, (LPSTR) abIn, 2); //MAXBLOCK );
	
	if (nLength>0)
		{	
//			itoa(abIn[0],s_abIn,16);
//			AfxMessageBox(s_abIn);
		}
		m_dlg.StepIt ();
	}while (nLength<=0);  //(nLength<=0);
	
	
	if(abIn[0]!=0x0d)	
	{
	  AfxMessageBox("通讯失败...");
	  return false;
	}
	

	//第二片的零点
	Read_key = Read_Epp(Data_epp); //空读	
	for(Iepp0=0;Iepp0<512;Iepp0++)
		{
			Read_Epp(Data_epp);
			ReadKey = ReadKey && Read_key;
			Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //增益1
		}	
	Read_key = Read_Epp(Data_epp);  //空读
	//ReadKey = ReadKey && Read_key;
	//Data_v0[0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/1; //增益1
	Data_v0[4] = E_Data_v0(Temp_Data_v0);
	m_dlg.StepIt ();

	Read_key = Read_Epp(Data_epp);  //空读
	for(Iepp0=0;Iepp0<512;Iepp0++)
		{
			Read_Epp(Data_epp);
			ReadKey = ReadKey && Read_key;
			Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/8; //增益8
		}
	Read_key = Read_Epp(Data_epp);  //空读
	//ReadKey = ReadKey && Read_key;
	//Data_v0[5] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/8; //增益8
	Data_v0[5] = E_Data_v0(Temp_Data_v0);
	m_dlg.StepIt ();

	Read_key = Read_Epp(Data_epp);  //空读
	for(Iepp0=0;Iepp0<512;Iepp0++)
		{
			Read_Epp(Data_epp);
			ReadKey = ReadKey && Read_key;		
			Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/64;//增益64
		}
	Read_key = Read_Epp(Data_epp);  //空读
	//ReadKey = ReadKey && Read_key;		
	//Data_v0[6] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/64;//增益64
	Data_v0[6] = E_Data_v0(Temp_Data_v0);
	m_dlg.StepIt ();

	Read_key = Read_Epp(Data_epp);  //空读
	for(Iepp0=0;Iepp0<512;Iepp0++)
		{
			Read_Epp(Data_epp);
			ReadKey = ReadKey && Read_key;
			Temp_Data_v0[Iepp0] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/512;//增益512
		}
	Read_key = Read_Epp(Data_epp);  //空读
	//ReadKey = ReadKey && Read_key;
	//Data_v0[7] = 2500.00/32767*BtoInt(Data_epp[1],Data_epp[2])/512;//增益512
	Data_v0[7] = E_Data_v0(Temp_Data_v0);
	m_dlg.StepIt ();

	if(!ReadKey)
	{
		AfxMessageBox("读并口第二片失败...");
		return false;	  	
	}
	
	//读完了所有的数据后,发送 0x0e 结束
	 testbyte=0x0e; 
		bret = WriteCommBlock( MyTTY.npTTYInfo, &testbyte , 1,&dwwritenlen); //(DWORD )strlen(c_temp) = 6
		if (bret && (dwwritenlen>0))
		{
			PurgeComm(COMDEV(MyTTY.npTTYInfo),PURGE_TXCLEAR);
//			char temp[256];
//			sprintf(temp,"write %d success!",dwwritenlen);
//			AfxMessageBox(temp);
		}
		else
		{	AfxMessageBox("Write failed!");
			return false;
		}
	m_dlg.SetPos (120);
	m_dlg.DestroyWindow ();
	MyTTY.CloseConnection(); //关闭串口
	//float Data_v0[8]; //零点电压
	//float Data_v[3];  //电源电压	
	CjiaozhunDLG jiaozhundlg;	
	
	jiaozhundlg.m_1_1 = Data_v0[0];
	jiaozhundlg.m_8_1 = Data_v0[1];
	jiaozhundlg.m_64_1 = Data_v0[2];
	jiaozhundlg.m_512_1 = Data_v0[3];
	jiaozhundlg.m_1_2 = Data_v0[4];
	jiaozhundlg.m_8_2 = Data_v0[5];
	jiaozhundlg.m_64_2 = Data_v0[6];
	jiaozhundlg.m_512_2 = Data_v0[7];
	jiaozhundlg.m_z8v = Data_v[0]; //+8v
	jiaozhundlg.m_z5v = Data_v[1]; //+5v
	jiaozhundlg.m_f8v = Data_v[2]; //-8v


	jiaozhundlg.DoModal(); 	

	return true;

}

void CCgeDoc::OnYiqizijiao() 
{
	// TODO: Add your command handler code here
	BOOL yiKey ;
		yiKey = yiqi_zjiaozhun();
		if(!yiKey)
		{
		
		}
}

//叠加采样
void CCgeDoc::OnMcaiyang() 
{
	int OKOrCANCEL,i;
	POSITION Position;
	Position = GetFirstViewPosition();
	CView* pVView = GetNextView(Position);
	CCgeView *pView;
	while(pVView!=NULL)
	{
		if(pVView->IsKindOf(RUNTIME_CLASS(CCgeView)))
		{ break;};
		pVView = GetNextView(Position);
	}
	pView = (CCgeView *)pVView;

	if (IsModified()!=0)//提示数据已经修改,是否保存
	{		
		//OnFileSave();
		pView->m_Viewparfile();
		SetModifiedFlag( false );
	}
//	Oncanshu5();
	m_NdbKey = true;
	m_Hkey = true;
	m_Ndb = 0;
	m_H = 0;
	m_Mcishu = 0;
	
	m_Mcishu = 5;
	CdiejiaDLG diejiadlg;
    diejiadlg.m_Mcishu.Format("%d",m_Mcishu);//保存上次的值
	//保存上次的采样次数

	OKOrCANCEL = diejiadlg.DoModal();
	if (OKOrCANCEL != IDOK)
	{   
		return;
	}
	
	//diejiadlg.m_Mcishu.Format("%d",m_Mcishu); //数值转成字符串
	m_Mcishu = atoi(diejiadlg.m_Mcishu);

 if(!m_CMyLineList.IsEmpty())
   {	
		//m_CMyLineList.RemoveAll();// CAge's aren't destroyed.	
		//ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.			
		CMyLine *pMyLine;
		POSITION ps;
		ps = m_CMyLineList.GetHeadPosition();
		while ( ps != NULL )
		{			
			pMyLine = (CMyLine *)m_CMyLineList.GetNext(ps);
			delete pMyLine; // Now delete the CAge objects.
		}
		m_CMyLineList.RemoveHead();
		m_CMyLineList.RemoveAll();// CAge's aren't destroyed.	
		
		ASSERT(m_CMyLineList.IsEmpty()); // Yes it is.			

   }
	 BOOL Cai_key;
	 monicaiyang = false;
	 for(i=0;i<m_Mcishu;i++)
	 {
		m_Mps  = m_CMyLineList.GetHeadPosition();//获得连表的头		

⌨️ 快捷键说明

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