BMS_CAN0_gen_test_data.c 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /*
  2. * BMS_CAN0_gen_test_data.c
  3. * @brief functions to generate fake values to test startup and error routines without actual CAN commuication
  4. * Created on: May 17, 2016
  5. * Author: uacqk
  6. */
  7. #include "BMS_Master.h"
  8. /*
  9. * @brief function to generate a fake slave with fake data
  10. * @param s pointer to fake slave structure
  11. * @param default_voltage voltage to initialize cells
  12. * @param default_temperature to initialize cells
  13. * @param default_UBat voltage measured by UI-Board
  14. * @param default_UBat current measured by UI-Board
  15. */
  16. void gen_data_initSlave(MASTER_CAN0_STRUCT_t* s, uint16_t default_voltage, int8_t default_temperature, uint16_t default_Ubat, uint16_t default_Ibat) {
  17. uint8_t slaveNr=0;
  18. uint8_t cellNr=0;
  19. uint8_t telegramNr=0;
  20. BMS_CAN0_SLAVE_t* Slave;
  21. for(slaveNr=0;slaveNr<CAN0_MAX_NR_OF_SLAVES;slaveNr++) {
  22. Slave=&(s->Slave[slaveNr]);
  23. for(cellNr=0;cellNr<MAX_SLAVE_CELLS;cellNr++) {
  24. Slave->CellVoltage[cellNr]=default_voltage;
  25. Slave->CellTemp[cellNr]=default_temperature;
  26. }
  27. for(telegramNr=0;telegramNr<CAN0_NR_OF_TELEGRAMS;telegramNr++) {
  28. Slave->SlaveAliveCnt[telegramNr]=0;
  29. }
  30. Slave->HeatSinkTemp=default_temperature;
  31. Slave->Set_Mode=BMS_SLAVE_RUN;
  32. Slave->SlaveError=0;
  33. Slave->SlaveMode=BMS_SLAVE_RUN;
  34. Slave->MuxCounter=0;
  35. }
  36. s->UI_Board.Checksum=0;
  37. s->UI_Board.Ubatt=default_Ubat;
  38. s->UI_Board.Ibatt=default_Ibat;
  39. }
  40. void gen_data_setUbatt(MASTER_CAN0_STRUCT_t* s) {
  41. uint8_t slaveNr=0;
  42. BMS_CAN0_SLAVE_t* Slave;
  43. uint16_t Uges=0;
  44. uint8_t cellNr=0;
  45. for(slaveNr=0;slaveNr<CAN0_MAX_NR_OF_SLAVES-1;slaveNr++){
  46. if(s->Slave[slaveNr].SlaveConnectionState != NOT_CONNECTED) {
  47. Slave=&(s->Slave[slaveNr]);
  48. for(cellNr=0;cellNr<MAX_SLAVE_CELLS;cellNr++) {
  49. if(Slave->CellConnectionState[cellNr]==CELL_CONNECTED) {
  50. Uges+=Slave->CellVoltage[cellNr];
  51. }
  52. }
  53. }
  54. }
  55. s->UI_Board.Ubatt=Uges;
  56. }
  57. /*
  58. * @brief function to fill CAN RX Buffer 0 with test data
  59. * @param s pointer to test data
  60. * @param rx_ptr pointer to data receive Buffer
  61. */
  62. void gen_data_generate_CAN0_RX0_Telegram(BMS_CAN0_SLAVE_t* Slave,SLAVE_X0_5_BMS_TELEGRAM* rx_ptr) {
  63. rx_ptr->SlaveAlive=(Slave->SlaveAliveCnt[0]);
  64. rx_ptr->Vcell0=Slave->CellVoltage[0] >> 3;
  65. rx_ptr->Vcell1=Slave->CellVoltage[1];
  66. rx_ptr->Vcell2=Slave->CellVoltage[2];
  67. rx_ptr->Vcell3=Slave->CellVoltage[3];
  68. }
  69. /*
  70. * @brief function to fill CAN RX Buffer 0 with test data
  71. * @param s pointer to test data
  72. * @param rx_ptr pointer to data receive Buffer
  73. */
  74. void gen_data_generate_CAN0_RX1_Telegram(BMS_CAN0_SLAVE_t* Slave,SLAVE_X0_5_BMS_TELEGRAM* rx_ptr) {
  75. rx_ptr->SlaveAlive=Slave->SlaveAliveCnt[1];
  76. rx_ptr->Vcell0=Slave->CellVoltage[4] >> 3;
  77. rx_ptr->Vcell1=Slave->CellVoltage[5];
  78. rx_ptr->Vcell2=Slave->CellVoltage[6];
  79. rx_ptr->Vcell3=Slave->CellVoltage[7];
  80. }
  81. /*
  82. * @brief function to fill CAN RX Buffer 0 with test data
  83. * @param s pointer to test data
  84. * @param rx_ptr pointer to data receive Buffer
  85. */
  86. void gen_data_generate_CAN0_RX2_Telegram(BMS_CAN0_SLAVE_t* Slave,SLAVE_X0_5_BMS_TELEGRAM* rx_ptr) {
  87. rx_ptr->SlaveAlive=Slave->SlaveAliveCnt[2];
  88. rx_ptr->Vcell0=Slave->CellVoltage[8] >> 3;
  89. rx_ptr->Vcell1=Slave->CellVoltage[9];
  90. rx_ptr->Vcell2=Slave->CellVoltage[10];
  91. rx_ptr->Vcell3=Slave->CellVoltage[11];
  92. }
  93. /*
  94. * @brief function to fill CAN RX Buffer 0 with test data
  95. * @param s pointer to test data
  96. * @param rx_ptr pointer to data receive Buffer
  97. */
  98. void gen_data_generate_CAN0_RX3_Telegram(BMS_CAN0_SLAVE_t* Slave,SLAVE_X0_5_BMS_TELEGRAM* rx_ptr) {
  99. rx_ptr->SlaveAlive=Slave->SlaveAliveCnt[3];
  100. rx_ptr->Vcell0=Slave->CellVoltage[12]>> 3;
  101. rx_ptr->Vcell1=Slave->CellVoltage[13];
  102. rx_ptr->Vcell2=Slave->CellVoltage[14];
  103. rx_ptr->Vcell3=Slave->CellVoltage[15];
  104. }
  105. /*
  106. * @brief function to fill CAN RX Buffer 0 with test data
  107. * @param s pointer to test data
  108. * @param rx_ptr pointer to data receive Buffer
  109. */
  110. void gen_data_generate_CAN0_RX4_Telegram(BMS_CAN0_SLAVE_t* Slave,SLAVE_X0_5_BMS_TELEGRAM* rx_ptr) {
  111. rx_ptr->SlaveAlive=Slave->SlaveAliveCnt[4];
  112. rx_ptr->Vcell0=Slave->CellVoltage[16]>> 3;
  113. rx_ptr->Vcell1=Slave->CellVoltage[17];
  114. rx_ptr->Vcell2=Slave->CellVoltage[18];
  115. rx_ptr->Vcell3=Slave->CellVoltage[19];
  116. }
  117. /*
  118. * @brief function to fill CAN RX Buffer 0 with test data
  119. * @param s pointer to test data
  120. * @param rx_ptr pointer to data receive Buffer
  121. */
  122. void gen_data_generate_CAN0_RX5_Telegram(BMS_CAN0_SLAVE_t* Slave,SLAVE_X0_5_BMS_TELEGRAM* rx_ptr) {
  123. rx_ptr->SlaveAlive=Slave->SlaveAliveCnt[5];
  124. rx_ptr->Vcell0=Slave->CellVoltage[20]>> 3;
  125. rx_ptr->Vcell1=Slave->CellVoltage[21];
  126. rx_ptr->Vcell2=Slave->CellVoltage[22];
  127. rx_ptr->Vcell3=Slave->CellVoltage[23];
  128. }
  129. void gen_data_generate_CAN0_RX6_Telegram(BMS_CAN0_SLAVE_t* Slave,SLAVE_X6_BMS_TELEGRAM* rx_ptr) {
  130. rx_ptr->SlaveAlive=Slave->SlaveAliveCnt[6];
  131. rx_ptr->SlaveError=Slave->SlaveError;
  132. rx_ptr->SlaveMode=Slave->SlaveMode;
  133. }
  134. void gen_data_generate_CAN0_RX7_Telegram(BMS_CAN0_SLAVE_t* Slave,SLAVE_X7_BMS_TELEGRAM* rx_ptr) {
  135. uint8_t MuxCounter=rx_ptr->MuxCounter;
  136. rx_ptr->SlaveAlive=Slave->SlaveAliveCnt[7];
  137. rx_ptr->TempHeatSink=Slave->HeatSinkTemp;
  138. rx_ptr->TempSens0=Slave->CellTemp[MuxCounter*4+0];
  139. rx_ptr->TempSens1=Slave->CellTemp[MuxCounter*4+1];
  140. rx_ptr->TempSens2=Slave->CellTemp[MuxCounter*4+2];
  141. rx_ptr->TempSens3=Slave->CellTemp[MuxCounter*4+3];
  142. }
  143. void gen_data_generate_CAN0_UI_Telegram(BMS_CAN0_SLAVE_t* Slave,BMS_CAN0_UI_t* UI_Board,SLAVE_UI_BMS_TELEGRAM* rx_ptr){
  144. rx_ptr->Checksum=UI_Board->Checksum;
  145. rx_ptr->Ibatt=UI_Board->Ibatt;
  146. rx_ptr->Ubatt=UI_Board->Ubatt;
  147. rx_ptr->UIAlive=Slave->SlaveAliveCnt[0];
  148. rx_ptr->UIMode=Slave->SlaveMode;
  149. }