📄 lostevent.lst
字号:
C51 COMPILER V7.50 LOSTEVENT 05/26/2008 08:17:31 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LOSTEVENT
OBJECT MODULE PLACED IN lostevent.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE bottom\lostevent.c LARGE OPTIMIZE(9,SIZE) BROWSE NOAREGS MODDP2 INCDIR(E:\w
-ork\tiger D test\程序\var\) DEBUG OBJECTEXTEND PRINT(.\lostevent.lst) OBJECT(lostevent.obj)
line level source
1 /*************************************************************************************
2
3 文件类型:防窃电和启动潜动模块
4 文件作用:
5 修改权限:
6 文件相关:
7
8 创 建 人:chenbo
9 创建日期:2007.11.21
10 当前版本:Ver1.0
11
12 **************************************************************************************/
13 #include "Tiger.h"
14 #include "typemeter.h"
15
16 static unsigned char code qiedian_code[4][3]= //窃电事件代码
17 {{0,0,0}, //电流反向
18 {0,0,1}, //电流不平衡
19 {0,0,2}, //失压
20 {0,0,3} //强磁干扰
21 };
22
23
24 //==================================================
25 //函数功能:初始化防窃电和潜动模块
26 //==================================================
27 void int_lostqiandong(void)
28 { time_qiandong=0;
29 1 flag_losetenvt_sec=0;
30 1 flag_type=0;
31 1
32 1 sta_dianliufan=0; //电流反向初始化
33 1 sta_checkdialiufan=0;
34 1 sta_bupingheng=0;
35 1 sta_checkbupingheng=0;
36 1 sta_shiya=0;
37 1 sta_checkshiya=0;
38 1 sta_qiangci=0;
39 1 sta_checkqiangci=0;
40 1 time_checkdianliufan=0; //检测到电流反向状态维持时间
41 1 time_checkbupinheng=0; //检测到电流不平衡状态维持时间
42 1 time_checkshiya=0; //检测到失压状态维持时间
43 1 time_checkqiangci=0; //检测到强磁状态维持时间
44 1
45 1 type_qiedian=0xff; //无窃电事件需要处理
46 1 type_shijian=idle_qiedian; //无窃电事件发生
47 1 F_askerasenvernt=0;
48 1
49 1 cuurnt_channl=0; //默认A通道进行计量
50 1 }
51
52 //============================================================
53 //函数功能:判电流反向事件有没有发生
54 //
C51 COMPILER V7.50 LOSTEVENT 05/26/2008 08:17:31 PAGE 2
55 //============================================================
56 void pan_dianliufan(void)
57 { if(Flg_kwhfangxiang==1) //功率反向
58 1 sta_checkdialiufan=start_qiedian; //检测到电流反向
59 1 else
60 1 { if(sta_dianliufan!=idle_qiedian)
61 2 sta_checkdialiufan=end_qiedian; //没有电流反向事件发生
62 2 else
63 2 sta_checkdialiufan=idle_qiedian;
64 2 }
65 1 }
66
67 //=========================================================
68 //函数功能:判电流不平衡事件
69 //
70 //========================================================
71 void pan_bupingheng(void)
72 { unsigned long A_dianliu,B_dianliu,AB_cha;
73 1 Read_datafromID(ID_RMSCURNTA);
74 1 A_dianliu=value_hex_from_4bcd(wr_buff)/100;
75 1 Read_datafromID(ID_RMSCURNTB);
76 1 B_dianliu=value_hex_from_4bcd(wr_buff)/100;
77 1 AB_cha=0;
78 1 if(A_dianliu>B_dianliu) //计算不平衡率
79 1 { if(A_dianliu!=0)
80 2 { AB_cha=(A_dianliu-B_dianliu);
81 3 AB_cha=(10000*AB_cha)/A_dianliu;
82 3 }
83 2 }
84 1 else
85 1 { if(B_dianliu!=0)
86 2 { AB_cha=(B_dianliu-A_dianliu);
87 3 AB_cha=(10000*AB_cha)/B_dianliu;
88 3 }
89 2 }
90 1 Read_datafromID(ID_GATLOSTCUR);
91 1 A_dianliu=value_hex_from_2bcd(wr_buff); //读取失流门限值 xx.xx%
92 1 if(AB_cha>A_dianliu)
93 1 sta_checkbupingheng=start_qiedian; //电流不平衡事件开始
94 1 else
95 1 { if(sta_bupingheng!=idle_qiedian)
96 2 sta_checkbupingheng=end_qiedian; //电流不平衡事件结束
97 2 else
98 2 sta_checkbupingheng=idle_qiedian;
99 2 }
100 1
101 1 }
102
103 //=============================================================
104 //函数功能:判电压失压事件
105 //
106 //==============================================================
107 void pan_shiya(void)
108 { unsigned long temp_data1,temp_data2;
109 1 Read_datafromID(ID_RMSVOLT);
110 1 temp_data1=value_hex_from_4bcd(wr_buff); //读取电压值 xxxx。xxxx
111 1 temp_data1=temp_data1/1000; //xxxx.x
112 1 Read_datafromID(ID_GATCUTPOW);
113 1 temp_data2=value_hex_from_2bcd(wr_buff); //读取门限值
114 1 if(temp_data2>temp_data1)
115 1 sta_checkshiya=start_qiedian; //失压开始
116 1 else
C51 COMPILER V7.50 LOSTEVENT 05/26/2008 08:17:31 PAGE 3
117 1 { if(sta_shiya!=idle_qiedian)
118 2 sta_checkshiya=end_qiedian; //失压结束
119 2 else
120 2 sta_checkshiya=idle_qiedian;
121 2 }
122 1 }
123
124 //==============================================================
125 //函数功能:判强磁干扰事件
126 //
127 //===============================================================
128 void pan_qiangci(void)
129 {
130 1 }
131
132
133
134 //==============================================================
135 //函数功能:防潜清能量桶
136 //
137 //===============================================================
138 void lcr_dianliangsum(void) //清除电量累加器
139 { uint8 i;
140 1 i=ReadMeterFunc(); //禁止CF输出
141 1 SetMeterFunc(i&0xef);
142 1 // PmPwd = 0xcd;
143 1 // W_Byte(0x28a1,0x01);
144 1 // W_Buff(0);
145 1 // W_Byte(0x1072,0);
146 1 // W_Byte(0x1073,0);
147 1 // W_Byte(0x1075,0);
148 1 // W_Byte(0x1076,0);
149 1 // W_Byte(0x28a1,0);
150 1 // PmPwd = 0xcc;
151 1 i=ReadMeterFunc();
152 1 SetMeterFunc(i|0x10); //开CF输出
153 1
154 1 }
155
156 //===================================================
157 //函数功能:停电防窃电功能
158 //
159 //===================================================
160 void fanqiedian_tindian(void)
161 {
162 1 }
163
164 //=====================================================================
165 //函数功能:恢复数据,并保存事件开始时间及事件总次数
166 //
167 //=====================================================================
168 void deel_recoverdata(void)
169 { unsigned int temp_int;
170 1 unsigned char i;
171 1 //===========================================================================事件记录区存贮恢复数据
172 1 if(type_qiedian>0)
173 1 {if(copy_flash(FL_wrbuffer,FL_dianliufanxiang,type_qiedian*100)==0) //拷贝出错
174 2 { if(Ferr_envent==flash_ok) //页没有损坏
175 3 copy_flash(FL_wrbuffer,FL_dianliufanxiang,type_qiedian*100); //再存一次
176 3 }
177 2 else
178 2 { temp_int=(type_qiedian+1)*100;
C51 COMPILER V7.50 LOSTEVENT 05/26/2008 08:17:31 PAGE 4
179 3 if(copy_flash(FL_wrbuffer+temp_int,FL_dianliufanxiang+temp_int,450-temp_int)==0) //拷贝出错
180 3 if(Ferr_envent==flash_ok) //页没有损坏
181 3 copy_flash(FL_wrbuffer+temp_int,FL_dianliufanxiang+temp_int,450-temp_int);
182 3 }
183 2 }
184 1 else
185 1 { if(copy_flash(FL_wrbuffer+100,FL_dianliufanxiang+100,350)==0) //拷贝出错
186 2 if(Ferr_envent==flash_ok) //页没有损坏
187 2 copy_flash(FL_wrbuffer+100,FL_dianliufanxiang+100,350);
188 2 }
189 1 //---------------------------------------------------------------------------结束
190 1
191 1
192 1 temp_int=type_qiedian*100;
193 1 copy_flash(FL_wrbuffer+temp_int,FL_dianliufanxiang+temp_int+10,90); //保存前9次窃电事件
194 1
195 1 //========================================================保存窃电事件的开始时间
196 1 wr_buff[0]=RTCTIME.rYear;; //窃电开始时间
197 1 wr_buff[1]=RTCTIME.rMonth;
198 1 wr_buff[2]=RTCTIME.rDate;
199 1 wr_buff[3]=RTCTIME.rHour;
200 1 wr_buff[4]=RTCTIME.rMinute;
201 1 data_addr.word[1]=FL_dianliufanxiang+type_qiedian*100;
202 1 Write_data(FLASH,5); //保存开始时间
203 1 //--------------------------------------------------------------------结束
204 1
205 1
206 1 //========================================================事件总次数累加并保存
207 1 data_addr.word[1]=FL_wrbuffer+450;
208 1 Read_data(FLASH,15);
209 1 for(i=0;i<15;i++)
210 1 { if(wr_buff[i]==0xff)
211 2 wr_buff[i]=0;
212 2 }
213 1 byte_x_bcd_addone(&wr_buff[2*type_qiedian],2); //某个窃电事件次数加1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -