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

📄 taskproc.cpp

📁 湖北水文黄石试点集中器代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
#include <bios.h>
#include "tmrisr.h"
#include "cmdproc.h"
#include "downcmd.h"
#include "fileio.h"
#include "macrodef.h"
#include "taskproc.h"
#include "sms_ring.h"
#include "gprsproc.h"
#include "tcpclnt.h"  //add by wuhuan 2006.6.3
#include "etr232i.h"
#include "readini.h"

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

/*************************************************************** 
  在MAIN.CPP中定义,让ETR232I模块在接收短信和检查震铃两种状态间切换;
  SMSRingFlg = WaitingSMS: waiting SMS state; 
             = WaitingRing: waiting Ring state;
***************************************************************/
int SMSRingFlg = WaitingSMS;
extern int TaskFlg;
extern struct date    d;

unsigned char  RfIvtwakeupflg=0, WlIvtwakeupflg=0;   
unsigned char  Rftimingwakeupflg=0, Wltimingwakeupflg=0;
unsigned char  Rfalarmflg=0, Wlalarmflg=0;
unsigned char  FirstRFTRflg=1, FirstWLTRflg=1;

//char           Rfzcflg=0, Rfdwkzbflg=0;
char           Rfdwkzbflg=0;
char           Wlzcflg=0, Wldwkzbflg=0;
char           Pzrfscflg=0, Pzwlscflg=0;
char           Pzrfivtflg=0, Pzwlivtflg=0;

extern unsigned char   MalFunctionflg;  //故障报警标志
extern unsigned char   ReportRFTimeoutCnt;
extern unsigned char   ReportWLTimeoutCnt;

extern int DataWakeUp[2];
extern int Num_of_thr[2]; 
extern int Ivtime[2];
extern int TimingWakeUp[2];
extern int IvtimeWakeUp[2];
extern ThRWAKEUPSTRUCT ThrWakeUp[2][8];

//extern unsigned char WhoSendZcrfCMD;
extern unsigned char WhoSendZcwlCMD;
extern unsigned char WhoSendPzrfscCMD;
extern unsigned char WhoSendPzwlscCMD;
extern unsigned char WhoSendPzrfivtCMD;
extern unsigned char WhoSendPzwlivtCMD;

//add by wuhuan 2006.05.25
PARAFROMCENTER ParaFromCenter1={0,0,0,0};
PARAFROMCENTER ParaFromCenter2={0,0,0,0};

extern RAINFALLDATA OutRainfallregdata;
extern WATERLEVELDATA OutWaterLevelregdata;

extern char  AlarmTimeBuff[6];
extern int   ARTimeUnit;  //add by wuhuan 2006.7.18

unsigned char ManualTimeBuff[12];
unsigned char HDFlgBuff[5];
unsigned char HDDataBuff[6];

extern unsigned char  ManualWLBuff[50];
extern unsigned char  ManualRFBuff[50];

extern unsigned char far   TmpBuf[1536];
extern int DTUAddress[3];

extern char RFRegTimeBuff[3][6];
extern char WLRegTimeBuff[3][6];

unsigned int ReportRFTimeoutFlg=0;
unsigned int ReportWLTimeoutFlg=0;

int CheckActCmd( )
{  
	 int            i, len;
	 unsigned char  State_of_Active; 
	 
	 if(SMSRingFlg == WaitingSMS)  State_of_Active = ActBySMS;   
	 else State_of_Active = ActByRing;   
	 	
	 switch(State_of_Active)
	 {
	 	   case ActBySMS:      	 	 
	 	   	    if(RcvSMS( )) { return 1; }	
	 	   	    break;	 	
	 	
	 	   case ActByRing:  	 	   	    
	 	   	    if(RcvRing( )) { return 1; }
	 	   	    break;	 	   	    	 		 	   
	 }
	 
	 return 0;
	 	 
}	 	   	    	
 
