- fixed data set handling problem when using functional naming (ldName) (LIB61850-160)

v1.6_develop_rgoose_sntp
Michael Zillgith 3 years ago
parent 0a1ddb7ca9
commit e02b85f147

@ -3978,10 +3978,21 @@ MmsMapping_stopEventWorkerThread(MmsMapping* self)
DataSet* DataSet*
MmsMapping_createDataSetByNamedVariableList(MmsMapping* self, MmsNamedVariableList variableList) MmsMapping_createDataSetByNamedVariableList(MmsMapping* self, MmsNamedVariableList variableList)
{ {
DataSet* dataSet = (DataSet*) GLOBAL_MALLOC(sizeof(DataSet)); DataSet* dataSet = (DataSet*) GLOBAL_CALLOC(1, sizeof(DataSet));
if (variableList->domain != NULL) if (dataSet) {
dataSet->logicalDeviceName = MmsDomain_getName(variableList->domain) + strlen(self->model->name);
if (variableList->domain != NULL) {
LogicalDevice* ld = IedModel_getDevice(self->model, MmsDomain_getName(variableList->domain));
if (ld) {
dataSet->logicalDeviceName = ld->name;
}
else {
if (DEBUG_IED_SERVER)
printf("IED_SERVER: LD lookup error!");
}
}
else else
dataSet->logicalDeviceName = NULL; /* name is not relevant for association specific data sets */ dataSet->logicalDeviceName = NULL; /* name is not relevant for association specific data sets */
@ -3995,10 +4006,16 @@ MmsMapping_createDataSetByNamedVariableList(MmsMapping* self, MmsNamedVariableLi
while (element != NULL) { while (element != NULL) {
MmsAccessSpecifier* listEntry = (MmsAccessSpecifier*) element->data; MmsAccessSpecifier* listEntry = (MmsAccessSpecifier*) element->data;
LogicalDevice* entryLd = IedModel_getDevice(self->model, MmsDomain_getName(listEntry->domain));
if (entryLd) {
DataSetEntry* dataSetEntry = (DataSetEntry*) GLOBAL_MALLOC(sizeof(DataSetEntry)); DataSetEntry* dataSetEntry = (DataSetEntry*) GLOBAL_MALLOC(sizeof(DataSetEntry));
if (dataSetEntry) {
/* use variable name part of domain name as logicalDeviceName */ /* use variable name part of domain name as logicalDeviceName */
dataSetEntry->logicalDeviceName = MmsDomain_getName(listEntry->domain) + strlen(self->model->name); dataSetEntry->logicalDeviceName = entryLd->name;
dataSetEntry->variableName = listEntry->variableName; dataSetEntry->variableName = listEntry->variableName;
dataSetEntry->index = listEntry->arrayIndex; dataSetEntry->index = listEntry->arrayIndex;
dataSetEntry->componentName = listEntry->componentName; dataSetEntry->componentName = listEntry->componentName;
@ -4055,9 +4072,16 @@ MmsMapping_createDataSetByNamedVariableList(MmsMapping* self, MmsNamedVariableLi
} }
lastDataSetEntry = dataSetEntry; lastDataSetEntry = dataSetEntry;
}
}
else {
if (DEBUG_IED_SERVER)
printf("IED_SERVER: LD lookup error!\n");
}
element = LinkedList_getNext(element); element = LinkedList_getNext(element);
} }
}
return dataSet; return dataSet;
} }

@ -721,7 +721,21 @@ updateReportDataset(MmsMapping* mapping, ReportControl* rc, MmsValue* newDatSet,
char externalVisibleName[256]; char externalVisibleName[256];
/* Construct external visible name */ /* Construct external visible name */
LogicalDevice* ld = IedModel_getDeviceByInst(mapping->model, dataSetLdName);
if (ld == NULL) {
success = false;
goto exit_function;
}
if (ld->ldName) {
StringUtils_copyStringMax(externalVisibleName, 256, ld->ldName);
}
else {
StringUtils_concatString(externalVisibleName, 256, mapping->model->name, dataSetLdName); StringUtils_concatString(externalVisibleName, 256, mapping->model->name, dataSetLdName);
}
StringUtils_appendString(externalVisibleName, 256, "/"); StringUtils_appendString(externalVisibleName, 256, "/");
StringUtils_appendString(externalVisibleName, 256, dataSetName); StringUtils_appendString(externalVisibleName, 256, dataSetName);

@ -39,9 +39,11 @@ MmsDomain_create(char* domainName)
{ {
MmsDomain* self = (MmsDomain*) GLOBAL_CALLOC(1, sizeof(MmsDomain)); MmsDomain* self = (MmsDomain*) GLOBAL_CALLOC(1, sizeof(MmsDomain));
if (self) {
self->domainName = StringUtils_copyString(domainName); self->domainName = StringUtils_copyString(domainName);
self->namedVariableLists = LinkedList_create(); self->namedVariableLists = LinkedList_create();
self->journals = NULL; self->journals = NULL;
}
return self; return self;
} }

@ -571,7 +571,7 @@ mmsServer_handleWriteRequest(
variable = MmsDomain_getNamedVariable(domain, nameIdStr); variable = MmsDomain_getNamedVariable(domain, nameIdStr);
} }
#if (CONFIG_MMS_SUPPORT_VMD_SCOPE_NAMED_VARIABLES == 1) #if (CONFIG_MMS_SUPPORT_VMD_SCOPE_NAMED_VARIABLES == 1)
else if (varSpec->variableSpecification.choice.name.present == ObjectName_PR_vmdspecific) { else if (varSpec->variableSpecification.choice.name.present == ObjectName_PR_vmdspecific) {
Identifier_t nameId = varSpec->variableSpecification.choice.name.choice.vmdspecific; Identifier_t nameId = varSpec->variableSpecification.choice.name.choice.vmdspecific;
@ -579,7 +579,7 @@ mmsServer_handleWriteRequest(
variable = MmsDevice_getNamedVariable(device, nameIdStr); variable = MmsDevice_getNamedVariable(device, nameIdStr);
} }
#endif /* (CONFIG_MMS_SUPPORT_VMD_SCOPE_NAMED_VARIABLES == 1) */ #endif /* (CONFIG_MMS_SUPPORT_VMD_SCOPE_NAMED_VARIABLES == 1) */
else { else {
accessResults[i] = DATA_ACCESS_ERROR_OBJECT_ACCESS_UNSUPPORTED; accessResults[i] = DATA_ACCESS_ERROR_OBJECT_ACCESS_UNSUPPORTED;
@ -701,7 +701,7 @@ mmsServer_handleWriteRequest(
accessResults[i] = valueIndication; accessResults[i] = valueIndication;
end_of_main_loop: end_of_main_loop:
MmsValue_delete(value); MmsValue_delete(value);
} }
@ -714,7 +714,7 @@ end_of_main_loop:
goto exit_function; goto exit_function;
} }
exit_function: exit_function:
MmsServer_unlockModel(connection->server); MmsServer_unlockModel(connection->server);

Loading…
Cancel
Save