ies1000.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684
  1. #include "plt.h"
  2. struct ies1000_t ies1000[IES1000_NBR_MAX + 1];
  3. int ies1000_reset_bsytikchk(int idx)
  4. {
  5. ies1000[idx].bsytik.timer = 0;
  6. ies1000[idx].bsytik.timeout = 0;
  7. ies1000[idx].bsytik.chkcnt = 0;
  8. return 0;
  9. }
  10. // 0 : not timeout
  11. // 1 : timeout
  12. int ies1000_is_bsytikchk_timeout(int idx)
  13. {
  14. struct ies1000_t* dev = &ies1000[1];
  15. if( dev->bsytik.chken == 1 ){
  16. return ies1000[idx].bsytik.timeout;
  17. }else{
  18. return 0;
  19. }
  20. }
  21. int ies1000_set_bsytik(int idx)
  22. {
  23. ies1000[idx].bsytik.from_host++;
  24. return 0;
  25. }
  26. int ies1000_get_bsytikchk_from_host(int idx)
  27. {
  28. ies1000[idx].bsytik.from_host++;
  29. return 0;
  30. }
  31. int ies1000_get_bsytikchk_en(int idx)
  32. {
  33. return ies1000[idx].bsytik.chken;
  34. }
  35. int ies1000_set_bsytikchk_en(int idx, int val)
  36. {
  37. ies1000[idx].bsytik.chken = val;
  38. return 0;
  39. }
  40. int ies1000_set_dac_param_en(int idx, int val)
  41. {
  42. struct ies1000_t* dev = &ies1000[1];
  43. struct comm_t* comm = &dev->comm;
  44. comm_set_dac_param_en(comm, val);
  45. return 0;
  46. }
  47. static int ies1000_dbcb_0(void *para,int ncolumn,char ** columnvalue,char *columnname[])
  48. {
  49. int i;
  50. struct dbcbparam_t* pcbparam = (struct dbcbparam_t*)para;
  51. struct ies1000_t* dev = &ies1000[1];
  52. pcbparam->nrow++;
  53. log_dbg("%s, ++, row:%d, col:%d", __func__,pcbparam->nrow,ncolumn);
  54. for( i = 0; i < ncolumn; i++){
  55. if( strcmp("info",columnname[i]) == 0){
  56. strcpy(dev->szinfo,columnvalue[i]);
  57. }else if( strcmp("adr",columnname[i]) == 0){
  58. dev->comm.adr = atoi(columnvalue[i]);
  59. }else if( strcmp("chan_idx",columnname[i]) == 0){
  60. dev->comm.chanidx = atoi(columnvalue[i]);
  61. }
  62. }
  63. pcbparam->ret = 0;
  64. log_dbg("%s, --,ret:%d",__func__,pcbparam->ret);
  65. return 0;
  66. }
  67. int ies1000_get_cmd( int idx )
  68. {
  69. return ies1000[idx].cmd;
  70. }
  71. int ies1000_get_comm_st(int idx)
  72. {
  73. struct ies1000_t* dev = &ies1000[idx];
  74. struct comm_t* comm = &dev->comm;
  75. return comm_get_state(comm);
  76. }
  77. void ies1000_reset_cmd(int idx)
  78. {
  79. ies1000[idx].cmd = CMD_SM_DONE;
  80. }
  81. int ies1000_get_state( int idx )
  82. {
  83. return ies1000[idx].sm.state;
  84. }
  85. char* ies1000_get_state_str( int idx )
  86. {
  87. return ies1000[idx].sm.szState;
  88. }
  89. int ies1000_get_step( int idx )
  90. {
  91. return ies1000[idx].sm.step;
  92. }
  93. int ies1000_get_tick( int idx )
  94. {
  95. return ies1000[idx].sm.tick;
  96. }
  97. double ies1000_get_tick_ave( int idx )
  98. {
  99. return ies1000[idx].sm.timing_ave;
  100. }
  101. double ies1000_get_tick_cur( int idx )
  102. {
  103. return ies1000[idx].sm.timing_cur;
  104. }
  105. double ies1000_get_tick_max( int idx )
  106. {
  107. return ies1000[idx].sm.timing_max;
  108. }
  109. char* ies1000_get_err_str( int idx )
  110. {
  111. return ies1000[idx].sm.szerr;
  112. }
  113. int ies1000_chk_state( int idx, int stat )
  114. {
  115. return ies1000_get_state(idx) == stat ? 0 : -1;
  116. }
  117. int ies1000_get_ap( int idx )
  118. {
  119. return ies1000[idx].pow.ap;
  120. }
  121. int ies1000_get_dcp( int idx )
  122. {
  123. return ies1000[idx].dc_p;
  124. }
  125. int ies1000_get_breaker_ac( int idx )
  126. {
  127. return ies1000[idx].ac_breaker;
  128. }
  129. int ies1000_get_breaker_dc( int idx )
  130. {
  131. return ies1000[idx].dc_breaker;
  132. }
  133. int ies1000_get_dcbuf_cont( int idx )
  134. {
  135. return ies1000[idx].dcbuf_cont;
  136. }
  137. int ies1000_get_dev_aps( int idx )
  138. {
  139. return ies1000[idx].active_p_set;
  140. }
  141. int ies1000_get_dcv( int idx )
  142. {
  143. return ies1000[idx].dc_v;
  144. }
  145. int ies1000_get_dcc( int idx )
  146. {
  147. return ies1000[idx].dc_c;
  148. }
  149. int ies1000_get_dc_ovp( int idx )
  150. {
  151. return ies1000[idx].dc_ovp;
  152. }
  153. int ies1000_get_dc_uvp( int idx )
  154. {
  155. return ies1000[idx].dc_uvp;
  156. }
  157. int ies1000_get_dc_dfp( int idx )
  158. {
  159. return ies1000[idx].dc_dfp;
  160. }
  161. int ies1000_get_env_otp( int idx )
  162. {
  163. return ies1000[idx].env_otp;
  164. }
  165. int ies1000_get_reactor_otp( int idx )
  166. {
  167. return ies1000[idx].reactor_otp;
  168. }
  169. int ies1000_get_igbt_otp( int idx )
  170. {
  171. return ies1000[idx].igbt_otp;
  172. }
  173. int ies1000_get_ac_brk( int idx )
  174. {
  175. return ies1000[idx].ac_breaker;
  176. }
  177. int ies1000_get_dc_brk( int idx )
  178. {
  179. return ies1000[idx].dc_breaker;
  180. }
  181. int ies1000_get_emg_btn( int idx )
  182. {
  183. return ies1000[idx].emg_btn;
  184. }
  185. int ies1000_get_errstat( int idx )
  186. {
  187. return ies1000[idx].errstatus;
  188. }
  189. double ies1000_get_gridv( int idx )
  190. {
  191. return ies1000[idx].grid_v;
  192. }
  193. double ies1000_get_gridc( int idx )
  194. {
  195. return ies1000[idx].ac_c;
  196. }
  197. double ies1000_get_grid_freq( int idx )
  198. {
  199. return ies1000[idx].grid_freq;
  200. }
  201. double ies1000_get_ua( int idx )
  202. {
  203. return ies1000[idx].ua;
  204. }
  205. double ies1000_get_ub( int idx )
  206. {
  207. return ies1000[idx].ub;
  208. }
  209. double ies1000_get_uc( int idx )
  210. {
  211. return ies1000[idx].uc;
  212. }
  213. double ies1000_get_ia( int idx )
  214. {
  215. return ies1000[idx].ia;
  216. }
  217. double ies1000_get_ib( int idx )
  218. {
  219. return ies1000[idx].ib;
  220. }
  221. double ies1000_get_ic( int idx )
  222. {
  223. return ies1000[idx].ic;
  224. }
  225. int ies1000_get_temp_igbt_a( int idx )
  226. {
  227. return ies1000[idx].temp_igbt_a;
  228. }
  229. int ies1000_get_temp_igbt_b( int idx )
  230. {
  231. return ies1000[idx].temp_igbt_b;
  232. }
  233. int ies1000_get_temp_igbt_c( int idx )
  234. {
  235. return ies1000[idx].temp_igbt_c;
  236. }
  237. int ies1000_get_temp_reactor( int idx )
  238. {
  239. return ies1000[idx].temp_reactor;
  240. }
  241. int ies1000_get_temp_env( int idx )
  242. {
  243. return ies1000[idx].temp_env;
  244. }
  245. static void ies1000_update(int idx)
  246. {
  247. struct ies1000_t* dev = &ies1000[idx];
  248. dev->pow.ap = dev->ap;
  249. }
  250. static void* ies1000_thrd_main(void* param)
  251. {
  252. int idx = 1;
  253. struct ies1000_t* dev = &ies1000[idx];
  254. log_dbg("%s, idx:%d, ++",__func__, idx);
  255. ies1000_set_bsytikchk_en(idx, 1);
  256. ies1000_sm_init(1);
  257. ies1000_comm_init(1);
  258. while(1){
  259. ies1000_comm_dac(1);
  260. ies1000_sm(1);
  261. ies1000_update(1);
  262. usleep(10000); /* 10ms */
  263. }
  264. log_dbg("%s, --",__func__);
  265. }
  266. static void* ies1000_thrd_aux(void* param)
  267. {
  268. int idx = 1;
  269. struct ies1000_t* dev = &ies1000[idx];
  270. struct statemachine_t* sm = &dev->sm;
  271. log_dbg("%s, ++",__func__);
  272. while(1){
  273. if( dev->bsytik.timer++ >= 10 ){ // chk every 1 second
  274. dev->bsytik.timer = 0;
  275. if( dev->bsytik.last_from_host != dev->bsytik.from_host ){ // refresh
  276. dev->bsytik.last_from_host = dev->bsytik.from_host;
  277. dev->bsytik.chkcnt = 0;
  278. }else{ // counting
  279. if( dev->bsytik.chkcnt++ >= 5){ // 5s
  280. dev->bsytik.timeout = 1;
  281. dev->bsytik.chkcnt = 0;
  282. }
  283. }
  284. }
  285. usleep(100000); /* 100ms */
  286. }
  287. log_dbg("%s, --",__func__);
  288. }
  289. int ies1000_init()
  290. {
  291. pthread_t thrd;
  292. int ret = 0;
  293. int result;
  294. char *errmsg = NULL;
  295. char sql[1024];
  296. struct dbcbparam_t cbparam;
  297. sqlite3* db = NULL;
  298. struct ies1000_t* dev = &ies1000[1];
  299. log_dbg( "%s, ++",__func__);
  300. plt_lock_ctndb();
  301. db = plt_get_ctndb();
  302. sprintf(sql,"select * from ies1000");
  303. cbparam.nrow = 0;
  304. result = sqlite3_exec(db,sql, ies1000_dbcb_0,(void*)&cbparam,&errmsg);
  305. plt_unlock_ctndb();
  306. if( result != SQLITE_OK ){
  307. log_dbg("%s, result != SQLITE_OK, result:%d", __func__, result);
  308. ret = -1;
  309. }else if( cbparam.ret != 0){
  310. log_dbg("%s, cbparam.ret != 0, %d", __func__, cbparam.ret);
  311. ret = -2;
  312. }else if( cbparam.nrow != 1 ){
  313. log_dbg("%s, cbparam.nrow != 1, %d", __func__, cbparam.nrow);
  314. ret = -3;
  315. }else{
  316. if(pthread_create(&thrd, NULL, ies1000_thrd_main, NULL) != 0){
  317. log_dbg( "%s, create ies1000 thrd main fail", __func__);
  318. ret = -1;
  319. }else if(pthread_create(&thrd, NULL, ies1000_thrd_aux, NULL) != 0){
  320. log_dbg( "%s, create ies1000 thrd aux fail", __func__);
  321. ret = -1;
  322. }
  323. }
  324. log_dbg( "%s, --, ret:%d", __func__, ret);
  325. return ret;
  326. }
  327. int ies1000_send_sm_cmd( int idx, int val )
  328. {
  329. int ret = 0;
  330. struct ies1000_t* dev = &ies1000[idx];
  331. dev->cmd = val;
  332. log_dbg("%s, idx:%d, cmd:%d, ret:%d",__func__, idx, val, ret);
  333. return ret;
  334. }
  335. int ies1000_get_runmod( int idx )
  336. {
  337. return ies1000[idx].runmod;
  338. }
  339. int ies1000_get_runstat( int idx )
  340. {
  341. return ies1000[idx].runstatus;
  342. }
  343. char* ies1000_get_runstat_str( int idx )
  344. {
  345. return ies1000[idx].szrunstatus;
  346. }
  347. int ies1000_set_aps(int idx, int aps)
  348. {
  349. struct ies1000_t* dev = &ies1000[idx];
  350. int ret = 0;
  351. dev->pow.last_aps = dev->pow.aps;
  352. dev->pow.aps = aps;
  353. log_dbg( "%s, idx:%d, aps:%d, last_aps:%d", __func__, idx, dev->pow.aps, dev->pow.last_aps);
  354. return ret;
  355. }
  356. int ies1000_reset_aps(int idx)
  357. {
  358. struct ies1000_t* dev = &ies1000[idx];
  359. int ret = 0;
  360. dev->pow.last_aps = 0;
  361. dev->pow.aps = 0;
  362. //log_dbg( "%s, idx:%d, val:%d, ret:%d", __func__, idx, aps, ret);
  363. return ret;
  364. }
  365. int ies1000_get_aps(int idx)
  366. {
  367. return ies1000[idx].pow.aps;
  368. }
  369. int ies1000_get_last_aps(int idx)
  370. {
  371. return ies1000[idx].pow.last_aps;
  372. }
  373. int ies1000_is_aps_changed(int idx)
  374. {
  375. return (ies1000[idx].pow.aps != ies1000[idx].pow.last_aps)?1:0;
  376. }
  377. int ies1000_get_chan_idx(int idx)
  378. {
  379. return ies1000[idx].comm.chanidx;
  380. }
  381. int ies1000_get_adr(int idx)
  382. {
  383. return ies1000[idx].comm.adr;
  384. }
  385. char* ies1000_get_comm_state_str(int idx)
  386. {
  387. return ies1000[idx].comm.szState;
  388. }
  389. double ies1000_get_dac_ave(int idx)
  390. {
  391. return ies1000[idx].comm.dac.timing_ave;
  392. }
  393. double ies1000_get_dac_cur(int idx)
  394. {
  395. return ies1000[idx].comm.dac.timing_cur;
  396. }
  397. double ies1000_get_dac_max(int idx)
  398. {
  399. return ies1000[idx].comm.dac.timing_max;
  400. }
  401. unsigned short* ies1000_get_faults(int idx)
  402. {
  403. return ies1000[idx].faults;
  404. }
  405. unsigned short* ies1000_get_warns(int idx)
  406. {
  407. return ies1000[idx].warns;
  408. }
  409. int ies1000_get_dac_param_en(int idx)
  410. {
  411. return ies1000[idx].comm.dac.param_en;
  412. }
  413. char* ies1000_get_info_str(int idx)
  414. {
  415. return ies1000[idx].szinfo;
  416. }
  417. double ies1000_get_chg_e_total(int idx)
  418. {
  419. return ies1000[idx].chg_e_total;
  420. }
  421. double ies1000_get_dhg_e_total(int idx)
  422. {
  423. return ies1000[idx].dhg_e_total;
  424. }
  425. struct ies1000_t* ies1000_get_all_data_ptr()
  426. {
  427. return ies1000;
  428. }
  429. int ies1000_get_tool_data(int idx,char* buf)
  430. {
  431. if(idx < 1 || idx > IES1000_NBR_MAX || buf == NULL){
  432. return -1;
  433. }
  434. struct ies1000_t* dev = &ies1000[idx];
  435. struct statemachine_t* sm = &dev->sm;
  436. struct comm_t* comm = &dev->comm;
  437. char temp_buf[8192];
  438. int i = 0;
  439. sm_get_summary(sm, temp_buf, sizeof(temp_buf));
  440. sprintf(buf,"%s ", temp_buf);
  441. comm_get_summary(comm, temp_buf, sizeof(temp_buf));
  442. strcat(buf, temp_buf);
  443. // 0xF100
  444. sprintf(temp_buf,"bsytik_from_host:%03d timeout:%d en:%d\n",
  445. dev->bsytik.from_host, dev->bsytik.timeout, dev->bsytik.chken);
  446. strcat(buf, temp_buf);
  447. // 0xED00
  448. sprintf(temp_buf,"0xED00 runstat:"L_GREEN"%s"NONE" dc_v:"L_GREEN"%d"NONE", dc_c:%d, grid_freq:%.2f, grid_v:%.1f, ac_c:%.1f,\
  449. ua:%.1f ub:%.1f uc:%.1f ia:%.1f ib:%.1f ic:%.1f,\
  450. ap:"L_GREEN"%d"NONE" dc_p:%d, breaker_ac:%d dc:%d dcbuf_cont:%d emgbtn:%d \
  451. day_chg:%.1f dhg:%.1f, total_chg:%.1f dhg:%.1f, \
  452. igbt_temp a:%d b:%d c:%d reactor_temp:%d env:%d,\
  453. errstatus:"L_GREEN"%d"NONE"\n",
  454. dev->szrunstatus, dev->dc_v,dev->dc_c,dev->grid_freq, dev->grid_v, dev->ac_c,
  455. dev->ua,dev->ub,dev->uc,dev->ia,dev->ib,dev->ic,
  456. dev->ap, dev->dc_p, dev->ac_breaker,dev->dc_breaker, dev->dcbuf_cont, dev->emg_btn,
  457. dev->chg_e_day, dev->dhg_e_day,dev->chg_e_total,dev->dhg_e_total,
  458. dev->temp_igbt_a, dev->temp_igbt_b, dev->temp_igbt_c, dev->temp_reactor, dev->temp_env,
  459. dev->errstatus);
  460. strcat(buf, temp_buf);
  461. // 0x0E14 and 0x0F14
  462. strcat(buf, "0x0E14 and 0x0F14 Faults:");
  463. for( i = 1; i <= 6; i++ ){
  464. sprintf(temp_buf,"%d:0x%02X ", i, dev->faults[i]);
  465. strcat(buf, temp_buf);
  466. }
  467. strcat(buf, " Warns:");
  468. for( i = 1; i <= 6; i++ ){
  469. sprintf(temp_buf,"%d:0x%02X ", i, dev->warns[i]);
  470. strcat(buf, temp_buf);
  471. }
  472. strcat(buf,"\n");
  473. // 0xF000
  474. sprintf(temp_buf,"0xF000 cmdsrc:%s runmod:"L_GREEN"%s"NONE" workmod:%s switch_init:%s offgrid_freq:%s offgrid_v_set:%d \
  475. reactive_pow_set_mod:%s aps:%d devaps:"L_GREEN"%d"NONE" devrps:%d PQ_cv_vset:%d PQ_cc_cset:%d pow_set_src:%s ins_det:%d\n",
  476. dev->szcmdsrc,dev->szrunmod,dev->szworkmod,dev->szswitch_initmod,dev->szoffgrid_freq,dev->offgrid_vol_set,
  477. dev->szreactive_p_set_mod, dev->pow.aps, dev->active_p_set,dev->reactive_p_set,dev->cv_v_set,dev->cc_c_set,dev->szpow_set_src, dev->ins_det);
  478. strcat(buf, temp_buf);
  479. // 0xF509
  480. sprintf(temp_buf,"0xF509 gridfreq_autoadj:%d pow_rate_ctl:%d pow_rate_set:%d isl_det:%d\n",
  481. dev->gridfreq_autoadj, dev->pow_adjrate_en, dev->pow_adjrate_set, dev->isl_det);
  482. strcat(buf, temp_buf);
  483. // 0xEB37
  484. sprintf(temp_buf,"0xEB37 sync_time:%d-%d-%d %d:%d:%d\n", dev->sync_year, dev->sync_month, dev->sync_day, dev->sync_hour, dev->sync_min, dev->sync_sec);
  485. strcat(buf, temp_buf);
  486. }
  487. int ies1000_get_tbmqtt_main_data(int idx,char* buf)
  488. {
  489. sprintf(buf, "'pcs_runstat':'%s','pcs_ap':%d,'pcs_dcv':%d, 'pcs_dcc':%d,\
  490. 'pcs_ac_brk':%d, 'pcs_dc_brk':%d, 'pcs_emg_btn':%d, 'pcs_errstat':%d,\
  491. 'pcs_state':'%s'",
  492. ies1000_get_runstat_str( idx ), ies1000_get_ap( idx ), ies1000_get_dcv( idx ), ies1000_get_dcc( idx ),
  493. ies1000_get_ac_brk( idx ), ies1000_get_dc_brk( idx ), ies1000_get_emg_btn( idx ), ies1000_get_errstat( idx ),
  494. ies1000_get_state_str( idx ));
  495. }
  496. int ies1000_get_tbmqtt_secondy_data(int idx,char* buf)
  497. {
  498. sprintf(buf, "'pcs_ua':%.1f, 'pcs_ub':%.1f, 'pcs_uc':%.1f,\
  499. 'pcs_ia':%.1f, 'pcs_ib':%.1f, 'pcs_ic':%.1f,\
  500. 'pcs_t_a':%d, 'pcs_t_b':%d, 'pcs_t_c':%d, 'pcs_t_rct':%d,'pcs_t_env':%d",
  501. ies1000_get_ua( idx ), ies1000_get_ub( idx ), ies1000_get_uc( idx ),
  502. ies1000_get_ia( idx ),ies1000_get_ib( idx ),ies1000_get_ic( idx ),
  503. ies1000_get_temp_igbt_a( idx ),ies1000_get_temp_igbt_b( idx ),ies1000_get_temp_igbt_c( idx ),
  504. ies1000_get_temp_reactor( idx ),
  505. ies1000_get_temp_env( idx ));
  506. }
  507. int ies1000_get_cloud_main_data(int cnt_idx,int idx,char* buf)
  508. {
  509. sprintf(buf, "'ctn%d_pcs_state':%d, 'ctn%d_pcs_runstat':%d, 'ctn%d_pcs_dcv':%d, 'ctn%d_pcs_dcc':%d,\
  510. 'ctn%d_pcs_ac_brk':%d, 'ctn%d_pcs_dc_brk':%d, 'ctn%d_pcs_emg_btn':%d, 'ctn%d_pcs_errstat':%d, 'ctn%d_pcs_gf':%.1f, 'ctn%d_pcs_ap':%d",
  511. cnt_idx, ies1000_get_state( idx ),
  512. cnt_idx, ies1000_get_runstat( idx ),
  513. cnt_idx, ies1000_get_dcv( idx ),
  514. cnt_idx, ies1000_get_dcc( idx ),
  515. cnt_idx, ies1000_get_ac_brk( idx ),
  516. cnt_idx, ies1000_get_dc_brk( idx ),
  517. cnt_idx, ies1000_get_emg_btn( idx ),
  518. cnt_idx, ies1000_get_errstat( idx ),
  519. cnt_idx, ies1000_get_grid_freq( idx ),
  520. cnt_idx, ies1000_get_ap( idx ));
  521. }
  522. int ies1000_get_cloud_secondy_data(int cnt_idx,int idx,char* buf)
  523. {
  524. sprintf(buf, "'ctn%d_pcs_ua':%.1f, 'ctn%d_pcs_ub':%.1f, 'ctn%d_pcs_uc':%.1f,\
  525. 'ctn%d_pcs_ia':%.1f, 'ctn%d_pcs_ib':%.1f, 'ctn%d_pcs_ic':%.1f,'ctn%d_pcs_gf':%.1f,\
  526. 'ctn%d_pcs_t_a':%d, 'ctn%d_pcs_t_b':%d, 'ctn%d_pcs_t_c':%d, 'ctn%d_pcs_t_rct':%d,'ctn%d_pcs_t_env':%d",
  527. cnt_idx, ies1000_get_ua( idx ),
  528. cnt_idx, ies1000_get_ub( idx ),
  529. cnt_idx, ies1000_get_uc( idx ),
  530. cnt_idx, ies1000_get_ia( idx ),
  531. cnt_idx, ies1000_get_ib( idx ),
  532. cnt_idx, ies1000_get_ic( idx ),
  533. cnt_idx, ies1000_get_grid_freq( idx ),
  534. cnt_idx, ies1000_get_temp_igbt_a( idx ),
  535. cnt_idx, ies1000_get_temp_igbt_b( idx ),
  536. cnt_idx, ies1000_get_temp_igbt_c( idx ),
  537. cnt_idx, ies1000_get_temp_reactor( idx ),
  538. cnt_idx, ies1000_get_temp_env( idx ));
  539. }
  540. int ies1000_get_bkds_data(int idx,char* buf)
  541. {
  542. unsigned short* faults = ies1000_get_faults( idx );
  543. unsigned short* warns = ies1000_get_warns( idx );
  544. sprintf(buf,"\
  545. \"model\":\"%s\",\"info\":\"%s\",\"state\":\"%s\",\"step\":%d,\"err\":\"%s\",\
  546. \"ap\":%d,\"aps\":%d,\"tick\":%d,\"chan_idx\":%d,\"adr\":%d,\
  547. \"comm_state\":\"%s\",\"dac_param_en\":%d,\"bsytikchk_en\":%d,\"bsytikchk_from_host\":%d,\"bsytikchk_timeout\":%d,\
  548. \"dc_ovp\":%d,\"dc_uvp\":%d,\"dc_dfp\":%d,\"env_otp\":%d,\"reactor_otp\":%d,\
  549. \"igbt_otp\":%d,\"run_state\":\"%s\",\"dc_v\":%d,\"dc_c\":%d,\"grid_freq\":%.1f,\
  550. \"grid_v\":%.1f,\"grid_c\":%.1f,\"ua\":%.1f,\"ub\":%.1f,\"uc\":%.1f,\
  551. \"ia\":%.1f,\"ib\":%.1f,\"ic\":%.1f,\"ap\":%d,\"dc_p\":%d,\
  552. \"breaker_ac\":%d,\"breaker_dc\":%d,\"dcbuf_cont\":%d,\"emg_btn\":%d,\"igbt_a_temp\":%d,\
  553. \"igbt_b_temp\":%d,\"igbt_c_temp\":%d,\"reactor_temp\":%d,\"env_temp\":%d,\"err_status\":%d,\
  554. \"fault1\":\"0x%0x\",\"fault2\":\"0x%0x\",\"fault3\":\"0x%0x\",\"fault4\":\"0x%0x\",\"fault5\":\"0x%0x\",\
  555. \"fault6\":\"0x%0x\",\"warn1\":\"0x%0x\",\"warn2\":\"0x%0x\",\"warn3\":\"0x%0x\",\"warn4\":\"0x%0x\",\
  556. \"warn5\":\"0x%0x\",\"warn6\":\"0x%0x\"\
  557. ","ies1000","pcs",ies1000_get_state_str( idx ),ies1000_get_step( idx ),ies1000_get_err_str( idx ),
  558. ies1000_get_ap( idx ),ies1000_get_aps( idx ),ies1000_get_tick( idx ),ies1000_get_chan_idx( idx ),ies1000_get_adr( idx ),
  559. ies1000_get_comm_state_str( idx ),ies1000_get_dac_param_en( idx ),ies1000_get_bsytikchk_en( idx ),ies1000_get_bsytikchk_from_host( idx ),ies1000_is_bsytikchk_timeout( idx ),
  560. ies1000_get_dc_ovp( idx ),ies1000_get_dc_uvp( idx ),ies1000_get_dc_dfp( idx ),ies1000_get_env_otp( idx ),ies1000_get_reactor_otp( idx ),
  561. ies1000_get_igbt_otp( idx ),ies1000_get_runstat_str( idx ),ies1000_get_dcv( idx ),ies1000_get_dcc( idx ),ies1000_get_grid_freq( idx ),
  562. ies1000_get_gridv( idx ),ies1000_get_gridc( idx ),ies1000_get_ua( idx ),ies1000_get_ub( idx ),ies1000_get_uc( idx ),
  563. ies1000_get_ia( idx ),ies1000_get_ib( idx ),ies1000_get_ic( idx ),ies1000_get_ap( idx ),ies1000_get_dcp( idx ),
  564. ies1000_get_breaker_ac( idx ),ies1000_get_breaker_dc( idx ),ies1000_get_dcbuf_cont( idx ),ies1000_get_emg_btn( idx ),ies1000_get_temp_igbt_a( idx ),
  565. ies1000_get_temp_igbt_b( idx ),ies1000_get_temp_igbt_c( idx ),ies1000_get_temp_reactor( idx ),ies1000_get_temp_env( idx ),ies1000_get_errstat( idx ),
  566. faults[0],faults[1],faults[2],faults[3],faults[4],
  567. faults[5],warns[0],warns[1],warns[2],warns[3],
  568. warns[4],warns[5]);
  569. }