- IED server: fixed problem - control not unselected after connection is closed for sboClass "operate-many"

pull/291/head
Michael Zillgith 5 years ago
parent 9348683462
commit a5bcd3c251

@ -620,15 +620,20 @@ exitControlTask(ControlObject* self)
}
static void
abortControlOperation(ControlObject* self)
abortControlOperation(ControlObject* self, bool unconditional)
{
if ((self->ctlModel == 2) || (self->ctlModel == 4)) {
if (unconditional) {
unselectObject(self);
}
else {
if (isSboClassOperateOnce(self))
unselectObject(self);
else
setState(self, STATE_READY);
}
}
else
setState(self, STATE_READY);
@ -796,7 +801,7 @@ executeStateMachine:
resetAddCause(controlObject);
abortControlOperation(controlObject);
abortControlOperation(controlObject, false);
exitControlTask(controlObject);
}
else if (dynamicCheckResult == CONTROL_RESULT_OK) {
@ -861,7 +866,7 @@ executeStateMachine:
#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */
}
abortControlOperation(controlObject);
abortControlOperation(controlObject, false);
exitControlTask(controlObject);
setOpOk(controlObject, false, currentTimeInMs);
@ -1284,7 +1289,7 @@ bool
ControlObject_unselect(ControlObject* self, MmsServerConnection connection)
{
if (self->mmsConnection == connection) {
abortControlOperation(self);
abortControlOperation(self, true);
return true;
}
else
@ -1386,7 +1391,7 @@ Control_processControlActions(MmsMapping* self, uint64_t currentTimeInMs)
/* leave state Perform Test */
setOpRcvd(controlObject, false);
abortControlOperation(controlObject);
abortControlOperation(controlObject, false);
resetAddCause(controlObject);
}
@ -2189,7 +2194,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
/* leave state Perform Test */
setOpRcvd(controlObject, false);
abortControlOperation(controlObject);
abortControlOperation(controlObject, false);
if ((controlObject->ctlModel == 2) || (controlObject->ctlModel == 4))
unselectObject(controlObject);
@ -2263,7 +2268,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
if (controlObject->timeActivatedOperate) {
controlObject->timeActivatedOperate = false;
abortControlOperation(controlObject);
abortControlOperation(controlObject, false);
indication = DATA_ACCESS_ERROR_SUCCESS;

Loading…
Cancel
Save