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

📄 lostevent.lst

📁 电能表源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
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 + -