void FixTimeReportDataProc( )
{	  
	  unsigned long i, j;
	  unsigned long RFIvtimeWK_Unit10ms;
	  unsigned long WLIvtimeWK_Unit10ms;
    struct time  t;
    
    i = IvtimeWakeUp[0]; 
    j = IvtimeWakeUp[1];
    
    RFIvtimeWK_Unit10ms = i*6000;
    WLIvtimeWK_Unit10ms = j*6000 + 300;
    
    gettime( &t );
	
			 if((Timer_RfIvtwakeupCnt>=(RFIvtimeWK_Unit10ms))&&(IvtimeWakeUp[0]!=0)) 
			 {    
			 	    Timer_RfIvtwakeupCnt = 0;
           	RfIvtwakeupflg = 1;        	//间隔唤醒雨量上报    	 	 
           	TaskFlg = PPPConneting;	
       }           	    	 	
       
       //检查是否到达定时上报雨量的时间 
       if((t.ti_hour==TimingWakeUp[0])&&(t.ti_min<=1)&&(FirstRFTRflg==1))
       {
       	       	   
       	   Rftimingwakeupflg = 1;        //定时唤醒雨量上报	    	  
           TaskFlg = PPPConneting; 
       	   FirstRFTRflg = 0;
       	
       }
              
			  if((Timer_WlIvtwakeupCnt>=(WLIvtimeWK_Unit10ms))&&(IvtimeWakeUp[1]!=0)) //定时间隔上报水位 	
			  {   
			  	  Timer_WlIvtwakeupCnt = 0;    //定时唤醒间隔水位上报
           	WlIvtwakeupflg = 1;        	    	 	 
           	TaskFlg = PPPConneting;	           	
        }
          
        //定时上报水位 	    	 	     	    
        if((t.ti_hour==TimingWakeUp[1])&&(t.ti_min<=1)&&(FirstWLTRflg==1))                	    	
        {           	
           	Wltimingwakeupflg = 1;        //定时唤醒水位上报	    	  
           	TaskFlg = PPPConneting;          	
           	FirstWLTRflg = 0;
                                 	    	    	 	
        }       
              		
}

  
void IfReport485DataProc( unsigned char *Rs485DataBuf )
{        	
  if(Rs485DataBuf[3]==0x01)     ///雨量数据处理
  {					  	 	    	  
       if((Rs485DataBuf[5]==0x83)&&(DataWakeUp[0]!=0))  //雨量数据触发自报
	     {	
	    	  Rfdwkzbflg = 1;	 
          TaskFlg = PPPConneting;
       }
                	    	 	
       if(Rs485DataBuf[5]==0x84)          //采集器应答配置雨量采集间隔时间
       {
            Timer3sCnt_pzrfivt=0;     //配置雨量采集间隔时间定时器清零       	
            Timer3sCnt_pzrfivt_flg=0; //配置雨量采集间隔时间定时器关闭       	
       	    Pzrfivtflg = 1;        	    
       }
              
       if(Rs485DataBuf[5]==0x86) //采集器应答配置雨量加报数据发送条件
       {
            Timer3sCnt_pzrfsc=0;      	
            Timer3sCnt_pzrfsc_flg=0; //配置雨量发送条件定时器关闭标志        	
       	    Pzrfscflg = 1;  
       }             
       
       if(Rs485DataBuf[5]==0x88)  //判断是否需要加报雨量数据
       {     	 
       	    Rfalarmflg=1;
            TaskFlg = PPPConneting;       	    	         	          	          	
       } 
  }  
           	    
////////////////////////////////////////////////////////////////////////////////	    
	 if(Rs485DataBuf[3]==0x02)    //水位数据处理
	  {
        if((Rs485DataBuf[5]==0x83)&&(DataWakeUp[1]!=0 ))
	      {
            TaskFlg = PPPConneting;
            Wldwkzbflg = 1;	 //水位数据触发自报			  	
	      }
	      
	      if(Rs485DataBuf[5]==0x82)  //采集器上报召测水位数据
			  {
            Timer3sCnt_zcwl = 0;
            Timer3sCnt_zcwl_flg = 0; 			  	
	          Wlzcflg = 1;				  	 	
	      }			  
			  
        if(Rs485DataBuf[5]==0x84) //采集器应答配置水位采集间隔时间
        {
            Timer3sCnt_pzwlivt=0;     //配置水位采集间隔时间定时器清零        	
            Timer3sCnt_pzwlivt_flg=0; //配置水位采集间隔时间定时器关闭        	
       	    Pzwlivtflg = 1;  
        }
       
        if(Rs485DataBuf[5]==0x86) //采集器应答配置水位加报数据发送条件
        {            	   
             Timer3sCnt_pzwlsc=0;           	
             Timer3sCnt_pzwlsc_flg=0; //配置水位发送条件定时器关闭标志       	  
       	     Pzwlscflg = 1;  
        }                 	    	 	

        if(Rs485DataBuf[5]==0x88)  //判断是否需要加报水位数据       
        {          	     	 	           	
            Wlalarmflg=1;
           	TaskFlg = PPPConneting;	
        } 
    }
 
}

void IfNeedMalfunctionAlarm(  )
{   
	  unsigned long i, j;
	  unsigned long RFIvtime_Unit10ms;
	  unsigned long WLIvtime_Unit10ms;
    
    i = Ivtime[0];
    j = Ivtime[1];
    RFIvtime_Unit10ms = i*6000;
    WLIvtime_Unit10ms = j*6000;
	  
	  
	  if(TimerCnt_485hasRFdata>=(1.5*RFIvtime_Unit10ms+2000))
	  {
        
	  	  TimerCnt_485hasRFdata = 0.5*RFIvtime_Unit10ms;	  	  
	  	  ReportRFTimeoutCnt++;
	  	  ReportRFTimeoutFlg++;
	  	  
	  	  if(ReportRFTimeoutCnt>=3)
	  	  {  

	  	  	 ReportRFTimeoutCnt = 2;
	  	  	 
	  	  	 if((ReportRFTimeoutFlg%4)==1)
	  	  	 {	  	        	  
              TaskFlg = PPPConneting;
           }
        }
    }
	  
	  if(TimerCnt_485hasWLdata>=(1.5*WLIvtime_Unit10ms+2000))	
	  {

	  	  TimerCnt_485hasWLdata = 0.5*WLIvtime_Unit10ms;
	  	  ReportWLTimeoutCnt++; 
	  	  ReportWLTimeoutFlg++;
	  	  
	  	  if(ReportWLTimeoutCnt>=3)
	  	  { 

	  	  	 ReportWLTimeoutCnt = 2;
	  	  	 
	  	  	 if((ReportWLTimeoutFlg%4)==1)
	  	  	 {
             TaskFlg = PPPConneting;
           }
        }
    }       	  	  	  
           	    
    if((Timer3sCnt_zcwl>=500)&&(Wlzcflg==0))
    {   
        Timer3sCnt_zcwl = 0;
        Timer3sCnt_zcwl_flg = 0;    	  
        Wlzcflg = -1;
        GetSystemTime( AlarmTimeBuff );
        TaskFlg = PPPConneting;                   	    	  
    }
    
    if((Timer3sCnt_pzrfsc>=500)&&(Pzrfscflg==2))
    {   	   
    	  Timer3sCnt_pzrfsc = 0;
    	  Timer3sCnt_pzrfsc_flg=0; //配置雨量发送条件定时器关闭标志
    	  Pzrfscflg=-1;
    	  GetSystemTime( AlarmTimeBuff );
        TaskFlg = PPPConneting;
         
    } 
    
    if((Timer3sCnt_pzwlsc>=500)&&(Pzwlscflg==2))
    {
        Timer3sCnt_pzwlsc=0;    	
        Timer3sCnt_pzwlsc_flg=0; //配置水位发送条件定时器关闭标志      	
        Timer3sCnt_pzwlsc = 0;    	
    	  Pzwlscflg=-1;
    	  GetSystemTime( AlarmTimeBuff );
        TaskFlg = PPPConneting;
         
    } 
    
    if((Timer3sCnt_pzrfivt>=500)&&(Pzrfivtflg==2))
    {
        Timer3sCnt_pzrfivt_flg=0; //配置雨量采集间隔时间定时器关闭
        Timer3sCnt_pzrfivt=0;     //配置雨量采集间隔时间定时器清零    	
    	  Pzrfivtflg=-1;
    	  GetSystemTime( AlarmTimeBuff );
        TaskFlg = PPPConneting;
         
    } 
    
    if((Timer3sCnt_pzwlivt>=500)&&(Pzwlivtflg==2))
    {
        Timer3sCnt_pzwlivt_flg=0; //配置水位采集间隔时间定时器关闭
        Timer3sCnt_pzwlivt=0;     //配置水位采集间隔时间定时器清零    	   	
    	  Pzwlivtflg=-1;
    	  GetSystemTime( AlarmTimeBuff );
        TaskFlg = PPPConneting;
         
    }    

}


//add by wuhuan 2006.5.25
extern unsigned char NewRfScCmdDataBuf[150];
extern unsigned char NewWlScCmdDataBuf[150];
extern unsigned char NewRfIvtCmdDataBuf[15];
extern unsigned char NewWlIvtCmdDataBuf[15];
/////////////////////////////////////////
int TansferData_to_Center( int Center, char *CurrentWaterLevel )
{
	  int   i=0;
	  char *Rainfall; 
	  char *WaterLevel;
	  char datatype;
	  char TrigType; 
	  
	  int  RGatherIvtime;
	            	 
    
  ///////////////////////////////////////上报降雨量
  
        if (Rfdwkzbflg) TrigType=0x31;

⌨️ 快捷键说明

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