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

📄 downcmd.cpp

📁 湖北水文黄石试点集中器代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
#include <bios.h>
#include "RS232X3.h"
#include "etr232i.h"
#include "gprsproc.h"
#include "macrodef.h"
#include "downcmd.h"

//////////////////////////for keypad
#include "keymenu.h"

extern int     ComIdx;
extern int   DTUAddress[3];


int DownFrame_Master_Proc( unsigned char *GetInFrameBuf, unsigned char RainfallBuff[3][6], unsigned char WaterLevelBuff[3][6] )
{  
	  int i;
	  unsigned char datalen;		  
	  
    i = DownFrame_Identify( GetInFrameBuf );
    
    if(i==1) DownFrame_Process( GetInFrameBuf, RainfallBuff, WaterLevelBuff );
    else 
    {   
    	  if(GetKPState==LOCK) printf("DownFrame format erro!\n"); 	    
	 	    return 0;
	 	}
    
    return 1;
    
}


int DownFrame_Process( unsigned char *GetInFrameBuf, unsigned char RainfallBuff[3][6], unsigned char WaterLevelBuff[3][6] )
{
	  int   i, j, m, thrnum, timenum;
	  long  num;
	  unsigned char FunCode;
	  unsigned char datalen;
	  char string[10];
	  char HydryBuff[3][10];
	  
	  FunCode = GetInFrameBuf[5];
	  
	  switch( FunCode )
	  {
	  	  case 0x00:
	  	  	   break;
	  	  
	  	  case 0x01:  
	  	  	   break;	   
	  	  	   
	  	  case 0x82:  //采集器召测数据应答	
	  	  	   datalen = GetInFrameBuf[6];
	  	  	   
	  	  	   for( i=0; i<datalen; i++ )	  	
             {
             	  if(GetInFrameBuf[7+i]!='0')  break;   //去掉最前面的字符'0';

             }
             
             for(j=0; j<datalen-i; j++)
                WaterLevelBuff[0][j] = GetInFrameBuf[7+i+j];
                
             WaterLevelBuff[0][datalen-i] = '\0';   //加字符串的结束符
             
             break;                          
               
               	  	  	   	  	  	   
	  	  case 0x83:  //自报数据	  	  	
	  	  	   /*datalen = GetInFrameBuf[6];
	  	  	   
	  	  	   for( i=0; i<datalen; i++ )	  	
               string[i] = GetInFrameBuf[7+i];               
               string[datalen] = '\0';
               
             num = atoi(string); //把二进制字符型转换成整型 
             
             if(GetInFrameBuf[3]==0x01) //雨量数据
               itoa(num,RainfallBuff,10);  //把整型转换成十进制字符型,存放在Rainfall字符串中
             else if(GetInFrameBuf[3]==0x02)  //水位数据 	
               itoa(num,WaterLevelBuff,10);  //把整型转换成十进制字符型,存放在WaterLevel字符串中 */
               
             datalen = GetInFrameBuf[6];
             thrnum = GetInFrameBuf[7]- 0x30;
             
             for(m=0; m<thrnum; m++ )
             {
	  	  	      for( i=0; i<4; i++ )	  	
                {
             	     if(GetInFrameBuf[8+5*m+i]!='0')  break;   //去掉最前面的字符'0';

                }
             
                for(j=0; j<5-i; j++)
                   HydryBuff[m][j] = GetInFrameBuf[8+5*m+i+j];
                
                HydryBuff[m][5-i] = '\0';   //加字符串的结束符                   
                  	            	
             }
             
             if(GetInFrameBuf[3]==0x01) //雨量数据   
             {
             	  if(thrnum==1)
                  strcpy( RainfallBuff[0], HydryBuff[0] );
                else if(thrnum==2)
                {
                	strcpy( RainfallBuff[0], HydryBuff[0] );
                  strcpy( RainfallBuff[1], HydryBuff[1] );
                }
             }          
             else if(GetInFrameBuf[3]==0x02)  //水位数据
             {
             	 if(thrnum==1)
                  strcpy( WaterLevelBuff[0], HydryBuff[0] );
                else if(thrnum==2)
                {
                	strcpy( WaterLevelBuff[0], HydryBuff[0] );
                  strcpy( WaterLevelBuff[1], HydryBuff[1] );
                }
             }             	  	  	  	  	  	
	  	  	   break;

	  	  case 0x84:  //读数据采集间隔时间                              	  	  	           
	  	  	   break;
	  	  	   	  	  	   
	  	  case 0x87: 	//读加报数据发送条件	  	   
	  	  	   break;
	  	  	   
	  	  case 0x88: //加报数据
	  	  	   datalen = GetInFrameBuf[6];
  	  	   
	  	  	   timenum = GetInFrameBuf[7]-48;
	  	  	   
	  	  	   ConverttoARTimeUnit( timenum );
	  	  	   
	  	  	   for( i=0; i<datalen; i++ )	  	
               string[i] = GetInFrameBuf[8+i];               
               string[datalen] = '\0';
               
             num = atoi(string); //把二进制字符型转换成整型 
             
             if(GetInFrameBuf[3]==0x01) //雨量数据
               itoa(num,RainfallBuff[0],10);  //把整型转换成十进制字符型,存放在Rainfall字符串中
             else if(GetInFrameBuf[3]==0x02)  //水位数据 	
               itoa(num,WaterLevelBuff[0],10);  //把整型转换成十进制字符型,存放在WaterLevel字符串中 
             else { if(GetKPState==LOCK) printf("DownFrame format erro!\n");}
             	  	  	  	  	  	
	  	  	   break;	  	
	  	  
	  	  case 0x89:
	  	  	   break;
	  	  
	  	  case 0x8A:
	  	  	   break;
	  	  	   
	  	  case 0x8B:
	  	  	   break;
	  	  	   
	  	  case 0x8C:
	  	  	   break;	  	  	   	  	  	     	   
	  	  	         	  	      	   	  	  	      	   	  	  	      	   	  	  	      	   	  	  	      	   	  	      	     	  	      	   	  	  	      	   	  
	  	  default: break;
	  } 
	  
	  return 1;
	   	
}	  	  	   

