cascade.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. #ifndef __CASCADE_Hx__
  2. #define __CASCADE_Hx__
  3. #include <stdint.h>
  4. #include "common.h"
  5. #include "json_handle.h"
  6. #include "netswitch.h"
  7. #define MAX_BREAKER_CHN (6)
  8. #define MAX_BREAKER_ID (49)
  9. #define CASCADE_MAX 32
  10. #define ERR_MAX 5
  11. #define CH_MAX 128
  12. #define MAX_READ_REGS 1000
  13. #define MAX_WRITE_REGS 1000
  14. #define MAX_READ_REGS2 50000
  15. #define MAX_WRITE_REGS2 50000
  16. #define CASCADE_REG_OFFSET 0x10
  17. #define CASCADE_REG_READ (CASCADE_REG_OFFSET+0)
  18. #define CASCADE_REG_WRITE (CASCADE_REG_OFFSET+1)
  19. #define CASCADE_REG_SCAN (CASCADE_REG_OFFSET+2)
  20. // #define CASCADE_REG_BREAKER 0x40
  21. // #define CASCADE_REG_BREAKER_READ (CASCADE_REG_BREAKER+0)
  22. // #define CASCADE_REG_BREAKER_WRITE (CASCADE_REG_BREAKER+1)
  23. #define CASCADE_SLAVE_CONNECTION 5
  24. #define CASCADE_SLAVE_PORT 502
  25. enum {
  26. CASCADE_CMD_OPEN=0,
  27. CASCADE_CMD_CLOSE,
  28. CASCADE_CMD_SAVE,
  29. CASCADE_CMD_SAVE3,
  30. CASCADE_CMD_GET_INFO,
  31. CASCADE_CMD_QUERY_CH,
  32. CASCADE_CMD_QUERY_VOL,
  33. CASCADE_CMD_QUERY_CUR,
  34. CASCADE_CMD_QUERY_PWR,
  35. CASCADE_CMD_QUERY_PWRQ,
  36. CASCADE_CMD_QUERY_HIS,
  37. CASCADE_CMD_QUERY_TOTAL,
  38. CASCADE_CMD_QUERY_TOTAL_PWR,
  39. CASCADE_CMD_BREAKER_QUERY,
  40. CASCADE_CMD_GET_BREAKER_INFO,
  41. CASCADE_CMD_BREAKER_SAVE_ADD,
  42. CASCADE_CMD_BREAKER_SAVE_UPDATE,
  43. CASCADE_CMD_BREAKER_SAVE_DELETE,
  44. CASCADE_CMD_OPEN_NF,
  45. CASCADE_CMD_CLOSE_NF,
  46. CASCADE_CMD_CLEAR_CONSUMER,
  47. CASCADE_CMD_RECOVERY,
  48. CASCADE_CMD_REBOOT,
  49. CASCADE_CMD_SET_ADDR,
  50. CASCADE_CMD_MAX,
  51. };
  52. #pragma pack (1)
  53. typedef struct {
  54. int addr;
  55. int err; //err times
  56. }slave_t;
  57. typedef struct {
  58. slave_t *slave;
  59. int cnt;
  60. }dev_list_t;
  61. typedef struct {
  62. uint16_t deveice_type; //设备类型
  63. uint16_t slave_addr; //设备地址
  64. uint32_t voltage; //当前电压
  65. uint32_t current; //当前电流
  66. uint32_t power; //当前功率
  67. uint32_t consumption; //耗电量
  68. uint32_t freq; //频率
  69. uint32_t factor; //功率因素
  70. uint32_t temprature; //温度值
  71. uint32_t humidity; //湿度值
  72. uint32_t warning; //告警
  73. uint16_t power_status; //供电状态
  74. uint16_t sensor_status; //传感器状态
  75. //uint32_t Warinfo;
  76. //uint16_t sersor_type;
  77. }sensor_ori_t;
  78. typedef struct {
  79. int type; //设备类型
  80. int addr;
  81. PowerInfo pwr;
  82. float temprature; //温度值
  83. float humidity; //湿度值
  84. int warning; //告警
  85. int power_status; //供电状态
  86. int sensor_status; //传感器状态
  87. }sensor_data_t;
  88. enum {
  89. TYPE_CMD=0,
  90. TYPE_FILE,
  91. };
  92. enum {
  93. OBJ_OVERALL=0,
  94. OBJ_CHANNEL,
  95. OBJ_HISTORY,
  96. OBJ_SENSOR,
  97. };
  98. typedef struct {
  99. int dlen;
  100. uint8_t *data;
  101. }data_t;
  102. typedef struct {
  103. uint8_t product_type;
  104. uint8_t product_pwr_type;
  105. uint8_t product_id;
  106. }product_info_t;
  107. typedef struct {
  108. uint8_t product_ph_id;
  109. uint8_t product_ph_type; //0:A相 1:B相 2:C相
  110. uint8_t product_ph_outputType; //三相控制方式1,三项2单项
  111. uint8_t product_ph_outputStatus;//该相是否输出,1输出2不输出
  112. }phase_info_t;
  113. typedef struct {
  114. PowerInfo power;
  115. phase_info_t phase;
  116. }power_info_t;
  117. typedef struct {
  118. uint8_t product_saddr;
  119. uint8_t product_ch_type;
  120. uint8_t product_ch_addr;
  121. uint8_t product_ch_id;
  122. uint8_t product_ch_status;
  123. uint8_t product_ch_NF_status;
  124. PowerInfo chinfo;
  125. power_info_t pinfo[3];
  126. uint16_t start_delay;
  127. uint16_t stop_delay;
  128. }channel_info_t;
  129. typedef struct {
  130. PowerInfo power[3];
  131. }overall_info_t;
  132. typedef struct {
  133. uint8_t cnt;
  134. product_info_t prod;
  135. overall_info_t all;
  136. channel_info_t ch[CH_MAX];
  137. }slave_info_t;
  138. // slave breaker information
  139. typedef struct{
  140. //uint8_t breaker_addrs;
  141. uint8_t product_id;
  142. uint8_t breaker_chn;
  143. uint16_t breaker_status;
  144. uint16_t breaker_addrs;
  145. int breaker_id;
  146. char breaker_gather_type[6];
  147. char breaker_com[20];
  148. char breaker_switch_name[64];
  149. char breaker_chns_name[64]; //
  150. }breaker_channel_info_t;
  151. typedef struct {
  152. int cnt;
  153. breaker_channel_info_t breaker_chn[CH_MAX];
  154. }breaker_info_t;
  155. typedef struct{
  156. uint8_t jdh;
  157. uint8_t cjdz;
  158. char com[32];
  159. char cjfs[20];
  160. char breaker_chns[64];
  161. }cascade_breaker_add_t;
  162. typedef struct{
  163. int switch_id;
  164. char switch_name[32];
  165. char breaker_chns[64];
  166. }cascade_breaker_update_t;
  167. typedef struct {
  168. int switch_id;
  169. }cascade_braeker_delete_t;
  170. typedef struct {
  171. uint8_t cmd;
  172. uint8_t obj;
  173. uint8_t chId;
  174. // char time_s[24]; //start time
  175. // char time_e[24]; //end time
  176. union{
  177. cascade_breaker_add_t data;
  178. cascade_breaker_update_t data1;
  179. cascade_braeker_delete_t data2;
  180. int saddr;
  181. }datas;
  182. }cmd_data_t;
  183. typedef struct {
  184. uint8_t tp;
  185. uint16_t pid;
  186. uint16_t dlen;
  187. uint8_t *data;
  188. }file_data_t;
  189. typedef struct {
  190. int8_t type;
  191. uint8_t data[0];
  192. }mb_pkt_t;
  193. typedef struct {
  194. uint8_t addr;
  195. uint8_t func;
  196. uint16_t reg;
  197. uint16_t regcnt;
  198. uint8_t dlen;
  199. uint8_t *data;
  200. }mb_hdr_t;
  201. #pragma pack ()
  202. ////////slave define////////////////////
  203. typedef struct mmap_modbus{
  204. int offset;
  205. void *addr; //libmodbus source addr
  206. }mmap_modbus_t;
  207. //////////////////////////////////////
  208. extern int cur_dev_addr;
  209. int cascade_init(void);
  210. int cascade_deinit(void);
  211. int cascade_request(cmd_data_t *cmd);
  212. int cascade_get_all(_OverAllPwrAckInfo *all);
  213. int cascade_get_ch(_OverChnPwrAckInfo *ch);
  214. int cascade_get_dlist(dev_list_t *dl);
  215. int cascade_free_dlist(dev_list_t *dl);
  216. int cascade_set_modbus(ModbusInfo_t *info);
  217. int cascade_lock(void);
  218. int cascade_unlock(void);
  219. int cascade_slave_init(void);
  220. modbus_mapping_t *cascade_slave_map();
  221. void cascade_slave_read(uint32_t addr,uint32_t lenth);
  222. void cascade_slave_write(uint32_t addr, uint16_t val);
  223. int cascade_request_saddr(cmd_data_t *cmd,int saddr,int index);
  224. int cascade_set_ip_modbus(ModbusInfo_t *info);
  225. void* ip_cascade_thread(void *arg);
  226. void* tcp_modbus_thread(void *arg);
  227. Modbus_Manger_Tcp* tcp_modbus_init(const char * ip, uint16_t port,uint8_t addr,int power_type);
  228. void tcp_modbus_deinit(Modbus_Manger_Tcp **tcp);
  229. void * thread_sensor_or_485(void*arg);
  230. void sensor_or_cascade_init();
  231. #endif