Skip to content

Commit 6f5280a

Browse files
committed
- handle functional naming (ldName) correctly in data-entry references in reports (LIB61850-467)
1 parent c05c72f commit 6f5280a

File tree

1 file changed

+42
-18
lines changed

1 file changed

+42
-18
lines changed

src/iec61850/server/mms_mapping/reporting.c

+42-18
Original file line numberDiff line numberDiff line change
@@ -3894,18 +3894,32 @@ sendNextReportEntrySegment(ReportControl* self)
38943894
char dataReference[130];
38953895
int currentPos = 0;
38963896

3897+
LogicalDevice* entryLd = (LogicalDevice*)IedModel_getModelNodeByShortObjectReference(iedModel, dataSetEntry->logicalDeviceName);
3898+
38973899
int j;
38983900

3899-
for (j = 0; j < iedNameLength; j++)
3901+
if (entryLd->ldName)
39003902
{
3901-
dataReference[currentPos++] = iedName[j];
3902-
}
3903+
int ldNameLength = (int)strlen(entryLd->ldName);
39033904

3904-
int ldNameLength = (int)strlen(dataSetEntry->logicalDeviceName);
3905-
for (j = 0; j < ldNameLength; j++)
3905+
for (j = 0; j < ldNameLength; j++)
3906+
{
3907+
dataReference[currentPos++] = entryLd->ldName[j];
3908+
}
3909+
}
3910+
else
39063911
{
3907-
dataReference[currentPos] = dataSetEntry->logicalDeviceName[j];
3908-
currentPos++;
3912+
for (j = 0; j < iedNameLength; j++)
3913+
{
3914+
dataReference[currentPos++] = iedName[j];
3915+
}
3916+
3917+
int ldNameLength = (int)strlen(dataSetEntry->logicalDeviceName);
3918+
for (j = 0; j < ldNameLength; j++)
3919+
{
3920+
dataReference[currentPos] = dataSetEntry->logicalDeviceName[j];
3921+
currentPos++;
3922+
}
39093923
}
39103924

39113925
dataReference[currentPos++] = '/';
@@ -4095,18 +4109,32 @@ sendNextReportEntrySegment(ReportControl* self)
40954109
char dataReference[130];
40964110
int currentPos = 0;
40974111

4112+
LogicalDevice* entryLd = (LogicalDevice*)IedModel_getModelNodeByShortObjectReference(iedModel, dataSetEntry->logicalDeviceName);
4113+
40984114
int j;
40994115

4100-
for (j = 0; j < iedNameLength; j++)
4116+
if (entryLd->ldName)
41014117
{
4102-
dataReference[currentPos++] = iedName[j];
4103-
}
4118+
int ldNameLength = (int)strlen(entryLd->ldName);
41044119

4105-
int ldNameLength = (int)strlen(dataSetEntry->logicalDeviceName);
4106-
for (j = 0; j < ldNameLength; j++)
4120+
for (j = 0; j < ldNameLength; j++)
4121+
{
4122+
dataReference[currentPos++] = entryLd->ldName[j];
4123+
}
4124+
}
4125+
else
41074126
{
4108-
dataReference[currentPos] = dataSetEntry->logicalDeviceName[j];
4109-
currentPos++;
4127+
for (j = 0; j < iedNameLength; j++)
4128+
{
4129+
dataReference[currentPos++] = iedName[j];
4130+
}
4131+
4132+
int ldNameLength = (int)strlen(dataSetEntry->logicalDeviceName);
4133+
for (j = 0; j < ldNameLength; j++)
4134+
{
4135+
dataReference[currentPos] = dataSetEntry->logicalDeviceName[j];
4136+
currentPos++;
4137+
}
41104138
}
41114139

41124140
dataReference[currentPos++] = '/';
@@ -4136,7 +4164,6 @@ sendNextReportEntrySegment(ReportControl* self)
41364164
/* encode data set value elements */
41374165
for (i = 0; i < maxIndex; i++)
41384166
{
4139-
41404167
bool isInBuffer = false;
41414168

41424169
if (report->flags > 0)
@@ -4190,7 +4217,6 @@ sendNextReportEntrySegment(ReportControl* self)
41904217

41914218
for (i = 0; i < maxIndex; i++)
41924219
{
4193-
41944220
bool isIncluded = false;
41954221

41964222
if (report->flags > 0)
@@ -4225,7 +4251,6 @@ sendNextReportEntrySegment(ReportControl* self)
42254251

42264252
if (isIncluded)
42274253
{
4228-
42294254
if (i >= startElementIndex)
42304255
bufPos = MmsValue_encodeMmsData(&_reason, buffer, bufPos, true);
42314256

@@ -4268,7 +4293,6 @@ sendNextReportEntrySegment(ReportControl* self)
42684293

42694294
if (segmented == false)
42704295
{
4271-
42724296
assert(self->reportBuffer->nextToTransmit != self->reportBuffer->nextToTransmit->next);
42734297

42744298
self->reportBuffer->nextToTransmit = self->reportBuffer->nextToTransmit->next;

0 commit comments

Comments
 (0)