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

📄 ultrasonicview.cpp

📁 接收来自下位机的数据,然后进行数据处理和通讯
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		     temp[j]=s3/(2*nl+1);
		   }
	       for (j=1;j<Allnum/2;j++)	   
		   RxDatab[channel][j]=temp[j];

           MemDC.SelectObject(&Pen4);
		   MemDC.MoveTo(1664,0);      //划零时刻竖线
           MemDC.LineTo(1664,256);
		   
		   MemDC.SelectObject(&Pen2);
		   MemDC.TextOut(1664,5,"0");
	     
		   for(i=nl;i<rxnum[channel]/2-1 ;i++) //  32000		 
		    if (tz==0)
			{
				t1=RxDatab[channel][i];t2=RxDatab[channel][i+1];
				MemDC.MoveTo(12228-i,128-(t1/chus-RxDatab[channel][0]/chus));  // 0
				MemDC.LineTo(12228-i-1,128-(t2/chus-RxDatab[channel][0]/chus));// 0
			}
			else
            {t1=RxDatab[channel][i];t2=RxDatab[channel][i+1];
			 MemDC.MoveTo(12228-i,128-t1/chus);
			 MemDC.LineTo(12228-i-1,128-t2/chus);
			}
		                              //画非速度通道实时波型
		}
        
        if(showwave==1 && Allnum>=2047 && channel==8)
        {
			int j=0;
		    for(i=0;i<rxnum[channel]-1 ;i++,i++) //  32000
			{
			  RxDatab[channel][j]=RxData[channel][i]*256+RxData[channel][i+1];  //双字节合成速度	            
              j++;   
			} 
            int temp[1024];

             for(i=0;i<rxnum[channel]/2-1 ;i++) //  32000		 		   
			{
			  if(RxDatab[channel][i]!=0) 
				  temp[i]=m_kk9*7200/RxDatab[channel][i];  //转化成 公里/小时	11<speed<256
			  else
				  temp[i]=0;
			  if (temp[i]<12) temp[i]=1; if(temp[i]>255) temp[i]=255;
	         if(xzhou!=0)
			  {
				  if(((temp[i-1]-temp[i])>0 ) && ((temp[i-1]-temp[i])>(69-xzhou)) && i>2)  temp[i]=temp[i-1];
			      if (((temp[i-1]-temp[i])<0) && ((temp[i]-temp[i-1])>(69-xzhou)) && i>2)  temp[i]=temp[i-1];
			  } 

			}
              
			  if(xzhou!=0)      
	   { 
		   for(i=0;i<rxnum[channel]/2-1 ;i++) 
         {
			 long int ss=0;
             for (j=0;j<(xzhou+10);j++)
			 {
               ss=ss+temp[i+j];
			 }
               temp[i]=ss/(xzhou+10); 
		 }  
	   }



			 for(i=464;i<1024 ;i++) //  只显示到56米(全班则为:rxoldnum[channel]/2-1)
			{
		//		t1=RxDatab[channel][i];t2=RxDatab[channel][i+1];
				MemDC.MoveTo(1024-i,256-temp[i]);          
				MemDC.LineTo(1024-i-1,256-temp[i+1]);      
                RxDatab[channel][i]=temp[i];
			}
		}
        if(channel!=8)                               //画速度通道实时波型
	    pDC->StretchBlt(45,260,800,256,&MemDC,xcenter-int(6000/ratio),0,int(12000/ratio),256,SRCCOPY);//不用ratio
		else
        pDC->StretchBlt(45,260,800,256,&MemDC,0,0,int(1024/ratio),256,SRCCOPY);
	}
	else
	{     
		    	MemDC.SelectObject(&Pen2);
          if(channel!=8)  ////画非速度通道历史波型
		  {    
		       int j=0;
             	for(i=0;i<rxoldnum[channel]-1 ;i++,i++) //  32000
				{   
			     if((int)(RxDataOld[channel][i+1]&0x8)==0)
			     RxDataOldb[channel][j]=(RxDataOld[channel][i+1]&0x7)*256+RxDataOld[channel][i];  //补码转换	
                else
                RxDataOldb[channel][j]=-((((RxDataOld[channel][i+1]&0x7)*256+RxDataOld[channel][i])^0x7FF)+1);  //要改
                j++;   
				} 

         
               int temp[65000];   
	           int  nl;
	           nl=xzhou;

        /*       	//负延迟处理	
				for(i=1;i<1443;i++) //1443=23088/2/8(5A30H)
				temp[i+221]=RxDataOldb[channel][i];//+3536
				for(i=1;i<=221;i++)
					temp[i]=RxDataOldb[channel][i+1443];
				for(i=1;i<1664;i++)//1664=26624/2/8(6800H)
					RxDataOldb[channel][i]=temp[i];
				//****************************               */

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

             //软件减振器
	           for (j=nl+1;j<numx/2-nl;j++)
			   {
		            long int s1=0,s2=0,s3=0;
		            for (i=0;i<=nl;i++)
					{ int t1,t2;
                      t1=RxDataOldb[channel][j+i];
			          t2=RxDataOldb[channel][j-i];
			          s1=s1+t1; 
			          s2=s2+t2; 
					} 
                   s3=s1+s2-RxDataOldb[channel][j]; 
			       temp[j]=s3/(2*nl+1);
			   }
	          for (j=1;j<numx/2;j++)	   
		      RxDataOldb[channel][j]=temp[j]; 

			   
		   MemDC.SelectObject(&Pen4);
		   MemDC.MoveTo(1664,0);      //划零时刻竖线
           MemDC.LineTo(1664,256);

		                     //划交会时刻线
		   MemDC.MoveTo(1664+(jt*1664/650),0);      
           MemDC.LineTo(1664+(jt*1664/650),256);
		   
		   MemDC.SelectObject(&Pen2);
		   MemDC.TextOut(1664,5,"0");
		   if(jt>0)
		   MemDC.TextOut(1665+(jt*1664/650),5,"j");
	     
              int t1,t2;

		     for(i=nl;i<numx/2-nl/* && RxDataOld[channel][i+1]!=-1*/ ;i++)    
			 {   
			    if (tz==0)
				{  
                  t1=RxDataOldb[channel][i];t2=RxDataOldb[channel][i+1];
			      MemDC.MoveTo(i,128-(t1/chus-RxDataOldb[channel][0]/chus));  // 0
			      MemDC.LineTo(i+1,128-(t2/chus-RxDataOldb[channel][0]/chus)); // 0
				}
			   else
			   {
                 t1=RxDataOldb[channel][i];t2=RxDataOldb[channel][i+1];
		    	 MemDC.MoveTo(i,128-t1/chus);
			     MemDC.LineTo(i+1,128-t2/chus);
			   }
			 }
     }//画历史波型

		 else  //画速度通道历史波型
         {
			 int j=0;
		    for(i=0;i<rxoldnum[channel]-1 ;i++,i++) //  32000
			{
			  RxDataOldb[channel][j]=RxDataOld[channel][i+1]*256+RxDataOld[channel][i];  //双字节合成速度	            
              j++;   
			} 
            
             int temp[1024],av[1024];

			 

             for(i=0;i<rxoldnum[channel]/2-1 ;i++) //  32000		 		   
			{
			   if(RxDataOldb[channel][i]!=0)
				 temp[i]=m_kk9*7200/RxDataOldb[channel][i];  //转化成 公里/小时	11<speed<256
			   else
                 temp[i]=0;
			  if (temp[i]<12) temp[i]=1; if(temp[i]>255) temp[i]=255;
			      
			}

        long int    sum=0;
		int pv;
		for (i=400;i<450;i++) //统计40到45米一段的速度
		{
			sum=sum+temp[i];			
		}
		pv=sum/50;

       int ss[560];
//     xzhou=10;
       if(xzhou!=0)      
			  { 
		        for(i=0;i<rxoldnum[channel]/2-1 ;i++) 
				{
			       long int ss=0;
				   int ll=xzhou+10;
				   int le=0;
                  for (j=0;j<ll;j++)
				  {
				    if(temp[i+j]-pv>6||pv-temp[i+j]>6)
					{}
				    else
					{ss=ss+temp[i+j];le++;}
					
				  }
                  if(ss!=0)
				   av[i]=ss/le;
				   else
				   av[i]=av[i-1]; 
				}  

				for(i=0;i<rxoldnum[channel]/2-1 ;i++) //  32000		 		   
				{
			      if(temp[i]-av[i]>6||av[i]-temp[i]>6)
				  temp[i]=av[i];			     			      
				}

					for(i=0;i<rxoldnum[channel]/2-1 ;i++) //  32000		 		   
				{
			      if(temp[i]<temp[i+1])
				  temp[i+1]=temp[i];			     			      
				}
			 
				 
	   	       for(i=0;i<560 ;i++) //  只显示到56米(全班则为:rxoldnum[channel]/2-1)	 		   
			   {       ss[i]=0;
			         for (j=0;j<xzhou;j++)
				    ss[i]=ss[i]+temp[i+j];

				    ss[i]=ss[i]/xzhou;
			   }  
			    
			   for(i=0;i<560;i++)
			   {   
				   temp[i]=ss[i];
			   }
	   }


        

			for(i=0;i<560 ;i++) //  只显示到56米(全班则为:rxoldnum[channel]/2-1)	 		   
			{
//				t1=RxDataOldb[channel][i];t2=RxDataOldb[channel][i+1];
				MemDC.MoveTo(i,256-temp[i]);
				MemDC.LineTo(i+1,256-temp[i+1]);
				RxDataOldb[channel][i]=temp[i];
			}

		 }
        if(channel!=8)
        pDC->StretchBlt(45,260,800,256,&MemDC,xcenter-int(6000/ratio),0,int(12000/ratio),256,SRCCOPY);
		else
        pDC->StretchBlt(45,260,800,256,&MemDC,0,0,int(1024/ratio),256,SRCCOPY);//0,1024
    }
   
    MemDC.SelectObject(pOldbmp);
    MemDC.DeleteDC();   	    		  		
}



