atmeasuredoc.cpp

来自「串口应变采集系统」· C++ 代码 · 共 758 行 · 第 1/2 页

CPP
758
字号
			for(int l=0;l<peaknum;l++)
			{
				wave[l]=wavesum[l]/6;
				wavesum[l]=0;
				if((ctrlcont>200)&&((pt[sndNum][l].Wave-wave[l]>1)||(wave[l]-pt[sndNum][l].Wave>1)))
				{
					sndNum=0;
					sndTempNum=0;
				}
				else
			       pt[sndNum][l].Wave=wave[l];
			}

			if(sndNum==ChannelNum-1)
                Calculate();
            
			ctrlcont++;
		      if(ctrlcont>200) 
		     	ctrlcont=0;
			    
	}

	return 0;
//	this->Pointpos(62);
}



void CAtmeasureDoc::OnSysChannel() 
{
	// TODO: Add your command handler code here
	
	CSysDialog dlg;
	dlg.DoModal();
	
}

void CAtmeasureDoc::SampPara()
{
	CPhSet *ph;
	ph=new CPhSet;
	CPortSet *ms;
	ms=new CPortSet;
	if(ms->IsOpen())
 	ms->Close();
	ms->Open();
	SamNormHZ=ms->m_cyfreq;
	CtrlPort=ms->m_strctrl;
	DataPort=ms->m_strdata;
	ms->Close();
	/////////////////需要什么参数///////////////////
	CSysSet *ws;
	ws=new CSysSet;
	CPointSet *ww;
	ww=new CPointSet;
 //   CDatabase m_database;
	//取通道数
	ws->Open();
	ws->MoveLast();
	ChannelNum=ws->m_channel_id+1;
	ws->Close();
   	//取出点数
		ww->Open();
	for (int m=0;m<ChannelNum;m++)
	{
//		ww->Open();
//      m_database.ExecuteSQL("select count(*) as ct from 参数初始化 where channel_id=""+i+");
		PointNum[m]=ww->m_Point;
	    ww->MoveNext();
//		ww->Close();
	}
		ww->Close();
	
	ws->Open();
//	CString str;
	for(int i=0;i<ChannelNum;i++)
	{
		for(int j=0;j<PointNum[i];j++)
		{
//			int flag;
//			flag=ws->m_flag;
//			if flag=0;
			pt[i][j].Wave0=ws->m_wave;//标定波长
			pt[i][j].K=ws->m_T0;    //标定温度
			pt[i][j].T0=ws->m_K;      //温度参数
			pt[i][j].L=ws->m_L;//应变参数
			pt[i][j].H=ws->m_H;//应变参数
			pt[i][j].P=ws->m_P;//压力参数
			pt[i][j].Q=ws->m_Q;//压力参数
			pt[i][j].Comchannel=ws->m_ybchannel;
			pt[i][j].Compoint=ws->m_ybpoint;
			pt[i][j].Flag=ws->m_flag;
			ws->MoveNext();
		}
	}
	ws->Close();

	int channel,point;
	ph->Open();
	if(!ph->IsEOF())
	{
	if(ph->IsEOF()==0)
	{
	  ph->MoveFirst();	
	}
    while(!ph->IsEOF()) 
	{
		
	    channel=ph->m_p_channel;
		point=ph->m_p_point;
//		if(ph->m_flag==1)
		pt[channel][point].StrainBalance=ph->m_p_change;
//		else if(ph->m_flag==2)
//		pt[channel][point].SPBalance=ph->m_p_tpresure;
//		else if(ph->m_flag==3)
//		pt[channel][point].WPBalance=ph->m_p_spresure;
		ph->MoveNext();
	}
	}
	ph->Close();
		ph->Open();
	 if(ph->IsBOF())
	{
	   ph->Close();
	   ws->Open();
       while(!ws->IsEOF())
//	   while(!ph->IsEOF()) 
	   {
		if(ws->m_flag==1)
		{
			channel=ws->m_channel_id;
			point=ws->m_point_id;
			pt[channel][point].StrainBalance=0;

		}
		ws->MoveNext();
	   }
	   }
		ws->Close();
		ph->Close();

}




