- IEC 61850 server: fixed problem with logging when log data set contains FCDO (#225)

pull/228/head
Michael Zillgith 5 years ago
parent 97e65d5743
commit cc08420e50

@ -2753,7 +2753,7 @@ DataSet_isMemberValue(DataSet* dataSet, MmsValue* value, int* index)
#if (CONFIG_IEC61850_LOG_SERVICE == 1)
static bool
DataSet_isMemberValueWithRef(DataSet* dataSet, MmsValue* value, char* dataRef, const char* iedName)
DataSet_isMemberValueWithRef(DataSet* dataSet, MmsValue* value, char* dataRef, const char* iedName, int* index)
{
int i = 0;
@ -2768,6 +2768,9 @@ DataSet_isMemberValueWithRef(DataSet* dataSet, MmsValue* value, char* dataRef, c
if (dataRef != NULL)
sprintf(dataRef, "%s%s/%s", iedName, dataSetEntry->logicalDeviceName, dataSetEntry->variableName);
if (index)
*index = i;
return true;
}
}
@ -2825,10 +2828,33 @@ MmsMapping_triggerLogging(MmsMapping* self, MmsValue* value, LogInclusionFlag fl
char dataRef[130];
if (DataSet_isMemberValueWithRef(lc->dataSet, value, dataRef, self->model->name)) {
int dsEntryIdx = 0;
if (DataSet_isMemberValueWithRef(lc->dataSet, value, dataRef, self->model->name, &dsEntryIdx)) {
if (lc->logInstance != NULL) {
LogInstance_logSingleData(lc->logInstance, dataRef, value, reasonCode);
if (lc->dataSet) {
DataSetEntry* dsEntry = lc->dataSet->fcdas;
while (dsEntry && (dsEntryIdx > 0)) {
dsEntry = dsEntry->sibling;
if (dsEntry == NULL)
break;
dsEntryIdx--;
}
if (dsEntry) {
MmsValue* dsValue = dsEntry->value;
LogInstance_logSingleData(lc->logInstance, dataRef, dsValue, reasonCode);
}
}
}
else {
if (DEBUG_IED_SERVER)

Loading…
Cancel
Save