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

📄 epm.h

📁 单相 CPU卡表复费率电能表,内部有提供I2C驱动,CPU卡驱动,NEC单片机0513等
💻 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 + -