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

📄 cmdproc.cpp

📁 湖北水文黄石试点集中器代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	  getdate( &d );
	  gettime( &t );
	               
	  if(GetKPState==LOCK) printf("Get: %d-%02d-%02d %02d:%02d:%02d\n",
		          d.da_year, d.da_mon, d.da_day,
		          t.ti_hour, t.ti_min, t.ti_sec );
	           	   
	  d.da_year = (CTBuf[0]-48)*10+CTBuf[1]-48+2000;
  	d.da_mon = (CTBuf[2]-48)*10+CTBuf[3]-48;
  	d.da_day = (CTBuf[4]-48)*10+CTBuf[5]-48;
     	  
 	 	t.ti_hour = (CTBuf[6]-48)*10+CTBuf[7]-48;
  	t.ti_min = (CTBuf[8]-48)*10+CTBuf[9]-48;
  	t.ti_sec = (CTBuf[10]-48)*10+CTBuf[11]-48;
  	 
  	setdate(&d);	           
    settime(&t);
    
    InitKeyPad( );
                 
    /*if(GetKPState==LOCK) printf("Set: %d-%02d-%02d %02d:%02d:%02d\n",
		          d.da_year, d.da_mon, d.da_day,
		          t.ti_hour, t.ti_min, t.ti_sec );*/
                 
    /*getdate( &d );
	  gettime( &t );
	               
	  if(GetKPState==LOCK) printf("Time: %d-%02d-%02d %02d:%02d:%02d\n",
		           d.da_year, d.da_mon, d.da_day,
		           t.ti_hour, t.ti_min, t.ti_sec );*/

    return 1;
}			                		             
		                		             	                		             
//////////////////////////////////////////////////
		                		             

//校时正常应答
void Ack_SetTime( unsigned char typeofdata, unsigned char center )
{
	 Ack_single_center_command(typeofdata,	0x81, center); 	
} 

//正常应答召测数据		             
int Up_passive_transfer_data( unsigned char *GetInDataBuff, unsigned char typeofdata, unsigned char center )	 
{   
	  int           num,len;
	  unsigned char checksum = 0;
	  unsigned char cs_bytecount;
	  unsigned char i,j,k;
	  int           type_byte_len=0;
	  unsigned char real_len_of_data_region;
	  unsigned char num_of_fill_byte;	 
	  unsigned char *PutOutTemBuff;
	
	  PutOutTemBuff = TmpBuf; //让指针变量的地址指向TmpBuf    	  

/////////////////////////上报招测数据的固定格式	  
	  PutOutTemBuff[0]=	0x68;
	  PutOutTemBuff[1]=	DTUAddress[0];
	  PutOutTemBuff[2]=	DTUAddress[1];
	  PutOutTemBuff[3]=	typeofdata;    
	  PutOutTemBuff[4]=	0x68;        
	  
	  PutOutTemBuff[5]= 0x83;  //自报数据的功能码  

    PutOutTemBuff[6] = 3;    //数据域的长度3*8个字节
    
    GetTmpTimeInfo( PutOutTemBuff, typeofdata, 0 );

    PutOutTemBuff[17]= 0x20; //添加空格符

 
////////////////////////////////添加水情数据种类标识符 

    type_byte_len = Add_data_type_flag( PutOutTemBuff, typeofdata, Ivtime[0], 0 );
    
////////////////////////添加水情数据种类标识符结束
   
    PutOutTemBuff[18+type_byte_len]= 0x20; //添加空格符

//////////////////////////////////    
    len = strlen(GetInDataBuff);
    //if(GetKPState==LOCK) printf("len = %d\n", len);
    for(j=0; j<len; j++)
    {  
    	 //存放采集的数值,字符型数据格式
       PutOutTemBuff[19+type_byte_len+j]= GetInDataBuff[j];	 
    }	          
    
    PutOutTemBuff[19+type_byte_len+len]= 0x20;  //添加空格符 

    PutOutTemBuff[20+type_byte_len+len]= 0x4E;  //添加固定格式的数据域结束字符
       
    PutOutTemBuff[21+type_byte_len+len]= 0x4E;  //添加固定格式的数据域结束字符   
   
    real_len_of_data_region = 15+type_byte_len+len;    //数据域的长度,<=24个字节    
    
    num_of_fill_byte = 24-real_len_of_data_region;
    
    for(k=0; k<num_of_fill_byte; k++)
      PutOutTemBuff[7 + real_len_of_data_region + k]= 0x00;
  
/////////////////////////////计算校验和  
		cs_bytecount = PutOutTemBuff[6]*8 + 7;
		for( i=0; i < cs_bytecount; i++ )
	 	checksum += PutOutTemBuff[i];   
	 	
	 	PutOutTemBuff[cs_bytecount]= checksum; //存放校验和的数值
	 	
	 	PutOutTemBuff[cs_bytecount+1]= FRAME_END_CHAR;  //帧结束标志	 

//////////////////////////////招测数据打包结束

    PutOutTemBuff[cs_bytecount+2]= '\0';

    Send_to_Single_Svr(PutOutTemBuff, center, cs_bytecount+2); //向应用端发送数据
    
    return 1;
	 	
}

