From 2f5817e0ac5e80801fead15359a694e8a49b6a0f Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Mon, 3 Aug 2020 09:22:23 +0200 Subject: [PATCH] - IEC 61850 server: implemented service tracking for BRCBs and URCBs --- CMakeLists.txt | 1 + config/stack_config.h | 3 + config/stack_config.h.cmake | 3 + examples/CMakeLists.txt | 1 + .../CMakeLists.txt | 21 + .../server_example_service_tracking.c | 200 + .../simpleIO_ltrk_tests.icd | 555 +++ .../static_model.c | 4067 +++++++++++++++++ .../static_model.h | 609 +++ .../inc_private/mms_mapping_internal.h | 154 +- src/iec61850/inc_private/reporting.h | 2 +- src/iec61850/server/mms_mapping/mms_mapping.c | 251 +- src/iec61850/server/mms_mapping/reporting.c | 284 +- 13 files changed, 6144 insertions(+), 7 deletions(-) create mode 100644 examples/server_example_service_tracking/CMakeLists.txt create mode 100644 examples/server_example_service_tracking/server_example_service_tracking.c create mode 100644 examples/server_example_service_tracking/simpleIO_ltrk_tests.icd create mode 100644 examples/server_example_service_tracking/static_model.c create mode 100644 examples/server_example_service_tracking/static_model.h diff --git a/CMakeLists.txt b/CMakeLists.txt index ebbfc94d..31c84c23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,7 @@ option(CONFIG_INCLUDE_GOOSE_SUPPORT "Build with GOOSE support" ON) option(CONFIG_IEC61850_CONTROL_SERVICE "Build with support for IEC 61850 control features" ON) option(CONFIG_IEC61850_REPORT_SERVICE "Build with support for IEC 61850 reporting services" ON) option(CONFIG_IEC61850_LOG_SERVICE "Build with support for IEC 61850 logging services" ON) +option(CONFIG_IEC61850_SERVICE_TRACKING "Build with support for IEC 61850 service tracking" ON) option(CONFIG_IEC61850_SETTING_GROUPS "Build with support for IEC 61850 setting group services" ON) option(CONFIG_IEC61850_SUPPORT_USER_READ_ACCESS_CONTROL "Allow user provided callback to control read access" ON) diff --git a/config/stack_config.h b/config/stack_config.h index 1ecd9da9..66f8934e 100644 --- a/config/stack_config.h +++ b/config/stack_config.h @@ -161,6 +161,9 @@ /* include support for IEC 61850 log services */ #define CONFIG_IEC61850_LOG_SERVICE 1 +/* include support for IEC 61850 service tracking */ +#define CONFIG_IEC61850_SERVICE_TRACKING 1 + /* allow user to control read access by callback */ #define CONFIG_IEC61850_SUPPORT_USER_READ_ACCESS_CONTROL 1 diff --git a/config/stack_config.h.cmake b/config/stack_config.h.cmake index 164e2602..0e0c7085 100644 --- a/config/stack_config.h.cmake +++ b/config/stack_config.h.cmake @@ -151,6 +151,9 @@ /* include support for IEC 61850 log services */ #cmakedefine01 CONFIG_IEC61850_LOG_SERVICE +/* include support for IEC 61850 service tracking */ +#cmakedefine01 CONFIG_IEC61850_SERVICE_TRACKING + /* allow user to control read access by callback */ #cmakedefine01 CONFIG_IEC61850_SUPPORT_USER_READ_ACCESS_CONTROL diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 9286872b..0c2cd8c7 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -12,6 +12,7 @@ add_subdirectory(server_example_setting_groups) add_subdirectory(server_example_logging) add_subdirectory(server_example_files) add_subdirectory(server_example_substitution) +add_subdirectory(server_example_service_tracking) add_subdirectory(iec61850_client_example1) add_subdirectory(iec61850_client_example2) diff --git a/examples/server_example_service_tracking/CMakeLists.txt b/examples/server_example_service_tracking/CMakeLists.txt new file mode 100644 index 00000000..0bbd87e4 --- /dev/null +++ b/examples/server_example_service_tracking/CMakeLists.txt @@ -0,0 +1,21 @@ +include_directories( + . +) + +set(server_example_SRCS + server_example_service_tracking.c + static_model.c +) + +IF(WIN32) +set_source_files_properties(${server_example_SRCS} + PROPERTIES LANGUAGE CXX) +ENDIF(WIN32) + +add_executable(server_example_service_tracking + ${server_example_SRCS} +) + +target_link_libraries(server_example_service_tracking + iec61850 +) diff --git a/examples/server_example_service_tracking/server_example_service_tracking.c b/examples/server_example_service_tracking/server_example_service_tracking.c new file mode 100644 index 00000000..4dc2bb2d --- /dev/null +++ b/examples/server_example_service_tracking/server_example_service_tracking.c @@ -0,0 +1,200 @@ +/* + * server_example_service_tracking.c + * + * - How enable and use service tracking + */ + +#include "iec61850_server.h" +#include "hal_thread.h" +#include +#include +#include +#include + +#include "static_model.h" + +/* import IEC 61850 device model created from SCL-File */ +extern IedModel iedModel; + +static int running = 0; +static IedServer iedServer = NULL; + +void +sigint_handler(int signalId) +{ + running = 0; +} + +static ControlHandlerResult +controlHandlerForBinaryOutput(ControlAction action, void* parameter, MmsValue* value, bool test) +{ + if (test) + return CONTROL_RESULT_FAILED; + + if (MmsValue_getType(value) == MMS_BOOLEAN) { + printf("received binary control command: "); + + if (MmsValue_getBoolean(value)) + printf("on\n"); + else + printf("off\n"); + } + else + return CONTROL_RESULT_FAILED; + + uint64_t timeStamp = Hal_getTimeInMs(); + + if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO1) { + IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_t, timeStamp); + IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_stVal, value); + } + + if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO2) { + IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_t, timeStamp); + IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_stVal, value); + } + + if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO3) { + IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_t, timeStamp); + IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_stVal, value); + } + + if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO4) { + IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_t, timeStamp); + IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_stVal, value); + } + + return CONTROL_RESULT_OK; +} + + +static void +connectionHandler (IedServer self, ClientConnection connection, bool connected, void* parameter) +{ + if (connected) + printf("Connection opened\n"); + else + printf("Connection closed\n"); +} + +int +main(int argc, char** argv) +{ + printf("Using libIEC61850 version %s\n", LibIEC61850_getVersionString()); + + /* Create new server configuration object */ + IedServerConfig config = IedServerConfig_create(); + + /* Set buffer size for buffered report control blocks to 200000 bytes */ + IedServerConfig_setReportBufferSize(config, 200000); + + /* Set stack compliance to a specific edition of the standard (WARNING: data model has also to be checked for compliance) */ + IedServerConfig_setEdition(config, IEC_61850_EDITION_2); + + /* Set the base path for the MMS file services */ + IedServerConfig_setFileServiceBasePath(config, "./vmd-filestore/"); + + /* disable MMS file service */ + IedServerConfig_enableFileService(config, false); + + /* TODO enable service tracking feature */ + //IedServerConfig_enableServiceTracking(config, true); + + /* enable dynamic data set service */ + IedServerConfig_enableDynamicDataSetService(config, true); + + /* disable log service */ + IedServerConfig_enableLogService(config, false); + + /* set maximum number of clients */ + IedServerConfig_setMaxMmsConnections(config, 5); + + /* Create a new IEC 61850 server instance */ + iedServer = IedServer_createWithConfig(&iedModel, NULL, config); + + /* configuration object is no longer required */ + IedServerConfig_destroy(config); + + /* set the identity values for MMS identify service */ + IedServer_setServerIdentity(iedServer, "MZ", "service_tracking", "1.0.0"); + + /* Install handler for operate command */ + IedServer_setControlHandler(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1, + (ControlHandler) controlHandlerForBinaryOutput, + IEDMODEL_GenericIO_GGIO1_SPCSO1); + + IedServer_setControlHandler(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2, + (ControlHandler) controlHandlerForBinaryOutput, + IEDMODEL_GenericIO_GGIO1_SPCSO2); + + IedServer_setControlHandler(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3, + (ControlHandler) controlHandlerForBinaryOutput, + IEDMODEL_GenericIO_GGIO1_SPCSO3); + + IedServer_setControlHandler(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4, + (ControlHandler) controlHandlerForBinaryOutput, + IEDMODEL_GenericIO_GGIO1_SPCSO4); + + IedServer_setConnectionIndicationHandler(iedServer, (IedConnectionIndicationHandler) connectionHandler, NULL); + + /* MMS server will be instructed to start listening for client connections. */ + IedServer_start(iedServer, 102); + + if (!IedServer_isRunning(iedServer)) { + printf("Starting server failed (maybe need root permissions or another server is already using the port)! Exit.\n"); + IedServer_destroy(iedServer); + exit(-1); + } + + running = 1; + + signal(SIGINT, sigint_handler); + + float t = 0.f; + + while (running) { + uint64_t timestamp = Hal_getTimeInMs(); + + t += 0.1f; + + float an1 = sinf(t); + float an2 = sinf(t + 1.f); + float an3 = sinf(t + 2.f); + float an4 = sinf(t + 3.f); + + Timestamp iecTimestamp; + + Timestamp_clearFlags(&iecTimestamp); + Timestamp_setTimeInMilliseconds(&iecTimestamp, timestamp); + Timestamp_setLeapSecondKnown(&iecTimestamp, true); + + /* toggle clock-not-synchronized flag in timestamp */ + if (((int) t % 2) == 0) + Timestamp_setClockNotSynchronized(&iecTimestamp, true); + + IedServer_lockDataModel(iedServer); + + IedServer_updateTimestampAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_t, &iecTimestamp); + IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_mag_f, an1); + + IedServer_updateTimestampAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn2_t, &iecTimestamp); + IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn2_mag_f, an2); + + IedServer_updateTimestampAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn3_t, &iecTimestamp); + IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn3_mag_f, an3); + + IedServer_updateTimestampAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn4_t, &iecTimestamp); + IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn4_mag_f, an4); + + IedServer_unlockDataModel(iedServer); + + Thread_sleep(100); + } + + /* stop MMS server - close TCP server socket and all client sockets */ + IedServer_stop(iedServer); + + /* Cleanup - free all resources */ + IedServer_destroy(iedServer); + +} /* main() */ diff --git a/examples/server_example_service_tracking/simpleIO_ltrk_tests.icd b/examples/server_example_service_tracking/simpleIO_ltrk_tests.icd new file mode 100644 index 00000000..391773f2 --- /dev/null +++ b/examples/server_example_service_tracking/simpleIO_ltrk_tests.icd @@ -0,0 +1,555 @@ + + +
+
+ + + Station bus + 10 + +
+

0.0.0.0

+

255.255.255.0

+

192.168.2.1

+

1,3,9999,33

+

33

+

00000001

+

0001

+

0001

+

102

