📄 prepayctl.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 + -