cboard_dc.c 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. #include "cboard.h"
  2. #include "datadef.h"
  3. #include "lock.h"
  4. #include "mb.h"
  5. #include "log.h"
  6. typedef struct {
  7. int (*get_power)(power_ch_t *pch);
  8. int (*get_alarm)(power_ch_t *pch);
  9. int (*set_ch)(power_ch_t *pch);
  10. int (*set_open_delay)(power_ch_t *pch);
  11. int (*set_close_delay)(power_ch_t *pch);
  12. int (*set_kb_value)(power_ch_t *pch);
  13. int (*set_threshold)(power_ch_t *pch);
  14. int (*reset_consump)(power_ch_t *pch);
  15. int (*detect)(uint8_t addr);
  16. int (*get_info)(uint8_t addr, board_info_t *info);
  17. int (*get_board)(board_data_t *pbrd);
  18. int (*set_all)(uint8_t addr, uint8_t on);
  19. }board_fn2_t;
  20. //////////////////////////////////////////////////////////
  21. static int get_power(power_ch_t *pch)
  22. {
  23. return 0;
  24. }
  25. static int get_alarm(power_ch_t *pch)
  26. {
  27. return 0;
  28. }
  29. static int set_ch(power_ch_t *pch)
  30. {
  31. int r;
  32. power_ch_t pc;
  33. uint16_t offset=0,data_temp[2];
  34. offset = POWER_DC_SET_STAT + pch->info.ch;
  35. data_temp[0] = pch->power[0].status; data_temp[1] = 0;
  36. r = write_reg(pch->info.addr, offset, data_temp, 2);
  37. return r;
  38. }
  39. static int set_open_delay(int addr, uint16_t delay)
  40. {
  41. }
  42. static int set_close_delay(int addr, uint16_t delay)
  43. {
  44. }
  45. static int set_kb_value(int addr, kb_val_t *kv)
  46. {
  47. }
  48. static int set_threshold(power_ch_t *pch)
  49. {
  50. int r=-1;
  51. return r;
  52. }
  53. static int reset_consump(int addr)
  54. {
  55. }
  56. int set_alarm(power_ch_t *pch)
  57. {
  58. int r=-1;
  59. power_ch_t pc;
  60. uint16_t offset = 0;
  61. uint16_t nStatus = 0;
  62. if (pch->info.ch<0) {
  63. offset = POWER_DC_ALARM_CTRL_TOTAL;
  64. }
  65. else {
  66. offset = POWER_DC_ALARM_CTRL + pch->info.ch;
  67. }
  68. if(pc.thr.v_upper.act==1) nStatus |= BIT(1);
  69. if(pc.thr.v_lower.act==1) nStatus |= BIT(2);
  70. if(pc.thr.c_upper.act==1) nStatus |= BIT(0);
  71. if(pc.thr.p_upper.act==1) nStatus |= BIT(3);
  72. if(pc.thr.w_upper.act==1) nStatus |= BIT(4);
  73. r = write_reg(pch->info.addr, offset, &nStatus, 1);
  74. return r;
  75. }
  76. int set_threashold(power_ch_t *pch)
  77. {
  78. int r=-1;
  79. uint16_t offset;
  80. uint16_t data_temp[4];
  81. uint32_t value;
  82. offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_VOL_MAX:POWER_DC_THRESHOLD_VOL_MAX;
  83. value = pch->thr.v_upper.val * 1000;
  84. data_temp[0] = value & 0XFFFF;
  85. data_temp[1] = (value >> 16) & 0xFFFF;
  86. r = write_reg(pch->info.addr, offset, data_temp, 2);
  87. offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_VOL_MIN:POWER_DC_THRESHOLD_VOL_MIN;
  88. value = pch->thr.v_lower.val * 1000;
  89. data_temp[0] = value & 0XFFFF;
  90. data_temp[1] = (value >> 16) & 0xFFFF;
  91. r = write_reg(pch->info.addr, offset, data_temp, 2);
  92. offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_CUR_MAX:POWER_DC_THRESHOLD_CUR_MAX;
  93. value = pch->thr.c_upper.val * 1000;
  94. data_temp[0] = value & 0XFFFF;
  95. data_temp[1] = (value >> 16) & 0xFFFF;
  96. r = write_reg(pch->info.addr, offset, data_temp, 2);
  97. offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_PWR_MAX:POWER_DC_THRESHOLD_POWER_MAX;
  98. value = pch->thr.p_upper.val * 1000;
  99. data_temp[0] = value & 0XFFFF;
  100. data_temp[1] = (value >> 16) & 0xFFFF;
  101. r = write_reg(pch->info.addr, offset, data_temp, 2);
  102. offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_PWRCON_MAX:POWER_DC_THRESHOLD_POWERCON_MAX;
  103. value = pch->thr.w_upper.val * 1000;
  104. data_temp[0] = value & 0XFFFF;
  105. data_temp[1] = (value >> 16) & 0xFFFF;
  106. r = write_reg(pch->info.addr, offset, data_temp, 2);
  107. //set_alarm();
  108. return r;
  109. }
  110. ////////////////////////
  111. static int brd_detect(uint8_t addr)
  112. {
  113. return 0;
  114. }
  115. static int get_info(uint8_t addr, board_info_t *info)
  116. {
  117. return 0;
  118. }
  119. static int get_board(uint8_t addr, board_data_t *pbrd)
  120. {
  121. int r,i,j;
  122. uint32_t val;
  123. uint16_t offset,tmp[144];
  124. r = read_reg(pbrd->addr, POWER_AC_CUR_INFO_L, tmp, pbrd->chs);
  125. if(r==0 && pbrd->pch) {
  126. for (i=0; i<pbrd->chs; i++) {
  127. int idx = i * 12;
  128. // 解电压数据
  129. val = (tmp[1 + idx] << 16) | tmp[0 + idx];
  130. pbrd->pch[i].power[0].voltage = val / 1000.0;
  131. // 解电流数据
  132. val = (tmp[3 + idx] << 16) | tmp[2 + idx];
  133. pbrd->pch[i].power[0].current = val / 1000.0;
  134. // 解功率数据
  135. val = (tmp[5 + idx] << 16) | tmp[4 + idx];
  136. pbrd->pch[i].power[0].power = val / 1000.0;
  137. // 解频率数据
  138. val = (tmp[7 + idx] << 16) | tmp[6 + idx];
  139. pbrd->pch[i].power[0].freq = val / 1000.0;
  140. // 解耗电量数据
  141. val = (tmp[9 + idx] << 16) | tmp[8 + idx];
  142. pbrd->pch[i].power[0].consump = val / 1000.0;
  143. // 解功率因素数据
  144. val = (tmp[11 + idx] << 16) | tmp[10 + idx];
  145. pbrd->pch[i].power[0].factor = val / 1000.0;
  146. }
  147. }
  148. r = read_reg(pbrd->addr, POWER_AC_STAT_INFO_L, tmp, pbrd->chs);
  149. if (r < 0) {
  150. LOGE("get_board, addr:%d offset:%d r=%d\n", pbrd->addr, offset, r);
  151. return r;
  152. }
  153. if(pbrd->pch) {
  154. for (i=0; i<pbrd->chs; i++) {
  155. pbrd->pch[i].power[0].status = tmp[i] & (0x01);
  156. pbrd->pch[i].alarm.v_upper = tmp[i] & ALARM_V_UPPER;
  157. pbrd->pch[i].alarm.v_lower = tmp[i] & ALARM_V_LOWER;
  158. pbrd->pch[i].alarm.c_upper = tmp[i] & ALARM_C_UPPER;
  159. pbrd->pch[i].alarm.p_upper = tmp[i] & ALARM_P_UPPER;
  160. pbrd->pch[i].alarm.w_upper = tmp[i] & ALARM_W_UPPER;
  161. pbrd->pch[i].alarm.ph_loss = 0;
  162. }
  163. }
  164. return 0;
  165. }
  166. static int open_all(uint8_t addr)
  167. {
  168. return 0;
  169. }
  170. static int close_all(uint8_t addr)
  171. {
  172. return 0;
  173. }
  174. ///////////////////////////////////////////////////////
  175. static board_fn_t board_dc_fn={
  176. //
  177. };