From 5f02ea166132b3901a3f104ae5b6fb622d4b7b39 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Thu, 4 Jun 2020 10:36:12 +0200 Subject: [PATCH] - IEC 61850 server: control module return AddCause command-already-in-execution when second operate is received while command is executed --- src/iec61850/server/mms_mapping/control.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/iec61850/server/mms_mapping/control.c b/src/iec61850/server/mms_mapping/control.c index d1b2b582..0116572a 100644 --- a/src/iec61850/server/mms_mapping/control.c +++ b/src/iec61850/server/mms_mapping/control.c @@ -1783,6 +1783,18 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari goto free_and_return; } + else if ((state == STATE_OPERATE) || (state == STATE_WAIT_FOR_EXECUTION)) { + if (DEBUG_IED_SERVER) + printf("IED_SERVER: Oper failed - control already being executed!\n"); + + indication = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE; + + ControlObject_sendLastApplError(controlObject, connection, "Oper", + CONTROL_ERROR_NO_ERROR, ADD_CAUSE_COMMAND_ALREADY_IN_EXECUTION, + ctlNum, origin, true); + + goto free_and_return; + } } else if (strcmp(varName, "Cancel") == 0) { if (DEBUG_IED_SERVER)