//异常应答招测数据
void Ack_Wrong_passive_transfer_data( unsigned char typeofdata, unsigned char center )
{
	  Ack_single_center_command(typeofdata,	0xc3, center);
}

//自报数据
int Up_Positive_transfer_data( unsigned char *GetInDataBuff, unsigned char typeofdata, unsigned char datawktype, 
      unsigned char center, int rfivtime ) 	 
{   
	  int           r;
	  int           num,len;
	  unsigned char checksum = 0;
	  unsigned char cs_bytecount;
	  unsigned char i,j,k;
	  int           type_byte_len=0;
	  unsigned char real_len_of_data_region;
	  unsigned char num_of_fill_byte;	 
	  unsigned char *PutOutTemBuff;
	
	  PutOutTemBuff = TmpBuf; //让指针变量的地址指向TmpBuf    	  

/////////////////////////上报数据的固定格式	  
		PutOutTemBuff[0]=	0x68;
	  PutOutTemBuff[1]=	DTUAddress[0];
	  PutOutTemBuff[2]=	DTUAddress[1];
	  PutOutTemBuff[3]=	typeofdata; 
	  PutOutTemBuff[4]=	0x68; 
	  
  switch(datawktype)
  {
  	 case  0x31:
     case  0x32:
 	   case  0x33:
     case  0x34:
	   case  0x35:
	   	
	  PutOutTemBuff[5]= 0x82;  //自报数据的功能码  
	  
	  PutOutTemBuff[6] = 4;    //数据域的长度4*8个字节
	  
	  PutOutTemBuff[7]= datawktype;

    GetTmpTimeInfo( PutOutTemBuff, typeofdata, 1 ); ///生成采集时间信息

    PutOutTemBuff[18]= 0x20; //添加空格符

 
////////////////////////////////添加水情数据种类标识符 

    type_byte_len = Add_data_type_flag( PutOutTemBuff, typeofdata, rfivtime, 1 );  //加时间
    
////////////////////////添加水情数据种类标识符结束
   
    PutOutTemBuff[19+type_byte_len]= 0x20; //添加空格符

//////////////////////////////////    
    len = strlen(GetInDataBuff);

    for(j=0; j<len; j++)
    {  
    	 //存放采集的数值,字符型数据格式
       PutOutTemBuff[20+type_byte_len+j]= GetInDataBuff[j];	 
    }	          
    
    PutOutTemBuff[20+type_byte_len+len]= 0x20;  //添加空格符 

    PutOutTemBuff[21+type_byte_len+len]= 0x4E;  //添加固定格式的数据域结束字符
       
    PutOutTemBuff[22+type_byte_len+len]= 0x4E;  //添加固定格式的数据域结束字符   
   
    real_len_of_data_region = 16+type_byte_len+len;    //数据域的长度   
     
	  break;
	 
case	0x99: 	
	 	
	 	 PutOutTemBuff[5]= 0x94;  //加报数据的功能码  
	   PutOutTemBuff[6] = 3;    //数据域的长度4*8个字节
	   
	   
	  GetTmpTimeInfo( PutOutTemBuff, typeofdata, 0 ); ///生成采集时间信息

    PutOutTemBuff[17]= 0x20; //添加空格符

 
////////////////////////////////添加水情数据种类标识符 

    type_byte_len = Add_data_type_flag( PutOutTemBuff, typeofdata, rfivtime, 0);  //加时间
    
////////////////////////添加水情数据种类标识符结束
   
    PutOutTemBuff[18+type_byte_len]= 0x20; //添加空格符

//////////////////////////////////    
    len = strlen(GetInDataBuff);

    for(j=0; j<len; j++)
    {  
    	 //存放采集的数值,字符型数据格式
       PutOutTemBuff[19+type_byte_len+j]= GetInDataBuff[j];	 
    }	          
    
    PutOutTemBuff[19+type_byte_len+len]= 0x20;  //添加空格符 

    PutOutTemBuff[20+type_byte_len+len]= 0x4E;  //添加固定格式的数据域结束字符
       
    PutOutTemBuff[21+type_byte_len+len]= 0x4E;  //添加固定格式的数据域结束字符   
   
    real_len_of_data_region = 15+type_byte_len+len;    //数据域的长度,<=24个字节    
    
    break;
   
	} 
	
	
	 num_of_fill_byte = PutOutTemBuff[6]*8-real_len_of_data_region;
	    for(k=0; k<num_of_fill_byte; k++)
      PutOutTemBuff[7 + real_len_of_data_region + k]= 0x00;
		
	 /////////////////////////////计算校验和  
		cs_bytecount = PutOutTemBuff[6]*8 + 7;
		for( i=0; i < cs_bytecount; i++ )
	 	checksum += PutOutTemBuff[i];  	
	 	
	 	
	 	
	 	PutOutTemBuff[cs_bytecount]= checksum; //存放校验和的数值
	 	
	 	PutOutTemBuff[cs_bytecount+1]= FRAME_END_CHAR;  //帧结束标志	 



//////////////////////////////数据打包结束

    PutOutTemBuff[cs_bytecount+2]= '\0';

    r = Send_to_Single_Svr(PutOutTemBuff, center, cs_bytecount+2); //向应用端发送数据
    
    return r;
	 	
}	



