Explorar el Código

[Add][Modularization][Module_OcppBackend / Module_OcppBackend20]

2021.08.11 / Folus Wen

Actions:
1. After receive trigger StatusNotification message, OCPP module will announce CSU to check CHAdeMO connector status.

Files:
1. As follow commit history

Image version: D0.00.XX.XXXX.XX
Image checksum: XXXXXXXX

Hardware PWB P/N : XXXXXXX
Hardware Version : XXXXXXX
FolusWen hace 3 años
padre
commit
9469ca3b7c

+ 19 - 14
EVSE/Modularization/ocpp20/MessageHandler.c

@@ -871,7 +871,8 @@ typedef union
 		unsigned char TransactionEventReq:1;		//bit 3,
 		unsigned char SampleMeterReq:1;				//bit 4,
 		unsigned char ClockAlignMeterReq:1;			//bit 5,
-		unsigned char :2;
+		unsigned char TriggerStatusNotificationReq:1;	//bit 6,
+		unsigned char :1;							//reserve
 	}bits[CONNECTOR_QUANTITY];
 }CpinitiateMsg;
 
@@ -5856,9 +5857,8 @@ void CheckSystemValue(void)
 
 		}
 
-		if(isWebsocketSendable && (server_sign == TRUE) &&
-		   (cpinitateMsg.bits[gun_index].StatusNotificationReq == ON) &&
-		   ((time((time_t*)NULL)-clientTime.StatusNotification[gun_index]) > 5) )
+		if(isWebsocketSendable && (server_sign == TRUE) && ((time((time_t*)NULL)-clientTime.StatusNotification[gun_index]) > 5) &&
+		   ((cpinitateMsg.bits[gun_index].StatusNotificationReq == ON) || (cpinitateMsg.bits[gun_index].TriggerStatusNotificationReq == ON)) )
 		{
 			if(SystemInitial > 0)
 				SystemInitial -= 1;
@@ -8571,11 +8571,11 @@ S_FAULT                 =12
 	}
 	//it's option
 	if((strstr((char *)ShmOCPP20Data->StatusNotification[gun_index].connectorStatus, ConnectorStatusEnumTypeStr[currentStatus]) != NULL) &&
-		!ShmOCPP20Data->CsMsg.bits[gun_index].TriggerMessageReq)
+		!cpinitateMsg.bits[gun_index].TriggerStatusNotificationReq)
 	{
 		isStateChanged = FALSE;
 	}
-	ShmOCPP20Data->CsMsg.bits[gun_index].TriggerMessageReq = 0;
+	cpinitateMsg.bits[gun_index].TriggerStatusNotificationReq = OFF;
 
 	strcpy((char *)ShmOCPP20Data->StatusNotification[gun_index].connectorStatus, ConnectorStatusEnumTypeStr[currentStatus]);
 	random_uuid(guid);
@@ -8600,7 +8600,8 @@ S_FAULT                 =12
 	}
 	else
 	{
-		cpinitateMsg.bits[gun_index].StatusNotificationReq = 0;
+		cpinitateMsg.bits[gun_index].StatusNotificationReq = OFF;
+		cpinitateMsg.bits[gun_index].TriggerStatusNotificationReq = OFF;
 		result = PASS;
 	}
 
@@ -15397,17 +15398,15 @@ int handleTriggerMessageRequest(char *uuid, char *payload)
 	{
 		if(connectorIdIsNULL == FALSE)
 		{
-			if((connectorIdInt > 0) && ((connectorIdInt -1) < gunTotalNumber))
+			if((connectorIdInt > 0) && ((connectorIdInt-1) < gunTotalNumber))
 			{
-				//sendMeterValuesRequest((connectorIdInt -1), ReadingContext_Trigger);
-				cpinitateMsg.bits[connectorIdInt -1].TriggerMeterValueReq = ON;
+				cpinitateMsg.bits[connectorIdInt-1].TriggerMeterValueReq = ON;
 			}
 		}
 		else
 		{
 			for(int idx=0;idx< gunTotalNumber;idx++)
 			{
-				//sendMeterValuesRequest(idx, ReadingContext_Trigger);
 				cpinitateMsg.bits[idx].TriggerMeterValueReq = ON;
 			}
 		}
@@ -15416,15 +15415,19 @@ int handleTriggerMessageRequest(char *uuid, char *payload)
 	{
 		if(connectorIdIsNULL == FALSE)
 		{
-			if((connectorIdInt > 0) && ((connectorIdInt -1) < gunTotalNumber))
+			if((connectorIdInt > 0) && ((connectorIdInt-1) < gunTotalNumber))
 			{
-				cpinitateMsg.bits[connectorIdInt -1].StatusNotificationReq = ON;
+				cpinitateMsg.bits[connectorIdInt-1].TriggerStatusNotificationReq = ON;
+				//clientTime.StatusNotification[connectorIdInt-1] = time((time_t*)NULL);
 			}
 		}
 		else
 		{
 			for(int idx=0;idx< gunTotalNumber;idx++)
-				cpinitateMsg.bits[idx].StatusNotificationReq = ON;
+			{
+				cpinitateMsg.bits[idx].TriggerStatusNotificationReq = ON;
+				//clientTime.StatusNotification[idx] = time((time_t*)NULL);
+			}
 		}
 	}
 	else if(strcmp((char*)ShmOCPP20Data->TriggerMessage.requestedMessage, MessageTriggerEnumTypeStr[MessageTriggerEnumType_SignChargingStationCertificate]) == 0 )
@@ -16329,6 +16332,7 @@ void handleStatusNotificationResponse(char *payload, int gun_index)
 	DEBUG_INFO("handleStatusNotificationResponse...gun_index: %d\n", gun_index);
 
 	cpinitateMsg.bits[gun_index].StatusNotificationReq = OFF;
+	cpinitateMsg.bits[gun_index].TriggerStatusNotificationReq = OFF;
 	cpinitateMsg.bits[gun_index].StatusNotificationConf = ON;
 }
 
@@ -17490,6 +17494,7 @@ void InitialSystemValue(void)
 
 	for(int gun_index=0; gun_index < gunTotalNumber; gun_index++ )
 	{
+		cpinitateMsg.bits[gun_index].TriggerStatusNotificationReq = OFF;
 		cpinitateMsg.bits[gun_index].StatusNotificationReq = OFF;
 		cpinitateMsg.bits[gun_index].StatusNotificationConf = OFF;
 		//clientTime.MeterValues[gun_index] = time((time_t*)NULL);

+ 17 - 22
EVSE/Modularization/ocppfiles/MessageHandler.c

@@ -67,7 +67,6 @@ static char CurrentChargingProfileScheduleStr[30]	= {0};
 // OCPP status/previous related variables
 //========================================
 static int GunStatusInterval 																= 10;
-static uint8_t statusModeChage[CONNECTOR_QUANTITY] 	= {FALSE};
 static uint8_t ChademoPreviousSystemStatus[(CHAdeMO_QUANTITY>0?CHAdeMO_QUANTITY:1)];
 static uint8_t CcsPreviousSystemStatus[(CCS_QUANTITY>0?CCS_QUANTITY:1)];
 static uint8_t GbPreviousSystemStatus[(GB_QUANTITY>0?GB_QUANTITY:1)];
@@ -129,10 +128,11 @@ typedef union
 	struct
 	{
 		//CsMsgValue[0]
-		unsigned char StatusNotificationReq:1;		//bit 0,
-		unsigned char StatusNotificationConf:1;		//bit 1,
-		unsigned char TriggerMeterValue:1;			//bit 2,
-		unsigned char :5;	//bit 5~7
+		unsigned char StatusNotificationReq:1;			//bit 0,
+		unsigned char StatusNotificationConf:1;			//bit 1,
+		unsigned char TriggerMeterValue:1;				//bit 2,
+		unsigned char TriggerStatusNotificationReq:1;	//bit 3,
+		unsigned char :4;	//bit 4~7
 	}bits[CONNECTOR_QUANTITY];
 }CpinitiateMsg;
 
@@ -3007,7 +3007,6 @@ void CheckSystemValue(void)
 						ChademoPreviousSystemStatus[index] = ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].SystemStatus;
 						ChademoPreviousConnectorPlugIn[index] = ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].ConnectorPlugIn;
 						cpinitateMsg.bits[gun_index].StatusNotificationReq = 1;
-						statusModeChage[gun_index] = TRUE;
 					}
 
 					if((ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].Index == tempIndex) && ((ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].SystemStatus == SYS_MODE_COMPLETE) || (ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].SystemStatus <= SYS_MODE_PREPARING))) // complete
@@ -3065,7 +3064,6 @@ void CheckSystemValue(void)
 						CcsPreviousSystemStatus[index] = ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].SystemStatus;
 						CcsPreviousConnectorPlugIn[index] = ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].ConnectorPlugIn;
 						cpinitateMsg.bits[gun_index].StatusNotificationReq = 1;
