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

📄 cmdproc.cpp

📁 湖北水文黄石试点集中器代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	  EndQueryTime[0] = (CmdDataBuf[13]-48)*10 + CmdDataBuf[14]-48;
	  EndQueryTime[1] = (CmdDataBuf[15]-48)*10 + CmdDataBuf[16]-48;
	  EndQueryTime[2] = (CmdDataBuf[17]-48)*10 + CmdDataBuf[18]-48;
	  EndQueryTime[3] = 0x17; //把截至时间的小时数设为23
	  EndQueryTime[4] = 0x3B;	//把截至时间的分钟数设为59 
	  EndQueryTime[5] = '\0';
	    	  
////////////////////////////////////////////////////////////////////////////////////////////////////
	  while(1)
    {
	      //从文件中读取满足要求的数据
	      //i==-1: Cannot open file
	      //i==-2: no match data
	      //i==-3: This file has no data

	     value_of_return = ReadOldWaterLevelData( "Water.dat", StartQueryTime, EndQueryTime ); 
	     
	     //if(GetKPState==LOCK)  printf(" value_of_return = %d\n",  value_of_return);
	     //if(GetKPState==LOCK)  printf(" readfilecnt = %d\n",  readfilecnt);
	     
	     if(value_of_return==0)	 readfilecnt++;   	          	
       else if(value_of_return==-2)
	     {   
	     	   if(readfilecnt>=1)
	     	   { 
	     	   	   if(GetKPState==LOCK) printf("readfilecnt=%d\n",readfilecnt);
	     	   	   break; //至少有一条满足要求的记录,并且找到文件的末尾
	     	   }
		       else 
		       { 
		       	   Ack_single_center_command(CmdDataBuf[3],	0x84, center); 
		       	   return 0;
		       }
	     }	     	            
	     else 
	     {
	     	   Ack_Wrong_ReadHistroyData( CmdDataBuf[3], center );
	     	   return 0;
	     }

///////////////////////////////////////在应答历史数据中添加时间信息

       GetTmpTimeInfo( PutOutTemBuff, 0x02, sum_datalen );
	  
 /////////////////////////////////////////////添加时间结束 

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

       	  history_data_len = strlen(OutWaterLevelregdata.water_level);
       	  TemDataBuff = OutWaterLevelregdata.water_level;
   
       for(j=0; j<history_data_len; j++)
       {  
    	    //存放采集的数值,字符型数据格式
          PutOutTemBuff[19+sum_datalen+type_byte_len+j]= TemDataBuff[j];	 
       }	          
    
       PutOutTemBuff[19 + sum_datalen + type_byte_len + history_data_len]= 0x20;  //添加空格符 

       PutOutTemBuff[20 + sum_datalen + type_byte_len + history_data_len]= 0x4E;  //添加固定格式的数据域结束字符
       
       PutOutTemBuff[21 + sum_datalen + type_byte_len + history_data_len]= 0x4E;  //添加固定格式的数据域结束字符  
    
       datalen = 21-7+1 + type_byte_len + history_data_len;      //每小段完整的数据包的长度
    
       sum_datalen += datalen;
    
       if(sum_datalen>976)  
       {  
       	  Ifdataoverflg = -1;
       	  PutOutTemBuff[5]= 0xA4;  //上报历史数据的功能码,表示有后续帧 
       	  break;
       }
    	
    }   
/////////////////////////////////////////////////////////////////////////////////////////////////////////
    //数据域的长度为PutOutTemBuff[6]*8个字节(包括0x00填充字节)
    if((sum_datalen%8)==0) PutOutTemBuff[6] = sum_datalen/8;    	
    else PutOutTemBuff[6] = sum_datalen/8 + 1;    	
    
    num_of_fill_byte = PutOutTemBuff[6]*8 - sum_datalen;
    
    for(i=0; i<num_of_fill_byte;i++)
      PutOutTemBuff[7 + sum_datalen + i] = 0x00; //填充0x00字节
      
