Sys.h 9.5 KB

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