📄 epm.h
字号:
#ifndef _EPM_H_
#define _EPM_H_
#define POWER_DATA_LEN 4
#define RELAY_ON 0
#define RELAY_OFF 1
// ESAM模块应用二进制文件
#define APPLICATION_POS 0x700
#define DB_YH (unsigned short)(0x03 + APPLICATION_POS) // 用户号(9字节)
#define DB_ZHGDL (unsigned short)(0x0d + APPLICATION_POS) // 最后购电量(4字节BCD)
#define DB_GDCS (unsigned short)(0x11 + APPLICATION_POS) // 购电次数(4字节BCD)
#define DB_BJDL1 (unsigned short)(0x15 + APPLICATION_POS) // 报警电量1(4字节BCD)
#define DB_YJMX (unsigned short)(0x19 + APPLICATION_POS) // 应急门限(4字节BCD)
#define DB_XGDL (unsigned short)(0x1d + APPLICATION_POS) // 限购电量(4字节BCD)
#define FILE_APP_BIN_LEN (0x24)
// ESAM模块运行信息二进制文件
#define RUNNING_INFO_POS (0x700+FILE_APP_BIN_LEN)
#define DB_SYDL (unsigned short)(0x03 + RUNNING_INFO_POS) // 剩余电量(4字节BCD)
#define DB_LJGDL (unsigned short)(0x0b + RUNNING_INFO_POS) // 累计购电量(4字节BCD)
#define DB_LJDL (unsigned short)(0x0f + RUNNING_INFO_POS) // 累计用电量(4字节BCD)
#define DB_GLDL (unsigned short)(0x13 + RUNNING_INFO_POS) // 过零电量(4字节BCD)
#define DB_BH (unsigned short)(0x1A + RUNNING_INFO_POS) // 电表表号(10字节)
#define FILE_RUN_INFO_LEN (0X27)
// ESAM模块钱包文件
#define PURSE_POS 0x400
// ESAM脉冲常数信息文件
#define PULSE_POS 0x500
//#define DB_MCCS (unsigned short)(0 + PULSE_POS) // 脉冲常数(2字节 BCD)
// ESAM电表运行缓冲信息文件
#define BUFFER_POS 0x600
//#define DB_BJDL2 18 // 报警电量2(3字节)
#define DB_LZFH (unsigned short)(0 + BUFFER_POS) // 拉闸负荷(3字节)
#define DB_ZDXL (unsigned short)(4 + BUFFER_POS) // 最大需量(3字节)
#define DB_QDDL (unsigned short)(8 + BUFFER_POS) // 窃电电量(3字节)
#define DB_STATE0 (unsigned short)(12 + BUFFER_POS) // 电表状态
#define DB_STATE1 (unsigned short)(13 + BUFFER_POS)
#define DB_CTRLW (unsigned short)(14 + BUFFER_POS) // 电表控制字
#define DB_RELAY_STA (unsigned short)(15 + BUFFER_POS) // 继电器状态
#define DB_QSCS (unsigned short)(16 + BUFFER_POS) // 清数次数(1字节)
#define DB_RST_PW (unsigned short)(17 + BUFFER_POS) // 掉电复位次数(1字节)
#define DB_RST_WDT (unsigned short)(18 + BUFFER_POS) // 看门狗复位次数(1字节)
#define DB_BAK_ZDXL (unsigned short)(19 + BUFFER_POS) // 备份:最大需量(3字节)
#define DB_BAK_STATE0 (unsigned short)(23 + BUFFER_POS) // 备份:电表状态
#define DB_BAK_STATE1 (unsigned short)(24 + BUFFER_POS)
#define DB_BAK_CTRLW (unsigned short)(25 + BUFFER_POS) // 备份:电表控制字
//#define DB_LJJDDS 72 // 累计加电度数(3字节)
//#define DB_BAK_GLDL 78 // 备份:过零电量(3字节)
//#define DB_BAK_SYDL 81 // 备份:剩余电量(3字节)
//#define DB_BAK_LJDL 84 // 备份:累计用电量(3字节)
//#define DB_BAK_DSAVE 87 // 备份:脉冲计数(1字节)
#define DB_VERSION_SOFTWARE (unsigned short)(26 + BUFFER_POS) //电表软件版本号(3字节)
#define DB_VERSION_HARDWARE (unsigned short)(29 + BUFFER_POS) //电表软件版本号(3字节)
#define DB_ADJUST_TIMES (unsigned short)(32 + BUFFER_POS) //电量调整次数(2字节)
#define DB_ST (unsigned short)(34 + BUFFER_POS) //表状态(1字节)
#define DB_MCCS (unsigned short)(35 + BUFFER_POS) // 脉冲常数(2字节 BCD)
#define DB_MC (unsigned short)(37 + BUFFER_POS) // 当前脉冲计数单元的位置(1字节)
#define DB_DSAVE (unsigned short)(38 + BUFFER_POS) // 保存脉冲计数(20字节循环使用)
#define DEC_LOOP_NUMBER 100 //小数部分循环存储的存储区个数
#define DB_VALVE_VALUE (DB_DSAVE+DEC_LOOP_NUMBER) //载波接受门限阀值
#define DB_VALVE_VALUE_CS (DB_VALVE_VALUE+1) //载波接受门限阀值校验
#define FILE_RUN_BUFFER_LEN (DB_VALVE_VALUE_CS+1-BUFFER_POS)
#define DB_CTRLW_FAC_BIT 0x80 // 生产状态
#define DB_CTRLW_CLR_BIT 0x10 // 允许清零返回制造状态
#define DB_CTRLW_CFG_BIT 0x08 // 允许设置
#define DB_CTRLW_ADJUST 0x01 // 允许电量调整
#define DB_STA0_FAC 0x55 // 生产状态
#define DB_STA0_RUN 0x5A // 运行状态
#define DB_STA0_HOLD 0xA5 // 保持状态
#define DB_STA0_EXIT 0xAA // 退出运行
#define DB_STA0_RUN_A0 0 // 正常运行
#define DB_STA0_RUN_A1 1 // 一级告警,声光
//#define DB_STA0_RUN_A2 2 // 二级告警,拉闸一次
#define DB_STA0_RUN_A3 2 // 三级告警,过零拉闸一次
#define DB_STA0_RUN_A4 3 // 四级告警,永久拉闸
#define DB_STA0_RUN_OTHER 4 // 初始化状态,使得电表第一次启动时能顺利进入epmPowerMonitor()中进行处理
#define RELAY_STATUS_ON 0xA5
#define RELAY_STATUS_OFF 0x5A
#define CPU_EXT_CLK_FREQ (4.8)
#define CPU_CORE_CLK_DIV (12.0)
#define CPU_MIPS_1000_TIMES ((CPU_EXT_CLK_FREQ*1000.0)/CPU_CORE_CLK_DIV)
#define TIMER0_L ((byte)((unsigned short)(0x10000-62.5*CPU_MIPS_1000_TIMES)))
#define TIMER0_H ((byte)(((unsigned short)(0x10000-62.5*CPU_MIPS_1000_TIMES))>>8))
#define TIMER1_L ((byte)((unsigned short)(0x10000-2.5*CPU_MIPS_1000_TIMES)))
#define TIMER1_H ((byte)(((unsigned short)(0x10000-2.5*CPU_MIPS_1000_TIMES))>>8))
#define TIMER_SLOW_JOB 240
#define OVERLOAD_CHK_TIME 24
#define PULSE_PER_KWH 100
#define POSITIVE 0xFF
#define REVERSE 0x00
#define RESUME_POWER_SUPPLY_TIME (uint)(5*60)//300 5分钟
extern volatile unsigned short xdata Degree_Constant;
extern unsigned char pulse_constant_1_percent; //脉冲常数的1/100, 0.01KW
extern byte overload_counter[4];
extern byte epm_state[2];
extern byte data Timer0_Count;
extern bit overload_ind;
extern byte data pulse_counter;
extern unsigned char data real_pulse_count;
extern byte data pulse_tally;
#define CPU_IDLE() (PCON=PCON|0x1)
void repair_relay_state(void);
void epmInit(void);
void epmPowerRecord(void);
void epmPowerMonitor(void);
void epmOverloadChkInit(void);
void usrPhaseStateChk(void);
void epmOverloadOper(void);
void epmQDDLCalculate(void);
void epmZDXLCalculate(void);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -