- IED Server: fixed service tracking object references for RCB and GoCB service tracking

pull/265/head
Michael Zillgith 5 years ago
parent 3e83cd6194
commit 9ac8192bae

@ -154,7 +154,7 @@ updateGenericTrackingObjectValues(MmsGooseControlBlock gc, IEC61850_ServiceType
if (trkInst->errorCode) if (trkInst->errorCode)
MmsValue_setInt32(trkInst->errorCode->mmsValue, convertMmsDataAccessErrorToServiceError(errVal)); MmsValue_setInt32(trkInst->errorCode->mmsValue, convertMmsDataAccessErrorToServiceError(errVal));
char objRef[129]; char objRef[130];
/* create object reference */ /* create object reference */
LogicalNode* ln = (LogicalNode*) gc->logicalNode; LogicalNode* ln = (LogicalNode*) gc->logicalNode;
@ -162,7 +162,8 @@ updateGenericTrackingObjectValues(MmsGooseControlBlock gc, IEC61850_ServiceType
char* iedName = gc->mmsMapping->iedServer->mmsDevice->deviceName; char* iedName = gc->mmsMapping->iedServer->mmsDevice->deviceName;
snprintf(objRef, 129, "%s%s/%s", iedName, ld->name, gc->name); snprintf(objRef, 129, "%s%s/%s.%s", iedName, ld->name, gc->logicalNode->name, gc->name);
objRef[129] = 0;
if (trkInst->objRef) { if (trkInst->objRef) {
IedServer_updateVisibleStringAttributeValue(gc->mmsMapping->iedServer, trkInst->objRef, objRef); IedServer_updateVisibleStringAttributeValue(gc->mmsMapping->iedServer, trkInst->objRef, objRef);

@ -541,7 +541,7 @@ updateGenericTrackingObjectValues(MmsMapping* self, ReportControl* rc, IEC61850_
if (trkInst->errorCode) if (trkInst->errorCode)
MmsValue_setInt32(trkInst->errorCode->mmsValue, convertMmsDataAccessErrorToServiceError(errVal)); MmsValue_setInt32(trkInst->errorCode->mmsValue, convertMmsDataAccessErrorToServiceError(errVal));
char objRef[129]; char objRef[130];
/* create object reference */ /* create object reference */
LogicalNode* ln = (LogicalNode*) rc->parentLN; LogicalNode* ln = (LogicalNode*) rc->parentLN;
@ -551,6 +551,21 @@ updateGenericTrackingObjectValues(MmsMapping* self, ReportControl* rc, IEC61850_
snprintf(objRef, 129, "%s%s/%s", iedName, ld->name, rc->name); snprintf(objRef, 129, "%s%s/%s", iedName, ld->name, rc->name);
/* convert MMS name to ACSI object reference */
int pos = 0;
bool replace = false;
do {
if (replace) {
objRef[pos] = objRef[pos + 3];
}
else {
if (objRef[pos] == '$') {
objRef[pos] = '.';
replace = true;
}
}
} while (objRef[pos++]);
if (trkInst->objRef) { if (trkInst->objRef) {
IedServer_updateVisibleStringAttributeValue(self->iedServer, trkInst->objRef, objRef); IedServer_updateVisibleStringAttributeValue(self->iedServer, trkInst->objRef, objRef);
} }

Loading…
Cancel
Save