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

📄 pollute.c

📁 一个关于MODBUS方面的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#endif   
	          if(*valid_cp ==0x10) 
	             
	             valid_cp =del_blank(valid_cp); 
	              
	          else if(((*valid_cp<=0x39)&&(*valid_cp>=0x30))||
	                  ((*valid_cp<=0x41)&&(*valid_cp>=0x5a))||
	                  ((*valid_cp<=0x61)&&(*valid_cp>=0x7a)))
	                 {
	                  valid_cp =left_cp(valid_cp,valid_temp);
#ifdef VALID_DEBUG
                           printf("left_cp ok!\n");
#endif 	                           
                         }
	          else   
	              goto LABLE1;
	               
	          for(i =0; i<MAX; i++) 
	             
	           {
	             if(0==strcmp(cp_left_map[i],valid_temp))
	              {
	                l_lable=i;
	               
	                strcpy(valid_temp,*(cpvalid+no)->left[k]);
	                
	                k++;
	                
	                break;
	                
	              }
	           }
	          
	          if(MAX ==i)
	          
	            goto LABLE1;
	            
	          else
	            {	
	             if(*valid_cp ==0x10)
	                  
	                valid_cp =del_blank(valid_cp);
	                   
	             else if(is_equal(*valid_cp))
	                
	                   valid_cp++;
	                   
	             else if(*valid_cp ==0x10)
	          
	                   valid_cp =del_blank(valid_cp);
	              
	             else
	                
	               goto LABLE0;
	               
	              
	             if(((*valid_cp<=0x39)&&(*valid_cp>=0x30))||(*valid_cp==0x2e)) 
	              {   
	                if((l_lable!=23+16)||(l_lable!=23+17)||(l_lable!=23+16+18)||(l_lable!=23+17+18)||
	                  (l_lable!=23+16+18*2)||(l_lable!=23+17+18*2)||(l_lable!=23+16+18*3)||
	                  (l_lable!=23+17+18*3)||(l_lable!=23+16+18*4)||(l_lable!=23+17+18*4))
	                   {
	                     valid_cp =right(valid_cp,*(cpvalid+no)->right[i],'f');
#ifdef VALID_DEBUG         
                             printf("right_cp ok!\n");
#endif                              
	                   }
	                else
	                  {
	                   valid_cp =right(valid_cp,*(cpvalid+no)->right[i],'i');
#ifdef VALID_DEBUG
                           printf("right_cp ok!\n");
#endif 	                           
                          }
	              }  
	            else  
	               goto LABLE0;
	                
	             if(*valid_cp ==0x10) 
	             
	                  valid_cp =del_blank(valid_cp); 
	             
	             else if((*valid_cp ==0x2c)||(*valid_cp ==0x3b))
	          
	                 valid_cp++;
	                 
	             else
	             
	                goto LABLE0;
	           } 

  return valid_cp;

LABLE0:
	{
	  printf("valid  left data lose !\n");
	 
	  exit(0); 
	}

LABLE1:
        {
          printf("valid right data error! \n");
         
          exit(0); 
        } 
        
}

int valid_segment_data(unsigned char* valid_src,int no)
{
    int lcheck,i,num;
        
    char hexc[4] ,cp_left[3],*pvalid_src;

#ifdef VALID_DEBUG
    
    printf("valid data start! \n");
    
#endif    
    
    if((0x23 == valid_src[0])&&(0x23 ==valid_src[1])) //包头
    
       {
       	
#ifdef VALID_DEBUG
       	
       	 printf("valid data head ok!\n");
#endif       	 
       	 sprintf(hexc,"%d",PACKINTS(valid_src[2],valid_src[3]));
       	    	 
       	 num =atoi(hexc);
       	 
#ifdef VALID_DEBUG 
      	 
       	 printf("num =%d\n",num);
       	 
#endif      	 
	 if(num == len_check(valid_src)) //数据段长度校验
	    {
	    	
#ifdef VALID_DEBUG
     	
	      printf("valid data len check ok!\n");
	      
	      printf("crc =0x%x\n",PACKINTS(valid_src[valid_len-2],valid_src[valid_len-1]));
	      
#endif 	      
	      pvalid_src=valid_src+4;
	      
#ifdef VALID_DEBUG
	      	           
	      printf("pvalid_src =0x%x\n",*pvalid_src);
	      printf("crc16 =0x%x\n",crc16(pvalid_src,num));
	      
#endif 	      
	     if(PACKINTS(valid_src[valid_len-2],valid_src[valid_len-1]) == crc16(pvalid_src,num)) //CRC校验
	        {
	        	
#ifdef VALID_DEBUG
	        	
	             printf("valid data crc ok!\n");
	             
#endif 	             
	            /* for(i =0; i<4; i++)
	               
	               pvalid_src=left_right_head(pvalid_src,0,no);
	               
	               printf("valid data head data ok!\n");*/
	             
	              if(0x10 ==pvalid_src)
	              
	                 pvalid_src =del_blank(pvalid_src);
	                 
	              else if(((*pvalid_src<=0x41)&&(*pvalid_src>=0x5a))||((*pvalid_src<=0x61)&&(*pvalid_src>=0x7a)))
	              
	                 {
#ifdef VALID_DEBUG	                 	
	                   printf("cp data start ok! \n");
	                   
#endif 	                   
	                   pvalid_src =left(pvalid_src,cp_left);
	                   
	                   if(strcmp(cp_left,"CP"))
	                   
	                      goto LABLE0;
	                   
	                   else
	                   
	                     {
	                     	if(0x10 ==pvalid_src)
	              
	                           pvalid_src =del_blank(pvalid_src);
	                          
	                        if(is_equal(pvalid_src))
	                     	 
	                     	  pvalid_src++;
	                     	  
	                     	if(0x10 ==pvalid_src)
	              
	                           pvalid_src =del_blank(pvalid_src);
	                          
	                        if((0x26 ==*pvalid_src)&&(0x26 ==*(pvalid_src+1)))
	                     	  
	                     	  {
	                     	   pvalid_src =+2; 
	                     	   
	                     	   while((0x26 !=*pvalid_src)&&(0x26 !=*(pvalid_src+1)))
	                     	  
	                     	        pvalid_src=left_right_cp(pvalid_src,no);
#ifdef VALID_DEBUG	                 	
	                                printf("cp right ok! \n");
	                   
#endif 	  	                     	        
	                     	         pvalid_src =+2;
	                     	  }
	                     	  
	                     } 
	                 }
	                 
	              else
	              
	                 goto LABLE1;
	                 
#ifdef VALID_DEBUG	                 
	           printf("valid data cp data ok!\n");
	           
#endif
	      
	           }
            }
      }
   
   return 0;
LABLE0:
	{
	  printf("valid  left data lose !\n");
	 
	  return 1; 
	}      
      
LABLE1:
        {
          printf("valid right data error! \n");
         
          return 1; 
        } 
        
}

         
//----------------------有效数据提取---------------------------------
int valid_data(unsigned char *valid_chars, int length,char c)  //传输进来的valid_chars是全部的modbus字符串
  { 
    int i,flag;//flag数据解析成功与否表识
    unsigned char *recv_valid;
    if('a' ==c)
      {
      	packs_num =packnum_check(valid_chars,length);
      	
#ifdef VALID_DEBUG 
     	
        printf("packs_num =%d\n",packs_num);
        
#endif        

      }
    else if('r' ==c)
      {
      	packs_num =packnum_check(valid_chars,length);
      	
#ifdef VALID_DEBUG 
      	
      	printf("valid ok!\n");
      	
        printf("packs_num =%d\n",packs_num);
        
#endif 
      }
      
    valid_pack = (unsigned char **)malloc(packs_num*sizeof(unsigned char));
    
    if(valid_pack == NULL)
      { 
       printf("**valid_pack申请内存失败。\n"); 
      } 
      
    for(i =0; i<packs_num; i++)
      {
       valid_pack[i] = (unsigned char *)malloc(sizeof(package));
      }
      
      
      
      recv_valid =(unsigned char*)malloc(length*sizeof(unsigned char));
      
      for(i =0;i<length; i++)
        {
         recv_valid[i] =valid_chars[i];
        }
        recv_valid[i] =0x0d;
        recv_valid[i+1] =0x0a;
        
#ifdef VALID_DEBUG 
        
      printf("receive valid data ok!\n");
      
#endif        
 
      bale_split(recv_valid,packs_num,length);
      
      cpvalid = (valid_cp*)malloc(packs_num*sizeof(valid_cp));
      
       valid = (valid_head*)malloc(packs_num*sizeof(valid_head));
       
      	if('a' ==c)
      	  {
      	    for(i = 0; i<packs_num; i++)
              {
              	flag =valid_segment_data(valid_pack[i],i);
              }
          }
        else if('r' ==c)
          {
            for(i = 0; i<packs_num; i++)
              {
      	        flag =valid_segment_data(valid_pack[i],i);
              }
          }
      
      pvalid =(valid_head **)valid;
      pcpvalid =(valid_cp **)cpvalid;
      free(cpvalid);
      free(valid);
      for(i =0; i<packs_num; i++)
        {
      
          pcpvalid =cpvalid+1;
          
          *pcpvalid =NULL;
      
          pvalid =valid+1;
          
          *pvalid =NULL;
          
          free(*valid_pack[i]);
      	
          *valid_pack[i] =NULL;
        }
      
    free(recv_valid);
      
    recv_valid =NULL;   
   if(flag ==0)   
     
     return 0;
   else
     return 1;
 }

⌨️ 快捷键说明

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