- handle functional naming (ldName) correctly in data-entry references in reports (LIB61850-467)

pull/535/head
Michael Zillgith 10 months ago
parent c05c72f544
commit 6f5280a73a

@ -3894,8 +3894,21 @@ sendNextReportEntrySegment(ReportControl* self)
char dataReference[130]; char dataReference[130];
int currentPos = 0; int currentPos = 0;
LogicalDevice* entryLd = (LogicalDevice*)IedModel_getModelNodeByShortObjectReference(iedModel, dataSetEntry->logicalDeviceName);
int j; int j;
if (entryLd->ldName)
{
int ldNameLength = (int)strlen(entryLd->ldName);
for (j = 0; j < ldNameLength; j++)
{
dataReference[currentPos++] = entryLd->ldName[j];
}
}
else
{
for (j = 0; j < iedNameLength; j++) for (j = 0; j < iedNameLength; j++)
{ {
dataReference[currentPos++] = iedName[j]; dataReference[currentPos++] = iedName[j];
@ -3907,6 +3920,7 @@ sendNextReportEntrySegment(ReportControl* self)
dataReference[currentPos] = dataSetEntry->logicalDeviceName[j]; dataReference[currentPos] = dataSetEntry->logicalDeviceName[j];
currentPos++; currentPos++;
} }
}
dataReference[currentPos++] = '/'; dataReference[currentPos++] = '/';
@ -4095,8 +4109,21 @@ sendNextReportEntrySegment(ReportControl* self)
char dataReference[130]; char dataReference[130];
int currentPos = 0; int currentPos = 0;
LogicalDevice* entryLd = (LogicalDevice*)IedModel_getModelNodeByShortObjectReference(iedModel, dataSetEntry->logicalDeviceName);
int j; int j;
if (entryLd->ldName)
{
int ldNameLength = (int)strlen(entryLd->ldName);
for (j = 0; j < ldNameLength; j++)
{
dataReference[currentPos++] = entryLd->ldName[j];
}
}
else
{
for (j = 0; j < iedNameLength; j++) for (j = 0; j < iedNameLength; j++)
{ {
dataReference[currentPos++] = iedName[j]; dataReference[currentPos++] = iedName[j];
@ -4108,6 +4135,7 @@ sendNextReportEntrySegment(ReportControl* self)
dataReference[currentPos] = dataSetEntry->logicalDeviceName[j]; dataReference[currentPos] = dataSetEntry->logicalDeviceName[j];
currentPos++; currentPos++;
} }
}
dataReference[currentPos++] = '/'; dataReference[currentPos++] = '/';
@ -4136,7 +4164,6 @@ sendNextReportEntrySegment(ReportControl* self)
/* encode data set value elements */ /* encode data set value elements */
for (i = 0; i < maxIndex; i++) for (i = 0; i < maxIndex; i++)
{ {
bool isInBuffer = false; bool isInBuffer = false;
if (report->flags > 0) if (report->flags > 0)
@ -4190,7 +4217,6 @@ sendNextReportEntrySegment(ReportControl* self)
for (i = 0; i < maxIndex; i++) for (i = 0; i < maxIndex; i++)
{ {
bool isIncluded = false; bool isIncluded = false;
if (report->flags > 0) if (report->flags > 0)
@ -4225,7 +4251,6 @@ sendNextReportEntrySegment(ReportControl* self)
if (isIncluded) if (isIncluded)
{ {
if (i >= startElementIndex) if (i >= startElementIndex)
bufPos = MmsValue_encodeMmsData(&_reason, buffer, bufPos, true); bufPos = MmsValue_encodeMmsData(&_reason, buffer, bufPos, true);
@ -4268,7 +4293,6 @@ exit_remove_report:
if (segmented == false) if (segmented == false)
{ {
assert(self->reportBuffer->nextToTransmit != self->reportBuffer->nextToTransmit->next); assert(self->reportBuffer->nextToTransmit != self->reportBuffer->nextToTransmit->next);
self->reportBuffer->nextToTransmit = self->reportBuffer->nextToTransmit->next; self->reportBuffer->nextToTransmit = self->reportBuffer->nextToTransmit->next;

Loading…
Cancel
Save