-						statusModeChage[gun_index] = TRUE;
 					}
 
 					if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].Index == tempIndex) && ((ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].SystemStatus == SYS_MODE_COMPLETE) || (ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].SystemStatus <= SYS_MODE_PREPARING))) // complete
@@ -3122,7 +3120,6 @@ void CheckSystemValue(void)
 						GbPreviousSystemStatus[index] = ShmSysConfigAndInfo->SysInfo.GbChargingData[index].SystemStatus;
 						GbPreviousConnectorPlugIn[index] = ShmSysConfigAndInfo->SysInfo.GbChargingData[index].ConnectorPlugIn;
 						cpinitateMsg.bits[gun_index].StatusNotificationReq = 1;
-						statusModeChage[gun_index] = TRUE;
 					}
 
 					if((ShmSysConfigAndInfo->SysInfo.GbChargingData[index].Index == tempIndex) && ((ShmSysConfigAndInfo->SysInfo.GbChargingData[index].SystemStatus == SYS_MODE_COMPLETE) || (ShmSysConfigAndInfo->SysInfo.GbChargingData[index].SystemStatus <= SYS_MODE_PREPARING))) // complete
@@ -3171,7 +3168,6 @@ void CheckSystemValue(void)
 						DoPreviousSystemStatus[index] = ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.SystemStatus;
 						DoPreviousConnectorPlugIn[index] = ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.ConnectorPlugIn;
 						cpinitateMsg.bits[gun_index].StatusNotificationReq = 1;
-						statusModeChage[gun_index] = TRUE;
 					}
 
 					if((ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.Index == tempIndex) && ((ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.SystemStatus == SYS_MODE_COMPLETE) || (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.SystemStatus <= SYS_MODE_PREPARING))) // complete
@@ -3227,7 +3223,6 @@ void CheckSystemValue(void)
 						AcPreviousSystemStatus[index] = ShmSysConfigAndInfo->SysInfo.AcChargingData[index].SystemStatus;
 						AcPreviousConnectorPlugIn[index] = ShmSysConfigAndInfo->SysInfo.AcChargingData[index].PilotState;
 						cpinitateMsg.bits[gun_index].StatusNotificationReq = 1;
-						statusModeChage[gun_index] = TRUE;
 					}
 
 					if((ShmSysConfigAndInfo->SysInfo.AcChargingData[index].Index == tempIndex) && ((ShmSysConfigAndInfo->SysInfo.AcChargingData[index].SystemStatus == SYS_MODE_COMPLETE) || (ShmSysConfigAndInfo->SysInfo.AcChargingData[index].SystemStatus <= SYS_MODE_PREPARING))) // complete
@@ -3253,11 +3248,9 @@ void CheckSystemValue(void)
 			}// END
 		}
 
-		if(isWebsocketSendable && (server_sign == TRUE) &&
+		if(isWebsocketSendable && (server_sign == TRUE) && ((time((time_t*)NULL)-clientTime.StatusNotification[gun_index]) > 5) &&
 			(
-				(statusModeChage[gun_index] == TRUE) ||
-				//((time((time_t*)NULL)-clientTime.StatusNotification[gun_index]) > (server_cycle_Status + (GunStatusInterval*gun_index))) ||
-				((cpinitateMsg.bits[gun_index].StatusNotificationReq == 1) && ((time((time_t*)NULL)-clientTime.StatusNotification[gun_index]) > 5))
+				(cpinitateMsg.bits[gun_index].StatusNotificationReq == 1) || (cpinitateMsg.bits[gun_index].TriggerStatusNotificationReq == 1)
 			)
 		  )
 		{
@@ -3266,7 +3259,6 @@ void CheckSystemValue(void)
 
 			sendStatusNotificationRequest(gun_index);
 			clientTime.StatusNotification[gun_index] = time((time_t*)NULL);
-			statusModeChage[gun_index] = FALSE;
 		}
 
 		//==============================================
@@ -4447,11 +4439,11 @@ S_FAULT                 =12
 
 	//it's option
 	if(((strstr((char *)ShmOCPP16Data->StatusNotification[gun_index].Status, ChargePointStatusStr[currentStatus]) != NULL) || (((currentStatus == SuspendedEV) || (currentStatus == SuspendedEVSE)) && ShmOCPP16Data->CsMsg.bits[gun_index].RemoteStopTransactionReq)) &&
-		!ShmOCPP16Data->CsMsg.bits[gun_index].TriggerMessageReq)
+		!cpinitateMsg.bits[gun_index].TriggerStatusNotificationReq)
 	{
 		isStateChanged = FALSE;
 	}
