simatic_s7.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620
  1. #include "plt.h"
  2. int simatic_s7_nbr;
  3. struct simatic_s7_t simatic_s7[SIMATIC_S7_NBR_MAX + 1];
  4. static int simatic_s7_dbcb_0(void *para,int ncolumn,char ** columnvalue,char *columnname[])
  5. {
  6. int i;
  7. struct dbcbparam_t* pcbparam = (struct dbcbparam_t*)para;
  8. struct simatic_s7_t* dev = &simatic_s7[1];
  9. pcbparam->nrow++;
  10. log_dbg("%s, ++, row:%d, col:%d", __func__,pcbparam->nrow,ncolumn);
  11. for( i = 0; i < ncolumn; i++){
  12. if( strcmp("info",columnname[i]) == 0){
  13. strcpy(dev->szinfo,columnvalue[i]);
  14. }else if( strcmp("adr",columnname[i]) == 0){
  15. dev->comm.adr = atoi(columnvalue[i]);
  16. }else if( strcmp("chan_idx",columnname[i]) == 0){
  17. dev->comm.chanidx = atoi(columnvalue[i]);
  18. }
  19. }
  20. pcbparam->ret = 0;
  21. log_dbg("%s, --,ret:%d",__func__,pcbparam->ret);
  22. return 0;
  23. }
  24. int simatic_s7_get_dc_non_load_sw_stat( int idx )
  25. {
  26. return simatic_s7[idx].dc_non_load_sw_stat;
  27. }
  28. int simatic_s7_get_dc_main_fuse_stat( int idx )
  29. {
  30. return simatic_s7[idx].dc_main_fuse_stat;
  31. }
  32. int simatic_s7_get_dc_surge_arrester_stat( int idx )
  33. {
  34. return simatic_s7[idx].dc_surge_arrester_stat;
  35. }
  36. int simatic_s7_get_ac_main_sw_stat( int idx )
  37. {
  38. return simatic_s7[idx].ac_main_sw_stat;
  39. }
  40. int simatic_s7_get_power_supply_mcb_status( int idx )
  41. {
  42. return simatic_s7[idx].power_supply_mcb_status;
  43. }
  44. int simatic_s7_get_mcb_status( int idx )
  45. {
  46. return simatic_s7[idx].mcb_status;
  47. }
  48. int simatic_s7_get_power_supply_24v_stat( int idx )
  49. {
  50. return simatic_s7[idx].power_supply_24v_stat;
  51. }
  52. int simatic_s7_get_e_stop_btn_stat( int idx )
  53. {
  54. return simatic_s7[idx].e_stop_btn_stat;
  55. }
  56. int simatic_s7_get_reset_push_btn_stat( int idx )
  57. {
  58. return simatic_s7[idx].reset_push_btn_stat;
  59. }
  60. int simatic_s7_get_safety_relay_stat( int idx )
  61. {
  62. return simatic_s7[idx].safety_relay_stat;
  63. }
  64. int simatic_s7_get_ac_surge_arrester_stat( int idx )
  65. {
  66. return simatic_s7[idx].ac_surge_arrester_stat;
  67. }
  68. int simatic_s7_get_pcs_remote_trip_fb( int idx )
  69. {
  70. return simatic_s7[idx].pcs_remote_trip_fb;
  71. }
  72. int simatic_s7_get_bms_pwrspl_ctrl_rly( int idx )
  73. {
  74. return simatic_s7[idx].bms_pwrspl_ctrl_rly;
  75. }
  76. int simatic_s7_get_pcs_shutdown_ctrl_rly( int idx )
  77. {
  78. return simatic_s7[idx].pcs_shutdown_ctrl_rly;
  79. }
  80. int simatic_s7_get_safety_relay_shutdown_ctrl_rly( int idx )
  81. {
  82. return simatic_s7[idx].safety_relay_shutdown_ctrl_rly;
  83. }
  84. int simatic_s7_get_main_sw_trip_ctrl_rly( int idx )
  85. {
  86. return simatic_s7[idx].main_sw_trip_ctrl_rly;
  87. }
  88. int simatic_s7_get_safety_relay_reset_rly( int idx )
  89. {
  90. return simatic_s7[idx].safety_relay_reset_rly;
  91. }
  92. int simatic_s7_get_ems_pwrspl_reset_rly( int idx )
  93. {
  94. return simatic_s7[idx].ems_pwrspl_reset_rly;
  95. }
  96. int simatic_s7_get_fan_ctrl_rly1( int idx )
  97. {
  98. return simatic_s7[idx].fan_ctrl_rly1;
  99. }
  100. int simatic_s7_get_fan_ctrl_rly2( int idx )
  101. {
  102. return simatic_s7[idx].fan_ctrl_rly2;
  103. }
  104. int simatic_s7_get_door_stat( int idx, int door_idx )
  105. {
  106. return simatic_s7[idx].door_limit_sw_stat[door_idx];
  107. }
  108. int simatic_s7_get_fire_stat1_alarm( int idx )
  109. {
  110. return simatic_s7[idx].fire_stat1_alarm;
  111. }
  112. int simatic_s7_get_fire_stat2_alarm( int idx )
  113. {
  114. return simatic_s7[idx].fire_stat2_alarm;
  115. }
  116. int simatic_s7_get_fire_alarm( int idx )
  117. {
  118. return simatic_s7[idx].fire_alarm;
  119. }
  120. int simatic_s7_get_fire_fault( int idx )
  121. {
  122. return simatic_s7[idx].fire_fault;
  123. }
  124. int simatic_s7_get_gas_alarm1( int idx )
  125. {
  126. return simatic_s7[idx].gas_alarm1;
  127. }
  128. int simatic_s7_get_gas_alarm2( int idx )
  129. {
  130. return simatic_s7[idx].gas_alarm2;
  131. }
  132. int simatic_s7_get_transf_temp( int idx )
  133. {
  134. return simatic_s7[idx].transf_temp;
  135. }
  136. int simatic_s7_get_transf_temp_120_alarm( int idx )
  137. {
  138. return simatic_s7[idx].transf_temp_120_alarm;
  139. }
  140. int simatic_s7_get_transf_temp_130_alarm( int idx )
  141. {
  142. return simatic_s7[idx].transf_temp_130_alarm;
  143. }
  144. int simatic_s7_get_state( int idx )
  145. {
  146. return simatic_s7[idx].sm.state;
  147. }
  148. char* simatic_s7_get_state_str( int idx )
  149. {
  150. return simatic_s7[idx].sm.szState;
  151. }
  152. int simatic_s7_chk_state( int idx, int stat )
  153. {
  154. return simatic_s7_get_state(idx) == stat ? 0 : -1;
  155. }
  156. int simatic_s7_get_hb_from_dev(int idx)
  157. {
  158. return simatic_s7[idx].hb_from_dev;
  159. }
  160. char* simatic_s7_get_info_str(int idx)
  161. {
  162. return simatic_s7[idx].szinfo;
  163. }
  164. char* simatic_s7_get_model_str(int idx)
  165. {
  166. return simatic_s7[idx].szmodel;
  167. }
  168. int simatic_s7_get_chan_idx(int idx)
  169. {
  170. return simatic_s7[idx].comm.chanidx;
  171. }
  172. int simatic_s7_get_step(int idx)
  173. {
  174. struct statemachine_t* sm = &simatic_s7[idx].sm;
  175. return sm_get_step(sm);
  176. }
  177. int simatic_s7_get_tick(int idx)
  178. {
  179. return simatic_s7[idx].sm.tick;
  180. }
  181. int simatic_s7_get_comm_adr(int idx)
  182. {
  183. return simatic_s7[idx].comm.adr;
  184. }
  185. int simatic_s7_get_ems_reset_sig(int idx)
  186. {
  187. return simatic_s7[idx].ems_reset_sig;
  188. }
  189. int simatic_s7_get_ems_safety_relay_reset_sig(int idx)
  190. {
  191. return simatic_s7[idx].ems_safety_relay_reset_sig;
  192. }
  193. int simatic_s7_get_ems_pwrspl_reset_sig(int idx)
  194. {
  195. return simatic_s7[idx].ems_pwrspl_reset_sig;
  196. }
  197. int simatic_s7_get_ems_safety_relay_off_sig(int idx)
  198. {
  199. return simatic_s7[idx].ems_safety_relay_off_sig;
  200. }
  201. char* simatic_s7_get_comm_state_str(int idx)
  202. {
  203. struct statemachine_t* sm = &simatic_s7[idx].sm;
  204. return sm_get_szstate(sm);
  205. }
  206. static void* simatic_s7_thrd_main(void* param)
  207. {
  208. log_dbg("%s, ++",__func__);
  209. simatic_s7_sm_init(1);
  210. simatic_s7_comm_init(1);
  211. while( 1 ){
  212. simatic_s7_comm_dac(1);
  213. simatic_s7_sm( 1 );
  214. usleep(100000); // 100ms
  215. }
  216. log_dbg("%s, --",__func__);
  217. }
  218. static void* simatic_s7_thrd_aux(void* param)
  219. {
  220. struct simatic_s7_t* dev = &simatic_s7[1];
  221. struct comm_t* comm = &dev->comm;
  222. int emshb_timer = 0;
  223. log_dbg("%s, ++",__func__);
  224. while(1){
  225. usleep(100000); // 100ms
  226. if(emshb_timer++ >= 10){ // 1s
  227. emshb_timer = 0;
  228. dev->hb_to_dev++;
  229. if( comm_get_state(comm) == COMMST_NORMAL){
  230. simatic_s7_set_dev_emshb(1, dev->hb_to_dev);
  231. }else{
  232. usleep(100000); // 100ms
  233. }
  234. }
  235. }
  236. log_dbg("%s, --",__func__);
  237. }
  238. int simatic_s7_init()
  239. {
  240. pthread_t thrd;
  241. int ret = 0;
  242. int result;
  243. char *errmsg = NULL;
  244. char sql[1024];
  245. struct dbcbparam_t cbparam;
  246. sqlite3* db = NULL;
  247. struct simatic_s7_t* dev = &simatic_s7[1];
  248. log_dbg( "%s, ++",__func__);
  249. plt_lock_ctndb();
  250. db = plt_get_ctndb();
  251. sprintf(sql,"select * from simatic_s7");
  252. cbparam.nrow = 0;
  253. result = sqlite3_exec(db,sql, simatic_s7_dbcb_0,(void*)&cbparam,&errmsg);
  254. plt_unlock_ctndb();
  255. if( result != SQLITE_OK ){
  256. log_dbg("%s, result != SQLITE_OK, result:%d", __func__, result);
  257. ret = -1;
  258. }else if( cbparam.ret != 0){
  259. log_dbg("%s, cbparam.ret != 0, %d", __func__, cbparam.ret);
  260. ret = -2;
  261. }else if( cbparam.nrow != 1 ){
  262. log_dbg("%s, cbparam.nrow != 1, %d", __func__, cbparam.nrow);
  263. ret = -3;
  264. }else{
  265. simatic_s7_nbr = 1;
  266. if(pthread_create(&thrd, NULL, simatic_s7_thrd_main, NULL) != 0){
  267. log_dbg( "%s, create simatic_s7 thrd main fail", __func__);
  268. ret = -1;
  269. }else if(pthread_create(&thrd, NULL, simatic_s7_thrd_aux, NULL) != 0){
  270. log_dbg( "%s, create simatic_s7 thrd aux fail", __func__);
  271. ret = -2;
  272. }
  273. }
  274. log_dbg( "%s, --, ret:%d", __func__, ret);
  275. return ret;
  276. }
  277. int simatic_s7_send_sm_cmd( int idx, int val )
  278. {
  279. int ret = 0;
  280. struct simatic_s7_t* dev = &simatic_s7[idx];
  281. dev->cmd = val;
  282. leave:
  283. log_dbg("%s, idx:%d, cmd:%d, ret:%d",__func__, idx, val, ret);
  284. return ret;
  285. }
  286. int simatic_s7_get_cmd( int idx)
  287. {
  288. return simatic_s7[idx].cmd;
  289. }
  290. void simatic_s7_reset_cmd( int idx)
  291. {
  292. simatic_s7[idx].cmd = CMD_SM_DONE;
  293. }
  294. int simatic_s7_get_comm_st(int idx)
  295. {
  296. struct simatic_s7_t* dev = &simatic_s7[idx];
  297. struct comm_t* comm = &dev->comm;
  298. return comm_get_state(comm);
  299. }
  300. int simatic_s7_bms_ctrl_pwrup(int idx)
  301. {
  302. int ret = -1;
  303. log_dbg("%s, ++", __func__);
  304. if( 0 == simatic_s7_set_dev_40099(idx, 1)){
  305. if( 0 == simatic_s7_set_dev_ems_reset_signal(idx, 1)){
  306. sleep(2);
  307. if( 0 == simatic_s7_set_dev_ems_safety_relay_reset_signal(idx, 1)){
  308. ret = 0;
  309. }
  310. }
  311. }
  312. log_dbg("%s, --, ret:%d", __func__, ret);
  313. }
  314. int simatic_s7_bms_ctrl_pwrup_without_shielding_signal(int idx)
  315. {
  316. int ret = -1;
  317. log_dbg("%s, ++", __func__);
  318. if( 0 == simatic_s7_set_dev_ems_reset_signal(idx, 1)){
  319. sleep(2);
  320. if( 0 == simatic_s7_set_dev_ems_safety_relay_reset_signal(idx, 1)){
  321. ret = 0;
  322. }
  323. }
  324. log_dbg("%s, --, ret:%d", __func__, ret);
  325. }
  326. int simatic_s7_get_tool_data(int idx,char* buf)
  327. {
  328. struct simatic_s7_t* dev = &simatic_s7[idx];
  329. struct statemachine_t* sm = &dev->sm;
  330. struct comm_t* comm = &dev->comm;
  331. char temp_buf[1024];
  332. if(idx < 1 || idx > simatic_s7_nbr || buf == NULL){
  333. return -1;
  334. }
  335. sm_get_summary(sm, temp_buf, sizeof(temp_buf));
  336. sprintf(buf, " %s ", temp_buf);
  337. comm_get_summary(comm, temp_buf, sizeof(temp_buf));
  338. strcat(buf,temp_buf);
  339. strcat(buf,"\n");
  340. sprintf(temp_buf,"hb_from_dev:%05d hb_to_dev:%05d dc non-load sw:%d dc main fuse:%d dc surge arrester:%d ac main sw:%d pwrspl mcb:%d mcb:%d pwrspl 24v:%d e-stop btn:%d reset push btn:%d ",
  341. dev->hb_from_dev, dev->hb_to_dev,
  342. dev->dc_non_load_sw_stat, dev->dc_main_fuse_stat, dev->dc_surge_arrester_stat,
  343. dev->ac_main_sw_stat, dev->power_supply_mcb_status, dev->mcb_status, dev->power_supply_24v_stat,
  344. dev->e_stop_btn_stat, dev->reset_push_btn_stat);
  345. strcat(buf,temp_buf);
  346. sprintf(temp_buf,"safety relay:%d ac surge arrester:%d pcs remote trip fb:%d bms_pwrspl_rly:%d pcs_shutdown_rly:%d safety_relay_shutdown_rly:%d\n",
  347. dev->safety_relay_stat, dev->ac_surge_arrester_stat, dev->pcs_remote_trip_fb,
  348. dev->bms_pwrspl_ctrl_rly, dev->pcs_shutdown_ctrl_rly, dev->safety_relay_shutdown_ctrl_rly);
  349. strcat(buf,temp_buf);
  350. sprintf(temp_buf,"main_sw_trip_rly:%d safety_relay_reset_rly:%d ems_pwrspl_reset_rly:%d fan_ctrl_rly1|2:%d|%d ",
  351. dev->main_sw_trip_ctrl_rly, dev->safety_relay_reset_rly, dev->ems_pwrspl_reset_rly, dev->fan_ctrl_rly1, dev->fan_ctrl_rly2);
  352. strcat(buf,temp_buf);
  353. sprintf(temp_buf,"door1:%d door2:%d door3:%d door4:%d door5:%d door6:%d door7:%d door8:%d door9:%d ",
  354. dev->door_limit_sw_stat[1],dev->door_limit_sw_stat[2],dev->door_limit_sw_stat[3],dev->door_limit_sw_stat[4],dev->door_limit_sw_stat[5],
  355. dev->door_limit_sw_stat[6],dev->door_limit_sw_stat[7],dev->door_limit_sw_stat[8],dev->door_limit_sw_stat[9]);
  356. strcat(buf,temp_buf);
  357. sprintf(temp_buf,"fire stat1 alarm:%d fire stat2 alarm:%d fire alarm:%d fire fault:%d gas alarm1:%d gas alarm2:%d\n",
  358. dev->fire_stat1_alarm, dev->fire_stat2_alarm, dev->fire_alarm, dev->fire_fault, dev->gas_alarm1, dev->gas_alarm2);
  359. strcat(buf,temp_buf);
  360. sprintf(temp_buf,"transf_alarm_temp:%d,transf_err_temp:%d,transf_temp:%d 120_alarm:%d 130_alarm:%d ",
  361. dev->transf_alarm_temp,dev->transf_err_temp,dev->transf_temp, dev->transf_temp_120_alarm, dev->transf_temp_130_alarm);
  362. strcat(buf,temp_buf);
  363. sprintf(temp_buf,"ems reset sig:%d safety relay reset sig:%d power reset sig:%d safety relay off sig:%d\n",
  364. dev->ems_reset_sig, dev->ems_safety_relay_reset_sig, dev->ems_pwrspl_reset_sig, dev->ems_safety_relay_off_sig);
  365. strcat(buf,temp_buf);
  366. return 0;
  367. }
  368. int simatic_s7_get_tbmqtt_data(int idx,char* buf)
  369. {
  370. sprintf(buf, "'plc_dc_sw':%d,\
  371. 'plc_dc_main_fu':%d,\
  372. 'plc_dc_sa':%d,\
  373. 'plc_ac_sw':%d,\
  374. 'plc_pwrspl_mcb_stat':%d,\
  375. 'plc_mcb_stat':%d,\
  376. 'plc_pwrspl_24v_stat':%d,\
  377. 'plc_estop_btn':%d,\
  378. 'plc_rstpush_btn':%d,\
  379. 'plc_safety_rly_stat':%d,\
  380. 'plc_ac_sa_stat':%d,\
  381. 'plc_pcs_rmt_trip_fb':%d,\
  382. 'plc_bms_pwrspl_ctrl_rly':%d,\
  383. 'plc_pcs_shutdown_ctrl_rly':%d,\
  384. 'plc_safety_rly_shutdown_ctrl_rly':%d,\
  385. 'plc_main_sw_trip_ctrl_rly':%d,\
  386. 'plc_safety_rly_reset_rly':%d,\
  387. 'plc_ems_pwrspl_reset_rly':%d,\
  388. 'plc_fan_ctrl_rly1':%d,\
  389. 'plc_fan_ctrl_rly2':%d,\
  390. 'plc_door1':%d,\
  391. 'plc_door2':%d,\
  392. 'plc_door3':%d,\
  393. 'plc_door4':%d,\
  394. 'plc_door5':%d,\
  395. 'plc_door6':%d,\
  396. 'plc_door7':%d,\
  397. 'plc_door8':%d,\
  398. 'plc_door9':%d,\
  399. 'plc_fire_stat1_alarm':%d,\
  400. 'plc_fire_stat2_alarm':%d,\
  401. 'plc_fire_alarm':%d,\
  402. 'plc_fire_fault':%d,\
  403. 'plc_gas_alarm1':%d,\
  404. 'plc_gas_alarm2':%d,\
  405. 'plc_tf_temp':%d,\
  406. 'plc_tf_120_alarm':%d,\
  407. 'plc_tf_130_alarm':%d,\
  408. 'plc_state':'%s'",
  409. simatic_s7_get_dc_non_load_sw_stat( idx ),
  410. simatic_s7_get_dc_main_fuse_stat( idx ),
  411. simatic_s7_get_dc_surge_arrester_stat( idx ),
  412. simatic_s7_get_ac_main_sw_stat( idx ),
  413. simatic_s7_get_power_supply_mcb_status( idx ),
  414. simatic_s7_get_mcb_status( idx ),
  415. simatic_s7_get_power_supply_24v_stat( idx ),
  416. simatic_s7_get_e_stop_btn_stat( idx ),
  417. simatic_s7_get_reset_push_btn_stat( idx ),
  418. simatic_s7_get_safety_relay_stat( idx ),
  419. simatic_s7_get_ac_surge_arrester_stat( idx ),
  420. simatic_s7_get_pcs_remote_trip_fb( idx ),
  421. simatic_s7_get_bms_pwrspl_ctrl_rly( idx ),
  422. simatic_s7_get_pcs_shutdown_ctrl_rly( idx ),
  423. simatic_s7_get_safety_relay_shutdown_ctrl_rly( idx ),
  424. simatic_s7_get_main_sw_trip_ctrl_rly( idx ),
  425. simatic_s7_get_safety_relay_reset_rly( idx ),
  426. simatic_s7_get_ems_pwrspl_reset_rly( idx ),
  427. simatic_s7_get_fan_ctrl_rly1( idx ),
  428. simatic_s7_get_fan_ctrl_rly2( idx ),
  429. simatic_s7_get_door_stat( idx, 1),
  430. simatic_s7_get_door_stat( idx, 2),
  431. simatic_s7_get_door_stat( idx, 3),
  432. simatic_s7_get_door_stat( idx, 4),
  433. simatic_s7_get_door_stat( idx, 5),
  434. simatic_s7_get_door_stat( idx, 6),
  435. simatic_s7_get_door_stat( idx, 7),
  436. simatic_s7_get_door_stat( idx, 8),
  437. simatic_s7_get_door_stat( idx, 9),
  438. simatic_s7_get_fire_stat1_alarm( idx ),
  439. simatic_s7_get_fire_stat2_alarm( idx ),
  440. simatic_s7_get_fire_alarm( idx ),
  441. simatic_s7_get_fire_fault( idx ),
  442. simatic_s7_get_gas_alarm1( idx ),
  443. simatic_s7_get_gas_alarm2( idx ),
  444. simatic_s7_get_transf_temp( idx ),
  445. simatic_s7_get_transf_temp_120_alarm( idx ),
  446. simatic_s7_get_transf_temp_130_alarm( idx ),
  447. simatic_s7_get_state_str( idx ));
  448. }
  449. int simatic_s7_get_cloud_data(int ctn_idx,int idx,char* buf)
  450. {
  451. sprintf(buf, "'id':'plc_%d', 'plc_dc_sw':%d,\
  452. 'plc_dc_main_fu':%d,\
  453. 'plc_dc_sa':%d,\
  454. 'plc_ac_sw':%d,\
  455. 'plc_pwrspl_mcb_stat':%d,\
  456. 'plc_mcb_stat':%d,\
  457. 'plc_pwrspl_24v_stat':%d,\
  458. 'plc_estop_btn':%d,\
  459. 'plc_rstpush_btn':%d,\
  460. 'plc_safety_rly_stat':%d,\
  461. 'plc_ac_sa_stat':%d,\
  462. 'plc_pcs_rmt_trip_fb':%d,\
  463. 'plc_bms_pwrspl_ctrl_rly':%d,\
  464. 'plc_pcs_shutdown_ctrl_rly':%d,\
  465. 'plc_safety_rly_shutdown_ctrl_rly':%d,\
  466. 'plc_main_sw_trip_ctrl_rly':%d,\
  467. 'plc_safety_rly_reset_rly':%d,\
  468. 'plc_ems_pwrspl_reset_rly':%d,\
  469. 'plc_fan_ctrl_rly1':%d,\
  470. 'plc_fan_ctrl_rly2':%d,\
  471. 'plc_door1':%d,\
  472. 'plc_door2':%d,\
  473. 'plc_door3':%d,\
  474. 'plc_door4':%d,\
  475. 'plc_door5':%d,\
  476. 'plc_door6':%d,\
  477. 'plc_door7':%d,\
  478. 'plc_door8':%d,\
  479. 'plc_door9':%d,\
  480. 'plc_fire_stat1_alarm':%d,\
  481. 'plc_fire_stat2_alarm':%d,\
  482. 'plc_fire_alarm':%d,\
  483. 'plc_fire_fault':%d,\
  484. 'plc_gas_alarm1':%d,\
  485. 'plc_gas_alarm2':%d,\
  486. 'plc_tf_temp':%d,\
  487. 'plc_tf_120_alarm':%d,\
  488. 'plc_tf_130_alarm':%d,\
  489. 'plc_state':%d",
  490. idx, simatic_s7_get_dc_non_load_sw_stat( idx ),
  491. simatic_s7_get_dc_main_fuse_stat( idx ),
  492. simatic_s7_get_dc_surge_arrester_stat( idx ),
  493. simatic_s7_get_ac_main_sw_stat( idx ),
  494. simatic_s7_get_power_supply_mcb_status( idx ),
  495. simatic_s7_get_mcb_status( idx ),
  496. simatic_s7_get_power_supply_24v_stat( idx ),
  497. simatic_s7_get_e_stop_btn_stat( idx ),
  498. simatic_s7_get_reset_push_btn_stat( idx ),
  499. simatic_s7_get_safety_relay_stat( idx ),
  500. simatic_s7_get_ac_surge_arrester_stat( idx ),
  501. simatic_s7_get_pcs_remote_trip_fb( idx ),
  502. simatic_s7_get_bms_pwrspl_ctrl_rly( idx ),
  503. simatic_s7_get_pcs_shutdown_ctrl_rly( idx ),
  504. simatic_s7_get_safety_relay_shutdown_ctrl_rly( idx ),
  505. simatic_s7_get_main_sw_trip_ctrl_rly( idx ),
  506. simatic_s7_get_safety_relay_reset_rly( idx ),
  507. simatic_s7_get_ems_pwrspl_reset_rly( idx ),
  508. simatic_s7_get_fan_ctrl_rly1( idx ),
  509. simatic_s7_get_fan_ctrl_rly2( idx ),
  510. simatic_s7_get_door_stat( idx, 1),
  511. simatic_s7_get_door_stat( idx, 2),
  512. simatic_s7_get_door_stat( idx, 3),
  513. simatic_s7_get_door_stat( idx, 4),
  514. simatic_s7_get_door_stat( idx, 5),
  515. simatic_s7_get_door_stat( idx, 6),
  516. simatic_s7_get_door_stat( idx, 7),
  517. simatic_s7_get_door_stat( idx, 8),
  518. simatic_s7_get_door_stat( idx, 9),
  519. simatic_s7_get_fire_stat1_alarm( idx ),
  520. simatic_s7_get_fire_stat2_alarm( idx ),
  521. simatic_s7_get_fire_alarm( idx ),
  522. simatic_s7_get_fire_fault( idx ),
  523. simatic_s7_get_gas_alarm1( idx ),
  524. simatic_s7_get_gas_alarm2( idx ),
  525. simatic_s7_get_transf_temp( idx ),
  526. simatic_s7_get_transf_temp_120_alarm( idx ),
  527. simatic_s7_get_transf_temp_130_alarm( idx ),
  528. simatic_s7_get_state( idx ));
  529. }
  530. int simatic_s7_get_bkds_data(int idx,char* buf)
  531. {
  532. sprintf(buf,"\
  533. \"info\":\"%s\",\"model\":\"%s\",\"chan_idx\":%d,\"adr\":%d,\"state\":\"%s\",\
  534. \"tick\":%d,\"comm_state\":\"%s\",\"hb_from_dev\":%d,\"dc_non_load_sw\":%d,\"dc_main_fuse\":%d,\
  535. \"dc_surge_arrester\":%d,\"ac_main_sw\":%d,\"power_supply_mcb\":%d,\"mcb\":%d,\"power_supply_24v\":%d,\
  536. \"e_stop_btn\":%d,\"reset_push_btn\":%d,\"safety_relay\":%d,\"ac_surge_arrester\":%d,\"pcs_remote_trip_fb\":%d,\
  537. \"door1\":%d,\"door2\":%d,\"door3\":%d,\"door4\":%d,\"door5\":%d,\
  538. \"door6\":%d,\"door7\":%d,\"door8\":%d,\"door9\":%d,\"fire_alarm1\":%d,\
  539. \"fire_alarm2\":%d,\"fire_fault\":%d,\"gas_spray\":%d,\"bms_pwrspl_ctrl_rly\":%d,\"pcs_shutdown_ctrl_rly\":%d,\
  540. \"safety_relay_shutdown_ctrl_rly\":%d,\"main_sw_trip_ctrl_rly\":%d,\"safety_relay_reset_rly\":%d,\"ems_pwrspl_reset_rly\":%d,\"fan_ctrl_rly1\":%d,\
  541. \"fan_ctrl_rly2\":%d,\"transf_temp\":%d,\"transf_temp_120_alarm\":%d,\"transf_temp_130_alarm\":%d,\"ems_reset_sig\":%d,\
  542. \"ems_safety_relay_reset_sig\":%d,\"ems_pwrspl_reset_sig\":%d,\"ems_safety_relay_off_sig\":%d\
  543. ",
  544. simatic_s7_get_info_str( idx ),"simatic_s7",simatic_s7_get_chan_idx( idx ),simatic_s7_get_comm_adr( idx ),simatic_s7_get_state_str( idx ),
  545. simatic_s7_get_tick( idx ),simatic_s7_get_comm_state_str( idx ),simatic_s7_get_hb_from_dev( idx ),simatic_s7_get_dc_non_load_sw_stat( idx ),simatic_s7_get_dc_main_fuse_stat( idx ),
  546. simatic_s7_get_dc_surge_arrester_stat( idx ),simatic_s7_get_ac_main_sw_stat( idx ),simatic_s7_get_power_supply_mcb_status( idx ),simatic_s7_get_mcb_status( idx ),simatic_s7_get_power_supply_24v_stat( idx ),
  547. simatic_s7_get_e_stop_btn_stat( idx ),simatic_s7_get_reset_push_btn_stat( idx ),simatic_s7_get_safety_relay_reset_rly( idx ),simatic_s7_get_ac_surge_arrester_stat( idx ),simatic_s7_get_pcs_remote_trip_fb( idx ),
  548. simatic_s7_get_door_stat( idx , 1 ),simatic_s7_get_door_stat( idx , 2 ),simatic_s7_get_door_stat( idx , 3 ),simatic_s7_get_door_stat( idx , 4 ),simatic_s7_get_door_stat( idx , 5 ),
  549. simatic_s7_get_door_stat( idx , 6 ),simatic_s7_get_door_stat( idx , 7 ),simatic_s7_get_door_stat( idx , 8 ),simatic_s7_get_door_stat( idx , 9 ),simatic_s7_get_fire_stat1_alarm( idx ),
  550. simatic_s7_get_fire_stat2_alarm( idx ),simatic_s7_get_fire_fault( idx ),simatic_s7_get_gas_alarm1( idx ),simatic_s7_get_bms_pwrspl_ctrl_rly( idx ),simatic_s7_get_pcs_shutdown_ctrl_rly( idx ),
  551. simatic_s7_get_safety_relay_reset_rly( idx ),simatic_s7_get_main_sw_trip_ctrl_rly( idx ),simatic_s7_get_safety_relay_reset_rly( idx ),simatic_s7_get_ems_pwrspl_reset_rly( idx ),simatic_s7_get_fan_ctrl_rly1( idx ),
  552. simatic_s7_get_fan_ctrl_rly2( idx ),simatic_s7_get_transf_temp( idx ),simatic_s7_get_transf_temp_120_alarm( idx ),simatic_s7_get_transf_temp_130_alarm( idx ),simatic_s7_get_ems_reset_sig( idx ),
  553. simatic_s7_get_ems_safety_relay_reset_sig( idx ),simatic_s7_get_ems_pwrspl_reset_sig( idx ),simatic_s7_get_ems_safety_relay_off_sig( idx )
  554. );
  555. }