get_keyword.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. #include "head.h"
  2. NAME_COMPARE str_di_name[STR_MAX_NUM]; //存储屏蔽相关关键字后字符的数组
  3. /**************************************************************************
  4. 函数名称:three_remote_run
  5. 创建日期:2021.11
  6. 函数功能说明:根据三遥通道配置中的关键字配置完成对应功能的处理
  7. 输入参数:无
  8. 输出参数:无
  9. 返回值:无
  10. ***************************************************************************/
  11. void three_remote_run(void)
  12. {
  13. int i,j,k;
  14. struct equ_config_di *ecd_di;
  15. struct equ_config_do *ecd_do;
  16. struct equ_config_ac *ecd_ac;
  17. int s_ac_num=0, s_di_num=0, s_do_num=0;
  18. bool sb_wrong=true;
  19. rt_printf("关键字数:%d.\r\n",REMOTE_NUM);
  20. for(i=0;i<REMOTE_NUM;i++)
  21. {
  22. switch (g_three_remote_func[i].type)
  23. {
  24. case KEYWORD_YC:
  25. ecd_ac = &g_equ_config_ac[0];
  26. for(j=0; j<g_equ_config->equ_slot_num; j++)
  27. {
  28. if(0 != j)
  29. {
  30. s_ac_num += g_board_info[j-1].ac_num;
  31. ecd_ac = &g_equ_config_ac[s_ac_num];
  32. }
  33. for(k=0;k<g_board_info[j].ac_num;k++)
  34. {
  35. if(0 == strncmp(ecd_ac[k].name,g_three_remote_func[i].name,strlen(g_three_remote_func[i].name)))
  36. {
  37. rt_printf("板卡%02d AI[%d/总%d]:%s\r\n",j,(ecd_ac[k].index+1),g_board_info[j].ac_num,ecd_ac[k].name);
  38. g_three_remote_func[i].function(ecd_ac[k].index, j); //传递带关键字遥测点的硬件地址和板卡槽位
  39. sb_wrong = false;
  40. }
  41. }
  42. }
  43. if(sb_wrong)
  44. {
  45. rt_printf("AC关键字未输入/输入有误,无法识别\r\n");
  46. }
  47. break;
  48. case KEYWORD_YX:
  49. ecd_di = &g_equ_config_di[0];
  50. for(j=0; j<g_equ_config->equ_slot_num; j++)
  51. {
  52. if(0 != j)
  53. {
  54. s_di_num += g_board_info[j-1].di_num;
  55. ecd_di = &g_equ_config_di[s_di_num];
  56. }
  57. for(k=0;k<g_board_info[j].di_num;k++)
  58. {
  59. if(0 == strncmp(ecd_di[k].name,g_three_remote_func[i].name,strlen(g_three_remote_func[i].name)))
  60. {
  61. rt_printf("板卡%02d DI[%d/总%d]:%s\r\n",j,(ecd_di[k].index+1),g_board_info[j].di_num,ecd_di[k].name);
  62. g_three_remote_func[i].function(ecd_di[k].index, j); //传递带关键字遥信点的硬件地址和板卡槽位
  63. sb_wrong = false;
  64. }
  65. }
  66. }
  67. if(sb_wrong)
  68. {
  69. rt_printf("DI关键字未输入/输入有误,无法识别\r\n");
  70. }
  71. break;
  72. case KEYWORD_YK:
  73. /*for(k=0;k<g_equ_config->do_num;k++)
  74. {
  75. ecd_do = &g_equ_config_do[k];
  76. if(0 == strncmp(ecd_do->name,g_three_remote_func[i].name,strlen(g_three_remote_func[i].name)))
  77. {
  78. rt_printf("遥控:%s,硬件地址:%d,do_num=%d\r\n",ecd_do->name,(ecd_do->index+1),g_equ_config->do_num);
  79. g_three_remote_func[i].function(ecd_do->index);
  80. }
  81. }*/
  82. ecd_do = &g_equ_config_do[0];
  83. for(j=0; j<g_equ_config->equ_slot_num; j++)
  84. {
  85. if(0 != j)
  86. {
  87. s_do_num += g_board_info[j-1].do_num;
  88. ecd_do = &g_equ_config_do[s_do_num];
  89. }
  90. for(k=0;k<g_board_info[j].do_num;k++)
  91. {
  92. if(0 == strncmp(ecd_do[k].name,g_three_remote_func[i].name,strlen(g_three_remote_func[i].name)))
  93. {
  94. rt_printf("板卡%02d DO[%d/总%d]:%s\r\n",j,(ecd_do[k].index+1),g_board_info[j].do_num,ecd_do[k].name);
  95. g_three_remote_func[i].function(ecd_do[k].index, j); //传递带关键字遥控点的硬件地址和板卡槽位
  96. sb_wrong = false;
  97. }
  98. }
  99. }
  100. if(sb_wrong)
  101. {
  102. rt_printf("DO关键字未输入/输入有误,无法识别\r\n");
  103. }
  104. break;
  105. default:
  106. break;
  107. }
  108. }
  109. create_keyword_statement();
  110. }
  111. /**************************************************************************
  112. 函数名称:create_keyword_statement
  113. 创建日期:2021.11
  114. 函数功能说明:创建关键字声明
  115. 输入参数:无
  116. 输出参数:无
  117. 返回值:无
  118. ***************************************************************************/
  119. void create_keyword_statement(void)
  120. {
  121. struct file *pfile;
  122. loff_t pos=0;
  123. char tmp_keyword[256];
  124. int i;
  125. // 创建描述文件
  126. pfile = rt_file_open("/tmp/keyword.csv",O_CREAT|O_RDWR|O_TRUNC,0);
  127. if(IS_ERR(pfile))
  128. return;
  129. sprintf(tmp_keyword,"关键字属性,关键字名称,配置说明\r\n");
  130. rt_file_write(pfile,tmp_keyword,strlen(tmp_keyword),&pos);
  131. memset(tmp_keyword, 0, sizeof(tmp_keyword));
  132. for(i=0;i<REMOTE_NUM;i++)
  133. {
  134. sprintf(tmp_keyword,"%s,%s,%s\r\n",g_three_remote_func[i].name_type,g_three_remote_func[i].name,g_three_remote_func[i].name_explain);
  135. rt_file_write(pfile,tmp_keyword,strlen(tmp_keyword),&pos);
  136. }
  137. memset(tmp_keyword, 0, sizeof(tmp_keyword));
  138. sprintf(tmp_keyword,"\r\n使用说明:,维护工具的通道配置里将关键字输入于对应名称前面即可实现特定功能,如:\r\n");
  139. rt_file_write(pfile,tmp_keyword,strlen(tmp_keyword),&pos);
  140. memset(tmp_keyword, 0, sizeof(tmp_keyword));
  141. sprintf(tmp_keyword,",[DI通道配置]:\r\n,板卡槽位,硬件地址,归属,类型,名称,防抖时间(ms),取反\r\n,1,1,开关1,合位开入,<交流>开关1 合位开入,20,否\r\n\
  142. ATTENTION,!!请务必不能忽略关键字的尖括号“<>”!!\r\n");
  143. rt_file_write(pfile,tmp_keyword,strlen(tmp_keyword),&pos);
  144. memset(tmp_keyword, 0, sizeof(tmp_keyword));
  145. rt_file_close(pfile,0);
  146. }
  147. /**************************************************************************
  148. 函数名称:shield_str
  149. 创建日期:2021.11
  150. 函数功能说明:屏蔽"<交流>"等关键字的显示(面板和SOE)
  151. 输入参数:ecd,str_type
  152. 输出参数:str_name
  153. 返回值:无
  154. ***************************************************************************/
  155. char* shield_str(struct equ_config_di *ecd)
  156. {
  157. int i,len;
  158. for(i=0; i<REMOTE_NUM; i++)
  159. {
  160. if(0 == strncmp(ecd->name,g_three_remote_func[i].name,strlen(g_three_remote_func[i].name)))
  161. {
  162. len = strlen(g_three_remote_func[i].name);
  163. strcpy(str_di_name[i].namestr,&ecd->name[len]);
  164. return str_di_name[i].namestr;
  165. }
  166. }
  167. return ecd->name;
  168. }
  169. /**************************************************************************
  170. 函数名称:print_di
  171. 创建日期:2022.12
  172. 函数功能说明:将开入配置打印成文件,放到tmp文件夹中
  173. 输入参数:无
  174. 输出参数:无
  175. 返回值:无
  176. ***************************************************************************/
  177. static void print_di(void)
  178. {
  179. struct file *pfile;
  180. loff_t pos=0;
  181. char str_config[64];
  182. int i;
  183. // 创建描述文件
  184. pfile = rt_file_open("/tmp/equ_di.csv",O_CREAT|O_RDWR|O_TRUNC,0);
  185. if(IS_ERR(pfile))
  186. return;
  187. for(i=0;i<PUB_DI_NUM;i++)
  188. {
  189. if(0 == i)
  190. sprintf(str_config,"公共,%s\r\n",g_pub_di_name[i]);
  191. else
  192. sprintf(str_config,",%s\r\n",g_pub_di_name[i]);
  193. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  194. memset(str_config, 0, sizeof(str_config));
  195. }
  196. for(i=0;i<SW_DI_NUM;i++)
  197. {
  198. if(0 == i)
  199. sprintf(str_config,"开关,%s\r\n",g_sw_di_name[i]);
  200. else
  201. sprintf(str_config,",%s\r\n",g_sw_di_name[i]);
  202. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  203. memset(str_config, 0, sizeof(str_config));
  204. }
  205. rt_file_close(pfile,0);
  206. }
  207. /**************************************************************************
  208. 函数名称:print_do
  209. 创建日期:2022.12
  210. 函数功能说明:将开出配置打印成文件,放到tmp文件夹中
  211. 输入参数:无
  212. 输出参数:无
  213. 返回值:无
  214. ***************************************************************************/
  215. static void print_do(void)
  216. {
  217. struct file *pfile;
  218. loff_t pos=0;
  219. char str_config[64];
  220. int i;
  221. // 创建描述文件
  222. pfile = rt_file_open("/tmp/equ_do.csv",O_CREAT|O_RDWR|O_TRUNC,0);
  223. if(IS_ERR(pfile))
  224. return;
  225. for(i=0;i<PUB_DO_NUM;i++)
  226. {
  227. if(0 == i)
  228. sprintf(str_config,"公共,%s\r\n",g_pub_do_name[i]);
  229. else
  230. sprintf(str_config,",%s\r\n",g_pub_do_name[i]);
  231. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  232. memset(str_config, 0, sizeof(str_config));
  233. }
  234. for(i=0;i<SW_DO_NUM;i++)
  235. {
  236. if(0 == i)
  237. sprintf(str_config,"开关,%s\r\n",g_sw_do_name[i]);
  238. else
  239. sprintf(str_config,",%s\r\n",g_sw_do_name[i]);
  240. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  241. memset(str_config, 0, sizeof(str_config));
  242. }
  243. rt_file_close(pfile,0);
  244. }
  245. /**************************************************************************
  246. 函数名称:print_led
  247. 创建日期:2022.12
  248. 函数功能说明:将灯配置打印成文件,放到tmp文件夹中
  249. 输入参数:无
  250. 输出参数:无
  251. 返回值:无
  252. ***************************************************************************/
  253. static void print_led(void)
  254. {
  255. struct file *pfile;
  256. loff_t pos=0;
  257. char str_config[64];
  258. int i;
  259. // 创建描述文件
  260. pfile = rt_file_open("/tmp/equ_led.csv",O_CREAT|O_RDWR|O_TRUNC,0);
  261. if(IS_ERR(pfile))
  262. return;
  263. for(i=0;i<PUB_LED_NUM;i++)
  264. {
  265. if(0 == i)
  266. sprintf(str_config,"公共,%s\r\n",g_pub_led_name[i]);
  267. else
  268. sprintf(str_config,",%s\r\n",g_pub_led_name[i]);
  269. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  270. memset(str_config, 0, sizeof(str_config));
  271. }
  272. for(i=0;i<SW_LED_NUM;i++)
  273. {
  274. if(0 == i)
  275. sprintf(str_config,"开关,%s\r\n",g_sw_led_name[i]);
  276. else
  277. sprintf(str_config,",%s\r\n",g_sw_led_name[i]);
  278. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  279. memset(str_config, 0, sizeof(str_config));
  280. }
  281. rt_file_close(pfile,0);
  282. }
  283. /**************************************************************************
  284. 函数名称:print_soe
  285. 创建日期:2022.12
  286. 函数功能说明:将事件记录打印成文件,放到tmp文件夹中
  287. 输入参数:无
  288. 输出参数:无
  289. 返回值:无
  290. ***************************************************************************/
  291. static void print_soe(void)
  292. {
  293. struct file *pfile;
  294. loff_t pos=0;
  295. char str_config[64];
  296. int i;
  297. // 创建描述文件
  298. pfile = rt_file_open("/tmp/equ_soe.csv",O_CREAT|O_RDWR|O_TRUNC,0);
  299. if(IS_ERR(pfile))
  300. return;
  301. for(i=0;i<(EV_NUMBER - EV_PUB_START);i++)
  302. {
  303. if(0 == i)
  304. sprintf(str_config,"公共,%s\r\n",tAllSOE[i+EV_PUB_START].strName);
  305. else
  306. sprintf(str_config,",%s\r\n",tAllSOE[i+EV_PUB_START].strName);
  307. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  308. memset(str_config, 0, sizeof(str_config));
  309. }
  310. for(i=0;i<EV_SW_NUM;i++)
  311. {
  312. if(0 == i)
  313. sprintf(str_config,"开关,%s\r\n",tAllSOE[i].strName);
  314. else
  315. sprintf(str_config,",%s\r\n",tAllSOE[i].strName);
  316. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  317. memset(str_config, 0, sizeof(str_config));
  318. }
  319. rt_file_close(pfile,0);
  320. }
  321. /**************************************************************************
  322. 函数名称:print_forward_tab
  323. 创建日期:2022.12
  324. 函数功能说明:将转发点表打印成文件,放到tmp文件夹中
  325. 输入参数:无
  326. 输出参数:无
  327. 返回值:无
  328. ***************************************************************************/
  329. static void print_forward_tab(void)
  330. {
  331. struct file *pfile;
  332. loff_t pos=0;
  333. char str_config[64];
  334. int i;
  335. char name[64];
  336. // 创建描述文件
  337. pfile = rt_file_open("/tmp/equ_table.csv",O_CREAT|O_RDWR|O_TRUNC,0);
  338. if(IS_ERR(pfile))
  339. return;
  340. if(0 == g_table_head->di_num)
  341. {
  342. sprintf(str_config, "遥信\r\n");
  343. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  344. memset(str_config, 0, sizeof(str_config));
  345. }
  346. else
  347. {
  348. for(i=0;i<g_table_head->di_num;i++)
  349. {
  350. tbl_getname(RES_TYPE_YX,i,name);
  351. if(0 == i)
  352. sprintf(str_config, "遥信,%s\r\n", name);
  353. else
  354. sprintf(str_config, ",%s\r\n", name);
  355. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  356. memset(str_config, 0, sizeof(str_config));
  357. }
  358. }
  359. if(0 == g_table_head->ac_num)
  360. {
  361. sprintf(str_config, "遥测\r\n");
  362. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  363. memset(str_config, 0, sizeof(str_config));
  364. }
  365. else
  366. {
  367. for(i=0;i<g_table_head->ac_num;i++)
  368. {
  369. tbl_getname(RES_TYPE_YC,i,name);
  370. if(0 == i)
  371. sprintf(str_config, "遥测,%s\r\n", name);
  372. else
  373. sprintf(str_config, ",%s\r\n", name);
  374. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  375. memset(str_config, 0, sizeof(str_config));
  376. }
  377. }
  378. if(0 == g_table_head->do_num)
  379. {
  380. sprintf(str_config, "遥控\r\n");
  381. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  382. memset(str_config, 0, sizeof(str_config));
  383. }
  384. else
  385. {
  386. for(i=0;i<g_table_head->do_num;i++)
  387. {
  388. tbl_getname(RES_TYPE_YK,i,name);
  389. if(0 == i)
  390. sprintf(str_config, "遥控,%s\r\n", name);
  391. else
  392. sprintf(str_config, ",%s\r\n", name);
  393. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  394. memset(str_config, 0, sizeof(str_config));
  395. }
  396. }
  397. if(0 == g_table_head->dd_num)
  398. {
  399. sprintf(str_config, "电度\r\n");
  400. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  401. memset(str_config, 0, sizeof(str_config));
  402. }
  403. else
  404. {
  405. for(i=0;i<g_table_head->dd_num;i++)
  406. {
  407. tbl_getname(RES_TYPE_DD,i,name);
  408. if(0 == i)
  409. sprintf(str_config, "电度,%s\r\n", name);
  410. else
  411. sprintf(str_config, ",%s\r\n", name);
  412. rt_file_write(pfile,str_config,strlen(str_config),&pos);
  413. memset(str_config, 0, sizeof(str_config));
  414. }
  415. }
  416. rt_file_close(pfile,0);
  417. }
  418. /**************************************************************************
  419. 函数名称:get_config
  420. 创建日期:2022.12
  421. 函数功能说明:将开入、开出、灯、事件记录、转发点表打印成文件
  422. 输入参数:无
  423. 输出参数:无
  424. 返回值:无
  425. ***************************************************************************/
  426. void get_config(void)
  427. {
  428. print_di();
  429. print_do();
  430. print_led();
  431. print_soe();
  432. print_forward_tab();
  433. }