BMS_Inverter_status.c 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /*
  2. * BMS_Inverter_status.c
  3. *
  4. * Created on: Nov 17, 2016
  5. * Author: le8041
  6. */
  7. #include "BMS_Master.h"
  8. uint32_t BMS_RCT_init_fsm(MASTER_CAN0_STRUCT_t* s) {
  9. s->inverterState.state=RCT_INV_INACTIVE;
  10. s->inverterState.inverterCanOnline=FALSE;
  11. s->inverterState.startupPwr=0;
  12. return TRUE;
  13. }
  14. /*
  15. * @brief describes state of RCT inverter for Error recovery reasons
  16. */
  17. uint32_t BMS_RCT_Inverter_fsm (MASTER_CAN0_STRUCT_t* s) {
  18. switch (s->inverterState.state) {
  19. case RCT_INV_INACTIVE:
  20. // Battery is not charging
  21. s->inverterState.inverterIsCharging=FALSE;
  22. // Inverter is off no relais connected and no communication and expected power has been updated
  23. if(s->inverterState.inverterCanOnline== TRUE && s->inverter.rxStruct.expectedInputPower > -1) {
  24. // Inverter has answered a CAN Telegram => CAN is connected
  25. s->inverterState.state=RCT_INV_CAN_CONNECTED;
  26. s->inverterState.startupPwr=s->inverter.rxStruct.expectedInputPower;
  27. return TRUE;
  28. }
  29. else{
  30. // do nothing and wait wait for can connection
  31. return TRUE;
  32. }
  33. return TRUE;
  34. break;
  35. case RCT_INV_CAN_CONNECTED:
  36. // Can is connected relais are open
  37. // Battery is not charging
  38. s->inverterState.inverterIsCharging=FALSE;
  39. if(s->inverterState.inverterCanOnline== FALSE) {
  40. // inverter communication has failed
  41. s->inverterState.state=RCT_INV_INACTIVE;
  42. return TRUE;
  43. }
  44. else if(s->relayState.HS_closed==TRUE && s->relayState.LS_closed ==TRUE) {
  45. // relays are connected now
  46. s->inverterState.state=RCT_INV_RELALY_CONNECTED;
  47. return TRUE;
  48. }
  49. else {
  50. //noting happended Wait
  51. return TRUE;
  52. }
  53. return TRUE;
  54. break;
  55. case RCT_INV_RELALY_CONNECTED:
  56. if(s->inverterState.inverterCanOnline== FALSE) {
  57. // inverter has been turned off or can communicatin has failed
  58. s->inverter.rxStruct.expectedInputPower = -1;
  59. s->inverterState.state=RCT_INV_INACTIVE;
  60. return TRUE;
  61. }
  62. else if(s->relayState.HS_closed==FALSE && s->relayState.LS_closed ==FALSE) {
  63. // error has oaaured and relays have been opend
  64. s->inverterState.state=RCT_INV_CAN_CONNECTED;
  65. return TRUE;
  66. }
  67. else {
  68. // nothing happend inverter fully operational
  69. s->inverterState.startupPwr=s->inverter.rxStruct.DCinputA_power + s->inverter.rxStruct.DCinputB_power;
  70. if(BMS_set_Error_check_if_stable_charge(s)) {
  71. // Battery is discharign
  72. s->inverterState.inverterIsCharging=TRUE;
  73. }
  74. else {
  75. s->inverterState.inverterIsCharging=FALSE;
  76. }
  77. return TRUE;
  78. }
  79. return TRUE;
  80. break;
  81. }
  82. }