//读取历史数据
int ReadHistroyData( unsigned char *CmdDataBuf, unsigned char center )
{   
	  int i;
	  static unsigned long  StartTick = 0;
	  unsigned long    CurrentTick;   
	  
    CurrentTick = clock( );
    if( CurrentTick >= (StartTick + 2) )
    {   	
	     if(CmdDataBuf[3]==0x01)  //读历史雨量数据
	     {
	        i=ReadRainfallHistroyData( CmdDataBuf, center ); 
	        if(i!=-1) ReadHistroyDataFlg = 0;
	     }	 
	     else if(CmdDataBuf[3]==0x02) //读历史水位数据
       {
      	  i=ReadWaterLevelHistroyData( CmdDataBuf, center );
      	  if(i!=-1) ReadHistroyDataFlg = 0;
       } 
       else
       {
    		  if(GetKPState==LOCK) printf("\nUpFrame format erro!\n");    		
    		  return 0;
       }
       
       StartTick = CurrentTick;
                     
    }
    
    return 1;
    	       		  
}


void Ack_Wrong_ReadHistroyData( unsigned char typeofdata, unsigned char center )
{
	  Ack_single_center_command(typeofdata,	0xc4, center);
}
	  
	  	  
int ConfigSendCondition( unsigned char *CmdDataBuf ) 	 
{   
	  unsigned long configvar, num1, num2, num3, num4, num5, num6;
	  unsigned char flag=0;  //flag==0, 水位数据标志;flag==1, 雨量数据标志
	  unsigned char i;
 
////////////////////////////////////从指令中获取发送条件  
//定义四个全局变量:
//1. DataWakeUp 数据触发模式;
//2. TimingWakeUp 定时触发模式;
//3. IvtimeWakeUp 间隔时间触发模式;
//4. Num_of_thr 门限条件的个数;
//5. ThrWakeUp[8] 门限触发模式;
    if(CmdDataBuf[3]==0x01) flag = 0;
    else if(CmdDataBuf[3]==0x02) flag = 1;
    else { if(GetKPState==LOCK) printf("Upframe format erro!\n");}
    	
    configvar = CmdDataBuf[7]- 48; //把十进制字符型转换成十进制整型
    if(DataWakeUp[flag]!=configvar)  DataWakeUp[flag] = configvar;  //D1
     
    configvar = (CmdDataBuf[8]-48)*10 + CmdDataBuf[9]-48; //把十进制字符型转换成十进制整型   
    if(TimingWakeUp[flag]!= configvar) 
    {   
    	  if(flag==0) FirstRFTRflg = 1;   //定时上报降雨量标志重新启动;
    	  else if(flag==1) FirstWLTRflg = 1;   //定时上报水位标志重新启动;
    	  	
    	  TimingWakeUp[flag] = configvar;  //D2  
    }  	
	  
    configvar = (CmdDataBuf[10]-48)*1000+(CmdDataBuf[11]-48)*100+(CmdDataBuf[12]-48)*10
                +(CmdDataBuf[13]-48);
    if(IvtimeWakeUp[flag]!= configvar)  IvtimeWakeUp[flag] = configvar;   //D3    	   
    	
    configvar = (CmdDataBuf[14]-48)*10 + CmdDataBuf[15]-48; //把十进制字符型转换成十进制整型,门限条件的个数
    if( Num_of_thr[flag]!=configvar)  Num_of_thr[flag] = configvar;
    	
    for(i=0; i<Num_of_thr[flag]; i++)
    {
        configvar = (CmdDataBuf[16+10*i]-48)*1000+(CmdDataBuf[17+10*i]-48)*100+(CmdDataBuf[18+10*i]-48)*10
                +(CmdDataBuf[19+10*i]-48);
        if(ThrWakeUp[flag][i].thr_unit!=configvar) ThrWakeUp[flag][i].thr_unit = configvar;
    	
    	  num1 = CmdDataBuf[20+10*i]-48;
    	  num2 = CmdDataBuf[21+10*i]-48;
    	  num3 = CmdDataBuf[22+10*i]-48;
    	  num4 = CmdDataBuf[23+10*i]-48;
    	  num5 = CmdDataBuf[24+10*i]-48;
    	  num6 = CmdDataBuf[25+10*i]-48;
    	  
        configvar = num1*100000 + num2*10000 + num3*1000 + num4*100 + num5*10 + num6;      
        if(ThrWakeUp[flag][i].thr_value!=configvar) ThrWakeUp[flag][i].thr_value = configvar; 
        	
    }
    	 
    return 1;
}

