soft_hd_water_pump.h 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. #ifndef _SOFT_HD_WATER_PUMP_H
  2. #define _SOFT_HD_WATER_PUMP_H
  3. #include "stdint.h"
  4. #include "string.h"
  5. #include <stdbool.h>
  6. #include "soft_water_device.h"
  7. //================================MSG FRAM================================================
  8. #define HD_CANID_PRI_POS (26)
  9. #define HD_CANID_PRI_MASK (0x1C000000) // 1 1100 0000 0000 0000 0000 0000 0000
  10. #define HD_PRI_HIGHEST 0x00
  11. #define HD_CANID_ANONYMOUS (0)
  12. #define HD_CANID_ANONYMOUS_POS (24)
  13. #define HD_CANID_ANONYMOUS_MASK (0x01000000) // 0 0001 0000 0000 0000 0000 0000 0000
  14. #define HD_CANID_SUBJECT_ID (0)
  15. #define HD_CANID_SUBJECT_POS (14)
  16. #define HD_CANID_SUBJECT_MASK (0x00FFFF00) // 0 0000 1111 1111 1111 1111 0000 0000
  17. #define HD_CANID_SNM_POS (25)
  18. #define HD_CANID_SNM_MASK (0x02000000) // 0 0010 0000 0000 0000 0000 0000 0000
  19. #define HD_TYPE_MSG (0x0) // �㲥֡(message farme)
  20. #define HD_TYPE_SER (0x1) // ����֡
  21. #define HD_CANID_REV_7 (0)
  22. #define HD_CANID_REV_7_POS (7)
  23. #define HD_CANID_REV_7_MASK (0x00000080) // 0 0000 0000 0000 0000 0000 1000 0000
  24. #define HD_CANID_SRCNODE_POS (0)
  25. #define HD_CANID_SRCNODE_MASK (0x0000007F) // 0 0000 0000 0000 0000 0000 0111 1111
  26. //#define HD_NODE_BDC 0x0A // �㲥�ڵ�
  27. //================================SER FRAM==============================================
  28. #define HD_CANID_RNR_POS (24)
  29. #define HD_CANID_RNR_MASK (0x01000000) // 0 0001 0000 0000 0000 0000 0000 0000
  30. #define HD_TYPE_RES (0x0)
  31. #define HD_TYPE_REQ (0x1)
  32. #define HD_CANID_REV_23 (0)
  33. #define HD_CANID_REV_23_POS (23)
  34. #define HD_CANID_REV_23_MASK (0x800000) // 0 0000 1000 0000 0000 0000 0000 0000
  35. #define HD_CANID_SERID_POS (14)
  36. #define HD_CANID_SERID_MASK (0x007FC000) // 0 0000 0111 1111 1100 0000 0000 0000
  37. #define HD_CANID_SERID (0)
  38. #define HD_CANID_DESNODE_POS (7)
  39. #define HD_CANID_DESNODE_MASK (0x00003F80) // 0 0000 0000 0000 0011 1111 1000 0000
  40. #define FMU_NODE_ID_HD (0x01) // �ɿؽڵ�
  41. #define HD_CANID_PUMP_ID (0x08) //ˮ�ýڵ�
  42. #define HD_CANID_NOZZLE_0_ID (0x40) //喷头节点
  43. #define HD_CANID_NOZZLE_1_ID (0x41) //
  44. #define HD_CANID_NOZZLE_2_ID (0x42) //
  45. #define HD_CANID_NOZZLE_3_ID (0x43) //
  46. #define HD_CANID_NOZZLE_4_ID (0x44) //
  47. //MSG ID
  48. //水泵
  49. #define HD_HIGH_FREQ_REPORT_ID (0x34) //水泵控制器-高频状态上报
  50. #define HD_LOW_FREQ_REPORT_ID (0x35) //水泵控制器-低频状态上报
  51. #define HD_WATER_PUMP_CONTROL_ID (0x36) //水泵控制命令
  52. #define HD_FLOWMETER_PULSE_ID (0x44) //水泵控制器-流量计脉冲
  53. #define HD_HEART_ID (0x05) //水泵控制器-心跳
  54. //喷头
  55. #define HD_NOZZLE_HIGH_FREQ_ID (0x37) //喷头控制器-状态上报高频
  56. #define HD_NOZZLE_LOW_FREQ_ID (0x38) //喷头控制器-状态上报低频
  57. #define HD_NOZZLE_CONTROL_ID (0x39) //喷头控制器-控制命令
  58. #define HD_IDENTIFY_ID (0x0D) //喷头控制器-识别
  59. #define HD_SET_NOZZLE_ID (0x09) //喷头控制器-设置id
  60. //msg_id crc payload_len 在多帧中占用的字节数量
  61. #define msg_id_len 1
  62. #define crc_len 2
  63. #define length_len 2
  64. //多帧消息类型
  65. #define none 0 //非多帧消息
  66. #define PSL 1 ///水泵控制器低频状态上报
  67. #define SSL 2 //喷头控制器低频状态上报
  68. //多帧消息长度
  69. #define PSL_LEN 21
  70. #define SSL_LEN 14
  71. //HD��֡��Ϣ�ṹ��
  72. typedef struct _HDMsg
  73. {
  74. uint8_t Msg_id;
  75. uint8_t buffer[50];
  76. uint16_t rxindex;
  77. uint16_t length;
  78. HWTail Tail;
  79. HWTail LastTail;
  80. bool finish;
  81. uint16_t crc;
  82. uint8_t len_wrong;
  83. uint8_t crc_wrong;
  84. uint32_t setEscIdTime;
  85. }HDMsg;
  86. typedef struct _pump_status
  87. {
  88. uint8_t LST : 2; //逻辑状态,0:spin; 1:Stop。
  89. uint8_t SST : 3; //子状态,0:Calib; 1:Ready; 2:Align; 3:Startup; 4:Spin; 5:Freewheel。
  90. uint8_t STA : 2; //水泵状态,0:Fault; 1:Init; 2:Stop; 3:Run。
  91. uint8_t rev: 1;
  92. } pump_status;
  93. typedef struct _MCU_STATUS
  94. {
  95. uint8_t CMST : 1; //从 MCU 通讯状态,0:在位;1:失联
  96. uint8_t VQST : 1; //从 MCU 版本查询状态,0:版本查询成功;1:版本查询失败
  97. uint8_t REST : 2; //从 MCU 重启状态,0:运行中;1:重启中;2:重启失败。
  98. uint8_t VERS : 2; //从 MCU 版本同步状态,0:已同步;1:版本同步中;2:版本同步失败。
  99. uint8_t PWMS : 1; //从 MCU 同步 PWM 状态,0:信号正常;1:信号丢失。
  100. uint8_t rev: 1;
  101. }_MCU_STATUS;
  102. typedef struct _fault_code
  103. {
  104. uint16_t current_high : 1; //母线电流过大
  105. uint16_t vol_low : 1; //母线电压过低
  106. uint16_t vol_high : 1; //母线电压过高
  107. uint16_t overload : 1; // 过载
  108. uint16_t overspeed : 1; // 超速
  109. uint16_t blockage : 1; // 堵转
  110. uint16_t phase_current_high : 1; // 相电流过大
  111. uint16_t phase_current_abnormal : 1; // 相电流偏移值异常
  112. uint16_t temp_high : 1; // 温度过高
  113. uint16_t phase_line_missing : 1; // 相线缺失
  114. uint16_t thr_loss : 1; //油门信号丢失
  115. uint16_t selif_check_abnormal : 1; // 自检异常
  116. uint16_t hard_over_current : 1; // 硬件过流
  117. uint16_t power_abnormal : 1; // 驱动电源异常
  118. uint16_t overheat_open : 1; // 电机过热开路
  119. }_fault_code;
  120. typedef struct _pump
  121. {
  122. uint32_t devID;
  123. uint16_t flow1;
  124. uint16_t flow2;
  125. pump_status pump1_status;
  126. pump_status pump2_status;
  127. uint16_t pump1_pwm;
  128. uint16_t pump2_pwm;
  129. uint16_t pump1_speed;
  130. uint16_t pump2_speed;
  131. _fault_code pump1_fault_code;
  132. _fault_code pump2_fault_code;
  133. uint16_t pump1_vol;
  134. uint16_t pump2_vol;
  135. uint8_t pump1_current;
  136. uint8_t pump2_current;
  137. uint8_t pump1_temp;
  138. uint8_t pump2_temp;
  139. _MCU_STATUS MCU_status;
  140. uint16_t flowmeter1_pulse_interval;
  141. uint16_t flowmeter2_pulse_interval;
  142. HDMsg MultiMsg;
  143. }HDpump;
  144. typedef struct _solenoid_valve_status
  145. {
  146. uint8_t VDS : 1; //电磁阀检测状态,0:关; 1:开。
  147. uint8_t VCS : 1; //电磁阀控制状态,0:关; 1:开。
  148. uint8_t rev : 5;
  149. }_solenoid_valve_status;
  150. typedef struct _nozzle_status
  151. {
  152. uint8_t LST : 2; //逻辑状态,0:spin; 1:Stop; 2:Identify_Spin。
  153. uint8_t SST : 3; //喷头子状态,0:Calib; 1:Ready; 2:Align; 3:Startup; 4:Spin; 5:Freewheel。
  154. uint8_t STA : 2; //喷头状态,0:Fault; 1:Init; 2:Stop; 3:Run。
  155. uint8_t PLS : 1; //功率限制标志,0:未限制; 1 限制中。
  156. }_nozzle_status;
  157. typedef struct _nozzle
  158. {
  159. uint32_t devID;
  160. uint16_t speed;
  161. _solenoid_valve_status solenoid_valve_status;
  162. uint16_t speed_command;
  163. _nozzle_status nozzle_status;
  164. _fault_code fault_code;
  165. uint16_t nozzle_vol;
  166. uint8_t nozzle_current;
  167. uint8_t solenoid_valve_current;
  168. uint8_t nozzle_temp;
  169. uint16_t motor_power;
  170. uint16_t over_current_num;
  171. uint16_t hard_over_current_num;
  172. uint8_t blockage_frequency;
  173. HDMsg MultiMsg;
  174. uint8_t nodeId;
  175. comp_status deviceLink;
  176. uint32_t linkTime;
  177. }HDnozzle;
  178. typedef struct _nozzle_id
  179. {
  180. uint32_t devID;
  181. uint8_t nodeId;
  182. uint32_t linkTime;
  183. }_nozzle_id;
  184. //extern HDnozzle HD_nozzle;
  185. extern HDnozzle NozzleMsg[5];
  186. extern HDpump HD_pump;
  187. void HD_pump_func(void);
  188. extern void HuiDaCanRecvHookFunction(uint32_t id, uint8_t *recv_buf, uint8_t len);
  189. void HD_frame_process(HDMsg *_HDMsg , uint8_t *recv_buf, uint32_t len);
  190. void HD_can_sendmsg( uint8_t msg_id, _nozzle_id* Nozzle_id);
  191. void little_to_big_16(uint16_t* value) ;
  192. void little_to_big_32(uint32_t* value) ;
  193. void add_devId(uint8_t SrcId, uint32_t devId);
  194. uint32_t millis(void);
  195. #endif