mc90hdnc1a.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453
  1. #include "plt.h"
  2. int mc90hdnc1a_nbr;
  3. struct mc90hdnc1a_t mc90hdnc1a[MC90HDNC1A_NBR_MAX + 1];
  4. int mc90hdnc1a_send_sm_cmd( int idx, int cmd )
  5. {
  6. int ret = 0;
  7. struct mc90hdnc1a_t* dev = &mc90hdnc1a[idx];
  8. dev->cmd = cmd;
  9. log_dbg("%s, idx:%d, cmd:%d, ret:%d", __func__, idx, cmd, ret);
  10. return ret;
  11. }
  12. int mc90hdnc1a_send_sm_cmd_all( int cmd )
  13. {
  14. int ret = 0;
  15. int idx;
  16. struct mc90hdnc1a_t* dev = NULL;
  17. for( idx = 1; idx <= mc90hdnc1a_nbr; idx++ ){
  18. mc90hdnc1a_send_sm_cmd( idx, cmd );
  19. }
  20. return ret;
  21. }
  22. int mc90hdnc1a_chk_state_all( int stat)
  23. {
  24. int idx;
  25. for( idx = 1; idx <= mc90hdnc1a_nbr; idx++){
  26. if( mc90hdnc1a_get_state(idx) != stat){
  27. return -1;
  28. }
  29. }
  30. return 0;
  31. }
  32. int mc90hdnc1a_get_cmd( int idx )
  33. {
  34. return mc90hdnc1a[idx].cmd;
  35. }
  36. void mc90hdnc1a_reset_cmd(int idx)
  37. {
  38. mc90hdnc1a[idx].cmd = CMD_SM_DONE;
  39. }
  40. int mc90hdnc1a_get_state( int idx )
  41. {
  42. return mc90hdnc1a[idx].sm.state;
  43. }
  44. static void* mc90hdnc1a_thrd_main(void* param)
  45. {
  46. struct mc90hdnc1a_t* dev = NULL;
  47. int idx;
  48. log_dbg("%s, ++",__func__);
  49. for( idx = 1; idx <= mc90hdnc1a_nbr; idx++ ){
  50. mc90hdnc1a_sm_init(idx);
  51. mc90hdnc1a_comm_init(idx);
  52. }
  53. while(1){
  54. for( idx = 1; idx <= mc90hdnc1a_nbr; idx++ ){
  55. mc90hdnc1a_comm_dac(idx);
  56. mc90hdnc1a_sm(idx);
  57. usleep(100000); /* 100ms */
  58. }
  59. }
  60. log_dbg("%s, --, idx:%d",__func__,idx);
  61. }
  62. static int mc90hdnc1a_dbcb(void *para,int ncolumn,char ** columnvalue,char *columnname[])
  63. {
  64. int i;
  65. struct dbcbparam_t* pcbparam = (struct dbcbparam_t*)para;
  66. struct mc90hdnc1a_t* pdev;
  67. int idx = 0;
  68. pcbparam->nrow++;
  69. log_dbg("%s, ++, row:%d, col:%d",__func__,pcbparam->nrow,ncolumn);
  70. pdev = &mc90hdnc1a[pcbparam->nrow];
  71. for( i = 0; i < ncolumn; i++){
  72. if( strcmp("chan_idx",columnname[i]) == 0){
  73. pdev->comm.chanidx = atoi(columnvalue[i]);
  74. }else if( strcmp("info",columnname[i]) == 0){
  75. strcpy(pdev->szinfo, columnvalue[i]);
  76. }else if( strcmp("adr",columnname[i]) == 0){
  77. pdev->comm.adr = atoi(columnvalue[i]);
  78. }
  79. }
  80. pcbparam->ret = 0;
  81. log_dbg("%s, --,ret:%d",__func__,pcbparam->ret);
  82. return 0;
  83. }
  84. int mc90hdnc1a_set_workstat(int idx, int stat)
  85. {
  86. struct mc90hdnc1a_t* dev = &mc90hdnc1a[idx];
  87. dev->dev_work_stat = stat;
  88. if( stat == 1 ){
  89. strcpy(dev->szdev_work_stat, "idle");
  90. }else if( stat == 2 ){
  91. strcpy(dev->szdev_work_stat, "run");
  92. }else if( stat == 3 ){
  93. strcpy(dev->szdev_work_stat, "err");
  94. }
  95. return 0;
  96. }
  97. int mc90hdnc1a_get_workstat(int idx)
  98. {
  99. return mc90hdnc1a[idx].dev_work_stat;
  100. }
  101. char* mc90hdnc1a_get_workstat_str(int idx)
  102. {
  103. return mc90hdnc1a[idx].szdev_work_stat;
  104. }
  105. int mc90hdnc1a_set_infan_stat(int idx, int stat)
  106. {
  107. struct mc90hdnc1a_t* dev = &mc90hdnc1a[idx];
  108. dev->in_fan_stat = stat;
  109. if( stat == 1 ){
  110. strcpy(dev->szinfan_stat, "idle");
  111. }else if( stat == 2 ){
  112. strcpy(dev->szinfan_stat, "run");
  113. }else if( stat == 3 ){
  114. strcpy(dev->szinfan_stat, "err");
  115. }
  116. return 0;
  117. }
  118. int mc90hdnc1a_get_infan_stat(int idx)
  119. {
  120. return mc90hdnc1a[idx].in_fan_stat;
  121. }
  122. char* mc90hdnc1a_get_infan_stat_str(int idx)
  123. {
  124. return mc90hdnc1a[idx].szinfan_stat;
  125. }
  126. int mc90hdnc1a_set_outfan_stat(int idx, int stat)
  127. {
  128. struct mc90hdnc1a_t* dev = &mc90hdnc1a[idx];
  129. dev->out_fan_stat = stat;
  130. if( stat == 1 ){
  131. strcpy(dev->szoutfan_stat, "idle");
  132. }else if( stat == 2 ){
  133. strcpy(dev->szoutfan_stat, "run");
  134. }else if( stat == 3 ){
  135. strcpy(dev->szoutfan_stat, "err");
  136. }
  137. return 0;
  138. }
  139. int mc90hdnc1a_get_outfan_stat(int idx)
  140. {
  141. return mc90hdnc1a[idx].out_fan_stat;
  142. }
  143. char* mc90hdnc1a_get_outfan_stat_str(int idx)
  144. {
  145. return mc90hdnc1a[idx].szoutfan_stat;
  146. }
  147. int mc90hdnc1a_set_compstat(int idx, int stat)
  148. {
  149. struct mc90hdnc1a_t* dev = &mc90hdnc1a[idx];
  150. dev->comp_stat = stat;
  151. if( stat == 1 ){
  152. strcpy(dev->szcomp_stat, "idle");
  153. }else if( stat == 2 ){
  154. strcpy(dev->szcomp_stat, "run");
  155. }else if( stat == 3 ){
  156. strcpy(dev->szcomp_stat, "err");
  157. }
  158. return 0;
  159. }
  160. int mc90hdnc1a_get_cmp_stat(int idx)
  161. {
  162. return mc90hdnc1a[idx].comp_stat;
  163. }
  164. char* mc90hdnc1a_get_cmp_stat_str(int idx)
  165. {
  166. return mc90hdnc1a[idx].szcomp_stat;
  167. }
  168. int mc90hdnc1a_set_rtnwind_temp(int idx, int val)
  169. {
  170. mc90hdnc1a[idx].rtnwind_temp = val;
  171. return 0;
  172. }
  173. int mc90hdnc1a_get_rtnwind_temp(int idx)
  174. {
  175. return mc90hdnc1a[idx].rtnwind_temp;
  176. }
  177. int mc90hdnc1a_set_cond_temp(int idx, int val)
  178. {
  179. mc90hdnc1a[idx].cond_temp = val;
  180. return 0;
  181. }
  182. int mc90hdnc1a_set_eva_temp(int idx, int val)
  183. {
  184. mc90hdnc1a[idx].eva_temp = val;
  185. return 0;
  186. }
  187. int mc90hdnc1a_get_cond_temp(int idx)
  188. {
  189. return mc90hdnc1a[idx].cond_temp;
  190. }
  191. int mc90hdnc1a_get_eva_temp(int idx)
  192. {
  193. return mc90hdnc1a[idx].eva_temp;
  194. }
  195. int mc90hdnc1a_set_infan_spd(int idx, int val)
  196. {
  197. mc90hdnc1a[idx].infan_spd = val;
  198. return 0;
  199. }
  200. int mc90hdnc1a_get_infan_spd(int idx)
  201. {
  202. return mc90hdnc1a[idx].infan_spd;
  203. }
  204. int mc90hdnc1a_set_outfan_spd(int idx, int val)
  205. {
  206. mc90hdnc1a[idx].outfan_spd = val;
  207. return 0;
  208. }
  209. int mc90hdnc1a_get_outfan_spd(int idx)
  210. {
  211. return mc90hdnc1a[idx].outfan_spd;
  212. }
  213. int mc90hdnc1a_set_comp_start_temp(int idx, int val)
  214. {
  215. mc90hdnc1a[idx].comp_start_temp = val;
  216. return 0;
  217. }
  218. int mc90hdnc1a_set_comp_gap_temp(int idx, int val)
  219. {
  220. mc90hdnc1a[idx].comp_gap_temp = val;
  221. return 0;
  222. }
  223. int mc90hdnc1a_set_heat_start_temp(int idx, int val)
  224. {
  225. mc90hdnc1a[idx].heat_start_temp = val;
  226. return 0;
  227. }
  228. int mc90hdnc1a_set_heat_gap_temp(int idx, int val)
  229. {
  230. mc90hdnc1a[idx].heat_gap_temp = val;
  231. return 0;
  232. }
  233. int mc90hdnc1a_init( void )
  234. {
  235. pthread_t thrd;
  236. int result = 0;
  237. int ret = 0;
  238. int idx = 0;
  239. struct mc90hdnc1a_t* dev = NULL ;
  240. char *errmsg = NULL;
  241. char sql[1024];
  242. struct dbcbparam_t cbparam;
  243. sqlite3* db = STA.cfg_db;
  244. log_dbg("%s, ++",__func__);
  245. plt_lock_ctndb();
  246. sprintf(sql,"select * from mc90hdnc1a");
  247. cbparam.nrow = 0;
  248. result = sqlite3_exec(db,sql, mc90hdnc1a_dbcb,(void*)&cbparam,&errmsg);
  249. plt_unlock_ctndb();
  250. if( result != SQLITE_OK ){
  251. log_dbg("%s, result != SQLITE_OK : %d", __func__, result );
  252. ret = -1;
  253. }else if( cbparam.ret != 0){
  254. log_dbg("%s, cbparam.ret != 0 : %d", __func__, cbparam.ret );
  255. ret = -2;
  256. }else{
  257. mc90hdnc1a_nbr = cbparam.nrow ;
  258. if(pthread_create(&thrd,NULL, mc90hdnc1a_thrd_main, NULL)!=0){
  259. ret = -1;
  260. log_dbg( "%s, create mc90hdnc1a thrd main fail", __func__);
  261. }
  262. }
  263. log_dbg("%s--, ret:%d",__func__,ret);
  264. return ret;
  265. }
  266. int mc90hdnc1a_get_addr( int idx )
  267. {
  268. return mc90hdnc1a[idx].comm.adr;
  269. }
  270. int mc90hdnc1a_get_comm_st(int idx)
  271. {
  272. struct mc90hdnc1a_t* dev = &mc90hdnc1a[idx];
  273. struct comm_t* comm = &dev->comm;
  274. return comm_get_state(comm);
  275. }
  276. int mc90hdnc1a_get_chan_idx(int idx)
  277. {
  278. struct mc90hdnc1a_t* dev = &mc90hdnc1a[idx];
  279. struct comm_t* comm = &dev->comm;
  280. return comm_get_chan_idx(comm);
  281. }
  282. char* mc90hdnc1a_get_comm_st_str(int idx)
  283. {
  284. struct mc90hdnc1a_t* dev = &mc90hdnc1a[idx];
  285. struct comm_t* comm = &dev->comm;
  286. return comm_get_state_str(comm);
  287. }
  288. int mc90hdnc1a_get_tick(int idx)
  289. {
  290. return mc90hdnc1a[idx].sm.tick;
  291. }
  292. int mc90hdnc1a_get_nbr()
  293. {
  294. return mc90hdnc1a_nbr;
  295. }
  296. int mc90hdnc1a_get_tool_data(int idx,char* buf)
  297. {
  298. if(idx < 1 || idx > mc90hdnc1a_nbr || buf == NULL)
  299. return -1;
  300. struct mc90hdnc1a_t* dev = &mc90hdnc1a[idx];
  301. struct statemachine_t* sm = &dev->sm;
  302. struct comm_t* comm = &dev->comm;
  303. char buf_temp [1024];
  304. sm_get_summary(sm, buf_temp, sizeof(buf_temp));
  305. sprintf(buf," [%d] %s ", idx, buf_temp);
  306. comm_get_summary(comm, buf_temp, sizeof(buf_temp));
  307. strcat(buf, buf_temp);
  308. sprintf(buf_temp,"work_stat:"L_GREEN"%s"NONE" comp_start_temp:%d gap:%d heat_start_temp:%d gap:%d ",
  309. dev->szdev_work_stat,
  310. dev->comp_start_temp, dev->comp_gap_temp, dev->heat_start_temp, dev->heat_gap_temp);
  311. strcat(buf, buf_temp);
  312. sprintf(buf_temp,"infan:%s outfan:%s comp:%s rtnwindtemp:"L_GREEN"%d"NONE" condtemp:%d evatemp:%d infanspd:%d outfanspd:%d\n",
  313. dev->szinfan_stat, dev->szoutfan_stat, dev->szcomp_stat, dev->rtnwind_temp, dev->cond_temp, dev->eva_temp, dev->infan_spd, dev->outfan_spd);
  314. strcat(buf, buf_temp);
  315. return 0;
  316. }
  317. int mc90hdnc1a_get_tbmqtt_data(int idx,char* buf)
  318. {
  319. sprintf(buf, "'ac%d_state':'%s', 'ac%d_if_state':'%s','ac%d_of_state':'%s', 'ac%d_cmp_state':'%s',\
  320. 'ac%d_rtn_t':%d, 'ac%d_cond_t':%d,'ac%d_eva_t':%d, 'ac%d_if_spd':%d,'ac%d_of_spd':%d",
  321. idx, mc90hdnc1a_get_workstat_str(idx),
  322. idx, mc90hdnc1a_get_infan_stat_str(idx),
  323. idx, mc90hdnc1a_get_outfan_stat_str(idx),
  324. idx, mc90hdnc1a_get_cmp_stat_str(idx),
  325. idx, mc90hdnc1a_get_rtnwind_temp(idx),
  326. idx, mc90hdnc1a_get_cond_temp(idx),
  327. idx, mc90hdnc1a_get_eva_temp(idx),
  328. idx, mc90hdnc1a_get_infan_spd(idx),
  329. idx, mc90hdnc1a_get_outfan_spd(idx));
  330. }
  331. int mc90hdnc1a_get_cloud_data(int ctn_idx,int idx,char* buf)
  332. {
  333. sprintf(buf, "'device_id':'ac_%d', 'work_state':%d, 'if_state':%d,'of_state':%d, 'cmp_state':%d,\
  334. 'rtn_t':%d, 'cond_t':%d,'eva_t':%d, 'if_spd':%d,'of_spd':%d,'state':%d",
  335. idx, mc90hdnc1a_get_workstat( idx ),
  336. mc90hdnc1a_get_infan_stat( idx ),
  337. mc90hdnc1a_get_outfan_stat( idx ),
  338. mc90hdnc1a_get_cmp_stat( idx ),
  339. mc90hdnc1a_get_rtnwind_temp( idx ),
  340. mc90hdnc1a_get_cond_temp( idx ),
  341. mc90hdnc1a_get_eva_temp( idx ),
  342. mc90hdnc1a_get_infan_spd( idx ),
  343. mc90hdnc1a_get_outfan_spd( idx ),
  344. mc90hdnc1a_get_state( idx ));
  345. return 0;
  346. }
  347. int mc90hdnc1a_get_bkds_data(int idx,char *buf)
  348. {
  349. sprintf(buf,"\
  350. \"info\":\"%d#\",\"model\":\"%s\",\"chan_idx\":%d,\"adr\":%d,\"state\":\"%s\",\
  351. \"tick\":%d,\"if_state\":\"%s\",\"of_state\":\"%s\", \"cmp_state\":\"%s\",\"rtn_t\":%d,\
  352. \"cond_t\":%d,\"eva_t\":%d, \"if_spd\":%d,\"of_spd\":%d\
  353. ",
  354. idx,"mc90hdnc1a",mc90hdnc1a_get_chan_idx( idx ),mc90hdnc1a_get_addr( idx ),mc90hdnc1a_get_workstat_str( idx ),
  355. mc90hdnc1a_get_tick( idx ),mc90hdnc1a_get_infan_stat_str( idx ),mc90hdnc1a_get_outfan_stat_str( idx ),mc90hdnc1a_get_cmp_stat_str( idx ),mc90hdnc1a_get_rtnwind_temp( idx ),
  356. mc90hdnc1a_get_cond_temp( idx ),mc90hdnc1a_get_eva_temp( idx ),mc90hdnc1a_get_infan_spd( idx ),mc90hdnc1a_get_outfan_spd( idx ));
  357. }
  358. int mc90hdnc1a_get_modbus_data(int idx,unsigned short* data)
  359. {
  360. struct mc90hdnc1a_t *dev = &mc90hdnc1a[idx];
  361. data[0] = (unsigned short)DEVM_MC90HDNC1A;
  362. data[1] = (unsigned short)1;
  363. data[2] = (unsigned short)dev->sm.state;
  364. data[3] = (unsigned short)dev->sm.step;
  365. data[4] = (unsigned short)dev->sm.err;
  366. data[5] = (unsigned short)dev->comm.adr;
  367. data[6] = (unsigned short)dev->comm.state;
  368. // data[7] = (unsigned short)dev->runmod;
  369. // data[8] = (unsigned short)dev->ctlMode;
  370. // data[9] = (unsigned short)dev->cool_temp;
  371. // data[10] = (unsigned short)dev->heat_temp;
  372. // data[11] = (unsigned short)dev->cool_gap_temp;
  373. // data[12] = (unsigned short)dev->heat_gap_temp;
  374. // data[13] = (unsigned short)dev->pump_gear;
  375. // data[14] = (unsigned short)dev->comp_gear;
  376. // data[15] = (unsigned short)dev->out_water_temp;
  377. // data[16] = (unsigned short)dev->in_water_temp;
  378. // data[17] = (unsigned short)dev->out_water_press;
  379. // data[18] = (unsigned short)dev->in_water_press;
  380. // data[19] = (unsigned short)dev->pump_speed;
  381. return 0;
  382. }