/////////////////////////////计算校验和  
		cs_bytecount = PutOutTemBuff[6]*8 + 7;
		for( k=0; k < cs_bytecount; k++ )
	 	checksum += PutOutTemBuff[k];   

	 	
	 	PutOutTemBuff[cs_bytecount]= checksum; //存放校验和的数值
	 	
	 	PutOutTemBuff[cs_bytecount+1]= FRAME_END_CHAR;  //帧结束标志	 

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

    PutOutTemBuff[cs_bytecount+2]= '\0';
    
    i = Send_to_Single_Svr(PutOutTemBuff, center, cs_bytecount+2); //向应用端发送数据
    if(i<0) Send_to_Single_Svr(PutOutTemBuff, center, cs_bytecount+2); //向应用端发送数据
    
    return Ifdataoverflg;
        		  
} 

//加报数据
int Up_Alarm_transfer_data( unsigned char *GetInDataBuff, unsigned char typeofdata, 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;        
	  
	  PutOutTemBuff[5]= 0x94;  //加报数据的功能码  

    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);
    //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个字节
    
    PutOutTemBuff[6] = 3;    //数据域的长度3*8个字节
    
    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';

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


char  AlarmTimeBuff[6];
void GetTmpTimeInfo(unsigned char *PutOutTemBuff, unsigned char typeofdata, int offset )
{    
	   int i;
	   unsigned char timebuff[10];
	   char string[10];
	   
	   if(0x01==(typeofdata&0x0f))   
	   {
	   	  for(i=0; i<6; i++)	    	 
		    	 timebuff[i] = OutRainfallregdata.time[i];
		 }
	   else if(0x02==(typeofdata&0xf))  
	   {
	   	  for(i=0; i<6; i++)	    	 
		    	 timebuff[i] = OutWaterLevelregdata.time[i];
		 }	   	   
	   else
	   {
	   	  for(i=0; i<6; i++)	    	 
		    	 timebuff[i] = AlarmTimeBuff[i];	   	  
	   }
	
///////////////////////////////////////在应答历史数据中添加时间信息
    	 //添加年		
       itoa(timebuff[0],string,10);  //把整型转换成十进制字符型,存放在string字符串中
       if(strlen(string)<2)
       {
    	     PutOutTemBuff[7+offset]='0';   //月份少于两个字节前面补零
	         PutOutTemBuff[8+offset]= string[0];
	     }
	     else 
	     {
    	     PutOutTemBuff[7+offset]= string[0];	 
	         PutOutTemBuff[8+offset]= string[1];	 
	     }  

        //添加月份
       itoa(timebuff[1],string,10); //把整型转换成十进制字符型,存放在string字符串中
       if(strlen(string)<2)
       {
    	     PutOutTemBuff[9+offset]='0';   //月份少于两个字节前面补零
	         PutOutTemBuff[10+offset]= string[0];
	     }
	     else 
	     {
    	     PutOutTemBuff[9+offset]= string[0];	 
	         PutOutTemBuff[10+offset]= string[1];	 
	     }  

       //添加日期
       itoa(timebuff[2],string,10); //把整型转换成十进制字符型,存放在string字符串中
       if(strlen(string)<2)
       {
    	     PutOutTemBuff[11+offset]='0';  //日期少于两个字节前面补零
	         PutOutTemBuff[12+offset]= string[0];
	     }
	     else 
	     {
    	     PutOutTemBuff[11+offset]= string[0];	 
	         PutOutTemBuff[12+offset]= string[1];	 
	     } 	  

       //添加小时 	
       itoa(timebuff[3],string,10); //把整型转换成十进制字符型,存放在string字符串中
       if(strlen(string)<2)
       {
    	     PutOutTemBuff[13+offset]='0';  //小时数少于两个字节前面补零
	         PutOutTemBuff[14+offset]= string[0];
	     }
	     else 
	     {
    	     PutOutTemBuff[13+offset]= string[0];	 
	         PutOutTemBuff[14+offset]= string[1];	 
	     } 

       //添加分钟
       itoa(timebuff[4],string,10);  //把整型转换成十进制字符型,存放在string字符串中
       if(strlen(string)<2)
       {
    	     PutOutTemBuff[15+offset]='0';   //分钟数少于两个字节前面补零
	         PutOutTemBuff[16+offset]= string[0];
	     }
	     else 
	     {
    	     PutOutTemBuff[15+offset]= string[0];	 
	         PutOutTemBuff[16+offset]= string[1];	 
	     }	 
	  
 /////////////////////////////////////////////添加时间结束 
}