+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + on + + + status-only + + + + + on + + + + + ok + + + + + MZ Automation + + + 1.3.0 + + + libiec61850 server example + + + + + + + ok + + + + + + + on + + + status-only + + + + + on + + + + + ok + + + + + direct-with-normal-security + + + + + direct-with-normal-security + + + + + direct-with-normal-security + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unknown + Not-supported + Blocked-by-switching-hierarchy + Select-failed + Invalid-position + Position-reached + Parameter-change-in-execution + Step-limit + Blocked-by-Mode + Blocked-by-process + Blocked-by-interlocking + Blocked-by-synchrocheck + Command-already-in-execution + Blocked-by-health + 1-of-n-control + Abortion-by-cancel + Time-limit-over + Abortion-by-trip + Object-not-selected + Object-already-selected + No-access-authority + Ended-with-overshoot + Abortion-due-to-deviation + Abortion-by-communication-loss + Blocked-by-command + None + Inconsistent-parameters + Locked-by-other-client + + + on + blocked + test + test/blocked + off + + + ok + warning + alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + no-error + instance-not-available + instance-in-use + access-violation + access-not-allowed-in-current-state + parameter-value-inappropriate + parameter-value-inconsistent + class-not-supported + instance-locked-by-other-client + control-must-be-selected + type-conflict + failed-due-to-communications-constraint + failed-due-to-server-constraint + + + Unknown + Associate + Abort + Release + GetServerDirectory + GetLogicalDeviceDirectory + GetAllDataValues + GetDataValues + SetDataValues + GetDataDirectory + GetDataDefinition + GetDataSetValues + SetDataSetValues + CreateDataSet + DeleteDataSet + GetDataSetDirectory + SelectActiveSG + SelectEditSG + SetEditSGValue + ConfirmEditSGValues + GetEditSGValue + GetSGCBValues + Report + GetBRCBValues + SetBRCBValues + GetURCBValues + SetURCBValues + GetLCBValues + SetLCBValues + QueryLogByTime + QueryLogAfter + GetLogStatus + SendGOOSEMessage + GetGoCBValues + SetGoCBValues + GetGoReference + GetGOOSEElementNumber + SendMSVMessage + GetMSVCBValues + SetMSVCBValues + SendUSVMessage + GetUSVCBValues + SetUSVCBValues + Select + SelectWithValue + Cancel + Operate + CommandTermination + TimeActivatedOperate + GetFile + SetFile + DeleteFile + GetFileAttributValues + TimeSynchronisation + InternalChange + + +
diff --git a/examples/server_example_service_tracking/static_model.c b/examples/server_example_service_tracking/static_model.c new file mode 100644 index 00000000..051db5f9 --- /dev/null +++ b/examples/server_example_service_tracking/static_model.c @@ -0,0 +1,4067 @@ +/* + * static_model.c + * + * automatically generated from simpleIO_ltrk_tests.icd + */ +#include "static_model.h" + +static void initializeValues(); + +extern DataSet iedModelds_GenericIO_LLN0_Events; +extern DataSet iedModelds_GenericIO_LLN0_Events2; +extern DataSet iedModelds_GenericIO_LLN0_Measurements; +extern DataSet iedModelds_GenericIO_LLN0_ServiceTracking; + + +extern DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda0; +extern DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda1; +extern DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda2; +extern DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda3; + +DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda0 = { + "GenericIO", + false, + "GGIO1$ST$SPCSO1$stVal", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_Events_fcda1 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda1 = { + "GenericIO", + false, + "GGIO1$ST$SPCSO2$stVal", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_Events_fcda2 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda2 = { + "GenericIO", + false, + "GGIO1$ST$SPCSO3$stVal", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_Events_fcda3 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda3 = { + "GenericIO", + false, + "GGIO1$ST$SPCSO4$stVal", + -1, + NULL, + NULL, + NULL +}; + +DataSet iedModelds_GenericIO_LLN0_Events = { + "GenericIO", + "LLN0$Events", + 4, + &iedModelds_GenericIO_LLN0_Events_fcda0, + &iedModelds_GenericIO_LLN0_Events2 +}; + +extern DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda0; +extern DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda1; +extern DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda2; +extern DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda3; + +DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda0 = { + "GenericIO", + false, + "GGIO1$ST$SPCSO1", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_Events2_fcda1 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda1 = { + "GenericIO", + false, + "GGIO1$ST$SPCSO2", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_Events2_fcda2 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda2 = { + "GenericIO", + false, + "GGIO1$ST$SPCSO3", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_Events2_fcda3 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda3 = { + "GenericIO", + false, + "GGIO1$ST$SPCSO4", + -1, + NULL, + NULL, + NULL +}; + +DataSet iedModelds_GenericIO_LLN0_Events2 = { + "GenericIO", + "LLN0$Events2", + 4, + &iedModelds_GenericIO_LLN0_Events2_fcda0, + &iedModelds_GenericIO_LLN0_Measurements +}; + +extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda0; +extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda1; +extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda2; +extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda3; +extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda4; +extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda5; +extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda6; +extern DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda7; + +DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda0 = { + "GenericIO", + false, + "GGIO1$MX$AnIn1$mag$f", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_Measurements_fcda1 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda1 = { + "GenericIO", + false, + "GGIO1$MX$AnIn1$q", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_Measurements_fcda2 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda2 = { + "GenericIO", + false, + "GGIO1$MX$AnIn2$mag$f", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_Measurements_fcda3 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda3 = { + "GenericIO", + false, + "GGIO1$MX$AnIn2$q", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_Measurements_fcda4 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda4 = { + "GenericIO", + false, + "GGIO1$MX$AnIn3$mag$f", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_Measurements_fcda5 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda5 = { + "GenericIO", + false, + "GGIO1$MX$AnIn3$q", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_Measurements_fcda6 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda6 = { + "GenericIO", + false, + "GGIO1$MX$AnIn4$mag$f", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_Measurements_fcda7 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_Measurements_fcda7 = { + "GenericIO", + false, + "GGIO1$MX$AnIn4$q", + -1, + NULL, + NULL, + NULL +}; + +DataSet iedModelds_GenericIO_LLN0_Measurements = { + "GenericIO", + "LLN0$Measurements", + 8, + &iedModelds_GenericIO_LLN0_Measurements_fcda0, + &iedModelds_GenericIO_LLN0_ServiceTracking +}; + +extern DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda0; +extern DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda1; +extern DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda2; +extern DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda3; +extern DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda4; +extern DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda5; +extern DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda6; + +DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda0 = { + "GenericIO", + false, + "LTRK1$SR$SpcTrk", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_ServiceTracking_fcda1 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda1 = { + "GenericIO", + false, + "LTRK1$SR$DpcTrk", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_ServiceTracking_fcda2 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda2 = { + "GenericIO", + false, + "LTRK1$SR$IncTrk", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_ServiceTracking_fcda3 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda3 = { + "GenericIO", + false, + "LTRK1$SR$BscTrk", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_ServiceTracking_fcda4 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda4 = { + "GenericIO", + false, + "LTRK1$SR$UrcbTrk", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_ServiceTracking_fcda5 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda5 = { + "GenericIO", + false, + "LTRK1$SR$BrcbTrk", + -1, + NULL, + NULL, + &iedModelds_GenericIO_LLN0_ServiceTracking_fcda6 +}; + +DataSetEntry iedModelds_GenericIO_LLN0_ServiceTracking_fcda6 = { + "GenericIO", + false, + "LTRK1$SR$GocbTrk", + -1, + NULL, + NULL, + NULL +}; + +DataSet iedModelds_GenericIO_LLN0_ServiceTracking = { + "GenericIO", + "LLN0$ServiceTracking", + 7, + &iedModelds_GenericIO_LLN0_ServiceTracking_fcda0, + NULL +}; + +LogicalDevice iedModel_GenericIO = { + LogicalDeviceModelType, + "GenericIO", + (ModelNode*) &iedModel, + NULL, + (ModelNode*) &iedModel_GenericIO_LLN0 +}; + +LogicalNode iedModel_GenericIO_LLN0 = { + LogicalNodeModelType, + "LLN0", + (ModelNode*) &iedModel_GenericIO, + (ModelNode*) &iedModel_GenericIO_LPHD1, + (ModelNode*) &iedModel_GenericIO_LLN0_Mod, +}; + +DataObject iedModel_GenericIO_LLN0_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_GenericIO_LLN0, + (ModelNode*) &iedModel_GenericIO_LLN0_Beh, + (ModelNode*) &iedModel_GenericIO_LLN0_Mod_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_LLN0_Mod_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_LLN0_Mod, + (ModelNode*) &iedModel_GenericIO_LLN0_Mod_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_ENUMERATED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LLN0_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_LLN0_Mod, + (ModelNode*) &iedModel_GenericIO_LLN0_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LLN0_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_LLN0_Mod, + (ModelNode*) &iedModel_GenericIO_LLN0_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LLN0_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_GenericIO_LLN0_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_LLN0_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_GenericIO_LLN0, + (ModelNode*) &iedModel_GenericIO_LLN0_Health, + (ModelNode*) &iedModel_GenericIO_LLN0_Beh_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_LLN0_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_LLN0_Beh, + (ModelNode*) &iedModel_GenericIO_LLN0_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_ENUMERATED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LLN0_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_LLN0_Beh, + (ModelNode*) &iedModel_GenericIO_LLN0_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LLN0_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_LLN0_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_LLN0_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_GenericIO_LLN0, + (ModelNode*) &iedModel_GenericIO_LLN0_NamPlt, + (ModelNode*) &iedModel_GenericIO_LLN0_Health_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_LLN0_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_LLN0_Health, + (ModelNode*) &iedModel_GenericIO_LLN0_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_ENUMERATED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LLN0_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_LLN0_Health, + (ModelNode*) &iedModel_GenericIO_LLN0_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LLN0_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_LLN0_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_LLN0_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_GenericIO_LLN0, + NULL, + (ModelNode*) &iedModel_GenericIO_LLN0_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_GenericIO_LLN0_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_GenericIO_LLN0_NamPlt, + (ModelNode*) &iedModel_GenericIO_LLN0_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LLN0_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_GenericIO_LLN0_NamPlt, + (ModelNode*) &iedModel_GenericIO_LLN0_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LLN0_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_GenericIO_LLN0_NamPlt, + (ModelNode*) &iedModel_GenericIO_LLN0_NamPlt_configRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LLN0_NamPlt_configRev = { + DataAttributeModelType, + "configRev", + (ModelNode*) &iedModel_GenericIO_LLN0_NamPlt, + (ModelNode*) &iedModel_GenericIO_LLN0_NamPlt_ldNs, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LLN0_NamPlt_ldNs = { + DataAttributeModelType, + "ldNs", + (ModelNode*) &iedModel_GenericIO_LLN0_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +LogicalNode iedModel_GenericIO_LPHD1 = { + LogicalNodeModelType, + "LPHD1", + (ModelNode*) &iedModel_GenericIO, + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_LPHD1_PhyNam, +}; + +DataObject iedModel_GenericIO_LPHD1_PhyNam = { + DataObjectModelType, + "PhyNam", + (ModelNode*) &iedModel_GenericIO_LPHD1, + (ModelNode*) &iedModel_GenericIO_LPHD1_PhyHealth, + (ModelNode*) &iedModel_GenericIO_LPHD1_PhyNam_vendor, + 0 +}; + +DataAttribute iedModel_GenericIO_LPHD1_PhyNam_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_GenericIO_LPHD1_PhyNam, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_LPHD1_PhyHealth = { + DataObjectModelType, + "PhyHealth", + (ModelNode*) &iedModel_GenericIO_LPHD1, + (ModelNode*) &iedModel_GenericIO_LPHD1_Proxy, + (ModelNode*) &iedModel_GenericIO_LPHD1_PhyHealth_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_LPHD1_PhyHealth, + (ModelNode*) &iedModel_GenericIO_LPHD1_PhyHealth_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_ENUMERATED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_LPHD1_PhyHealth, + (ModelNode*) &iedModel_GenericIO_LPHD1_PhyHealth_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_LPHD1_PhyHealth, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_LPHD1_Proxy = { + DataObjectModelType, + "Proxy", + (ModelNode*) &iedModel_GenericIO_LPHD1, + NULL, + (ModelNode*) &iedModel_GenericIO_LPHD1_Proxy_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_LPHD1_Proxy_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_LPHD1_Proxy, + (ModelNode*) &iedModel_GenericIO_LPHD1_Proxy_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_BOOLEAN, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LPHD1_Proxy_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_LPHD1_Proxy, + (ModelNode*) &iedModel_GenericIO_LPHD1_Proxy_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LPHD1_Proxy_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_LPHD1_Proxy, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +LogicalNode iedModel_GenericIO_GGIO1 = { + LogicalNodeModelType, + "GGIO1", + (ModelNode*) &iedModel_GenericIO, + (ModelNode*) &iedModel_GenericIO_LTRK1, + (ModelNode*) &iedModel_GenericIO_GGIO1_Mod, +}; + +DataObject iedModel_GenericIO_GGIO1_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_Beh, + (ModelNode*) &iedModel_GenericIO_GGIO1_Mod_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_Mod_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_Mod, + (ModelNode*) &iedModel_GenericIO_GGIO1_Mod_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_ENUMERATED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_Mod, + (ModelNode*) &iedModel_GenericIO_GGIO1_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_Mod, + (ModelNode*) &iedModel_GenericIO_GGIO1_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_GenericIO_GGIO1_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_Health, + (ModelNode*) &iedModel_GenericIO_GGIO1_Beh_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_Beh, + (ModelNode*) &iedModel_GenericIO_GGIO1_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_ENUMERATED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_Beh, + (ModelNode*) &iedModel_GenericIO_GGIO1_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_NamPlt, + (ModelNode*) &iedModel_GenericIO_GGIO1_Health_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_Health, + (ModelNode*) &iedModel_GenericIO_GGIO1_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_ENUMERATED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_Health, + (ModelNode*) &iedModel_GenericIO_GGIO1_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1, + (ModelNode*) &iedModel_GenericIO_GGIO1_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_GenericIO_GGIO1_NamPlt, + (ModelNode*) &iedModel_GenericIO_GGIO1_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_GenericIO_GGIO1_NamPlt, + (ModelNode*) &iedModel_GenericIO_GGIO1_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_GenericIO_GGIO1_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_AnIn1 = { + DataObjectModelType, + "AnIn1", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1_mag, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1_q, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn1_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn1_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_AnIn2 = { + DataObjectModelType, + "AnIn2", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2_mag, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2_q, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn2_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn2_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_AnIn3 = { + DataObjectModelType, + "AnIn3", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3_mag, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3_q, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn3_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn3_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_AnIn4 = { + DataObjectModelType, + "AnIn4", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4_mag, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4_q, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn4_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4, + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_AnIn4_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_SPCSO1 = { + DataObjectModelType, + "SPCSO1", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_origin, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_origin = { + DataAttributeModelType, + "origin", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_ctlNum, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_origin_orCat, + 0, + IEC61850_FC_ST, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_origin_orCat = { + DataAttributeModelType, + "orCat", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_origin, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_origin_orIdent, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_origin_orIdent = { + DataAttributeModelType, + "orIdent", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_origin, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlNum = { + DataAttributeModelType, + "ctlNum", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_stVal, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT8U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_BOOLEAN, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper = { + DataAttributeModelType, + "Oper", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + NULL, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal, + 0, + IEC61850_FC_CO, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal = { + DataAttributeModelType, + "ctlVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin = { + DataAttributeModelType, + "origin", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlNum, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat, + 0, + IEC61850_FC_CO, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat = { + DataAttributeModelType, + "orCat", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent = { + DataAttributeModelType, + "orIdent", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin, + NULL, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlNum = { + DataAttributeModelType, + "ctlNum", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_T, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_INT8U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_T = { + DataAttributeModelType, + "T", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_Test, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Test = { + DataAttributeModelType, + "Test", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_Check, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Check = { + DataAttributeModelType, + "Check", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper, + NULL, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_CHECK, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_SPCSO2 = { + DataObjectModelType, + "SPCSO2", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_BOOLEAN, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper = { + DataAttributeModelType, + "Oper", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_ctlModel, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal, + 0, + IEC61850_FC_CO, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal = { + DataAttributeModelType, + "ctlVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin = { + DataAttributeModelType, + "origin", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlNum, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat, + 0, + IEC61850_FC_CO, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat = { + DataAttributeModelType, + "orCat", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent = { + DataAttributeModelType, + "orIdent", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin, + NULL, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlNum = { + DataAttributeModelType, + "ctlNum", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_T, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_INT8U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_T = { + DataAttributeModelType, + "T", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_Test, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Test = { + DataAttributeModelType, + "Test", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_Check, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Check = { + DataAttributeModelType, + "Check", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper, + NULL, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_CHECK, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_t, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_SPCSO3 = { + DataObjectModelType, + "SPCSO3", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_BOOLEAN, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper = { + DataAttributeModelType, + "Oper", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_ctlModel, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal, + 0, + IEC61850_FC_CO, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal = { + DataAttributeModelType, + "ctlVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin = { + DataAttributeModelType, + "origin", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlNum, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat, + 0, + IEC61850_FC_CO, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat = { + DataAttributeModelType, + "orCat", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent = { + DataAttributeModelType, + "orIdent", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin, + NULL, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlNum = { + DataAttributeModelType, + "ctlNum", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_T, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_INT8U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_T = { + DataAttributeModelType, + "T", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_Test, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Test = { + DataAttributeModelType, + "Test", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_Check, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Check = { + DataAttributeModelType, + "Check", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper, + NULL, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_CHECK, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_t, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_SPCSO4 = { + DataObjectModelType, + "SPCSO4", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_BOOLEAN, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper = { + DataAttributeModelType, + "Oper", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_ctlModel, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal, + 0, + IEC61850_FC_CO, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal = { + DataAttributeModelType, + "ctlVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin = { + DataAttributeModelType, + "origin", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlNum, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat, + 0, + IEC61850_FC_CO, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat = { + DataAttributeModelType, + "orCat", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent = { + DataAttributeModelType, + "orIdent", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin, + NULL, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlNum = { + DataAttributeModelType, + "ctlNum", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_T, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_INT8U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_T = { + DataAttributeModelType, + "T", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_Test, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Test = { + DataAttributeModelType, + "Test", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_Check, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Check = { + DataAttributeModelType, + "Check", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper, + NULL, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_CHECK, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_t, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_Ind1 = { + DataObjectModelType, + "Ind1", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind2, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind1_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_Ind1_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind1, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind1_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_BOOLEAN, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Ind1_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind1, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind1_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Ind1_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind1, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_Ind2 = { + DataObjectModelType, + "Ind2", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind3, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind2_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_Ind2_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind2, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind2_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_BOOLEAN, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Ind2_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind2, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind2_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Ind2_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind2, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_Ind3 = { + DataObjectModelType, + "Ind3", + (ModelNode*) &iedModel_GenericIO_GGIO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind4, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind3_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_Ind3_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind3, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind3_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_BOOLEAN, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Ind3_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind3, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind3_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Ind3_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind3, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_GGIO1_Ind4 = { + DataObjectModelType, + "Ind4", + (ModelNode*) &iedModel_GenericIO_GGIO1, + NULL, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind4_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_GGIO1_Ind4_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind4, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind4_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_BOOLEAN, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Ind4_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind4, + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind4_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_Ind4_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_Ind4, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +LogicalNode iedModel_GenericIO_LTRK1 = { + LogicalNodeModelType, + "LTRK1", + (ModelNode*) &iedModel_GenericIO, + NULL, + (ModelNode*) &iedModel_GenericIO_LTRK1_Beh, +}; + +DataObject iedModel_GenericIO_LTRK1_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_GenericIO_LTRK1, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_Beh_stVal, + 0 +}; + +DataAttribute iedModel_GenericIO_LTRK1_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_GenericIO_LTRK1_Beh, + (ModelNode*) &iedModel_GenericIO_LTRK1_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_ENUMERATED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_GenericIO_LTRK1_Beh, + (ModelNode*) &iedModel_GenericIO_LTRK1_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_LTRK1_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_LTRK1_SpcTrk = { + DataObjectModelType, + "SpcTrk", + (ModelNode*) &iedModel_GenericIO_LTRK1, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_objRef, + 0 +}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_objRef = { + DataAttributeModelType, + "objRef", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_serviceType, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_VISIBLE_STRING_129, + 0 + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_serviceType = { + DataAttributeModelType, + "serviceType", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_errorCode, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_errorCode = { + DataAttributeModelType, + "errorCode", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_originatorID, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_originatorID = { + DataAttributeModelType, + "originatorID", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_t, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_d, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_dU, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_dU = { + DataAttributeModelType, + "dU", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_cdcNs, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_UNICODE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_cdcNs = { + DataAttributeModelType, + "cdcNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_cdcName, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_cdcName = { + DataAttributeModelType, + "cdcName", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_dataNs, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_dataNs = { + DataAttributeModelType, + "dataNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_ctlVal, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_ctlVal = { + DataAttributeModelType, + "ctlVal", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_origin, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_origin = { + DataAttributeModelType, + "origin", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_ctlNum, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_origin_orCat, + 0, + IEC61850_FC_SR, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_origin_orCat = { + DataAttributeModelType, + "orCat", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_origin, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_origin_orIdent, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_origin_orIdent = { + DataAttributeModelType, + "orIdent", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_origin, + NULL, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_ctlNum = { + DataAttributeModelType, + "ctlNum", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_T, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT8U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_T = { + DataAttributeModelType, + "T", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_Test, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_Test = { + DataAttributeModelType, + "Test", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_Check, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_Check = { + DataAttributeModelType, + "Check", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk_respAddCause, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_CHECK, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_respAddCause = { + DataAttributeModelType, + "respAddCause", + (ModelNode*) &iedModel_GenericIO_LTRK1_SpcTrk, + NULL, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_LTRK1_DpcTrk = { + DataObjectModelType, + "DpcTrk", + (ModelNode*) &iedModel_GenericIO_LTRK1, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_objRef, + 0 +}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_objRef = { + DataAttributeModelType, + "objRef", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_serviceType, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_VISIBLE_STRING_129, + 0 + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_serviceType = { + DataAttributeModelType, + "serviceType", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_errorCode, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_errorCode = { + DataAttributeModelType, + "errorCode", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_originatorID, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_originatorID = { + DataAttributeModelType, + "originatorID", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_t, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_d, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_dU, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_dU = { + DataAttributeModelType, + "dU", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_cdcNs, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_UNICODE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_cdcNs = { + DataAttributeModelType, + "cdcNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_cdcName, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_cdcName = { + DataAttributeModelType, + "cdcName", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_dataNs, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_dataNs = { + DataAttributeModelType, + "dataNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_ctlVal, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_ctlVal = { + DataAttributeModelType, + "ctlVal", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_origin, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_origin = { + DataAttributeModelType, + "origin", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_ctlNum, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_origin_orCat, + 0, + IEC61850_FC_SR, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_origin_orCat = { + DataAttributeModelType, + "orCat", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_origin, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_origin_orIdent, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_origin_orIdent = { + DataAttributeModelType, + "orIdent", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_origin, + NULL, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_ctlNum = { + DataAttributeModelType, + "ctlNum", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_T, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT8U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_T = { + DataAttributeModelType, + "T", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_Test, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_Test = { + DataAttributeModelType, + "Test", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_Check, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_Check = { + DataAttributeModelType, + "Check", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk_respAddCause, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_CHECK, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_respAddCause = { + DataAttributeModelType, + "respAddCause", + (ModelNode*) &iedModel_GenericIO_LTRK1_DpcTrk, + NULL, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_LTRK1_IncTrk = { + DataObjectModelType, + "IncTrk", + (ModelNode*) &iedModel_GenericIO_LTRK1, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_objRef, + 0 +}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_objRef = { + DataAttributeModelType, + "objRef", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_serviceType, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_VISIBLE_STRING_129, + 0 + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_serviceType = { + DataAttributeModelType, + "serviceType", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_errorCode, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_errorCode = { + DataAttributeModelType, + "errorCode", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_originatorID, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_originatorID = { + DataAttributeModelType, + "originatorID", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_t, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_d, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_dU, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_dU = { + DataAttributeModelType, + "dU", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_cdcNs, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_UNICODE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_cdcNs = { + DataAttributeModelType, + "cdcNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_cdcName, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_cdcName = { + DataAttributeModelType, + "cdcName", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_dataNs, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_dataNs = { + DataAttributeModelType, + "dataNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_ctlVal, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_ctlVal = { + DataAttributeModelType, + "ctlVal", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_origin, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_origin = { + DataAttributeModelType, + "origin", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_ctlNum, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_origin_orCat, + 0, + IEC61850_FC_SR, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_origin_orCat = { + DataAttributeModelType, + "orCat", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_origin, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_origin_orIdent, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_origin_orIdent = { + DataAttributeModelType, + "orIdent", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_origin, + NULL, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_ctlNum = { + DataAttributeModelType, + "ctlNum", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_T, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT8U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_T = { + DataAttributeModelType, + "T", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_Test, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_Test = { + DataAttributeModelType, + "Test", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_Check, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_Check = { + DataAttributeModelType, + "Check", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk_respAddCause, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_CHECK, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_IncTrk_respAddCause = { + DataAttributeModelType, + "respAddCause", + (ModelNode*) &iedModel_GenericIO_LTRK1_IncTrk, + NULL, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_LTRK1_BscTrk = { + DataObjectModelType, + "BscTrk", + (ModelNode*) &iedModel_GenericIO_LTRK1, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_objRef, + 0 +}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_objRef = { + DataAttributeModelType, + "objRef", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_serviceType, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_VISIBLE_STRING_129, + 0 + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_serviceType = { + DataAttributeModelType, + "serviceType", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_errorCode, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_errorCode = { + DataAttributeModelType, + "errorCode", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_originatorID, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_originatorID = { + DataAttributeModelType, + "originatorID", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_t, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_d, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_dU, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_dU = { + DataAttributeModelType, + "dU", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_cdcNs, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_UNICODE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_cdcNs = { + DataAttributeModelType, + "cdcNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_cdcName, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_cdcName = { + DataAttributeModelType, + "cdcName", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_dataNs, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_dataNs = { + DataAttributeModelType, + "dataNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_ctlVal, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_ctlVal = { + DataAttributeModelType, + "ctlVal", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_origin, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_CODEDENUM, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_origin = { + DataAttributeModelType, + "origin", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_ctlNum, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_origin_orCat, + 0, + IEC61850_FC_SR, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_origin_orCat = { + DataAttributeModelType, + "orCat", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_origin, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_origin_orIdent, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_origin_orIdent = { + DataAttributeModelType, + "orIdent", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_origin, + NULL, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_ctlNum = { + DataAttributeModelType, + "ctlNum", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_T, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT8U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_T = { + DataAttributeModelType, + "T", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_Test, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_Test = { + DataAttributeModelType, + "Test", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_Check, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_Check = { + DataAttributeModelType, + "Check", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk_respAddCause, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_CHECK, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BscTrk_respAddCause = { + DataAttributeModelType, + "respAddCause", + (ModelNode*) &iedModel_GenericIO_LTRK1_BscTrk, + NULL, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_LTRK1_UrcbTrk = { + DataObjectModelType, + "UrcbTrk", + (ModelNode*) &iedModel_GenericIO_LTRK1, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_objRef, + 0 +}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_objRef = { + DataAttributeModelType, + "objRef", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_serviceType, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_VISIBLE_STRING_129, + 0 + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_serviceType = { + DataAttributeModelType, + "serviceType", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_errorCode, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_errorCode = { + DataAttributeModelType, + "errorCode", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_originatorID, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_originatorID = { + DataAttributeModelType, + "originatorID", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_t, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_d, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_dU, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_dU = { + DataAttributeModelType, + "dU", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_cdcNs, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_UNICODE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_cdcNs = { + DataAttributeModelType, + "cdcNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_cdcName, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_cdcName = { + DataAttributeModelType, + "cdcName", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_dataNs, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_dataNs = { + DataAttributeModelType, + "dataNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_rptID, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_rptID = { + DataAttributeModelType, + "rptID", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_rptEna, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_VISIBLE_STRING_129, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_rptEna = { + DataAttributeModelType, + "rptEna", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_resv, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_resv = { + DataAttributeModelType, + "resv", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_datSet, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_datSet = { + DataAttributeModelType, + "datSet", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_confRev, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_VISIBLE_STRING_129, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_confRev = { + DataAttributeModelType, + "confRev", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_optFlds, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT32U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_optFlds = { + DataAttributeModelType, + "optFlds", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_bufTm, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OPTFLDS, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_bufTm = { + DataAttributeModelType, + "bufTm", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_sqNum, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT32U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_sqNum = { + DataAttributeModelType, + "sqNum", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_trgOps, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT8U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_trgOps = { + DataAttributeModelType, + "trgOps", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_intgPd, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_TRGOPS, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_intgPd = { + DataAttributeModelType, + "intgPd", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk_gi, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT32U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_gi = { + DataAttributeModelType, + "gi", + (ModelNode*) &iedModel_GenericIO_LTRK1_UrcbTrk, + NULL, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_LTRK1_BrcbTrk = { + DataObjectModelType, + "BrcbTrk", + (ModelNode*) &iedModel_GenericIO_LTRK1, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_objRef, + 0 +}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_objRef = { + DataAttributeModelType, + "objRef", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_serviceType, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_VISIBLE_STRING_129, + 0 + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_serviceType = { + DataAttributeModelType, + "serviceType", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_errorCode, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_errorCode = { + DataAttributeModelType, + "errorCode", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_originatorID, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_originatorID = { + DataAttributeModelType, + "originatorID", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_t, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_d, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_dU, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_dU = { + DataAttributeModelType, + "dU", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_cdcNs, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_UNICODE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_cdcNs = { + DataAttributeModelType, + "cdcNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_cdcName, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_cdcName = { + DataAttributeModelType, + "cdcName", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_dataNs, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_dataNs = { + DataAttributeModelType, + "dataNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_rptID, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_rptID = { + DataAttributeModelType, + "rptID", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_rptEna, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_VISIBLE_STRING_129, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_rptEna = { + DataAttributeModelType, + "rptEna", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_datSet, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_datSet = { + DataAttributeModelType, + "datSet", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_confRev, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_VISIBLE_STRING_129, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_confRev = { + DataAttributeModelType, + "confRev", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_optFlds, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT32U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_optFlds = { + DataAttributeModelType, + "optFlds", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_bufTm, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OPTFLDS, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_bufTm = { + DataAttributeModelType, + "bufTm", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_sqNum, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT32U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_sqNum = { + DataAttributeModelType, + "sqNum", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_trgOps, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT16U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_trgOps = { + DataAttributeModelType, + "trgOps", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_intgPd, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_TRGOPS, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_intgPd = { + DataAttributeModelType, + "intgPd", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_gi, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT32U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_gi = { + DataAttributeModelType, + "gi", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_purgeBuf, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_purgeBuf = { + DataAttributeModelType, + "purgeBuf", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_entryID, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_entryID = { + DataAttributeModelType, + "entryID", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_timeOfEntry, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OCTET_STRING_8, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_timeOfEntry = { + DataAttributeModelType, + "timeOfEntry", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk_resvTms, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENTRY_TIME, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_resvTms = { + DataAttributeModelType, + "resvTms", + (ModelNode*) &iedModel_GenericIO_LTRK1_BrcbTrk, + NULL, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT16, + 0, + NULL, + 0}; + +DataObject iedModel_GenericIO_LTRK1_GocbTrk = { + DataObjectModelType, + "GocbTrk", + (ModelNode*) &iedModel_GenericIO_LTRK1, + NULL, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_objRef, + 0 +}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_objRef = { + DataAttributeModelType, + "objRef", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_serviceType, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_VISIBLE_STRING_129, + 0 + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_serviceType = { + DataAttributeModelType, + "serviceType", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_errorCode, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_errorCode = { + DataAttributeModelType, + "errorCode", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_originatorID, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_originatorID = { + DataAttributeModelType, + "originatorID", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_t, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_OCTET_STRING_64, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_d, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_dU, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_dU = { + DataAttributeModelType, + "dU", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_cdcNs, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_UNICODE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_cdcNs = { + DataAttributeModelType, + "cdcNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_cdcName, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_cdcName = { + DataAttributeModelType, + "cdcName", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_dataNs, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_dataNs = { + DataAttributeModelType, + "dataNs", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_goEna, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_goEna = { + DataAttributeModelType, + "goEna", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_goID, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_goID = { + DataAttributeModelType, + "goID", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_datSet, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_VISIBLE_STRING_129, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_datSet = { + DataAttributeModelType, + "datSet", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_confRev, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_VISIBLE_STRING_129, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_confRev = { + DataAttributeModelType, + "confRev", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_ndsCom, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_INT32U, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_ndsCom = { + DataAttributeModelType, + "ndsCom", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk_dstAddress, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_BOOLEAN, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_dstAddress = { + DataAttributeModelType, + "dstAddress", + (ModelNode*) &iedModel_GenericIO_LTRK1_GocbTrk, + NULL, + NULL, + 0, + IEC61850_FC_SR, + IEC61850_PHYCOMADDR, + 0, + NULL, + 0}; + +extern ReportControlBlock iedModel_GenericIO_LLN0_report0; +extern ReportControlBlock iedModel_GenericIO_LLN0_report1; +extern ReportControlBlock iedModel_GenericIO_LLN0_report2; +extern ReportControlBlock iedModel_GenericIO_LLN0_report3; +extern ReportControlBlock iedModel_GenericIO_LLN0_report4; +extern ReportControlBlock iedModel_GenericIO_LLN0_report5; +extern ReportControlBlock iedModel_GenericIO_LLN0_report6; +extern ReportControlBlock iedModel_GenericIO_LLN0_report7; +extern ReportControlBlock iedModel_GenericIO_LLN0_report8; +extern ReportControlBlock iedModel_GenericIO_LLN0_report9; + +ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events1", false, "Events2", 1, 24, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report1}; +ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "EventsIndexed01", "Events2", false, "Events", 1, 24, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report2}; +ReportControlBlock iedModel_GenericIO_LLN0_report2 = {&iedModel_GenericIO_LLN0, "EventsIndexed02", "Events2", false, "Events", 1, 24, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report3}; +ReportControlBlock iedModel_GenericIO_LLN0_report3 = {&iedModel_GenericIO_LLN0, "EventsIndexed03", "Events2", false, "Events", 1, 24, 175, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report4}; +ReportControlBlock iedModel_GenericIO_LLN0_report4 = {&iedModel_GenericIO_LLN0, "Measurements01", "Measurements", true, "Measurements", 1, 16, 239, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report5}; +ReportControlBlock iedModel_GenericIO_LLN0_report5 = {&iedModel_GenericIO_LLN0, "Measurements02", "Measurements", true, "Measurements", 1, 16, 239, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report6}; +ReportControlBlock iedModel_GenericIO_LLN0_report6 = {&iedModel_GenericIO_LLN0, "Measurements03", "Measurements", true, "Measurements", 1, 16, 239, 50, 1000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report7}; +ReportControlBlock iedModel_GenericIO_LLN0_report7 = {&iedModel_GenericIO_LLN0, "brcbServiceTracking01", "ServiceTracking", true, "ServiceTracking", 1, 19, 228, 0, 0, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report8}; +ReportControlBlock iedModel_GenericIO_LLN0_report8 = {&iedModel_GenericIO_LLN0, "brcbServiceTracking02", "ServiceTracking", true, "ServiceTracking", 1, 19, 228, 0, 0, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, &iedModel_GenericIO_LLN0_report9}; +ReportControlBlock iedModel_GenericIO_LLN0_report9 = {&iedModel_GenericIO_LLN0, "brcbServiceTracking03", "ServiceTracking", true, "ServiceTracking", 1, 19, 228, 0, 0, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, NULL}; + + + + + + + +IedModel iedModel = { + "simpleIO", + &iedModel_GenericIO, + &iedModelds_GenericIO_LLN0_Events, + &iedModel_GenericIO_LLN0_report0, + NULL, + NULL, + NULL, + NULL, + NULL, + initializeValues +}; + +static void +initializeValues() +{ + +iedModel_GenericIO_LLN0_Mod_stVal.mmsValue = MmsValue_newIntegerFromInt32(1); + +iedModel_GenericIO_LLN0_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_GenericIO_LLN0_Beh_stVal.mmsValue = MmsValue_newIntegerFromInt32(1); + +iedModel_GenericIO_LLN0_Health_stVal.mmsValue = MmsValue_newIntegerFromInt32(1); + +iedModel_GenericIO_LLN0_NamPlt_vendor.mmsValue = MmsValue_newVisibleString("MZ Automation"); + +iedModel_GenericIO_LLN0_NamPlt_swRev.mmsValue = MmsValue_newVisibleString("1.3.0"); + +iedModel_GenericIO_LLN0_NamPlt_d.mmsValue = MmsValue_newVisibleString("libiec61850 server example"); + +iedModel_GenericIO_LPHD1_PhyHealth_stVal.mmsValue = MmsValue_newIntegerFromInt32(1); + +iedModel_GenericIO_GGIO1_Mod_stVal.mmsValue = MmsValue_newIntegerFromInt32(1); + +iedModel_GenericIO_GGIO1_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_GenericIO_GGIO1_Beh_stVal.mmsValue = MmsValue_newIntegerFromInt32(1); + +iedModel_GenericIO_GGIO1_Health_stVal.mmsValue = MmsValue_newIntegerFromInt32(1); + +iedModel_GenericIO_GGIO1_SPCSO1_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(1); + +iedModel_GenericIO_GGIO1_SPCSO2_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(1); + +iedModel_GenericIO_GGIO1_SPCSO3_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(1); + +iedModel_GenericIO_GGIO1_SPCSO4_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(1); +} diff --git a/examples/server_example_service_tracking/static_model.h b/examples/server_example_service_tracking/static_model.h new file mode 100644 index 00000000..cfcd75bd --- /dev/null +++ b/examples/server_example_service_tracking/static_model.h @@ -0,0 +1,609 @@ +/* + * static_model.h + * + * automatically generated from simpleIO_ltrk_tests.icd + */ + +#ifndef STATIC_MODEL_H_ +#define STATIC_MODEL_H_ + +#include +#include "iec61850_model.h" + +extern IedModel iedModel; +extern LogicalDevice iedModel_GenericIO; +extern LogicalNode iedModel_GenericIO_LLN0; +extern DataObject iedModel_GenericIO_LLN0_Mod; +extern DataAttribute iedModel_GenericIO_LLN0_Mod_stVal; +extern DataAttribute iedModel_GenericIO_LLN0_Mod_q; +extern DataAttribute iedModel_GenericIO_LLN0_Mod_t; +extern DataAttribute iedModel_GenericIO_LLN0_Mod_ctlModel; +extern DataObject iedModel_GenericIO_LLN0_Beh; +extern DataAttribute iedModel_GenericIO_LLN0_Beh_stVal; +extern DataAttribute iedModel_GenericIO_LLN0_Beh_q; +extern DataAttribute iedModel_GenericIO_LLN0_Beh_t; +extern DataObject iedModel_GenericIO_LLN0_Health; +extern DataAttribute iedModel_GenericIO_LLN0_Health_stVal; +extern DataAttribute iedModel_GenericIO_LLN0_Health_q; +extern DataAttribute iedModel_GenericIO_LLN0_Health_t; +extern DataObject iedModel_GenericIO_LLN0_NamPlt; +extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_vendor; +extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_swRev; +extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_d; +extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_configRev; +extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_ldNs; +extern LogicalNode iedModel_GenericIO_LPHD1; +extern DataObject iedModel_GenericIO_LPHD1_PhyNam; +extern DataAttribute iedModel_GenericIO_LPHD1_PhyNam_vendor; +extern DataObject iedModel_GenericIO_LPHD1_PhyHealth; +extern DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_stVal; +extern DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_q; +extern DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_t; +extern DataObject iedModel_GenericIO_LPHD1_Proxy; +extern DataAttribute iedModel_GenericIO_LPHD1_Proxy_stVal; +extern DataAttribute iedModel_GenericIO_LPHD1_Proxy_q; +extern DataAttribute iedModel_GenericIO_LPHD1_Proxy_t; +extern LogicalNode iedModel_GenericIO_GGIO1; +extern DataObject iedModel_GenericIO_GGIO1_Mod; +extern DataAttribute iedModel_GenericIO_GGIO1_Mod_stVal; +extern DataAttribute iedModel_GenericIO_GGIO1_Mod_q; +extern DataAttribute iedModel_GenericIO_GGIO1_Mod_t; +extern DataAttribute iedModel_GenericIO_GGIO1_Mod_ctlModel; +extern DataObject iedModel_GenericIO_GGIO1_Beh; +extern DataAttribute iedModel_GenericIO_GGIO1_Beh_stVal; +extern DataAttribute iedModel_GenericIO_GGIO1_Beh_q; +extern DataAttribute iedModel_GenericIO_GGIO1_Beh_t; +extern DataObject iedModel_GenericIO_GGIO1_Health; +extern DataAttribute iedModel_GenericIO_GGIO1_Health_stVal; +extern DataAttribute iedModel_GenericIO_GGIO1_Health_q; +extern DataAttribute iedModel_GenericIO_GGIO1_Health_t; +extern DataObject iedModel_GenericIO_GGIO1_NamPlt; +extern DataAttribute iedModel_GenericIO_GGIO1_NamPlt_vendor; +extern DataAttribute iedModel_GenericIO_GGIO1_NamPlt_swRev; +extern DataAttribute iedModel_GenericIO_GGIO1_NamPlt_d; +extern DataObject iedModel_GenericIO_GGIO1_AnIn1; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag_f; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn1_q; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn1_t; +extern DataObject iedModel_GenericIO_GGIO1_AnIn2; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag_f; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn2_q; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn2_t; +extern DataObject iedModel_GenericIO_GGIO1_AnIn3; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag_f; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn3_q; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn3_t; +extern DataObject iedModel_GenericIO_GGIO1_AnIn4; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag_f; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn4_q; +extern DataAttribute iedModel_GenericIO_GGIO1_AnIn4_t; +extern DataObject iedModel_GenericIO_GGIO1_SPCSO1; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_origin; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_origin_orCat; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_origin_orIdent; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlNum; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_stVal; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_q; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlNum; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_T; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Test; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Check; +extern DataObject iedModel_GenericIO_GGIO1_SPCSO2; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_stVal; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_q; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlNum; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_T; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Test; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Check; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_ctlModel; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_t; +extern DataObject iedModel_GenericIO_GGIO1_SPCSO3; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_stVal; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_q; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlNum; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_T; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Test; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Check; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_ctlModel; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_t; +extern DataObject iedModel_GenericIO_GGIO1_SPCSO4; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_stVal; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_q; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlNum; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_T; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Test; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Check; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_ctlModel; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_t; +extern DataObject iedModel_GenericIO_GGIO1_Ind1; +extern DataAttribute iedModel_GenericIO_GGIO1_Ind1_stVal; +extern DataAttribute iedModel_GenericIO_GGIO1_Ind1_q; +extern DataAttribute iedModel_GenericIO_GGIO1_Ind1_t; +extern DataObject iedModel_GenericIO_GGIO1_Ind2; +extern DataAttribute iedModel_GenericIO_GGIO1_Ind2_stVal; +extern DataAttribute iedModel_GenericIO_GGIO1_Ind2_q; +extern DataAttribute iedModel_GenericIO_GGIO1_Ind2_t; +extern DataObject iedModel_GenericIO_GGIO1_Ind3; +extern DataAttribute iedModel_GenericIO_GGIO1_Ind3_stVal; +extern DataAttribute iedModel_GenericIO_GGIO1_Ind3_q; +extern DataAttribute iedModel_GenericIO_GGIO1_Ind3_t; +extern DataObject iedModel_GenericIO_GGIO1_Ind4; +extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_stVal; +extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_q; +extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_t; +extern LogicalNode iedModel_GenericIO_LTRK1; +extern DataObject iedModel_GenericIO_LTRK1_Beh; +extern DataAttribute iedModel_GenericIO_LTRK1_Beh_stVal; +extern DataAttribute iedModel_GenericIO_LTRK1_Beh_q; +extern DataAttribute iedModel_GenericIO_LTRK1_Beh_t; +extern DataObject iedModel_GenericIO_LTRK1_SpcTrk; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_objRef; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_serviceType; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_errorCode; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_originatorID; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_t; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_d; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_dU; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_cdcNs; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_cdcName; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_dataNs; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_ctlVal; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_origin; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_origin_orCat; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_origin_orIdent; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_ctlNum; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_T; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_Test; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_Check; +extern DataAttribute iedModel_GenericIO_LTRK1_SpcTrk_respAddCause; +extern DataObject iedModel_GenericIO_LTRK1_DpcTrk; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_objRef; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_serviceType; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_errorCode; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_originatorID; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_t; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_d; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_dU; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_cdcNs; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_cdcName; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_dataNs; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_ctlVal; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_origin; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_origin_orCat; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_origin_orIdent; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_ctlNum; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_T; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_Test; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_Check; +extern DataAttribute iedModel_GenericIO_LTRK1_DpcTrk_respAddCause; +extern DataObject iedModel_GenericIO_LTRK1_IncTrk; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_objRef; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_serviceType; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_errorCode; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_originatorID; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_t; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_d; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_dU; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_cdcNs; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_cdcName; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_dataNs; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_ctlVal; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_origin; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_origin_orCat; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_origin_orIdent; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_ctlNum; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_T; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_Test; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_Check; +extern DataAttribute iedModel_GenericIO_LTRK1_IncTrk_respAddCause; +extern DataObject iedModel_GenericIO_LTRK1_BscTrk; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_objRef; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_serviceType; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_errorCode; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_originatorID; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_t; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_d; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_dU; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_cdcNs; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_cdcName; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_dataNs; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_ctlVal; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_origin; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_origin_orCat; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_origin_orIdent; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_ctlNum; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_T; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_Test; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_Check; +extern DataAttribute iedModel_GenericIO_LTRK1_BscTrk_respAddCause; +extern DataObject iedModel_GenericIO_LTRK1_UrcbTrk; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_objRef; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_serviceType; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_errorCode; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_originatorID; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_t; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_d; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_dU; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_cdcNs; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_cdcName; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_dataNs; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_rptID; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_rptEna; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_resv; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_datSet; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_confRev; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_optFlds; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_bufTm; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_sqNum; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_trgOps; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_intgPd; +extern DataAttribute iedModel_GenericIO_LTRK1_UrcbTrk_gi; +extern DataObject iedModel_GenericIO_LTRK1_BrcbTrk; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_objRef; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_serviceType; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_errorCode; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_originatorID; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_t; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_d; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_dU; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_cdcNs; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_cdcName; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_dataNs; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_rptID; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_rptEna; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_datSet; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_confRev; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_optFlds; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_bufTm; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_sqNum; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_trgOps; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_intgPd; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_gi; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_purgeBuf; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_entryID; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_timeOfEntry; +extern DataAttribute iedModel_GenericIO_LTRK1_BrcbTrk_resvTms; +extern DataObject iedModel_GenericIO_LTRK1_GocbTrk; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_objRef; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_serviceType; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_errorCode; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_originatorID; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_t; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_d; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_dU; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_cdcNs; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_cdcName; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_dataNs; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_goEna; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_goID; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_datSet; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_confRev; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_ndsCom; +extern DataAttribute iedModel_GenericIO_LTRK1_GocbTrk_dstAddress; + + + +#define IEDMODEL_GenericIO (&iedModel_GenericIO) +#define IEDMODEL_GenericIO_LLN0 (&iedModel_GenericIO_LLN0) +#define IEDMODEL_GenericIO_LLN0_Mod (&iedModel_GenericIO_LLN0_Mod) +#define IEDMODEL_GenericIO_LLN0_Mod_stVal (&iedModel_GenericIO_LLN0_Mod_stVal) +#define IEDMODEL_GenericIO_LLN0_Mod_q (&iedModel_GenericIO_LLN0_Mod_q) +#define IEDMODEL_GenericIO_LLN0_Mod_t (&iedModel_GenericIO_LLN0_Mod_t) +#define IEDMODEL_GenericIO_LLN0_Mod_ctlModel (&iedModel_GenericIO_LLN0_Mod_ctlModel) +#define IEDMODEL_GenericIO_LLN0_Beh (&iedModel_GenericIO_LLN0_Beh) +#define IEDMODEL_GenericIO_LLN0_Beh_stVal (&iedModel_GenericIO_LLN0_Beh_stVal) +#define IEDMODEL_GenericIO_LLN0_Beh_q (&iedModel_GenericIO_LLN0_Beh_q) +#define IEDMODEL_GenericIO_LLN0_Beh_t (&iedModel_GenericIO_LLN0_Beh_t) +#define IEDMODEL_GenericIO_LLN0_Health (&iedModel_GenericIO_LLN0_Health) +#define IEDMODEL_GenericIO_LLN0_Health_stVal (&iedModel_GenericIO_LLN0_Health_stVal) +#define IEDMODEL_GenericIO_LLN0_Health_q (&iedModel_GenericIO_LLN0_Health_q) +#define IEDMODEL_GenericIO_LLN0_Health_t (&iedModel_GenericIO_LLN0_Health_t) +#define IEDMODEL_GenericIO_LLN0_NamPlt (&iedModel_GenericIO_LLN0_NamPlt) +#define IEDMODEL_GenericIO_LLN0_NamPlt_vendor (&iedModel_GenericIO_LLN0_NamPlt_vendor) +#define IEDMODEL_GenericIO_LLN0_NamPlt_swRev (&iedModel_GenericIO_LLN0_NamPlt_swRev) +#define IEDMODEL_GenericIO_LLN0_NamPlt_d (&iedModel_GenericIO_LLN0_NamPlt_d) +#define IEDMODEL_GenericIO_LLN0_NamPlt_configRev (&iedModel_GenericIO_LLN0_NamPlt_configRev) +#define IEDMODEL_GenericIO_LLN0_NamPlt_ldNs (&iedModel_GenericIO_LLN0_NamPlt_ldNs) +#define IEDMODEL_GenericIO_LPHD1 (&iedModel_GenericIO_LPHD1) +#define IEDMODEL_GenericIO_LPHD1_PhyNam (&iedModel_GenericIO_LPHD1_PhyNam) +#define IEDMODEL_GenericIO_LPHD1_PhyNam_vendor (&iedModel_GenericIO_LPHD1_PhyNam_vendor) +#define IEDMODEL_GenericIO_LPHD1_PhyHealth (&iedModel_GenericIO_LPHD1_PhyHealth) +#define IEDMODEL_GenericIO_LPHD1_PhyHealth_stVal (&iedModel_GenericIO_LPHD1_PhyHealth_stVal) +#define IEDMODEL_GenericIO_LPHD1_PhyHealth_q (&iedModel_GenericIO_LPHD1_PhyHealth_q) +#define IEDMODEL_GenericIO_LPHD1_PhyHealth_t (&iedModel_GenericIO_LPHD1_PhyHealth_t) +#define IEDMODEL_GenericIO_LPHD1_Proxy (&iedModel_GenericIO_LPHD1_Proxy) +#define IEDMODEL_GenericIO_LPHD1_Proxy_stVal (&iedModel_GenericIO_LPHD1_Proxy_stVal) +#define IEDMODEL_GenericIO_LPHD1_Proxy_q (&iedModel_GenericIO_LPHD1_Proxy_q) +#define IEDMODEL_GenericIO_LPHD1_Proxy_t (&iedModel_GenericIO_LPHD1_Proxy_t) +#define IEDMODEL_GenericIO_GGIO1 (&iedModel_GenericIO_GGIO1) +#define IEDMODEL_GenericIO_GGIO1_Mod (&iedModel_GenericIO_GGIO1_Mod) +#define IEDMODEL_GenericIO_GGIO1_Mod_stVal (&iedModel_GenericIO_GGIO1_Mod_stVal) +#define IEDMODEL_GenericIO_GGIO1_Mod_q (&iedModel_GenericIO_GGIO1_Mod_q) +#define IEDMODEL_GenericIO_GGIO1_Mod_t (&iedModel_GenericIO_GGIO1_Mod_t) +#define IEDMODEL_GenericIO_GGIO1_Mod_ctlModel (&iedModel_GenericIO_GGIO1_Mod_ctlModel) +#define IEDMODEL_GenericIO_GGIO1_Beh (&iedModel_GenericIO_GGIO1_Beh) +#define IEDMODEL_GenericIO_GGIO1_Beh_stVal (&iedModel_GenericIO_GGIO1_Beh_stVal) +#define IEDMODEL_GenericIO_GGIO1_Beh_q (&iedModel_GenericIO_GGIO1_Beh_q) +#define IEDMODEL_GenericIO_GGIO1_Beh_t (&iedModel_GenericIO_GGIO1_Beh_t) +#define IEDMODEL_GenericIO_GGIO1_Health (&iedModel_GenericIO_GGIO1_Health) +#define IEDMODEL_GenericIO_GGIO1_Health_stVal (&iedModel_GenericIO_GGIO1_Health_stVal) +#define IEDMODEL_GenericIO_GGIO1_Health_q (&iedModel_GenericIO_GGIO1_Health_q) +#define IEDMODEL_GenericIO_GGIO1_Health_t (&iedModel_GenericIO_GGIO1_Health_t) +#define IEDMODEL_GenericIO_GGIO1_NamPlt (&iedModel_GenericIO_GGIO1_NamPlt) +#define IEDMODEL_GenericIO_GGIO1_NamPlt_vendor (&iedModel_GenericIO_GGIO1_NamPlt_vendor) +#define IEDMODEL_GenericIO_GGIO1_NamPlt_swRev (&iedModel_GenericIO_GGIO1_NamPlt_swRev) +#define IEDMODEL_GenericIO_GGIO1_NamPlt_d (&iedModel_GenericIO_GGIO1_NamPlt_d) +#define IEDMODEL_GenericIO_GGIO1_AnIn1 (&iedModel_GenericIO_GGIO1_AnIn1) +#define IEDMODEL_GenericIO_GGIO1_AnIn1_mag (&iedModel_GenericIO_GGIO1_AnIn1_mag) +#define IEDMODEL_GenericIO_GGIO1_AnIn1_mag_f (&iedModel_GenericIO_GGIO1_AnIn1_mag_f) +#define IEDMODEL_GenericIO_GGIO1_AnIn1_q (&iedModel_GenericIO_GGIO1_AnIn1_q) +#define IEDMODEL_GenericIO_GGIO1_AnIn1_t (&iedModel_GenericIO_GGIO1_AnIn1_t) +#define IEDMODEL_GenericIO_GGIO1_AnIn2 (&iedModel_GenericIO_GGIO1_AnIn2) +#define IEDMODEL_GenericIO_GGIO1_AnIn2_mag (&iedModel_GenericIO_GGIO1_AnIn2_mag) +#define IEDMODEL_GenericIO_GGIO1_AnIn2_mag_f (&iedModel_GenericIO_GGIO1_AnIn2_mag_f) +#define IEDMODEL_GenericIO_GGIO1_AnIn2_q (&iedModel_GenericIO_GGIO1_AnIn2_q) +#define IEDMODEL_GenericIO_GGIO1_AnIn2_t (&iedModel_GenericIO_GGIO1_AnIn2_t) +#define IEDMODEL_GenericIO_GGIO1_AnIn3 (&iedModel_GenericIO_GGIO1_AnIn3) +#define IEDMODEL_GenericIO_GGIO1_AnIn3_mag (&iedModel_GenericIO_GGIO1_AnIn3_mag) +#define IEDMODEL_GenericIO_GGIO1_AnIn3_mag_f (&iedModel_GenericIO_GGIO1_AnIn3_mag_f) +#define IEDMODEL_GenericIO_GGIO1_AnIn3_q (&iedModel_GenericIO_GGIO1_AnIn3_q) +#define IEDMODEL_GenericIO_GGIO1_AnIn3_t (&iedModel_GenericIO_GGIO1_AnIn3_t) +#define IEDMODEL_GenericIO_GGIO1_AnIn4 (&iedModel_GenericIO_GGIO1_AnIn4) +#define IEDMODEL_GenericIO_GGIO1_AnIn4_mag (&iedModel_GenericIO_GGIO1_AnIn4_mag) +#define IEDMODEL_GenericIO_GGIO1_AnIn4_mag_f (&iedModel_GenericIO_GGIO1_AnIn4_mag_f) +#define IEDMODEL_GenericIO_GGIO1_AnIn4_q (&iedModel_GenericIO_GGIO1_AnIn4_q) +#define IEDMODEL_GenericIO_GGIO1_AnIn4_t (&iedModel_GenericIO_GGIO1_AnIn4_t) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1 (&iedModel_GenericIO_GGIO1_SPCSO1) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_origin (&iedModel_GenericIO_GGIO1_SPCSO1_origin) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_origin_orCat (&iedModel_GenericIO_GGIO1_SPCSO1_origin_orCat) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_origin_orIdent (&iedModel_GenericIO_GGIO1_SPCSO1_origin_orIdent) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_ctlNum (&iedModel_GenericIO_GGIO1_SPCSO1_ctlNum) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_stVal (&iedModel_GenericIO_GGIO1_SPCSO1_stVal) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_q (&iedModel_GenericIO_GGIO1_SPCSO1_q) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_t (&iedModel_GenericIO_GGIO1_SPCSO1_t) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_ctlModel (&iedModel_GenericIO_GGIO1_SPCSO1_ctlModel) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper (&iedModel_GenericIO_GGIO1_SPCSO1_Oper) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_ctlVal (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_origin (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_ctlNum (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlNum) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_T (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_T) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_Test (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_Test) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_Check (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_Check) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2 (&iedModel_GenericIO_GGIO1_SPCSO2) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2_stVal (&iedModel_GenericIO_GGIO1_SPCSO2_stVal) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2_q (&iedModel_GenericIO_GGIO1_SPCSO2_q) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper (&iedModel_GenericIO_GGIO1_SPCSO2_Oper) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_ctlVal (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_origin (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_ctlNum (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlNum) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_T (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_T) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_Test (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_Test) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_Check (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_Check) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2_ctlModel (&iedModel_GenericIO_GGIO1_SPCSO2_ctlModel) +#define IEDMODEL_GenericIO_GGIO1_SPCSO2_t (&iedModel_GenericIO_GGIO1_SPCSO2_t) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3 (&iedModel_GenericIO_GGIO1_SPCSO3) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3_stVal (&iedModel_GenericIO_GGIO1_SPCSO3_stVal) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3_q (&iedModel_GenericIO_GGIO1_SPCSO3_q) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper (&iedModel_GenericIO_GGIO1_SPCSO3_Oper) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_ctlVal (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_origin (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_ctlNum (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlNum) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_T (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_T) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_Test (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_Test) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_Check (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_Check) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3_ctlModel (&iedModel_GenericIO_GGIO1_SPCSO3_ctlModel) +#define IEDMODEL_GenericIO_GGIO1_SPCSO3_t (&iedModel_GenericIO_GGIO1_SPCSO3_t) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4 (&iedModel_GenericIO_GGIO1_SPCSO4) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4_stVal (&iedModel_GenericIO_GGIO1_SPCSO4_stVal) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4_q (&iedModel_GenericIO_GGIO1_SPCSO4_q) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper (&iedModel_GenericIO_GGIO1_SPCSO4_Oper) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_ctlVal (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_origin (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_ctlNum (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlNum) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_T (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_T) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_Test (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_Test) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_Check (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_Check) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4_ctlModel (&iedModel_GenericIO_GGIO1_SPCSO4_ctlModel) +#define IEDMODEL_GenericIO_GGIO1_SPCSO4_t (&iedModel_GenericIO_GGIO1_SPCSO4_t) +#define IEDMODEL_GenericIO_GGIO1_Ind1 (&iedModel_GenericIO_GGIO1_Ind1) +#define IEDMODEL_GenericIO_GGIO1_Ind1_stVal (&iedModel_GenericIO_GGIO1_Ind1_stVal) +#define IEDMODEL_GenericIO_GGIO1_Ind1_q (&iedModel_GenericIO_GGIO1_Ind1_q) +#define IEDMODEL_GenericIO_GGIO1_Ind1_t (&iedModel_GenericIO_GGIO1_Ind1_t) +#define IEDMODEL_GenericIO_GGIO1_Ind2 (&iedModel_GenericIO_GGIO1_Ind2) +#define IEDMODEL_GenericIO_GGIO1_Ind2_stVal (&iedModel_GenericIO_GGIO1_Ind2_stVal) +#define IEDMODEL_GenericIO_GGIO1_Ind2_q (&iedModel_GenericIO_GGIO1_Ind2_q) +#define IEDMODEL_GenericIO_GGIO1_Ind2_t (&iedModel_GenericIO_GGIO1_Ind2_t) +#define IEDMODEL_GenericIO_GGIO1_Ind3 (&iedModel_GenericIO_GGIO1_Ind3) +#define IEDMODEL_GenericIO_GGIO1_Ind3_stVal (&iedModel_GenericIO_GGIO1_Ind3_stVal) +#define IEDMODEL_GenericIO_GGIO1_Ind3_q (&iedModel_GenericIO_GGIO1_Ind3_q) +#define IEDMODEL_GenericIO_GGIO1_Ind3_t (&iedModel_GenericIO_GGIO1_Ind3_t) +#define IEDMODEL_GenericIO_GGIO1_Ind4 (&iedModel_GenericIO_GGIO1_Ind4) +#define IEDMODEL_GenericIO_GGIO1_Ind4_stVal (&iedModel_GenericIO_GGIO1_Ind4_stVal) +#define IEDMODEL_GenericIO_GGIO1_Ind4_q (&iedModel_GenericIO_GGIO1_Ind4_q) +#define IEDMODEL_GenericIO_GGIO1_Ind4_t (&iedModel_GenericIO_GGIO1_Ind4_t) +#define IEDMODEL_GenericIO_LTRK1 (&iedModel_GenericIO_LTRK1) +#define IEDMODEL_GenericIO_LTRK1_Beh (&iedModel_GenericIO_LTRK1_Beh) +#define IEDMODEL_GenericIO_LTRK1_Beh_stVal (&iedModel_GenericIO_LTRK1_Beh_stVal) +#define IEDMODEL_GenericIO_LTRK1_Beh_q (&iedModel_GenericIO_LTRK1_Beh_q) +#define IEDMODEL_GenericIO_LTRK1_Beh_t (&iedModel_GenericIO_LTRK1_Beh_t) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk (&iedModel_GenericIO_LTRK1_SpcTrk) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_objRef (&iedModel_GenericIO_LTRK1_SpcTrk_objRef) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_serviceType (&iedModel_GenericIO_LTRK1_SpcTrk_serviceType) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_errorCode (&iedModel_GenericIO_LTRK1_SpcTrk_errorCode) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_originatorID (&iedModel_GenericIO_LTRK1_SpcTrk_originatorID) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_t (&iedModel_GenericIO_LTRK1_SpcTrk_t) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_d (&iedModel_GenericIO_LTRK1_SpcTrk_d) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_dU (&iedModel_GenericIO_LTRK1_SpcTrk_dU) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_cdcNs (&iedModel_GenericIO_LTRK1_SpcTrk_cdcNs) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_cdcName (&iedModel_GenericIO_LTRK1_SpcTrk_cdcName) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_dataNs (&iedModel_GenericIO_LTRK1_SpcTrk_dataNs) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_ctlVal (&iedModel_GenericIO_LTRK1_SpcTrk_ctlVal) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_origin (&iedModel_GenericIO_LTRK1_SpcTrk_origin) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_origin_orCat (&iedModel_GenericIO_LTRK1_SpcTrk_origin_orCat) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_origin_orIdent (&iedModel_GenericIO_LTRK1_SpcTrk_origin_orIdent) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_ctlNum (&iedModel_GenericIO_LTRK1_SpcTrk_ctlNum) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_T (&iedModel_GenericIO_LTRK1_SpcTrk_T) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_Test (&iedModel_GenericIO_LTRK1_SpcTrk_Test) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_Check (&iedModel_GenericIO_LTRK1_SpcTrk_Check) +#define IEDMODEL_GenericIO_LTRK1_SpcTrk_respAddCause (&iedModel_GenericIO_LTRK1_SpcTrk_respAddCause) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk (&iedModel_GenericIO_LTRK1_DpcTrk) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_objRef (&iedModel_GenericIO_LTRK1_DpcTrk_objRef) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_serviceType (&iedModel_GenericIO_LTRK1_DpcTrk_serviceType) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_errorCode (&iedModel_GenericIO_LTRK1_DpcTrk_errorCode) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_originatorID (&iedModel_GenericIO_LTRK1_DpcTrk_originatorID) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_t (&iedModel_GenericIO_LTRK1_DpcTrk_t) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_d (&iedModel_GenericIO_LTRK1_DpcTrk_d) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_dU (&iedModel_GenericIO_LTRK1_DpcTrk_dU) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_cdcNs (&iedModel_GenericIO_LTRK1_DpcTrk_cdcNs) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_cdcName (&iedModel_GenericIO_LTRK1_DpcTrk_cdcName) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_dataNs (&iedModel_GenericIO_LTRK1_DpcTrk_dataNs) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_ctlVal (&iedModel_GenericIO_LTRK1_DpcTrk_ctlVal) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_origin (&iedModel_GenericIO_LTRK1_DpcTrk_origin) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_origin_orCat (&iedModel_GenericIO_LTRK1_DpcTrk_origin_orCat) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_origin_orIdent (&iedModel_GenericIO_LTRK1_DpcTrk_origin_orIdent) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_ctlNum (&iedModel_GenericIO_LTRK1_DpcTrk_ctlNum) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_T (&iedModel_GenericIO_LTRK1_DpcTrk_T) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_Test (&iedModel_GenericIO_LTRK1_DpcTrk_Test) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_Check (&iedModel_GenericIO_LTRK1_DpcTrk_Check) +#define IEDMODEL_GenericIO_LTRK1_DpcTrk_respAddCause (&iedModel_GenericIO_LTRK1_DpcTrk_respAddCause) +#define IEDMODEL_GenericIO_LTRK1_IncTrk (&iedModel_GenericIO_LTRK1_IncTrk) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_objRef (&iedModel_GenericIO_LTRK1_IncTrk_objRef) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_serviceType (&iedModel_GenericIO_LTRK1_IncTrk_serviceType) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_errorCode (&iedModel_GenericIO_LTRK1_IncTrk_errorCode) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_originatorID (&iedModel_GenericIO_LTRK1_IncTrk_originatorID) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_t (&iedModel_GenericIO_LTRK1_IncTrk_t) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_d (&iedModel_GenericIO_LTRK1_IncTrk_d) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_dU (&iedModel_GenericIO_LTRK1_IncTrk_dU) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_cdcNs (&iedModel_GenericIO_LTRK1_IncTrk_cdcNs) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_cdcName (&iedModel_GenericIO_LTRK1_IncTrk_cdcName) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_dataNs (&iedModel_GenericIO_LTRK1_IncTrk_dataNs) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_ctlVal (&iedModel_GenericIO_LTRK1_IncTrk_ctlVal) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_origin (&iedModel_GenericIO_LTRK1_IncTrk_origin) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_origin_orCat (&iedModel_GenericIO_LTRK1_IncTrk_origin_orCat) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_origin_orIdent (&iedModel_GenericIO_LTRK1_IncTrk_origin_orIdent) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_ctlNum (&iedModel_GenericIO_LTRK1_IncTrk_ctlNum) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_T (&iedModel_GenericIO_LTRK1_IncTrk_T) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_Test (&iedModel_GenericIO_LTRK1_IncTrk_Test) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_Check (&iedModel_GenericIO_LTRK1_IncTrk_Check) +#define IEDMODEL_GenericIO_LTRK1_IncTrk_respAddCause (&iedModel_GenericIO_LTRK1_IncTrk_respAddCause) +#define IEDMODEL_GenericIO_LTRK1_BscTrk (&iedModel_GenericIO_LTRK1_BscTrk) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_objRef (&iedModel_GenericIO_LTRK1_BscTrk_objRef) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_serviceType (&iedModel_GenericIO_LTRK1_BscTrk_serviceType) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_errorCode (&iedModel_GenericIO_LTRK1_BscTrk_errorCode) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_originatorID (&iedModel_GenericIO_LTRK1_BscTrk_originatorID) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_t (&iedModel_GenericIO_LTRK1_BscTrk_t) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_d (&iedModel_GenericIO_LTRK1_BscTrk_d) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_dU (&iedModel_GenericIO_LTRK1_BscTrk_dU) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_cdcNs (&iedModel_GenericIO_LTRK1_BscTrk_cdcNs) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_cdcName (&iedModel_GenericIO_LTRK1_BscTrk_cdcName) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_dataNs (&iedModel_GenericIO_LTRK1_BscTrk_dataNs) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_ctlVal (&iedModel_GenericIO_LTRK1_BscTrk_ctlVal) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_origin (&iedModel_GenericIO_LTRK1_BscTrk_origin) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_origin_orCat (&iedModel_GenericIO_LTRK1_BscTrk_origin_orCat) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_origin_orIdent (&iedModel_GenericIO_LTRK1_BscTrk_origin_orIdent) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_ctlNum (&iedModel_GenericIO_LTRK1_BscTrk_ctlNum) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_T (&iedModel_GenericIO_LTRK1_BscTrk_T) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_Test (&iedModel_GenericIO_LTRK1_BscTrk_Test) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_Check (&iedModel_GenericIO_LTRK1_BscTrk_Check) +#define IEDMODEL_GenericIO_LTRK1_BscTrk_respAddCause (&iedModel_GenericIO_LTRK1_BscTrk_respAddCause) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk (&iedModel_GenericIO_LTRK1_UrcbTrk) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_objRef (&iedModel_GenericIO_LTRK1_UrcbTrk_objRef) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_serviceType (&iedModel_GenericIO_LTRK1_UrcbTrk_serviceType) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_errorCode (&iedModel_GenericIO_LTRK1_UrcbTrk_errorCode) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_originatorID (&iedModel_GenericIO_LTRK1_UrcbTrk_originatorID) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_t (&iedModel_GenericIO_LTRK1_UrcbTrk_t) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_d (&iedModel_GenericIO_LTRK1_UrcbTrk_d) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_dU (&iedModel_GenericIO_LTRK1_UrcbTrk_dU) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_cdcNs (&iedModel_GenericIO_LTRK1_UrcbTrk_cdcNs) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_cdcName (&iedModel_GenericIO_LTRK1_UrcbTrk_cdcName) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_dataNs (&iedModel_GenericIO_LTRK1_UrcbTrk_dataNs) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_rptID (&iedModel_GenericIO_LTRK1_UrcbTrk_rptID) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_rptEna (&iedModel_GenericIO_LTRK1_UrcbTrk_rptEna) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_resv (&iedModel_GenericIO_LTRK1_UrcbTrk_resv) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_datSet (&iedModel_GenericIO_LTRK1_UrcbTrk_datSet) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_confRev (&iedModel_GenericIO_LTRK1_UrcbTrk_confRev) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_optFlds (&iedModel_GenericIO_LTRK1_UrcbTrk_optFlds) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_bufTm (&iedModel_GenericIO_LTRK1_UrcbTrk_bufTm) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_sqNum (&iedModel_GenericIO_LTRK1_UrcbTrk_sqNum) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_trgOps (&iedModel_GenericIO_LTRK1_UrcbTrk_trgOps) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_intgPd (&iedModel_GenericIO_LTRK1_UrcbTrk_intgPd) +#define IEDMODEL_GenericIO_LTRK1_UrcbTrk_gi (&iedModel_GenericIO_LTRK1_UrcbTrk_gi) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk (&iedModel_GenericIO_LTRK1_BrcbTrk) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_objRef (&iedModel_GenericIO_LTRK1_BrcbTrk_objRef) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_serviceType (&iedModel_GenericIO_LTRK1_BrcbTrk_serviceType) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_errorCode (&iedModel_GenericIO_LTRK1_BrcbTrk_errorCode) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_originatorID (&iedModel_GenericIO_LTRK1_BrcbTrk_originatorID) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_t (&iedModel_GenericIO_LTRK1_BrcbTrk_t) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_d (&iedModel_GenericIO_LTRK1_BrcbTrk_d) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_dU (&iedModel_GenericIO_LTRK1_BrcbTrk_dU) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_cdcNs (&iedModel_GenericIO_LTRK1_BrcbTrk_cdcNs) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_cdcName (&iedModel_GenericIO_LTRK1_BrcbTrk_cdcName) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_dataNs (&iedModel_GenericIO_LTRK1_BrcbTrk_dataNs) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_rptID (&iedModel_GenericIO_LTRK1_BrcbTrk_rptID) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_rptEna (&iedModel_GenericIO_LTRK1_BrcbTrk_rptEna) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_datSet (&iedModel_GenericIO_LTRK1_BrcbTrk_datSet) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_confRev (&iedModel_GenericIO_LTRK1_BrcbTrk_confRev) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_optFlds (&iedModel_GenericIO_LTRK1_BrcbTrk_optFlds) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_bufTm (&iedModel_GenericIO_LTRK1_BrcbTrk_bufTm) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_sqNum (&iedModel_GenericIO_LTRK1_BrcbTrk_sqNum) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_trgOps (&iedModel_GenericIO_LTRK1_BrcbTrk_trgOps) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_intgPd (&iedModel_GenericIO_LTRK1_BrcbTrk_intgPd) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_gi (&iedModel_GenericIO_LTRK1_BrcbTrk_gi) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_purgeBuf (&iedModel_GenericIO_LTRK1_BrcbTrk_purgeBuf) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_entryID (&iedModel_GenericIO_LTRK1_BrcbTrk_entryID) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_timeOfEntry (&iedModel_GenericIO_LTRK1_BrcbTrk_timeOfEntry) +#define IEDMODEL_GenericIO_LTRK1_BrcbTrk_resvTms (&iedModel_GenericIO_LTRK1_BrcbTrk_resvTms) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk (&iedModel_GenericIO_LTRK1_GocbTrk) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_objRef (&iedModel_GenericIO_LTRK1_GocbTrk_objRef) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_serviceType (&iedModel_GenericIO_LTRK1_GocbTrk_serviceType) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_errorCode (&iedModel_GenericIO_LTRK1_GocbTrk_errorCode) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_originatorID (&iedModel_GenericIO_LTRK1_GocbTrk_originatorID) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_t (&iedModel_GenericIO_LTRK1_GocbTrk_t) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_d (&iedModel_GenericIO_LTRK1_GocbTrk_d) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_dU (&iedModel_GenericIO_LTRK1_GocbTrk_dU) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_cdcNs (&iedModel_GenericIO_LTRK1_GocbTrk_cdcNs) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_cdcName (&iedModel_GenericIO_LTRK1_GocbTrk_cdcName) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_dataNs (&iedModel_GenericIO_LTRK1_GocbTrk_dataNs) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_goEna (&iedModel_GenericIO_LTRK1_GocbTrk_goEna) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_goID (&iedModel_GenericIO_LTRK1_GocbTrk_goID) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_datSet (&iedModel_GenericIO_LTRK1_GocbTrk_datSet) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_confRev (&iedModel_GenericIO_LTRK1_GocbTrk_confRev) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_ndsCom (&iedModel_GenericIO_LTRK1_GocbTrk_ndsCom) +#define IEDMODEL_GenericIO_LTRK1_GocbTrk_dstAddress (&iedModel_GenericIO_LTRK1_GocbTrk_dstAddress) + +#endif /* STATIC_MODEL_H_ */ + diff --git a/src/iec61850/inc_private/mms_mapping_internal.h b/src/iec61850/inc_private/mms_mapping_internal.h index 2606cf5c..54f3bd93 100644 --- a/src/iec61850/inc_private/mms_mapping_internal.h +++ b/src/iec61850/inc_private/mms_mapping_internal.h @@ -1,7 +1,7 @@ /* * mms_mapping_internal.h * - * Copyright 2013-2018 Michael Zillgith + * Copyright 2013-2020 Michael Zillgith * * This file is part of libIEC61850. * @@ -29,6 +29,151 @@ #include "hal_thread.h" #include "linked_list.h" +#if (CONFIG_IEC61850_SERVICE_TRACKING == 1) + +typedef int IEC61850_ServiceType; + +#define IEC61850_SERVICE_TYPE_UNKOWN 0 +#define IEC61850_SERVICE_TYPE_ASSOCIATE 1 +#define IEC61850_SERVICE_TYPE_ABORT 2 +#define IEC61850_SERVICE_TYPE_RELEASE 3 +#define IEC61850_SERVICE_TYPE_GET_SERVER_DIRECTORY 4 +#define IEC61850_SERVICE_TYPE_GET_LOGICAL_DEVICE_DIRECTORY 5 +#define IEC61850_SERVICE_TYPE_GET_ALL_DATA_VALUES 6 +#define IEC61850_SERVICE_TYPE_GET_DATA_VALUES 7 +#define IEC61850_SERVICE_TYPE_SET_DATA_VALUES 8 +#define IEC61850_SERVICE_TYPE_GET_DATA_DIRECTORY 9 +#define IEC61850_SERVICE_TYPE_GET_DATA_DEFINITION 10 +#define IEC61850_SERVICE_TYPE_GET_DATA_SET_VALUES 11 +#define IEC61850_SERVICE_TYPE_SET_DATA_SET_VALUES 12 +#define IEC61850_SERVICE_TYPE_CREATE_DATA_SET 13 +#define IEC61850_SERVICE_TYPE_DELETE_DATA_SET 14 +#define IEC61850_SERVICE_TYPE_GET_DATA_SET_DIRECTORY 15 +#define IEC61850_SERVICE_TYPE_SELECT_ACTIVE_SG 16 +#define IEC61850_SERVICE_TYPE_SELECT_EDIT_SG 17 +#define IEC61850_SERVICE_TYPE_SET_EDIT_SG_VALUE 18 +#define IEC61850_SERVICE_TYPE_CONFIRM_EDIT_SG_VALUES 19 +#define IEC61850_SERVICE_TYPE_GET_EDIT_SG_VALUE 20 +#define IEC61850_SERVICE_TYPE_GET_SGCB_VALUES 21 +#define IEC61850_SERVICE_TYPE_REPORT 22 +#define IEC61850_SERVICE_TYPE_GET_BRCB_VALUES 23 +#define IEC61850_SERVICE_TYPE_SET_BRCB_VALUES 24 +#define IEC61850_SERVICE_TYPE_GET_URCB_VALUES 25 +#define IEC61850_SERVICE_TYPE_SET_URCB_VALUES 26 +#define IEC61850_SERVICE_TYPE_GET_LCB_VALUES 27 +#define IEC61850_SERVICE_TYPE_SET_LCB_VALUES 28 +#define IEC61850_SERVICE_TYPE_QUERY_LOG_BY_TIME 29 +#define IEC61850_SERVICE_TYPE_QUERY_LOG_AFTER 30 +#define IEC61850_SERVICE_TYPE_GET_LOG_STATUS 31 +#define IEC61850_SERVICE_TYPE_SEND_GOOSE_MESSAGE 32 +#define IEC61850_SERVICE_TYPE_GET_GOCB_VALUES 33 +#define IEC61850_SERVICE_TYPE_SET_GOCB_VALUES 34 +#define IEC61850_SERVICE_TYPE_GET_GO_REFERENCE 35 +#define IEC61850_SERVICE_TYPE_GET_GOOSE_ELEMENT_NUMBER 36 +#define IEC61850_SERVICE_TYPE_SEND_MSV_MESSAGE 37 +#define IEC61850_SERVICE_TYPE_GET_MSVCB_VALUES 38 +#define IEC61850_SERVICE_TYPE_SET_MSVCB_VALUES 39 +#define IEC61850_SERVICE_TYPE_SEND_USV_MESSAGE 40 +#define IEC61850_SERVICE_TYPE_GET_USVCB_VALUES 41 +#define IEC61850_SERVICE_TYPE_SET_USVCB_VALUES 42 +#define IEC61850_SERVICE_TYPE_SELECT 43 +#define IEC61850_SERVICE_TYPE_SELECT_WITH_VALUES 44 +#define IEC61850_SERVICE_TYPE_CANCEL 45 +#define IEC61850_SERVICE_TYPE_OPERATE 46 +#define IEC61850_SERVICE_TYPE_COMMAND_TERMINATION 47 +#define IEC61850_SERVICE_TYPE_TIME_ACTIVATED_OPERATE 48 +#define IEC61850_SERVICE_TYPE_GET_FILE 49 +#define IEC61850_SERVICE_TYPE_SET_FILE 50 +#define IEC61850_SERVICE_TYPE_DELETE_FILE 51 +#define IEC61850_SERVICE_TYPE_GET_FILE_ATTRIBUTE_VALUES 52 +#define IEC61850_SERVICE_TYPE_TIME_SYNCHRONISATION 53 +#define IEC61850_SERVICE_TYPE_INTERNAL_CHANGE 54 + +typedef int IEC61850_ServiceError; + +#define IEC61850_SERVICE_ERROR_NO_ERROR 0 +#define IEC61850_SERVICE_ERROR_INSTANCE_NOT_AVAILABLE 1 +#define IEC61850_SERVICE_ERROR_INSTANCE_IN_USE 2 +#define IEC61850_SERVICE_ERROR_ACCESS_VIOLATION 3 +#define IEC61850_SERVICE_ERROR_ACCESS_NOT_ALLOWED_IN_CURRENT_STATE 4 +#define IEC61850_SERVICE_ERROR_PARAMETER_VALUE_INAPPROPRIATE 5 +#define IEC61850_SERVICE_ERROR_PARAMETER_VALUE_INCONSISTENT 6 +#define IEC61850_SERVICE_ERROR_CLASS_NOT_SUPPORTED 7 +#define IEC61850_SERVICE_ERROR_INSTANCE_LOCKED_BY_OTHER_CLIENT 8 +#define IEC61850_SERVICE_ERROR_CONTROL_MUST_BE_SELECTED 9 +#define IEC61850_SERVICE_ERROR_TYPE_CONFLICT 10 +#define IEC61850_SERVICE_ERROR_FAILED_DUE_TO_COMMUNICATION_CONSTRAINT 11 +#define IEC61850_SERVICE_ERROR_FAILED_DUE_TO_SERVER_CONSTRAINT 12 + +typedef struct sServiceTrkInstance* ServiceTrkInstance; + +struct sServiceTrkInstance +{ + DataObject* dobj; + DataAttribute* objRef; + DataAttribute* serviceType; + DataAttribute* errorCode; + DataAttribute* originatorID; /* optional */ + DataAttribute* t; +}; + +typedef struct sBrcbTrkInstance* BrcbTrkInstance; + +struct sBrcbTrkInstance +{ + /* inherited from ServiceTrkInstance */ + DataObject* dobj; + DataAttribute* objRef; + DataAttribute* serviceType; + DataAttribute* errorCode; + DataAttribute* originatorID; /* optional */ + DataAttribute* t; + + /* BrcbTrk specific attributes */ + DataAttribute* rptID; + DataAttribute* rptEna; + DataAttribute* datSet; + DataAttribute* confRev; + DataAttribute* optFlds; + DataAttribute* bufTm; + DataAttribute* sqNum; + DataAttribute* trgOps; + DataAttribute* intgPd; + DataAttribute* gi; + DataAttribute* purgeBuf; + DataAttribute* entryID; + DataAttribute* timeOfEntry; + DataAttribute* resvTms; /* optional */ +}; + +typedef struct sUrcbTrkInstance* UrcbTrkInstance; + +struct sUrcbTrkInstance +{ + /* inherited from ServiceTrkInstance */ + DataObject* dobj; + DataAttribute* objRef; + DataAttribute* serviceType; + DataAttribute* errorCode; + DataAttribute* originatorID; /* optional */ + DataAttribute* t; + + /* UrcbTrk specific attributes */ + DataAttribute* rptID; + DataAttribute* rptEna; + DataAttribute* resv; + DataAttribute* datSet; + DataAttribute* confRev; + DataAttribute* optFlds; + DataAttribute* bufTm; + DataAttribute* sqNum; + DataAttribute* trgOps; + DataAttribute* intgPd; + DataAttribute* gi; +}; + +#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */ + struct sMmsMapping { IedModel* model; MmsDevice* mmsDevice; @@ -68,6 +213,13 @@ struct sMmsMapping { Thread reportWorkerThread; #endif +#if (CONFIG_IEC61850_SERVICE_TRACKING == 1) + + BrcbTrkInstance brcbTrk; + UrcbTrkInstance urcbTrk; + +#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */ + /* flag indicates if data model is locked --> prevents reports to be sent */ bool isModelLocked; diff --git a/src/iec61850/inc_private/reporting.h b/src/iec61850/inc_private/reporting.h index 96dc362b..784bd300 100644 --- a/src/iec61850/inc_private/reporting.h +++ b/src/iec61850/inc_private/reporting.h @@ -132,7 +132,7 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme MmsServerConnection connection); LIB61850_INTERNAL void -ReportControl_readAccess(ReportControl* rc, char* elementName); +ReportControl_readAccess(ReportControl* rc, MmsMapping* mmsMapping, char* elementName); LIB61850_INTERNAL void Reporting_activateBufferedReports(MmsMapping* self); diff --git a/src/iec61850/server/mms_mapping/mms_mapping.c b/src/iec61850/server/mms_mapping/mms_mapping.c index 59a57eb3..4535d6a2 100644 --- a/src/iec61850/server/mms_mapping/mms_mapping.c +++ b/src/iec61850/server/mms_mapping/mms_mapping.c @@ -856,6 +856,241 @@ checkForSgcb(MmsMapping* self, LogicalNode* logicalNode) #endif /* (CONFIG_IEC61850_SETTING_GROUPS == 1) */ +#if (CONFIG_IEC61850_SERVICE_TRACKING == 1) + +static void +getCommonTrackingAttributes(ServiceTrkInstance svcTrkInst, DataObject* trkObj) +{ + ModelNode* modelNode = trkObj->firstChild; + + while (modelNode) { + if (modelNode->modelType == DataAttributeModelType) { + DataAttribute* da = (DataAttribute*) modelNode; + + if (!strcmp(da->name, "objRef")) { + svcTrkInst->objRef = da; + } + else if (!strcmp(da->name, "serviceType")) { + svcTrkInst->serviceType = da; + } + else if (!strcmp(da->name, "errorCode")) { + svcTrkInst->errorCode = da; + } + else if (!strcmp(da->name, "originatorID")) { + svcTrkInst->originatorID = da; + } + else if (!strcmp(da->name, "t")) { + svcTrkInst->t = da; + } + } + + modelNode = modelNode->sibling; + } + + /* check if all mandatory attributes are present */ + if (svcTrkInst->objRef && svcTrkInst->serviceType && svcTrkInst->errorCode && svcTrkInst->t) { + + } + else { + if (DEBUG_IED_SERVER) + printf("IED_SERVER: required attribute missing in service tracking object %s\n",trkObj->name); + } +} + +static void +getBrcbTrackingAttributes(BrcbTrkInstance svcTrkInst, DataObject* trkObj) +{ + ModelNode* modelNode = trkObj->firstChild; + + while (modelNode) { + if (modelNode->modelType == DataAttributeModelType) { + DataAttribute* da = (DataAttribute*) modelNode; + + if (!strcmp(da->name, "rptID")) { + svcTrkInst->rptID = da; + } + else if (!strcmp(da->name, "rptEna")) { + svcTrkInst->rptEna = da; + } + else if (!strcmp(da->name, "datSet")) { + svcTrkInst->datSet = da; + } + else if (!strcmp(da->name, "confRev")) { + svcTrkInst->confRev = da; + } + else if (!strcmp(da->name, "optFlds")) { + svcTrkInst->optFlds = da; + } + else if (!strcmp(da->name, "bufTm")) { + svcTrkInst->bufTm = da; + } + else if (!strcmp(da->name, "sqNum")) { + svcTrkInst->sqNum = da; + } + else if (!strcmp(da->name, "trgOps")) { + svcTrkInst->trgOps = da; + } + else if (!strcmp(da->name, "intgPd")) { + svcTrkInst->intgPd = da; + } + else if (!strcmp(da->name, "gi")) { + svcTrkInst->gi = da; + } + else if (!strcmp(da->name, "purgeBuf")) { + svcTrkInst->purgeBuf = da; + } + else if (!strcmp(da->name, "entryID")) { + svcTrkInst->entryID = da; + } + else if (!strcmp(da->name, "timeOfEntry")) { + svcTrkInst->timeOfEntry = da; + } + else if (!strcmp(da->name, "resvTms")) { + svcTrkInst->resvTms = da; + } + } + + modelNode = modelNode->sibling; + } + + /* check if all mandatory attributes are present */ + if (svcTrkInst->rptID && svcTrkInst->rptEna && svcTrkInst->datSet && svcTrkInst->confRev && + svcTrkInst->optFlds && svcTrkInst->bufTm && svcTrkInst->sqNum && svcTrkInst->trgOps && + svcTrkInst->intgPd && svcTrkInst->gi && svcTrkInst->purgeBuf && svcTrkInst->entryID && + svcTrkInst->timeOfEntry) { + + } + else { + if (DEBUG_IED_SERVER) + printf("IED_SERVER: required attribute missing in brcbTrk service tracking object %s\n",trkObj->name); + } +} + +static void +getUrcbTrackingAttributes(UrcbTrkInstance svcTrkInst, DataObject* trkObj) +{ + ModelNode* modelNode = trkObj->firstChild; + + while (modelNode) { + if (modelNode->modelType == DataAttributeModelType) { + DataAttribute* da = (DataAttribute*) modelNode; + + if (!strcmp(da->name, "rptID")) { + svcTrkInst->rptID = da; + } + else if (!strcmp(da->name, "rptEna")) { + svcTrkInst->rptEna = da; + } + else if (!strcmp(da->name, "resv")) { + svcTrkInst->resv = da; + } + else if (!strcmp(da->name, "datSet")) { + svcTrkInst->datSet = da; + } + else if (!strcmp(da->name, "confRev")) { + svcTrkInst->confRev = da; + } + else if (!strcmp(da->name, "optFlds")) { + svcTrkInst->optFlds = da; + } + else if (!strcmp(da->name, "bufTm")) { + svcTrkInst->bufTm = da; + } + else if (!strcmp(da->name, "sqNum")) { + svcTrkInst->sqNum = da; + } + else if (!strcmp(da->name, "trgOps")) { + svcTrkInst->trgOps = da; + } + else if (!strcmp(da->name, "intgPd")) { + svcTrkInst->intgPd = da; + } + else if (!strcmp(da->name, "gi")) { + svcTrkInst->gi = da; + } + } + + modelNode = modelNode->sibling; + } + + /* check if all mandatory attributes are present */ + if (svcTrkInst->rptID && svcTrkInst->rptEna && svcTrkInst->datSet && svcTrkInst->confRev && + svcTrkInst->optFlds && svcTrkInst->bufTm && svcTrkInst->sqNum && svcTrkInst->trgOps && + svcTrkInst->intgPd && svcTrkInst->gi && svcTrkInst->resv) { + + } + else { + if (DEBUG_IED_SERVER) + printf("IED_SERVER: required attribute missing in urcbTrk service tracking object %s\n",trkObj->name); + } +} + +static void +checkForServiceTrackingVariables(MmsMapping* self, LogicalNode* logicalNode) +{ + ModelNode* modelNode = logicalNode->firstChild; + + while (modelNode) { + + if (!strcmp(modelNode->name, "SpcTrk")) { + if (DEBUG_IED_SERVER) + printf("SpcTrk data object found!\n"); + + } + else if (!strcmp(modelNode->name, "BrcbTrk")) { + if (DEBUG_IED_SERVER) + printf("BrcbTrk data object found!\n"); + + DataObject* brcbTrk = (DataObject*) modelNode; + + if (self->brcbTrk) { + if (DEBUG_IED_SERVER) + printf("IED_SERVER: ERROR: multiple BrcbTrk instances found in server\n"); + } + else { + /* Setup BrcbTrk references */ + self->brcbTrk = (BrcbTrkInstance) GLOBAL_CALLOC(1, sizeof(struct sBrcbTrkInstance)); + + if (self->brcbTrk) { + self->brcbTrk->dobj = brcbTrk; + + getCommonTrackingAttributes((ServiceTrkInstance) self->brcbTrk, brcbTrk); + getBrcbTrackingAttributes(self->brcbTrk, brcbTrk); + } + + } + + } + else if (!strcmp(modelNode->name, "UrcbTrk")) { + if (DEBUG_IED_SERVER) + printf("UrcbTrk data object found!\n"); + + DataObject* urcbTrk = (DataObject*) modelNode; + + if (self->urcbTrk) { + if (DEBUG_IED_SERVER) + printf("IED_SERVER: ERROR: multiple UrcbTrk instances found in server\n"); + } + else { + /* Setup BrcbTrk references */ + self->urcbTrk = (UrcbTrkInstance) GLOBAL_CALLOC(1, sizeof(struct sUrcbTrkInstance)); + + if (self->urcbTrk) { + self->urcbTrk->dobj = urcbTrk; + + getCommonTrackingAttributes((ServiceTrkInstance) self->urcbTrk, urcbTrk); + getUrcbTrackingAttributes(self->urcbTrk, urcbTrk); + } + + } + } + + modelNode = modelNode->sibling; + } + +} + +#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */ static MmsVariableSpecification* createNamedVariableFromLogicalNode(MmsMapping* self, MmsDomain* domain, @@ -1103,6 +1338,20 @@ createNamedVariableFromLogicalNode(MmsMapping* self, MmsDomain* domain, if (LogicalNode_hasFCData(logicalNode, IEC61850_FC_SR)) { namedVariable->typeSpec.structure.elements[currentComponent] = createFCNamedVariable(logicalNode, IEC61850_FC_SR); + +#if (CONFIG_IEC61850_SERVICE_TRACKING == 1) + + if (DEBUG_IED_SERVER) + printf("Service tracking elements detected\n"); + + /* TODO set flag to enable service tracking */ + MmsVariableSpecification* trackingVariables = namedVariable->typeSpec.structure.elements[currentComponent]; + + checkForServiceTrackingVariables(self, logicalNode); + +#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */ + + currentComponent++; } @@ -2339,7 +2588,7 @@ mmsReadHandler(void* parameter, MmsDomain* domain, char* variableId, MmsServerCo char* elementName = MmsMapping_getNextNameElement(reportName); - ReportControl_readAccess(rc, elementName); + ReportControl_readAccess(rc, self, elementName); MmsValue* value = NULL; diff --git a/src/iec61850/server/mms_mapping/reporting.c b/src/iec61850/server/mms_mapping/reporting.c index 8981ef23..b767844a 100644 --- a/src/iec61850/server/mms_mapping/reporting.c +++ b/src/iec61850/server/mms_mapping/reporting.c @@ -308,6 +308,257 @@ ReportControl_getRCBValue(ReportControl* rc, char* elementName) return NULL ; } +#if (CONFIG_IEC61850_SERVICE_TRACKING == 1) + +static void +copyRCBValuesToTrackingObject(MmsMapping* self, ReportControl* rc) +{ + if (rc->buffered) { + if (self->brcbTrk) { + BrcbTrkInstance trkInst = self->brcbTrk; + + if (trkInst->rptID) + MmsValue_update(trkInst->rptID->mmsValue, ReportControl_getRCBValue(rc, "RptID")); + + if (trkInst->rptEna) + MmsValue_update(trkInst->rptEna->mmsValue, ReportControl_getRCBValue(rc, "RptEna")); + + if (trkInst->datSet) + MmsValue_update(trkInst->datSet->mmsValue, ReportControl_getRCBValue(rc, "DatSet")); + + if (trkInst->confRev) + MmsValue_update(trkInst->confRev->mmsValue, ReportControl_getRCBValue(rc, "ConfRev")); + + if (trkInst->optFlds) + MmsValue_update(trkInst->optFlds->mmsValue, ReportControl_getRCBValue(rc, "OptFlds")); + + if (trkInst->bufTm) + MmsValue_update(trkInst->bufTm->mmsValue, ReportControl_getRCBValue(rc, "BufTm")); + + if (trkInst->sqNum) + MmsValue_update(trkInst->sqNum->mmsValue, ReportControl_getRCBValue(rc, "SqNum")); + + if (trkInst->trgOps) + MmsValue_update(trkInst->trgOps->mmsValue, ReportControl_getRCBValue(rc, "TrgOps")); + + if (trkInst->intgPd) + MmsValue_update(trkInst->intgPd->mmsValue, ReportControl_getRCBValue(rc, "IntgPd")); + + if (trkInst->gi) + MmsValue_update(trkInst->gi->mmsValue, ReportControl_getRCBValue(rc, "GI")); + + if (trkInst->purgeBuf) + MmsValue_update(trkInst->purgeBuf->mmsValue, ReportControl_getRCBValue(rc, "PurgeBuf")); + + if (trkInst->entryID) + MmsValue_update(trkInst->entryID->mmsValue, ReportControl_getRCBValue(rc, "EntryID")); + + if (trkInst->timeOfEntry) { + MmsValue* timeofEntryValue = ReportControl_getRCBValue(rc, "TimeofEntry"); + + if (timeofEntryValue) + MmsValue_update(trkInst->timeOfEntry->mmsValue, timeofEntryValue); + } + + + if (trkInst->resvTms) { + MmsValue* resvTmsValue = ReportControl_getRCBValue(rc, "ResvTms"); + + if (resvTmsValue) + MmsValue_update(trkInst->resvTms->mmsValue, resvTmsValue); + } + } + } + else { + if (self->urcbTrk) { + UrcbTrkInstance trkInst = self->urcbTrk; + + if (trkInst->rptID) + MmsValue_update(trkInst->rptID->mmsValue, ReportControl_getRCBValue(rc, "RptID")); + + if (trkInst->rptEna) + MmsValue_update(trkInst->rptEna->mmsValue, ReportControl_getRCBValue(rc, "RptEna")); + + if (trkInst->resv) + MmsValue_update(trkInst->rptEna->mmsValue, ReportControl_getRCBValue(rc, "Resv")); + + if (trkInst->datSet) + MmsValue_update(trkInst->datSet->mmsValue, ReportControl_getRCBValue(rc, "DatSet")); + + if (trkInst->confRev) + MmsValue_update(trkInst->confRev->mmsValue, ReportControl_getRCBValue(rc, "ConfRev")); + + if (trkInst->optFlds) + MmsValue_update(trkInst->optFlds->mmsValue, ReportControl_getRCBValue(rc, "OptFlds")); + + if (trkInst->bufTm) + MmsValue_update(trkInst->bufTm->mmsValue, ReportControl_getRCBValue(rc, "BufTm")); + + if (trkInst->sqNum) + MmsValue_update(trkInst->sqNum->mmsValue, ReportControl_getRCBValue(rc, "SqNum")); + + if (trkInst->trgOps) + MmsValue_update(trkInst->trgOps->mmsValue, ReportControl_getRCBValue(rc, "TrgOps")); + + if (trkInst->intgPd) + MmsValue_update(trkInst->intgPd->mmsValue, ReportControl_getRCBValue(rc, "IntgPd")); + + if (trkInst->gi) + MmsValue_update(trkInst->gi->mmsValue, ReportControl_getRCBValue(rc, "GI")); + } + } +} + +static void +updateSingleTrackingValue(MmsMapping* self, ReportControl* rc, char* name, MmsValue* newValue) +{ + if (rc->buffered) { + if (self->brcbTrk) { + BrcbTrkInstance trkInst = self->brcbTrk; + + DataAttribute* attributeToUpdate = NULL; + + if (!strcmp(name, "RptID")) + attributeToUpdate = trkInst->rptID; + else if (!strcmp(name, "RptEna")) + attributeToUpdate = trkInst->rptEna; + else if (!strcmp(name, "DatSet")) + attributeToUpdate = trkInst->datSet; + else if (!strcmp(name, "ConfRev")) + attributeToUpdate = trkInst->confRev; + else if (!strcmp(name, "OptFlds")) + attributeToUpdate = trkInst->optFlds; + else if (!strcmp(name, "BufTm")) + attributeToUpdate = trkInst->bufTm; + else if (!strcmp(name, "SqNum")) + attributeToUpdate = trkInst->sqNum; + else if (!strcmp(name, "TrgOps")) + attributeToUpdate = trkInst->trgOps; + else if (!strcmp(name, "IntgPd")) + attributeToUpdate = trkInst->intgPd; + else if (!strcmp(name, "GI")) + attributeToUpdate = trkInst->gi; + else if (!strcmp(name, "PurgeBuf")) + attributeToUpdate = trkInst->purgeBuf; + else if (!strcmp(name, "TimeofEntry")) + attributeToUpdate = trkInst->timeOfEntry; + else if (!strcmp(name, "EntryID")) + attributeToUpdate = trkInst->entryID; + else if (!strcmp(name, "ResvTms")) + attributeToUpdate = trkInst->resvTms; + + if (attributeToUpdate) + MmsValue_update(attributeToUpdate->mmsValue, newValue); + } + } + else { + if (self->urcbTrk) { + UrcbTrkInstance trkInst = self->urcbTrk; + + DataAttribute* attributeToUpdate = NULL; + + if (!strcmp(name, "RptID")) + attributeToUpdate = trkInst->rptID; + else if (!strcmp(name, "RptEna")) + attributeToUpdate = trkInst->rptEna; + else if (!strcmp(name, "Resv")) + attributeToUpdate = trkInst->resv; + else if (!strcmp(name, "DatSet")) + attributeToUpdate = trkInst->datSet; + else if (!strcmp(name, "ConfRev")) + attributeToUpdate = trkInst->confRev; + else if (!strcmp(name, "OptFlds")) + attributeToUpdate = trkInst->optFlds; + else if (!strcmp(name, "BufTm")) + attributeToUpdate = trkInst->bufTm; + else if (!strcmp(name, "SqNum")) + attributeToUpdate = trkInst->sqNum; + else if (!strcmp(name, "TrgOps")) + attributeToUpdate = trkInst->trgOps; + else if (!strcmp(name, "IntgPd")) + attributeToUpdate = trkInst->intgPd; + else if (!strcmp(name, "GI")) + attributeToUpdate = trkInst->gi; + + if (attributeToUpdate) + MmsValue_update(attributeToUpdate->mmsValue, newValue); + } + } +} + +static IEC61850_ServiceError +convertMmsDataAccessErrorToServiceError(MmsDataAccessError mmsError) +{ + IEC61850_ServiceError errVal = IEC61850_SERVICE_ERROR_NO_ERROR; + + switch (mmsError) { + case DATA_ACCESS_ERROR_SUCCESS: + break; + case DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE: + errVal = IEC61850_SERVICE_ERROR_INSTANCE_LOCKED_BY_OTHER_CLIENT; + break; + case DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED: + errVal = IEC61850_SERVICE_ERROR_ACCESS_VIOLATION; + break; + case DATA_ACCESS_ERROR_TYPE_INCONSISTENT: + errVal = IEC61850_SERVICE_ERROR_PARAMETER_VALUE_INCONSISTENT; + break; + case DATA_ACCESS_ERROR_OBJECT_NONE_EXISTENT: + errVal = IEC61850_SERVICE_ERROR_INSTANCE_NOT_AVAILABLE; + break; + default: + printf("Data access error %i not mapped!\n", mmsError); + errVal = IEC61850_SERVICE_ERROR_FAILED_DUE_TO_SERVER_CONSTRAINT; + break; + } + + return errVal; +} + +static void +updateGenericTrackingObjectValues(MmsMapping* self, ReportControl* rc, IEC61850_ServiceType serviceType, MmsDataAccessError errVal) +{ + ServiceTrkInstance trkInst = NULL; + + if (rc->buffered) { + if (self->brcbTrk) { + trkInst = (ServiceTrkInstance) self->brcbTrk; + } + } + else { + if (self->urcbTrk) { + trkInst = (ServiceTrkInstance) self->urcbTrk; + } + } + + if (trkInst) { + if (trkInst->serviceType) + MmsValue_setInt32(trkInst->serviceType->mmsValue, (int) serviceType); + + if (trkInst->t) + MmsValue_setUtcTimeMs(trkInst->t->mmsValue, Hal_getTimeInMs()); + + if (trkInst->errorCode) + MmsValue_setInt32(trkInst->errorCode->mmsValue, convertMmsDataAccessErrorToServiceError(errVal)); + + char objRef[129]; + + /* create object reference */ + LogicalNode* ln = (LogicalNode*) rc->parentLN; + LogicalDevice* ld = (LogicalDevice*) ln->parent; + + char* iedName = self->iedServer->mmsDevice->deviceName; + + snprintf(objRef, 129, "%s%s/%s", iedName, ld->name, rc->name); + + if (trkInst->objRef) { + IedServer_updateVisibleStringAttributeValue(self->iedServer, trkInst->objRef, objRef); + } + } +} + +#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */ + static inline void clearInclusionFlags(ReportControl* reportControl) { @@ -1233,8 +1484,10 @@ increaseConfRev(ReportControl* self) MmsValue_setUint32(self->confRev, confRev); } + + static void -checkReservationTimeout(ReportControl* rc) +checkReservationTimeout(MmsMapping* self, ReportControl* rc) { if (rc->enabled == false) { if (rc->resvTms > 0) { @@ -1250,17 +1503,22 @@ checkReservationTimeout(ReportControl* rc) rc->reservationTimeout = 0; updateOwner(rc, NULL); rc->reserved = false; + +#if (CONFIG_IEC61850_SERVICE_TRACKING == 1) + copyRCBValuesToTrackingObject(self, rc); + updateGenericTrackingObjectValues(self, rc, IEC61850_SERVICE_TYPE_INTERNAL_CHANGE, DATA_ACCESS_ERROR_SUCCESS); +#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */ } } } } void -ReportControl_readAccess(ReportControl* rc, char* elementName) +ReportControl_readAccess(ReportControl* rc, MmsMapping* mmsMapping, char* elementName) { /* check reservation timeout */ if (rc->buffered) { - checkReservationTimeout(rc); + checkReservationTimeout(mmsMapping, rc); } } @@ -1323,7 +1581,7 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme /* check reservation timeout for buffered RCBs */ if (rc->buffered) { - checkReservationTimeout(rc); + checkReservationTimeout(self, rc); if (rc->resvTms == 0) { /* nothing to to */ @@ -1690,8 +1948,21 @@ exit_function: } } +#if (CONFIG_IEC61850_SERVICE_TRACKING == 1) + + copyRCBValuesToTrackingObject(self, rc); + updateSingleTrackingValue(self, rc, elementName, value); + +#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */ + ReportControl_unlockNotify(rc); +#if (CONFIG_IEC61850_SERVICE_TRACKING == 1) + + updateGenericTrackingObjectValues(self, rc, IEC61850_SERVICE_TYPE_SET_BRCB_VALUES, retVal); + +#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */ + return retVal; } @@ -1731,6 +2002,11 @@ Reporting_deactivateReportsForConnection(MmsMapping* self, MmsServerConnection c rc->reservationTimeout = Hal_getTimeInMs() + (rc->resvTms * 1000); } } + +#if (CONFIG_IEC61850_SERVICE_TRACKING == 1) + copyRCBValuesToTrackingObject(self, rc); + updateGenericTrackingObjectValues(self, rc, IEC61850_SERVICE_TYPE_INTERNAL_CHANGE, DATA_ACCESS_ERROR_SUCCESS); +#endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */ } } }