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

📄 turncontrol.c

📁 一个流量控制仪器的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
/************************************************************************************/
/* G7000 V3 流程控制													*/
/* MCU 型号: Philips P89C668														*/
/* 时钟频率: 11.0592 MHz	6 CLOCK													    */
/* 开发环境: Keil C51 V7.06a															*/
/* 开发日期: 2003.08.23													        	*/
/* 程序编写: BaoFang  鲍方															*/
/* 系统版本: V3.00																	*/
/************************************************************************************/

#include <REG668.H>
#include <Stdio.H>
#include <G7000.H>
#include <CAT24WC16P.H>
#include <Timer.H>
#include <Display.H>
#include <7279A_P2.H>
#include <Menu.H>
#include <BitOp.H>
#include <Flux_PCA.H>
#include <General.H>
#include <CLOCK_DS1307.H>
#include <.\CAN\CAN.H>
#include <Message.H>
#include <List.H>
#include <P89C668.H>

#define uchar unsigned char
#define uint unsigned int


//预定义函数

void fnRun_TurnN();
void fnEnterTurn(uchar ucTurnNum,uchar ucTurnType) reentrant; 

//时段函数
void fnInit_Turn00();
void fnRun_Turn00();
void fnEnd_Turn00();

void fnInit_Turn60();
void fnRun_Turn60();
void fnEnd_Turn60();

void fnInit_Turn01();
void fnRun_Turn01();
void fnEnd_Turn01();

void fnInit_Turn02();
void fnRun_Turn02();
void fnEnd_Turn02();

void fnInit_Turn50();
void fnRun_Turn50();
void fnEnd_Turn50();

void fnInit_Turn70();
void fnRun_Turn70();
void fnEnd_Turn70();

void fnInit_Turn73();
void fnRun_Turn73();
void fnEnd_Turn73();

void fnInit_Turn74();
void fnRun_Turn74();
void fnEnd_Turn74();

void fnInit_Turn75();
void fnRun_Turn75();
void fnEnd_Turn75();

void fnInit_Turn76();
void fnRun_Turn76();
void fnEnd_Turn76();

void fnInit_Turn77();
void fnRun_Turn77();
void fnEnd_Turn77();

void fnInit_Turn95();
void fnRun_Turn95();
void fnEnd_Turn95();


//时段列表

