- IED server: RCB and LCB service tracking replaced $ with . characters in object references

pull/265/head
Michael Zillgith 5 years ago
parent 5e520f21b5
commit ec5ccb62a0

@ -278,7 +278,7 @@ struct sLogControlBlock {
char* name;
char* dataSetName;
char* logRef; /* object reference to the journal. Defaults to <MMS DomainName>/<LNName>$GeneralLog */
char* logRef; /* object reference to the journal */
uint8_t trgOps; /* TrgOps - trigger conditions */
uint32_t intPeriod; /* IntgPd - integrity period */

@ -46,6 +46,8 @@ typedef struct {
LogControlBlock* logControlBlock;
MmsMapping* mmsMapping;
char* logRef;
DataSet* dataSet;
char* dataSetRef;
bool isDynamicDataSet;

@ -181,6 +181,7 @@ LogControl_create(LogicalNode* parentLN, MmsMapping* mmsMapping)
self->logInstance = NULL;
self->intgPd = 0;
self->nextIntegrityScan = 0;
self->logRef = NULL;
return self;
}
@ -196,6 +197,9 @@ LogControl_destroy(LogControl* self)
if (self->dataSetRef != NULL)
GLOBAL_FREEMEM(self->dataSetRef);
if (self->logRef)
GLOBAL_FREEMEM(self->logRef);
GLOBAL_FREEMEM(self);
}
}
@ -412,10 +416,22 @@ copyLCBValuesToTrackingObject(MmsMapping* self, LogControl* logControl)
MmsValue_setBoolean(trkInst->logEna->mmsValue, logControl->enabled);
if (trkInst->logRef)
MmsValue_setVisibleString(trkInst->logRef->mmsValue, logControl->logControlBlock->logRef);
MmsValue_setVisibleString(trkInst->logRef->mmsValue, logControl->logRef);
if (trkInst->datSet) {
MmsValue_setVisibleString(trkInst->datSet->mmsValue, logControl->dataSetRef);
char datSet[130];
if (logControl->dataSetRef) {
strncpy(datSet, logControl->dataSetRef, 129);
datSet[129] = 0;
StringUtils_replace(datSet, '$', '.');
}
else {
datSet[0] = 0;
}
MmsValue_setVisibleString(trkInst->datSet->mmsValue, datSet);
}
if (trkInst->intgPd)
@ -776,6 +792,10 @@ createLogControlBlock(MmsMapping* self, LogControlBlock* logControlBlock,
strncat(logRef, logControlBlock->logRef, maxLogRefLength);
mmsValue->value.structure.components[1] = MmsValue_newVisibleString(logRef);
StringUtils_replace(logRef, '$', '.');
logControl->logRef = StringUtils_copyString(logRef);
}
else {
char* logRef = StringUtils_createString(4, logControl->domain->domainName, "/", logControlBlock->parent->name,
@ -783,7 +803,9 @@ createLogControlBlock(MmsMapping* self, LogControlBlock* logControlBlock,
mmsValue->value.structure.components[1] = MmsValue_newVisibleString(logRef);
GLOBAL_FREEMEM(logRef);
StringUtils_replace(logRef, '$', '.');
logControl->logRef = logRef;
}
/* DatSet */

@ -630,13 +630,15 @@ private_IedServer_convertMmsDataAccessErrorToServiceError(MmsDataAccessError mms
errVal = IEC61850_SERVICE_ERROR_PARAMETER_VALUE_INAPPROPRIATE;
break;
case DATA_ACCESS_ERROR_TYPE_INCONSISTENT:
case DATA_ACCESS_ERROR_OBJECT_ATTRIBUTE_INCONSISTENT:
errVal = IEC61850_SERVICE_ERROR_PARAMETER_VALUE_INCONSISTENT;
break;
case DATA_ACCESS_ERROR_OBJECT_NONE_EXISTENT:
errVal = IEC61850_SERVICE_ERROR_INSTANCE_NOT_AVAILABLE;
break;
default:
printf("Data access error %i not mapped!\n", mmsError);
if (DEBUG_IED_SERVER)
printf("IED_SERVER: Data access error %i not mapped!\n", mmsError);
errVal = IEC61850_SERVICE_ERROR_FAILED_DUE_TO_SERVER_CONSTRAINT;
break;
}

@ -324,8 +324,19 @@ copyRCBValuesToTrackingObject(MmsMapping* self, ReportControl* rc)
if (trkInst->rptEna)
MmsValue_update(trkInst->rptEna->mmsValue, ReportControl_getRCBValue(rc, "RptEna"));
if (trkInst->datSet)
MmsValue_update(trkInst->datSet->mmsValue, ReportControl_getRCBValue(rc, "DatSet"));
if (trkInst->datSet) {
char datSet[130];
const char* datSetStr = MmsValue_toString(ReportControl_getRCBValue(rc, "DatSet"));
if (datSetStr) {
strncpy(datSet, datSetStr, 129);
datSet[129] = 0;
StringUtils_replace(datSet, '$', '.');
MmsValue_setVisibleString(trkInst->datSet->mmsValue, datSet);
}
}
if (trkInst->confRev)
MmsValue_update(trkInst->confRev->mmsValue, ReportControl_getRCBValue(rc, "ConfRev"));
@ -383,8 +394,19 @@ copyRCBValuesToTrackingObject(MmsMapping* self, ReportControl* rc)
if (trkInst->resv)
MmsValue_update(trkInst->rptEna->mmsValue, ReportControl_getRCBValue(rc, "Resv"));
if (trkInst->datSet)
MmsValue_update(trkInst->datSet->mmsValue, ReportControl_getRCBValue(rc, "DatSet"));
if (trkInst->datSet) {
char datSet[130];
const char* datSetStr = MmsValue_toString(ReportControl_getRCBValue(rc, "DatSet"));
if (datSetStr) {
strncpy(datSet, datSetStr, 129);
datSet[129] = 0;
StringUtils_replace(datSet, '$', '.');
MmsValue_setVisibleString(trkInst->datSet->mmsValue, datSet);
}
}
if (trkInst->confRev)
MmsValue_update(trkInst->confRev->mmsValue, ReportControl_getRCBValue(rc, "ConfRev"));
@ -423,8 +445,20 @@ updateSingleTrackingValue(MmsMapping* self, ReportControl* rc, char* name, MmsVa
attributeToUpdate = trkInst->rptID;
else if (!strcmp(name, "RptEna"))
attributeToUpdate = trkInst->rptEna;
else if (!strcmp(name, "DatSet"))
attributeToUpdate = trkInst->datSet;
else if (!strcmp(name, "DatSet")) {
char datSet[130];
const char* datSetStr = MmsValue_toString(newValue);
if (datSetStr) {
strncpy(datSet, datSetStr, 129);
datSet[129] = 0;
StringUtils_replace(datSet, '$', '.');
MmsValue_setVisibleString(trkInst->datSet->mmsValue, datSet);
}
}
else if (!strcmp(name, "ConfRev"))
attributeToUpdate = trkInst->confRev;
else if (!strcmp(name, "OptFlds"))
@ -464,8 +498,20 @@ updateSingleTrackingValue(MmsMapping* self, ReportControl* rc, char* name, MmsVa
attributeToUpdate = trkInst->rptEna;
else if (!strcmp(name, "Resv"))
attributeToUpdate = trkInst->resv;
else if (!strcmp(name, "DatSet"))
attributeToUpdate = trkInst->datSet;
else if (!strcmp(name, "DatSet")) {
char datSet[130];
const char* datSetStr = MmsValue_toString(newValue);
if (datSetStr) {
strncpy(datSet, datSetStr, 129);
datSet[129] = 0;
StringUtils_replace(datSet, '$', '.');
MmsValue_setVisibleString(trkInst->datSet->mmsValue, datSet);
}
}
else if (!strcmp(name, "ConfRev"))
attributeToUpdate = trkInst->confRev;
else if (!strcmp(name, "OptFlds"))

Loading…
Cancel
Save