latest version
This commit is contained in:
@@ -56,6 +56,8 @@ uint32_t GBT_TimeChargingStarted;
|
||||
uint32_t GBT_StopCauseCode;
|
||||
uint32_t GBT_ErrorCode;
|
||||
|
||||
GBT_StopSource_t GBT_StopSource;
|
||||
|
||||
extern GBT_EDCAN_Output_t GBT_EDCAN_Output;
|
||||
extern GBT_EDCAN_Input_t GBT_EDCAN_Input;
|
||||
|
||||
@@ -64,11 +66,23 @@ void GBT_Init(){
|
||||
GBT_State = GBT_DISABLED;
|
||||
GBT_EDCAN_Input.chargeControl = CHARGING_NOT_ALLOWED;
|
||||
GBT_Reset();
|
||||
|
||||
|
||||
GBT_MaxLoad.maxOutputVoltage = 1000*10;
|
||||
GBT_MaxLoad.minOutputVoltage = 1500; //150V
|
||||
//GBT_MaxLoad[conn].maxOutputCurrent = 4000 - (GBT_MAX_CURRENT*10); //250A
|
||||
GBT_MaxLoad.maxOutputCurrent = 4000 - (100*10*2); //200A
|
||||
GBT_MaxLoad.minOutputCurrent = 3990; //400 - 1A
|
||||
|
||||
//TODO Linux registers
|
||||
GBT_ChargerInfo.chargerLocation[0] = 'R';
|
||||
GBT_ChargerInfo.chargerLocation[1] = 'U';
|
||||
GBT_ChargerInfo.chargerLocation[2] = 'S';
|
||||
GBT_ChargerInfo.chargerNumber = 00001;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void GBT_ChargerTask(){
|
||||
|
||||
//GBT_LockTask();
|
||||
@@ -226,8 +240,8 @@ void GBT_ChargerTask(){
|
||||
GBT_EDCAN_Output.enablePSU = 1;
|
||||
|
||||
//TODO: Isolation test trigger
|
||||
if(GBT_EDCAN_Input.chargingError == GBT_ERR_INSULATION){
|
||||
GBT_Stop(GBT_CST_OTHERFALUT);
|
||||
if(GBT_EDCAN_Input.chargingError != CONN_NO_ERROR){
|
||||
GBT_StopEVSE(GBT_CST_OTHERFALUT);
|
||||
}
|
||||
|
||||
if(GBT_StateTick()>5000){
|
||||
@@ -341,16 +355,20 @@ void GBT_ChargerTask(){
|
||||
case GBT_S10_CHARGING:
|
||||
//CHARGING
|
||||
//TODO BCL BCS BSM missing ERRORS
|
||||
if(GBT_EDCAN_Input.chargeControl == CHARGING_NOT_ALLOWED) GBT_Stop(GBT_CST_SUSPENDS_ARTIFICIALLY);
|
||||
if(GBT_EDCAN_Input.chargeControl == FORCE_UNLOCK) GBT_Stop(GBT_CST_SUSPENDS_ARTIFICIALLY);//GBT_ForceStop();
|
||||
if(GBT_LockState.error) GBT_Stop(GBT_CST_OTHERFALUT);
|
||||
if(GBT_EDCAN_Input.chargeControl == CHARGING_NOT_ALLOWED) GBT_StopOCPP(GBT_CST_SUSPENDS_ARTIFICIALLY);
|
||||
if(GBT_EDCAN_Input.chargeControl == FORCE_UNLOCK) GBT_StopOCPP(GBT_CST_SUSPENDS_ARTIFICIALLY); // --> Finished
|
||||
if(GBT_LockState.error) {
|
||||
GBT_StopEVSE(GBT_CST_OTHERFALUT); // --> Suspend EVSE
|
||||
GBT_EDCAN_Output.outputError = CONN_ERR_LOCK;
|
||||
}
|
||||
if((GBT_ReadTemp(0) > 90) || (GBT_ReadTemp(1) > 90)) {
|
||||
GBT_Stop(GBT_CST_CONNECTOR_OVER_TEMP);
|
||||
GBT_StopEVSE(GBT_CST_CONNECTOR_OVER_TEMP);
|
||||
GBT_EDCAN_Output.outputError = CONN_ERR_CONN_TEMP;
|
||||
EDCAN_printf(LOG_WARN, "Connector overheat %d %d\n", GBT_ReadTemp(0), GBT_ReadTemp(1));
|
||||
}
|
||||
if(GBT_EDCAN_Input.chargingError == GBT_ERR_INSULATION) {
|
||||
GBT_Stop(GBT_CST_OTHERFALUT);
|
||||
EDCAN_printf(LOG_WARN, "Isolation error\n");
|
||||
if(GBT_EDCAN_Input.chargingError != CONN_NO_ERROR){ // --> Suspend EVSE
|
||||
GBT_StopEVSE(GBT_CST_OTHERFALUT);
|
||||
// EDCAN_printf(LOG_WARN, "Isolation error\n");
|
||||
}
|
||||
|
||||
//GBT_ChargerCurrentStatus.chargingPermissible = 0b1111111111111100;//NOT PERMITTED
|
||||
@@ -365,7 +383,14 @@ void GBT_ChargerTask(){
|
||||
|
||||
if(j_rx.state == 0) GBT_SendCCS();
|
||||
|
||||
GBT_Delay(50);
|
||||
if(j_rx.state == 0) {
|
||||
GBT_SendCCS();
|
||||
GBT_Delay(49);
|
||||
}else{
|
||||
GBT_Delay(10); // Resend packet if not sent
|
||||
// log_printf(LOG_WARN, "Resend packet\n");
|
||||
}
|
||||
|
||||
//TODO: снижение тока если перегрев контактов
|
||||
|
||||
break;
|
||||
@@ -408,7 +433,10 @@ void GBT_ChargerTask(){
|
||||
break;
|
||||
|
||||
case GBT_COMPLETE:
|
||||
if(connectorState != CONN_Finishing) GBT_SwitchState(GBT_DISABLED);
|
||||
if(connectorState != CONN_Finishing) {
|
||||
GBT_SwitchState(GBT_DISABLED);
|
||||
GBT_Reset();//CHECK
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -422,23 +450,23 @@ void GBT_SwitchState(gbtState_t state){
|
||||
GBT_State = state;
|
||||
ED_status = state;
|
||||
GBT_state_tick = HAL_GetTick();
|
||||
if(GBT_State == GBT_DISABLED) printf ("GBT_DISABLED\n");
|
||||
// if(GBT_State == GBT_DISABLED) printf ("GBT_DISABLED\n");
|
||||
// if(GBT_State == GBT_S0_UNCONNECTED) printf ("GBT_S0_UNCONNECTED\n");
|
||||
// if(GBT_State == GBT_S1_CONNECTED) printf ("GBT_S1_CONNECTED\n");
|
||||
// if(GBT_State == GBT_S2_LOCKED) printf ("GBT_S2_LOCKED\n");
|
||||
if(GBT_State == GBT_S3_STARTED) printf ("GBT_S3_STARTED\n");
|
||||
if(GBT_State == GBT_S31_WAIT_BHM) printf ("GBT_S31_WAIT_BHM\n");
|
||||
if(GBT_State == GBT_S4_ISOTEST) printf ("GBT_S4_ISOTEST\n");
|
||||
if(GBT_State == GBT_S5_BAT_INFO) printf ("GBT_S5_BAT_INFO\n");
|
||||
if(GBT_State == GBT_S6_BAT_STAT) printf ("GBT_S6_BAT_STAT\n");
|
||||
if(GBT_State == GBT_S7_BMS_WAIT) printf ("GBT_S7_BMS_WAIT\n");
|
||||
if(GBT_State == GBT_S8_INIT_CHARGER)printf ("GBT_S8_INIT_CHARGER\n");
|
||||
if(GBT_State == GBT_S9_WAIT_BCL) printf ("GBT_S9_WAIT_BCL\n");
|
||||
if(GBT_State == GBT_S10_CHARGING) printf ("GBT_S10_CHARGING\n");
|
||||
if(GBT_State == GBT_STOP) printf ("GBT_STOP\n");
|
||||
if(GBT_State == GBT_STOP_CSD) printf ("GBT_STOP_CSD\n");
|
||||
if(GBT_State == GBT_ERROR) printf ("GBT_ERROR\n");
|
||||
if(GBT_State == GBT_COMPLETE) printf ("GBT_COMPLETE\n");
|
||||
// if(GBT_State == GBT_S3_STARTED) printf ("GBT_S3_STARTED\n");
|
||||
// if(GBT_State == GBT_S31_WAIT_BHM) printf ("GBT_S31_WAIT_BHM\n");
|
||||
// if(GBT_State == GBT_S4_ISOTEST) printf ("GBT_S4_ISOTEST\n");
|
||||
// if(GBT_State == GBT_S5_BAT_INFO) printf ("GBT_S5_BAT_INFO\n");
|
||||
// if(GBT_State == GBT_S6_BAT_STAT) printf ("GBT_S6_BAT_STAT\n");
|
||||
// if(GBT_State == GBT_S7_BMS_WAIT) printf ("GBT_S7_BMS_WAIT\n");
|
||||
// if(GBT_State == GBT_S8_INIT_CHARGER)printf ("GBT_S8_INIT_CHARGER\n");
|
||||
// if(GBT_State == GBT_S9_WAIT_BCL) printf ("GBT_S9_WAIT_BCL\n");
|
||||
// if(GBT_State == GBT_S10_CHARGING) printf ("GBT_S10_CHARGING\n");
|
||||
// if(GBT_State == GBT_STOP) printf ("GBT_STOP\n");
|
||||
// if(GBT_State == GBT_STOP_CSD) printf ("GBT_STOP_CSD\n");
|
||||
// if(GBT_State == GBT_ERROR) printf ("GBT_ERROR\n");
|
||||
// if(GBT_State == GBT_COMPLETE) printf ("GBT_COMPLETE\n");
|
||||
|
||||
if(GBT_State == GBT_DISABLED) EDCAN_printf(LOG_INFO, "GBT_DISABLED\n");
|
||||
if(GBT_State == GBT_S3_STARTED) EDCAN_printf(LOG_INFO, "GBT_S3_STARTED\n");
|
||||
@@ -467,24 +495,44 @@ void GBT_Delay(uint32_t delay){
|
||||
GBT_delay = delay;
|
||||
}
|
||||
|
||||
void GBT_Stop(uint32_t causecode){
|
||||
void GBT_StopEV(uint32_t causecode){ // --> Suspend EV
|
||||
if (GBT_EDCAN_Input.chargingError || GBT_EDCAN_Output.outputError){
|
||||
GBT_StopSource = GBT_STOP_EVSE;
|
||||
}else{
|
||||
GBT_StopSource = GBT_STOP_EV;
|
||||
}
|
||||
GBT_StopCauseCode = causecode;
|
||||
if(GBT_State != GBT_STOP) GBT_SwitchState(GBT_STOP);
|
||||
}
|
||||
|
||||
void GBT_Error(uint32_t errorcode){
|
||||
EDCAN_printf(LOG_WARN, "GBT Error code: 0x%X\n", errorcode);
|
||||
GBT_ErrorCode = errorcode;
|
||||
GBT_SwitchState(GBT_ERROR);
|
||||
void GBT_StopEVSE(uint32_t causecode){ // --> Suspend EVSE
|
||||
GBT_StopSource = GBT_STOP_EVSE;
|
||||
GBT_StopCauseCode = causecode;
|
||||
if(GBT_State != GBT_STOP) GBT_SwitchState(GBT_STOP);
|
||||
}
|
||||
|
||||
void GBT_ForceStop(){
|
||||
void GBT_StopOCPP(uint32_t causecode){ // --> Finished
|
||||
GBT_StopSource = GBT_STOP_OCPP;
|
||||
GBT_StopCauseCode = causecode;
|
||||
if(GBT_State != GBT_STOP) GBT_SwitchState(GBT_STOP);
|
||||
}
|
||||
|
||||
void GBT_ForceStop(){ // --> Suspend EV
|
||||
GBT_StopSource = GBT_STOP_EV;
|
||||
GBT_EDCAN_Output.enablePSU = 0;
|
||||
GBT_SwitchState(GBT_COMPLETE);
|
||||
GBT_Lock(0);
|
||||
RELAY_Write(RELAY_AUX, 0);
|
||||
}
|
||||
|
||||
void GBT_Error(uint32_t errorcode){ // --> Suspend EV
|
||||
GBT_StopSource = GBT_STOP_EV;
|
||||
EDCAN_printf(LOG_WARN, "GBT Error code: 0x%X\n", errorcode);
|
||||
GBT_ErrorCode = errorcode;
|
||||
GBT_SwitchState(GBT_ERROR);
|
||||
}
|
||||
|
||||
|
||||
void GBT_Reset(){
|
||||
GBT_BAT_INFO_recv = 0;
|
||||
GBT_BAT_STAT_recv = 0;
|
||||
@@ -492,6 +540,11 @@ void GBT_Reset(){
|
||||
GBT_BHM_recv = 0;
|
||||
GBT_BSD_recv = 0;
|
||||
EV_ready = 0;
|
||||
GBT_EDCAN_Output.chargingPercentage = 0;
|
||||
GBT_EDCAN_Output.enablePSU = 0;
|
||||
GBT_EDCAN_Output.requestedCurrent = 0;
|
||||
GBT_EDCAN_Output.requestedVoltage = 500;
|
||||
GBT_EDCAN_Output.outputError = 0;
|
||||
memset(&GBT_EVInfo, 0, sizeof (GBT_EVInfo));
|
||||
memset(&GBT_BATStat, 0, sizeof (GBT_BATStat));
|
||||
memset(&GBT_ReqPower, 0, sizeof (GBT_ReqPower));
|
||||
|
||||
Reference in New Issue
Block a user