From 8b27f57d15d68b3e532a83b52ec3e7bcf9ab29cd Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Tue, 24 Feb 2015 17:37:35 +0100 Subject: [PATCH] - added support for GOOSE minTime, maxTime in SCL parser - configuration options for write access to GoCB elements - extended file format and data structure to support configuration of minTime, maxTime --- config/stack_config.h | 10 ++ config/stack_config.h.cmake | 10 ++ .../simpleIO_direct_control_goose.icd | 2 +- examples/server_example_goose/static_model.c | 4 +- src/iec61850/inc/iec61850_dynamic_model.h | 5 +- src/iec61850/inc/iec61850_model.h | 3 +- src/iec61850/server/mms_mapping/mms_goose.c | 24 +++- src/iec61850/server/mms_mapping/mms_mapping.c | 103 +++++++++++++++++- .../server/model/config_file_parser.c | 13 ++- src/iec61850/server/model/dynamic_model.c | 5 +- src/mms/inc_private/mms_server_internal.h | 2 +- src/mms/iso_mms/server/mms_read_service.c | 28 ++--- tools/model_generator/genconfig.jar | Bin 73831 -> 74049 bytes tools/model_generator/genmodel.jar | Bin 73830 -> 74048 bytes .../com/libiec61850/scl/model/GSEControl.java | 19 ++++ .../tools/DynamicModelGenerator.java | 7 +- .../tools/StaticModelGenerator.java | 7 +- 17 files changed, 206 insertions(+), 36 deletions(-) diff --git a/config/stack_config.h b/config/stack_config.h index 3c8467f..da921a3 100644 --- a/config/stack_config.h +++ b/config/stack_config.h @@ -98,6 +98,16 @@ /* The number of GOOSE retransmissions after an event */ #define CONFIG_GOOSE_EVENT_RETRANSMISSION_COUNT 2 +/* Define if GOOSE control block elements are writable (1) or read-only (0) */ +#define CONFIG_GOOSE_GOID_WRITABLE 1 +#define CONFIG_GOOSE_DATSET_WRITABLE 1 +#define CONFIG_GOOSE_CONFREV_WRITABLE 0 +#define CONFIG_GOOSE_NDSCOM_WRITABLE 0 +#define CONFIG_GOOSE_DSTADDRESS_WRITABLE 0 +#define CONFIG_GOOSE_MINTIME_WRITABLE 0 +#define CONFIG_GOOSE_MAXTIME_WRITABLE 0 +#define CONFIG_GOOSE_FIXEDOFFS_WRITABLE 0 + /* The default value for the priority field of the 802.1Q header (allowed range 0-7) */ #define CONFIG_GOOSE_DEFAULT_PRIORITY 4 diff --git a/config/stack_config.h.cmake b/config/stack_config.h.cmake index 46c76f8..d91bc67 100644 --- a/config/stack_config.h.cmake +++ b/config/stack_config.h.cmake @@ -96,6 +96,16 @@ /* The number of GOOSE retransmissions after an event */ #define CONFIG_GOOSE_EVENT_RETRANSMISSION_COUNT 2 +/* Define if GOOSE control block elements are writable (1) or read-only (0) */ +#define CONFIG_GOOSE_GOID_WRITABLE 1 +#define CONFIG_GOOSE_DATSET_WRITABLE 1 +#define CONFIG_GOOSE_CONFREV_WRITABLE 1 +#define CONFIG_GOOSE_NDSCOM_WRITABLE 1 +#define CONFIG_GOOSE_DSTADDRESS_WRITABLE 1 +#define CONFIG_GOOSE_MINTIME_WRITABLE 1 +#define CONFIG_GOOSE_MAXTIME_WRITABLE 1 +#define CONFIG_GOOSE_FIXEDOFFS_WRITABLE 1 + /* The default value for the priority field of the 802.1Q header (allowed range 0-7) */ #define CONFIG_GOOSE_DEFAULT_PRIORITY 4 diff --git a/examples/server_example_goose/simpleIO_direct_control_goose.icd b/examples/server_example_goose/simpleIO_direct_control_goose.icd index 5f68fa0..3efbf70 100644 --- a/examples/server_example_goose/simpleIO_direct_control_goose.icd +++ b/examples/server_example_goose/simpleIO_direct_control_goose.icd @@ -77,7 +77,7 @@ - + diff --git a/examples/server_example_goose/static_model.c b/examples/server_example_goose/static_model.c index e1bcf92..0bddaaf 100644 --- a/examples/server_example_goose/static_model.c +++ b/examples/server_example_goose/static_model.c @@ -1983,7 +1983,7 @@ static PhyComAddress iedModel_GenericIO_LLN0_gse0_address = { {0x1, 0xc, 0xcd, 0x1, 0x0, 0x1} }; -GSEControlBlock iedModel_GenericIO_LLN0_gse0 = {&iedModel_GenericIO_LLN0, "gcbEvents", "events", "Events", 2, false,&iedModel_GenericIO_LLN0_gse0_address, &iedModel_GenericIO_LLN0_gse1}; +GSEControlBlock iedModel_GenericIO_LLN0_gse0 = {&iedModel_GenericIO_LLN0, "gcbEvents", "events", "Events", 2, false, &iedModel_GenericIO_LLN0_gse0_address, 1000, 3000, &iedModel_GenericIO_LLN0_gse1}; static PhyComAddress iedModel_GenericIO_LLN0_gse1_address = { 4, @@ -1992,7 +1992,7 @@ static PhyComAddress iedModel_GenericIO_LLN0_gse1_address = { {0x1, 0xc, 0xcd, 0x1, 0x0, 0x1} }; -GSEControlBlock iedModel_GenericIO_LLN0_gse1 = {&iedModel_GenericIO_LLN0, "gcbAnalogValues", "analog", "AnalogValues", 2, false,&iedModel_GenericIO_LLN0_gse1_address, NULL}; +GSEControlBlock iedModel_GenericIO_LLN0_gse1 = {&iedModel_GenericIO_LLN0, "gcbAnalogValues", "analog", "AnalogValues", 2, false, &iedModel_GenericIO_LLN0_gse1_address, -1, -1, NULL}; diff --git a/src/iec61850/inc/iec61850_dynamic_model.h b/src/iec61850/inc/iec61850_dynamic_model.h index 43d1182..84b0239 100644 --- a/src/iec61850/inc/iec61850_dynamic_model.h +++ b/src/iec61850/inc/iec61850_dynamic_model.h @@ -171,11 +171,14 @@ SettingGroupControlBlock_create(LogicalNode* parent, uint8_t actSG, uint8_t numO * \param dataSet the data set reference to be used by the GoCB * \param confRef the configuration revision * \param fixedOffs indicates if GOOSE publisher shall use fixed offsets (NOT YET SUPPORTED) + * \param minTime minimum GOOSE retransmission time (-1 if not specified - uses stack default then) + * \param maxTime GOOSE retransmission time in stable state (-1 if not specified - uses stack default then) * * \return the new GoCB instance */ GSEControlBlock* -GSEControlBlock_create(const char* name, LogicalNode* parent, char* appId, char* dataSet, uint32_t confRef, bool fixedOffs); +GSEControlBlock_create(const char* name, LogicalNode* parent, char* appId, char* dataSet, uint32_t confRef, + bool fixedOffs, int minTime, int maxTime); /** * \brief create a PhyComAddress object and add it to a GoCB diff --git a/src/iec61850/inc/iec61850_model.h b/src/iec61850/inc/iec61850_model.h index a4a091a..f8d36e6 100644 --- a/src/iec61850/inc/iec61850_model.h +++ b/src/iec61850/inc/iec61850_model.h @@ -247,7 +247,8 @@ struct sGSEControlBlock { uint32_t confRef; /* ConfRef - configuration revision */ bool fixedOffs; /* fixed offsets */ PhyComAddress* address; /* GSE communication parameters */ - + int minTime; /* optional minTime parameter --> -1 if not present */ + int maxTime; /* optional maxTime parameter --> -1 if not present */ GSEControlBlock* sibling; /* next control block in list or NULL if this is the last entry */ }; diff --git a/src/iec61850/server/mms_mapping/mms_goose.c b/src/iec61850/server/mms_mapping/mms_goose.c index 15bf0dd..e4c0678 100644 --- a/src/iec61850/server/mms_mapping/mms_goose.c +++ b/src/iec61850/server/mms_mapping/mms_goose.c @@ -57,6 +57,9 @@ struct sMmsGooseControlBlock { uint64_t nextPublishTime; int retransmissionsLeft; /* number of retransmissions left for the last event */ + int minTime; + int maxTime; + #if (CONFIG_MMS_THREADLESS_STACK != 1) Semaphore publisherMutex; #endif @@ -223,7 +226,10 @@ MmsGooseControlBlock_enable(MmsGooseControlBlock self) self->publisher = GoosePublisher_create(&commParameters, self->mmsMapping->gooseInterfaceId); - GoosePublisher_setTimeAllowedToLive(self->publisher, CONFIG_GOOSE_STABLE_STATE_TRANSMISSION_INTERVAL * 3); + self->minTime = MmsValue_toUint32(MmsValue_getElement(self->mmsValue, 6)); + self->maxTime = MmsValue_toUint32(MmsValue_getElement(self->mmsValue, 7)); + + GoosePublisher_setTimeAllowedToLive(self->publisher, self->maxTime * 3); GoosePublisher_setDataSetRef(self->publisher, self->dataSetRef); @@ -555,6 +561,22 @@ GOOSE_createGOOSEControlBlocks(MmsMapping* self, MmsDomain* domain, mmsGCB->domain = domain; mmsGCB->logicalNode = logicalNode; + if (gooseControlBlock->minTime == -1) + mmsGCB->minTime = CONFIG_GOOSE_EVENT_RETRANSMISSION_INTERVAL; + else + mmsGCB->minTime = gooseControlBlock->minTime; + + if (gooseControlBlock->maxTime == -1) + mmsGCB->maxTime = CONFIG_GOOSE_STABLE_STATE_TRANSMISSION_INTERVAL; + else + mmsGCB->maxTime = gooseControlBlock->maxTime; + + MmsValue* minTime = MmsValue_getElement(gseValues, 6); + MmsValue_setUint32(minTime, mmsGCB->minTime); + + MmsValue* maxTime = MmsValue_getElement(gseValues, 7); + MmsValue_setUint32(maxTime, mmsGCB->maxTime); + mmsGCB->mmsMapping = self; LinkedList_add(self->gseControls, mmsGCB); diff --git a/src/iec61850/server/mms_mapping/mms_mapping.c b/src/iec61850/server/mms_mapping/mms_mapping.c index 07ee68f..881d1b6 100644 --- a/src/iec61850/server/mms_mapping/mms_mapping.c +++ b/src/iec61850/server/mms_mapping/mms_mapping.c @@ -1321,6 +1321,38 @@ lookupGCB(MmsMapping* self, MmsDomain* domain, char* lnName, char* objectName) return NULL; } +#ifndef CONFIG_GOOSE_GOID_WRITABLE +#define CONFIG_GOOSE_GOID_WRITABLE 0 +#endif + +#ifndef CONFIG_GOOSE_DATSET_WRITABLE +#define CONFIG_GOOSE_DATSET_WRITABLE 0 +#endif + +#ifndef CONFIG_GOOSE_CONFREV_WRITABLE +#define CONFIG_GOOSE_CONFREV_WRITABLE 0 +#endif + +#ifndef CONFIG_GOOSE_NDSCOM_WRITABLE +#define CONFIG_GOOSE_NDSCOM_WRITABLE 0 +#endif + +#ifndef CONFIG_GOOSE_DSTADDRESS_WRITABLE +#define CONFIG_GOOSE_DSTADDRESS_WRITABLE 0 +#endif + +#ifndef CONFIG_GOOSE_MINTIME_WRITABLE +#define CONFIG_GOOSE_MINTIME_WRITABLE 0 +#endif + +#ifndef CONFIG_GOOSE_MAXTIME_WRITABLE +#define CONFIG_GOOSE_MAXTIME_WRITABLE 0 +#endif + +#ifndef CONFIG_GOOSE_FIXEDOFFS_WRITABLE +#define CONFIG_GOOSE_FIXEDOFFS_WRITABLE 0 +#endif + static MmsDataAccessError writeAccessGooseControlBlock(MmsMapping* self, MmsDomain* domain, char* variableIdOrig, MmsValue* value) @@ -1370,16 +1402,77 @@ writeAccessGooseControlBlock(MmsMapping* self, MmsDomain* domain, char* variable if (MmsGooseControlBlock_isEnabled(mmsGCB)) return DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE; else { - MmsValue* subValue = MmsValue_getSubElement(MmsGooseControlBlock_getMmsValues(mmsGCB), + bool allowAccess = false; + +#if (CONFIG_GOOSE_GOID_WRITABLE == 1) + if (strcmp(varName, "GoID") == 0) { + MmsValue_update(MmsValue_getElement(MmsGooseControlBlock_getMmsValues(mmsGCB), 1), value); + allowAccess = true; + } +#endif + +#if (CONFIG_GOOSE_DATSET_WRITABLE == 1) + if (strcmp(varName, "DatSet") == 0) { + MmsValue_update(MmsValue_getElement(MmsGooseControlBlock_getMmsValues(mmsGCB), 2), value); + allowAccess = true; + } +#endif + +#if (CONFIG_GOOSE_CONFREV_WRITABLE == 1) + if (strcmp(varName, "ConfRev") == 0) { + MmsValue_update(MmsValue_getElement(MmsGooseControlBlock_getMmsValues(mmsGCB), 3), value); + allowAccess = true; + } +#endif + +#if (CONFIG_GOOSE_NDSCOM_WRITABLE == 1) + if (strcmp(varName, "NdsCom") == 0) { + MmsValue_update(MmsValue_getElement(MmsGooseControlBlock_getMmsValues(mmsGCB), 4), value); + allowAccess = true; + } +#endif + +#if (CONFIG_GOOSE_DSTADDRESS_WRITABLE == 1) + if (memcmp(varName, "DstAddress", 9) == 0) { + MmsValue* subValue = MmsValue_getSubElement(MmsGooseControlBlock_getMmsValues(mmsGCB), MmsGooseControlBlock_getVariableSpecification(mmsGCB), varName); - if (subValue == NULL) - return DATA_ACCESS_ERROR_INVALID_ADDRESS; + if (subValue == NULL) + return DATA_ACCESS_ERROR_INVALID_ADDRESS; - if (MmsValue_update(subValue, value)) + if (MmsValue_update(subValue, value)) + return DATA_ACCESS_ERROR_SUCCESS; + else + return DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID; + } +#endif + +#if (CONFIG_GOOSE_MINTIME_WRITABLE == 1) + if (strcmp(varName, "MinTime") == 0) { + MmsValue_update(MmsValue_getElement(MmsGooseControlBlock_getMmsValues(mmsGCB), 6), value); + allowAccess = true; + } +#endif + +#if (CONFIG_GOOSE_MAXTIME_WRITABLE == 1) + if (strcmp(varName, "MaxTime") == 0) { + MmsValue_update(MmsValue_getElement(MmsGooseControlBlock_getMmsValues(mmsGCB), 7), value); + allowAccess = true; + } +#endif + +#if (CONFIG_GOOSE_FIXEDOFFS_WRITABLE == 1) + if (strcmp(varName, "FixedOffs") == 0) { + MmsValue_update(MmsValue_getElement(MmsGooseControlBlock_getMmsValues(mmsGCB), 8), value); + allowAccess = true; + } +#endif + + if (allowAccess) return DATA_ACCESS_ERROR_SUCCESS; else - return DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID; + return DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; + } } } diff --git a/src/iec61850/server/model/config_file_parser.c b/src/iec61850/server/model/config_file_parser.c index 0e4d353..fb22fb9 100644 --- a/src/iec61850/server/model/config_file_parser.c +++ b/src/iec61850/server/model/config_file_parser.c @@ -221,15 +221,16 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle) else if (StringUtils_startsWith((char*) lineBuffer, "GC")) { uint32_t confRef; int fixedOffs; + int minTime = -1; + int maxTime = -1; - int matchedItems = sscanf((char*) lineBuffer, "GC(%s %s %s %u %i)", - nameString, nameString2, nameString3, &confRef, &fixedOffs); - + int matchedItems = sscanf((char*) lineBuffer, "GC(%s %s %s %u %i %i %i)", + nameString, nameString2, nameString3, &confRef, &fixedOffs, &minTime, &maxTime); if (matchedItems < 5) goto exit_error; currentGoCB = GSEControlBlock_create(nameString, currentLN, nameString2, - nameString3, confRef, fixedOffs); + nameString3, confRef, fixedOffs, minTime, maxTime); indendation = 4; @@ -257,7 +258,7 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle) #endif /* (CONFIG_IEC61850_SETTING_GROUPS == 1) */ else { - // if (DEBUG_IED_SERVER) + if (DEBUG_IED_SERVER) printf("IED_SERVER: Unknown identifier (%s)\n", lineBuffer); goto exit_error; @@ -430,7 +431,7 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle) return model; exit_error: - // if (DEBUG_IED_SERVER) + if (DEBUG_IED_SERVER) printf("IED_SERVER: error parsing line %i (indendation level = %i)\n", currentLine, indendation); IedModel_destroy(model); return NULL; diff --git a/src/iec61850/server/model/dynamic_model.c b/src/iec61850/server/model/dynamic_model.c index f536d47..5be7348 100644 --- a/src/iec61850/server/model/dynamic_model.c +++ b/src/iec61850/server/model/dynamic_model.c @@ -302,7 +302,8 @@ LogicalNode_addGSEControlBlock(LogicalNode* self, GSEControlBlock* gcb) } GSEControlBlock* -GSEControlBlock_create(const char* name, LogicalNode* parent, char* appId, char* dataSet, uint32_t confRef, bool fixedOffs) +GSEControlBlock_create(const char* name, LogicalNode* parent, char* appId, char* dataSet, uint32_t confRef, bool fixedOffs, + int minTime, int maxTime) { GSEControlBlock* self = (GSEControlBlock*) GLOBAL_MALLOC(sizeof(GSEControlBlock)); @@ -321,6 +322,8 @@ GSEControlBlock_create(const char* name, LogicalNode* parent, char* appId, char* self->confRef = confRef; self->fixedOffs = fixedOffs; + self->minTime = minTime; + self->maxTime = maxTime; self->address = NULL; diff --git a/src/mms/inc_private/mms_server_internal.h b/src/mms/inc_private/mms_server_internal.h index 4dede14..000936d 100644 --- a/src/mms/inc_private/mms_server_internal.h +++ b/src/mms/inc_private/mms_server_internal.h @@ -124,7 +124,7 @@ struct sMmsServerConnection { int maxServOutstandingCalling; int maxServOutstandingCalled; int dataStructureNestingLevel; - int maxPduSize; /* local detail */ + uint32_t maxPduSize; /* local detail */ IsoConnection isoConnection; MmsServer server; uint32_t lastInvokeId; diff --git a/src/mms/iso_mms/server/mms_read_service.c b/src/mms/iso_mms/server/mms_read_service.c index 30cf343..6ad75e4 100644 --- a/src/mms/iso_mms/server/mms_read_service.c +++ b/src/mms/iso_mms/server/mms_read_service.c @@ -322,27 +322,27 @@ static int encodeVariableAccessSpecification(VarAccessSpec* accessSpec, uint8_t* buffer, int bufPos, bool encode) { /* determine size */ - int varAccessSpecSize = 0; + uint32_t varAccessSpecSize = 0; - int itemIdLen = strlen(accessSpec->itemId); + uint32_t itemIdLen = strlen(accessSpec->itemId); varAccessSpecSize += itemIdLen + BerEncoder_determineLengthSize(itemIdLen) + 1; if (accessSpec->domainId != NULL) { - int domainIdLen = strlen(accessSpec->domainId); + uint32_t domainIdLen = strlen(accessSpec->domainId); varAccessSpecSize += domainIdLen + BerEncoder_determineLengthSize(domainIdLen) + 1; } - int specificityLength = varAccessSpecSize; + uint32_t specificityLength = varAccessSpecSize; varAccessSpecSize += 1 + BerEncoder_determineLengthSize(specificityLength); - int variableListNameLength = varAccessSpecSize; + uint32_t variableListNameLength = varAccessSpecSize; varAccessSpecSize += 1 + BerEncoder_determineLengthSize(variableListNameLength); - int varAccessSpecLength = varAccessSpecSize; + uint32_t varAccessSpecLength = varAccessSpecSize; varAccessSpecSize += 1 + BerEncoder_determineLengthSize(varAccessSpecLength); @@ -389,14 +389,14 @@ encodeReadResponse(MmsServerConnection connection, int variableCount = LinkedList_size(values); - int varAccessSpecSize = 0; + uint32_t varAccessSpecSize = 0; if (accessSpec != NULL) { varAccessSpecSize = encodeVariableAccessSpecification(accessSpec, NULL, 0, false); } /* determine BER encoded message sizes */ - int accessResultSize = 0; + uint32_t accessResultSize = 0; /* iterate values list to determine encoded size */ LinkedList value = LinkedList_getNext(values); @@ -410,21 +410,21 @@ encodeReadResponse(MmsServerConnection connection, value = LinkedList_getNext(value); } - int listOfAccessResultsLength = 1 + + uint32_t listOfAccessResultsLength = 1 + BerEncoder_determineLengthSize(accessResultSize) + accessResultSize; - int confirmedServiceResponseContentLength = listOfAccessResultsLength + varAccessSpecSize; + uint32_t confirmedServiceResponseContentLength = listOfAccessResultsLength + varAccessSpecSize; - int confirmedServiceResponseLength = 1 + + uint32_t confirmedServiceResponseLength = 1 + BerEncoder_determineLengthSize(confirmedServiceResponseContentLength) + confirmedServiceResponseContentLength; - int invokeIdSize = BerEncoder_UInt32determineEncodedSize(invokeId) + 2; + uint32_t invokeIdSize = BerEncoder_UInt32determineEncodedSize(invokeId) + 2; - int confirmedResponseContentSize = confirmedServiceResponseLength + invokeIdSize; + uint32_t confirmedResponseContentSize = confirmedServiceResponseLength + invokeIdSize; - int mmsPduSize = 1 + BerEncoder_determineLengthSize(confirmedResponseContentSize) + + uint32_t mmsPduSize = 1 + BerEncoder_determineLengthSize(confirmedResponseContentSize) + confirmedResponseContentSize; /* Check if message would fit in the MMS PDU */ diff --git a/tools/model_generator/genconfig.jar b/tools/model_generator/genconfig.jar index bd3666a608fd27340081f956c06df4de07871878..625d0eb1c3a0ff8b4f6a9e93606c3de0cfe3f7ca 100644 GIT binary patch delta 21162 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 hM}&*|2SqXSl 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 C7d&17 diff --git a/tools/model_generator/genmodel.jar b/tools/model_generator/genmodel.jar index 4ad96abb02c4fd22b701b2df8028b60b51b52bd0..e2af5a1c61a3a7fe659c368fc490e531bb783d19 100644 GIT binary patch delta 21008 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 Axc~qF delta 20579 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 &Go>~T9t25z{Itz!W6?nW_iBnW9 zdX*2`RReBRe!Nhv#w%4LcBp3DqgwC*wHEiQR(w(g@dXvamsK17UaiBo)q4Cuwc}sa z2K-E&jbEs9@Q~Vwo$6dlQ|FO?q0Xm1Y7-4sn`xNZLQ~Ymv`k$}E7fImk-CC*sjKLA z^-~I~t@MG~M&GF&Dob6X^3}DbzbJ%0hv9n5Jq+>mDasq&=Mdzwryqxg`In;(g13)^ zSa8e#0NLK23}L?^ku|L_drbE5Fpf<4CQx0+OuNI`&1hG1c*x;x$%Tb~G2a75K0a`!N0krNu;(S&i76|@D4lnC&(6NYewH*?}M{r{7B;^O9VK5%DJO)x0oQso^F1=U$x-HPjk=luIwY+rK3i)=a zG!D-cCv$Zq;aU;78tyRNE)PE`_MVspo)@EQH^C@p5g8_$DG{kToA!(j7~Bnv)qVJ# zIGUz9G{wk0_Ow`ktSD;iF^9LAU0LLSCcO%^VQdUG|I;jg(aq)QCpL(+_-=0t;}|eDK4LgO7C_yfzZgungw1qrM5!)o$pc zZiTVxb~sht0ZY^#Sg-DeJ?dTvtNY+lbw50=9)PFRUO1qC!tkNmhf4A0Mm>rd>T%3c zPhz2Z8mrW^Sfif9R&@Zks2A`O^%8DZzs76Tt9YY&4WCxO!9S|k@vwS>K>ePSdXwDh zZOTx8pi=cNoud9kjp{wxs@|s^>I05lAJSg+S9(?bo!(R*(`V|Rs+anNH=duWN$N9o zrusrPs4vxjrRpoSO?}N9&~JDH`mMT8eW%`42i0HIVTSBf|8b!UT;v+=a=E6uQd~1! znyb#0=DOUK?z-1yxZZbVr0A~9ltNc_%JHsVDYINTDJxyMDLz+TO2E}OWrHg}WuvQq z%K5GVDVtq`%((d+3^)vftgo!h%Gu^Qd+fJZi@yVZ-YL-`$TmMFJ?=1Mp$R>>D|9D| zBFp-03!P8A+9G9Kc{o&UAD+V?vW;boH7#~BOp<*U*~*p-%34wsDy0ObH z^9yq6GBJjtTo=9=xqrJBC7dbvur}DG@jRrhA^5KCjw4ZC2d8z`N^0_fcj4xN%cS|g zKJGE%RK?u>zQlvR6&rpO^S)RWgK6_!`Bp4sNTWplel1ppan#(F6Wwxvw(Irsjsvok zf>d&ds2L%4*p?P5;*!;N!r0CG;AF5vU&{$ohyH_?6{QdMlqydIG2XnI3VnM(>?`&c z6vM=rJs>;9#l_Kg`tUArqL9y}VK|<=UsG)D@uB023=$*aQT-ZCAL!ADy$rcZBQ|Z~ z@{W?kySpDAO_xo`N$^e>LF+^jamwRf(@} zZr*;gT9=Mnu~_V-Cbin1=Z_dV?>F<-XMFAKusZp4N6sd9^>H#OS8a@&W)vB+vs(lI z*zJ^ZEmiropX}HP`Fy&-{Y7%F#r+eKl$b7m<{cx8Ena8NPS2!Q)2untZ2CDbr)-OE zv$+x7W=s38r>1Xiui*pZ%F{e2)hW{jpJ$p4-on^x0Z!PV)*)O}{ORD4CvOZmzXmyR zH)c1eO^bgnNjEX)(~5kNV!dxi%^vAM&0l6gDiM!foKG|@IO&;JHp;=@p&!&u|8`hb zS2=7HAL=snzGRW1jg`s$42Q`bQJ}{q2iwt9(ffCc?4yhL*!yp6yW}YcGhR z%WiVFgCda=gVEz=EjvC8W)%kA_k-qPs|nWG(-s9rrL7J>dcqiY<7TbCX%8L1mhMr5 zGesa_hX1Z<>@vcL_EF>j_N9Ap++ffcw4OzmF%@WsBDiVIbY3_K4{I32{UEPKQj%$rMohGPTA2UZ;H((u zn@6>4FIp&(w64Bf_^>qXkbAo8?uN+6o(pZ~no8`9j;*pbmx~M>8;JPwS#R-kL}!i( z^Y8Dvn4crcaieF1tY@N$Y7fgg2rjo`k5F(29^F&$cezK_R@`u^*wo58BQc<*g~=&- zIC|Lq*158T?1T$^a__3B_o+&J6{C#_-c?^7&v}&PDihiosYN2jfvfba&y)7`^R(Gn z)Cd%njW=YDrM~!9_GnV^oa-jT^_@nu_Pr`bA2lUCV%HvUy?OOW?6s8d@e&aQ&N)AF zDcY9l>g}`XlCh)xq2*;1qmWNlHP`nJu5)sl+A*XvOIWDUxUg3`jib^?i*NIkSI5cN zdB67Jg{s}7B;H)xxooqyQGv6idus)|Z34dp{(4y1QdF0=5i@z_d;IisY}}qHdkdnm zm1;nrr=ECE$Sd7`=LxNgJ7z;~1kF0wz3inlr47@28!|(N@%gGEbLOoY1Fl-pw&I8F zZKEn4nwqr|LY+y)$1ThKye#4Vf*_eh__#wp(M_z1zD{xWP^wL3ymorA%aE?ys6g0Q z_`JX;YP_bemVM?+$9`3hf$XNN%=#O>4&=_P9~L*<$L~_4T8RU1Ghf99N*urJdrO0& z@G1Rzj8f?+M$;zn<>7{X4Li!~bP^@nUEgGg9&snM)obmX*mAHTC&`!oEK5!15Y5x1 zOOJ1Sd(o?$kgn3nzJWu3pQGnVPPLs!QB=0-ug-ub-l zhE@5h0Z(Rr@YkEYy>P0|J#ER)dv3U_T!vzK6Yn^Px1v&B5vg|~#AiV;QI4Wzn}_Gb3M8@3`QX zKebWC?%n2e`g_Q#KBJZN^qt@tLpgk~_mI&W00+nVq#tw1Mxj;qJ%1F@+&uBq1iXrtPuF5W@;MW3C; zJ-pA79DMUuZ<_PxiM;UHueXddXV;o!2N#2l<`y}-jy-Ptn%g=%jH=Lr%!K&>qCz-h zoVZWU=fks?``C zB`yMhuBh$-8i!WMsHlx$os7Eyd1Lt8@8-lI^;={9IJVG|Yh@YU%?DUzK5fCXoW|OW zK)Dsw3N&H|4i=P#xEa3fMJ%?mhr}@M*vN%$yu=9WG-4H1*;B*`kX^6$vL;YFqCl&( zwDwQ_+9YexoHOk#lod{!2cV)Tw(Va1&GP@vIgxL0oV#Gp@fvK-2oYK)wzLY8e< zC$NRbHj{faOA;P^0Bct!AuUh+|E)j41;KHONL$ zC%_2ZG740MtvSpC@$#Ti;nRZ97BILc2$`U>gBJuLO)yXwf(!t)UkEZ2Ks)>UJ1Y2| z5acY6SX=-35J~)_@fge#JgwV`u>55eH_Q}*_(9wdVMv;z+iaOt=0!t;yCU2z42g5> zu|g;vSQdxaqa~{25c?S$npra*-n|TlqTqU46h!_4A^6rZ(S#Cb-Pi;#yoj8GFp?q& zanS=IWQ4ZcK^$V3-#c!>z9{zqaOk~N1~}BB;8$l_O^ib4cn z9gGq?gAjrUSBpX-0DOXir}wk1S+`%BY{)8DN(|zcN9Vn~4$){V^6ZoxVtfi; zkfra1Ja!--#Qkyjo&#|rsG{os=#X_Cxv6jhsj*!2pH8J0*we$pL_E9Kj>v#xDv?cq zc}swDOHo1)284VDKl~NXE|-ZCOPMGE>qB7Xy89Ed4L%|#eu>6g~edh{%8jV(|#B2 zpB^YiKoW7!z6abZYQ^AE5q8{Ql(4S{gwK7Ef3;4UOZN6AB=itmAkqYT#8GF3Q{404xm%>6H6TUK^Pd^pkZULgd5B$^;!*c+ zYb6;-28cv3u}p^-=>Q*c#gSIT4u7?5O-p!;hK)d!S7Ar70!u_HMmQp|DbGvcHT=PZL|D7gD88VS{EB@kX{4FaZ41JGs-BoDw46wLZT zOa7?>79s$fQ4l+iSSrC-c?b_cS$PC({e`;IdYSnDU%n?1g7X6e(emQN;b{&;1ke=? ZeELwzmzzZ)^TfiqwU7#TssMzv?tda!R&W3S diff --git a/tools/model_generator/src/com/libiec61850/scl/model/GSEControl.java b/tools/model_generator/src/com/libiec61850/scl/model/GSEControl.java index 68d79a1..40ee837 100644 --- a/tools/model_generator/src/com/libiec61850/scl/model/GSEControl.java +++ b/tools/model_generator/src/com/libiec61850/scl/model/GSEControl.java @@ -34,6 +34,8 @@ public class GSEControl { private int confRev = 1; private String appID; private boolean fixedOffs = false; + private int minTime = -1; + private int maxTime = -1; public GSEControl(Node gseControlNode) throws SclParserException { @@ -53,6 +55,15 @@ public class GSEControl { if (fixedOffs != null) this.fixedOffs = fixedOffs; + String minTimeStr = ParserUtils.parseAttribute(gseControlNode, "minTime"); + String maxTimeStr = ParserUtils.parseAttribute(gseControlNode, "maxTime"); + + if (minTimeStr != null) + minTime = new Integer(minTimeStr); + + if (maxTimeStr != null) + maxTime = new Integer(maxTimeStr); + String typeString = ParserUtils.parseAttribute(gseControlNode, "type"); if (typeString != null) @@ -84,5 +95,13 @@ public class GSEControl { public boolean isFixedOffs() { return fixedOffs; } + + public int getMinTime() { + return minTime; + } + + public int getMaxTime() { + return maxTime; + } } diff --git a/tools/model_generator/src/com/libiec61850/tools/DynamicModelGenerator.java b/tools/model_generator/src/com/libiec61850/tools/DynamicModelGenerator.java index 03d3cc6..ac47251 100644 --- a/tools/model_generator/src/com/libiec61850/tools/DynamicModelGenerator.java +++ b/tools/model_generator/src/com/libiec61850/tools/DynamicModelGenerator.java @@ -161,7 +161,12 @@ public class DynamicModelGenerator { output.print('1'); else output.print('0'); - + output.print(' '); + output.print(gcb.getMinTime()); + output.print(' '); + output.print(gcb.getMaxTime()); + output.print(' '); + if (gseAddress == null) { output.println(");"); } diff --git a/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java b/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java index ba23d76..22ad738 100644 --- a/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java +++ b/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java @@ -754,14 +754,17 @@ public class StaticModelGenerator { gseString += gseControlBlock.getConfRev() + ", "; if (gseControlBlock.isFixedOffs()) - gseString += "true,"; + gseString += "true, "; else - gseString += "false,"; + gseString += "false, "; if (gseAddress != null) gseString += "&" + phyComAddrName + ", "; else gseString += "NULL, "; + + gseString += gseControlBlock.getMinTime() + ", "; + gseString += gseControlBlock.getMaxTime() + ", "; currentGseVariableNumber++;