void CAtmeasureDoc::Calculate()
{   

	//////////////////////////////计算温度/////////////
//	this->Pointpos(71);

	for(int i=0;i<ChannelNum;i++)
		for(int j=0;j<PointNum[i];j++)
		{ 
			if(pt[i][j].Flag==0)
			{

               pt[i][j].T=pt[i][j].K*(pt[i][j].Wave-pt[i][j].Wave0)+pt[i][j].T0;//最后温度
			  

			}
		}


////////////////////////////计算应变和压力////////////////////
    for(int k=0;k<ChannelNum;k++)
		for(int l=0;l<PointNum[k];l++)
		{
			   int comi,comj;
			   comi=pt[k][l].Comchannel;
			   comj=pt[k][l].Compoint;
			   double ktemp,ltemp,htemp;
			   ktemp=pt[k][l].K;
			   ltemp=pt[k][l].L;
			   htemp=pt[k][l].H;
			   double ptemp,qtemp;
			   ptemp=pt[k][l].P;
			   qtemp=pt[k][l].Q;
			   double wavetemp,wave0temp;
               wavetemp=pt[k][l].Wave;
			   wave0temp=pt[k][l].Wave0;
			   double t,t0;
			   t=pt[comi][comj].T;
			   t0=pt[comi][comj].T0;
			if(pt[k][l].Flag==1)
			{   
		
               if((wavetemp-wave0temp)>=ltemp*ktemp*(t-t0))
			   {
                  pt[k][l].Strain=(wavetemp-wave0temp)/wave0temp-ltemp*ktemp*(t-t0);
			   }
			   else if((wavetemp-wave0temp)<ltemp*ktemp*(t-t0))
			   {
                  pt[k][l].Strain=ltemp*ktemp*(t-t0)-(wavetemp-wave0temp)/wave0temp;
			   }

			   		pt[k][l].Strain=pt[k][l].Strain/htemp;
	            	pt[k][l].Strain=pt[k][l].Strain-pt[k][l].StrainBalance;//最后应变值
			}
			if(pt[k][l].Flag==2)
			{
                 if((wavetemp-wave0temp)>=ptemp*ktemp*(t-t0))
			   {
                  pt[k][l].SP=(wavetemp-wave0temp)/wave0temp-ptemp*ktemp*(t-t0);
			   }
			   else if((wavetemp-wave0temp)<ptemp*ktemp*(t-t0))
			   {
                  pt[k][l].SP=ptemp*ktemp*(t-t0)-(wavetemp-wave0temp)/wave0temp;
			   }
                 	pt[k][l].SP=pt[k][l].SP/qtemp;
	            	pt[k][l].SP=pt[k][l].SP-pt[k][l].SPBalance;//最后土压值
			}
			if(pt[k][l].Flag==3)
			{
                 if((wavetemp-wave0temp)>=ptemp*ktemp*(t-t0))
			   {
                  pt[k][l].WP=(wavetemp-wave0temp)/wave0temp-ptemp*ktemp*(t-t0);
			   }
			   else if((wavetemp-wave0temp)<ptemp*ktemp*(t-t0))
			   {
                  pt[k][l].WP=ptemp*ktemp*(t-t0)-(wavetemp-wave0temp)/wave0temp;
			   }
                 	pt[k][l].WP=pt[k][l].WP/qtemp;
	            	pt[k][l].WP=pt[k][l].WP-pt[k][l].WPBalance;//最后水压值
			}

		}
//		this->Pointpos(72);
		savechange();

}

void CAtmeasureDoc::OnBalance() 
{
/*	if(PHflag==2)
	{
      AfxMessageBox("同一次采样不能两次设置平衡点!!!!");
	}*/
//	AfxMessageBox("设置平衡点!!!!");
	PHflag=1;



	for(int i=0;i<ChannelNum;i++)
		for(int j=0;j<PointNum[i];j++)
		{
			if(pt[i][j].Flag==1)
			{
				pt[i][j].StrainBalance=pt[i][j].Strain;
			
   			}
			if(pt[i][j].Flag==2)
			{
                pt[i][j].SPBalance=pt[i][j].SP;
				
			}
			if(pt[i][j].Flag==3)
			{
                pt[i][j].WPBalance=pt[i][j].WP;
			
			}
		   
		}
	
}

void CAtmeasureDoc::savechange()
{
//	this->Pointpos(81);
		CString tm;
	    CTime time;
        time=time.GetCurrentTime();
        int x,y;
	    double temp=0,presure=0,change=0;
	    tm=time.Format("%Y-%m-%d %H:%M:%S");

//	    CDatabase m_database;
   TRY
   {   
//	   m_database.Open("dbat" );
	   CString str;
	   
	  for(x=0;x<ChannelNum;x++)
	  {
        for(y=0;y<PointNum[x];y++)
		{
			if(PHflag==1)
			{
//			m_database.ExecuteSQL("delete from 平衡点 ");
			if(pt[x][y].Flag==1)
			{
			
			str.Format("insert into 平衡点 VALUES('%s','%d','%d','%f','%f','%f')",tm,x,y,pt[x][y].Strain,0,0);
//			AfxMessageBox(str);
			m_database.ExecuteSQL(str);
            
			}
			}
		   if (pt[x][y].Flag==0)
		  {
		  str.Format("insert into 测量值 VALUES('%s','%d','%d','%f','%f','%f','%f','%d')",tm,x,y,pt[x][y].Wave,pt[x][y].T,change,presure,pt[x][y].Flag);
		  m_database.ExecuteSQL(str);
		  }
          if(pt[x][y].Flag==1)
		  {
			  str.Format("insert into 测量值 VALUES('%s','%d','%d','%f','%f','%f','%f','%d')",tm,x,y,pt[x][y].Wave,temp,pt[x][y].Strain,presure,pt[x][y].Flag);
          m_database.ExecuteSQL(str);
		  }
		}
	  }
   }
   CATCH(CDBException, e)
   {
	CString msg;
	msg=e->m_strError;
	int i=1;
//	m_database.Close();
   }
    END_CATCH
//    m_database.Close();
    JobOK=true;
//	this->Pointpos(82);
	PHflag=2;
	

}

void CAtmeasureDoc::Pointpos(int pos)
{
	CTime time;
	CString tm;
    m_id=m_id+1;
	time=time.GetCurrentTime();
	tm=time.Format("%Y-%m-%d %H:%M:%S");
 

TRY
{   
	   CString str;	  
		  str.Format("insert into dbpos VALUES('%s','%d','%d')",tm,m_id,pos);
//		  AfxMessageBox(str);
		  m_TestDB.ExecuteSQL(str);

	  
	
}
CATCH(CDBException, e)
{
	CString msg;
	msg=e->m_strError;
	int i=1;
//	m_database.Close();
}
END_CATCH
//  m_database.Close();




}

void CAtmeasureDoc::Onqkbanlance() 
{
	// TODO: Add your command handler code here
		CPhSet *ph;
	ph=new CPhSet;
	ph->Open();
    while(!ph->IsEOF()) 
	{
		ph->MoveFirst();
		ph->Delete();
		ph->MoveNext();
	}
	ph->Requery();
    ph->Close();
	
}

⌨️ 快捷键说明

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