- changed back behaviour of LastApplError

pull/6/head
Michael Zillgith 11 years ago
parent 7f1714e4af
commit 98ec51346c

@ -198,9 +198,6 @@ ClientDataSet_getDataSetSize(ClientDataSet self)
static bool static bool
doesControlObjectMatch(char* objRef, char* cntrlObj) doesControlObjectMatch(char* objRef, char* cntrlObj)
{ {
printf("objRef: (%s) cntrlObj: (%s)\n", objRef, cntrlObj);
int objRefLen = strlen(objRef); int objRefLen = strlen(objRef);
char* separator = strchr(cntrlObj, '$'); char* separator = strchr(cntrlObj, '$');
@ -225,31 +222,17 @@ doesControlObjectMatch(char* objRef, char* cntrlObj)
if (separator[3] != '$') if (separator[3] != '$')
return false; return false;
printf("Compare strings: (%s) vs (%s)\n", cntrlObjName, separator +4); char* nextSeparator = strchr(separator + 4, '$');
// char* nextSeparator = strchr(separator + 4, '$');
// if (nextSeparator == NULL) if (nextSeparator == NULL)
// return false; return false;
int cntrlObjNameLen = strlen(cntrlObjName); int cntrlObjNameLen = strlen(cntrlObjName);
char* secondCntrlObjName = separator + 4; if (cntrlObjNameLen != nextSeparator - (separator + 4))
if (cntrlObjNameLen != strlen(secondCntrlObjName))
return false; return false;
// if (cntrlObjNameLen != nextSeparator - (separator + 4)) if (memcmp(cntrlObjName, separator + 4, cntrlObjNameLen) == 0)
// return false;
// int i;
// for (i = 0; i < cntrlObjNameLen; i++) {
// if (controlObjName )
// }
if (memcmp(cntrlObjName, secondCntrlObjName, cntrlObjNameLen) == 0)
return true; return true;
return false; return false;

@ -115,7 +115,7 @@ struct sControlObject
}; };
void void
ControlObject_sendLastApplError(ControlObject* self, MmsServerConnection* connection, int error, ControlObject_sendLastApplError(ControlObject* self, MmsServerConnection* connection, char* ctlVariable, int error,
ControlAddCause addCause, MmsValue* ctlNum, MmsValue* origin, bool handlerMode); ControlAddCause addCause, MmsValue* ctlNum, MmsValue* origin, bool handlerMode);
void void
@ -361,7 +361,7 @@ executeStateMachine:
if (dynamicCheckResult == CONTROL_RESULT_FAILED) { if (dynamicCheckResult == CONTROL_RESULT_FAILED) {
if (isTimeActivatedControl) { if (isTimeActivatedControl) {
ControlObject_sendLastApplError(self, self->mmsConnection, ControlObject_sendLastApplError(self, self->mmsConnection, "Oper",
CONTROL_ERROR_NO_ERROR, ADD_CAUSE_BLOCKED_BY_SYNCHROCHECK, CONTROL_ERROR_NO_ERROR, ADD_CAUSE_BLOCKED_BY_SYNCHROCHECK,
self->ctlNum, self->origin, false); self->ctlNum, self->origin, false);
} }
@ -688,7 +688,7 @@ Control_processControlActions(MmsMapping* self, uint64_t currentTimeInMs)
executeControlTask(controlObject); executeControlTask(controlObject);
} }
else { else {
ControlObject_sendLastApplError(controlObject, controlObject->mmsConnection, ControlObject_sendLastApplError(controlObject, controlObject->mmsConnection, "Oper",
CONTROL_ERROR_NO_ERROR, ADD_CAUSE_BLOCKED_BY_INTERLOCKING, CONTROL_ERROR_NO_ERROR, ADD_CAUSE_BLOCKED_BY_INTERLOCKING,
controlObject->ctlNum, controlObject->origin, false); controlObject->ctlNum, controlObject->origin, false);
@ -887,12 +887,16 @@ ControlObject_sendCommandTerminationNegative(ControlObject* self)
lastApplError->value.structure.components = componentContainer; lastApplError->value.structure.components = componentContainer;
char ctlObj[130];
createStringInBuffer(ctlObj, 2, self->ctlObjectName, "$Oper");
MmsValue ctlObjValueMemory; MmsValue ctlObjValueMemory;
MmsValue* ctlObjValue = &ctlObjValueMemory; MmsValue* ctlObjValue = &ctlObjValueMemory;
ctlObjValue->type = MMS_VISIBLE_STRING; ctlObjValue->type = MMS_VISIBLE_STRING;
ctlObjValue->value.visibleString.buf = self->ctlObjectName; ctlObjValue->value.visibleString.buf = ctlObj;
ctlObjValue->value.visibleString.size = sizeof(self->ctlObjectName); ctlObjValue->value.visibleString.size = sizeof(ctlObj);
MmsValue_setElement(lastApplError, 0, ctlObjValue); MmsValue_setElement(lastApplError, 0, ctlObjValue);
@ -922,6 +926,7 @@ ControlObject_sendCommandTerminationNegative(ControlObject* self)
operVarSpec.itemId = itemId; operVarSpec.itemId = itemId;
operVarSpec.domainId = domainId; operVarSpec.domainId = domainId;
/* create response */ /* create response */
if (DEBUG_IED_SERVER) if (DEBUG_IED_SERVER)
@ -944,7 +949,7 @@ ControlObject_sendCommandTerminationNegative(ControlObject* self)
void void
ControlObject_sendLastApplError(ControlObject* self, MmsServerConnection* connection, int error, ControlObject_sendLastApplError(ControlObject* self, MmsServerConnection* connection, char* ctlVariable, int error,
ControlAddCause addCause, MmsValue* ctlNum, MmsValue* origin, bool handlerMode) ControlAddCause addCause, MmsValue* ctlNum, MmsValue* origin, bool handlerMode)
{ {
MmsValue lastApplErrorMemory; MmsValue lastApplErrorMemory;
@ -957,9 +962,13 @@ ControlObject_sendLastApplError(ControlObject* self, MmsServerConnection* connec
lastApplError->value.structure.components =componentContainer; lastApplError->value.structure.components =componentContainer;
char ctlObj[130];
createStringInBuffer(ctlObj, 3, self->ctlObjectName, "$", ctlVariable);
if (DEBUG_IED_SERVER) { if (DEBUG_IED_SERVER) {
printf("IED_SERVER: sendLastApplError:\n"); printf("IED_SERVER: sendLastApplError:\n");
printf("IED_SERVER: control object: %s\n", self->ctlObjectName); printf("IED_SERVER: control object: %s\n", ctlObj);
printf("IED_SERVER: ctlNum: %u\n", MmsValue_toUint32(ctlNum)); printf("IED_SERVER: ctlNum: %u\n", MmsValue_toUint32(ctlNum));
} }
@ -967,8 +976,8 @@ ControlObject_sendLastApplError(ControlObject* self, MmsServerConnection* connec
MmsValue* ctlObjValue = &ctlObjValueMemory; MmsValue* ctlObjValue = &ctlObjValueMemory;
ctlObjValue->type = MMS_VISIBLE_STRING; ctlObjValue->type = MMS_VISIBLE_STRING;
ctlObjValue->value.visibleString.buf = self->ctlObjectName; ctlObjValue->value.visibleString.buf = ctlObj;
ctlObjValue->value.visibleString.size = sizeof(self->ctlObjectName); ctlObjValue->value.visibleString.size = sizeof(ctlObj);
MmsValue_setElement(lastApplError, 0, ctlObjValue); MmsValue_setElement(lastApplError, 0, ctlObjValue);
@ -1304,10 +1313,10 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
indication = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE; indication = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE;
if (connection != controlObject->mmsConnection) if (connection != controlObject->mmsConnection)
ControlObject_sendLastApplError(controlObject, connection, 0, ControlObject_sendLastApplError(controlObject, connection, "SBOw", 0,
ADD_CAUSE_LOCKED_BY_OTHER_CLIENT, ctlNum, origin, true); ADD_CAUSE_LOCKED_BY_OTHER_CLIENT, ctlNum, origin, true);
else else
ControlObject_sendLastApplError(controlObject, connection, 0, ControlObject_sendLastApplError(controlObject, connection, "SBOw", 0,
ADD_CAUSE_OBJECT_ALREADY_SELECTED, ctlNum, origin, true); ADD_CAUSE_OBJECT_ALREADY_SELECTED, ctlNum, origin, true);
if (DEBUG_IED_SERVER) if (DEBUG_IED_SERVER)
@ -1344,7 +1353,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
else { else {
indication = getDataAccessErrorFromCheckHandlerResult(checkResult); indication = getDataAccessErrorFromCheckHandlerResult(checkResult);
ControlObject_sendLastApplError(controlObject, connection, 0, ControlObject_sendLastApplError(controlObject, connection, "SBOw", 0,
ADD_CAUSE_SELECT_FAILED, ctlNum, origin, true); ADD_CAUSE_SELECT_FAILED, ctlNum, origin, true);
if (DEBUG_IED_SERVER) if (DEBUG_IED_SERVER)
@ -1389,7 +1398,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
if (state == STATE_WAIT_FOR_ACTICATION_TIME) { if (state == STATE_WAIT_FOR_ACTICATION_TIME) {
indication = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE; indication = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE;
ControlObject_sendLastApplError(controlObject, connection, ControlObject_sendLastApplError(controlObject, connection, "Oper",
CONTROL_ERROR_NO_ERROR, ADD_CAUSE_COMMAND_ALREADY_IN_EXECUTION, CONTROL_ERROR_NO_ERROR, ADD_CAUSE_COMMAND_ALREADY_IN_EXECUTION,
ctlNum, origin, true); ctlNum, origin, true);
@ -1419,7 +1428,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
{ {
indication = DATA_ACCESS_ERROR_TYPE_INCONSISTENT; indication = DATA_ACCESS_ERROR_TYPE_INCONSISTENT;
ControlObject_sendLastApplError(controlObject, connection, ControlObject_sendLastApplError(controlObject, connection, "Oper",
CONTROL_ERROR_NO_ERROR, ADD_CAUSE_INCONSISTENT_PARAMETERS, CONTROL_ERROR_NO_ERROR, ADD_CAUSE_INCONSISTENT_PARAMETERS,
ctlNum, origin, true); ctlNum, origin, true);
@ -1499,7 +1508,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
printf("IED_SERVER: Oper failed - control not selected!\n"); printf("IED_SERVER: Oper failed - control not selected!\n");
indication = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; indication = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
ControlObject_sendLastApplError(controlObject, connection, ControlObject_sendLastApplError(controlObject, connection, "Oper",
CONTROL_ERROR_NO_ERROR, ADD_CAUSE_OBJECT_NOT_SELECTED, CONTROL_ERROR_NO_ERROR, ADD_CAUSE_OBJECT_NOT_SELECTED,
ctlNum, origin, true); ctlNum, origin, true);
@ -1531,7 +1540,7 @@ Control_writeAccessControlObject(MmsMapping* self, MmsDomain* domain, char* vari
} }
else { else {
indication = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE; indication = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE;
ControlObject_sendLastApplError(controlObject, connection, ControlObject_sendLastApplError(controlObject, connection, "Cancel",
CONTROL_ERROR_NO_ERROR, ADD_CAUSE_LOCKED_BY_OTHER_CLIENT, CONTROL_ERROR_NO_ERROR, ADD_CAUSE_LOCKED_BY_OTHER_CLIENT,
ctlNum, origin, true); ctlNum, origin, true);
} }

Loading…
Cancel
Save