qingxie_bms.c 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include "qingxie_bms.h"
  2. #include "common.h"
  3. #include "soft_p_2_c.h"
  4. #include "soft_can.h"
  5. qingxie_bms_status_t _qx_bms[4] = {0};
  6. void send_info_to_Qx(void)
  7. {
  8. if(_Aqx_bms_link.connect_status != COMP_NORMAL)
  9. return;
  10. uint8_t can_buf[8] = {0};
  11. if(planep.lock_status == 0)
  12. can_buf[0] = 0;
  13. else if(planep.lock_status == 1)
  14. can_buf[0] = 1;
  15. else if(planep.lock_status == 4)
  16. can_buf[0] = 2;
  17. can_buf[1] = (planep.thr_pwm - 1000) / 10;
  18. can_send_msg_normal(&can_buf[0], 8, 0x66B);
  19. }
  20. Connect_check _qx_bms_link[4] = {0};
  21. Connect_check _Aqx_bms_link;
  22. void QxBmsCanRecvHookFunction(uint32_t id, uint8_t data[], uint8_t len)
  23. {
  24. int bms_id = 0;
  25. _Aqx_bms_link.connect_status = COMP_NORMAL;
  26. if (id == QINGXIE_BMS0_CAN_ID1 || id == QINGXIE_BMS1_CAN_ID1 ||
  27. id == QINGXIE_BMS2_CAN_ID1 || id == QINGXIE_BMS3_CAN_ID1)
  28. {
  29. if (id == QINGXIE_BMS1_CAN_ID1) {
  30. bms_id = 1;
  31. } else if (id == QINGXIE_BMS2_CAN_ID1) {
  32. bms_id = 2;
  33. } else if (id == QINGXIE_BMS3_CAN_ID1) {
  34. bms_id = 3;
  35. }
  36. _qx_bms_link[bms_id].connect_status = COMP_NORMAL;
  37. _qx_bms_link[bms_id].recv_time = HAL_GetTick();
  38. _qx_bms[bms_id].bat_voltage = data[1] + (data[0] << 8);
  39. _qx_bms[bms_id].servo_current = data[3] + (data[2] << 8);
  40. _qx_bms[bms_id].stack_voltage = data[5] + (data[4] << 8);
  41. _qx_bms[bms_id].servo_voltage = data[7] + (data[6] << 8);
  42. }
  43. else if (id == QINGXIE_BMS0_CAN_ID2 || id== QINGXIE_BMS1_CAN_ID2 ||
  44. id== QINGXIE_BMS2_CAN_ID2 || id== QINGXIE_BMS3_CAN_ID2)
  45. {
  46. if (id == QINGXIE_BMS1_CAN_ID2) {
  47. bms_id = 1;
  48. } else if (id == QINGXIE_BMS2_CAN_ID2) {
  49. bms_id = 2;
  50. } else if (id == QINGXIE_BMS3_CAN_ID2) {
  51. bms_id = 3;
  52. }
  53. _qx_bms[bms_id].gas_tank_pressure = data[1] + (data[0] << 8);
  54. _qx_bms[bms_id].pipe_pressure = data[3] + (data[2] << 8);
  55. _qx_bms[bms_id].pcb_temp = data[5] + (data[4] << 8);
  56. _qx_bms[bms_id].stack_temp = data[7] + (data[6] << 8);
  57. } else if (id == QINGXIE_BMS0_CAN_ID3 || id == QINGXIE_BMS1_CAN_ID3 ||
  58. id == QINGXIE_BMS2_CAN_ID3 || id == QINGXIE_BMS3_CAN_ID3) {
  59. if (id == QINGXIE_BMS1_CAN_ID3) {
  60. bms_id = 1;
  61. } else if (id == QINGXIE_BMS2_CAN_ID3) {
  62. bms_id = 2;
  63. } else if (id == QINGXIE_BMS3_CAN_ID3) {
  64. bms_id = 3;
  65. }
  66. _qx_bms[bms_id].work_status = data[0];
  67. _qx_bms[bms_id].self_chek = data[1];
  68. _qx_bms[bms_id].falt_status = data[3] + (data[2] << 8);
  69. _qx_bms[bms_id].bat_refuel_current = data[5] + (data[4] << 8);
  70. }
  71. }