soft_okcell.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. #ifndef SOFT_OKCELL_H
  2. #define SOFT_OKCELL_H
  3. #include "stdint.h"
  4. #include "stdbool.h"
  5. #include "common.h"
  6. ///////////////////
  7. /*
  8. 序号 内容 字段 说明
  9. D0.1 电池总电压 N[0]-N[1] 单位(mv)
  10. D0.2 充放电电流 N[2]-N[3] 单位(10mA)正数充电,负数放电
  11. D0.3 电池温度 N[4]-N[5] 单位(0.1℃)
  12. D0.4 相对充电状态 N[6]-N[7] 单位(%)
  13. D0.5 绝对充电状态 N[8]-N[9] 单位(%)
  14. D0.6 电池组状态 N[10]-N[11] N[10] : 飞控对接异常代码
  15. 0: 无异常
  16. 1: 电池超温
  17. 2: 电池组严重失衡
  18. 3: 电池组单体电压异常
  19. 4: 电池组严重过流
  20. 5: 电池组 SOH 值低
  21. N[11]: 电池内部异常代码
  22. Bit6:低压充电提醒 0:无效 1:充电提醒
  23. Bit5:失衡报警 0:无效 1:失衡
  24. Bit4:充电过压 0:无效 1:过压
  25. Bit3:充电过流 0:无效 1:过流
  26. Bit2:充电超温 0:无效 1:过温
  27. Bit1:电池过放 0:无效 1:过放
  28. D0.7 电池串数 N[12]-N[13] 单位(个)
  29. D0.8 电池1电压 N[14]-N[15] 单位(mv)
  30. D0.9 电池2电压 N[16]-N[17] 单位(mv)
  31. D0.10 电池3电压 N[18]-N[19] 单位(mv)
  32. D0.11 电池4电压 N[20]-N[21] 单位(mv)
  33. D0.12 电池5电压 N[22]-N[23] 单位(mv)
  34. D0.13 电池6电压 N[24]-N[25] 单位(mv)
  35. D0.14 电池7电压 N[26]-N[27] 单位(mv)
  36. D0.15 电池8电压 N[28]-N[29] 单位(mv)
  37. D0.16 电池9电压 N[30]-N[31] 单位(mv)
  38. D0.17 电池10电压 N[32]-N[33] 单位(mv)
  39. D0.18 电池11电压 N[34]-N[35] 单位(mv)
  40. D0.19 电池12电压 N[36]-N[37] 单位(mv)
  41. D0.20 电池13电压 N[36]-N[37] 单位(mv)
  42. D0.21 电池14电压 N[36]-N[37] 单位(mv)
  43. D0.22 电池15电压 N[36]-N[37] 单位(mv)
  44. …………………………………………………………
  45. 根据电池串数不同,负载字节数不同
  46. */
  47. #pragma pack(1)
  48. typedef struct
  49. {
  50. uint16_t cell_d0[33]; //13s字节到20,扩展到15s。
  51. }_CELL_D0;
  52. #pragma pack()
  53. #pragma pack(1)
  54. typedef struct
  55. {
  56. uint16_t cell_d1[3];
  57. }_CELL_D1;
  58. #pragma pack()
  59. #pragma pack(1)
  60. typedef struct
  61. {
  62. uint16_t cell_d2[2];
  63. }_CELL_D2;
  64. #pragma pack()
  65. #pragma pack(1)
  66. typedef struct
  67. {
  68. uint16_t cell_d3[9];
  69. }_CELL_D3;
  70. #pragma pack()
  71. #pragma pack(1)
  72. typedef struct
  73. {
  74. uint16_t cell_d4[4];
  75. }_CELL_D4;
  76. #pragma pack()
  77. #pragma pack(1)
  78. typedef struct
  79. {
  80. uint8_t cell_p2[4];
  81. }_CELL_P2;
  82. #pragma pack()
  83. #pragma pack(1)
  84. typedef struct
  85. {
  86. uint8_t cell_p3[12];
  87. }_CELL_P3;
  88. #pragma pack()
  89. #pragma pack(1)
  90. typedef struct
  91. {
  92. uint32_t cell_CanID;
  93. _CELL_D0 cell_D0;
  94. _CELL_D1 cell_D1;
  95. _CELL_D2 cell_D2;
  96. _CELL_D3 cell_D3;
  97. _CELL_D4 cell_D4;
  98. _CELL_P2 cell_P2;
  99. _CELL_P3 cell_P3;
  100. }_CELL_INF;
  101. #pragma pack()
  102. #define OKCELL_MAXLEN 200
  103. /*
  104. 正方电池设备信息
  105. */
  106. #pragma pack(1)
  107. typedef struct {
  108. uint32_t deviceCanID;
  109. unsigned char Okcell_recv_buf[OKCELL_MAXLEN];
  110. short Okcell_recv_index;
  111. //获取到起始标志位
  112. bool Okcell_get_s;
  113. Connect_check Okcell_Link;
  114. //获取电池编号
  115. bool get_cellNumber;
  116. //获取电池SHA1加密文
  117. bool get_cellEncryption;
  118. uint32_t get_cellEncryption_counts;
  119. //电池波特率是否锁定
  120. bool cell_bps_lock_success;
  121. //由于锁定波特率缺少反馈应答,5s内收到多于10包正确的数据则认为波特率锁定成功。
  122. short recv_celldata_counts;
  123. uint32_t recv_celldata_time;
  124. _CELL_INF okcell_inf;
  125. }_OKCELL_DEVICE;
  126. extern uint8_t group_num;
  127. #pragma pack()
  128. extern _OKCELL_DEVICE okcell_device1, okcell_device2;
  129. extern unsigned char okcell_sha1_out[20];
  130. #define CAN_OKCELL_SEND_ID (0x15350000)
  131. #pragma pack(1)
  132. struct OkCell_P80{
  133. char ok_s[4];
  134. char ok_cmd[2];
  135. char ok_len;
  136. char ok_flag;
  137. char ok_data;
  138. char ok_crc[2];
  139. char ok_e[3];
  140. };
  141. #pragma pack()
  142. extern struct OkCell_P80 okcell_p80;
  143. #pragma pack(1)
  144. struct OkCell_P82{
  145. char ok_s[4];
  146. char ok_cmd[2];
  147. char ok_len;
  148. char ok_flag;
  149. char ok_data[4];
  150. char ok_crc[2];
  151. char ok_e[3];
  152. };
  153. #pragma pack()
  154. extern struct OkCell_P82 okcell_p82;
  155. #pragma pack(1)
  156. struct OkCell_P83{
  157. char ok_s[4];
  158. char ok_cmd[2];
  159. char ok_len;
  160. char ok_flag;
  161. char ok_crc[2];
  162. char ok_e[3];
  163. };
  164. #pragma pack()
  165. extern struct OkCell_P83 okcell_p83;
  166. void OkcellCanRecvHookFunction(uint32_t cellCanID, uint8_t* data, uint8_t len);
  167. void send_msg_to_okcell(void);
  168. #endif