?? lostevent.c
字號(hào):
/*************************************************************************************
文件類型:防竊電和啟動(dòng)潛動(dòng)模塊
文件作用:
修改權(quán)限:
文件相關(guān):
創(chuàng) 建 人:chenbo
創(chuàng)建日期:2007.11.21
當(dāng)前版本:Ver1.0
**************************************************************************************/
#include "Tiger.h"
#include "typemeter.h"
static unsigned char code qiedian_code[4][3]= //竊電事件代碼
{{0,0,0}, //電流反向
{0,0,1}, //電流不平衡
{0,0,2}, //失壓
{0,0,3} //強(qiáng)磁干擾
};
//==================================================
//函數(shù)功能:初始化防竊電和潛動(dòng)模塊
//==================================================
void int_lostqiandong(void)
{ time_qiandong=0;
flag_losetenvt_sec=0;
flag_type=0;
sta_dianliufan=0; //電流反向初始化
sta_checkdialiufan=0;
sta_bupingheng=0;
sta_checkbupingheng=0;
sta_shiya=0;
sta_checkshiya=0;
sta_qiangci=0;
sta_checkqiangci=0;
time_checkdianliufan=0; //檢測(cè)到電流反向狀態(tài)維持時(shí)間
time_checkbupinheng=0; //檢測(cè)到電流不平衡狀態(tài)維持時(shí)間
time_checkshiya=0; //檢測(cè)到失壓狀態(tài)維持時(shí)間
time_checkqiangci=0; //檢測(cè)到強(qiáng)磁狀態(tài)維持時(shí)間
type_qiedian=0xff; //無竊電事件需要處理
type_shijian=idle_qiedian; //無竊電事件發(fā)生
F_askerasenvernt=0;
cuurnt_channl=0; //默認(rèn)A通道進(jìn)行計(jì)量
}
//============================================================
//函數(shù)功能:判電流反向事件有沒有發(fā)生
//
//============================================================
void pan_dianliufan(void)
{ if(Flg_kwhfangxiang==1) //功率反向
sta_checkdialiufan=start_qiedian; //檢測(cè)到電流反向
else
{ if(sta_dianliufan!=idle_qiedian)
sta_checkdialiufan=end_qiedian; //沒有電流反向事件發(fā)生
else
sta_checkdialiufan=idle_qiedian;
}
}
//=========================================================
//函數(shù)功能:判電流不平衡事件
//
//========================================================
void pan_bupingheng(void)
{ unsigned long A_dianliu,B_dianliu,AB_cha;
Read_datafromID(ID_RMSCURNTA);
A_dianliu=value_hex_from_4bcd(wr_buff)/100;
Read_datafromID(ID_RMSCURNTB);
B_dianliu=value_hex_from_4bcd(wr_buff)/100;
AB_cha=0;
if(A_dianliu>B_dianliu) //計(jì)算不平衡率
{ if(A_dianliu!=0)
{ AB_cha=(A_dianliu-B_dianliu);
AB_cha=(10000*AB_cha)/A_dianliu;
}
}
else
{ if(B_dianliu!=0)
{ AB_cha=(B_dianliu-A_dianliu);
AB_cha=(10000*AB_cha)/B_dianliu;
}
}
Read_datafromID(ID_GATLOSTCUR);
A_dianliu=value_hex_from_2bcd(wr_buff); //讀取失流門限值 xx.xx%
if(AB_cha>A_dianliu)
sta_checkbupingheng=start_qiedian; //電流不平衡事件開始
else
{ if(sta_bupingheng!=idle_qiedian)
sta_checkbupingheng=end_qiedian; //電流不平衡事件結(jié)束
else
sta_checkbupingheng=idle_qiedian;
}
}
//=============================================================
//函數(shù)功能:判電壓失壓事件
//
//==============================================================
void pan_shiya(void)
{ unsigned long temp_data1,temp_data2;
Read_datafromID(ID_RMSVOLT);
temp_data1=value_hex_from_4bcd(wr_buff); //讀取電壓值 xxxx。xxxx
temp_data1=temp_data1/1000; //xxxx.x
Read_datafromID(ID_GATCUTPOW);
temp_data2=value_hex_from_2bcd(wr_buff); //讀取門限值
if(temp_data2>temp_data1)
sta_checkshiya=start_qiedian; //失壓開始
else
{ if(sta_shiya!=idle_qiedian)
sta_checkshiya=end_qiedian; //失壓結(jié)束
else
sta_checkshiya=idle_qiedian;
}
}
//==============================================================
//函數(shù)功能:判強(qiáng)磁干擾事件
//
//===============================================================
void pan_qiangci(void)
{
}
//==============================================================
//函數(shù)功能:防潛清能量桶
//
//===============================================================
void lcr_dianliangsum(void) //清除電量累加器
{ uint8 i;
i=ReadMeterFunc(); //禁止CF輸出
SetMeterFunc(i&0xef);
// PmPwd = 0xcd;
// W_Byte(0x28a1,0x01);
// W_Buff(0);
// W_Byte(0x1072,0);
// W_Byte(0x1073,0);
// W_Byte(0x1075,0);
// W_Byte(0x1076,0);
// W_Byte(0x28a1,0);
// PmPwd = 0xcc;
i=ReadMeterFunc();
SetMeterFunc(i|0x10); //開CF輸出
}
//===================================================
//函數(shù)功能:停電防竊電功能
//
//===================================================
void fanqiedian_tindian(void)
{
}
//=====================================================================
//函數(shù)功能:恢復(fù)數(shù)據(jù),并保存事件開始時(shí)間及事件總次數(shù)
//
//=====================================================================
void deel_recoverdata(void)
{ unsigned int temp_int;
unsigned char i;
//===========================================================================事件記錄區(qū)存貯恢復(fù)數(shù)據(jù)
if(type_qiedian>0)
{if(copy_flash(FL_wrbuffer,FL_dianliufanxiang,type_qiedian*100)==0) //拷貝出錯(cuò)
{ if(Ferr_envent==flash_ok) //頁沒有損壞
copy_flash(FL_wrbuffer,FL_dianliufanxiang,type_qiedian*100); //再存一次
}
else
{ temp_int=(type_qiedian+1)*100;
if(copy_flash(FL_wrbuffer+temp_int,FL_dianliufanxiang+temp_int,450-temp_int)==0) //拷貝出錯(cuò)
if(Ferr_envent==flash_ok) //頁沒有損壞
copy_flash(FL_wrbuffer+temp_int,FL_dianliufanxiang+temp_int,450-temp_int);
}
}
else
{ if(copy_flash(FL_wrbuffer+100,FL_dianliufanxiang+100,350)==0) //拷貝出錯(cuò)
if(Ferr_envent==flash_ok) //頁沒有損壞
copy_flash(FL_wrbuffer+100,FL_dianliufanxiang+100,350);
}
//---------------------------------------------------------------------------結(jié)束
temp_int=type_qiedian*100;
copy_flash(FL_wrbuffer+temp_int,FL_dianliufanxiang+temp_int+10,90); //保存前9次竊電事件
//========================================================保存竊電事件的開始時(shí)間
wr_buff[0]=RTCTIME.rYear;; //竊電開始時(shí)間
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_dianliufanxiang+type_qiedian*100;
Write_data(FLASH,5); //保存開始時(shí)間
//--------------------------------------------------------------------結(jié)束
//========================================================事件總次數(shù)累加并保存
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -