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

📄 navigationdlg.cpp

📁 VC开发
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//		m_Com2.GetInput();//先预读缓冲区以清除全部数据m_Com.SetCommPort(1);//选择com1
	

	m_Com3.SetCommPort(5);//选择com1
		m_Com3.SetInBufferSize(1024);
		m_Com3.SetOutBufferSize(512);
	m_Com3.SetSettings("38400,n,8,1");
	if(!m_Com3.GetPortOpen())
			m_Com3.SetPortOpen(TRUE);
	m_Com3.SetInputMode(1);
		m_Com3.SetRThreshold(1);
			m_Com3.SetInputLen(1);
 //	m_Com3.SetInputLen(0);
//		m_Com3.GetInput();//先预读缓冲区以清除全部数据
	 
start=clock();
	
m_Time="0";	
middle=clock();
tt.Format("%d",(middle-start)/1000); 
m_Time=tt;
	UpdateData(FALSE);
	wbibx1=0;
	wbibx2=0;
	wbibx3=0;
	while(((middle-start)%10)==0)
{

        wbibx1=wbibx3;
		wbiby1=wbiby3;
		wbibz1=wbibz3;
	
	//	buchang();
    	wbibx3=gyo1*180/PI;//figx;/*每个10毫秒读入陀螺的角速度*/
	    wbiby3=gyo2*180/PI;
    	wbibz3=gyo3*180/PI;
     	wbibx2=(wbibx1+wbibx3)/2;
		wbiby2=(wbiby1+wbiby3)/2;
	    wbibz2=(wbibz1+wbibz3)/2;
     	wbpbx1=wbibx1-wbipx;
		wbpby1=wbiby1-wbipy;
		wbpbz1=wbibz1-wbipz;
		wbpbx2=wbibx2-wbipx;
		wbpby2=wbiby2-wbipy;
		wbpbz2=wbibz2-wbipz;
		wbpbx3=wbibx3-wbipx;
		wbpby3=wbiby3-wbipy;
		wbpbz3=wbibz3-wbipz;
 
		/*---------------------龙格库塔法解方程-----------------------*/
		ak0=xt*(-wbpbx1*q1-wbpby1*q2-wbpbz1*q3);
		ak1=xt*(wbpbx1*q0+wbpbz1*q2-wbpby1*q3);
		ak2=xt*(wbpby1*q0-wbpbz1*q1+wbpbx1*q3);
		ak3=xt*(wbpbz1*q0+wbpby1*q1-wbpbx1*q2);
		q0a=q0+0.5*ak0;
		q1a=q1+0.5*ak1;
		q2a=q2+0.5*ak2;
		q3a=q3+0.5*ak3;
		bk0=xt*(-wbpbx2*q1a-wbpby2*q2a-wbpbz2*q3a);
		bk1=xt*(wbpbx2*q0a+wbpbz2*q2a-wbpby2*q3a);
		bk2=xt*(wbpby2*q0a-wbpbz2*q1a+wbpbx2*q3a);
		bk3=xt*(wbpbz2*q0a+wbpby2*q1a-wbpbx2*q2a);
		q0b=q0+0.5*bk0;
		q1b=q1+0.5*bk1;
		q2b=q2+0.5*bk2;
		q3b=q3+0.5*bk3;
		ck0=xt*(-wbpbx2*q1b-wbpby2*q2b-wbpbz2*q3b);
		ck1=xt*(wbpbx2*q0b+wbpbz2*q2b-wbpby2*q3b);
		ck2=xt*(wbpby2*q0b-wbpbz2*q1b+wbpbx2*q3b);
		ck3=xt*(wbpbz2*q0b+wbpby2*q1b-wbpbx2*q2b);
		q0c=q0+ck0;
		q1c=q1+ck1;
		q2c=q2+ck2;
		q3c=q3+ck3;
		dk0=xt*(-wbpbx3*q1c-wbpby3*q2c-wbpbz3*q3c);
		dk1=xt*(wbpbx3*q0c+wbpbz3*q2c-wbpby3*q3c);
		dk2=xt*(wbpby3*q0c-wbpbz3*q1c+wbpbx3*q3c);
		dk3=xt*(wbpbz3*q0c+wbpby3*q1c-wbpbx3*q2c);
		q0=q0+1/6.0*(ak0+bk0+bk0+ck0+ck0+dk0);
		q1=q1+1/6.0*(ak1+bk1+bk1+ck1+ck1+dk1);
		q2=q2+1/6.0*(ak2+bk2+bk2+ck2+ck2+dk2);
		q3=q3+1/6.0*(ak3+bk3+bk3+ck3+ck3+dk3);
				qn=sqrt(q0*q0+q1*q1+q2*q2+q3*q3);
			q0=q0/qn;
			q1=q1/qn;
			q2=q2/qn;
			q3=q3/qn;

		q00=q0*q0;       /*-------------------四元数计算姿态矩阵---------------------*/
		q11=q1*q1;
		q22=q2*q2;
		q33=q3*q3;
		q12=q1*q2;
		q03=q0*q3;
		q13=q1*q3;
		q02=q0*q2;
		q23=q2*q3;
		q01=q0*q1;
		BT11=q00+q11-q22-q33;
		BT21=q12+q12+q03+q03;
		BT31=q13+q13-q02-q02;
		BT12=q12+q12-q03-q03;
		BT22=q00-q11+q22-q33;
		BT32=q23+q23+q01+q01;
		BT13=q13+q13-q02+q02;
    	BT32=q23+q23-q01-q01;
		BT33=q00-q11-q22+q33;
	
	     
	/*---------------------------------计算姿态角------------------------------*/
	if(fabs(BT32)<(1-ep))
		{
			the=atan(BT32/sqrt(1-BT32*BT32));
			if(fabs(BT22)>ep)
			{	
				psi=atan(-BT12/BT22);
				if(BT22>0)
				{	
					if(fabs(BT12)>ep) 
					{
						if(-BT12>0) 
						{
							psi=psi;
						} else
						{
							psi=psi+2*PI;
						}
					} else
					{
						psi=0;
					}
				} else
				{
					psi=psi+PI;
				}
			} else 
				if (-BT12>0)
				{
					psi=PI/2;
				} else
				{
					psi=PI*3/2;
				}

			if(fabs(BT33)>ep)
			{	
				gam=atan(-BT31/BT33);
				if(BT33>0) 
				{
					gam=gam;
				} else
					if (fabs(BT31)>ep)
					{
						if(-BT31<0) 
						{
							gam=gam-PI;
						} else
						{
							gam=gam+PI;
						}
					} else 
					{
						gam=PI;
					}
			} else
				if (-BT31>0)
				{
					gam=PI/2;
				} else
				{
					gam=-PI/2;
				}
		} else
		{
			if(BT32>0)
			{
				the=PI/2;
			} else
			{
				the=-PI/2;
			}
			gam=0;
			if (fabs(BT11)>ep)
			{
				psi=atan(BT21/BT11);
				if(BT11>0) 
				{
					if (fabs(BT21)>ep)
					{
						if (BT21>0)
						{
							psi=psi;
						} else
						{
							psi=psi+2*PI;
						}
					} else
					{
						psi=0;
					}
				} else
				{
					psi=psi+PI;
				}
			} else
				if (BT31>0)
				{
					psi=PI/2;
				} else
				{
					psi=PI*3/2;
				}
		}
       /*这里为相对于地球表面的输出*/
		printf("the=%f\t",the*180/PI);
		  printf("gam=%f\t",gam*180/PI);
				             printf("psi=%f\n",psi*180/PI);
   /*地球速率*/
        
	        
			wbipx=BT11*wpiex+BT21*wpiey+BT31*wpiez;
			wbipy=BT12*wpiex+BT22*wpiey+BT32*wpiez;
			wbipz=BT13*wpiex+BT23*wpiey+BT33*wpiez;

	I++;
m_the.Format("%f",the);
	UpdateData(FALSE);


m_gam.Format("%f",gam);
	UpdateData(FALSE);


m_psi.Format("%f",psi);
	UpdateData(FALSE);



	}

}


void CNavigationDlg::OnOnCommMscomm1() 
{
	

	VARIANT vResponse;
	COleSafeArray m_Input2;
	int nEvent;
	long i,length,kk;
    CString str,tt;
	BYTE data[42];
	if(f1==0)
	{
		kk=m_Com.GetInBufferCount();
	if(kk>40)
	{
			vResponse=m_Com.GetInput();
		str=(char*)(unsigned char*)vResponse.parray->pvData;
		if(*str=='.')
		{
			m_Com.SetInputLen(10);
			m_Com.GetInput();

m_Com.SetRThreshold(21);
	m_Com.SetInputLen(21);
f1=1;
		}

	}
		
		
	}
  else if(f1==1) {
	  m_Text="";
		nEvent=m_Com.GetCommEvent();
		switch(nEvent)
		{
	case 2:
		{
			kk=m_Com.GetInBufferCount();
if(kk>20)
{
	vResponse=m_Com.GetInput();//read
			m_Input2=vResponse;
			length=m_Input2.GetOneDimSize();
			for(i=0;i<length;i++)
				m_Input2.GetElement(&i,data+i);
	for(i=0;i<length;i++)//减10是为了不显示校验位和空格位
	{ char a=*(char*)(data+i);

	str.Format("%c",a);

	m_Text+=str;
  

	}
	UpdateData(FALSE);

  
gyo1=atof(m_Text); 
UpdateData(true);
}
break;
		}

		case 3: break;	AfxMessageBox("3");
		case 4: break;	AfxMessageBox("4");
		case 5: break;	AfxMessageBox("5");
		case 6: break;	AfxMessageBox("6");

		}
	
}
}

void CNavigationDlg::OnOnCommMscomm2() 
{

	VARIANT vResponse;
	COleSafeArray m_Input2;
	
	int nEvent;
	long i,length,kk;
    CString str,tt;
	BYTE data[42];
if(f2==0)
	{
		kk=m_Com2.GetInBufferCount();
		if(kk>40){
			vResponse=m_Com2.GetInput();
		str=(char*)(unsigned char*)vResponse.parray->pvData;
		if(*str=='.')
		{
			m_Com2.SetInputLen(10);
			m_Com2.GetInput();
f2=1;
		m_Com2.SetRThreshold(21);
	m_Com2.SetInputLen(21);
		}

	}
		
	}
else if(f2==1)
{	nEvent=m_Com2.GetCommEvent();
	m_Text2="";
		switch(nEvent)
		{
	case 2:
		{
			kk=m_Com2.GetInBufferCount();
if(kk>20)
{
	vResponse=m_Com2.GetInput();//read
			m_Input2=vResponse;
			length=m_Input2.GetOneDimSize();
			for(i=0;i<length;i++)
				m_Input2.GetElement(&i,data+i);
	for(i=0;i<length;i++)//减10是为了不显示校验位和空格位
	{ char a=*(char*)(data+i);

	str.Format("%c",a);

m_Text2+=str;
  

	}
	UpdateData(FALSE);
 
gyo2=atof(m_Text2); 
	UpdateData(true);


}
break;
		}

		case 3: break;	AfxMessageBox("3");
		case 4: break;	AfxMessageBox("4");
		case 5: break;	AfxMessageBox("5");
		case 6: break;	AfxMessageBox("6");
		}
			
}
}

void CNavigationDlg::OnOnCommMscomm3() 
{

	VARIANT vResponse;
	COleSafeArray m_Input2;
	
	int nEvent;
	long i,length,kk;
    CString str,tt;

	BYTE data[42];
if(f3==0)
	{
		kk=m_Com3.GetInBufferCount();
		if(kk>40){
			vResponse=m_Com3.GetInput();
		str=(char*)(unsigned char*)vResponse.parray->pvData;
		if(*str=='.')
		{
			m_Com3.SetInputLen(10);
			m_Com3.GetInput();
         f3=1;
		m_Com3.SetRThreshold(21);
	m_Com3.SetInputLen(21);
		}
	
	}
	
	}
else if(f3==1) 
{	nEvent=m_Com3.GetCommEvent();
		m_Text3="";
		switch(nEvent)
		{
	case 2:
		{
			kk=m_Com3.GetInBufferCount();
if(kk>20)
{
	vResponse=m_Com3.GetInput();//read
			m_Input2=vResponse;
			length=m_Input2.GetOneDimSize();
			for(i=0;i<length;i++)
				m_Input2.GetElement(&i,data+i);
	for(i=0;i<length;i++)//减10是为了不显示校验位和空格位
	{ char a=*(char*)(data+i);

	str.Format("%c",a);

m_Text3+=str;
  

	}
	UpdateData(FALSE);
 
gyo3=atof(m_Text3); 
	UpdateData(true);

}
break;
		}

		case 3: break;	AfxMessageBox("3");
		case 4: break;	AfxMessageBox("4");
		case 5: break;	AfxMessageBox("5");
		case 6: break;	AfxMessageBox("6");
		}
			
}
}

⌨️ 快捷键说明

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