12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /*
- * BMS_Inverter_status.c
- *
- * Created on: Nov 17, 2016
- * Author: le8041
- */
- #include "BMS_Master.h"
- uint32_t BMS_RCT_init_fsm(MASTER_CAN0_STRUCT_t* s) {
- s->inverterState.state=RCT_INV_INACTIVE;
- s->inverterState.inverterCanOnline=FALSE;
- s->inverterState.startupPwr=0;
- return TRUE;
- }
- /*
- * @brief describes state of RCT inverter for Error recovery reasons
- */
- uint32_t BMS_RCT_Inverter_fsm (MASTER_CAN0_STRUCT_t* s) {
- switch (s->inverterState.state) {
- case RCT_INV_INACTIVE:
- // Battery is not charging
- s->inverterState.inverterIsCharging=FALSE;
- // Inverter is off no relais connected and no communication and expected power has been updated
- if(s->inverterState.inverterCanOnline== TRUE && s->inverter.rxStruct.expectedInputPower > -1) {
- // Inverter has answered a CAN Telegram => CAN is connected
- s->inverterState.state=RCT_INV_CAN_CONNECTED;
- s->inverterState.startupPwr=s->inverter.rxStruct.expectedInputPower;
- return TRUE;
- }
- else{
- // do nothing and wait wait for can connection
- return TRUE;
- }
- return TRUE;
- break;
- case RCT_INV_CAN_CONNECTED:
- // Can is connected relais are open
- // Battery is not charging
- s->inverterState.inverterIsCharging=FALSE;
- if(s->inverterState.inverterCanOnline== FALSE) {
- // inverter communication has failed
- s->inverterState.state=RCT_INV_INACTIVE;
- return TRUE;
- }
- else if(s->relayState.HS_closed==TRUE && s->relayState.LS_closed ==TRUE) {
- // relays are connected now
- s->inverterState.state=RCT_INV_RELALY_CONNECTED;
- return TRUE;
- }
- else {
- //noting happended Wait
- return TRUE;
- }
- return TRUE;
- break;
- case RCT_INV_RELALY_CONNECTED:
-
- if(s->inverterState.inverterCanOnline== FALSE) {
- // inverter has been turned off or can communicatin has failed
- s->inverter.rxStruct.expectedInputPower = -1;
- s->inverterState.state=RCT_INV_INACTIVE;
- return TRUE;
- }
- else if(s->relayState.HS_closed==FALSE && s->relayState.LS_closed ==FALSE) {
- // error has oaaured and relays have been opend
- s->inverterState.state=RCT_INV_CAN_CONNECTED;
- return TRUE;
- }
- else {
- // nothing happend inverter fully operational
- s->inverterState.startupPwr=s->inverter.rxStruct.DCinputA_power + s->inverter.rxStruct.DCinputB_power;
- if(BMS_set_Error_check_if_stable_charge(s)) {
- // Battery is discharign
- s->inverterState.inverterIsCharging=TRUE;
- }
- else {
- s->inverterState.inverterIsCharging=FALSE;
- }
- return TRUE;
- }
-
- return TRUE;
- break;
- }
- }
|