📄 taskproc.cpp
字号:
#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 + -