From 525770291c7a8dae4968cf7dcd9630cfa3e9b8bd Mon Sep 17 00:00:00 2001 From: tropxy Date: Sun, 2 Feb 2025 02:46:29 +0000 Subject: [PATCH] fixed hlc update, refactored logs and fixed cs limits update in evse_data --- iso15118/secc/controller/evse_data.py | 22 +++++++++++----------- iso15118/secc/controller/interface.py | 4 ++-- iso15118/secc/states/iso15118_20_states.py | 12 ++++++++---- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/iso15118/secc/controller/evse_data.py b/iso15118/secc/controller/evse_data.py index e7875159..37838fd9 100644 --- a/iso15118/secc/controller/evse_data.py +++ b/iso15118/secc/controller/evse_data.py @@ -286,17 +286,17 @@ def update_dc_charge_parameters( self.energy_to_be_delivered = ( dc_charge_parameter.evse_energy_to_be_delivered.get_decimal_value() ) - # Create the session limits based on the rated limits - # without exceeding the rated limits - for value in vars(rated_limits): - if hasattr(self.session_limits.dc_limits, value): - rated_value = getattr(rated_limits, value) - session_value = getattr(self.session_limits.dc_limits, value) - try: - if not session_value or (session_value > rated_value): - setattr(self.session_limits.dc_limits, value, rated_value) - except TypeError: - pass + # Create the session limits based on the rated limits + # without exceeding the rated limits + for value in vars(rated_limits): + if hasattr(self.session_limits.dc_limits, value): + rated_value = getattr(rated_limits, value) + session_value = getattr(self.session_limits.dc_limits, value) + try: + if not session_value or (session_value > rated_value): + setattr(self.session_limits.dc_limits, value, rated_value) + except TypeError: + pass def update_ac_charge_parameters_v20( self, diff --git a/iso15118/secc/controller/interface.py b/iso15118/secc/controller/interface.py index b4323f06..e21d5c46 100644 --- a/iso15118/secc/controller/interface.py +++ b/iso15118/secc/controller/interface.py @@ -532,7 +532,7 @@ def get_target_power_limits(): active_discharge_mode = True target_active_power = (-1) * evse_session_limits.max_discharge_power else: - logger.error("No Active Power setpoint is provided. Setting to 0.") + logger.warning("No Active Power setpoint is provided. Setting to 0.") target_active_power = 0 if (evse_session_limits.max_charge_reactive_power or 0) > 0 and ( @@ -552,7 +552,7 @@ def get_target_power_limits(): -1 ) * evse_session_limits.max_discharge_reactive_power else: - logger.error("No Reactive Power setpoint is provided. Setting to 0.") + logger.warning("No Reactive Power setpoint is provided. Setting to 0.") target_reactive_power = 0 # Conversion to RationalNumber diff --git a/iso15118/secc/states/iso15118_20_states.py b/iso15118/secc/states/iso15118_20_states.py index d0f8a873..94ccd519 100644 --- a/iso15118/secc/states/iso15118_20_states.py +++ b/iso15118/secc/states/iso15118_20_states.py @@ -1120,6 +1120,13 @@ async def process_message( ResponseCode.FAILED_SCHEDULE_SELECTION_INVALID, ) return + # According to section 8.5.6 in ISO 15118-20, the EV enters into HLC-C + # (High Level Controlled Charging) once + # PowerDeliveryRes(ResponseCode=OK) is sent with a ChargeProgress=Start + # To facilitate testing, we will set the HLC-C flag to True here + # but if the contactor wont close as expected, we set + # the HLC-C flag to False and stop the state machine immediately + await self.comm_session.evse_controller.set_hlc_charging(True) # [V2G20-1617] The EVCC shall signal CP State B before sending the # first PowerDeliveryReq with ChargeProgress equals "Start" within V2G @@ -1134,6 +1141,7 @@ async def process_message( ) if not await self.comm_session.evse_controller.is_contactor_closed(): + await self.comm_session.evse_controller.set_hlc_charging(False) self.stop_state_machine( "Contactor didn't close", message, @@ -1141,10 +1149,6 @@ async def process_message( ) return - # According to section 8.5.6 in ISO 15118-20, the EV enters into HLC-C - # (High Level Controlled Charging) once - # PowerDeliveryRes(ResponseCode=OK) is sent with a ChargeProgress=Start - await self.comm_session.evse_controller.set_hlc_charging(True) if self.comm_session.selected_energy_service.service in ( ServiceV20.AC,