Sys.h 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. /******************************************************************************
  2. 版权所有:
  3. 文件名称: sys.h
  4. 文件版本: 01.01
  5. 创建作者: xxxxxx
  6. 创建日期: 2014-12-29
  7. 功能说明:
  8. 其它说明:
  9. 修改记录:
  10. */
  11. #ifndef _SYS_H
  12. #define _SYS_H
  13. /*------------------------------- 头文件 --------------------------------------
  14. */
  15. #include "SOE.h"
  16. /*------------------------------- 宏定义 --------------------------------------
  17. */
  18. #define INTER_PASSWORD 321
  19. #define PASS_WORD 1234 // 万能密码
  20. #define INIT_PASSWORD 0000
  21. #define INIT_PASSWORD_STR "Z0000000"
  22. #define PASSWORD_LEN 8
  23. #define INTER_PASSWORD_STR "03210000"
  24. #define PASS_WORD_STR "FUSIONOK" // 万能密码
  25. #define PASSWORD_STR_ZERO "00000000"
  26. #define INTER_PASSWORD_STR_4 "0321"
  27. #define PASS_WORD_STR_4 "1234" // 万能密码
  28. #define INIT_PASSWORD_STR_4 "0000"
  29. #define PASSWORD_STR_ZERO_4 "0000"
  30. /**************eeprom空间分配*******************************
  31. 每个保存在eeprom中的信息都有装置类型及crc校验 10个字节
  32. 密码4字节+8 =12
  33. 通道系数 8*8+8=72
  34. 压板 4+8=12
  35. 装置参数 40*4+10=168
  36. 测控参数 40*4+10=168
  37. 内部定值 40*4+10=168
  38. 装置配置 1*4+10=12
  39. 定值区信息 10+10=18
  40. 每个定值区占240个字节+8个字节校验码 6个区共1488 (2K)
  41. SOE 512个,
  42. 操作信息 512个
  43. 每个SOE占28个字节,共计28*512=14k
  44. */
  45. #define EEP_SET_BASE (64*1024)
  46. #define EEP_PRJNAME_ADDR (0+EEP_SET_BASE) // 下载参数保存区域
  47. #define EEP_PASSWORD_ADDR (64+EEP_SET_BASE) //密码保存 10字节
  48. #define EEP_PASSWORD2_ADDR (64+12+EEP_SET_BASE) //密码保存 10字节
  49. #define EEP_UEUQ_ADDR (96+EEP_SET_BASE) //电压合格率 保存地址 16+2 18个字节
  50. #define EEP_EQUIP_PARA_ADDR (128+EEP_SET_BASE) //装置参数 128字节:(1024-128)/4=224pcs
  51. #define EEP_CSTSET_ADDR (1024+EEP_SET_BASE) //内部定值:800/4=200pcs
  52. #define EEP_SETGROUP_ADDR (1024+800+EEP_SET_BASE) // 定值索引:(1024-800)/4=56pcs
  53. #if defined GD_AREA_ZHONGSHAN_2020
  54. #define EEP_PUB_ADDR ((2*1024)+EEP_SET_BASE) //公共定值开始位置
  55. #define EEP_SET_ADDR ((5*1024)+EEP_SET_BASE) //开关定值开始位置(此值于中山新增备用定值后更改)
  56. #elif defined GD_AREA_ECZD_2020
  57. #define EEP_PUB_ADDR ((2*1024)+EEP_SET_BASE) //公共定值开始位置
  58. #define EEP_SET_ADDR ((4*1024)+EEP_SET_BASE) //开关定值开始位置
  59. #else
  60. #define EEP_PUB_ADDR ((2*1024)+EEP_SET_BASE) //公共定值开始位置
  61. #define EEP_SET_ADDR ((3*1024)+EEP_SET_BASE) //开关定值开始位置
  62. #endif
  63. //系统运行信息保存,占用256字节
  64. #define EEP_SYSTEM_DATA_START ((63*1024)+EEP_SET_BASE)
  65. #define EEP_SYSTEM_DATA_END (256+EEP_SYSTEM_DATA_START)
  66. #define EEP_SYSTEM_DATA_SIZE (EEP_SYSTEM_DATA_END - EEP_SYSTEM_DATA_START)
  67. #ifdef SOE_PARA_ALL_SAVE
  68. #define EEP_SOE_BASE (128*1024)
  69. #define EEP_SOE_ADDR (0*1024+EEP_SOE_BASE) // 从0开始32空间
  70. #define EEP_OPERATE_ADDR (64*1024+EEP_SOE_BASE) // 从32开始14k空间
  71. #define EEP_VIP_ADDR (96*1024+EEP_SOE_BASE) // 从32开始14k空间
  72. #else
  73. #define EEP_SOE_BASE (0*1024)
  74. #define EEP_SOE_ADDR (0*1024) // 从0开始32空间
  75. #define EEP_OPERATE_ADDR (32*1024) // 从32开始14k空间
  76. #define EEP_VIP_ADDR (48*1024) // 从32开始14k空间
  77. #endif
  78. #define IECTABLE_ADDR (96+EEP_SET_BASE) //从64k开始1k空间
  79. #ifdef ADD_DEBUG_RECORD_FUN
  80. #ifdef SOE_PARA_ALL_SAVE
  81. #define EEP_OTHER_DATA_SAVE_BASE (256*1024) //256k开始位置用于存储其他的数据
  82. #else
  83. #define EEP_OTHER_DATA_SAVE_BASE (128*1024) //128k开始位置用于存储其他的数据
  84. #endif
  85. #define EEP_DEBUG_RECORD_ADDR (0*1024+EEP_OTHER_DATA_SAVE_BASE) //预留32K用于存储调试记录包括全参数或者非全参数
  86. #else
  87. #define EEP_DEBUG_RECORD_ADDR EEP_VIP_ADDR //若无定义调试记录则默认显示关键记录
  88. #endif
  89. #ifdef METERING_ENERGY
  90. #define EEP_DD_DATA (260+EEP_SYSTEM_DATA_START)
  91. #endif
  92. #define TEST_MASK_BIT(object, mask) (((object) & (mask))?true:false)
  93. #define TEST_BIT(object, bit) (((object>>bit)&1)>0?true:false)
  94. //系统错误标志位(System Error Register)
  95. //
  96. #define SER_RAMERR (1 << 0) //RAM错误
  97. #define SER_ROMERR (1 << 1 ) //ROM错误
  98. #define SER_EEPERR (1 << 3 ) //EEP错误
  99. #define SER_SETERR (1 << 5 ) //定值错误
  100. #define SER_EQUIPPARAERR (1 << 6 ) //装置参数错误
  101. #define SER_CSTSETERR (1 << 8 ) //内部定值错误
  102. #define SER_FACTORERR (1 << 10 ) //通道系数错误
  103. #define SER_DIERR (1 << 11 ) //开入错误
  104. #define SER_DOERR (1 << 12) //开出错误
  105. #define SER_ADERR (1 << 13 ) //AD错误
  106. #define SER_FLASHERR (1<<14) //FLASH闪存错误
  107. #define SER_EQUIPCFG (1<<15) //装置配置错误
  108. // 告警信息定义
  109. #define GER_ZEROSHIFT (1<<0) //零漂越限
  110. #define GER_PTDX (1<<1) //PT断线
  111. #define GER_PTNEG (1<<2) //PT反序
  112. #define GER_TZSB (1<<3) //跳闸失败
  113. #define GER_THWCN (1<<4) //弹簧未储能
  114. #define GER_LXGJ (1 << 5) //零序告警
  115. #define GER_TWYL (1 << 6) //跳位有流
  116. #define GER_BSHZGJ (1 << 7) //大电流闭锁合闸告警
  117. #define GER_UOVER (1 << 8)
  118. #define GER_ULOW (1 << 9)
  119. #define GER_IOVER (1 << 10)
  120. #define GER_ILOW (1 << 11)
  121. #define GER_U0GJ (1 << 12)
  122. //遥控操作命令码
  123. enum EREMOTEOPCODE
  124. {
  125. RCODE_OPERATE=0x5A, // 合
  126. RCODE_RESET=0xA5 // 分
  127. };
  128. enum
  129. {
  130. YK_VAL_HZ=1,
  131. YK_VAL_TZ,
  132. YK_TYPE_SEL,
  133. YK_TYPE_EXE,
  134. YK_TYPE_CANCEL,
  135. };
  136. //遥控操作顺序
  137. enum
  138. {
  139. YK_STATUS_NONE=0, //没有遥控操作
  140. YK_STATUS_SEL, //遥控选择
  141. YK_STATUS_EXE, //遥控执行
  142. YK_STATUS_TIMEOUT, //遥控超时
  143. };
  144. /*------------------------------ 类型结构 -------------------------------------
  145. */
  146. typedef struct EQUIP_INF
  147. {
  148. WORD wType; // 保护类型码
  149. WORD wVerH; // 软件版本号
  150. WORD wVerL; // 软件的发布号及特殊版本号,高字节为发布号,低字节为特殊版本号
  151. WORD wCrc; // 保存信息的校验码
  152. WORD wdescCrc; // set_desc.bin文件的CRC
  153. }EQUIP_INF;
  154. //遥控操作结构
  155. typedef struct REMOTEYKSTATUS
  156. {
  157. BYTE yk_st;//操作顺序,1选择或2执行、3撤消
  158. BYTE no;//编号
  159. BYTE val;
  160. BYTE owner;
  161. WORD wMaster; //主站编号或ID
  162. DWORD dTStart;//遥控选择的开始时间
  163. }REMOTEYKSTATUS;
  164. #pragma pack(1)
  165. typedef struct SYSTEM_DATA
  166. {
  167. BYTE bWriteFlag; //写数据标志
  168. BYTE bWriteLock; //写数据锁
  169. WORD wSwTzCount; //开关故障跳闸次数
  170. WORD wSwHzCount; //开关合闸次数
  171. DWORD dwDD[8]; // 8个电度值
  172. float fwDD[8];
  173. WORD res[92]; //!!!备用(92*2)字节
  174. WORD wCrc; //校验码
  175. }SYSTEM_DATA;//此结构体不允许超过 EEP_SYSTEM_DATA_SIZE->256字节
  176. #pragma pack()
  177. #if defined FUNC_DRIVE || defined FUNC_DRIVE_JY
  178. typedef struct YK_DRIVE
  179. {
  180. bool b_drive_on; //不停电传动功能标志
  181. bool b_fa_drive; //FA模式允许传动功能
  182. bool b_err; //装置异常
  183. bool b_warning; //装置告警
  184. bool b_drive_soe; //用于判断传动功能SOE
  185. bool bTz_Doing; //传动功能跳闸中
  186. bool bHz_Doing; //传动功能合闸中
  187. bool bQuit; //退出传动软压板标志
  188. bool b_drive_process; //传动功能进行中
  189. #ifdef FUNC_DRIVE_PULSE
  190. bool b_set_pulse; //设置分合闸脉宽标志
  191. bool b_unset_pulse; //恢复分合闸脉宽标志
  192. #endif
  193. TIMERELAY tQDTime_hz; //合闸时间继电器
  194. TIMERELAY tQDTime_fz; //分闸时间继电器
  195. TIMERELAY tQDTime_fz_end; //分闸结束传动时间继电器
  196. TIMERELAY tQDTime_hz_end; //合闸结束传动时间继电器
  197. #ifdef FUNC_DRIVE_JY
  198. bool b_bh_reclose; //启动重合闸
  199. bool b_drive_on_check; //重新传动检测
  200. bool b_fa_reclose; //FA分段模式再次合闸
  201. bool b_clear_bs; //需等合闸拒动SOE时间标志
  202. bool b_drive_success; //用于判断传动成功
  203. bool b_drive_success_again; //用于判断补发合闸后传动成功
  204. TIMERELAY tDriveUa1Time; //UA1持续时间
  205. TIMERELAY tDriveUa2Time; //UA2持续时间
  206. TIMERELAY tDriveU0Time; //U0持续时间
  207. TIMERELAY tDriveITime; //I持续时间
  208. TIMERELAY tDriveI0Time; //I0持续时间
  209. TIMERELAY tDriveFaBSTime; //等合闸拒动SOE时间
  210. TIMERELAY tDriveAgainTime; //再次传动时间
  211. #endif
  212. }YK_DRIVE;
  213. #endif
  214. /*------------------------------ 变量声明 -------------------------------------
  215. */
  216. extern volatile DWORD dTCounter; //系统定时器
  217. extern DWORD g_dw_led[]; // 灯状态
  218. extern DWORD g_dw_ledsave[]; // 灯状态
  219. extern bool bTestMode;
  220. extern bool bMaintain;
  221. extern bool bMaintain_test;//测试模式,如开入开出测试,避免受应用影响,顺利完成测试
  222. extern unsigned short m_CodeCrc;
  223. #if defined FUNC_DRIVE || defined FUNC_DRIVE_JY
  224. extern YK_DRIVE gb_drive;
  225. #endif
  226. /*------------------------------ 函数声明 -------------------------------------
  227. */
  228. void SystemInit(void);
  229. int Get_Code_CRC(void);
  230. void Delayms(DWORD dT,DWORD count);
  231. void SignalReset(int rstsw,bool blnk);
  232. void ResetHzLed(int rstsw);
  233. char *RmtCtrl_Err(int err_code);
  234. int RemoteCtrl(BYTE,BYTE,BYTE,WORD);
  235. void CtrlPolling(void);
  236. void ResetRctrl(WORD wID);
  237. void AppPolling(void);
  238. int send_rmt_yc(u8 *buf);
  239. int send_rmt_dd(u8 *buf);
  240. int send_rmt_yx(u8 *buf);
  241. int send_rmt_yk(u8 *buf);
  242. char *get_comm_name(int index);
  243. char *get_yk_owner(u8 owner);
  244. int bat_begin_time(void);
  245. bool check_fault(void);
  246. #ifdef FUNC_RESET_EQU
  247. extern bool gb_ResetEqu;
  248. extern void equ_PowerRest(void);
  249. #endif
  250. #endif //_SYS_H
  251. /*------------------------------ 文件结束 -------------------------------------
  252. */