From 64b589ac314e97f84d62bcd457fc50ee1e5fe76d Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Wed, 7 Mar 2018 14:18:43 +0100 Subject: [PATCH] - IEC 61850 server: added support for OptFlds and TrgOps basic data types (required for service tracking) --- src/iec61850/inc/iec61850_model.h | 6 +++++- src/iec61850/server/mms_mapping/mms_mapping.c | 9 +++++++++ src/iec61850/server/model/dynamic_model.c | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/iec61850/inc/iec61850_model.h b/src/iec61850/inc/iec61850_model.h index 1828db19..86e64021 100644 --- a/src/iec61850/inc/iec61850_model.h +++ b/src/iec61850/inc/iec61850_model.h @@ -117,7 +117,9 @@ typedef enum { IEC61850_CONSTRUCTED = 27, IEC61850_ENTRY_TIME = 28, IEC61850_PHYCOMADDR = 29, - IEC61850_CURRENCY = 30 + IEC61850_CURRENCY = 30, + IEC61850_OPTFLDS = 31, /* bit-string(10) */ + IEC61850_TRGOPS = 32 /* bit-string(6) */ #if (CONFIG_IEC61850_USE_COMPAT_TYPE_DECLARATIONS == 1) @@ -153,6 +155,8 @@ typedef enum { ENTRY_TIME = 28, PHYCOMADDR = 29, CURRENCY = 30 + OPTFLDS = 31, + TRGOPS = 32 #endif } DataAttributeType; diff --git a/src/iec61850/server/mms_mapping/mms_mapping.c b/src/iec61850/server/mms_mapping/mms_mapping.c index 9a9e11cc..13ad7057 100644 --- a/src/iec61850/server/mms_mapping/mms_mapping.c +++ b/src/iec61850/server/mms_mapping/mms_mapping.c @@ -267,6 +267,15 @@ createNamedVariableFromDataAttribute(DataAttribute* attribute) case IEC61850_PHYCOMADDR: MmsMapping_createPhyComAddrStructure(namedVariable); break; + case IEC61850_OPTFLDS: + namedVariable->typeSpec.bitString = 10; + namedVariable->type = MMS_BIT_STRING; + break; + case IEC61850_TRGOPS: + namedVariable->typeSpec.bitString = 6; + namedVariable->type = MMS_BIT_STRING; + break; + default: if (DEBUG_IED_SERVER) printf("MMS-MAPPING: type cannot be mapped %i\n", attribute->type); diff --git a/src/iec61850/server/model/dynamic_model.c b/src/iec61850/server/model/dynamic_model.c index 13185edf..a1de52ed 100644 --- a/src/iec61850/server/model/dynamic_model.c +++ b/src/iec61850/server/model/dynamic_model.c @@ -681,6 +681,8 @@ DataSetEntry_create(DataSet* dataSet, const char* variable, int index, const cha self->sibling = NULL; + self->value = NULL; + DataSet_addEntry(dataSet, self); return self;