- IEC 61850 server: fixed - control model - peer connection is not always available when control handlers are called (#232)

pull/244/head
Michael Zillgith 5 years ago
parent 4cb5ffa8c2
commit 38fe325c90

@ -244,7 +244,7 @@ int main(int argc, char** argv) {
MmsValue* DPCSO1_stVal = IedServer_getAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_DPCSO1_stVal); MmsValue* DPCSO1_stVal = IedServer_getAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_DPCSO1_stVal);
MmsValue_setBitStringFromInteger(DPCSO1_stVal, 1); /* set DPC to OFF */ MmsValue_setBitStringFromInteger(DPCSO1_stVal, 1); /* set DPC to OFF */
/* Intitalize setting values */ /* Initialize setting values */
IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_GenericIO_TIM_GAPC1_OpDlTmms_setVal, ledOffTimeMs); IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_GenericIO_TIM_GAPC1_OpDlTmms_setVal, ledOffTimeMs);
IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_GenericIO_TIM_GAPC1_RsDlTmms_setVal, ledOnTimeMs); IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_GenericIO_TIM_GAPC1_RsDlTmms_setVal, ledOnTimeMs);
@ -278,7 +278,6 @@ int main(int argc, char** argv) {
if (automaticOperationMode) { if (automaticOperationMode) {
if (nextLedToggleTime <= currentTime) { if (nextLedToggleTime <= currentTime) {
if (ledStateValue) if (ledStateValue)
nextLedToggleTime = currentTime + ledOffTimeMs; nextLedToggleTime = currentTime + ledOffTimeMs;
else else

@ -702,6 +702,8 @@ unselectObject(ControlObject* self)
setStSeld(self, false); setStSeld(self, false);
self->mmsConnection = NULL;
if (DEBUG_IED_SERVER) if (DEBUG_IED_SERVER)
printf("IED_SERVER: control %s/%s.%s unselected\n", MmsDomain_getName(self->mmsDomain), self->lnName, self->name); printf("IED_SERVER: control %s/%s.%s unselected\n", MmsDomain_getName(self->mmsDomain), self->lnName, self->name);
} }
@ -1269,6 +1271,7 @@ Control_readAccessControlObject(MmsMapping* self, MmsDomain* domain, char* varia
/* opRcvd must not be set here! */ /* opRcvd must not be set here! */
controlObject->addCauseValue = ADD_CAUSE_UNKNOWN; controlObject->addCauseValue = ADD_CAUSE_UNKNOWN;
controlObject->mmsConnection = connection;
if (controlObject->checkHandler != NULL) { /* perform operative tests */ if (controlObject->checkHandler != NULL) { /* perform operative tests */
@ -1480,6 +1483,8 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
controlObject->isSelect = 1; controlObject->isSelect = 1;
controlObject->mmsConnection = connection;
checkResult = controlObject->checkHandler((ControlAction) controlObject, checkResult = controlObject->checkHandler((ControlAction) controlObject,
controlObject->checkHandlerParameter, ctlVal, testCondition, interlockCheck); controlObject->checkHandlerParameter, ctlVal, testCondition, interlockCheck);
@ -1500,6 +1505,8 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
ControlObject_sendLastApplError(controlObject, connection, "SBOw", 0, ControlObject_sendLastApplError(controlObject, connection, "SBOw", 0,
controlObject->addCauseValue, ctlNum, origin, true); controlObject->addCauseValue, ctlNum, origin, true);
controlObject->mmsConnection = NULL;
if (DEBUG_IED_SERVER) if (DEBUG_IED_SERVER)
printf("IED_SERVER: SBOw - select rejected by application!\n"); printf("IED_SERVER: SBOw - select rejected by application!\n");
} }
@ -1620,7 +1627,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
} }
if(checkResult == CONTROL_ACCEPTED){ if (checkResult == CONTROL_ACCEPTED) {
initiateControlTask(controlObject); initiateControlTask(controlObject);
setState(controlObject, STATE_WAIT_FOR_ACTIVATION_TIME); setState(controlObject, STATE_WAIT_FOR_ACTIVATION_TIME);
@ -1630,7 +1637,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
indication = DATA_ACCESS_ERROR_SUCCESS; indication = DATA_ACCESS_ERROR_SUCCESS;
} }
else{ else {
indication = (MmsDataAccessError) checkResult; indication = (MmsDataAccessError) checkResult;
} }
} }
@ -1649,6 +1656,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
setOpRcvd(controlObject, true); setOpRcvd(controlObject, true);
controlObject->addCauseValue = ADD_CAUSE_UNKNOWN; controlObject->addCauseValue = ADD_CAUSE_UNKNOWN;
controlObject->mmsConnection = connection;
if (controlObject->checkHandler != NULL) { /* perform operative tests */ if (controlObject->checkHandler != NULL) { /* perform operative tests */

Loading…
Cancel
Save