📄 biaogai_duanliu.c
字号:
/*************************************************************************************
文件类型:防窃电和启动潜动模块
文件作用:
修改权限:
文件相关:
创 建 人:chenbo
创建日期:2007.11.21
当前版本:Ver1.0
**************************************************************************************/
#include "Tiger.h"
#include "typemeter.h"
/*
//================================================
//函数功能:初始化端钮盖、表盖停电期间报警模块
//
//================================================
void ini_tindianBGDN(void)
{ unsigned char i;
flag_BGsta。byte=0;
flag_BGsta。byte=0;
for(i=0;i<64;i++)
{ram_BGDN[i]=IAP_FLASH_ByteRead(FL_lasteng+420+i);
}
}
*/
//==================================================
//函数功能:初始化防窃电和潜动模块
//==================================================
void int_kaiqi(void)
{ sta_biaogai=0;
sta_checkbiaogai=0;
sta_duanliu=0;
sta_checkduanliu=0;
time_biaogai=0;
time_duanliu=0;
type_kaiqi=0xff;
type_kaiqievent=idle_qiedian;
F_askerashistdata=0;
flag_biaogai_duanliu=0;
time_qiandong=0;
flag_losetenvt_sec=0;
flag_type=0;
// Disenable_BGkeyout //表盖,端钮盖检测IO口输出禁止
// Disenable_DNkeyout
// Enable_BGkeyin //输入使能
// Enable_DNkeyin
}
//=====================================================================
//函数功能:恢复数据,并保存事件开始时间及事件总次数
//
//=====================================================================
void recover_biaogaiduanliu_eng(void)
{
unsigned char i;
//===========================================================================开启事件数据恢复
if(type_kaiqi==1) //端钮盖开启
{if(copy_flash(FL_wrbuffer+420,FL_lasteng+420,30)==0) //拷贝出错
{ if(Ferr_histdata==flash_ok) //页没有损坏
copy_flash(FL_wrbuffer+420,FL_lasteng+420,30); //再存一次
}
}
else //表盖开启
{ if(copy_flash(FL_wrbuffer+450,FL_lasteng+450,30)==0) //拷贝出错
{if(Ferr_histdata==flash_ok) //页没有损坏
copy_flash(FL_wrbuffer+450,FL_lasteng+450,30);
}
}
//---------------------------------------------------------------------------结束
//========================================================保存窃电事件的开始时间
wr_buff[0]=RTCTIME.rYear; //窃电开始时间
wr_buff[1]=RTCTIME.rMonth;
wr_buff[2]=RTCTIME.rDate;
wr_buff[3]=RTCTIME.rHour;
wr_buff[4]=RTCTIME.rMinute;
data_addr.word[1]=FL_lasteng+420+type_kaiqi*30;
Write_data(FLASH,5); //保存开始时间
//--------------------------------------------------------------------结束
//========================================================相应开启次数累加
data_addr.word[1]=FL_wrbuffer+480;
Read_data(FLASH,4);
for(i=0;i<4;i++)
{ if(wr_buff[i]==0xff)
wr_buff[i]=0;
}
byte_x_bcd_addone(&wr_buff[2*type_qiedian],2); //开启次数加1
data_addr.word[1]=FL_lasteng+480;
Write_data(FLASH,4);
//----------------------------------------------------------结束
}
//======================================================================
//函数功能:保存结束事件
//
//======================================================================
void deel_endkaiqi(unsigned char type)
{
wr_buff[0]=RTCTIME.rYear; //窃电结束时间
wr_buff[1]=RTCTIME.rMonth;
wr_buff[2]=RTCTIME.rDate;
wr_buff[3]=RTCTIME.rHour;
wr_buff[4]=RTCTIME.rMinute;
data_addr.word[1]=FL_lasteng+420+type*30+5;
Write_data(FLASH,5); //保存结束时间
}
//==========================================================================
//函数功能:判端钮盖状态
//
//==========================================================================
void pan_duanliu(void)
{ /*
Enable_DNkeyin
if(Sta_DNkeyinput==OPEN_DN)
{ sta_checkduanliu=start_qiedian; //端钮盖开启
}
else
{ if(sta_duanliu!=idle_qiedian)
{ sta_checkduanliu=end_qiedian;
}
else
{ sta_checkduanliu=idle_qiedian;
}
}
*/
}
//==========================================================================
//函数功能:判表盖状态
//
//==========================================================================
void pan_biaogai(void)
{/* Enable_BGkeyin
if(Sta_BGkeyinput==OPEN_BG)
{ sta_checkbiaogai=start_qiedian; //表盖开启
}
else
{ if(sta_biaogai!=idle_qiedian)
{ sta_checkbiaogai=end_qiedian;
}
else
{ sta_checkbiaogai=idle_qiedian;
}
}
*/
}
//==========================================================================
//函数功能:表盖、端钮盖防开启模块
//备注:两个事件不能同事检测,必须等到一个事件检测完毕,再渐次另外事件
//==========================================================================
void biaogai_duanliu_mode(void)
{ //unsigned char tempdata;
if(flag_biaogai_duanliu==1)
{ if(type_kaiqi==0xff) //如果无窃电事件需要处理
{ if(busy_buffflash==0) //如果缓存flash空闲
{ if(flag_type>2)
{ flag_type=0; //一轮事件判断结束
flag_losetenvt_sec=0;
}
else
flag_type++;
switch(flag_type)
{ case 0: //表盖开启
pan_biaogai();
type_shijian=pan_lostshijian(&sta_biaogai,&sta_checkbiaogai,&time_biaogai,5);
break;
case 1: //端钮盖开启
break;
default:
flag_type=0;
break;
}
if(type_shijian!=idle_qiedian) //窃电事件开始
type_qiedian=flag_type; //表示窃电事件处理开始
}
}
if(type_qiedian!=0xff) //如果有窃电事件进行处理
{ if(type_shijian==start_qiedian) //如果事件开始状态还没处理
{ busy_buffflash=1; //置位buff忙标志位
if(copy_flash(FL_lasteng,FL_wrbuffer,512)==1) //如果保存数据到缓存成功
{ F_askerashistdata=1; //事件页擦除
type_shijian=ok_copybuff; //状态切换到准备保存数据
}
else //如果拷贝失败
{ if(Ferr_buff==flash_err) //如果本来该页已经错误
{ F_askerashistdata=1; //事件页擦除
type_shijian=ok_copybuff; //状态切换到准备保存数据
}
else
F_askerasbuffer=1; //存数据失败,对缓存进行擦除
}
}
else if((type_shijian==ok_copybuff)&&(F_askerashistdata==0)) //如果缓存数据完毕且页擦除完毕
{ recover_biaogaiduanliu_eng(); //恢复数据并保存开始事件
type_qiedian=0xff; //处理结束,继续处理下一事件
F_askerasbuffer=1; //擦buffer页
}
else if(type_shijian==end_qiedian) //事件结束
{ deel_endkaiqi(type_qiedian); //处理结束事件
type_qiedian=0xff; //处理结束,继续处理下一事件
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -