📄 pollute.c
字号:
#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 + -