- 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_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_RsDlTmms_setVal, ledOnTimeMs);
@ -278,7 +278,6 @@ int main(int argc, char** argv) {
if (automaticOperationMode) {
if (nextLedToggleTime <= currentTime) {
if (ledStateValue)
nextLedToggleTime = currentTime + ledOffTimeMs;
else

@ -702,6 +702,8 @@ unselectObject(ControlObject* self)
setStSeld(self, false);
self->mmsConnection = NULL;
if (DEBUG_IED_SERVER)
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! */
controlObject->addCauseValue = ADD_CAUSE_UNKNOWN;
controlObject->mmsConnection = connection;
if (controlObject->checkHandler != NULL) { /* perform operative tests */
@ -1480,6 +1483,8 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
controlObject->isSelect = 1;
controlObject->mmsConnection = connection;
checkResult = controlObject->checkHandler((ControlAction) controlObject,
controlObject->checkHandlerParameter, ctlVal, testCondition, interlockCheck);
@ -1500,6 +1505,8 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
ControlObject_sendLastApplError(controlObject, connection, "SBOw", 0,
controlObject->addCauseValue, ctlNum, origin, true);
controlObject->mmsConnection = NULL;
if (DEBUG_IED_SERVER)
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);
setState(controlObject, STATE_WAIT_FOR_ACTIVATION_TIME);
@ -1630,7 +1637,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
indication = DATA_ACCESS_ERROR_SUCCESS;
}
else{
else {
indication = (MmsDataAccessError) checkResult;
}
}
@ -1649,6 +1656,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
setOpRcvd(controlObject, true);
controlObject->addCauseValue = ADD_CAUSE_UNKNOWN;
controlObject->mmsConnection = connection;
if (controlObject->checkHandler != NULL) { /* perform operative tests */

Loading…
Cancel
Save