瀏覽代碼

[Bug fixed][DM30][DW30][OCPP smart charging]: The OCPP smart charging current limit value is no march the value setup by txprofile.

2020.06.30 / TC Hsu

Actions: Correct the current limit value, it should use the limit value from the OCPP module directly, and the OCPP smart charging current limit value should compare with the internal current limit only in charging status, otherwise, some EV will not allow to charging if the current limit is 0A before charging stage. Like BMW i3, it is not allow to charging for maximum charging current 0A when parameter discovery stage, but it can be change to 0A when charging stage.

Image version    : N/A
Image checksum   : N/A

Hardware PWB P/N : N/A
Hardware Version : N/A

Files:

	modified:   EVSE/Projects/DM30/Apps/Module_EvComm.c
	modified:   EVSE/Projects/DM30/Apps/main.c
	modified:   EVSE/Projects/DW30/Apps/Module_EvComm.c
	modified:   EVSE/Projects/DW30/Apps/main.c
TC_Hsu 4 年之前
父節點
當前提交
b35e2dec20

+ 10 - 2
EVSE/Projects/DM30/Apps/Module_EvComm.c

@@ -3005,8 +3005,12 @@ void GetMaxVolAndCurMethod(byte index, float *vol, float *cur)
     if (maxChargingCur[index] != 0 && maxChargingCur[index] <= *cur)
         *cur = maxChargingCur[index];
 
-    if (_chargingData[index]->ChargingProfileCurrent != 0 && _chargingData[index]->ChargingProfileCurrent <= *cur)
+    if (_chargingData[index]->SystemStatus == S_CHARGING &&
+        _chargingData[index]->ChargingProfileCurrent >= 0 &&
+        _chargingData[index]->ChargingProfileCurrent <= *cur)
+    {
         *cur = _chargingData[index]->ChargingProfileCurrent;
+    }
 }
 
 void GetMaxPowerMethod(byte index, float *pow)
@@ -3014,8 +3018,12 @@ void GetMaxPowerMethod(byte index, float *pow)
     if (maxChargingPow != 0 && maxChargingPow <= *pow)
         *pow = maxChargingPow;
 
-    if (_chargingData[index]->ChargingProfilePower != 0 && _chargingData[index]->ChargingProfilePower <= *pow)
+    if (_chargingData[index]->SystemStatus == S_CHARGING &&
+        _chargingData[index]->ChargingProfilePower >= 0 &&
+        _chargingData[index]->ChargingProfilePower <= *pow)
+    {
         *pow = _chargingData[index]->ChargingProfilePower;
+    }
 }
 
 time_t GetRtcInfoForEpoch()

+ 4 - 7
EVSE/Projects/DM30/Apps/main.c

@@ -4493,16 +4493,13 @@ void CheckSmartChargeProfile(byte _index)
             if (_startCount < _maxCount)
             {
                 PRINTF_FUNC("*********Limit = %f \n", ShmOCPP16Data->SmartChargingProfile[_index].ChargingSchedule.ChargingSchedulePeriod[_startCount].Limit);
-                chargingInfo[_index]->ChargingProfilePower = ShmOCPP16Data->SmartChargingProfile[_index].ChargingSchedule.ChargingSchedulePeriod[_startCount].Limit * AC_OUTPUT_VOL;
-                if ((chargingInfo[_index]->EvBatterytargetVoltage * 10) > 0)
-                {
-                    chargingInfo[_index]->ChargingProfileCurrent = chargingInfo[_index]->ChargingProfilePower / (chargingInfo[_index]->EvBatterytargetVoltage * 10);
-                }
+                chargingInfo[_index]->ChargingProfileCurrent = ShmOCPP16Data->SmartChargingProfile[_index].ChargingSchedule.ChargingSchedulePeriod[_startCount].Limit * 10;
+                chargingInfo[_index]->ChargingProfilePower = ShmOCPP16Data->SmartChargingProfile[_index].ChargingSchedule.ChargingSchedulePeriod[_startCount].Limit * chargingInfo[_index]->EvBatterytargetVoltage / 100;
             }
             else
             {
-                chargingInfo[_index]->ChargingProfilePower = 0;
-                chargingInfo[_index]->ChargingProfileCurrent = 0;
+                chargingInfo[_index]->ChargingProfilePower = -1;
+                chargingInfo[_index]->ChargingProfileCurrent = -1;
             }
 
             PRINTF_FUNC("ChargingProfilePower = %f \n", chargingInfo[_index]->ChargingProfilePower);