void Ack_Right_ConfigSendCondition( unsigned char typeofdata, unsigned char center )   		  
{
	 Ack_single_center_command(typeofdata,	0x85, center);
}

void Ack_Wrong_ConfigSendCondition( unsigned char typeofdata, unsigned char center )   		  
{
	 Ack_single_center_command(typeofdata,	0xc5, center);
}  

//为湖北水文V1.2版本作修改
int Ack_Right_ReadSendCondition( unsigned char typeofdata, unsigned char center ) 
{	  
	  int           r;   //add by wuhuan 2006.5.24
	  unsigned char i, j, k, len, checksum = 0;
	  unsigned char flag=0;         //flag==0, 水位数据标志;flag==1, 雨量数据标志	  
	  unsigned char cs_bytecount;	
	  unsigned char sum_datalen, num_of_fill_byte;
	  unsigned char *PutOutTemBuff;
	  char string[10];
	  
	  PutOutTemBuff = TmpBuf; //让指针变量的地址指向TmpBuf
	  
	  PutOutTemBuff[0]=	0x68;
	  PutOutTemBuff[1]=	DTUAddress[0];
	  PutOutTemBuff[2]=	DTUAddress[1];
	  PutOutTemBuff[3]=	typeofdata;    
	  PutOutTemBuff[4]=	0x68;        
	  
	  PutOutTemBuff[5]= 0x86;  //上报招测数据的功能码  	 

    if(typeofdata==0x01) flag = 0;
    else if(typeofdata==0x02) flag = 1;
    else { if(GetKPState==LOCK) printf("Upframe format erro!\n");}
    		     

	  	 PutOutTemBuff[7]= DataWakeUp[flag]+48; //D1
	  
	     itoa(TimingWakeUp[flag],string,10);
       if(strlen(string)<2)
       {
    	     PutOutTemBuff[8]='0';   
	         PutOutTemBuff[9]= string[0];
	     }

⌨️ 快捷键说明

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