power.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. #ifndef __POWER_Hx__
  2. #define __POWER_Hx__
  3. #include "datadef.h"
  4. #include "lock.h"
  5. #define POWER_AC_GET_INFO 0x0FA0 //获取继电器板类型通道
  6. #define POWER_AC_CUR_INFO_L 0x0FAB //单相小电流继电器信息,共8路继电器
  7. #define POWER_AC_STAT_INFO_L 0x1071 //单相小电流继电器开关状态,共8路继电器
  8. #define POWER_AC_CUR_INFO_H 0x1015 //单相大电流继电器信息,共4路继电器
  9. #define POWER_AC_STAT_INFO_H 0x1083 //单相大电流继电器开关状态,共4路继电器
  10. #define POWER_AC_TOTAL_ALATRM 0x10E0 //单相控制板总体报警信息 2024.11.12
  11. #define POWER_AC_OPEN_DELAY_TIME_L 0x1194 //单相小电流继电器板开启延时
  12. #define POWER_AC_CLOSE_DELAY_TIME_L 0x11A6 //单相小电流继电器板关闭延时
  13. #define POWER_AC_OPEN_DELAY_TIME_H 0x11B8 //单相大电流继电器板开启延时
  14. #define POWER_AC_CLOSE_DELAY_TIME_H 0x11C6 //单相大电流继电器板关闭延时
  15. #define POWER_AC_CH_STAT_L 0x11EA //设置单相小电流通道开关状态
  16. #define POWER_AC_CH_STAT_H 0x11FC //设置单相大电流通道开关状态
  17. #define POWER_AC_THRESHOLD_L 0x1215 //设置单相小电流通道超限报警阈值
  18. #define POWER_AC_THRESHOLD_H 0x129F //设置单相大电流通道超限报警阈值X
  19. #define POWER_AC_KB_VAL_L 0x1203 //设置单相小电流通道K、B值
  20. #define POWER_AC_KB_VAL_H 0x124D //设置单相大电流通道K、B值
  21. #define POWER_AC_RESET_CONSUMP 0x1400 //重置单相耗电量
  22. #define POWER_AC_ALARM_CTRL 0x13EC //超限动作
  23. #define POWER_AC_TOTAL_THRESHOLD 0x1450 //设置单相总超限报警阈值 2024.11.12
  24. #define POWER_AC_ALARM_CTRL_TOTAL 0x1482 //总体超限动作 2024.11.12
  25. #define POWER_AC_BREAKER_INFO 0x10D6 //单相控制板开关检测信息
  26. #define POWER_DC_SET_STAT 0x120A //设置直流继电器开关状态
  27. #define POWER_DC_SET_THRESHOLD 0x12E9 //设置直流继电器超限报警X
  28. #define POWER_DC_SET_KB_VAL 0x136D //设置直流通道K、B值
  29. #define POWER_DC_SET_OPEN_DELAY 0x11D4 //直流继电器控制板开启延时
  30. #define POWER_DC_SET_CLOSE_DELAY 0x11DF //直流继电器控制板关闭延时
  31. #define POWER_DC_SET_OUT_INFO 0x104F //直流继电器电路控制板信息,采集一路输出
  32. #define POWER_DC_SET_STAT_INFO 0x1097 //直流继电器电路控制板开关状态,采集一路输出
  33. #define POWER_DC_SET_IN_INFO 0x105F //直流总电流电压采集控制板,采集设备输入电压和输入电流
  34. #define POWER_DC_INFO 0x1770 //获取直流PDU类型通道
  35. #define POWER_DC_TOTAL_ALARM 0x1776 //直流PDU总报警信息 2024.11.12
  36. #define POWER_DC_OUT_INFO 0x177A //直流PDU输出
  37. #define POWER_DC_STAT_INFO 0x17E2 //直流PDU开关状
  38. #define POWER_DC_WARNING 0x179A //直流PDU报警信息
  39. #define POWER_DC_STAT_ERROR 0x17E4 //直流PDU故障状态
  40. #define POWER_DC_IN_INFO 0x1772 //直流PDU采集输入电压与输入电
  41. #define POWER_DC_OPEN_DELAY 0x17E6 //直流PDU延时
  42. #define POWER_DC_CLOSE_DELAY 0x17F6 //直流PDU延时
  43. #define POWER_DC_THRESHOLD_VOL_MAX 0x17A2 //max voltage threshold
  44. #define POWER_DC_THRESHOLD_VOL_MIN 0x17B2 //min voltage threshold
  45. #define POWER_DC_THRESHOLD_CUR_MAX 0x17C2 //max current threshold
  46. #define POWER_DC_THRESHOLD_CUR_MIN 0x17D2 //max current threshold
  47. #define POWER_DC_THRESHOLD_POWER_MAX 0x1810 //max power threshold
  48. #define POWER_DC_THRESHOLD_POWERCON_MAX 0x181A //max powercon threshold
  49. #define POWER_DC_ALL_OPEN_INFO 0x1806 //ALL OPEN直流PDU开关状
  50. #define POWER_DC_ALL_CLOSE_INFO 0x1807 //ALL OPEN直流PDU开关状
  51. #define POWER_DC_ALARM_CTRL 0x182E //超限动作
  52. #define POWER_DC_CONSUMP_CLEAR 0x1838 //重置直流耗电量
  53. #define POWER_DC_THRESHOLD_TOTAL_VOL_MAX 0x184C //max total voltage threshold 2024.11.12
  54. #define POWER_DC_THRESHOLD_TOTAL_VOL_MIN 0x184D //min total voltage threshold 2024.11.12
  55. #define POWER_DC_THRESHOLD_TOTAL_CUR_MAX 0x184E //max total current threshold 2024.11.12
  56. #define POWER_DC_THRESHOLD_TOTAL_PWR_MAX 0x184F //max total power threshold 2024.11.12
  57. #define POWER_DC_THRESHOLD_TOTAL_PWRCON_MAX 0x1850 //max total powercon threshold 2024.11.12
  58. #define POWER_DC_ALARM_CTRL_TOTAL 0x1856 //总体超限动作 2024.11.12
  59. #define POWER_AC3_GET_INFO 0x1770 //获取三项类型通道
  60. #define POWER_AC3_IN_INFO 0x1771 //三项交流输入
  61. #define POWER_AC3_OUT_INFO 0x177D //三项交流输出
  62. #define POWER_AC3_OUT_ENABLE 0x182E //三项交流输出按通道开关状态及控制使能
  63. #define POWER_AC3_NF_STATUS 0x1837 //三项交流零线断路器状态
  64. #define POWER_AC3_CH_OUT_ENABLE 0x183A //三项交流输出按插头开关状态及控制使
  65. #define POWER_AC3_IN_ENABLE 0x182D //三项交流输入超限使能
  66. #define POWER_AC3_OUT_ERROR 0x17DE //三项交流输出故障状态
  67. #define POWER_AC3_IN_TOTAL_ERROR 0x17CA //三项交流总输入故障状态 2024.11.12
  68. #define POWER_AC3_IN_ERROR 0x17DD //三项交流输入故障状态
  69. #define POWER_AC3_OPEN_DELAY_TIME 0x1840 //三项交流延时
  70. #define POWER_AC3_CLOSE_DELAY_TIME 0x184C //三项交流延时
  71. #define POWER_AC3_THRESHOLD_IN 0x17EA //设置三项交流输入超限报警
  72. #define POWER_AC3_THRESHOLD_OUT 0x17EF //设置三项交流输出超限报警
  73. #define POWER_AC3_ALL_OPEN_INFO 0x182B //ALL OPEN直流PDU开关状
  74. #define POWER_AC3_ALL_CLOSE_INFO 0x182C //ALL OPEN直流PDU开关状
  75. #define POWER_AC3_THRESHOLD_VOL_MAX 0x17EF //max voltage threshold
  76. #define POWER_AC3_THRESHOLD_VOL_MIN 0x17FB //min voltage threshold
  77. #define POWER_AC3_THRESHOLD_CUR_MAX 0x1807 //max current threshold
  78. #define POWER_AC3_THRESHOLD_PWR_MAX 0x1813 //max POWER threshold
  79. #define POWER_AC3_THRESHOLD_PWRCON_MAX 0x181F //max PWRCON threshold
  80. #define POWER_AC3_ALARM_MISSING_PH 0x1856 //缺相报警
  81. #define POWER_AC3_ALARM_CTRL_TOTAL 0x185F //总体超限动作 2024.11.12
  82. #define POWER_AC3_ALARM_CTRL 0x1860 //超限动作
  83. #define POWER_AC3_RESET_CONSUMP 0x189C //重置PH耗电量
  84. #define POWER_AC3_RESET_CONSUMP_ALL 0x18A5 //重置all耗电量
  85. #define POWER_AC3_BREAKER_INFO 0x17D4 //三相控制板开关检测信息
  86. #define BIT(x) (1<<x)
  87. enum {
  88. AC_SINGLE_S_TYPE=1,
  89. AC_SINGLE_B_TYPE,
  90. AC_MULTI_S_TYPE,
  91. AC_MULTI_B_TYPE,
  92. DC_OUT_TYPE,
  93. DC_IN_TYPE,
  94. DCPDU_TYPE,
  95. TREE_AC_TYPE, //三相进三项出
  96. TREE_AC_DUBL, //双火线
  97. };
  98. enum {
  99. ENABLE_V_UP = (1<<1),
  100. ENABLE_V_DOWN = (1<<3),
  101. ENABLE_C_UP = (1<<5),
  102. ENABLE_W_UP = (1<<7),
  103. ENABLE_P_UP = (1<<9),
  104. ENABLE_ALL_UP = (1<<11),
  105. ENABLE_ALL_DOWN = (1<<12),
  106. };
  107. enum {
  108. ENABLE_AC3_V_UP = (1<<1),
  109. ENABLE_AC3_V_DOWN = (1<<2),
  110. ENABLE_AC3_C_UP = (1<<3),
  111. ENABLE_AC3_W_UP = (1<<4),
  112. ENABLE_AC3_P_UP = (1<<5),
  113. ENABLE_AC3_STIME = (1<<6),
  114. ENABLE_AC3_ETIME = (1<<7),
  115. };
  116. enum {
  117. ALARM_V_UP = (1<<2),
  118. ALARM_V_DOWN = (1<<4),
  119. ALARM_C_UP = (1<<6),
  120. ALARM_W_UP = (1<<8),
  121. ALARM_P_UP = (1<<10),
  122. };
  123. enum {
  124. THR_V_UPPER=0,
  125. THR_V_LOWER,
  126. THR_C_UPPER,
  127. THR_P_UPPER,
  128. THR_W_UPPER,
  129. THR_MAX,
  130. };
  131. typedef struct
  132. {
  133. power_t all;
  134. power_t all_l[3];
  135. }power_new_total_t;
  136. typedef union{
  137. uint8_t ph;
  138. struct{
  139. uint8_t ph_l;
  140. uint8_t ph_r;
  141. }ph2;
  142. }phse_t;
  143. typedef struct{
  144. char name[16];
  145. uint8_t addr;
  146. uint8_t sch; //该通道在其所在的板上的序号,程序始于0,用户始于1
  147. phse_t pse;
  148. uint8_t open_delay;
  149. uint8_t close_delay;
  150. uint8_t status;
  151. alarm_all_t alarm;
  152. }info_new_t;
  153. typedef struct{
  154. info_new_t info;
  155. power_t power[3]; //电力信息
  156. thr_t thr; //阈值
  157. }power_ch_new_t;
  158. typedef struct{
  159. uint8_t cnt;
  160. uint8_t addr;
  161. power_ch_new_t *p_ch;
  162. }board_power_info_t;
  163. typedef struct{
  164. uint8_t flag;
  165. board_power_info_t board_new;
  166. }board_status_t;
  167. typedef struct{
  168. lock_t lck;
  169. board_status_t board[33];
  170. uint8_t chs;
  171. uint8_t brd_cnt;
  172. uint8_t power_type;
  173. uint8_t brd_max;
  174. uint8_t ch_max;
  175. power_new_total_t total;
  176. product_data_t *product;
  177. void (*get_board_power_info)(uint8_t addr);
  178. void (*get_board_thr_info)(uint8_t addr);
  179. void (*get_board_delay_info)(uint8_t addr);
  180. void (*set_delay)(uint8_t addr,uint8_t b_addr,uint16_t delay_open, uint16_t delay_close);
  181. void (*set_thr)(uint8_t addr,uint8_t b_addr,thr_t *th);
  182. void (*set_batch_thr)(uint8_t addr,thr_t *th);
  183. void (*set_status)(uint8_t addr,uint8_t b_addr,uint8_t status);
  184. void (*set_consumer_clear)(uint8_t addr,uint8_t b_addr);
  185. void (*set_all_status)(uint8_t status);
  186. void (*set_all_consumer_clear)(uint8_t addr);
  187. power_ch_new_t *pch;
  188. }power_handle_new_t;
  189. int power_init(void);
  190. int power_deinit(void);
  191. int power_scan(void);
  192. int power_get_ch(uint8_t ch, power_ch_t *pch);
  193. int power_set_ch_sw(uint8_t ch, uint8_t on);
  194. int power_set_ch_sw_n(power_ch_t *pch);
  195. int power_set_board_sw(uint8_t addr, uint8_t on);
  196. int power_set_all_sw(uint8_t on);
  197. int power_set_alarm(power_ch_t *pch);
  198. int power_get_threshold(power_ch_t *pch);
  199. int power_set_threshold(power_ch_t *pch);
  200. int power_set_open_delay(power_ch_t *pch);
  201. int power_set_close_delay(power_ch_t *pch);
  202. int power_reset(void);
  203. power_handle_new_t * power_get_all(void);
  204. int power_data_get(power_handle_new_t *all);
  205. int power_breaker_get(breaker_all_t *all);
  206. int power_data_get_board_cnt();
  207. #endif