From 875501998671542938eec3cc188d15344a1b0b1a Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Mon, 26 Jul 2021 18:36:22 +0200 Subject: [PATCH] - IED server: implemented functional naming --- .../simpleIO_direct_control.cid | 2 +- .../server_example_config_file.c | 4 +-- src/iec61850/inc/iec61850_dynamic_model.h | 13 +++++++- src/iec61850/inc/iec61850_model.h | 8 +++-- .../server/model/config_file_parser.c | 14 +++++++-- src/iec61850/server/model/dynamic_model.c | 28 ++++++++++++++---- src/iec61850/server/model/model.c | 24 ++++++++++----- tools/model_generator/genconfig.jar | Bin 97368 -> 97408 bytes .../tools/DynamicModelGenerator.java | 5 +++- 9 files changed, 75 insertions(+), 23 deletions(-) diff --git a/examples/server_example_basic_io/simpleIO_direct_control.cid b/examples/server_example_basic_io/simpleIO_direct_control.cid index ef8f1b7c..a0228a20 100644 --- a/examples/server_example_basic_io/simpleIO_direct_control.cid +++ b/examples/server_example_basic_io/simpleIO_direct_control.cid @@ -52,7 +52,7 @@ - + diff --git a/examples/server_example_config_file/server_example_config_file.c b/examples/server_example_config_file/server_example_config_file.c index 88252991..e91f2720 100644 --- a/examples/server_example_config_file/server_example_config_file.c +++ b/examples/server_example_config_file/server_example_config_file.c @@ -51,10 +51,10 @@ main(int argc, char** argv) /* Access to data attributes by object reference */ DataAttribute* anIn1_mag_f = (DataAttribute*) - IedModel_getModelNodeByObjectReference(model, "simpleIOGenericIO/GGIO1.AnIn1.mag.f"); + IedModel_getModelNodeByShortObjectReference(model, "GenericIO/GGIO1.AnIn1.mag.f"); DataAttribute* anIn1_t = (DataAttribute*) - IedModel_getModelNodeByObjectReference(model, "simpleIOGenericIO/GGIO1.AnIn1.t"); + IedModel_getModelNodeByShortObjectReference(model, "GenericIO/GGIO1.AnIn1.t"); if (anIn1_mag_f == NULL) printf("Error getting AnIn1.mag.f data attribute!\n"); diff --git a/src/iec61850/inc/iec61850_dynamic_model.h b/src/iec61850/inc/iec61850_dynamic_model.h index 4138d13c..20de3cbe 100644 --- a/src/iec61850/inc/iec61850_dynamic_model.h +++ b/src/iec61850/inc/iec61850_dynamic_model.h @@ -82,7 +82,7 @@ LIB61850_API void IedModel_destroy(IedModel* model); /** - * \brief Create a new logical device model and add it to the IED model + * \brief Create a new logical device and add it to the IED model * * \param name the name of the new logical device * \param parent the parent IED model @@ -92,6 +92,17 @@ IedModel_destroy(IedModel* model); LIB61850_API LogicalDevice* LogicalDevice_create(const char* name, IedModel* parent); +/** + * \brief Create a new logical device and add it to the IED model + * + * \param name the name of the new logical device + * \param parent the parent IED model + * \param ldName when not NULL functional naming is used for this LD (ldName <= 64 chars) + * + * \return the newly created LogicalDevice instance + */ +LIB61850_API LogicalDevice* +LogicalDevice_createEx(const char* inst, IedModel* parent, const char* ldName); /** * \brief Create a new logical mode and add it to a logical device diff --git a/src/iec61850/inc/iec61850_model.h b/src/iec61850/inc/iec61850_model.h index 1f10db3c..77cb5c5d 100644 --- a/src/iec61850/inc/iec61850_model.h +++ b/src/iec61850/inc/iec61850_model.h @@ -183,11 +183,11 @@ struct sIedModel { struct sLogicalDevice { ModelNodeType modelType; - char* name; + char* name; /* LD instance */ ModelNode* parent; ModelNode* sibling; ModelNode* firstChild; - char* ldName; + char* ldName; /* ldName (when using functional naming) */ }; struct sModelNode { @@ -489,7 +489,9 @@ IedModel_getSVControlBlock(IedModel* self, LogicalNode* parentLN, const char* sv * \brief Lookup a model node by its short (normalized) reference * * This version uses the object reference that does not contain the - * IED name as part of the logical device name. This function is useful for + * IED name or functional name as part of the logical device name. + * Instead the LD part consists of the LD instance name ("inst" attribute). + * This function is useful for * devices where the IED name can be configured. * * \param self the IedModel instance that holds the model node diff --git a/src/iec61850/server/model/config_file_parser.c b/src/iec61850/server/model/config_file_parser.c index ee9d2aec..37560994 100644 --- a/src/iec61850/server/model/config_file_parser.c +++ b/src/iec61850/server/model/config_file_parser.c @@ -172,12 +172,22 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle) if (StringUtils_startsWith((char*) lineBuffer, "LD")) { indendation = 2; - if (sscanf((char*) lineBuffer, "LD(%s)", nameString) < 1) + char ldName[65]; + ldName[0] = 0; + + if (sscanf((char*) lineBuffer, "LD(%s %s)", nameString, ldName) < 1) goto exit_error; terminateString(nameString, ')'); - currentLD = LogicalDevice_create(nameString, model); + if (ldName[0] != 0) { + terminateString(ldName, ')'); + + currentLD = LogicalDevice_createEx(nameString, model, ldName); + } + else { + currentLD = LogicalDevice_create(nameString, model); + } } else goto exit_error; diff --git a/src/iec61850/server/model/dynamic_model.c b/src/iec61850/server/model/dynamic_model.c index b8e9816b..0843d713 100644 --- a/src/iec61850/server/model/dynamic_model.c +++ b/src/iec61850/server/model/dynamic_model.c @@ -180,20 +180,33 @@ IedModel_addGSEControlBlock(IedModel* self, GSEControlBlock* gcb) } LogicalDevice* -LogicalDevice_create(const char* name, IedModel* parent) +LogicalDevice_createEx(const char* inst, IedModel* parent, const char* ldName) { LogicalDevice* self = (LogicalDevice*) GLOBAL_CALLOC(1, sizeof(LogicalDevice)); - self->name = StringUtils_copyString(name); - self->modelType = LogicalDeviceModelType; - self->parent = (ModelNode*) parent; - self->sibling = NULL; + if (self) { + self->name = StringUtils_copyString(inst); + self->modelType = LogicalDeviceModelType; + self->parent = (ModelNode*) parent; + self->sibling = NULL; - IedModel_addLogicalDevice(parent, self); + if (ldName) + self->ldName = StringUtils_copyString(ldName); + else + self->ldName = NULL; + + IedModel_addLogicalDevice(parent, self); + } return self; } +LogicalDevice* +LogicalDevice_create(const char* inst, IedModel* parent) +{ + return LogicalDevice_createEx(inst, parent, NULL); +} + static LogicalNode* LogicalDevice_getLastLogicalNode(LogicalDevice* self) { @@ -779,6 +792,9 @@ IedModel_destroy(IedModel* model) while (ld != NULL) { GLOBAL_FREEMEM (ld->name); + if (ld->ldName) + GLOBAL_FREEMEM (ld->ldName); + LogicalNode* ln = (LogicalNode*) ld->firstChild; while (ln != NULL) { diff --git a/src/iec61850/server/model/model.c b/src/iec61850/server/model/model.c index 7c3ef542..6d8a3e58 100644 --- a/src/iec61850/server/model/model.c +++ b/src/iec61850/server/model/model.c @@ -375,11 +375,11 @@ IedModel_getModelNodeByShortObjectReference(IedModel* model, const char* objectR if (separator != NULL) *separator = 0; - char ldName[65]; - strcpy(ldName, model->name); - strcat(ldName, objRef); + char ldInst[65]; + strncpy(ldInst, objRef, 64); + ldInst[64] = 0; - LogicalDevice* ld = IedModel_getDevice(model, ldName); + LogicalDevice* ld = IedModel_getDeviceByInst(model, ldInst); if (ld == NULL) return NULL; @@ -557,12 +557,22 @@ createObjectReference(ModelNode* node, char* objectReference, bool withoutIedNam if (withoutIedName) { nameLength = strlen(lDevice->name); strncpy(objectReference, lDevice->name, 64); + objectReference[64] = 0; } else { - nameLength = strlen (iedModel->name) + strlen(lDevice->name); + if (lDevice->ldName) { + nameLength = strlen(lDevice->ldName); + strncpy(objectReference, lDevice->ldName, 64); + objectReference[64] = 0; + } + else { + nameLength = strlen (iedModel->name) + strlen(lDevice->name); + + strncpy(objectReference, iedModel->name, 64); + strncat(objectReference, lDevice->name, 64); - strncpy(objectReference, iedModel->name, 64); - strncat(objectReference, lDevice->name, 64); + objectReference[64] = 0; + } } bufPos += nameLength; diff --git a/tools/model_generator/genconfig.jar b/tools/model_generator/genconfig.jar index 8b2670b0ae18d3cad1be5ad7149f3c630a501b0d..2c9ed1fc32bfed1a96eac95456e1f376101d23df 100644 GIT binary patch delta 27627 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 U>ANR4Qs7#E3meN0=nS;~1GneA-2eap diff --git a/tools/model_generator/src/com/libiec61850/tools/DynamicModelGenerator.java b/tools/model_generator/src/com/libiec61850/tools/DynamicModelGenerator.java index d5ec7ffc..cd1d4593 100644 --- a/tools/model_generator/src/com/libiec61850/tools/DynamicModelGenerator.java +++ b/tools/model_generator/src/com/libiec61850/tools/DynamicModelGenerator.java @@ -100,7 +100,10 @@ public class DynamicModelGenerator { output.println("MODEL(" + ied.getName() + "){"); for (LogicalDevice logicalDevice : logicalDevices) { output.print("LD("); - output.print(logicalDevice.getInst() + "){\n"); + output.print(logicalDevice.getInst()); + if (logicalDevice.getLdName() != null) + output.print(" " + logicalDevice.getLdName()); + output.print("){\n"); exportLogicalNodes(output, logicalDevice);