diff --git a/src/iec61850/server/mms_mapping/mms_goose.c b/src/iec61850/server/mms_mapping/mms_goose.c index ee8630f7..09184a62 100644 --- a/src/iec61850/server/mms_mapping/mms_goose.c +++ b/src/iec61850/server/mms_mapping/mms_goose.c @@ -154,7 +154,7 @@ updateGenericTrackingObjectValues(MmsGooseControlBlock gc, IEC61850_ServiceType if (trkInst->errorCode) MmsValue_setInt32(trkInst->errorCode->mmsValue, convertMmsDataAccessErrorToServiceError(errVal)); - char objRef[129]; + char objRef[130]; /* create object reference */ LogicalNode* ln = (LogicalNode*) gc->logicalNode; @@ -162,7 +162,8 @@ updateGenericTrackingObjectValues(MmsGooseControlBlock gc, IEC61850_ServiceType 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) { IedServer_updateVisibleStringAttributeValue(gc->mmsMapping->iedServer, trkInst->objRef, objRef); diff --git a/src/iec61850/server/mms_mapping/reporting.c b/src/iec61850/server/mms_mapping/reporting.c index c6920ff0..c62ea570 100644 --- a/src/iec61850/server/mms_mapping/reporting.c +++ b/src/iec61850/server/mms_mapping/reporting.c @@ -541,7 +541,7 @@ updateGenericTrackingObjectValues(MmsMapping* self, ReportControl* rc, IEC61850_ if (trkInst->errorCode) MmsValue_setInt32(trkInst->errorCode->mmsValue, convertMmsDataAccessErrorToServiceError(errVal)); - char objRef[129]; + char objRef[130]; /* create object reference */ 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); + /* 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) { IedServer_updateVisibleStringAttributeValue(self->iedServer, trkInst->objRef, objRef); }