BEGIN_EVENTSINK_MAP(CUltrasonicView, CFormView)
    //{{AFX_EVENTSINK_MAP(CUltrasonicView)
	ON_EVENT(CUltrasonicView, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CUltrasonicView::OnComm() 
{
	// TODO: Add your control notification handler code here
	VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;

    CString strtemp;
	fstream file2;
	file2.open(strf+"_"+m_chnow+".txt",ios::app);
	CString st0=" ..\\ ";
    m_path=st0+strf;
	if(!file2)
	{ 
	    AfxMessageBox("不能创建文件!");
		return;
	}

    if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
    { 
		////////以下你可以根据自己的通信协议加入处理代码
        variant_inp=m_ctrlComm.GetInput(); //读缓冲区
        safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
        len=safearray_inp.GetOneDimSize(); //得到有效数据长度
    	for(k=0;k<len;k++)
            safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
        for(k=0;k<len;k++) //将数组转换为Cstring型变量
        {
            BYTE bt=*(char*)(rxdata+k); //字符型
			strtemp.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
//          strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
            if(showdata==1)	m_strRXData+=strtemp; //加入接收编辑框对应字符串 
          	const char* ch=(const char*)strtemp;  //ch为指针,指向接收字符
			///////////初始化文件头///////////////////////
			if (Allnum==0) 
			{       
		    
		    file2.write("////",4);
			if(IsCH1==true)  {file2.write("通道1 ",6);cha123[channelnum]=0;channelnum++;}
            if(IsCH2==true)  {file2.write("通道2 ",6);cha123[channelnum]=1;channelnum++;}
			if(IsCH3==true)  {file2.write("通道3 ",6);cha123[channelnum]=2;channelnum++;}
            if(IsCH4==true)  {file2.write("通道4 ",6);cha123[channelnum]=3;channelnum++;}
			if(IsCH5==true)  {file2.write("通道5 ",6);cha123[channelnum]=4;channelnum++;}
            if(IsCH6==true)  {file2.write("通道6 ",6);cha123[channelnum]=5;channelnum++;}
			if(IsCH7==true)  {file2.write("通道7 ",6);cha123[channelnum]=6;channelnum++;}
            if(IsCH8==true)  {file2.write("通道8 ",6);cha123[channelnum]=7;channelnum++;}
			if(IsCH9==true)  {file2.write("通道9 ",6);cha123[channelnum]=8;channelnum++;}                 
            file2.write("\r\n",2);
			file2.write("////共 ",7);
			char ch=channelnum+48;
			file2.write(&ch,1);
            file2.write(" 个通道的数据\r\n",15);
			}
			//////////////////////////////////////////////
           if(Allnum<=262144) file2.write(ch,3);//存放至文件//5000
			
			int c=(Allnum/2)%channelnum;
            int cha=cha123[c];
            if(rxnum[cha]>=1)
				 for(int i=rxnum[cha];i>=1;i--)    	RxData[cha][i]=RxData[cha][i-1];
			RxData[cha][0]=Char2Int(ch[0],ch[1]);     //向左移位输入,连续两个字符合成一字节

		    if(rxnum[cha]<198656) rxnum[cha]++;//262144
		   
			Allnum++;
//			m_Progress.StepIt();
			if(channelnum==8)
				 m_Progress.SetPos(Allnum/988 % 200);//1311
			else
             if(channel==8)
				 m_Progress.SetPos(int(Allnum/10.3) % 200);
		     else
             m_Progress.SetPos(Allnum/123 % 200);
			
            
		}//for
	}//if
    UpdateData(FALSE); //更新编辑框内容
    CRect rc(45,260,845,516);
    //if(Allnum%10==1)    
	if(m_realorhis==0 &&showwave==1)  // 
	InvalidateRect(rc);
	file2.close();	
}



void CUltrasonicView::OnOpenserial() 
{
	// TODO: Add your control notification handler code here

//	SetCurrentDirectory(CurrentDirectory);
	CString a;		
    if(IsS1==true) a="新板1参数.txt";  
	if(IsS2==true) a="新板2参数.txt"; 
	if(IsS3==true) a="新板3参数.txt"; 
	if(IsS4==true) a="新板4参数.txt"; 
	if(IsN1==true) a="新板1参数.txt"; 
	if(IsN2==true) a="新板2参数.txt";
	if(IsN3==true) a="新板3参数.txt";
	if(IsN4==true) a="新板4参数.txt";
     /////////////写入各通道对应数组////////////////////
	fstream file1; 

	char ch1,ch2,ch3,ch4;
	if(a=="")  AfxMessageBox("请先选择板号文件!");
	else
	{
		a=CurrentDirectory+"\\"+a;
        file1.open(a,ios::in);
	           
       	file1.read(&ch1,1);
	   	file1.read(&ch2,1);
		file1.read(&ch3,1);
		file1.read(&ch4,1); //ch4为空格
        m_kk1=(ch1-48)*100+(ch2-48)*10+ch3-48;

		file1.read(&ch1,1);
	   	file1.read(&ch2,1);
		file1.read(&ch3,1);
		file1.read(&ch4,1); //ch4为空格
        m_kk2=(ch1-48)*100+(ch2-48)*10+ch3-48;

		file1.read(&ch1,1);
	   	file1.read(&ch2,1);
		file1.read(&ch3,1);
		file1.read(&ch4,1); //ch4为空格
        m_kk3=(ch1-48)*100+(ch2-48)*10+ch3-48;

		file1.read(&ch1,1);
	   	file1.read(&ch2,1);
		file1.read(&ch3,1);
		file1.read(&ch4,1); //ch4为空格
        m_kk4=(ch1-48)*100+(ch2-48)*10+ch3-48;

		file1.read(&ch1,1);
	   	file1.read(&ch2,1);
		file1.read(&ch3,1);
		file1.read(&ch4,1); //ch4为空格
        m_kk5=(ch1-48)*100+(ch2-48)*10+ch3-48;

		file1.read(&ch1,1);
	   	file1.read(&ch2,1);
		file1.read(&ch3,1);
		file1.read(&ch4,1); //ch4为空格
        m_kk6=(ch1-48)*100+(ch2-48)*10+ch3-48;

		file1.read(&ch1,1);
	   	file1.read(&ch2,1);
		file1.read(&ch3,1);
		file1.read(&ch4,1); //ch4为空格
        m_kk7=(ch1-48)*100+(ch2-48)*10+ch3-48;

		file1.read(&ch1,1);
	   	file1.read(&ch2,1);
		file1.read(&ch3,1);
		file1.read(&ch4,1); //ch4为空格
        m_kk8=(ch1-48)*100+(ch2-48)*10+ch3-48;

		file1.read(&ch1,1);
	   	file1.read(&ch2,1);
		file1.read(&ch3,1);
		file1.read(&ch4,1); //ch4为空格
        m_kk9=(ch1-48)*100+(ch2-48)*10+ch3-48;      
	   UpdateData(FALSE); 	
	}
    file1.close();
	CRect rc(45,260,845,516);
    InvalidateRect(rc);
    UpdateData(FALSE);
    
//	strf+=m_chnow;//文件名为时间加通道
 
	if(m_ctrlComm.GetPortOpen())
//	{   

⌨️ 快捷键说明

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