//void SaveTmpTime( unsigned char *TmpTimeBuff )
void GetSystemTime( unsigned char *TmpTimeBuff )
{
	  struct time t;
    struct date d;	
    
		getdate( &d ); //取系统的时间
	  gettime( &t ); 	  

	  TmpTimeBuff[0] = d.da_year-2000;  //把当前年的值赋值给time成员的第1个元素
	  TmpTimeBuff[1] = d.da_mon;      //把当前月的值赋值给time成员的第2个元素
	  TmpTimeBuff[2] = d.da_day;    //把当前天的值赋值给time成员的第3个元素
	  TmpTimeBuff[3] = t.ti_hour;  //把当前小时的值赋值给time成员的第4个元素
	  TmpTimeBuff[4] = t.ti_min; //把当前分钟的值赋值给time成员的第5个元素	  
	  TmpTimeBuff[5] = '\0';    //把字符串结束符的值赋值给time成员的第6个元素
	  	 	
}


int  FunctionAlarm( int alarmtype, int typeofdata )	 
{   
	  unsigned char checksum = 0;
	  unsigned char cs_bytecount;
	  unsigned char i;
	  unsigned char *PutOutTemBuff;
	  unsigned char len;
	  char          string[10];
	  
	  PutOutTemBuff = TmpBuf; //让指针变量的地址指向TmpBuf  	  

/////////////////////////加报数据的固定格式	  
	  PutOutTemBuff[0]=	0x68;
	  PutOutTemBuff[1]=	DTUAddress[0];
	  PutOutTemBuff[2]=	DTUAddress[1];
	  PutOutTemBuff[3]=	0x00;    
	  PutOutTemBuff[4]=	0x68;        
	  
	  PutOutTemBuff[5]= 0x95;  //加报数据的功能码  
	  
	  PutOutTemBuff[6] = 2;    //数据域的长度2*8个字节

    GetTmpTimeInfo( PutOutTemBuff, typeofdata, 0 );

    PutOutTemBuff[17]=	0x30;
    
    itoa(alarmtype,string,10); //把整型转换成十进制字符型,存放在string字符串中
    len = strlen(string);
    if(len<2)
    {
       PutOutTemBuff[18]=	0x30;
       PutOutTemBuff[19]=	string[0];
    }
    else
    {
    	 PutOutTemBuff[18]= string[0];
       PutOutTemBuff[19]=	string[1];
    }
   
    PutOutTemBuff[20]= 0x00; //添加空格符
    PutOutTemBuff[21]= 0x00; //添加空格符
    PutOutTemBuff[22]= 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_Svr(PutOutTemBuff,cs_bytecount+2); //向应用端发送数据
    if(TCPManager[0]->GetConnState( )==OPEN)
    	Send_to_Single_Svr( PutOutTemBuff, APPSERVER1, cs_bytecount+2 );
    
    if(TCPManager[1]->GetConnState( )==OPEN)
    	Send_to_Single_Svr( PutOutTemBuff, APPSERVER2, cs_bytecount+2 ); 
    	    
    return 1;
	 	
}

int Modify_DC_para( unsigned char *CmdDataBuf )
{   
	  unsigned char  i;
	  unsigned char  GetInBuf[30]; 
	  
	  
	  for(i=0; i<20; i++)
	  	GetInBuf[i]=CmdDataBuf[7+i];
	  GetInBuf[20]='\0';

	  strcpy( CenterName, GetInBuf );
	  
	  for(i=0; i<20; i++)
	  	GetInBuf[i]=CmdDataBuf[27+i]; 
	  GetInBuf[20]='\0';
	  
	  strcpy( StationName, GetInBuf );

	  for(i=0; i<11; i++)
	  	GetInBuf[i]=CmdDataBuf[47+i];
	  GetInBuf[11]='\0';	
	  	  
	  strcpy( SIMNum, GetInBuf );	            
	  	
	  return 1;
	   
}	

int Save_DC_para( )
{   
	  int i1,i2,i3;
	
	 

⌨️ 快捷键说明

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