int ARTimeUnit=5;
void ConverttoARTimeUnit( int num )
{
	  switch(num)
	  {
	     case 0x01:
	  	  	  ARTimeUnit = 0x0001;
	  	  	  break;
	  	  	      	   
	  	 case 0x02:
	  	  	  ARTimeUnit = 0x0005;
	  	  	  break;	  	 
	  	  	      	    	      	   
	  	 case 0x03:
	  	  	  ARTimeUnit = 0x000a;
	  	  	  break;	
	  	  	    
	  	 case 0x04:
	  	  	  ARTimeUnit = 0x000f;
	  	  	  break;
	  	  	      	   
	  	 case 0x05:
	  	  	  ARTimeUnit = 0x001e;
	  	  	  break;	
	  	  	      	   
	  	 case 0x06:
	  	  	  ARTimeUnit = 0x003c;
	  	  	  break;	  
	  	  	      	   
	  	 case 0x07:
	  	  	  ARTimeUnit = 0x0078;
	  	  	  break;

	  	 case 0x08:
	  	  	  ARTimeUnit = 0x00b4;
	  	  	  break;
	  	  	      	   
	  	 case 0x09:
	  	  	  ARTimeUnit = 0x0168;
	  	  	  break;

	  	 case 0x10:
	  	  	  ARTimeUnit = 0x02d0;
	  	  	  break;

	  	 case 0x11:
	  	  	  ARTimeUnit = 0x05a0;
	  	  	  break;	
	  	  	      	   
	  	 default: break;	
	 }	
	  
} 
	  
int DownFrame_Identify(unsigned char *GetInFrameBuf)
{
	  int i;
	  unsigned char checksum = 0;
	  unsigned char cs_bytecount;
	  unsigned char FrameCheck = START_CHECK;
	  
	  switch(FrameCheck)
	  {   
	  	  case START_CHECK:
	  	  	   if(GetInFrameBuf[0]!=FRAME_START_CHAR)
	  	  	   {
	  	  	   	 if(GetKPState==LOCK) printf("\n 1Frame erro!\n");
	  	  	     return 0;
	  	  	   }
	  	  	   	
	  	  case DTUAddress_CHECK:
	  	  	   /*if((GetInFrameBuf[3]!=0x01)&&(GetInFrameBuf[3]!=0x02)&&(GetInFrameBuf[5]!=0x89))
             return 0;*/
	
	  	  case HEADER_CHECK:  	
	  	  	   if(GetInFrameBuf[4]!=FRAME_START_CHAR)
	  	  	   {
	  	  	   	  if(GetKPState==LOCK) printf("\n 2Frame erro!\n");
	  	  	      return 0;
	  	  	   }	 

        case CS_CHECK:
					   cs_bytecount = GetInFrameBuf[6] + 7;
					   for( i=0; i < cs_bytecount; i++ )
	 				   checksum += GetInFrameBuf[i];
					   if(checksum != GetInFrameBuf[cs_bytecount])                       
	  	  	   {
	  	  	   	  if(GetKPState==LOCK) printf("\n 3Frame erro!\n");
	  	  	      return 0;
	  	  	   }    	  

	  	  case END_CHECK:
	  	  	   if(GetInFrameBuf[cs_bytecount+1]!=FRAME_END_CHAR)	
	  	  	   {
	  	  	   	  if(GetKPState==LOCK) printf("\n 4Frame erro!\n");
	  	  	      return 0;
	  	  	   }	  	  	   	
	  	  default: break;
	  	  	
	  }
	  
	  return 1;
	  	  	   	
}



void Send_Ivtime_to_GatherMachine(  unsigned char *CmdDataBuf ) 

⌨️ 快捷键说明

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