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

📄 prepayctl.c

📁 本公司的单相CPU卡表的源程序代码
💻 C
字号:
/*******************************************************************
* PrepayCNL.c    :
*
********************************************************************/
#include "include\macro.h"  
#include "include\HardConfig.h"
#include "include\SysConfig.h"
#include "include\SubConfig.h"
#include "include\data.h"
#include "include\bitdef.h"

#include "include\FunAnnounce.h"


/******************************************************************
*功能描述:
*        通过对剩余电量或过零电量的数据判断来生成用户用电状态标识。
*     标识如果发生改变则修改EEPROM的相应位置。
*输出: 无
*备注:用户用电状态共5种:
*       REPAY_NATURAL  正常用电状态。
*       REPAY_ALRM1    低于报警1用电状态。
*       REPAY_ALRM2    低于报警2用电状态。  
*       REPAY_ZERO     过零用电状态。
*       REPAY_CREDIT   过赊欠用电状态。
*******************************************************************/
void PrepayCTL(void)
{
 uchar tmp_stu;

    tmp_stu =  Sram.creditSTU;
    UserStatus_judge();
    if(tmp_stu != Sram.creditSTU )
    {
        switch(Sram.creditSTU)
        {
            case   USE_NATURAL:
                 Relay_Judge(1);
            	    LedARM_Opera(OFF);
            	    break;

            case   USE_ALRM1:
                 Relay_Judge(1);
                 LedARM_Opera(ON);
            	    break;

            case   USE_ALRM2:
                 Relay_Judge(2);
                 LedARM_Opera(ON);
            	    break;

            case   USE_ZERO:
                 Relay_Judge(3);
                 LedARM_Opera(ON);
            	    break;

            case   USE_CREDIT:
                 Relay_Judge(3);
                 LedARM_Opera(ON);
            	    break;

            default:
            	    Sys_err();
            	    break;
        }
        
    }
    
} 


/*******************************************************************
**
********************************************************************/
void LedARM_Opera(uchar tmp)
{
    PM0.1 =0;
    if(tmp==OFF)
    	{
    	    pin_LEDARM = 1;
    	}
    else
    	{
    	    pin_LEDARM = 0;
    	}
} 


/*******************************************************************
**
********************************************************************/
void  Relay_Judge(uchar tmp)
{
 uchar data0;
 uchar data1;
    
    switch(tmp)
    {
        case   1:
        	   Relay.status = 0; 
        	   MEM_Read(E2P_ARML2MK, &data1,1);
        	   if(data1 != 0xa5) 
        	   {
        	       data1 = 0xa5;
        	       MEM_Write(E2P_ARML2MK, &data1,1);
        	   	}
        	   Relay_Opera(ON);
            	break;
            	
        case   2:
        	   Relay.status &= ~bitRstu_arm2off; 
        	   MEM_Read(E2P_ARML2MK, &data1,1);
        	   if(data1 == 0x5a)   return;
        	   data1 = 0x5a;
        	   MEM_Write(E2P_ARML2MK, &data1,1);
            data0=1;
            Relay.status |= bitRstu_arm2off; 
            Relay.tmr_status = 5;
        	   Relay_Opera(OFF);
            	break;

        case   3:
          	  Relay.status |= bitRstu_zerooff; 
        	   Relay_Opera(OFF);
            break;

        case   4:
          	  Relay.status |= bitRstu_cardoff; 
          	  Relay.tmr_status = 1;
        	   Relay_Opera(OFF);
            break;

        case   5:
          	  Relay.status |= bitRstu_cardon; 
          	  Relay.tmr_status = 1;
        	   Relay_Opera(ON);
            break;

        case   6:
          	  Relay.tmr_status &= ~bitRstu_overoff;
        	   Relay_Opera(ON);
            break;
            
        default:
        	   Sys_err();
            break;
            
        }
} 

/*******************************************************************
**
********************************************************************/
void  Relay_Opera(uchar tmp)
{
  uchar data;
  
     if(tmp == ON)
    {
          MEM_Write(E2P_TENDEC, (uchar*)&Sram.T_ENdec, 0x05);          //save energy data
          data=0x5a;
          MEM_Write(E2P_RELAYMK, (uchar*)&data, 0x01);          //save energy data
          pin_CTROFF = 0;                     
    	     pin_CTRON = 1; 
    	     Sram.Rly_Tmr = 0;
    	     Flag.even |= bitRly; 
    }

    if(tmp == OFF)
    {
          MEM_Write(E2P_TENDEC, (uchar*)&Sram.T_ENdec, 0x05);          //save energy data
          data=0xa5;
          MEM_Write(E2P_RELAYMK, (uchar*)&data, 0x01);          //save energy data
          pin_CTROFF = 1;                     
    	     pin_CTRON = 0; 
    	     Sram.Rly_Tmr = 0;
    	     Flag.even |= bitRly; 
    }
    
} 


/*******************************************************************
**
********************************************************************/
void RelayCheck(void)
{
    if(Relay.status & bitRstu_cardoff )
    {
        RelayOffCheck()  ;
        return;
    }

    if(Relay.status & bitRstu_cardon ) 
    {
        RelayONCheck()  ; 
        return;
    }
    
    if((Relay.status &0x1f) == 0)
    {
        Relay.tmr_status = 0;
        RelayONCheck()  ;
    }
    else
    {
        RelayOffCheck()  ;
    }
    
} 

/*******************************************************************
**
********************************************************************/
void RelayONCheck(void)
{
    if(Flag.even & bitRly)   return;
     
    if(pin_CKUSER != 1)
    {
        if(Relay.tmr_oprea < 4)
        {
            Relay_Opera(ON);
            Relay.tmr_oprea++;
        }
        else
        {
            Sram.SYSErr_status =SYSERR_RELAY; 
        }
    }
    else
    {
        Relay.tmr_oprea = 0;
        if(Sram.SYSErr_status ==SYSERR_RELAY)  Sram.SYSErr_status = SYSERR_OK;
    }
       
} 


/*******************************************************************
**
********************************************************************/
void RelayOffCheck(void)
{
     if(Flag.even & bitRly)   return;
     
    if(pin_CKUSER != 0)
    {
        if(Relay.tmr_oprea < 4)
        {
            Relay_Opera(OFF);
            Relay.tmr_oprea++;
        }
        else
        {
            Sram.SYSErr_status =SYSERR_RELAY; 
        }
    }
    else
    {
        Relay.tmr_oprea = 0;
        if(Sram.SYSErr_status ==SYSERR_RELAY)  Sram.SYSErr_status = SYSERR_OK;
    }
       
} 



/*******************************************************************
**
********************************************************************/
void UserStatus_judge(void)
{
 uchar data[4];
 uchar tmpda[4];
 
    //get leave energy data (xxxxxx.xx)
    MEM_Read(E2P_LENINT, &data[0],4);	    
    data[0] = Sram.L_ENdec;
    
    if((data[0] | data[1] |data[2] |data[3])==0)
    {
        MEM_Read(E2P_LENINT, &tmpda[0],4);	    
        tmpda[0] = Sram.Z_ENdec;
        if((tmpda[0] | tmpda[1] |tmpda[2] |tmpda[3])==0)
        {
            Sram.creditSTU = USE_ZERO;
        }
        else
        {
            Sram.creditSTU = USE_CREDIT;   
        }
    }
    else
    {
        MEM_Read(E2P_ARML2, &tmpda[0],4);	
        if((Cmp_TwoArry(&data[0], &tmpda[0], 4)) !=1)
        {
            Sram.creditSTU = USE_ALRM2;
        }  
        else
        {
            MEM_Read(E2P_ARML1, &tmpda[0],4);
            if((Cmp_TwoArry(&data[0], &tmpda[0], 4)) !=1)
            {
                  Sram.creditSTU = USE_ALRM1;
            }
            else
            {
            	     Sram.creditSTU = USE_NATURAL;
            }   
        }
    }	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -