/****************************************************************************** 版权所有: 文件名称: sys.h 文件版本: 01.01 创建作者: xxxxxx 创建日期: 2014-12-29 功能说明: 其它说明: 修改记录: */ #ifndef _SYS_H #define _SYS_H /*------------------------------- 头文件 -------------------------------------- */ #include "SOE.h" /*------------------------------- 宏定义 -------------------------------------- */ #define INTER_PASSWORD 321 #define PASS_WORD 1234 // 万能密码 #define INIT_PASSWORD 0000 //#ifndef GD_AREA_DONGGUAN //东莞局要求8个数字+字母,其他地区默认4个密码 //#define PASSWORD_4_STR // 密码四位数 //#endif #ifdef GD_AREA_TEST_2020 #define PASSWORD_LEN 6 #define INIT_PASSWORD_STR "000000" #define INTER_PASSWORD_STR "032100" #define PASS_WORD_STR "FUSION" // 万能密码 #else #define INIT_PASSWORD_STR "Z0000000" #define PASSWORD_LEN 8 #define INTER_PASSWORD_STR "03210000" #define PASS_WORD_STR "FUSIONOK" // 万能密码 #endif #define PASSWORD_STR_ZERO "00000000" #define INTER_PASSWORD_STR_4 "0321" #define PASS_WORD_STR_4 "1234" // 万能密码 #define INIT_PASSWORD_STR_4 "0000" #define PASSWORD_STR_ZERO_4 "0000" /**************eeprom空间分配******************************* 每个保存在eeprom中的信息都有装置类型及crc校验 10个字节 密码4字节+8 =12 通道系数 8*8+8=72 压板 4+8=12 装置参数 40*4+10=168 测控参数 40*4+10=168 内部定值 40*4+10=168 装置配置 1*4+10=12 定值区信息 10+10=18 每个定值区占240个字节+8个字节校验码 6个区共1488 (2K) SOE 512个, 操作信息 512个 每个SOE占28个字节,共计28*512=14k */ #define EEP_SET_BASE (64*1024) #define EEP_PRJNAME_ADDR (0+EEP_SET_BASE) // 下载参数保存区域 #define EEP_PASSWORD_ADDR (64+EEP_SET_BASE) //密码保存 10字节 #define EEP_PASSWORD2_ADDR (64+12+EEP_SET_BASE) //密码保存 10字节 #define EEP_UEUQ_ADDR (96+EEP_SET_BASE) //电压合格率 保存地址 16+2 18个字节 #define EEP_EQUIP_PARA_ADDR (128+EEP_SET_BASE) //装置参数 128字节:(1024-128)/4=224pcs #define EEP_CSTSET_ADDR (1024+EEP_SET_BASE) //内部定值:800/4=200pcs #define EEP_SETGROUP_ADDR (1024+800+EEP_SET_BASE) // 定值索引:(1024-800)/4=56pcs #if defined GD_AREA_ZHONGSHAN_2020 || defined GD_AREA_ZHONGSHAN_2020_ZC #define EEP_PUB_ADDR ((2*1024)+EEP_SET_BASE) //公共定值开始位置 #define EEP_SET_ADDR ((5*1024)+EEP_SET_BASE) //开关定值开始位置(此值于中山新增备用定值后更改) #elif defined GD_AREA_ECZD_2020 #define EEP_PUB_ADDR ((2*1024)+EEP_SET_BASE) //公共定值开始位置 #define EEP_SET_ADDR ((4*1024)+EEP_SET_BASE) //开关定值开始位置 #else #define EEP_PUB_ADDR ((2*1024)+EEP_SET_BASE) //公共定值开始位置 #define EEP_SET_ADDR ((3*1024)+EEP_SET_BASE) //开关定值开始位置 #endif //系统运行信息保存,占用256字节 #define EEP_SYSTEM_DATA_START ((63*1024)+EEP_SET_BASE) #define EEP_SYSTEM_DATA_END (256+EEP_SYSTEM_DATA_START) #define EEP_SYSTEM_DATA_SIZE (EEP_SYSTEM_DATA_END - EEP_SYSTEM_DATA_START) #ifdef SOE_PARA_ALL_SAVE #define EEP_SOE_BASE (128*1024) #define EEP_SOE_ADDR (0*1024+EEP_SOE_BASE) // 从0开始32空间 #define EEP_OPERATE_ADDR (64*1024+EEP_SOE_BASE) // 从32开始14k空间 #define EEP_VIP_ADDR (96*1024+EEP_SOE_BASE) // 从32开始14k空间 #else #define EEP_SOE_BASE (0*1024) #define EEP_SOE_ADDR (0*1024) // 从0开始32空间 #define EEP_OPERATE_ADDR (32*1024) // 从32开始14k空间 #define EEP_VIP_ADDR (48*1024) // 从32开始14k空间 #endif #define IECTABLE_ADDR (96+EEP_SET_BASE) //从64k开始1k空间 #ifdef ADD_DEBUG_RECORD_FUN #ifdef SOE_PARA_ALL_SAVE #define EEP_OTHER_DATA_SAVE_BASE (256*1024) //256k开始位置用于存储其他的数据 #else #define EEP_OTHER_DATA_SAVE_BASE (128*1024) //128k开始位置用于存储其他的数据 #endif #define EEP_DEBUG_RECORD_ADDR (0*1024+EEP_OTHER_DATA_SAVE_BASE) //预留32K用于存储调试记录包括全参数或者非全参数 #else #define EEP_DEBUG_RECORD_ADDR EEP_VIP_ADDR //若无定义调试记录则默认显示关键记录 #endif #ifdef METERING_ENERGY #define EEP_DD_DATA (260+EEP_SYSTEM_DATA_START) #endif #define TEST_MASK_BIT(object, mask) (((object) & (mask))?true:false) #define TEST_BIT(object, bit) (((object>>bit)&1)>0?true:false) //系统错误标志位(System Error Register) // #define SER_RAMERR (1 << 0) //RAM错误 #define SER_ROMERR (1 << 1 ) //ROM错误 #define SER_EEPERR (1 << 3 ) //EEP错误 #define SER_SETERR (1 << 5 ) //定值错误 #define SER_EQUIPPARAERR (1 << 6 ) //装置参数错误 #define SER_CSTSETERR (1 << 8 ) //内部定值错误 #define SER_FACTORERR (1 << 10 ) //通道系数错误 #define SER_DIERR (1 << 11 ) //开入错误 #define SER_DOERR (1 << 12) //开出错误 #define SER_ADERR (1 << 13 ) //AD错误 #define SER_FLASHERR (1<<14) //FLASH闪存错误 #define SER_EQUIPCFG (1<<15) //装置配置错误 // 告警信息定义 #define GER_ZEROSHIFT (1<<0) //零漂越限 #define GER_PTDX (1<<1) //PT断线 #define GER_PTNEG (1<<2) //PT反序 #define GER_TZSB (1<<3) //跳闸失败 #define GER_THWCN (1<<4) //弹簧未储能 #define GER_LXGJ (1 << 5) //零序告警 #define GER_TWYL (1 << 6) //跳位有流 #define GER_BSHZGJ (1 << 7) //大电流闭锁合闸告警 #define GER_UOVER (1 << 8) #define GER_ULOW (1 << 9) #define GER_IOVER (1 << 10) #define GER_ILOW (1 << 11) #define GER_U0GJ (1 << 12) //遥控操作命令码 enum EREMOTEOPCODE { RCODE_OPERATE=0x5A, // 合 RCODE_RESET=0xA5 // 分 }; enum { YK_VAL_HZ=1, YK_VAL_TZ, YK_TYPE_SEL, YK_TYPE_EXE, YK_TYPE_CANCEL, }; //遥控操作顺序 enum { YK_STATUS_NONE=0, //没有遥控操作 YK_STATUS_SEL, //遥控选择 YK_STATUS_EXE, //遥控执行 YK_STATUS_TIMEOUT, //遥控超时 }; /*------------------------------ 类型结构 ------------------------------------- */ typedef struct EVENT_SHOW { EVENT_STRUCT tEv; BYTE namestr[24]; BYTE valuestr[24]; BYTE str[8][24]; WORD wCurrent; WORD wNumber; WORD wIndex; WORD year; WORD month; WORD day; WORD hour; WORD min; WORD sec; WORD ms; short sParaCur; short sParaNum; }EVENT_SHOW; typedef union SET_VALUE { float ff; uint32_t tt; // 注意64位的long为64位,32位系统为32位 }SET_VALUE; typedef struct EQUIP_INF { WORD wType; // 保护类型码 WORD wVerH; // 软件版本号 WORD wVerL; // 软件的发布号及特殊版本号,高字节为发布号,低字节为特殊版本号 WORD wCrc; // 保存信息的校验码 WORD wdescCrc; // set_desc.bin文件的CRC }EQUIP_INF; //遥控操作结构 typedef struct REMOTEYKSTATUS { BYTE yk_st;//操作顺序,1选择或2执行、3撤消 BYTE no;//编号 BYTE val; BYTE owner; WORD wMaster; //主站编号或ID DWORD dTStart;//遥控选择的开始时间 }REMOTEYKSTATUS; #pragma pack(1) typedef struct SYSTEM_DATA { BYTE bWriteFlag; //写数据标志 BYTE bWriteLock; //写数据锁 WORD wSwTzCount; //开关故障跳闸次数 WORD wSwHzCount; //开关合闸次数 DWORD dwDD[8]; // 8个电度值 float fwDD[8]; WORD res[92]; //!!!备用(92*2)字节 WORD wCrc; //校验码 }SYSTEM_DATA;//此结构体不允许超过 EEP_SYSTEM_DATA_SIZE->256字节 #pragma pack() #if defined FUNC_DRIVE || defined FUNC_DRIVE_JY typedef struct YK_DRIVE { bool b_drive_on; //不停电传动功能标志 bool b_fa_drive; //FA模式允许传动功能 bool b_err; //装置异常 bool b_warning; //装置告警 bool b_drive_soe; //用于判断传动功能SOE bool bTz_Doing; //传动功能跳闸中 bool bHz_Doing; //传动功能合闸中 bool bQuit; //退出传动软压板标志 bool b_drive_process; //传动功能进行中 #ifdef FUNC_DRIVE_PULSE bool b_set_pulse; //设置分合闸脉宽标志 bool b_unset_pulse; //恢复分合闸脉宽标志 #endif TIMERELAY tQDTime_hz; //合闸时间继电器 TIMERELAY tQDTime_fz; //分闸时间继电器 TIMERELAY tQDTime_fz_end; //分闸结束传动时间继电器 TIMERELAY tQDTime_hz_end; //合闸结束传动时间继电器 #ifdef FUNC_DRIVE_JY bool b_bh_reclose; //启动重合闸 bool b_drive_on_check; //重新传动检测 bool b_fa_reclose; //FA分段模式再次合闸 bool b_clear_bs; //需等合闸拒动SOE时间标志 bool b_drive_success; //用于判断传动成功 bool b_drive_success_again; //用于判断补发合闸后传动成功 TIMERELAY tDriveUa1Time; //UA1持续时间 TIMERELAY tDriveUa2Time; //UA2持续时间 TIMERELAY tDriveU0Time; //U0持续时间 TIMERELAY tDriveITime; //I持续时间 TIMERELAY tDriveI0Time; //I0持续时间 TIMERELAY tDriveFaBSTime; //等合闸拒动SOE时间 TIMERELAY tDriveAgainTime; //再次传动时间 #endif }YK_DRIVE; #endif /*------------------------------ 变量声明 ------------------------------------- */ extern volatile DWORD dTCounter; //系统定时器 extern DWORD g_dw_led[]; // 灯状态 extern DWORD g_dw_ledsave[]; // 灯状态 extern bool bTestMode; extern bool bMaintain; extern bool bMaintain_test;//测试模式,如开入开出测试,避免受应用影响,顺利完成测试 extern unsigned short m_CodeCrc; #if defined FUNC_DRIVE || defined FUNC_DRIVE_JY extern YK_DRIVE gb_drive; #endif /*------------------------------ 函数声明 ------------------------------------- */ void SystemInit(void); int Get_Code_CRC(void); void Delayms(DWORD dT,DWORD count); void SignalReset(int rstsw,bool blnk); void ResetHzLed(int rstsw); char *RmtCtrl_Err(int err_code); int RemoteCtrl(BYTE,BYTE,BYTE,WORD); void CtrlPolling(void); void ResetRctrl(WORD wID); void AppPolling(void); int send_rmt_yc(u8 *buf); int send_rmt_dd(u8 *buf); int send_rmt_yx(u8 *buf); int send_rmt_yk(u8 *buf); char *get_comm_name(int index); char *get_yk_owner(u8 owner); int bat_begin_time(void); bool check_fault(void); void clear_tfd_fault(void); #ifdef FUNC_RESET_EQU extern bool gb_ResetEqu; extern void equ_PowerRest(void); #endif #endif //_SYS_H /*------------------------------ 文件结束 ------------------------------------- */