+ 10 - 2
EVSE/Projects/DW30/Apps/Module_EvComm.c

@@ -3005,8 +3005,12 @@ void GetMaxVolAndCurMethod(byte index, float *vol, float *cur)
     if (maxChargingCur[index] != 0 && maxChargingCur[index] <= *cur)
         *cur = maxChargingCur[index];
 
-    if (_chargingData[index]->ChargingProfileCurrent != 0 && _chargingData[index]->ChargingProfileCurrent <= *cur)
+    if (_chargingData[index]->SystemStatus == S_CHARGING &&
+        _chargingData[index]->ChargingProfileCurrent >= 0 &&
+        _chargingData[index]->ChargingProfileCurrent <= *cur)
+    {
         *cur = _chargingData[index]->ChargingProfileCurrent;
+    }
 }
 
 void GetMaxPowerMethod(byte index, float *pow)
@@ -3014,8 +3018,12 @@ void GetMaxPowerMethod(byte index, float *pow)
     if (maxChargingPow != 0 && maxChargingPow <= *pow)
         *pow = maxChargingPow;
 
-    if (_chargingData[index]->ChargingProfilePower != 0 && _chargingData[index]->ChargingProfilePower <= *pow)
+    if (_chargingData[index]->SystemStatus == S_CHARGING &&
+        _chargingData[index]->ChargingProfilePower >= 0 &&
+        _chargingData[index]->ChargingProfilePower <= *pow)
+    {
         *pow = _chargingData[index]->ChargingProfilePower;
+    }
 }
 
 time_t GetRtcInfoForEpoch()

+ 4 - 7
EVSE/Projects/DW30/Apps/main.c

@@ -4493,16 +4493,13 @@ void CheckSmartChargeProfile(byte _index)
             if (_startCount < _maxCount)
             {
                 PRINTF_FUNC("*********Limit = %f \n", ShmOCPP16Data->SmartChargingProfile[_index].ChargingSchedule.ChargingSchedulePeriod[_startCount].Limit);
-                chargingInfo[_index]->ChargingProfilePower = ShmOCPP16Data->SmartChargingProfile[_index].ChargingSchedule.ChargingSchedulePeriod[_startCount].Limit * AC_OUTPUT_VOL;
-                if ((chargingInfo[_index]->EvBatterytargetVoltage * 10) > 0)
-                {
-                    chargingInfo[_index]->ChargingProfileCurrent = chargingInfo[_index]->ChargingProfilePower / (chargingInfo[_index]->EvBatterytargetVoltage * 10);
-                }
+                chargingInfo[_index]->ChargingProfileCurrent = ShmOCPP16Data->SmartChargingProfile[_index].ChargingSchedule.ChargingSchedulePeriod[_startCount].Limit * 10;
+                chargingInfo[_index]->ChargingProfilePower = ShmOCPP16Data->SmartChargingProfile[_index].ChargingSchedule.ChargingSchedulePeriod[_startCount].Limit * chargingInfo[_index]->EvBatterytargetVoltage / 100;
             }
             else
             {
-                chargingInfo[_index]->ChargingProfilePower = 0;
-                chargingInfo[_index]->ChargingProfileCurrent = 0;
+                chargingInfo[_index]->ChargingProfilePower = -1;
+                chargingInfo[_index]->ChargingProfileCurrent = -1;
             }
 
             PRINTF_FUNC("ChargingProfilePower = %f \n", chargingInfo[_index]->ChargingProfilePower);