📄 turncontrol.c
字号:
/************************************************************************************/
/* 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 + -