pws1.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594
  1. #include "plt.h"
  2. struct pws1_t pws1[PWS1_NBR_MAX + 1];
  3. int pws1_reset_bsytikchk(int idx)
  4. {
  5. pws1[idx].bsytik.timer = 0;
  6. pws1[idx].bsytik.timeout = 0;
  7. pws1[idx].bsytik.chkcnt = 0;
  8. return 0;
  9. }
  10. // 0 : not timeout
  11. // 1 : timeout
  12. int pws1_is_bsytikchk_timeout(int idx)
  13. {
  14. struct pws1_t* dev = &pws1[1];
  15. if( dev->bsytik.chken == 1 ){
  16. return pws1[idx].bsytik.timeout;
  17. }else{
  18. return 0;
  19. }
  20. }
  21. int pws1_set_bsytik(int idx)
  22. {
  23. pws1[idx].bsytik.from_host++;
  24. return 0;
  25. }
  26. int pws1_get_bsytikchk_from_host(int idx)
  27. {
  28. pws1[idx].bsytik.from_host++;
  29. return 0;
  30. }
  31. int pws1_get_bsytikchk_en(int idx)
  32. {
  33. return pws1[idx].bsytik.chken;
  34. }
  35. int pws1_set_bsytikchk_en(int idx, int val)
  36. {
  37. pws1[idx].bsytik.chken = val;
  38. return 0;
  39. }
  40. int pws1_set_dac_param_en(int idx, int val)
  41. {
  42. struct pws1_t* dev = &pws1[1];
  43. struct comm_t* comm = &dev->comm;
  44. comm_set_dac_param_en(comm, val);
  45. return 0;
  46. }
  47. static int pws1_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 pws1_t* dev = &pws1[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 pws1_get_cmd( int idx )
  68. {
  69. return pws1[idx].cmd;
  70. }
  71. int pws1_get_comm_st(int idx)
  72. {
  73. struct pws1_t* dev = &pws1[idx];
  74. struct comm_t* comm = &dev->comm;
  75. return comm_get_state(comm);
  76. }
  77. void pws1_reset_cmd(int idx)
  78. {
  79. pws1[idx].cmd = CMD_SM_DONE;
  80. }
  81. int pws1_get_state( int idx )
  82. {
  83. return pws1[idx].sm.state;
  84. }
  85. char* pws1_get_state_str( int idx )
  86. {
  87. return pws1[idx].sm.szState;
  88. }
  89. int pws1_get_step( int idx )
  90. {
  91. return pws1[idx].sm.step;
  92. }
  93. int pws1_get_tick( int idx )
  94. {
  95. return pws1[idx].sm.tick;
  96. }
  97. double pws1_get_tick_ave( int idx )
  98. {
  99. return pws1[idx].sm.timing_ave;
  100. }
  101. double pws1_get_tick_cur( int idx )
  102. {
  103. return pws1[idx].sm.timing_cur;
  104. }
  105. double pws1_get_tick_max( int idx )
  106. {
  107. return pws1[idx].sm.timing_max;
  108. }
  109. char* pws1_get_err_str( int idx )
  110. {
  111. return pws1[idx].sm.szerr;
  112. }
  113. int pws1_chk_state( int idx, int stat )
  114. {
  115. return pws1_get_state(idx) == stat ? 0 : -1;
  116. }
  117. int pws1_get_ap( int idx )
  118. {
  119. return pws1[idx].pow.ap;
  120. }
  121. int pws1_get_dcp( int idx )
  122. {
  123. return (int)pws1[idx].Pdc;
  124. }
  125. int pws1_get_dev_aps( int idx )
  126. {
  127. return (int)pws1[idx].active_p_set;
  128. }
  129. int pws1_get_dcv( int idx )
  130. {
  131. return (int)pws1[idx].Udc;
  132. }
  133. int pws1_get_dcc( int idx )
  134. {
  135. return (int)pws1[idx].Idc;
  136. }
  137. int pws1_get_errstat( int idx )
  138. {
  139. return pws1[idx].errstatus;
  140. }
  141. double pws1_get_grid_freq( int idx )
  142. {
  143. return pws1[idx].grid_freq;
  144. }
  145. double pws1_get_uab( int idx )
  146. {
  147. return pws1[idx].Uab;
  148. }
  149. double pws1_get_ubc( int idx )
  150. {
  151. return pws1[idx].Ubc;
  152. }
  153. double pws1_get_uca( int idx )
  154. {
  155. return pws1[idx].Uca;
  156. }
  157. double pws1_get_ia( int idx )
  158. {
  159. return pws1[idx].Ia;
  160. }
  161. double pws1_get_ib( int idx )
  162. {
  163. return pws1[idx].Ib;
  164. }
  165. double pws1_get_ic( int idx )
  166. {
  167. return pws1[idx].Ic;
  168. }
  169. static void pws1_update(int idx)
  170. {
  171. struct pws1_t* dev = &pws1[idx];
  172. dev->pow.ap = (int)(-dev->Ps);
  173. }
  174. static void* pws1_thrd_main(void* param)
  175. {
  176. int idx = 1;
  177. struct pws1_t* dev = &pws1[idx];
  178. log_dbg("%s, idx:%d, ++",__func__, idx);
  179. pws1_set_bsytikchk_en(idx, 1);
  180. pws1_sm_init(1);
  181. pws1_comm_init(1);
  182. while(1){
  183. pws1_comm_dac(1);
  184. pws1_sm(1);
  185. pws1_update(1);
  186. usleep(10000); /* 10ms */
  187. }
  188. log_dbg("%s, --",__func__);
  189. }
  190. static void* pws1_thrd_aux(void* param)
  191. {
  192. int idx = 1;
  193. struct pws1_t* dev = &pws1[idx];
  194. struct statemachine_t* sm = &dev->sm;
  195. log_dbg("%s, ++",__func__);
  196. while(1){
  197. if( dev->bsytik.timer++ >= 10 ){ // chk every 1 second
  198. dev->bsytik.timer = 0;
  199. if( dev->bsytik.last_from_host != dev->bsytik.from_host ){ // refresh
  200. dev->bsytik.last_from_host = dev->bsytik.from_host;
  201. dev->bsytik.chkcnt = 0;
  202. }else{ // counting
  203. if( dev->bsytik.chkcnt++ >= 5){ // 5s
  204. dev->bsytik.timeout = 1;
  205. dev->bsytik.chkcnt = 0;
  206. }
  207. }
  208. }
  209. usleep(100000); /* 100ms */
  210. }
  211. log_dbg("%s, --",__func__);
  212. }
  213. int pws1_init()
  214. {
  215. pthread_t thrd;
  216. int ret = 0;
  217. int result;
  218. char *errmsg = NULL;
  219. char sql[1024];
  220. struct dbcbparam_t cbparam;
  221. sqlite3* db = NULL;
  222. struct pws1_t* dev = &pws1[1];
  223. log_dbg( "%s, ++",__func__);
  224. plt_lock_ctndb();
  225. db = plt_get_ctndb();
  226. sprintf(sql,"select * from pws1");
  227. cbparam.nrow = 0;
  228. result = sqlite3_exec(db,sql, pws1_dbcb_0,(void*)&cbparam,&errmsg);
  229. plt_unlock_ctndb();
  230. if( result != SQLITE_OK ){
  231. log_dbg("%s, result != SQLITE_OK, result:%d", __func__, result);
  232. ret = -1;
  233. }else if( cbparam.ret != 0){
  234. log_dbg("%s, cbparam.ret != 0, %d", __func__, cbparam.ret);
  235. ret = -2;
  236. }else if( cbparam.nrow != 1 ){
  237. log_dbg("%s, cbparam.nrow != 1, %d", __func__, cbparam.nrow);
  238. ret = -3;
  239. }else{
  240. if(pthread_create(&thrd, NULL, pws1_thrd_main, NULL) != 0){
  241. log_dbg( "%s, create pws1 thrd main fail", __func__);
  242. ret = -1;
  243. }else if(pthread_create(&thrd, NULL, pws1_thrd_aux, NULL) != 0){
  244. log_dbg( "%s, create pws1 thrd aux fail", __func__);
  245. ret = -1;
  246. }
  247. }
  248. log_dbg( "%s, --, ret:%d", __func__, ret);
  249. return ret;
  250. }
  251. int pws1_send_sm_cmd( int idx, int val )
  252. {
  253. int ret = 0;
  254. struct pws1_t* dev = &pws1[idx];
  255. dev->cmd = val;
  256. log_dbg("%s, idx:%d, cmd:%d, ret:%d",__func__, idx, val, ret);
  257. return ret;
  258. }
  259. int pws1_get_runmod( int idx )
  260. {
  261. return pws1[idx].grid_mode;
  262. }
  263. int pws1_get_runstat( int idx )
  264. {
  265. return pws1[idx].runState;
  266. }
  267. int pws1_get_dispatch_mode( int idx)
  268. {
  269. return pws1[idx].energy_dispatching_mode;
  270. }
  271. int pws1_get_dhg_state( int idx)
  272. {
  273. return pws1[idx].status13.bits_val.string1_dhg;
  274. }
  275. int pws1_get_chg_state( int idx)
  276. {
  277. return pws1[idx].status13.bits_val.string1_chg;
  278. }
  279. int pws1_get_active_power_control_mode( int idx)
  280. {
  281. return pws1[idx].active_power_control_mode;
  282. }
  283. // char* pws1_get_runstat_str( int idx )
  284. // {
  285. // return pws1[idx].szrunstatus;
  286. // }
  287. int pws1_set_aps(int idx, int aps)
  288. {
  289. struct pws1_t* dev = &pws1[idx];
  290. int ret = 0;
  291. dev->pow.last_aps = dev->pow.aps;
  292. dev->pow.aps = aps;
  293. log_dbg( "%s, idx:%d, aps:%d, last_aps:%d", __func__, idx, dev->pow.aps, dev->pow.last_aps);
  294. return ret;
  295. }
  296. int pws1_reset_aps(int idx)
  297. {
  298. struct pws1_t* dev = &pws1[idx];
  299. int ret = 0;
  300. dev->pow.last_aps = 0;
  301. dev->pow.aps = 0;
  302. //log_dbg( "%s, idx:%d, val:%d, ret:%d", __func__, idx, aps, ret);
  303. return ret;
  304. }
  305. int pws1_get_aps(int idx)
  306. {
  307. return pws1[idx].pow.aps;
  308. }
  309. int pws1_get_last_aps(int idx)
  310. {
  311. return pws1[idx].pow.last_aps;
  312. }
  313. int pws1_is_aps_changed(int idx)
  314. {
  315. return (pws1[idx].pow.aps != pws1[idx].pow.last_aps)?1:0;
  316. }
  317. int pws1_get_chan_idx(int idx)
  318. {
  319. return pws1[idx].comm.chanidx;
  320. }
  321. int pws1_get_adr(int idx)
  322. {
  323. return pws1[idx].comm.adr;
  324. }
  325. char* pws1_get_comm_state_str(int idx)
  326. {
  327. return pws1[idx].comm.szState;
  328. }
  329. double pws1_get_dac_ave(int idx)
  330. {
  331. return pws1[idx].comm.dac.timing_ave;
  332. }
  333. double pws1_get_dac_cur(int idx)
  334. {
  335. return pws1[idx].comm.dac.timing_cur;
  336. }
  337. double pws1_get_dac_max(int idx)
  338. {
  339. return pws1[idx].comm.dac.timing_max;
  340. }
  341. // unsigned short* pws1_get_faults(int idx)
  342. // {
  343. // return pws1[idx].faults;
  344. // }
  345. // unsigned short* pws1_get_warns(int idx)
  346. // {
  347. // return pws1[idx].warns;
  348. // }
  349. int pws1_get_dac_param_en(int idx)
  350. {
  351. return pws1[idx].comm.dac.param_en;
  352. }
  353. char* pws1_get_info_str(int idx)
  354. {
  355. return pws1[idx].szinfo;
  356. }
  357. struct pws1_t* pws1_get_all_data_ptr()
  358. {
  359. return &pws1[1];
  360. }
  361. int pws1_get_tool_data(int idx,char* buf)
  362. {
  363. if(idx < 1 || idx > PWS1_NBR_MAX || buf == NULL){
  364. return -1;
  365. }
  366. struct pws1_t* dev = &pws1[idx];
  367. struct statemachine_t* sm = &dev->sm;
  368. struct comm_t* comm = &dev->comm;
  369. char temp_buf[8192];
  370. int i = 0;
  371. sm_get_summary(sm, temp_buf, sizeof(temp_buf));
  372. sprintf(buf,"%s ", temp_buf);
  373. comm_get_summary(comm, temp_buf, sizeof(temp_buf));
  374. strcat(buf, temp_buf);
  375. sprintf(temp_buf,"bsytik_from_host:%03d timeout:%d en:%d\n",dev->bsytik.from_host, dev->bsytik.timeout, dev->bsytik.chken);
  376. strcat(buf, temp_buf);
  377. sprintf(temp_buf,"runState:"L_GREEN"%s"NONE" runMode:"L_GREEN"%s"NONE" P:"L_GREEN"%.1f"NONE" Ps:"L_GREEN"%.1f"NONE" \
  378. DCbrokerState:%s \
  379. grid_freq:%.1f,Uab:%.3f,Ubc:%.3f,Uca:%.3f,\
  380. Ia:%.3f,Ib:%.3f,Ic:%.3f,\
  381. Udc:%.1f,Idc:%.1f,Pdc:%.3f,\
  382. chg:%d,dhg:%d,t_chg:%d,t_dhg:%d,\
  383. module_temp:%.1f,ambient_temp:%.1f,cmd_src:%s\n",
  384. dev->szrunState,dev->szrunMode,dev->Ps,dev->active_p_set,
  385. dev->szDCbrokerState,
  386. dev->grid_freq,dev->Uab,dev->Ubc,dev->Uca,
  387. dev->Ia,dev->Ib,dev->Ic,
  388. dev->Udc,dev->Idc,dev->Pdc,
  389. dev->chg_daily_energy_ac,dev->dhg_daily_energy_ac,dev->chg_accu_energy_ac,dev->dhg_accu_energy_ac,
  390. dev->module_temp,dev->ambient_temp,dev->szcmdSrc);
  391. strcat(buf, temp_buf);
  392. sprintf(temp_buf,"dispatchMode:%s,acControMode:%s,startupMode:%s,PowerChangeMode:%s\
  393. offgrid_v_r:%.2f,offgrid_f_r:%.2f,\
  394. %4d-%2d-%2d %2d:%2d:%2d\n",
  395. dev->szEnergy_dispatching_mode,dev->szActive_power_control_mode,dev->szStart_up_mode,dev->szPower_change_mode,
  396. dev->offgrid_ac_voltage_regulation,dev->offgrid_ac_freq_regulation,
  397. dev->year,dev->month,dev->day,dev->hour,dev->minute,dev->second);
  398. strcat(buf, temp_buf);
  399. sprintf(temp_buf,"status:0x%04x,0x%04x,0x%04x,0x%04x,0x%04x,\
  400. 0x%04x,0x%04x,0x%04x,0x%04x,0x%04x,\
  401. 0x%04x,0x%04x,0x%04x\n",
  402. dev->status0.value,dev->status1.value,dev->status2.value,dev->status3.value,dev->status4.value,
  403. dev->status9.value,dev->status10.value,dev->status11.value,dev->status13.value,dev->status25.value,
  404. dev->status27.value,dev->status29.value,dev->status31.value);
  405. strcat(buf, temp_buf);
  406. }
  407. int pws1_get_tbmqtt_main_data(int idx,char* buf)
  408. {
  409. if(idx < 1 || idx > PWS1_NBR_MAX || buf == NULL){
  410. return -1;
  411. }
  412. struct pws1_t* dev = &pws1[idx];
  413. sprintf(buf, "'pcs_runstat':'%s','pcs_ap':%.1f'pcs_dcv':%.1f, 'pcs_dcc':%.1f,\
  414. 'pcs_dc_brk':%d,'pcs_errstat':%d,'pcs_state':'%s'",
  415. dev->szrunState,dev->Ps,dev->Udc,dev->Idc,
  416. dev->DCbrokerState,dev->errstatus,dev->sm.szState);
  417. }
  418. //
  419. int pws1_get_tbmqtt_secondy_data(int idx,char* buf)
  420. {
  421. if(idx < 1 || idx > PWS1_NBR_MAX || buf == NULL){
  422. return -1;
  423. }
  424. struct pws1_t* dev = &pws1[idx];
  425. sprintf(buf, "'pcs_uab':%.1f, 'pcs_ubc':%.1f, 'pcs_uca':%.1f,\
  426. 'pcs_ia':%.1f, 'pcs_ib':%.1f, 'pcs_ic':%.1f,\
  427. 'pcs_module_temp':%.1f,'pcs_ambient_temp':%.1f",
  428. dev->Uab,dev->Ubc,dev->Uca,
  429. dev->Ia,dev->Ib,dev->Ic,
  430. dev->module_temp,dev->ambient_temp);
  431. }
  432. int pws1_get_cloud_main_data(int cnt_idx,int idx,char* buf)
  433. {
  434. if(idx < 1 || idx > PWS1_NBR_MAX || buf == NULL){
  435. return -1;
  436. }
  437. struct pws1_t* dev = &pws1[idx];
  438. sprintf(buf, "'ctn%d_pcs_state':%d, 'ctn%d_pcs_runstat':%d, 'ctn%d_pcs_dcv':%d, 'ctn%d_pcs_dcc':%d, \
  439. 'ctn%d_pcs_dc_brk':%d, 'ctn%d_pcs_errstat':%d, 'ctn%d_pcs_gf':%.1f, 'ctn%d_pcs_ap':%d",
  440. cnt_idx, pws1_get_state( idx ),
  441. cnt_idx, pws1_get_runstat( idx ),
  442. cnt_idx, pws1_get_dcv( idx ),
  443. cnt_idx, pws1_get_dcc( idx ),
  444. cnt_idx, dev->DCbrokerState,
  445. cnt_idx, pws1_get_errstat( idx ),
  446. cnt_idx, pws1_get_grid_freq( idx ),
  447. cnt_idx, pws1_get_ap( idx ));
  448. }
  449. int pws1_get_cloud_secondy_data(int cnt_idx,int idx,char* buf)
  450. {
  451. if(idx < 1 || idx > PWS1_NBR_MAX || buf == NULL){
  452. return -1;
  453. }
  454. struct pws1_t* dev = &pws1[idx];
  455. sprintf(buf, "'ctn%d_pcs_uab':%.1f, 'ctn%d_pcs_ubc':%.1f, 'ctn%d_pcs_uca':%.1f,\
  456. 'ctn%d_pcs_ia':%.1f, 'ctn%d_pcs_ib':%.1f, 'ctn%d_pcs_ic':%.1f,'ctn%d_pcs_gf':%.1f,\
  457. 'ctn%d_pcs_module_temp':%.1f, 'ctn%d_pcs_ambient_temp':%.1f",
  458. cnt_idx, pws1_get_uab( idx ),
  459. cnt_idx, pws1_get_ubc( idx ),
  460. cnt_idx, pws1_get_uca( idx ),
  461. cnt_idx, pws1_get_ia( idx ),
  462. cnt_idx, pws1_get_ib( idx ),
  463. cnt_idx, pws1_get_ic( idx ),
  464. cnt_idx, pws1_get_grid_freq( idx ),
  465. cnt_idx, dev->module_temp,
  466. cnt_idx, dev->ambient_temp);
  467. }
  468. int pws1_get_bkds_data(int idx,char* buf)
  469. {
  470. // if(idx < 1 || idx > PWS1_NBR_MAX || buf == NULL){
  471. // return -1;
  472. // }
  473. // struct pws1_t* dev = &pws1[idx];
  474. // sprintf(buf,"\
  475. // \"model\":\"%s\",\"info\":\"%s\",\"state\":\"%s\",\"step\":%d,\"err\":\"%s\",\
  476. // \"ap\":%d,\"aps\":%d,\"tick\":%d,\"chan_idx\":%d,\"adr\":%d,\
  477. // \"comm_state\":\"%s\",\"dac_param_en\":%d,\"bsytikchk_en\":%d,\"bsytikchk_from_host\":%d,\"bsytikchk_timeout\":%d,\
  478. // \"dc_ovp\":%d,\"dc_uvp\":%d,\"dc_dfp\":%d,\"env_otp\":%d,\"reactor_otp\":%d,\
  479. // \"igbt_otp\":%d,\"run_state\":\"%s\",\"dc_v\":%d,\"dc_c\":%d,\"grid_freq\":%.1f,\
  480. // \"grid_v\":%.1f,\"grid_c\":%.1f,\"ua\":%.1f,\"ub\":%.1f,\"uc\":%.1f,\
  481. // \"ia\":%.1f,\"ib\":%.1f,\"ic\":%.1f,\"ap\":%d,\"dc_p\":%d,\
  482. // \"breaker_ac\":%d,\"breaker_dc\":%d,\"dcbuf_cont\":%d,\"emg_btn\":%d,\"igbt_a_temp\":%d,\
  483. // \"igbt_b_temp\":%d,\"igbt_c_temp\":%d,\"reactor_temp\":%d,\"env_temp\":%d,\"err_status\":%d,\
  484. // \"fault1\":\"0x%0x\",\"fault2\":\"0x%0x\",\"fault3\":\"0x%0x\",\"fault4\":\"0x%0x\",\"fault5\":\"0x%0x\",\
  485. // \"fault6\":\"0x%0x\",\"warn1\":\"0x%0x\",\"warn2\":\"0x%0x\",\"warn3\":\"0x%0x\",\"warn4\":\"0x%0x\",\
  486. // \"warn5\":\"0x%0x\",\"warn6\":\"0x%0x\"\
  487. // ","pws1","pcs",pws1_get_state_str( idx ),pws1_get_step( idx ),pws1_get_err_str( idx ),
  488. // pws1_get_ap( idx ),pws1_get_aps( idx ),pws1_get_tick( idx ),pws1_get_chan_idx( idx ),pws1_get_adr( idx ),
  489. // pws1_get_comm_state_str( idx ),pws1_get_dac_param_en( idx ),pws1_get_bsytikchk_en( idx ),pws1_get_bsytikchk_from_host( idx ),pws1_is_bsytikchk_timeout( idx ),
  490. // pws1_get_dc_ovp( idx ),pws1_get_dc_uvp( idx ),pws1_get_dc_dfp( idx ),pws1_get_env_otp( idx ),pws1_get_reactor_otp( idx ),
  491. // pws1_get_igbt_otp( idx ),pws1_get_runstat_str( idx ),pws1_get_dcv( idx ),pws1_get_dcc( idx ),pws1_get_grid_freq( idx ),
  492. // pws1_get_gridv( idx ),pws1_get_gridc( idx ),pws1_get_ua( idx ),pws1_get_ub( idx ),pws1_get_uc( idx ),
  493. // pws1_get_ia( idx ),pws1_get_ib( idx ),pws1_get_ic( idx ),pws1_get_ap( idx ),pws1_get_dcp( idx ),
  494. // pws1_get_breaker_ac( idx ),pws1_get_breaker_dc( idx ),pws1_get_dcbuf_cont( idx ),pws1_get_emg_btn( idx ),pws1_get_temp_igbt_a( idx ),
  495. // pws1_get_temp_igbt_b( idx ),pws1_get_temp_igbt_c( idx ),pws1_get_temp_reactor( idx ),pws1_get_temp_env( idx ),pws1_get_errstat( idx ),
  496. // faults[0],faults[1],faults[2],faults[3],faults[4],
  497. // faults[5],warns[0],warns[1],warns[2],warns[3],
  498. // warns[4],warns[5]);
  499. }