TurnListStruct    code    TurnList[SIZE_OF_TURN_LIST]=
{
	{99,  0, 500, 800, State_XX,	NULL,		&fnRun_TurnN,	NULL},
                                                                           
	{ 0,  0, 504, 802, State_X0,	&fnInit_Turn00,	&fnRun_Turn00,	&fnEnd_Turn00},
                          
	{ 1,  0, 508, 804, State_X2,	&fnInit_Turn01,	&fnRun_Turn01,	&fnEnd_Turn01},
	{ 2,  0, 512, 806, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{ 3,  0, 516, 808, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{ 4,  0, 520, 810, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{ 5,  0, 524, 812, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{ 6,  0, 528, 814, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{ 7,  0, 532, 816, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{ 8,  0, 536, 818, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{ 9,  0, 540, 820, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{10,  0, 544, 822, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{11,  0, 548, 824, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{12,  0, 552, 826, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{13,  0, 556, 828, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{14,  0, 560, 830, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{15,  0, 564, 832, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{16,  0, 568, 834, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{17,  0, 572, 836, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{18,  0, 576, 838, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{19,  0, 580, 840, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
                                                                                   
	{21,  0, 584, 804, State_X2,	&fnInit_Turn01,	&fnRun_Turn01,	&fnEnd_Turn01},
	{22,  0, 588, 806, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{23,  0, 592, 808, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{24,  0, 596, 810, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{25,  0, 600, 812, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{26,  0, 604, 814, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{27,  0, 608, 816, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{28,  0, 612, 818, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{29,  0, 616, 820, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{30,  0, 620, 822, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{31,  0, 624, 824, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{32,  0, 628, 826, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{33,  0, 632, 828, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{34,  0, 636, 830, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{35,  0, 640, 832, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{36,  0, 644, 834, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{37,  0, 648, 836, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{38,  0, 652, 838, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
	{39,  0, 656, 840, State_X2,	&fnInit_Turn02,	&fnRun_Turn02,	&fnEnd_Turn02},
                                           		                             
	{50,  1, 660, 842, State_X3,	&fnInit_Turn50,	&fnRun_Turn50,	&fnEnd_Turn50},
                                          		                     
	{60,  1, 664, 844, State_X1,	&fnInit_Turn60,	&fnRun_Turn60,	&fnEnd_Turn60},
                                          		                     
	{70,  1, 668, 846, State_X4,	&fnInit_Turn70,	&fnRun_Turn70,	&fnEnd_Turn70},
	{71,  1, 672, 848, State_X4,	&fnInit_Turn70,	&fnRun_Turn70,	&fnEnd_Turn70},
                                          		                     
	{73,  1, 676, 850, State_X2,	&fnInit_Turn73,	&fnRun_Turn73,	&fnEnd_Turn73},
	{74,  1, 680, 852, State_X2,	&fnInit_Turn74,	&fnRun_Turn74,	&fnEnd_Turn74},
	{75,  1, 684, 854, State_X1,	&fnInit_Turn75,	&fnRun_Turn75,	&fnEnd_Turn75},
	{76,  1, 688, 856, State_X0,	&fnInit_Turn76,	&fnRun_Turn76,	&fnEnd_Turn76},
	{77,  1, 692, 858, State_X2,	&fnInit_Turn77,	&fnRun_Turn77,	&fnEnd_Turn77},
                                                                          
	{95,  0, 696, 860, State_X0,	&fnInit_Turn95,	&fnRun_Turn95,	&fnEnd_Turn95},
                   
};

//附加输出存储设置CON03-EXTRA
//EXTRA输出在[01]-[19],[21]-[39]及[74]\ [77]输出.
code uchar ucSystemTurnCONEXTRA[SIZE_OF_TURN_LIST] = {
	0,0,1,1,1, 	1,1,1,1,1,
	1,1,1,1,1,	1,1,1,1,1,
	1,1,1,1,1,	1,1,1,1,1,
	1,1,1,1,1,	1,1,1,1,1,
	0,0,0,0,0,	1,0,0,1,0
};


uchar	ucSystemTurnNum;                  //TurnControl.C  系统时段  系统当前所运行的时段
idata uchar	uc2_SystemTurnCon[2]={0,0};
idata uchar	uc4_SystemTurnTime[4]={0,0,0,0};

//以下变量为暂停切换保存被暂停的时段信息
xdata uchar ucSystemTurnNumSaved;	//保存的系统时段
xdata uchar uc2_SystemTurnConSaved [2];	//保存的系统时段控制量
xdata uchar uc5_SystemTurnTimeSaved [5];//保存的系统时段时间量


bit	bSystemTurnRunEnable;		//系统时段运行允许

//



//--------------临时变量---------------//





//--------------系统运行变量---------------//

xdata uint	uiSystemGen0;		//CL(GEN0) 系统总还原的次数	
xdata uint	uiSystemGen1;		//CL(GEN1) 定时引发的次数
xdata uint	uiSystemGen2;		//CL(GEN2) 定量引发的次数
xdata uint	uiSystemGen3;		//CL(GEN3) 手动引发的次数
xdata uint	uiSystemGen4;		//CL(GEN4) 外部开关引发的次数

xdata uchar	uc7_SystemDateTime[7];	//CL(SYSTEMCLOCK) 系统时钟时间

xdata uchar 	uc4_SystemATime[4];	//CR(001E) 表示总的已时行的再生时间
xdata uchar 	uc4_SystemBTime[4];	//CR(002E) 表示非正常起动的总时间
xdata uchar 	ucSystemReturnN =0;	//CR(NUM) 表示实际系统中还原的个数

xdata uchar 	ucSystemSpare;		//CR(SPARE) 表示备用的个数

xdata uint 	uiSystem01C_Time;	//	从[01]时间段开始的还原总时间(秒 小于1小时 3600秒)
xdata uchar 	uc4_SystemCTime[4];	//	从[01]时间段开始的还原总时间

xdata uchar 	ucSystem7071Time;	//	70、71的运行时间(秒)
xdata uchar 	uc4_System7071Time[4];	//	70、71总计运行时间

xdata uchar 	uc4_System73Time[4];	//	[73] 时间段的累积时间
xdata uchar 	uc4_System74Time[4];	//	[74] 时间段的累积时间


xdata uchar	ucSystemCouse;		//系统触发变量(位选择)

xdata uchar	ucSystemAlarm;		//系统报警变量(位选择)

xdata uchar	ucSystemPause;		//系统暂停变量(位选择)

//--------------系统中间变量---------------//

xdata uchar	ucSystemRG1;		//系统中间变量1(位选择)


xdata uchar ucSystemPowerOff;	//系统掉电复位状态,初始化时候的PowerOff函数返回值

xdata uchar ucZRAMTime;			//系统掉电刷新时间秒计时器









/*******************************************************************
		时段运行时间写入显示缓冲区  函数(格式转换)
函数原型: void fnTurnTimeToDBuf();
功能: 	说明:把系统时段时间量:uchar uc5_TurnTime[5];  
        写入到显示缓冲区-流程显示。(格式转换)Display_02Turn
涉及变量:uchar uc5_TurnTime[5]
********************************************************************/
void fnTurnTimeToDBuf()
{
        uchar *pucDBuf;

        pucDBuf = fnDisplayBufSet(Display_02Turn);

        pucDBuf[0] = TurnList[ucSystemTurnNum].ucTurnIndex / 10;        //时段的十位
        pucDBuf[1] = TurnList[ucSystemTurnNum].ucTurnIndex % 10;        //时段的个位
        
        pucDBuf[2] = 0x0a;                      //分隔符号 -

        if((uc5_TurnTime[1]>=10) | (uc5_TurnTime[0] !=0))
        {
                //显示 999.59.
                pucDBuf[3] = uc5_TurnTime[0];           //时段运行时间的百小时
                pucDBuf[4] = uc5_TurnTime[1]/10;        //时段运行时间的小时十位
                pucDBuf[5] = uc5_TurnTime[1]%10 + 0x80; //时段运行时间的小时个位
                pucDBuf[6] = uc5_TurnTime[2]/10;        //时段运行时间的分钟十位
                pucDBuf[7] = uc5_TurnTime[2]%10 + 0x80; //时段运行时间的分钟个位

                fnDisplaySetDk(Display_02Turn,0x20);       //设置闪烁 -

        }
        else
        {
                //显示 9.59.59.
                pucDBuf[3] = uc5_TurnTime[1]%10 + 0x80; //时段运行时间的小时个位
                pucDBuf[4] = uc5_TurnTime[2]/10;        //时段运行时间的分钟十位
                pucDBuf[5] = uc5_TurnTime[2]%10 + 0x80; //时段运行时间的分钟个位
                pucDBuf[6] = uc5_TurnTime[3]/10;        //时段运行时间的秒十位
                pucDBuf[7] = uc5_TurnTime[3]%10 + 0x80; //时段运行时间的秒个位

                fnDisplaySetDk(Display_02Turn,0);       //设置闪烁 0
        }
}


/*******************************************************************
		时段默认执行函数
函数原型: void fnRun_TurnN()
功能: 	时段默认执行函数,判断时段运行
涉及变量:
********************************************************************/
void fnRun_TurnN()
{
        //判断时段结束?
        if(fnIfEnd_TurnTime())
                if(ucSystemTurnNum<Turn_95)
                        fnEnterTurn(ucSystemTurnNum+1,0);
                else
                        fnEnterTurn(Turn_99,0);
                
}

/*******************************************************************
		根据系统报警变量CL(ALARMx)输出到外部报警接口。
函数原型: void fnOutput_SystemAlarm();
功能: 	根据系统报警变量CL(ALARMx)输出到外部报警接口。
涉及变量:
		CL(ALARMx)
		
	系统报警变量(位选择)
	uchar	ucSystemAlarm;

********************************************************************/
void fnOutput_SystemAlarm()
{
	if(ucSystemAlarm)
		//其它控制输出  报警位输出
		ucCON03_Buf = fnBitSet( ucCON03_Buf , 0 );
	else
		//其它控制输出  报警位关闭
		ucCON03_Buf = fnBitClr( ucCON03_Buf , 0 );		
	
	CON03 = ucCON03_Buf;
}






/*******************************************************************
		时段控制量外部输出控制  函数(格式转换)附加输出
函数原型: void fnCONoutput();
功能: 	把系统时段控制量:uchar uc2_SystemTurnCon[2];  直接输出到外部。(格式转换)
	!!根据当前时间段,设置附加输出!!CON03-EXTRA !!
涉及变量:uchar uc2_SystemTurnCon[2];
********************************************************************/
void fnCONoutput()
{
        uchar ucCONtemp0,ucCONtemp1;

        //格式转换  内部格式-》外部格式
        ucCONtemp0=(uc2_SystemTurnCon[0]&0x1F)|(uc2_SystemTurnCon[1]<<5);
	ucCONtemp1=(uc2_SystemTurnCon[1]>>3)&0x03;

        //输出到外部
        CON01 = ucCONtemp0;
        CON02 = ucCONtemp1;
        
        //!!根据当前时间段,设置附加输出!!CON03-EXTRA !!
        if(ucSystemTurnCONEXTRA[ucSystemTurnNum])
		//其它控制输出  附加输出
		ucCON03_Buf = fnBitSet( ucCON03_Buf , 1 );
	else
		//其它控制输出  附加输出
		ucCON03_Buf = fnBitClr( ucCON03_Buf , 1 );		
	
	CON03 = ucCON03_Buf;
	        
}


/*******************************************************************
		时段控制初始化
函数原型: void fnInit_Turn();
功能: 	时段控制初始化,系统预定从Turn_99时段开始运行,运行暂停
********************************************************************/
void	fnInit_Turn()
{
        ucSystemTurnNum = Turn_99;

        bSystemTurnRunEnable = 0;       //运行暂停??
        
        //系统参数初始化
        uiSystemGen0 = 0;
        uiSystemGen1 = 0;
        uiSystemGen2 = 0;
        uiSystemGen3 = 0;
        uiSystemGen4 = 0;
        
        ucSystemReturnN =0;
        
        ucSystemSpare =0;
        
        ucSystemCouse =0;
        ucSystemAlarm =0;
        ucSystemPause =0;
        
        ucSystemRG1 =0;

        uc4_System73Time[0] = 0;
        uc4_System73Time[1] = 0;
        uc4_System73Time[2] = 0;
        uc4_System73Time[3] = 0;
        
        uc4_System74Time[0] = 0;
        uc4_System74Time[1] = 0;
        uc4_System74Time[2] = 0;
        uc4_System74Time[3] = 0;

		ucZRAMTime = 0;

}

/*******************************************************************
		时段切换函数
函数原型: void	fnEnterTurn(uchar ucTurnNum,uchar ucTurnType);
功能: 	时段切换函数,系统结束上一个时段,进入下一个时段运行。

涉及变量:	uchar ucTurnNum		切换的时段
		uchar ucTurnType	切换的方式
		0	正常切换
		1	暂停切换
		2	暂停返回

********************************************************************/

void	fnEnterTurn(uchar ucTurnNum,uchar ucTurnType) reentrant
{
        void    (*pfnFunc)();
        uchar	i;
        uchar	ucTurnSkip;	//当为1时,表明当前时段为空,不需要发送网络信息。
        
        ucTurnSkip = 0;

        //---------上时段关闭流程---------//

                //时段运行停止(无论定时器结束自动停止,暂停时段计时函数)
	bSystemTurnRunEnable = 0;
	fnStop_TurnTime();

        

⌨️ 快捷键说明

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