history_rcd.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. #ifndef _HISTORY_RCD_H
  2. #define _HISTORY_RCD_H
  3. #define HIS_FILE_VER "v1.0"
  4. #define EOF_LEN 1 //0x0A“文件结束”(EOF)标志 的长度
  5. #define R_N_LEN 2 //"\r\n" 的长度
  6. #define MSG_SOE_RCD_LEN strlen("第0001条SOE:0x0014,1,2018-07-26 10:29:31.109\r\n")
  7. #define MSG_CO_RCD_LEN strlen("第0001条遥控操作记录:0x6001,选择 ,合,2018-07-26 11:43:48.420\r\n")
  8. #define MSG_EXV_RCD_LEN strlen("0x4001,00000.000,2017-03-14 15:53:34.162,")
  9. #define MSG_FIX_RCD_LEN strlen("0x4001,00000.000,")
  10. #define MSG_FLOWREV_RCD_LEN strlen("0x6409,00000.000,2017-03-14 15:53:34.162,")
  11. #define MSG_FRZ_RCD_LEN strlen("0x6409,00000.000,")
  12. //soe记录条数n(两个字节)?
  13. #define MSG_SOE_FILE_HEAD_LEN strlen("文件头:soe.msg,v1.0\r\nD30XXXXZN000201703100002,1024,02\r\n")
  14. #define MSG_CO_FILE_HEAD_LEN strlen("文件头:co.msg,v1.0\r\nD30XXXXZN000201703100002,1024,02\r\n")
  15. #define MSG_EXV_FILE_HEAD_LEN strlen("文件头:exvXXXXXXXX.msg,v1.0\r\nD30XXXXZN000201703100002,170507,02\r\n")
  16. #define MSG_FIX_FILE_HEAD_LEN strlen("文件头:fixptXXXXXXXX.msg,v1.0\r\nD30XXXXZN000201703100002,170507,1024,02\r\n")
  17. #define MSG_FRZ_FILE_HEAD_LEN strlen("文件头:frzXXXXXXXX.msg,v1.0\r\nD30XXXXZN000201703100002,170507,1024,02\r\n")
  18. #define MSG_FLOWREV_FILE_HEAD_LEN strlen("文件头:flowrev.msg,v1.0\r\nD30XXXXZN000201703100002,170507,02\r\n")
  19. #define MSG_LOG_FILE_HEAD_LEN strlen("文件头:D30XXXXZN000201703100002,1024\r\n")
  20. #define MSG_FIX_PART_ID_OFFSET strlen("文件头:fixptXXXXXXXX.msg,v1.0\r\nD30XXXXZN000201703100002,170507,")
  21. #define MSG_FRZ_PART_ID_OFFSET strlen("文件头:frzXXXXXXXX.msg,v1.0\r\nD30XXXXZN000201703100002,170507,")
  22. #define SOE_RCD_NUM_OFFSET strlen("文件头:soe.msg,v1.0\r\nD30XXXXZN000201703100002,")
  23. #define CO_RCD_NUM_OFFSET strlen("文件头:co.msg,v1.0\r\nD30XXXXZN000201703100002,")
  24. #define MSG_LOG_RCD_NUM_OFFSET strlen("文件头:D30XXXXZN000201703100002,")
  25. #define SOE_RCD_NUM 1024
  26. #define CO_RCD_NUM 32
  27. #define LOG_RCD_NUM 1024
  28. #define FIX_RCD_NUM 96
  29. #define FRZ_RCD_NUM 96
  30. #define FLOWREV_RCD_NUM 256
  31. #define EXV_FILE_NUM_MAX 31
  32. #define FIXPT_FILE_NUM_MAX 31
  33. #define FRZ_FILE_NUM_MAX 31
  34. #define FLOWREV_FRONT_PART_NUM 256 //文件前面保存下的节点数
  35. #define XML_SOE_FILE_HEAD_LEN strlen("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<DataFile>\r\n <Header fileType=\"SOE\" fileVer=\"1.00\" devName=\"D301108SQ001202003047793\" />\r\n <DataRec num=\"1024\">\r\n </DataRec>\r\n</DataFile>\r\n")//38+2+10+2+63+2+1+20+2+1+10+2+1+11+2
  36. #define XML_CO_FILE_HEAD_LEN strlen("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<DataFile>\r\n <Header fileType=\"CO\" fileVer=\"1.00\" devName=\"D301108SQ001202003047793\" />\r\n <DataRec num=\"32\">\r\n </DataRec>\r\n</DataFile>\r\n")
  37. #define XML_EXV_FILE_HEAD_LEN strlen("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<DataFile>\r\n <Header fileType=\"EXV\" fileVer=\"1.00\" devName=\"D301108SQ001202003047793\" />\r\n <DataAttr num=\"1024\">\r\n </DataAttr>\r\n <DataRec num=\"1024\">\r\n </DataRec>\r\n</DataFile>\r\n")
  38. #define XML_FLOWREV_FILE_HEAD_LEN strlen("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<DataFile>\r\n <Header fileType=\"FLOWREV\" fileVer=\"1.00\" devName=\"D301108SQ001202003047793\" />\r\n <DataRec num=\"256\">\r\n </DataRec>\r\n</DataFile>\r\n")
  39. #define XML_LOG_FILE_HEAD_LEN strlen("<?xml version=\"1.0\" encoding=\"UTF-8\"?><DataFile>\r\n <Header fileType=\"Ulog\" fileVer=\"1.00\" devID=\"D301108SQ001202003047793\"/> <DataRec num=\"0325\">\r\n </DataRec>\r\n</DataFile>\r\n")
  40. #define XML_SOE_RCD_LEN strlen(" <DI ioa=\"10000\" tm=\"160813_180000_011\" val=\"0\" />\r\n")
  41. #define XML_CO_RCD_LEN strlen(" <DI ioa=\"24578\" tm=\"160813_180000_011\" cmd=\"select\" val=\"0\" />\r\n")
  42. #define XML_EXV_RCD_LEN strlen(" <DI ioa=\"16385\" type=\"float\" unit=\"MVAr\" />\r\n <DI max=\"000.000\" max_tm=\"160813_114321\" min=\"000.000\" min_tm=\"160813_114321\" />\r\n")
  43. #define XML_FLOWREV_RCD_LEN strlen(" <DI ioa=\"25728\" tm=\"200509_153647_000\" val=\"0000.04\" />")
  44. #define XML_LOG_RCD_LEN strlen(" <DI logType=\"2\" tm=\"000101_000153_576\" txt=\"Device is powered on,crc:code=0x9871,rsc=0x156a,brd_res=0xc65b,equ_cfg=0x6d68,rectable=0x0518\" val=\"1\"/>")
  45. #define XML_FIX_DATAREC_LEN strlen(" <DataRec sect=\"96\" tm=\"160813_001500\">\r\n </DataRec>\r\n")
  46. #define XML_FIX_SECT_LEN strlen(" <DI val=\"000000.000\" />\r\n")
  47. #define XML_FIX_ATTR_LEN strlen(" <DI ioa=\"16385\" type=\"float\" unit=\"MVAr\" />\r\n")
  48. #define XML_FIX_FILE_FIX_LEN strlen("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<DataFile>\r\n <Header fileType=\"FIXPT\" fileVer=\"1.00\" devName=\"XXXXXXXXXXXX\" />\r\n <DataAttr dataNum=\"1024\" sectNum=\"096\" interval=\"15min\">\r\n </DataAttr>\r\n</DataFile>\r\n")
  49. #define XML_FIX_ATTR_LEN strlen(" <DI ioa=\"16385\" type=\"float\" unit=\"MVAr\" />\r\n")
  50. #define XML_FRZ_ATTR_LEN strlen(" <DI ioa=\"25609\" type=\"float\" unit=\"kVarh\" />")
  51. #define XML_FRZ_SECT_LEN strlen(" <DI val=\"000000.000\" />\r\n")
  52. #define XML_FRZ_MIN_DATAREC_LEN strlen(" <DataRec sect=\"96\" tm=\"160813_001500\">\r\n </DataRec>\r\n")
  53. #define XML_FRZ_DAY_DATAREC_LEN strlen(" <DataRec type=\"DayFrz\" tm=\"160813_180000\">\r\n </DataRec>\r\n")
  54. #define XML_FRZ_FILE_FIX_LEN strlen("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<DataFile>\r\n <Header fileType=\"FRZ\" fileVer=\"1.00\" devName=\"XXXXXXXXXXXX\" />\r\n <DataAttr type=\"FixFrz\" dataNum=\"1024\" sectNum=\"096\" interval=\"15min\">\r\n </DataAttr>\r\n <DataAttr type=\"DayFrz\" dataNum=\"1024\"> </DataAttr></DataFile>\r\n")
  55. enum
  56. {
  57. HS_FILE_SOE = 0, // SOE记录文件
  58. HS_FILE_CO, // 遥控记录文件
  59. HS_FILE_FIXPT, // 定点遥测记录文件
  60. HS_FILE_EXV, // 极值记录文件
  61. HS_FILE_FRZ,
  62. HS_FILE_FLOWREV,
  63. HS_FILE_LOG,
  64. HS_FILE_NUM
  65. };
  66. struct exv_rcd_data
  67. {
  68. u16 cp; // 信息对象地址
  69. float elem_val; // 信息元素值(归一化值)
  70. struct rtc_time_t time_mark; // 时标
  71. };
  72. #define EXV_NUM_MAX UI_NUM + SW_AC_NUM_ALL * SWITCH_NUM_MAX
  73. struct exv_rcd_t
  74. {
  75. struct rtc_time_t time_bk; // 文件日期
  76. u32 max_num; // 最大值信息对象数目n
  77. struct exv_rcd_data max_data[EXV_NUM_MAX];
  78. float max_value_bk[EXV_NUM_MAX];
  79. u32 min_num; // 最小值信息对象数目n
  80. struct exv_rcd_data min_data[EXV_NUM_MAX];
  81. float min_value_bk[EXV_NUM_MAX];
  82. u8 ac_num;
  83. bool save_flag;
  84. bool occur_flag;
  85. };
  86. #define FIXPT_RCD_NUM UI_NUM + SW_AC_NUM_ALL *SWITCH_NUM_MAX
  87. struct fixpt_rcd_data
  88. {
  89. u16 cp;
  90. float elem_val; // 信息元素值(浮点数值)
  91. };
  92. struct fixpt_rcd_t
  93. {
  94. struct rtc_time_t time_bk; // 定点时刻
  95. u8 info_num; // 定点信息对象数目
  96. struct fixpt_rcd_data data[FIXPT_RCD_NUM];
  97. };
  98. /****************************日冻结电能量记录文件****************************/
  99. struct frz_rcd_data
  100. {
  101. u16 cp;
  102. float elem_val; // 信息元素值(浮点)
  103. };
  104. struct frz_rcd_t
  105. {
  106. struct rtc_time_t tm; // 定点时刻
  107. u8 min_frz_num; // 十五分钟冻结信息体个数
  108. u8 day_frz_num; // 日冻结信息体个数
  109. struct frz_rcd_data min_data[SW_DD_NUM_ALL];
  110. struct frz_rcd_data day_data[SW_DD_NUM_ALL];
  111. };
  112. /****************************功率反向电能量冻结值文件****************************/
  113. #define FLOW_RCD_NUM 8
  114. struct flowrev_rcd_data
  115. {
  116. u16 cp;
  117. float elem_val; // 信息元素值(浮点)
  118. struct rtc_time_t rev_time; // 冻结时刻
  119. };
  120. struct flowrev_rcd_t
  121. {
  122. u8 info_num;
  123. struct rtc_time_t time_bk;
  124. struct flowrev_rcd_data data[FLOW_RCD_NUM];
  125. };
  126. /************************************日志记录文件******************************/
  127. enum
  128. {
  129. TYPE_LOG_NULL = 0,
  130. TYPE_DEV_RESTART,
  131. TYPE_CHNL_LINK,
  132. TYPE_COMM_ERR,
  133. TYPE_HW_ERR,
  134. TYPE_SW_ERR,
  135. TYPE_MAIN_POW,
  136. TYPE_STANDBY_POW,
  137. TYPE_CTL_LOOP,
  138. TYPE_SW_YX,
  139. TYPE_DEV_PARM,
  140. TYPE_SW_UPDATE,
  141. LOG_TYPE_NUM
  142. };
  143. #define LINK_CH_NUM 12
  144. typedef struct LOG_FLAG
  145. {
  146. bool com_err[COMM_CHANNEL_NUM];
  147. bool mdygd;
  148. bool sdygd;
  149. bool dchh;
  150. bool dcyc;
  151. } LOG_FLAG;
  152. struct log_struct
  153. {
  154. u8 id;
  155. u8 val;
  156. struct rtc_time_t time;
  157. char des_str[128];
  158. };
  159. #define LOG_NUM 16
  160. struct log_poll
  161. {
  162. volatile u8 head;
  163. volatile u8 tail;
  164. struct log_struct log[LOG_NUM];
  165. };
  166. struct history_rcd_file
  167. {
  168. struct rtc_time_t create_time; // 文件创建时间
  169. int node_num; // 节点数
  170. int rcd_num;
  171. u32 len; // 文件大小
  172. char name[64]; // 文件名
  173. struct file *handle;
  174. int offset;
  175. int num_pos;
  176. };
  177. struct rcd_file_info
  178. {
  179. u32 len; // 一条记录的长度
  180. u32 rcd_num; // 记录行总数
  181. u16 part_id; // 节点索引
  182. u16 end_index;
  183. u8 file_num; // 文件总数
  184. bool b_err; // 错误标志
  185. bool b_new;
  186. };
  187. extern struct rcd_file_info soe_file_info;
  188. extern struct rcd_file_info yk_file_info;
  189. extern struct rcd_file_info fixpt_file_info;
  190. extern struct rcd_file_info exv_file_info;
  191. extern struct rcd_file_info frz_file_info;
  192. extern struct rcd_file_info log_file_info;
  193. extern struct exv_rcd_t exv_rcd;
  194. extern struct fixpt_rcd_t fixpt_rcd;
  195. extern LOG_FLAG log_flag;
  196. extern bool histrory_file_set;
  197. extern bool b_hisfile_format;
  198. extern bool hs_file_init_flag;
  199. extern struct log_poll log_st;
  200. extern bool b_iec_change;
  201. extern struct history_rcd_file event_rcd_file[2]; // 事件记录,包括SOE及操作记录
  202. extern fileInfo soeList; // SOE事件记录
  203. extern fileInfo coList; // 遥控操作记录
  204. extern fileInfo flowrevList; // 潮流反向记录
  205. extern fileInfo logList; // 日志记录
  206. extern char *p_his_file[];
  207. extern const char *history_file_name[][2];
  208. int acquire_exv_data(u8 day);
  209. int create_event_rcd_file(u8 type);
  210. int read_exv_rcd_file(u8 day);
  211. int create_exv_rcd_file(struct rcd_file_info *p_info);
  212. void get_exv_rcd_data(struct rtc_time_t time, bool day_change);
  213. int read_fixpt_rcd_file(u8 day, u16 *p_part_id);
  214. int read_frz_rcd_file(u8 day, u16 *p_part_id);
  215. int read_flowrev_rcd_file(void);
  216. int flowrev_rcd_file_deal(void);
  217. int create_fixpt_rcd_file(void);
  218. int create_frz_rcd_file(void);
  219. int create_flowrev_rcd_file(void);
  220. int exv_rcd_file_deal(struct rtc_time_t time);
  221. int fixpt_rcd_file_deal(struct rtc_time_t time);
  222. int frz_rcd_file_deal(struct rtc_time_t time);
  223. int read_log_rcd_file(void);
  224. void get_fixpt_rcd_data(struct rtc_time_t time_bk);
  225. int get_frz_rcd_data(struct rtc_time_t time_bk);
  226. void refresh_soe_file(EVENT_STRUCT *er);
  227. void refresh_co_file(bool master, u8 frametype, u8 op_type, u16 cp, u8 cot, u8 cmd);
  228. void init_hs_file(bool b_new_dir);
  229. void refresh_exv_file(void);
  230. void refresh_fixpt_file(void);
  231. void hisory_file_app(void);
  232. int create_log_rcd_file(void);
  233. void load_hs_log_rcd(u8 id, bool rtc_flag, struct rtc_time_t *p_tm, char *buf, u8 val);
  234. int get_flowrev_data(void);
  235. void log_rcd_com_err_rst(int chnl);
  236. bool log_file_app(void);
  237. int hs_read_iec_crc(void);
  238. bool hs_write_iec_crc(void);
  239. int create_extreme_txt(u8 day);
  240. int exv_txt_file_deal(void);
  241. int init_his_db(void);
  242. int init_his_soe_db(void);
  243. int init_his_co_db(void);
  244. int init_his_flowrev_db(void);
  245. int init_his_log_db(void);
  246. int del_history_file(u8 type);
  247. int rt_file_deldir(char *pathname);
  248. #endif