latest version

This commit is contained in:
2026-01-19 15:11:05 +03:00
parent 5ea401f34d
commit 9830ece932
26 changed files with 21459 additions and 21183 deletions

View File

@@ -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));