-	ShmOCPP16Data->CsMsg.bits[gun_index].TriggerMessageReq = 0;
+	cpinitateMsg.bits[gun_index].TriggerStatusNotificationReq = 0;
 
 	strcpy((char *)ShmOCPP16Data->StatusNotification[gun_index].Timestamp, buf);
 	strcpy((char *)ShmOCPP16Data->StatusNotification[gun_index].VendorId, (char*)ShmSysConfigAndInfo->SysConfig.chargePointVendor);
@@ -4485,6 +4477,7 @@ S_FAULT                 =12
 	else
 	{
 		cpinitateMsg.bits[gun_index].StatusNotificationReq = 0;
+		cpinitateMsg.bits[gun_index].TriggerStatusNotificationReq = 0;
 		result = PASS;
 	}
 
@@ -11747,10 +11740,11 @@ int handleTriggerMessageRequest(char *uuid, char *payload)
 	{
 		if(connectorIdIsNULL == FALSE)
 		{
-			if((connectorIdInt > 0) && ((connectorIdInt -1) < gunTotalNumber))
+			if((connectorIdInt > 0) && ((connectorIdInt-1) < gunTotalNumber))
 			{
 				ShmOCPP16Data->CsMsg.bits[connectorIdInt-1].TriggerMessageReq = 1;
-				cpinitateMsg.bits[connectorIdInt -1].StatusNotificationReq = 1;
+				cpinitateMsg.bits[connectorIdInt-1].TriggerStatusNotificationReq = 1;
+				//clientTime.StatusNotification[connectorIdInt-1] = time((time_t*)NULL);
 			}
 		}
 		else
@@ -11758,7 +11752,8 @@ int handleTriggerMessageRequest(char *uuid, char *payload)
 			for(int idx=0;idx< gunTotalNumber;idx++)
 			{
 				ShmOCPP16Data->CsMsg.bits[idx].TriggerMessageReq = 1;
-				cpinitateMsg.bits[idx].StatusNotificationReq = 1;
+				cpinitateMsg.bits[idx].TriggerStatusNotificationReq = 1;
+				//clientTime.StatusNotification[idx] = time((time_t*)NULL);
 			}
 		}
 	}
@@ -12731,6 +12726,7 @@ void handleStatusNotificationResponse(char *payload, int gun_index)
 	mtrace();
 	DEBUG_INFO("handleStatusNotificationResponse...\n");
 
+	cpinitateMsg.bits[gun_index].TriggerStatusNotificationReq = 0;
 	cpinitateMsg.bits[gun_index].StatusNotificationReq = 0;
 	cpinitateMsg.bits[gun_index].StatusNotificationConf = 1;
 
@@ -17950,7 +17946,6 @@ void InitialSystemValue(void)
 	DiagnosticsStatusNotificationStatus = DIAGNOSTIC_STATUS_IDLE; // Idle
 
 	memset(CurrentChargingProfileScheduleStr, 0, ARRAY_SIZE(CurrentChargingProfileScheduleStr));
-	memset(statusModeChage, 0, ARRAY_SIZE(statusModeChage));
 	memset(ChademoPreviousSystemStatus, 0, ARRAY_SIZE(ChademoPreviousSystemStatus));
 	memset(CcsPreviousSystemStatus, 0, ARRAY_SIZE(CcsPreviousSystemStatus));
 	memset(GbPreviousSystemStatus, 0, ARRAY_SIZE(GbPreviousSystemStatus));
@@ -18083,10 +18078,10 @@ void InitialSystemValue(void)
 
 	for(int gun_index=0; gun_index < gunTotalNumber; gun_index++ )
 	{
+		cpinitateMsg.bits[gun_index].TriggerStatusNotificationReq = 0;
 		cpinitateMsg.bits[gun_index].StatusNotificationReq = 0;
 		cpinitateMsg.bits[gun_index].StatusNotificationConf = 0;
 		//clientTime.MeterValues[gun_index] = time((time_t*)NULL);
-		clientTime.StatusNotification[gun_index] = time((time_t*)NULL);
 		memset(&ShmOCPP16Data->StatusNotification[gun_index], 0x00, sizeof(struct StructStatusNotification));
 	}