diff --git a/examples/server_example_basic_io/CMakeLists.txt b/examples/server_example_basic_io/CMakeLists.txt new file mode 100644 index 0000000..6ff774a --- /dev/null +++ b/examples/server_example_basic_io/CMakeLists.txt @@ -0,0 +1,21 @@ +include_directories( + . +) + +set(server_example_SRCS + server_example_basic_io.c + static_model.c +) + +IF(WIN32) +set_source_files_properties(${server_example_SRCS} + PROPERTIES LANGUAGE CXX) +ENDIF(WIN32) + +add_executable(server_example_basic_io + ${server_example_SRCS} +) + +target_link_libraries(server_example_basic_io + iec61850 +) diff --git a/examples/server_example_basic_io/Makefile b/examples/server_example_basic_io/Makefile new file mode 100644 index 0000000..4e4e595 --- /dev/null +++ b/examples/server_example_basic_io/Makefile @@ -0,0 +1,31 @@ +LIBIEC_HOME=../.. + +PROJECT_BINARY_NAME = server_example_basic_io +PROJECT_SOURCES = server_example_basic_io.c +PROJECT_SOURCES += static_model.c + +PROJECT_ICD_FILE = simpleIO_direct_control.icd + +include $(LIBIEC_HOME)/make/target_system.mk +include $(LIBIEC_HOME)/make/stack_includes.mk + +all: $(PROJECT_BINARY_NAME) + +include $(LIBIEC_HOME)/make/common_targets.mk + +LDLIBS += -lm + +CP = cp + +model: $(PROJECT_ICD_FILE) + java -jar $(LIBIEC_HOME)/tools/model_generator/genmodel.jar $(PROJECT_ICD_FILE) + +$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME) + $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS) + $(CP) $(PROJECT_BINARY_NAME) vmd-filestore/IEDSERVER.BIN + +clean: + rm -f $(PROJECT_BINARY_NAME) + rm -f vmd-filestore/IEDSERVER.BIN + + diff --git a/examples/server_example_basic_io/server_example_basic_io.c b/examples/server_example_basic_io/server_example_basic_io.c new file mode 100644 index 0000000..30faf6e --- /dev/null +++ b/examples/server_example_basic_io/server_example_basic_io.c @@ -0,0 +1,171 @@ +/* + * server_example_basic_io.c + * + * - How to use simple control models + * - How to serve analog measurement data + */ + +#include "iec61850_server.h" +#include "hal_thread.h" +#include +#include +#include +#include + +#include "../server_example_basic_io/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(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()); + + iedServer = IedServer_create(&iedModel); + + /* Set the base path for the MMS file services */ + MmsServer mmsServer = IedServer_getMmsServer(iedServer); + MmsServer_setFilestoreBasepath(mmsServer, "./vmd-filestore/"); + + /* 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 to client connections. */ + IedServer_start(iedServer, 102); + + if (!IedServer_isRunning(iedServer)) { + printf("Starting server failed! 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); + + IedServer_lockDataModel(iedServer); + + 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_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_basic_io/simpleIO_direct_control.icd b/examples/server_example_basic_io/simpleIO_direct_control.icd new file mode 100644 index 0000000..0a0c635 --- /dev/null +++ b/examples/server_example_basic_io/simpleIO_direct_control.icd @@ -0,0 +1,281 @@ + + +
+
+ + + Station bus + 10 + +
+

10.0.0.2

+

255.255.255.0

+

10.0.0.1

+

0001

+

00000001

+

0001

+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + MZ Automation + + + 0.7.3 + + + libiec61850 server example + + + + + + + + status-only + + + + + direct-with-normal-security + + + + + direct-with-normal-security + + + + + direct-with-normal-security + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + +
diff --git a/examples/server_example_basic_io/simpleIO_sbo_control.icd b/examples/server_example_basic_io/simpleIO_sbo_control.icd new file mode 100644 index 0000000..5f65ff6 --- /dev/null +++ b/examples/server_example_basic_io/simpleIO_sbo_control.icd @@ -0,0 +1,287 @@ + + +
+
+ + + Station bus + 10 + +
+

10.0.0.2

+

255.255.255.0

+

10.0.0.1

+

0001

+

00000001

+

0001

+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + status-only + + + + + sbo-with-normal-security + + + 30000 + + + operate-once + + + + + sbo-with-normal-security + + + 30000 + + + operate-once + + + + + sbo-with-normal-security + + + 30000 + + + operate-once + + + + + sbo-with-normal-security + + + 30000 + + + operate-once + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + + operate-once + operate-many + + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
diff --git a/examples/server_example_basic_io/static_model.c b/examples/server_example_basic_io/static_model.c new file mode 100644 index 0000000..ddc8dd6 --- /dev/null +++ b/examples/server_example_basic_io/static_model.c @@ -0,0 +1,2003 @@ +/* + * static_model.c + * + * automatically generated from simpleIO_direct_control.icd + */ +#include "../server_example_basic_io/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 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, + 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_INT32, + 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_INT32, + 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_INT32, + 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_INT32, + 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, + NULL, + (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_q, + 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_INT32, + 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_INT32, + 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_stVal, + 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_Oper, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper = { + DataAttributeModelType, + "Oper", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_ctlModel, + (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}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_t, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 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}; + +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; + +ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events1", false, "Events", 4294967295, 24, 239, 50, 1000, &iedModel_GenericIO_LLN0_report1}; +ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "EventsIndexed01", "Events2", false, "Events", 1, 24, 239, 50, 1000, &iedModel_GenericIO_LLN0_report2}; +ReportControlBlock iedModel_GenericIO_LLN0_report2 = {&iedModel_GenericIO_LLN0, "EventsIndexed02", "Events2", false, "Events", 1, 24, 239, 50, 1000, &iedModel_GenericIO_LLN0_report3}; +ReportControlBlock iedModel_GenericIO_LLN0_report3 = {&iedModel_GenericIO_LLN0, "EventsIndexed03", "Events2", false, "Events", 1, 24, 239, 50, 1000, &iedModel_GenericIO_LLN0_report4}; +ReportControlBlock iedModel_GenericIO_LLN0_report4 = {&iedModel_GenericIO_LLN0, "Measurements01", "Measurements", true, "Measurements", 1, 16, 239, 50, 1000, &iedModel_GenericIO_LLN0_report5}; +ReportControlBlock iedModel_GenericIO_LLN0_report5 = {&iedModel_GenericIO_LLN0, "Measurements02", "Measurements", true, "Measurements", 1, 16, 239, 50, 1000, &iedModel_GenericIO_LLN0_report6}; +ReportControlBlock iedModel_GenericIO_LLN0_report6 = {&iedModel_GenericIO_LLN0, "Measurements03", "Measurements", true, "Measurements", 1, 16, 239, 50, 1000, NULL}; + + + + +extern LogControlBlock iedModel_GenericIO_LLN0_lcb0; +extern LogControlBlock iedModel_GenericIO_LLN0_lcb1; +LogControlBlock iedModel_GenericIO_LLN0_lcb0 = {&iedModel_GenericIO_LLN0, "EventLog", "Events", "GenericIO/LLN0$EventLog", 3, 0, true, true, &iedModel_GenericIO_LLN0_lcb1}; +LogControlBlock iedModel_GenericIO_LLN0_lcb1 = {&iedModel_GenericIO_LLN0, "GeneralLog", NULL, NULL, 3, 0, true, true, NULL}; + +extern Log iedModel_GenericIO_LLN0_log0; +extern Log iedModel_GenericIO_LLN0_log1; +Log iedModel_GenericIO_LLN0_log0 = {&iedModel_GenericIO_LLN0, "GeneralLog", &iedModel_GenericIO_LLN0_log1}; +Log iedModel_GenericIO_LLN0_log1 = {&iedModel_GenericIO_LLN0, "EventLog", NULL}; + + +IedModel iedModel = { + "simpleIO", + &iedModel_GenericIO, + &iedModelds_GenericIO_LLN0_Events, + &iedModel_GenericIO_LLN0_report0, + NULL, + NULL, + NULL, + &iedModel_GenericIO_LLN0_lcb0, + &iedModel_GenericIO_LLN0_log0, + initializeValues +}; + +static void +initializeValues() +{ + +iedModel_GenericIO_LLN0_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_GenericIO_LLN0_NamPlt_vendor.mmsValue = MmsValue_newVisibleString("MZ Automation"); + +iedModel_GenericIO_LLN0_NamPlt_swRev.mmsValue = MmsValue_newVisibleString("0.7.3"); + +iedModel_GenericIO_LLN0_NamPlt_d.mmsValue = MmsValue_newVisibleString("libiec61850 server example"); + +iedModel_GenericIO_GGIO1_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +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_basic_io/static_model.h b/examples/server_example_basic_io/static_model.h new file mode 100644 index 0000000..b5670e9 --- /dev/null +++ b/examples/server_example_basic_io/static_model.h @@ -0,0 +1,301 @@ +/* + * static_model.h + * + * automatically generated from simpleIO_direct_control.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_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_stVal; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_q; +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 DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t; +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; + + + +#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_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_stVal (&iedModel_GenericIO_GGIO1_SPCSO1_stVal) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_q (&iedModel_GenericIO_GGIO1_SPCSO1_q) +#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_SPCSO1_ctlModel (&iedModel_GenericIO_GGIO1_SPCSO1_ctlModel) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_t (&iedModel_GenericIO_GGIO1_SPCSO1_t) +#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) + +#endif /* STATIC_MODEL_H_ */ + diff --git a/examples/server_example_password_auth/CMakeLists.txt b/examples/server_example_password_auth/CMakeLists.txt new file mode 100644 index 0000000..db7376d --- /dev/null +++ b/examples/server_example_password_auth/CMakeLists.txt @@ -0,0 +1,21 @@ +include_directories( + . +) + +set(server_example_SRCS + server_example_password_auth.c + static_model.c +) + +IF(WIN32) +set_source_files_properties(${server_example_SRCS} + PROPERTIES LANGUAGE CXX) +ENDIF(WIN32) + +add_executable(server_example_password_auth + ${server_example_SRCS} +) + +target_link_libraries(server_example_password_auth + iec61850 +) diff --git a/examples/server_example_password_auth/Makefile b/examples/server_example_password_auth/Makefile new file mode 100644 index 0000000..62a9258 --- /dev/null +++ b/examples/server_example_password_auth/Makefile @@ -0,0 +1,25 @@ +LIBIEC_HOME=../.. + +PROJECT_BINARY_NAME = server_example_password_auth +PROJECT_SOURCES = server_example_password_auth.c +PROJECT_SOURCES += static_model.c + +PROJECT_ICD_FILE = simpleIO_direct_control.icd + +include $(LIBIEC_HOME)/make/target_system.mk +include $(LIBIEC_HOME)/make/stack_includes.mk + +all: $(PROJECT_BINARY_NAME) + +include $(LIBIEC_HOME)/make/common_targets.mk + +model: $(PROJECT_ICD_FILE) + java -jar $(LIBIEC_HOME)/tools/model_generator/genmodel.jar $(PROJECT_ICD_FILE) + +$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME) + $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS) + +clean: + rm -f $(PROJECT_BINARY_NAME) + + diff --git a/examples/server_example_password_auth/server_example_password_auth.c b/examples/server_example_password_auth/server_example_password_auth.c new file mode 100644 index 0000000..6c6661c --- /dev/null +++ b/examples/server_example_password_auth/server_example_password_auth.c @@ -0,0 +1,157 @@ +/* + * server_example_password_auth.c + * + * Example server application with password authentication. + * + * - How to use a authenticator with password authentication + * - How to distinguish between different clients for control actions and set points + * + * The server accepts only connections by clients using one of the two passwords: + * + * user1@testpw + * user2@testpw + * + * Only clients using the second password are allowed to perform control actions. + */ + +#include "iec61850_server.h" +#include "hal_thread.h" +#include +#include +#include +#include "../server_example_password_auth/static_model.h" + +/* import IEC 61850 device model created from SCL-File */ +extern IedModel iedModel; + +static int running = 0; + +static IedServer iedServer; + +void sigint_handler(int signalId) +{ + running = 0; +} + +/* password "database" */ +static char* password1 = "user1@testpw"; +static char* password2 = "user2@testpw"; + +/** + * This is the AcseAuthenticator callback function that is invoked on each client connection attempt. + * When returning true the server stack accepts the client. Otherwise the connection is rejected. + */ +static bool +clientAuthenticator(void* parameter, AcseAuthenticationParameter authParameter, void** securityToken) +{ + if (authParameter->mechanism == ACSE_AUTH_PASSWORD) { + if (authParameter->value.password.passwordLength == strlen(password1)) { + if (memcmp(authParameter->value.password.octetString, password1, + authParameter->value.password.passwordLength) == 0) + { + *securityToken = (void*) password1; + return true; + } + + } + if (authParameter->value.password.passwordLength == strlen(password2)) { + if (memcmp(authParameter->value.password.octetString, password2, + authParameter->value.password.passwordLength) == 0) + { + *securityToken = (void*) password2; + return true; + } + } + } + + return false; +} + +static CheckHandlerResult +performCheckHandler (void* parameter, MmsValue* ctlVal, bool test, bool interlockCheck, ClientConnection connection) +{ + void* securityToken = ClientConnection_getSecurityToken(connection); + + if (securityToken == password2) + return CONTROL_ACCEPTED; + else + return CONTROL_OBJECT_ACCESS_DENIED; +} + +static void +controlHandlerForBinaryOutput(void* parameter, MmsValue* value, bool test) +{ + MmsValue* timeStamp = MmsValue_newUtcTimeByMsTime(Hal_getTimeInMs()); + + if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO1) { + IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_t, timeStamp); + IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1_stVal, value); + } + + if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO2) { + IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_t, timeStamp); + IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2_stVal, value); + } + + if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO3) { + IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_t, timeStamp); + IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3_stVal, value); + } + + if (parameter == IEDMODEL_GenericIO_GGIO1_SPCSO4) { + IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_t, timeStamp); + IedServer_updateAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4_stVal, value); + } + + MmsValue_delete(timeStamp); +} + +int main(int argc, char** argv) { + + iedServer = IedServer_create(&iedModel); + + /* Activate authentication */ + IedServer_setAuthenticator(iedServer, clientAuthenticator, NULL); + + /* Set handler for control permission check for each control object */ + IedServer_setPerformCheckHandler(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1, + (ControlPerformCheckHandler) performCheckHandler, NULL); + IedServer_setPerformCheckHandler(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO2, + (ControlPerformCheckHandler) performCheckHandler, NULL); + IedServer_setPerformCheckHandler(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO3, + (ControlPerformCheckHandler) performCheckHandler, NULL); + IedServer_setPerformCheckHandler(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4, + (ControlPerformCheckHandler) performCheckHandler, NULL); + + /* Set control handler for each control object */ + 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); + + /* MMS server will be instructed to start listening to client connections. */ + IedServer_start(iedServer, 102); + + if (!IedServer_isRunning(iedServer)) { + printf("Starting server failed! Exit.\n"); + IedServer_destroy(iedServer); + exit(-1); + } + + running = 1; + + signal(SIGINT, sigint_handler); + + while (running) + 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_password_auth/simpleIO_direct_control.icd b/examples/server_example_password_auth/simpleIO_direct_control.icd new file mode 100644 index 0000000..3081dff --- /dev/null +++ b/examples/server_example_password_auth/simpleIO_direct_control.icd @@ -0,0 +1,223 @@ + + +
+
+ + + Station bus + 10 + +
+

10.0.0.2

+

255.255.255.0

+

10.0.0.1

+

0001

+

00000001

+

0001

+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + status-only + + + + + direct-with-normal-security + + + + + direct-with-normal-security + + + + + direct-with-normal-security + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + +
diff --git a/examples/server_example_password_auth/static_model.c b/examples/server_example_password_auth/static_model.c new file mode 100644 index 0000000..1db7d77 --- /dev/null +++ b/examples/server_example_password_auth/static_model.c @@ -0,0 +1,1812 @@ +/* + * static_model.c + * + * automatically generated from simpleIO_direct_control.icd + */ +#include "../server_example_password_auth/static_model.h" + +static void initializeValues(); + +extern DataSet iedModelds_GenericIO_LLN0_Events; + + +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, + 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_q, + 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_INT32, + 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_INT32, + 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_INT32, + 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, + NULL, + (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_q, + 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_INT32, + 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_INT32, + 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_stVal, + 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_Oper, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper = { + DataAttributeModelType, + "Oper", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_ctlModel, + (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}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_t, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 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}; + +extern ReportControlBlock iedModel_GenericIO_LLN0_report0; + +ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events", false, "Events", 1, 24, 111, 50, 1000, 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_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_GenericIO_GGIO1_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +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_password_auth/static_model.h b/examples/server_example_password_auth/static_model.h new file mode 100644 index 0000000..58dd28b --- /dev/null +++ b/examples/server_example_password_auth/static_model.h @@ -0,0 +1,299 @@ +/* + * static_model.h + * + * automatically generated from simpleIO_direct_control.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_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_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_stVal; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_q; +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 DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel; +extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t; +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; + + + +#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_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_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_stVal (&iedModel_GenericIO_GGIO1_SPCSO1_stVal) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_q (&iedModel_GenericIO_GGIO1_SPCSO1_q) +#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_SPCSO1_ctlModel (&iedModel_GenericIO_GGIO1_SPCSO1_ctlModel) +#define IEDMODEL_GenericIO_GGIO1_SPCSO1_t (&iedModel_GenericIO_GGIO1_SPCSO1_t) +#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) + +#endif /* STATIC_MODEL_H_ */ + diff --git a/examples/server_example_simple/CMakeLists.txt b/examples/server_example_simple/CMakeLists.txt new file mode 100644 index 0000000..f7884c9 --- /dev/null +++ b/examples/server_example_simple/CMakeLists.txt @@ -0,0 +1,21 @@ +include_directories( + . +) + +set(server_example_SRCS + server_example_simple.c + static_model.c +) + +IF(WIN32) +set_source_files_properties(${server_example_SRCS} + PROPERTIES LANGUAGE CXX) +ENDIF(WIN32) + +add_executable(server_example_simple + ${server_example_SRCS} +) + +target_link_libraries(server_example_simple + iec61850 +) diff --git a/examples/server_example_simple/Makefile b/examples/server_example_simple/Makefile new file mode 100644 index 0000000..4d9c741 --- /dev/null +++ b/examples/server_example_simple/Makefile @@ -0,0 +1,25 @@ +LIBIEC_HOME=../.. + +PROJECT_BINARY_NAME = server_example_simple +PROJECT_SOURCES = server_example_simple.c +PROJECT_SOURCES += static_model.c + +PROJECT_ICD_FILE = sampleModel_with_dataset.icd + +include $(LIBIEC_HOME)/make/target_system.mk +include $(LIBIEC_HOME)/make/stack_includes.mk + +all: $(PROJECT_BINARY_NAME) + +include $(LIBIEC_HOME)/make/common_targets.mk + +model: $(PROJECT_ICD_FILE) + java -jar $(LIBIEC_HOME)/tools/model_generator/genmodel.jar $(PROJECT_ICD_FILE) + +$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME) + $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS) + +clean: + rm -f $(PROJECT_BINARY_NAME) + + diff --git a/examples/server_example_simple/sampleModel_with_dataset.icd b/examples/server_example_simple/sampleModel_with_dataset.icd new file mode 100644 index 0000000..9b2c0fc --- /dev/null +++ b/examples/server_example_simple/sampleModel_with_dataset.icd @@ -0,0 +1,184 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + status-only + + + + + + + status-only + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + diff --git a/examples/server_example_simple/server_example_simple.c b/examples/server_example_simple/server_example_simple.c new file mode 100644 index 0000000..f531e57 --- /dev/null +++ b/examples/server_example_simple/server_example_simple.c @@ -0,0 +1,76 @@ +/* + * server_example_simple.c + * + * Copyright 2013 Michael Zillgith + * + * This file is part of libIEC61850. + * + * libIEC61850 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * libIEC61850 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with libIEC61850. If not, see . + * + * See COPYING file for the complete license text. + */ + +#include "iec61850_server.h" +#include "hal_thread.h" +#include +#include +#include + +#include "../server_example_simple/static_model.h" + +/* import IEC 61850 device model created from SCL-File */ +extern IedModel iedModel; + +static int running = 0; + +void sigint_handler(int signalId) +{ + running = 0; +} + +int main(int argc, char** argv) { + + int tcpPort = 102; + + if (argc > 1) { + tcpPort = atoi(argv[1]); + } + + IedServer iedServer = IedServer_create(&iedModel); + + // set initial measurement and status values from process + + /* MMS server will be instructed to start listening to client connections. */ + IedServer_start(iedServer, tcpPort); + + if (!IedServer_isRunning(iedServer)) { + printf("Starting server failed! Exit.\n"); + IedServer_destroy(iedServer); + exit(-1); + } + + running = 1; + + signal(SIGINT, sigint_handler); + + while (running) { + Thread_sleep(1); + } + + /* 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_simple/static_model.c b/examples/server_example_simple/static_model.c new file mode 100644 index 0000000..922e1c2 --- /dev/null +++ b/examples/server_example_simple/static_model.c @@ -0,0 +1,1627 @@ +/* + * static_model.c + * + * automatically generated from sampleModel_with_dataset.icd + */ +#include "../server_example_simple/static_model.h" + +static void initializeValues(); + +extern DataSet iedModelds_Device1_LLN0_dataset1; + + +extern DataSetEntry iedModelds_Device1_LLN0_dataset1_fcda0; +extern DataSetEntry iedModelds_Device1_LLN0_dataset1_fcda1; +extern DataSetEntry iedModelds_Device1_LLN0_dataset1_fcda2; + +DataSetEntry iedModelds_Device1_LLN0_dataset1_fcda0 = { + "Device1", + false, + "LLN0$ST$Mod$q", + -1, + NULL, + NULL, + &iedModelds_Device1_LLN0_dataset1_fcda1 +}; + +DataSetEntry iedModelds_Device1_LLN0_dataset1_fcda1 = { + "Device1", + false, + "MMXU1$ST$Mod$q", + -1, + NULL, + NULL, + &iedModelds_Device1_LLN0_dataset1_fcda2 +}; + +DataSetEntry iedModelds_Device1_LLN0_dataset1_fcda2 = { + "Device1", + false, + "MMXU1$CF$Mod$ctlModel", + -1, + NULL, + NULL, + NULL +}; + +DataSet iedModelds_Device1_LLN0_dataset1 = { + "Device1", + "LLN0$dataset1", + 3, + &iedModelds_Device1_LLN0_dataset1_fcda0, + NULL +}; + +LogicalDevice iedModel_Device1 = { + LogicalDeviceModelType, + "Device1", + (ModelNode*) &iedModel, + NULL, + (ModelNode*) &iedModel_Device1_LLN0 +}; + +LogicalNode iedModel_Device1_LLN0 = { + LogicalNodeModelType, + "LLN0", + (ModelNode*) &iedModel_Device1, + (ModelNode*) &iedModel_Device1_LPHD1, + (ModelNode*) &iedModel_Device1_LLN0_Mod, +}; + +DataObject iedModel_Device1_LLN0_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_Device1_LLN0, + (ModelNode*) &iedModel_Device1_LLN0_Beh, + (ModelNode*) &iedModel_Device1_LLN0_Mod_q, + 0 +}; + +DataAttribute iedModel_Device1_LLN0_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_LLN0_Mod, + (ModelNode*) &iedModel_Device1_LLN0_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_LLN0_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_LLN0_Mod, + (ModelNode*) &iedModel_Device1_LLN0_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_LLN0_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_Device1_LLN0_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_LLN0_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_Device1_LLN0, + (ModelNode*) &iedModel_Device1_LLN0_Health, + (ModelNode*) &iedModel_Device1_LLN0_Beh_stVal, + 0 +}; + +DataAttribute iedModel_Device1_LLN0_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_LLN0_Beh, + (ModelNode*) &iedModel_Device1_LLN0_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_LLN0_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_LLN0_Beh, + (ModelNode*) &iedModel_Device1_LLN0_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_LLN0_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_LLN0_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_LLN0_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_Device1_LLN0, + (ModelNode*) &iedModel_Device1_LLN0_NamPlt, + (ModelNode*) &iedModel_Device1_LLN0_Health_stVal, + 0 +}; + +DataAttribute iedModel_Device1_LLN0_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_LLN0_Health, + (ModelNode*) &iedModel_Device1_LLN0_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_LLN0_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_LLN0_Health, + (ModelNode*) &iedModel_Device1_LLN0_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_LLN0_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_LLN0_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_LLN0_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_Device1_LLN0, + NULL, + (ModelNode*) &iedModel_Device1_LLN0_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_Device1_LLN0_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Device1_LLN0_NamPlt, + (ModelNode*) &iedModel_Device1_LLN0_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_LLN0_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_Device1_LLN0_NamPlt, + (ModelNode*) &iedModel_Device1_LLN0_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_LLN0_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_Device1_LLN0_NamPlt, + (ModelNode*) &iedModel_Device1_LLN0_NamPlt_configRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_LLN0_NamPlt_configRev = { + DataAttributeModelType, + "configRev", + (ModelNode*) &iedModel_Device1_LLN0_NamPlt, + (ModelNode*) &iedModel_Device1_LLN0_NamPlt_ldNs, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_LLN0_NamPlt_ldNs = { + DataAttributeModelType, + "ldNs", + (ModelNode*) &iedModel_Device1_LLN0_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +LogicalNode iedModel_Device1_LPHD1 = { + LogicalNodeModelType, + "LPHD1", + (ModelNode*) &iedModel_Device1, + (ModelNode*) &iedModel_Device1_DGEN1, + (ModelNode*) &iedModel_Device1_LPHD1_PhyNam, +}; + +DataObject iedModel_Device1_LPHD1_PhyNam = { + DataObjectModelType, + "PhyNam", + (ModelNode*) &iedModel_Device1_LPHD1, + (ModelNode*) &iedModel_Device1_LPHD1_PhyHealth, + (ModelNode*) &iedModel_Device1_LPHD1_PhyNam_vendor, + 0 +}; + +DataAttribute iedModel_Device1_LPHD1_PhyNam_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Device1_LPHD1_PhyNam, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_LPHD1_PhyHealth = { + DataObjectModelType, + "PhyHealth", + (ModelNode*) &iedModel_Device1_LPHD1, + (ModelNode*) &iedModel_Device1_LPHD1_Proxy, + (ModelNode*) &iedModel_Device1_LPHD1_PhyHealth_stVal, + 0 +}; + +DataAttribute iedModel_Device1_LPHD1_PhyHealth_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_LPHD1_PhyHealth, + (ModelNode*) &iedModel_Device1_LPHD1_PhyHealth_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_LPHD1_PhyHealth_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_LPHD1_PhyHealth, + (ModelNode*) &iedModel_Device1_LPHD1_PhyHealth_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_LPHD1_PhyHealth_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_LPHD1_PhyHealth, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_LPHD1_Proxy = { + DataObjectModelType, + "Proxy", + (ModelNode*) &iedModel_Device1_LPHD1, + NULL, + (ModelNode*) &iedModel_Device1_LPHD1_Proxy_stVal, + 0 +}; + +DataAttribute iedModel_Device1_LPHD1_Proxy_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_LPHD1_Proxy, + (ModelNode*) &iedModel_Device1_LPHD1_Proxy_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_BOOLEAN, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_LPHD1_Proxy_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_LPHD1_Proxy, + (ModelNode*) &iedModel_Device1_LPHD1_Proxy_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_LPHD1_Proxy_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_LPHD1_Proxy, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +LogicalNode iedModel_Device1_DGEN1 = { + LogicalNodeModelType, + "DGEN1", + (ModelNode*) &iedModel_Device1, + (ModelNode*) &iedModel_Device1_DSCH1, + (ModelNode*) &iedModel_Device1_DGEN1_Mod, +}; + +DataObject iedModel_Device1_DGEN1_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_Device1_DGEN1, + (ModelNode*) &iedModel_Device1_DGEN1_Beh, + (ModelNode*) &iedModel_Device1_DGEN1_Mod_q, + 0 +}; + +DataAttribute iedModel_Device1_DGEN1_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_DGEN1_Mod, + (ModelNode*) &iedModel_Device1_DGEN1_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_DGEN1_Mod, + (ModelNode*) &iedModel_Device1_DGEN1_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_Device1_DGEN1_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_DGEN1_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_Device1_DGEN1, + (ModelNode*) &iedModel_Device1_DGEN1_Health, + (ModelNode*) &iedModel_Device1_DGEN1_Beh_stVal, + 0 +}; + +DataAttribute iedModel_Device1_DGEN1_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_DGEN1_Beh, + (ModelNode*) &iedModel_Device1_DGEN1_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_DGEN1_Beh, + (ModelNode*) &iedModel_Device1_DGEN1_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_DGEN1_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_DGEN1_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_Device1_DGEN1, + (ModelNode*) &iedModel_Device1_DGEN1_NamPlt, + (ModelNode*) &iedModel_Device1_DGEN1_Health_stVal, + 0 +}; + +DataAttribute iedModel_Device1_DGEN1_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_DGEN1_Health, + (ModelNode*) &iedModel_Device1_DGEN1_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_DGEN1_Health, + (ModelNode*) &iedModel_Device1_DGEN1_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_DGEN1_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_DGEN1_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_Device1_DGEN1, + (ModelNode*) &iedModel_Device1_DGEN1_OpTmh, + (ModelNode*) &iedModel_Device1_DGEN1_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_Device1_DGEN1_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Device1_DGEN1_NamPlt, + (ModelNode*) &iedModel_Device1_DGEN1_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_Device1_DGEN1_NamPlt, + (ModelNode*) &iedModel_Device1_DGEN1_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_Device1_DGEN1_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_DGEN1_OpTmh = { + DataObjectModelType, + "OpTmh", + (ModelNode*) &iedModel_Device1_DGEN1, + (ModelNode*) &iedModel_Device1_DGEN1_GnOpSt, + (ModelNode*) &iedModel_Device1_DGEN1_OpTmh_stVal, + 0 +}; + +DataAttribute iedModel_Device1_DGEN1_OpTmh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_DGEN1_OpTmh, + (ModelNode*) &iedModel_Device1_DGEN1_OpTmh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_OpTmh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_DGEN1_OpTmh, + (ModelNode*) &iedModel_Device1_DGEN1_OpTmh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_OpTmh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_DGEN1_OpTmh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_DGEN1_GnOpSt = { + DataObjectModelType, + "GnOpSt", + (ModelNode*) &iedModel_Device1_DGEN1, + (ModelNode*) &iedModel_Device1_DGEN1_OpTmsRs, + (ModelNode*) &iedModel_Device1_DGEN1_GnOpSt_stVal, + 0 +}; + +DataAttribute iedModel_Device1_DGEN1_GnOpSt_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_DGEN1_GnOpSt, + (ModelNode*) &iedModel_Device1_DGEN1_GnOpSt_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_GnOpSt_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_DGEN1_GnOpSt, + (ModelNode*) &iedModel_Device1_DGEN1_GnOpSt_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_GnOpSt_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_DGEN1_GnOpSt, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_DGEN1_OpTmsRs = { + DataObjectModelType, + "OpTmsRs", + (ModelNode*) &iedModel_Device1_DGEN1, + (ModelNode*) &iedModel_Device1_DGEN1_TotWh, + (ModelNode*) &iedModel_Device1_DGEN1_OpTmsRs_stVal, + 0 +}; + +DataAttribute iedModel_Device1_DGEN1_OpTmsRs_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_DGEN1_OpTmsRs, + (ModelNode*) &iedModel_Device1_DGEN1_OpTmsRs_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_OpTmsRs_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_DGEN1_OpTmsRs, + (ModelNode*) &iedModel_Device1_DGEN1_OpTmsRs_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_OpTmsRs_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_DGEN1_OpTmsRs, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_DGEN1_TotWh = { + DataObjectModelType, + "TotWh", + (ModelNode*) &iedModel_Device1_DGEN1, + NULL, + (ModelNode*) &iedModel_Device1_DGEN1_TotWh_mag, + 0 +}; + +DataAttribute iedModel_Device1_DGEN1_TotWh_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Device1_DGEN1_TotWh, + (ModelNode*) &iedModel_Device1_DGEN1_TotWh_q, + (ModelNode*) &iedModel_Device1_DGEN1_TotWh_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_TotWh_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Device1_DGEN1_TotWh_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_TotWh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_DGEN1_TotWh, + (ModelNode*) &iedModel_Device1_DGEN1_TotWh_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DGEN1_TotWh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_DGEN1_TotWh, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +LogicalNode iedModel_Device1_DSCH1 = { + LogicalNodeModelType, + "DSCH1", + (ModelNode*) &iedModel_Device1, + (ModelNode*) &iedModel_Device1_MMXU1, + (ModelNode*) &iedModel_Device1_DSCH1_Mod, +}; + +DataObject iedModel_Device1_DSCH1_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_Device1_DSCH1, + (ModelNode*) &iedModel_Device1_DSCH1_Beh, + (ModelNode*) &iedModel_Device1_DSCH1_Mod_q, + 0 +}; + +DataAttribute iedModel_Device1_DSCH1_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_DSCH1_Mod, + (ModelNode*) &iedModel_Device1_DSCH1_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DSCH1_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_DSCH1_Mod, + (ModelNode*) &iedModel_Device1_DSCH1_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_DSCH1_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_Device1_DSCH1_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_DSCH1_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_Device1_DSCH1, + (ModelNode*) &iedModel_Device1_DSCH1_Health, + (ModelNode*) &iedModel_Device1_DSCH1_Beh_stVal, + 0 +}; + +DataAttribute iedModel_Device1_DSCH1_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_DSCH1_Beh, + (ModelNode*) &iedModel_Device1_DSCH1_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DSCH1_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_DSCH1_Beh, + (ModelNode*) &iedModel_Device1_DSCH1_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DSCH1_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_DSCH1_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_DSCH1_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_Device1_DSCH1, + (ModelNode*) &iedModel_Device1_DSCH1_NamPlt, + (ModelNode*) &iedModel_Device1_DSCH1_Health_stVal, + 0 +}; + +DataAttribute iedModel_Device1_DSCH1_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_DSCH1_Health, + (ModelNode*) &iedModel_Device1_DSCH1_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DSCH1_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_DSCH1_Health, + (ModelNode*) &iedModel_Device1_DSCH1_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DSCH1_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_DSCH1_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_DSCH1_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_Device1_DSCH1, + (ModelNode*) &iedModel_Device1_DSCH1_SchdSt, + (ModelNode*) &iedModel_Device1_DSCH1_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_Device1_DSCH1_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Device1_DSCH1_NamPlt, + (ModelNode*) &iedModel_Device1_DSCH1_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_DSCH1_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_Device1_DSCH1_NamPlt, + (ModelNode*) &iedModel_Device1_DSCH1_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_DSCH1_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_Device1_DSCH1_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_DSCH1_SchdSt = { + DataObjectModelType, + "SchdSt", + (ModelNode*) &iedModel_Device1_DSCH1, + (ModelNode*) &iedModel_Device1_DSCH1_SchdId, + (ModelNode*) &iedModel_Device1_DSCH1_SchdSt_stVal, + 0 +}; + +DataAttribute iedModel_Device1_DSCH1_SchdSt_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_DSCH1_SchdSt, + (ModelNode*) &iedModel_Device1_DSCH1_SchdSt_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DSCH1_SchdSt_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_DSCH1_SchdSt, + (ModelNode*) &iedModel_Device1_DSCH1_SchdSt_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DSCH1_SchdSt_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_DSCH1_SchdSt, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_DSCH1_SchdId = { + DataObjectModelType, + "SchdId", + (ModelNode*) &iedModel_Device1_DSCH1, + (ModelNode*) &iedModel_Device1_DSCH1_SchdCat, + NULL, + 0 +}; + +DataObject iedModel_Device1_DSCH1_SchdCat = { + DataObjectModelType, + "SchdCat", + (ModelNode*) &iedModel_Device1_DSCH1, + (ModelNode*) &iedModel_Device1_DSCH1_SchdTyp, + NULL, + 0 +}; + +DataObject iedModel_Device1_DSCH1_SchdTyp = { + DataObjectModelType, + "SchdTyp", + (ModelNode*) &iedModel_Device1_DSCH1, + (ModelNode*) &iedModel_Device1_DSCH1_SchdAbsTm, + NULL, + 0 +}; + +DataObject iedModel_Device1_DSCH1_SchdAbsTm = { + DataObjectModelType, + "SchdAbsTm", + (ModelNode*) &iedModel_Device1_DSCH1, + NULL, + (ModelNode*) &iedModel_Device1_DSCH1_SchdAbsTm_val, + 0 +}; + +DataAttribute iedModel_Device1_DSCH1_SchdAbsTm_val = { + DataAttributeModelType, + "val", + (ModelNode*) &iedModel_Device1_DSCH1_SchdAbsTm, + (ModelNode*) &iedModel_Device1_DSCH1_SchdAbsTm_time, + NULL, + 255, + IEC61850_FC_SP, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_DSCH1_SchdAbsTm_time = { + DataAttributeModelType, + "time", + (ModelNode*) &iedModel_Device1_DSCH1_SchdAbsTm, + NULL, + NULL, + 255, + IEC61850_FC_SP, + IEC61850_TIMESTAMP, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +LogicalNode iedModel_Device1_MMXU1 = { + LogicalNodeModelType, + "MMXU1", + (ModelNode*) &iedModel_Device1, + (ModelNode*) &iedModel_Device1_MMXU2, + (ModelNode*) &iedModel_Device1_MMXU1_Mod, +}; + +DataObject iedModel_Device1_MMXU1_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_Device1_MMXU1, + (ModelNode*) &iedModel_Device1_MMXU1_Beh, + (ModelNode*) &iedModel_Device1_MMXU1_Mod_q, + 0 +}; + +DataAttribute iedModel_Device1_MMXU1_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_MMXU1_Mod, + (ModelNode*) &iedModel_Device1_MMXU1_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU1_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_MMXU1_Mod, + (ModelNode*) &iedModel_Device1_MMXU1_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU1_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_Device1_MMXU1_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_MMXU1_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_Device1_MMXU1, + (ModelNode*) &iedModel_Device1_MMXU1_Health, + (ModelNode*) &iedModel_Device1_MMXU1_Beh_stVal, + 0 +}; + +DataAttribute iedModel_Device1_MMXU1_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_MMXU1_Beh, + (ModelNode*) &iedModel_Device1_MMXU1_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU1_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_MMXU1_Beh, + (ModelNode*) &iedModel_Device1_MMXU1_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU1_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_MMXU1_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_MMXU1_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_Device1_MMXU1, + (ModelNode*) &iedModel_Device1_MMXU1_NamPlt, + (ModelNode*) &iedModel_Device1_MMXU1_Health_stVal, + 0 +}; + +DataAttribute iedModel_Device1_MMXU1_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_MMXU1_Health, + (ModelNode*) &iedModel_Device1_MMXU1_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU1_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_MMXU1_Health, + (ModelNode*) &iedModel_Device1_MMXU1_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU1_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_MMXU1_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_MMXU1_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_Device1_MMXU1, + NULL, + (ModelNode*) &iedModel_Device1_MMXU1_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_Device1_MMXU1_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Device1_MMXU1_NamPlt, + (ModelNode*) &iedModel_Device1_MMXU1_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU1_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_Device1_MMXU1_NamPlt, + (ModelNode*) &iedModel_Device1_MMXU1_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU1_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_Device1_MMXU1_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +LogicalNode iedModel_Device1_MMXU2 = { + LogicalNodeModelType, + "MMXU2", + (ModelNode*) &iedModel_Device1, + NULL, + (ModelNode*) &iedModel_Device1_MMXU2_Mod, +}; + +DataObject iedModel_Device1_MMXU2_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_Device1_MMXU2, + (ModelNode*) &iedModel_Device1_MMXU2_Beh, + (ModelNode*) &iedModel_Device1_MMXU2_Mod_q, + 0 +}; + +DataAttribute iedModel_Device1_MMXU2_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_MMXU2_Mod, + (ModelNode*) &iedModel_Device1_MMXU2_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU2_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_MMXU2_Mod, + (ModelNode*) &iedModel_Device1_MMXU2_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU2_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_Device1_MMXU2_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_MMXU2_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_Device1_MMXU2, + (ModelNode*) &iedModel_Device1_MMXU2_Health, + (ModelNode*) &iedModel_Device1_MMXU2_Beh_stVal, + 0 +}; + +DataAttribute iedModel_Device1_MMXU2_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_MMXU2_Beh, + (ModelNode*) &iedModel_Device1_MMXU2_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU2_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_MMXU2_Beh, + (ModelNode*) &iedModel_Device1_MMXU2_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU2_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_MMXU2_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_MMXU2_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_Device1_MMXU2, + (ModelNode*) &iedModel_Device1_MMXU2_NamPlt, + (ModelNode*) &iedModel_Device1_MMXU2_Health_stVal, + 0 +}; + +DataAttribute iedModel_Device1_MMXU2_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Device1_MMXU2_Health, + (ModelNode*) &iedModel_Device1_MMXU2_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU2_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_MMXU2_Health, + (ModelNode*) &iedModel_Device1_MMXU2_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU2_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_MMXU2_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_MMXU2_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_Device1_MMXU2, + (ModelNode*) &iedModel_Device1_MMXU2_TotW, + (ModelNode*) &iedModel_Device1_MMXU2_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_Device1_MMXU2_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Device1_MMXU2_NamPlt, + (ModelNode*) &iedModel_Device1_MMXU2_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU2_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_Device1_MMXU2_NamPlt, + (ModelNode*) &iedModel_Device1_MMXU2_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU2_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_Device1_MMXU2_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataObject iedModel_Device1_MMXU2_TotW = { + DataObjectModelType, + "TotW", + (ModelNode*) &iedModel_Device1_MMXU2, + NULL, + (ModelNode*) &iedModel_Device1_MMXU2_TotW_mag, + 0 +}; + +DataAttribute iedModel_Device1_MMXU2_TotW_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Device1_MMXU2_TotW, + (ModelNode*) &iedModel_Device1_MMXU2_TotW_q, + (ModelNode*) &iedModel_Device1_MMXU2_TotW_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU2_TotW_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Device1_MMXU2_TotW_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU2_TotW_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Device1_MMXU2_TotW, + (ModelNode*) &iedModel_Device1_MMXU2_TotW_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Device1_MMXU2_TotW_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Device1_MMXU2_TotW, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +extern ReportControlBlock iedModel_Device1_LLN0_report0; + +ReportControlBlock iedModel_Device1_LLN0_report0 = {&iedModel_Device1_LLN0, "LLN0_Events_BuffRep01", "LLN0$RP$brcbEV1", true, "dataset1", 1, 25, 239, 50, 900000, NULL}; + + + + + + + +IedModel iedModel = { + "SampleIED", + &iedModel_Device1, + &iedModelds_Device1_LLN0_dataset1, + &iedModel_Device1_LLN0_report0, + NULL, + NULL, + NULL, + NULL, + NULL, + initializeValues +}; + +static void +initializeValues() +{ + +iedModel_Device1_LLN0_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_Device1_DGEN1_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_Device1_DSCH1_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_Device1_MMXU1_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_Device1_MMXU2_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); +} diff --git a/examples/server_example_simple/static_model.h b/examples/server_example_simple/static_model.h new file mode 100644 index 0000000..208787e --- /dev/null +++ b/examples/server_example_simple/static_model.h @@ -0,0 +1,281 @@ +/* + * static_model.h + * + * automatically generated from sampleModel_with_dataset.icd + */ + +#ifndef STATIC_MODEL_H_ +#define STATIC_MODEL_H_ + +#include +#include "iec61850_model.h" + +extern IedModel iedModel; +extern LogicalDevice iedModel_Device1; +extern LogicalNode iedModel_Device1_LLN0; +extern DataObject iedModel_Device1_LLN0_Mod; +extern DataAttribute iedModel_Device1_LLN0_Mod_q; +extern DataAttribute iedModel_Device1_LLN0_Mod_t; +extern DataAttribute iedModel_Device1_LLN0_Mod_ctlModel; +extern DataObject iedModel_Device1_LLN0_Beh; +extern DataAttribute iedModel_Device1_LLN0_Beh_stVal; +extern DataAttribute iedModel_Device1_LLN0_Beh_q; +extern DataAttribute iedModel_Device1_LLN0_Beh_t; +extern DataObject iedModel_Device1_LLN0_Health; +extern DataAttribute iedModel_Device1_LLN0_Health_stVal; +extern DataAttribute iedModel_Device1_LLN0_Health_q; +extern DataAttribute iedModel_Device1_LLN0_Health_t; +extern DataObject iedModel_Device1_LLN0_NamPlt; +extern DataAttribute iedModel_Device1_LLN0_NamPlt_vendor; +extern DataAttribute iedModel_Device1_LLN0_NamPlt_swRev; +extern DataAttribute iedModel_Device1_LLN0_NamPlt_d; +extern DataAttribute iedModel_Device1_LLN0_NamPlt_configRev; +extern DataAttribute iedModel_Device1_LLN0_NamPlt_ldNs; +extern LogicalNode iedModel_Device1_LPHD1; +extern DataObject iedModel_Device1_LPHD1_PhyNam; +extern DataAttribute iedModel_Device1_LPHD1_PhyNam_vendor; +extern DataObject iedModel_Device1_LPHD1_PhyHealth; +extern DataAttribute iedModel_Device1_LPHD1_PhyHealth_stVal; +extern DataAttribute iedModel_Device1_LPHD1_PhyHealth_q; +extern DataAttribute iedModel_Device1_LPHD1_PhyHealth_t; +extern DataObject iedModel_Device1_LPHD1_Proxy; +extern DataAttribute iedModel_Device1_LPHD1_Proxy_stVal; +extern DataAttribute iedModel_Device1_LPHD1_Proxy_q; +extern DataAttribute iedModel_Device1_LPHD1_Proxy_t; +extern LogicalNode iedModel_Device1_DGEN1; +extern DataObject iedModel_Device1_DGEN1_Mod; +extern DataAttribute iedModel_Device1_DGEN1_Mod_q; +extern DataAttribute iedModel_Device1_DGEN1_Mod_t; +extern DataAttribute iedModel_Device1_DGEN1_Mod_ctlModel; +extern DataObject iedModel_Device1_DGEN1_Beh; +extern DataAttribute iedModel_Device1_DGEN1_Beh_stVal; +extern DataAttribute iedModel_Device1_DGEN1_Beh_q; +extern DataAttribute iedModel_Device1_DGEN1_Beh_t; +extern DataObject iedModel_Device1_DGEN1_Health; +extern DataAttribute iedModel_Device1_DGEN1_Health_stVal; +extern DataAttribute iedModel_Device1_DGEN1_Health_q; +extern DataAttribute iedModel_Device1_DGEN1_Health_t; +extern DataObject iedModel_Device1_DGEN1_NamPlt; +extern DataAttribute iedModel_Device1_DGEN1_NamPlt_vendor; +extern DataAttribute iedModel_Device1_DGEN1_NamPlt_swRev; +extern DataAttribute iedModel_Device1_DGEN1_NamPlt_d; +extern DataObject iedModel_Device1_DGEN1_OpTmh; +extern DataAttribute iedModel_Device1_DGEN1_OpTmh_stVal; +extern DataAttribute iedModel_Device1_DGEN1_OpTmh_q; +extern DataAttribute iedModel_Device1_DGEN1_OpTmh_t; +extern DataObject iedModel_Device1_DGEN1_GnOpSt; +extern DataAttribute iedModel_Device1_DGEN1_GnOpSt_stVal; +extern DataAttribute iedModel_Device1_DGEN1_GnOpSt_q; +extern DataAttribute iedModel_Device1_DGEN1_GnOpSt_t; +extern DataObject iedModel_Device1_DGEN1_OpTmsRs; +extern DataAttribute iedModel_Device1_DGEN1_OpTmsRs_stVal; +extern DataAttribute iedModel_Device1_DGEN1_OpTmsRs_q; +extern DataAttribute iedModel_Device1_DGEN1_OpTmsRs_t; +extern DataObject iedModel_Device1_DGEN1_TotWh; +extern DataAttribute iedModel_Device1_DGEN1_TotWh_mag; +extern DataAttribute iedModel_Device1_DGEN1_TotWh_mag_f; +extern DataAttribute iedModel_Device1_DGEN1_TotWh_q; +extern DataAttribute iedModel_Device1_DGEN1_TotWh_t; +extern LogicalNode iedModel_Device1_DSCH1; +extern DataObject iedModel_Device1_DSCH1_Mod; +extern DataAttribute iedModel_Device1_DSCH1_Mod_q; +extern DataAttribute iedModel_Device1_DSCH1_Mod_t; +extern DataAttribute iedModel_Device1_DSCH1_Mod_ctlModel; +extern DataObject iedModel_Device1_DSCH1_Beh; +extern DataAttribute iedModel_Device1_DSCH1_Beh_stVal; +extern DataAttribute iedModel_Device1_DSCH1_Beh_q; +extern DataAttribute iedModel_Device1_DSCH1_Beh_t; +extern DataObject iedModel_Device1_DSCH1_Health; +extern DataAttribute iedModel_Device1_DSCH1_Health_stVal; +extern DataAttribute iedModel_Device1_DSCH1_Health_q; +extern DataAttribute iedModel_Device1_DSCH1_Health_t; +extern DataObject iedModel_Device1_DSCH1_NamPlt; +extern DataAttribute iedModel_Device1_DSCH1_NamPlt_vendor; +extern DataAttribute iedModel_Device1_DSCH1_NamPlt_swRev; +extern DataAttribute iedModel_Device1_DSCH1_NamPlt_d; +extern DataObject iedModel_Device1_DSCH1_SchdSt; +extern DataAttribute iedModel_Device1_DSCH1_SchdSt_stVal; +extern DataAttribute iedModel_Device1_DSCH1_SchdSt_q; +extern DataAttribute iedModel_Device1_DSCH1_SchdSt_t; +extern DataObject iedModel_Device1_DSCH1_SchdId; +extern DataObject iedModel_Device1_DSCH1_SchdCat; +extern DataObject iedModel_Device1_DSCH1_SchdTyp; +extern DataObject iedModel_Device1_DSCH1_SchdAbsTm; +extern DataAttribute iedModel_Device1_DSCH1_SchdAbsTm_val; +extern DataAttribute iedModel_Device1_DSCH1_SchdAbsTm_time; +extern LogicalNode iedModel_Device1_MMXU1; +extern DataObject iedModel_Device1_MMXU1_Mod; +extern DataAttribute iedModel_Device1_MMXU1_Mod_q; +extern DataAttribute iedModel_Device1_MMXU1_Mod_t; +extern DataAttribute iedModel_Device1_MMXU1_Mod_ctlModel; +extern DataObject iedModel_Device1_MMXU1_Beh; +extern DataAttribute iedModel_Device1_MMXU1_Beh_stVal; +extern DataAttribute iedModel_Device1_MMXU1_Beh_q; +extern DataAttribute iedModel_Device1_MMXU1_Beh_t; +extern DataObject iedModel_Device1_MMXU1_Health; +extern DataAttribute iedModel_Device1_MMXU1_Health_stVal; +extern DataAttribute iedModel_Device1_MMXU1_Health_q; +extern DataAttribute iedModel_Device1_MMXU1_Health_t; +extern DataObject iedModel_Device1_MMXU1_NamPlt; +extern DataAttribute iedModel_Device1_MMXU1_NamPlt_vendor; +extern DataAttribute iedModel_Device1_MMXU1_NamPlt_swRev; +extern DataAttribute iedModel_Device1_MMXU1_NamPlt_d; +extern LogicalNode iedModel_Device1_MMXU2; +extern DataObject iedModel_Device1_MMXU2_Mod; +extern DataAttribute iedModel_Device1_MMXU2_Mod_q; +extern DataAttribute iedModel_Device1_MMXU2_Mod_t; +extern DataAttribute iedModel_Device1_MMXU2_Mod_ctlModel; +extern DataObject iedModel_Device1_MMXU2_Beh; +extern DataAttribute iedModel_Device1_MMXU2_Beh_stVal; +extern DataAttribute iedModel_Device1_MMXU2_Beh_q; +extern DataAttribute iedModel_Device1_MMXU2_Beh_t; +extern DataObject iedModel_Device1_MMXU2_Health; +extern DataAttribute iedModel_Device1_MMXU2_Health_stVal; +extern DataAttribute iedModel_Device1_MMXU2_Health_q; +extern DataAttribute iedModel_Device1_MMXU2_Health_t; +extern DataObject iedModel_Device1_MMXU2_NamPlt; +extern DataAttribute iedModel_Device1_MMXU2_NamPlt_vendor; +extern DataAttribute iedModel_Device1_MMXU2_NamPlt_swRev; +extern DataAttribute iedModel_Device1_MMXU2_NamPlt_d; +extern DataObject iedModel_Device1_MMXU2_TotW; +extern DataAttribute iedModel_Device1_MMXU2_TotW_mag; +extern DataAttribute iedModel_Device1_MMXU2_TotW_mag_f; +extern DataAttribute iedModel_Device1_MMXU2_TotW_q; +extern DataAttribute iedModel_Device1_MMXU2_TotW_t; + + + +#define IEDMODEL_Device1 (&iedModel_Device1) +#define IEDMODEL_Device1_LLN0 (&iedModel_Device1_LLN0) +#define IEDMODEL_Device1_LLN0_Mod (&iedModel_Device1_LLN0_Mod) +#define IEDMODEL_Device1_LLN0_Mod_q (&iedModel_Device1_LLN0_Mod_q) +#define IEDMODEL_Device1_LLN0_Mod_t (&iedModel_Device1_LLN0_Mod_t) +#define IEDMODEL_Device1_LLN0_Mod_ctlModel (&iedModel_Device1_LLN0_Mod_ctlModel) +#define IEDMODEL_Device1_LLN0_Beh (&iedModel_Device1_LLN0_Beh) +#define IEDMODEL_Device1_LLN0_Beh_stVal (&iedModel_Device1_LLN0_Beh_stVal) +#define IEDMODEL_Device1_LLN0_Beh_q (&iedModel_Device1_LLN0_Beh_q) +#define IEDMODEL_Device1_LLN0_Beh_t (&iedModel_Device1_LLN0_Beh_t) +#define IEDMODEL_Device1_LLN0_Health (&iedModel_Device1_LLN0_Health) +#define IEDMODEL_Device1_LLN0_Health_stVal (&iedModel_Device1_LLN0_Health_stVal) +#define IEDMODEL_Device1_LLN0_Health_q (&iedModel_Device1_LLN0_Health_q) +#define IEDMODEL_Device1_LLN0_Health_t (&iedModel_Device1_LLN0_Health_t) +#define IEDMODEL_Device1_LLN0_NamPlt (&iedModel_Device1_LLN0_NamPlt) +#define IEDMODEL_Device1_LLN0_NamPlt_vendor (&iedModel_Device1_LLN0_NamPlt_vendor) +#define IEDMODEL_Device1_LLN0_NamPlt_swRev (&iedModel_Device1_LLN0_NamPlt_swRev) +#define IEDMODEL_Device1_LLN0_NamPlt_d (&iedModel_Device1_LLN0_NamPlt_d) +#define IEDMODEL_Device1_LLN0_NamPlt_configRev (&iedModel_Device1_LLN0_NamPlt_configRev) +#define IEDMODEL_Device1_LLN0_NamPlt_ldNs (&iedModel_Device1_LLN0_NamPlt_ldNs) +#define IEDMODEL_Device1_LPHD1 (&iedModel_Device1_LPHD1) +#define IEDMODEL_Device1_LPHD1_PhyNam (&iedModel_Device1_LPHD1_PhyNam) +#define IEDMODEL_Device1_LPHD1_PhyNam_vendor (&iedModel_Device1_LPHD1_PhyNam_vendor) +#define IEDMODEL_Device1_LPHD1_PhyHealth (&iedModel_Device1_LPHD1_PhyHealth) +#define IEDMODEL_Device1_LPHD1_PhyHealth_stVal (&iedModel_Device1_LPHD1_PhyHealth_stVal) +#define IEDMODEL_Device1_LPHD1_PhyHealth_q (&iedModel_Device1_LPHD1_PhyHealth_q) +#define IEDMODEL_Device1_LPHD1_PhyHealth_t (&iedModel_Device1_LPHD1_PhyHealth_t) +#define IEDMODEL_Device1_LPHD1_Proxy (&iedModel_Device1_LPHD1_Proxy) +#define IEDMODEL_Device1_LPHD1_Proxy_stVal (&iedModel_Device1_LPHD1_Proxy_stVal) +#define IEDMODEL_Device1_LPHD1_Proxy_q (&iedModel_Device1_LPHD1_Proxy_q) +#define IEDMODEL_Device1_LPHD1_Proxy_t (&iedModel_Device1_LPHD1_Proxy_t) +#define IEDMODEL_Device1_DGEN1 (&iedModel_Device1_DGEN1) +#define IEDMODEL_Device1_DGEN1_Mod (&iedModel_Device1_DGEN1_Mod) +#define IEDMODEL_Device1_DGEN1_Mod_q (&iedModel_Device1_DGEN1_Mod_q) +#define IEDMODEL_Device1_DGEN1_Mod_t (&iedModel_Device1_DGEN1_Mod_t) +#define IEDMODEL_Device1_DGEN1_Mod_ctlModel (&iedModel_Device1_DGEN1_Mod_ctlModel) +#define IEDMODEL_Device1_DGEN1_Beh (&iedModel_Device1_DGEN1_Beh) +#define IEDMODEL_Device1_DGEN1_Beh_stVal (&iedModel_Device1_DGEN1_Beh_stVal) +#define IEDMODEL_Device1_DGEN1_Beh_q (&iedModel_Device1_DGEN1_Beh_q) +#define IEDMODEL_Device1_DGEN1_Beh_t (&iedModel_Device1_DGEN1_Beh_t) +#define IEDMODEL_Device1_DGEN1_Health (&iedModel_Device1_DGEN1_Health) +#define IEDMODEL_Device1_DGEN1_Health_stVal (&iedModel_Device1_DGEN1_Health_stVal) +#define IEDMODEL_Device1_DGEN1_Health_q (&iedModel_Device1_DGEN1_Health_q) +#define IEDMODEL_Device1_DGEN1_Health_t (&iedModel_Device1_DGEN1_Health_t) +#define IEDMODEL_Device1_DGEN1_NamPlt (&iedModel_Device1_DGEN1_NamPlt) +#define IEDMODEL_Device1_DGEN1_NamPlt_vendor (&iedModel_Device1_DGEN1_NamPlt_vendor) +#define IEDMODEL_Device1_DGEN1_NamPlt_swRev (&iedModel_Device1_DGEN1_NamPlt_swRev) +#define IEDMODEL_Device1_DGEN1_NamPlt_d (&iedModel_Device1_DGEN1_NamPlt_d) +#define IEDMODEL_Device1_DGEN1_OpTmh (&iedModel_Device1_DGEN1_OpTmh) +#define IEDMODEL_Device1_DGEN1_OpTmh_stVal (&iedModel_Device1_DGEN1_OpTmh_stVal) +#define IEDMODEL_Device1_DGEN1_OpTmh_q (&iedModel_Device1_DGEN1_OpTmh_q) +#define IEDMODEL_Device1_DGEN1_OpTmh_t (&iedModel_Device1_DGEN1_OpTmh_t) +#define IEDMODEL_Device1_DGEN1_GnOpSt (&iedModel_Device1_DGEN1_GnOpSt) +#define IEDMODEL_Device1_DGEN1_GnOpSt_stVal (&iedModel_Device1_DGEN1_GnOpSt_stVal) +#define IEDMODEL_Device1_DGEN1_GnOpSt_q (&iedModel_Device1_DGEN1_GnOpSt_q) +#define IEDMODEL_Device1_DGEN1_GnOpSt_t (&iedModel_Device1_DGEN1_GnOpSt_t) +#define IEDMODEL_Device1_DGEN1_OpTmsRs (&iedModel_Device1_DGEN1_OpTmsRs) +#define IEDMODEL_Device1_DGEN1_OpTmsRs_stVal (&iedModel_Device1_DGEN1_OpTmsRs_stVal) +#define IEDMODEL_Device1_DGEN1_OpTmsRs_q (&iedModel_Device1_DGEN1_OpTmsRs_q) +#define IEDMODEL_Device1_DGEN1_OpTmsRs_t (&iedModel_Device1_DGEN1_OpTmsRs_t) +#define IEDMODEL_Device1_DGEN1_TotWh (&iedModel_Device1_DGEN1_TotWh) +#define IEDMODEL_Device1_DGEN1_TotWh_mag (&iedModel_Device1_DGEN1_TotWh_mag) +#define IEDMODEL_Device1_DGEN1_TotWh_mag_f (&iedModel_Device1_DGEN1_TotWh_mag_f) +#define IEDMODEL_Device1_DGEN1_TotWh_q (&iedModel_Device1_DGEN1_TotWh_q) +#define IEDMODEL_Device1_DGEN1_TotWh_t (&iedModel_Device1_DGEN1_TotWh_t) +#define IEDMODEL_Device1_DSCH1 (&iedModel_Device1_DSCH1) +#define IEDMODEL_Device1_DSCH1_Mod (&iedModel_Device1_DSCH1_Mod) +#define IEDMODEL_Device1_DSCH1_Mod_q (&iedModel_Device1_DSCH1_Mod_q) +#define IEDMODEL_Device1_DSCH1_Mod_t (&iedModel_Device1_DSCH1_Mod_t) +#define IEDMODEL_Device1_DSCH1_Mod_ctlModel (&iedModel_Device1_DSCH1_Mod_ctlModel) +#define IEDMODEL_Device1_DSCH1_Beh (&iedModel_Device1_DSCH1_Beh) +#define IEDMODEL_Device1_DSCH1_Beh_stVal (&iedModel_Device1_DSCH1_Beh_stVal) +#define IEDMODEL_Device1_DSCH1_Beh_q (&iedModel_Device1_DSCH1_Beh_q) +#define IEDMODEL_Device1_DSCH1_Beh_t (&iedModel_Device1_DSCH1_Beh_t) +#define IEDMODEL_Device1_DSCH1_Health (&iedModel_Device1_DSCH1_Health) +#define IEDMODEL_Device1_DSCH1_Health_stVal (&iedModel_Device1_DSCH1_Health_stVal) +#define IEDMODEL_Device1_DSCH1_Health_q (&iedModel_Device1_DSCH1_Health_q) +#define IEDMODEL_Device1_DSCH1_Health_t (&iedModel_Device1_DSCH1_Health_t) +#define IEDMODEL_Device1_DSCH1_NamPlt (&iedModel_Device1_DSCH1_NamPlt) +#define IEDMODEL_Device1_DSCH1_NamPlt_vendor (&iedModel_Device1_DSCH1_NamPlt_vendor) +#define IEDMODEL_Device1_DSCH1_NamPlt_swRev (&iedModel_Device1_DSCH1_NamPlt_swRev) +#define IEDMODEL_Device1_DSCH1_NamPlt_d (&iedModel_Device1_DSCH1_NamPlt_d) +#define IEDMODEL_Device1_DSCH1_SchdSt (&iedModel_Device1_DSCH1_SchdSt) +#define IEDMODEL_Device1_DSCH1_SchdSt_stVal (&iedModel_Device1_DSCH1_SchdSt_stVal) +#define IEDMODEL_Device1_DSCH1_SchdSt_q (&iedModel_Device1_DSCH1_SchdSt_q) +#define IEDMODEL_Device1_DSCH1_SchdSt_t (&iedModel_Device1_DSCH1_SchdSt_t) +#define IEDMODEL_Device1_DSCH1_SchdId (&iedModel_Device1_DSCH1_SchdId) +#define IEDMODEL_Device1_DSCH1_SchdCat (&iedModel_Device1_DSCH1_SchdCat) +#define IEDMODEL_Device1_DSCH1_SchdTyp (&iedModel_Device1_DSCH1_SchdTyp) +#define IEDMODEL_Device1_DSCH1_SchdAbsTm (&iedModel_Device1_DSCH1_SchdAbsTm) +#define IEDMODEL_Device1_DSCH1_SchdAbsTm_val (&iedModel_Device1_DSCH1_SchdAbsTm_val) +#define IEDMODEL_Device1_DSCH1_SchdAbsTm_time (&iedModel_Device1_DSCH1_SchdAbsTm_time) +#define IEDMODEL_Device1_MMXU1 (&iedModel_Device1_MMXU1) +#define IEDMODEL_Device1_MMXU1_Mod (&iedModel_Device1_MMXU1_Mod) +#define IEDMODEL_Device1_MMXU1_Mod_q (&iedModel_Device1_MMXU1_Mod_q) +#define IEDMODEL_Device1_MMXU1_Mod_t (&iedModel_Device1_MMXU1_Mod_t) +#define IEDMODEL_Device1_MMXU1_Mod_ctlModel (&iedModel_Device1_MMXU1_Mod_ctlModel) +#define IEDMODEL_Device1_MMXU1_Beh (&iedModel_Device1_MMXU1_Beh) +#define IEDMODEL_Device1_MMXU1_Beh_stVal (&iedModel_Device1_MMXU1_Beh_stVal) +#define IEDMODEL_Device1_MMXU1_Beh_q (&iedModel_Device1_MMXU1_Beh_q) +#define IEDMODEL_Device1_MMXU1_Beh_t (&iedModel_Device1_MMXU1_Beh_t) +#define IEDMODEL_Device1_MMXU1_Health (&iedModel_Device1_MMXU1_Health) +#define IEDMODEL_Device1_MMXU1_Health_stVal (&iedModel_Device1_MMXU1_Health_stVal) +#define IEDMODEL_Device1_MMXU1_Health_q (&iedModel_Device1_MMXU1_Health_q) +#define IEDMODEL_Device1_MMXU1_Health_t (&iedModel_Device1_MMXU1_Health_t) +#define IEDMODEL_Device1_MMXU1_NamPlt (&iedModel_Device1_MMXU1_NamPlt) +#define IEDMODEL_Device1_MMXU1_NamPlt_vendor (&iedModel_Device1_MMXU1_NamPlt_vendor) +#define IEDMODEL_Device1_MMXU1_NamPlt_swRev (&iedModel_Device1_MMXU1_NamPlt_swRev) +#define IEDMODEL_Device1_MMXU1_NamPlt_d (&iedModel_Device1_MMXU1_NamPlt_d) +#define IEDMODEL_Device1_MMXU2 (&iedModel_Device1_MMXU2) +#define IEDMODEL_Device1_MMXU2_Mod (&iedModel_Device1_MMXU2_Mod) +#define IEDMODEL_Device1_MMXU2_Mod_q (&iedModel_Device1_MMXU2_Mod_q) +#define IEDMODEL_Device1_MMXU2_Mod_t (&iedModel_Device1_MMXU2_Mod_t) +#define IEDMODEL_Device1_MMXU2_Mod_ctlModel (&iedModel_Device1_MMXU2_Mod_ctlModel) +#define IEDMODEL_Device1_MMXU2_Beh (&iedModel_Device1_MMXU2_Beh) +#define IEDMODEL_Device1_MMXU2_Beh_stVal (&iedModel_Device1_MMXU2_Beh_stVal) +#define IEDMODEL_Device1_MMXU2_Beh_q (&iedModel_Device1_MMXU2_Beh_q) +#define IEDMODEL_Device1_MMXU2_Beh_t (&iedModel_Device1_MMXU2_Beh_t) +#define IEDMODEL_Device1_MMXU2_Health (&iedModel_Device1_MMXU2_Health) +#define IEDMODEL_Device1_MMXU2_Health_stVal (&iedModel_Device1_MMXU2_Health_stVal) +#define IEDMODEL_Device1_MMXU2_Health_q (&iedModel_Device1_MMXU2_Health_q) +#define IEDMODEL_Device1_MMXU2_Health_t (&iedModel_Device1_MMXU2_Health_t) +#define IEDMODEL_Device1_MMXU2_NamPlt (&iedModel_Device1_MMXU2_NamPlt) +#define IEDMODEL_Device1_MMXU2_NamPlt_vendor (&iedModel_Device1_MMXU2_NamPlt_vendor) +#define IEDMODEL_Device1_MMXU2_NamPlt_swRev (&iedModel_Device1_MMXU2_NamPlt_swRev) +#define IEDMODEL_Device1_MMXU2_NamPlt_d (&iedModel_Device1_MMXU2_NamPlt_d) +#define IEDMODEL_Device1_MMXU2_TotW (&iedModel_Device1_MMXU2_TotW) +#define IEDMODEL_Device1_MMXU2_TotW_mag (&iedModel_Device1_MMXU2_TotW_mag) +#define IEDMODEL_Device1_MMXU2_TotW_mag_f (&iedModel_Device1_MMXU2_TotW_mag_f) +#define IEDMODEL_Device1_MMXU2_TotW_q (&iedModel_Device1_MMXU2_TotW_q) +#define IEDMODEL_Device1_MMXU2_TotW_t (&iedModel_Device1_MMXU2_TotW_t) + +#endif /* STATIC_MODEL_H_ */ + diff --git a/examples/server_example_write_handler/CMakeLists.txt b/examples/server_example_write_handler/CMakeLists.txt new file mode 100644 index 0000000..ebcf8d1 --- /dev/null +++ b/examples/server_example_write_handler/CMakeLists.txt @@ -0,0 +1,21 @@ +include_directories( + . +) + +set(server_example_SRCS + server_example_write_handler.c + static_model.c +) + +IF(WIN32) +set_source_files_properties(${server_example_SRCS} + PROPERTIES LANGUAGE CXX) +ENDIF(WIN32) + +add_executable(server_example_write_handler + ${server_example_SRCS} +) + +target_link_libraries(server_example_write_handler + iec61850 +) diff --git a/examples/server_example_write_handler/Makefile b/examples/server_example_write_handler/Makefile new file mode 100644 index 0000000..639e88e --- /dev/null +++ b/examples/server_example_write_handler/Makefile @@ -0,0 +1,25 @@ +LIBIEC_HOME=../.. + +PROJECT_BINARY_NAME = server_example_write_handler +PROJECT_SOURCES = server_example_write_handler.c +PROJECT_SOURCES += static_model.c + +PROJECT_ICD_FILE = complexModel.icd + +include $(LIBIEC_HOME)/make/target_system.mk +include $(LIBIEC_HOME)/make/stack_includes.mk + +all: $(PROJECT_BINARY_NAME) + +include $(LIBIEC_HOME)/make/common_targets.mk + +model: $(PROJECT_ICD_FILE) + java -jar $(LIBIEC_HOME)/tools/model_generator/genmodel.jar $(PROJECT_ICD_FILE) + +$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME) + $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS) + +clean: + rm -f $(PROJECT_BINARY_NAME) + + diff --git a/examples/server_example_write_handler/complexModel.icd b/examples/server_example_write_handler/complexModel.icd new file mode 100644 index 0000000..9d5ccea --- /dev/null +++ b/examples/server_example_write_handler/complexModel.icd @@ -0,0 +1,347 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + status-only + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + + + rad + sr + m + Gy + q + °C + Sv + F + C + S + H + V + kg + ohm + J + N + Hz + Ix + Lm + Wb + T + W + Pa + s + m² + m³ + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + A + W/m K + J/K + ppm + 1/s + rad/s + K + VA + Watts + VAr + theta + cos(theta) + Vs + V² + As + A² + mol + A²t + VAh + Wh + VArh + V/Hz + cd + deg + + + Yocto + Zepto + Atto + Femto + Pico + Nano + Micro + Milli + Centi + Deci + zeroNoValue + Deca + Hecto + Kilo + Mega + Giga + Tera + Petra + Exa + Zetta + Yotta + + + normal + high + low + high-high + low-low + + + diff --git a/examples/server_example_write_handler/server_example_write_handler.c b/examples/server_example_write_handler/server_example_write_handler.c new file mode 100644 index 0000000..0666e81 --- /dev/null +++ b/examples/server_example_write_handler/server_example_write_handler.c @@ -0,0 +1,78 @@ +/* + * server_example_write_handler.c + */ + +#include "iec61850_server.h" +#include "hal_thread.h" +#include +#include +#include + +#include "../server_example_write_handler/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 MmsDataAccessError +writeAccessHandler (DataAttribute* dataAttribute, MmsValue* value, ClientConnection connection, void* parameter) +{ + if (dataAttribute == IEDMODEL_Inverter_ZINV1_OutVarSet_setMag_f) { + + float newValue = MmsValue_toFloat(value); + + printf("New value for OutVarSet_setMag_f = %f\n", newValue); + + /* Check if value is inside of valid range */ + if ((newValue >= 0.f) && (newValue <= 1000.1f)) + return DATA_ACCESS_ERROR_SUCCESS; + else + return DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID; + + } + + return DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; +} + +int main(int argc, char** argv) { + + iedServer = IedServer_create(&iedModel); + + /* MMS server will be instructed to start listening to client connections. */ + IedServer_start(iedServer, 102); + + /* Don't allow access to SP variables by default */ + IedServer_setWriteAccessPolicy(iedServer, IEC61850_FC_SP, ACCESS_POLICY_DENY); + + /* Instruct the server that we will be informed if a clients writes to a + * certain variables we are interested in. + */ + IedServer_handleWriteAccess(iedServer, IEDMODEL_Inverter_ZINV1_OutVarSet_setMag_f, writeAccessHandler, NULL); + + if (!IedServer_isRunning(iedServer)) { + printf("Starting server failed! Exit.\n"); + IedServer_destroy(iedServer); + exit(-1); + } + + running = 1; + + signal(SIGINT, sigint_handler); + + while (running) { + Thread_sleep(1); + } + + /* 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_write_handler/static_model.c b/examples/server_example_write_handler/static_model.c new file mode 100644 index 0000000..c0dba26 --- /dev/null +++ b/examples/server_example_write_handler/static_model.c @@ -0,0 +1,3621 @@ +/* + * static_model.c + * + * automatically generated from complexModel.icd + */ +#include "../server_example_write_handler/static_model.h" + +static void initializeValues(); + +extern DataSet iedModelds_Inverter_LLN0_dataset1; + + +extern DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda0; +extern DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda1; +extern DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda2; +extern DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda3; +extern DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda4; + +DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda0 = { + "Inverter", + false, + "LLN0$ST$Mod$q", + -1, + NULL, + NULL, + &iedModelds_Inverter_LLN0_dataset1_fcda1 +}; + +DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda1 = { + "Battery", + false, + "LLN0$ST$Mod$q", + -1, + NULL, + NULL, + &iedModelds_Inverter_LLN0_dataset1_fcda2 +}; + +DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda2 = { + "Inverter", + false, + "MMXU1$ST$Mod$q", + -1, + NULL, + NULL, + &iedModelds_Inverter_LLN0_dataset1_fcda3 +}; + +DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda3 = { + "Inverter", + false, + "MMXU1$CF$Mod$ctlModel", + -1, + NULL, + NULL, + &iedModelds_Inverter_LLN0_dataset1_fcda4 +}; + +DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda4 = { + "Inverter", + false, + "MMXU1$MX$TotW$mag", + -1, + NULL, + NULL, + NULL +}; + +DataSet iedModelds_Inverter_LLN0_dataset1 = { + "Inverter", + "LLN0$dataset1", + 5, + &iedModelds_Inverter_LLN0_dataset1_fcda0, + NULL +}; + +LogicalDevice iedModel_Inverter = { + LogicalDeviceModelType, + "Inverter", + (ModelNode*) &iedModel, + (ModelNode*) &iedModel_Battery, + (ModelNode*) &iedModel_Inverter_LLN0 +}; + +LogicalNode iedModel_Inverter_LLN0 = { + LogicalNodeModelType, + "LLN0", + (ModelNode*) &iedModel_Inverter, + (ModelNode*) &iedModel_Inverter_LPHD1, + (ModelNode*) &iedModel_Inverter_LLN0_Mod, +}; + +DataObject iedModel_Inverter_LLN0_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_Inverter_LLN0, + (ModelNode*) &iedModel_Inverter_LLN0_Beh, + (ModelNode*) &iedModel_Inverter_LLN0_Mod_q, + 0 +}; + +DataAttribute iedModel_Inverter_LLN0_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_LLN0_Mod, + (ModelNode*) &iedModel_Inverter_LLN0_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LLN0_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_LLN0_Mod, + (ModelNode*) &iedModel_Inverter_LLN0_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LLN0_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_Inverter_LLN0_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_LLN0_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_Inverter_LLN0, + (ModelNode*) &iedModel_Inverter_LLN0_Health, + (ModelNode*) &iedModel_Inverter_LLN0_Beh_stVal, + 0 +}; + +DataAttribute iedModel_Inverter_LLN0_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Inverter_LLN0_Beh, + (ModelNode*) &iedModel_Inverter_LLN0_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LLN0_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_LLN0_Beh, + (ModelNode*) &iedModel_Inverter_LLN0_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LLN0_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_LLN0_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_LLN0_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_Inverter_LLN0, + (ModelNode*) &iedModel_Inverter_LLN0_NamPlt, + (ModelNode*) &iedModel_Inverter_LLN0_Health_stVal, + 0 +}; + +DataAttribute iedModel_Inverter_LLN0_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Inverter_LLN0_Health, + (ModelNode*) &iedModel_Inverter_LLN0_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LLN0_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_LLN0_Health, + (ModelNode*) &iedModel_Inverter_LLN0_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LLN0_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_LLN0_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_LLN0_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_Inverter_LLN0, + NULL, + (ModelNode*) &iedModel_Inverter_LLN0_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_Inverter_LLN0_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Inverter_LLN0_NamPlt, + (ModelNode*) &iedModel_Inverter_LLN0_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LLN0_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_Inverter_LLN0_NamPlt, + (ModelNode*) &iedModel_Inverter_LLN0_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LLN0_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_Inverter_LLN0_NamPlt, + (ModelNode*) &iedModel_Inverter_LLN0_NamPlt_configRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LLN0_NamPlt_configRev = { + DataAttributeModelType, + "configRev", + (ModelNode*) &iedModel_Inverter_LLN0_NamPlt, + (ModelNode*) &iedModel_Inverter_LLN0_NamPlt_ldNs, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LLN0_NamPlt_ldNs = { + DataAttributeModelType, + "ldNs", + (ModelNode*) &iedModel_Inverter_LLN0_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +LogicalNode iedModel_Inverter_LPHD1 = { + LogicalNodeModelType, + "LPHD1", + (ModelNode*) &iedModel_Inverter, + (ModelNode*) &iedModel_Inverter_ZINV1, + (ModelNode*) &iedModel_Inverter_LPHD1_PhyNam, +}; + +DataObject iedModel_Inverter_LPHD1_PhyNam = { + DataObjectModelType, + "PhyNam", + (ModelNode*) &iedModel_Inverter_LPHD1, + (ModelNode*) &iedModel_Inverter_LPHD1_PhyHealth, + (ModelNode*) &iedModel_Inverter_LPHD1_PhyNam_vendor, + 0 +}; + +DataAttribute iedModel_Inverter_LPHD1_PhyNam_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Inverter_LPHD1_PhyNam, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_LPHD1_PhyHealth = { + DataObjectModelType, + "PhyHealth", + (ModelNode*) &iedModel_Inverter_LPHD1, + (ModelNode*) &iedModel_Inverter_LPHD1_Proxy, + (ModelNode*) &iedModel_Inverter_LPHD1_PhyHealth_stVal, + 0 +}; + +DataAttribute iedModel_Inverter_LPHD1_PhyHealth_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Inverter_LPHD1_PhyHealth, + (ModelNode*) &iedModel_Inverter_LPHD1_PhyHealth_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LPHD1_PhyHealth_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_LPHD1_PhyHealth, + (ModelNode*) &iedModel_Inverter_LPHD1_PhyHealth_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LPHD1_PhyHealth_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_LPHD1_PhyHealth, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_LPHD1_Proxy = { + DataObjectModelType, + "Proxy", + (ModelNode*) &iedModel_Inverter_LPHD1, + NULL, + (ModelNode*) &iedModel_Inverter_LPHD1_Proxy_stVal, + 0 +}; + +DataAttribute iedModel_Inverter_LPHD1_Proxy_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Inverter_LPHD1_Proxy, + (ModelNode*) &iedModel_Inverter_LPHD1_Proxy_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_BOOLEAN, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LPHD1_Proxy_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_LPHD1_Proxy, + (ModelNode*) &iedModel_Inverter_LPHD1_Proxy_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_LPHD1_Proxy_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_LPHD1_Proxy, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +LogicalNode iedModel_Inverter_ZINV1 = { + LogicalNodeModelType, + "ZINV1", + (ModelNode*) &iedModel_Inverter, + (ModelNode*) &iedModel_Inverter_MMXU1, + (ModelNode*) &iedModel_Inverter_ZINV1_Mod, +}; + +DataObject iedModel_Inverter_ZINV1_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_Inverter_ZINV1, + (ModelNode*) &iedModel_Inverter_ZINV1_Beh, + (ModelNode*) &iedModel_Inverter_ZINV1_Mod_q, + 0 +}; + +DataAttribute iedModel_Inverter_ZINV1_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_ZINV1_Mod, + (ModelNode*) &iedModel_Inverter_ZINV1_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_ZINV1_Mod, + (ModelNode*) &iedModel_Inverter_ZINV1_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_Inverter_ZINV1_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_ZINV1_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_Inverter_ZINV1, + (ModelNode*) &iedModel_Inverter_ZINV1_Health, + (ModelNode*) &iedModel_Inverter_ZINV1_Beh_stVal, + 0 +}; + +DataAttribute iedModel_Inverter_ZINV1_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Inverter_ZINV1_Beh, + (ModelNode*) &iedModel_Inverter_ZINV1_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_ZINV1_Beh, + (ModelNode*) &iedModel_Inverter_ZINV1_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_ZINV1_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_ZINV1_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_Inverter_ZINV1, + (ModelNode*) &iedModel_Inverter_ZINV1_NamPlt, + (ModelNode*) &iedModel_Inverter_ZINV1_Health_stVal, + 0 +}; + +DataAttribute iedModel_Inverter_ZINV1_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Inverter_ZINV1_Health, + (ModelNode*) &iedModel_Inverter_ZINV1_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_ZINV1_Health, + (ModelNode*) &iedModel_Inverter_ZINV1_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_ZINV1_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_ZINV1_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_Inverter_ZINV1, + (ModelNode*) &iedModel_Inverter_ZINV1_WRtg, + (ModelNode*) &iedModel_Inverter_ZINV1_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_Inverter_ZINV1_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Inverter_ZINV1_NamPlt, + (ModelNode*) &iedModel_Inverter_ZINV1_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_Inverter_ZINV1_NamPlt, + (ModelNode*) &iedModel_Inverter_ZINV1_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_Inverter_ZINV1_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_ZINV1_WRtg = { + DataObjectModelType, + "WRtg", + (ModelNode*) &iedModel_Inverter_ZINV1, + (ModelNode*) &iedModel_Inverter_ZINV1_VarRtg, + (ModelNode*) &iedModel_Inverter_ZINV1_WRtg_setMag, + 0 +}; + +DataAttribute iedModel_Inverter_ZINV1_WRtg_setMag = { + DataAttributeModelType, + "setMag", + (ModelNode*) &iedModel_Inverter_ZINV1_WRtg, + (ModelNode*) &iedModel_Inverter_ZINV1_WRtg_units, + (ModelNode*) &iedModel_Inverter_ZINV1_WRtg_setMag_f, + 0, + IEC61850_FC_SP, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_WRtg_setMag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_ZINV1_WRtg_setMag, + NULL, + NULL, + 0, + IEC61850_FC_SP, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_WRtg_units = { + DataAttributeModelType, + "units", + (ModelNode*) &iedModel_Inverter_ZINV1_WRtg, + NULL, + (ModelNode*) &iedModel_Inverter_ZINV1_WRtg_units_SIUnit, + 0, + IEC61850_FC_CF, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_WRtg_units_SIUnit = { + DataAttributeModelType, + "SIUnit", + (ModelNode*) &iedModel_Inverter_ZINV1_WRtg_units, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_ZINV1_VarRtg = { + DataObjectModelType, + "VarRtg", + (ModelNode*) &iedModel_Inverter_ZINV1, + (ModelNode*) &iedModel_Inverter_ZINV1_ACTyp, + (ModelNode*) &iedModel_Inverter_ZINV1_VarRtg_setMag, + 0 +}; + +DataAttribute iedModel_Inverter_ZINV1_VarRtg_setMag = { + DataAttributeModelType, + "setMag", + (ModelNode*) &iedModel_Inverter_ZINV1_VarRtg, + (ModelNode*) &iedModel_Inverter_ZINV1_VarRtg_units, + (ModelNode*) &iedModel_Inverter_ZINV1_VarRtg_setMag_f, + 0, + IEC61850_FC_SP, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_VarRtg_setMag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_ZINV1_VarRtg_setMag, + NULL, + NULL, + 0, + IEC61850_FC_SP, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_VarRtg_units = { + DataAttributeModelType, + "units", + (ModelNode*) &iedModel_Inverter_ZINV1_VarRtg, + NULL, + (ModelNode*) &iedModel_Inverter_ZINV1_VarRtg_units_SIUnit, + 0, + IEC61850_FC_CF, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_VarRtg_units_SIUnit = { + DataAttributeModelType, + "SIUnit", + (ModelNode*) &iedModel_Inverter_ZINV1_VarRtg_units, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_ZINV1_ACTyp = { + DataObjectModelType, + "ACTyp", + (ModelNode*) &iedModel_Inverter_ZINV1, + (ModelNode*) &iedModel_Inverter_ZINV1_OutWSet, + (ModelNode*) &iedModel_Inverter_ZINV1_ACTyp_setVal, + 0 +}; + +DataAttribute iedModel_Inverter_ZINV1_ACTyp_setVal = { + DataAttributeModelType, + "setVal", + (ModelNode*) &iedModel_Inverter_ZINV1_ACTyp, + NULL, + NULL, + 0, + IEC61850_FC_SP, + IEC61850_INT32, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_ZINV1_OutWSet = { + DataObjectModelType, + "OutWSet", + (ModelNode*) &iedModel_Inverter_ZINV1, + (ModelNode*) &iedModel_Inverter_ZINV1_OutVarSet, + (ModelNode*) &iedModel_Inverter_ZINV1_OutWSet_setMag, + 0 +}; + +DataAttribute iedModel_Inverter_ZINV1_OutWSet_setMag = { + DataAttributeModelType, + "setMag", + (ModelNode*) &iedModel_Inverter_ZINV1_OutWSet, + (ModelNode*) &iedModel_Inverter_ZINV1_OutWSet_units, + (ModelNode*) &iedModel_Inverter_ZINV1_OutWSet_setMag_f, + 0, + IEC61850_FC_SP, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_OutWSet_setMag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_ZINV1_OutWSet_setMag, + NULL, + NULL, + 0, + IEC61850_FC_SP, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_OutWSet_units = { + DataAttributeModelType, + "units", + (ModelNode*) &iedModel_Inverter_ZINV1_OutWSet, + NULL, + (ModelNode*) &iedModel_Inverter_ZINV1_OutWSet_units_SIUnit, + 0, + IEC61850_FC_CF, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_OutWSet_units_SIUnit = { + DataAttributeModelType, + "SIUnit", + (ModelNode*) &iedModel_Inverter_ZINV1_OutWSet_units, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_ZINV1_OutVarSet = { + DataObjectModelType, + "OutVarSet", + (ModelNode*) &iedModel_Inverter_ZINV1, + NULL, + (ModelNode*) &iedModel_Inverter_ZINV1_OutVarSet_setMag, + 0 +}; + +DataAttribute iedModel_Inverter_ZINV1_OutVarSet_setMag = { + DataAttributeModelType, + "setMag", + (ModelNode*) &iedModel_Inverter_ZINV1_OutVarSet, + (ModelNode*) &iedModel_Inverter_ZINV1_OutVarSet_units, + (ModelNode*) &iedModel_Inverter_ZINV1_OutVarSet_setMag_f, + 0, + IEC61850_FC_SP, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_OutVarSet_setMag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_ZINV1_OutVarSet_setMag, + NULL, + NULL, + 0, + IEC61850_FC_SP, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_OutVarSet_units = { + DataAttributeModelType, + "units", + (ModelNode*) &iedModel_Inverter_ZINV1_OutVarSet, + NULL, + (ModelNode*) &iedModel_Inverter_ZINV1_OutVarSet_units_SIUnit, + 0, + IEC61850_FC_CF, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_ZINV1_OutVarSet_units_SIUnit = { + DataAttributeModelType, + "SIUnit", + (ModelNode*) &iedModel_Inverter_ZINV1_OutVarSet_units, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +LogicalNode iedModel_Inverter_MMXU1 = { + LogicalNodeModelType, + "MMXU1", + (ModelNode*) &iedModel_Inverter, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_Mod, +}; + +DataObject iedModel_Inverter_MMXU1_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_Inverter_MMXU1, + (ModelNode*) &iedModel_Inverter_MMXU1_Beh, + (ModelNode*) &iedModel_Inverter_MMXU1_Mod_q, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_Mod, + (ModelNode*) &iedModel_Inverter_MMXU1_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_Mod, + (ModelNode*) &iedModel_Inverter_MMXU1_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_Inverter_MMXU1_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_Inverter_MMXU1, + (ModelNode*) &iedModel_Inverter_MMXU1_Health, + (ModelNode*) &iedModel_Inverter_MMXU1_Beh_stVal, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Inverter_MMXU1_Beh, + (ModelNode*) &iedModel_Inverter_MMXU1_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_Beh, + (ModelNode*) &iedModel_Inverter_MMXU1_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_Inverter_MMXU1, + (ModelNode*) &iedModel_Inverter_MMXU1_NamPlt, + (ModelNode*) &iedModel_Inverter_MMXU1_Health_stVal, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Inverter_MMXU1_Health, + (ModelNode*) &iedModel_Inverter_MMXU1_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_Health, + (ModelNode*) &iedModel_Inverter_MMXU1_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_Inverter_MMXU1, + (ModelNode*) &iedModel_Inverter_MMXU1_TotW, + (ModelNode*) &iedModel_Inverter_MMXU1_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Inverter_MMXU1_NamPlt, + (ModelNode*) &iedModel_Inverter_MMXU1_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_Inverter_MMXU1_NamPlt, + (ModelNode*) &iedModel_Inverter_MMXU1_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_Inverter_MMXU1_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_TotW = { + DataObjectModelType, + "TotW", + (ModelNode*) &iedModel_Inverter_MMXU1, + (ModelNode*) &iedModel_Inverter_MMXU1_TotVAr, + (ModelNode*) &iedModel_Inverter_MMXU1_TotW_mag, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_TotW_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_TotW, + (ModelNode*) &iedModel_Inverter_MMXU1_TotW_q, + (ModelNode*) &iedModel_Inverter_MMXU1_TotW_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_TotW_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_TotW_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_TotW_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_TotW, + (ModelNode*) &iedModel_Inverter_MMXU1_TotW_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_TotW_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_TotW, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_TotVAr = { + DataObjectModelType, + "TotVAr", + (ModelNode*) &iedModel_Inverter_MMXU1, + (ModelNode*) &iedModel_Inverter_MMXU1_TotVA, + (ModelNode*) &iedModel_Inverter_MMXU1_TotVAr_mag, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_TotVAr_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_TotVAr, + (ModelNode*) &iedModel_Inverter_MMXU1_TotVAr_q, + (ModelNode*) &iedModel_Inverter_MMXU1_TotVAr_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_TotVAr_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_TotVAr_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_TotVAr_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_TotVAr, + (ModelNode*) &iedModel_Inverter_MMXU1_TotVAr_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_TotVAr_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_TotVAr, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_TotVA = { + DataObjectModelType, + "TotVA", + (ModelNode*) &iedModel_Inverter_MMXU1, + (ModelNode*) &iedModel_Inverter_MMXU1_Hz, + (ModelNode*) &iedModel_Inverter_MMXU1_TotVA_mag, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_TotVA_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_TotVA, + (ModelNode*) &iedModel_Inverter_MMXU1_TotVA_q, + (ModelNode*) &iedModel_Inverter_MMXU1_TotVA_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_TotVA_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_TotVA_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_TotVA_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_TotVA, + (ModelNode*) &iedModel_Inverter_MMXU1_TotVA_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_TotVA_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_TotVA, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_Hz = { + DataObjectModelType, + "Hz", + (ModelNode*) &iedModel_Inverter_MMXU1, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV, + (ModelNode*) &iedModel_Inverter_MMXU1_Hz_mag, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_Hz_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_Hz, + (ModelNode*) &iedModel_Inverter_MMXU1_Hz_q, + (ModelNode*) &iedModel_Inverter_MMXU1_Hz_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_Hz_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_Hz_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_Hz_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_Hz, + (ModelNode*) &iedModel_Inverter_MMXU1_Hz_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_Hz_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_Hz, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_PhV = { + DataObjectModelType, + "PhV", + (ModelNode*) &iedModel_Inverter_MMXU1, + (ModelNode*) &iedModel_Inverter_MMXU1_A, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA, + 0 +}; + +DataObject iedModel_Inverter_MMXU1_PhV_phsA = { + DataObjectModelType, + "phsA", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA_cVal, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA_q, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA_cVal, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_PhV_phsB = { + DataObjectModelType, + "phsB", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB_cVal, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB_q, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB_cVal, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_PhV_phsC = { + DataObjectModelType, + "phsC", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC_cVal, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC_q, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC_cVal, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_PhV_neut = { + DataObjectModelType, + "neut", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut_cVal, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut_q, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut_cVal_mag, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut_cVal, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut_cVal_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut_cVal_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_neut_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut, + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_PhV_neut_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_A = { + DataObjectModelType, + "A", + (ModelNode*) &iedModel_Inverter_MMXU1, + (ModelNode*) &iedModel_Inverter_MMXU1_W, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA, + 0 +}; + +DataObject iedModel_Inverter_MMXU1_A_phsA = { + DataObjectModelType, + "phsA", + (ModelNode*) &iedModel_Inverter_MMXU1_A, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA_cVal, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA_q, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA_cVal_mag, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA_cVal, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA_cVal_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA_cVal_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsA_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsA_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_A_phsB = { + DataObjectModelType, + "phsB", + (ModelNode*) &iedModel_Inverter_MMXU1_A, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB_cVal, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB_q, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB_cVal_mag, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB_cVal, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB_cVal_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB_cVal_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsB_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsB_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_A_phsC = { + DataObjectModelType, + "phsC", + (ModelNode*) &iedModel_Inverter_MMXU1_A, + (ModelNode*) &iedModel_Inverter_MMXU1_A_neut, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC_cVal, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC_q, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC_cVal_mag, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC_cVal, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC_cVal_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC_cVal_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsC_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC, + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_phsC_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_A_neut = { + DataObjectModelType, + "neut", + (ModelNode*) &iedModel_Inverter_MMXU1_A, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_A_neut_cVal, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_Inverter_MMXU1_A_neut, + (ModelNode*) &iedModel_Inverter_MMXU1_A_neut_q, + (ModelNode*) &iedModel_Inverter_MMXU1_A_neut_cVal_mag, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_A_neut_cVal, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_A_neut_cVal_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_A_neut_cVal_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_neut_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_A_neut, + (ModelNode*) &iedModel_Inverter_MMXU1_A_neut_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_A_neut_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_A_neut, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_W = { + DataObjectModelType, + "W", + (ModelNode*) &iedModel_Inverter_MMXU1, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA, + 0 +}; + +DataObject iedModel_Inverter_MMXU1_W_phsA = { + DataObjectModelType, + "phsA", + (ModelNode*) &iedModel_Inverter_MMXU1_W, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA_cVal, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA_q, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA_cVal_mag, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA_cVal, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA_cVal_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA_cVal_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsA_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsA_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_W_phsB = { + DataObjectModelType, + "phsB", + (ModelNode*) &iedModel_Inverter_MMXU1_W, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB_cVal, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB_q, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB_cVal_mag, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB_cVal, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB_cVal_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB_cVal_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsB_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsB_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Inverter_MMXU1_W_phsC = { + DataObjectModelType, + "phsC", + (ModelNode*) &iedModel_Inverter_MMXU1_W, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC_cVal, + 0 +}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC_q, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC_cVal_mag, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC_cVal, + NULL, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC_cVal_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC_cVal_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsC_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC, + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Inverter_MMXU1_W_phsC_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + + +LogicalDevice iedModel_Battery = { + LogicalDeviceModelType, + "Battery", + (ModelNode*) &iedModel, + (ModelNode*) &iedModel_Physical_Measurements, + (ModelNode*) &iedModel_Battery_LLN0 +}; + +LogicalNode iedModel_Battery_LLN0 = { + LogicalNodeModelType, + "LLN0", + (ModelNode*) &iedModel_Battery, + (ModelNode*) &iedModel_Battery_LPHD1, + (ModelNode*) &iedModel_Battery_LLN0_Mod, +}; + +DataObject iedModel_Battery_LLN0_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_Battery_LLN0, + (ModelNode*) &iedModel_Battery_LLN0_Beh, + (ModelNode*) &iedModel_Battery_LLN0_Mod_q, + 0 +}; + +DataAttribute iedModel_Battery_LLN0_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_LLN0_Mod, + (ModelNode*) &iedModel_Battery_LLN0_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_LLN0_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_LLN0_Mod, + (ModelNode*) &iedModel_Battery_LLN0_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_Battery_LLN0_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_Battery_LLN0_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_LLN0_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_Battery_LLN0, + (ModelNode*) &iedModel_Battery_LLN0_Health, + (ModelNode*) &iedModel_Battery_LLN0_Beh_stVal, + 0 +}; + +DataAttribute iedModel_Battery_LLN0_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Battery_LLN0_Beh, + (ModelNode*) &iedModel_Battery_LLN0_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_LLN0_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_LLN0_Beh, + (ModelNode*) &iedModel_Battery_LLN0_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_LLN0_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_LLN0_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_LLN0_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_Battery_LLN0, + (ModelNode*) &iedModel_Battery_LLN0_NamPlt, + (ModelNode*) &iedModel_Battery_LLN0_Health_stVal, + 0 +}; + +DataAttribute iedModel_Battery_LLN0_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Battery_LLN0_Health, + (ModelNode*) &iedModel_Battery_LLN0_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_LLN0_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_LLN0_Health, + (ModelNode*) &iedModel_Battery_LLN0_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_LLN0_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_LLN0_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_LLN0_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_Battery_LLN0, + NULL, + (ModelNode*) &iedModel_Battery_LLN0_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_Battery_LLN0_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Battery_LLN0_NamPlt, + (ModelNode*) &iedModel_Battery_LLN0_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Battery_LLN0_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_Battery_LLN0_NamPlt, + (ModelNode*) &iedModel_Battery_LLN0_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Battery_LLN0_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_Battery_LLN0_NamPlt, + (ModelNode*) &iedModel_Battery_LLN0_NamPlt_configRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Battery_LLN0_NamPlt_configRev = { + DataAttributeModelType, + "configRev", + (ModelNode*) &iedModel_Battery_LLN0_NamPlt, + (ModelNode*) &iedModel_Battery_LLN0_NamPlt_ldNs, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Battery_LLN0_NamPlt_ldNs = { + DataAttributeModelType, + "ldNs", + (ModelNode*) &iedModel_Battery_LLN0_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +LogicalNode iedModel_Battery_LPHD1 = { + LogicalNodeModelType, + "LPHD1", + (ModelNode*) &iedModel_Battery, + (ModelNode*) &iedModel_Battery_ZBAT1, + (ModelNode*) &iedModel_Battery_LPHD1_PhyNam, +}; + +DataObject iedModel_Battery_LPHD1_PhyNam = { + DataObjectModelType, + "PhyNam", + (ModelNode*) &iedModel_Battery_LPHD1, + (ModelNode*) &iedModel_Battery_LPHD1_PhyHealth, + (ModelNode*) &iedModel_Battery_LPHD1_PhyNam_vendor, + 0 +}; + +DataAttribute iedModel_Battery_LPHD1_PhyNam_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Battery_LPHD1_PhyNam, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_LPHD1_PhyHealth = { + DataObjectModelType, + "PhyHealth", + (ModelNode*) &iedModel_Battery_LPHD1, + (ModelNode*) &iedModel_Battery_LPHD1_Proxy, + (ModelNode*) &iedModel_Battery_LPHD1_PhyHealth_stVal, + 0 +}; + +DataAttribute iedModel_Battery_LPHD1_PhyHealth_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Battery_LPHD1_PhyHealth, + (ModelNode*) &iedModel_Battery_LPHD1_PhyHealth_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_LPHD1_PhyHealth_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_LPHD1_PhyHealth, + (ModelNode*) &iedModel_Battery_LPHD1_PhyHealth_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_LPHD1_PhyHealth_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_LPHD1_PhyHealth, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_LPHD1_Proxy = { + DataObjectModelType, + "Proxy", + (ModelNode*) &iedModel_Battery_LPHD1, + NULL, + (ModelNode*) &iedModel_Battery_LPHD1_Proxy_stVal, + 0 +}; + +DataAttribute iedModel_Battery_LPHD1_Proxy_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Battery_LPHD1_Proxy, + (ModelNode*) &iedModel_Battery_LPHD1_Proxy_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_BOOLEAN, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_LPHD1_Proxy_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_LPHD1_Proxy, + (ModelNode*) &iedModel_Battery_LPHD1_Proxy_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_LPHD1_Proxy_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_LPHD1_Proxy, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +LogicalNode iedModel_Battery_ZBAT1 = { + LogicalNodeModelType, + "ZBAT1", + (ModelNode*) &iedModel_Battery, + (ModelNode*) &iedModel_Battery_ZBTC1, + (ModelNode*) &iedModel_Battery_ZBAT1_Mod, +}; + +DataObject iedModel_Battery_ZBAT1_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_Battery_ZBAT1, + (ModelNode*) &iedModel_Battery_ZBAT1_Beh, + (ModelNode*) &iedModel_Battery_ZBAT1_Mod_q, + 0 +}; + +DataAttribute iedModel_Battery_ZBAT1_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_ZBAT1_Mod, + (ModelNode*) &iedModel_Battery_ZBAT1_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_ZBAT1_Mod, + (ModelNode*) &iedModel_Battery_ZBAT1_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_Battery_ZBAT1_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_ZBAT1_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_Battery_ZBAT1, + (ModelNode*) &iedModel_Battery_ZBAT1_Health, + (ModelNode*) &iedModel_Battery_ZBAT1_Beh_stVal, + 0 +}; + +DataAttribute iedModel_Battery_ZBAT1_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Battery_ZBAT1_Beh, + (ModelNode*) &iedModel_Battery_ZBAT1_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_ZBAT1_Beh, + (ModelNode*) &iedModel_Battery_ZBAT1_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_ZBAT1_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_ZBAT1_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_Battery_ZBAT1, + (ModelNode*) &iedModel_Battery_ZBAT1_NamPlt, + (ModelNode*) &iedModel_Battery_ZBAT1_Health_stVal, + 0 +}; + +DataAttribute iedModel_Battery_ZBAT1_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Battery_ZBAT1_Health, + (ModelNode*) &iedModel_Battery_ZBAT1_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_ZBAT1_Health, + (ModelNode*) &iedModel_Battery_ZBAT1_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_ZBAT1_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_ZBAT1_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_Battery_ZBAT1, + (ModelNode*) &iedModel_Battery_ZBAT1_Vol, + (ModelNode*) &iedModel_Battery_ZBAT1_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_Battery_ZBAT1_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Battery_ZBAT1_NamPlt, + (ModelNode*) &iedModel_Battery_ZBAT1_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_Battery_ZBAT1_NamPlt, + (ModelNode*) &iedModel_Battery_ZBAT1_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_Battery_ZBAT1_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_ZBAT1_Vol = { + DataObjectModelType, + "Vol", + (ModelNode*) &iedModel_Battery_ZBAT1, + (ModelNode*) &iedModel_Battery_ZBAT1_Amp, + (ModelNode*) &iedModel_Battery_ZBAT1_Vol_mag, + 0 +}; + +DataAttribute iedModel_Battery_ZBAT1_Vol_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Battery_ZBAT1_Vol, + (ModelNode*) &iedModel_Battery_ZBAT1_Vol_q, + (ModelNode*) &iedModel_Battery_ZBAT1_Vol_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_Vol_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Battery_ZBAT1_Vol_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_Vol_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_ZBAT1_Vol, + (ModelNode*) &iedModel_Battery_ZBAT1_Vol_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_Vol_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_ZBAT1_Vol, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_ZBAT1_Amp = { + DataObjectModelType, + "Amp", + (ModelNode*) &iedModel_Battery_ZBAT1, + NULL, + (ModelNode*) &iedModel_Battery_ZBAT1_Amp_mag, + 0 +}; + +DataAttribute iedModel_Battery_ZBAT1_Amp_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Battery_ZBAT1_Amp, + (ModelNode*) &iedModel_Battery_ZBAT1_Amp_q, + (ModelNode*) &iedModel_Battery_ZBAT1_Amp_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_Amp_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Battery_ZBAT1_Amp_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_Amp_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_ZBAT1_Amp, + (ModelNode*) &iedModel_Battery_ZBAT1_Amp_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBAT1_Amp_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_ZBAT1_Amp, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +LogicalNode iedModel_Battery_ZBTC1 = { + LogicalNodeModelType, + "ZBTC1", + (ModelNode*) &iedModel_Battery, + NULL, + (ModelNode*) &iedModel_Battery_ZBTC1_Mod, +}; + +DataObject iedModel_Battery_ZBTC1_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_Battery_ZBTC1, + (ModelNode*) &iedModel_Battery_ZBTC1_Beh, + (ModelNode*) &iedModel_Battery_ZBTC1_Mod_q, + 0 +}; + +DataAttribute iedModel_Battery_ZBTC1_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_ZBTC1_Mod, + (ModelNode*) &iedModel_Battery_ZBTC1_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_ZBTC1_Mod, + (ModelNode*) &iedModel_Battery_ZBTC1_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_Battery_ZBTC1_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_ZBTC1_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_Battery_ZBTC1, + (ModelNode*) &iedModel_Battery_ZBTC1_Health, + (ModelNode*) &iedModel_Battery_ZBTC1_Beh_stVal, + 0 +}; + +DataAttribute iedModel_Battery_ZBTC1_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Battery_ZBTC1_Beh, + (ModelNode*) &iedModel_Battery_ZBTC1_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_ZBTC1_Beh, + (ModelNode*) &iedModel_Battery_ZBTC1_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_ZBTC1_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_ZBTC1_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_Battery_ZBTC1, + (ModelNode*) &iedModel_Battery_ZBTC1_NamPlt, + (ModelNode*) &iedModel_Battery_ZBTC1_Health_stVal, + 0 +}; + +DataAttribute iedModel_Battery_ZBTC1_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Battery_ZBTC1_Health, + (ModelNode*) &iedModel_Battery_ZBTC1_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_ZBTC1_Health, + (ModelNode*) &iedModel_Battery_ZBTC1_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_ZBTC1_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_ZBTC1_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_Battery_ZBTC1, + (ModelNode*) &iedModel_Battery_ZBTC1_BatChaSt, + (ModelNode*) &iedModel_Battery_ZBTC1_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_Battery_ZBTC1_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Battery_ZBTC1_NamPlt, + (ModelNode*) &iedModel_Battery_ZBTC1_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_Battery_ZBTC1_NamPlt, + (ModelNode*) &iedModel_Battery_ZBTC1_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_Battery_ZBTC1_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_ZBTC1_BatChaSt = { + DataObjectModelType, + "BatChaSt", + (ModelNode*) &iedModel_Battery_ZBTC1, + (ModelNode*) &iedModel_Battery_ZBTC1_BatChaPwr, + NULL, + 0 +}; + +DataObject iedModel_Battery_ZBTC1_BatChaPwr = { + DataObjectModelType, + "BatChaPwr", + (ModelNode*) &iedModel_Battery_ZBTC1, + (ModelNode*) &iedModel_Battery_ZBTC1_BatChaMod, + NULL, + 0 +}; + +DataObject iedModel_Battery_ZBTC1_BatChaMod = { + DataObjectModelType, + "BatChaMod", + (ModelNode*) &iedModel_Battery_ZBTC1, + (ModelNode*) &iedModel_Battery_ZBTC1_ChaV, + NULL, + 0 +}; + +DataObject iedModel_Battery_ZBTC1_ChaV = { + DataObjectModelType, + "ChaV", + (ModelNode*) &iedModel_Battery_ZBTC1, + (ModelNode*) &iedModel_Battery_ZBTC1_ChaA, + (ModelNode*) &iedModel_Battery_ZBTC1_ChaV_mag, + 0 +}; + +DataAttribute iedModel_Battery_ZBTC1_ChaV_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Battery_ZBTC1_ChaV, + (ModelNode*) &iedModel_Battery_ZBTC1_ChaV_q, + (ModelNode*) &iedModel_Battery_ZBTC1_ChaV_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_ChaV_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Battery_ZBTC1_ChaV_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_ChaV_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_ZBTC1_ChaV, + (ModelNode*) &iedModel_Battery_ZBTC1_ChaV_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_ChaV_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_ZBTC1_ChaV, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Battery_ZBTC1_ChaA = { + DataObjectModelType, + "ChaA", + (ModelNode*) &iedModel_Battery_ZBTC1, + NULL, + (ModelNode*) &iedModel_Battery_ZBTC1_ChaA_mag, + 0 +}; + +DataAttribute iedModel_Battery_ZBTC1_ChaA_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_Battery_ZBTC1_ChaA, + (ModelNode*) &iedModel_Battery_ZBTC1_ChaA_q, + (ModelNode*) &iedModel_Battery_ZBTC1_ChaA_mag_f, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_ChaA_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_Battery_ZBTC1_ChaA_mag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_ChaA_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Battery_ZBTC1_ChaA, + (ModelNode*) &iedModel_Battery_ZBTC1_ChaA_t, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Battery_ZBTC1_ChaA_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Battery_ZBTC1_ChaA, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + + +LogicalDevice iedModel_Physical_Measurements = { + LogicalDeviceModelType, + "Physical_Measurements", + (ModelNode*) &iedModel, + NULL, + (ModelNode*) &iedModel_Physical_Measurements_LLN0 +}; + +LogicalNode iedModel_Physical_Measurements_LLN0 = { + LogicalNodeModelType, + "LLN0", + (ModelNode*) &iedModel_Physical_Measurements, + (ModelNode*) &iedModel_Physical_Measurements_LPHD1, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Mod, +}; + +DataObject iedModel_Physical_Measurements_LLN0_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_Physical_Measurements_LLN0, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Beh, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Mod_q, + 0 +}; + +DataAttribute iedModel_Physical_Measurements_LLN0_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Mod, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LLN0_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Mod, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Mod_ctlModel, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LLN0_Mod_ctlModel = { + DataAttributeModelType, + "ctlModel", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Mod, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_ENUMERATED, + 0, + NULL, + 0}; + +DataObject iedModel_Physical_Measurements_LLN0_Beh = { + DataObjectModelType, + "Beh", + (ModelNode*) &iedModel_Physical_Measurements_LLN0, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Health, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Beh_stVal, + 0 +}; + +DataAttribute iedModel_Physical_Measurements_LLN0_Beh_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Beh, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Beh_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LLN0_Beh_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Beh, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Beh_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LLN0_Beh_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Beh, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Physical_Measurements_LLN0_Health = { + DataObjectModelType, + "Health", + (ModelNode*) &iedModel_Physical_Measurements_LLN0, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_NamPlt, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Health_stVal, + 0 +}; + +DataAttribute iedModel_Physical_Measurements_LLN0_Health_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Health, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Health_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LLN0_Health_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Health, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Health_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LLN0_Health_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_Health, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Physical_Measurements_LLN0_NamPlt = { + DataObjectModelType, + "NamPlt", + (ModelNode*) &iedModel_Physical_Measurements_LLN0, + NULL, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_NamPlt_vendor, + 0 +}; + +DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_NamPlt, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_NamPlt_swRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_swRev = { + DataAttributeModelType, + "swRev", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_NamPlt, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_NamPlt_d, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_d = { + DataAttributeModelType, + "d", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_NamPlt, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_NamPlt_configRev, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_configRev = { + DataAttributeModelType, + "configRev", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_NamPlt, + (ModelNode*) &iedModel_Physical_Measurements_LLN0_NamPlt_ldNs, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_ldNs = { + DataAttributeModelType, + "ldNs", + (ModelNode*) &iedModel_Physical_Measurements_LLN0_NamPlt, + NULL, + NULL, + 0, + IEC61850_FC_EX, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +LogicalNode iedModel_Physical_Measurements_LPHD1 = { + LogicalNodeModelType, + "LPHD1", + (ModelNode*) &iedModel_Physical_Measurements, + NULL, + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_PhyNam, +}; + +DataObject iedModel_Physical_Measurements_LPHD1_PhyNam = { + DataObjectModelType, + "PhyNam", + (ModelNode*) &iedModel_Physical_Measurements_LPHD1, + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_PhyHealth, + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_PhyNam_vendor, + 0 +}; + +DataAttribute iedModel_Physical_Measurements_LPHD1_PhyNam_vendor = { + DataAttributeModelType, + "vendor", + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_PhyNam, + NULL, + NULL, + 0, + IEC61850_FC_DC, + IEC61850_VISIBLE_STRING_255, + 0, + NULL, + 0}; + +DataObject iedModel_Physical_Measurements_LPHD1_PhyHealth = { + DataObjectModelType, + "PhyHealth", + (ModelNode*) &iedModel_Physical_Measurements_LPHD1, + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_Proxy, + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_PhyHealth_stVal, + 0 +}; + +DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_PhyHealth, + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_PhyHealth_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_PhyHealth, + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_PhyHealth_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_PhyHealth, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_Physical_Measurements_LPHD1_Proxy = { + DataObjectModelType, + "Proxy", + (ModelNode*) &iedModel_Physical_Measurements_LPHD1, + NULL, + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_Proxy_stVal, + 0 +}; + +DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_Proxy, + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_Proxy_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_BOOLEAN, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_Proxy, + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_Proxy_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_Physical_Measurements_LPHD1_Proxy, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +extern ReportControlBlock iedModel_Inverter_LLN0_report0; + +ReportControlBlock iedModel_Inverter_LLN0_report0 = {&iedModel_Inverter_LLN0, "rcb101", "ID", false, "dataset1", 0, 19, 32, 0, 0, NULL}; + + + + + + + +IedModel iedModel = { + "ied1", + &iedModel_Inverter, + &iedModelds_Inverter_LLN0_dataset1, + &iedModel_Inverter_LLN0_report0, + NULL, + NULL, + NULL, + NULL, + NULL, + initializeValues +}; + +static void +initializeValues() +{ + +iedModel_Inverter_LLN0_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_Inverter_ZINV1_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_Inverter_MMXU1_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_Battery_LLN0_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_Battery_ZBAT1_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_Battery_ZBTC1_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); + +iedModel_Physical_Measurements_LLN0_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0); +} diff --git a/examples/server_example_write_handler/static_model.h b/examples/server_example_write_handler/static_model.h new file mode 100644 index 0000000..34623f8 --- /dev/null +++ b/examples/server_example_write_handler/static_model.h @@ -0,0 +1,609 @@ +/* + * static_model.h + * + * automatically generated from complexModel.icd + */ + +#ifndef STATIC_MODEL_H_ +#define STATIC_MODEL_H_ + +#include +#include "iec61850_model.h" + +extern IedModel iedModel; +extern LogicalDevice iedModel_Inverter; +extern LogicalNode iedModel_Inverter_LLN0; +extern DataObject iedModel_Inverter_LLN0_Mod; +extern DataAttribute iedModel_Inverter_LLN0_Mod_q; +extern DataAttribute iedModel_Inverter_LLN0_Mod_t; +extern DataAttribute iedModel_Inverter_LLN0_Mod_ctlModel; +extern DataObject iedModel_Inverter_LLN0_Beh; +extern DataAttribute iedModel_Inverter_LLN0_Beh_stVal; +extern DataAttribute iedModel_Inverter_LLN0_Beh_q; +extern DataAttribute iedModel_Inverter_LLN0_Beh_t; +extern DataObject iedModel_Inverter_LLN0_Health; +extern DataAttribute iedModel_Inverter_LLN0_Health_stVal; +extern DataAttribute iedModel_Inverter_LLN0_Health_q; +extern DataAttribute iedModel_Inverter_LLN0_Health_t; +extern DataObject iedModel_Inverter_LLN0_NamPlt; +extern DataAttribute iedModel_Inverter_LLN0_NamPlt_vendor; +extern DataAttribute iedModel_Inverter_LLN0_NamPlt_swRev; +extern DataAttribute iedModel_Inverter_LLN0_NamPlt_d; +extern DataAttribute iedModel_Inverter_LLN0_NamPlt_configRev; +extern DataAttribute iedModel_Inverter_LLN0_NamPlt_ldNs; +extern LogicalNode iedModel_Inverter_LPHD1; +extern DataObject iedModel_Inverter_LPHD1_PhyNam; +extern DataAttribute iedModel_Inverter_LPHD1_PhyNam_vendor; +extern DataObject iedModel_Inverter_LPHD1_PhyHealth; +extern DataAttribute iedModel_Inverter_LPHD1_PhyHealth_stVal; +extern DataAttribute iedModel_Inverter_LPHD1_PhyHealth_q; +extern DataAttribute iedModel_Inverter_LPHD1_PhyHealth_t; +extern DataObject iedModel_Inverter_LPHD1_Proxy; +extern DataAttribute iedModel_Inverter_LPHD1_Proxy_stVal; +extern DataAttribute iedModel_Inverter_LPHD1_Proxy_q; +extern DataAttribute iedModel_Inverter_LPHD1_Proxy_t; +extern LogicalNode iedModel_Inverter_ZINV1; +extern DataObject iedModel_Inverter_ZINV1_Mod; +extern DataAttribute iedModel_Inverter_ZINV1_Mod_q; +extern DataAttribute iedModel_Inverter_ZINV1_Mod_t; +extern DataAttribute iedModel_Inverter_ZINV1_Mod_ctlModel; +extern DataObject iedModel_Inverter_ZINV1_Beh; +extern DataAttribute iedModel_Inverter_ZINV1_Beh_stVal; +extern DataAttribute iedModel_Inverter_ZINV1_Beh_q; +extern DataAttribute iedModel_Inverter_ZINV1_Beh_t; +extern DataObject iedModel_Inverter_ZINV1_Health; +extern DataAttribute iedModel_Inverter_ZINV1_Health_stVal; +extern DataAttribute iedModel_Inverter_ZINV1_Health_q; +extern DataAttribute iedModel_Inverter_ZINV1_Health_t; +extern DataObject iedModel_Inverter_ZINV1_NamPlt; +extern DataAttribute iedModel_Inverter_ZINV1_NamPlt_vendor; +extern DataAttribute iedModel_Inverter_ZINV1_NamPlt_swRev; +extern DataAttribute iedModel_Inverter_ZINV1_NamPlt_d; +extern DataObject iedModel_Inverter_ZINV1_WRtg; +extern DataAttribute iedModel_Inverter_ZINV1_WRtg_setMag; +extern DataAttribute iedModel_Inverter_ZINV1_WRtg_setMag_f; +extern DataAttribute iedModel_Inverter_ZINV1_WRtg_units; +extern DataAttribute iedModel_Inverter_ZINV1_WRtg_units_SIUnit; +extern DataObject iedModel_Inverter_ZINV1_VarRtg; +extern DataAttribute iedModel_Inverter_ZINV1_VarRtg_setMag; +extern DataAttribute iedModel_Inverter_ZINV1_VarRtg_setMag_f; +extern DataAttribute iedModel_Inverter_ZINV1_VarRtg_units; +extern DataAttribute iedModel_Inverter_ZINV1_VarRtg_units_SIUnit; +extern DataObject iedModel_Inverter_ZINV1_ACTyp; +extern DataAttribute iedModel_Inverter_ZINV1_ACTyp_setVal; +extern DataObject iedModel_Inverter_ZINV1_OutWSet; +extern DataAttribute iedModel_Inverter_ZINV1_OutWSet_setMag; +extern DataAttribute iedModel_Inverter_ZINV1_OutWSet_setMag_f; +extern DataAttribute iedModel_Inverter_ZINV1_OutWSet_units; +extern DataAttribute iedModel_Inverter_ZINV1_OutWSet_units_SIUnit; +extern DataObject iedModel_Inverter_ZINV1_OutVarSet; +extern DataAttribute iedModel_Inverter_ZINV1_OutVarSet_setMag; +extern DataAttribute iedModel_Inverter_ZINV1_OutVarSet_setMag_f; +extern DataAttribute iedModel_Inverter_ZINV1_OutVarSet_units; +extern DataAttribute iedModel_Inverter_ZINV1_OutVarSet_units_SIUnit; +extern LogicalNode iedModel_Inverter_MMXU1; +extern DataObject iedModel_Inverter_MMXU1_Mod; +extern DataAttribute iedModel_Inverter_MMXU1_Mod_q; +extern DataAttribute iedModel_Inverter_MMXU1_Mod_t; +extern DataAttribute iedModel_Inverter_MMXU1_Mod_ctlModel; +extern DataObject iedModel_Inverter_MMXU1_Beh; +extern DataAttribute iedModel_Inverter_MMXU1_Beh_stVal; +extern DataAttribute iedModel_Inverter_MMXU1_Beh_q; +extern DataAttribute iedModel_Inverter_MMXU1_Beh_t; +extern DataObject iedModel_Inverter_MMXU1_Health; +extern DataAttribute iedModel_Inverter_MMXU1_Health_stVal; +extern DataAttribute iedModel_Inverter_MMXU1_Health_q; +extern DataAttribute iedModel_Inverter_MMXU1_Health_t; +extern DataObject iedModel_Inverter_MMXU1_NamPlt; +extern DataAttribute iedModel_Inverter_MMXU1_NamPlt_vendor; +extern DataAttribute iedModel_Inverter_MMXU1_NamPlt_swRev; +extern DataAttribute iedModel_Inverter_MMXU1_NamPlt_d; +extern DataObject iedModel_Inverter_MMXU1_TotW; +extern DataAttribute iedModel_Inverter_MMXU1_TotW_mag; +extern DataAttribute iedModel_Inverter_MMXU1_TotW_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_TotW_q; +extern DataAttribute iedModel_Inverter_MMXU1_TotW_t; +extern DataObject iedModel_Inverter_MMXU1_TotVAr; +extern DataAttribute iedModel_Inverter_MMXU1_TotVAr_mag; +extern DataAttribute iedModel_Inverter_MMXU1_TotVAr_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_TotVAr_q; +extern DataAttribute iedModel_Inverter_MMXU1_TotVAr_t; +extern DataObject iedModel_Inverter_MMXU1_TotVA; +extern DataAttribute iedModel_Inverter_MMXU1_TotVA_mag; +extern DataAttribute iedModel_Inverter_MMXU1_TotVA_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_TotVA_q; +extern DataAttribute iedModel_Inverter_MMXU1_TotVA_t; +extern DataObject iedModel_Inverter_MMXU1_Hz; +extern DataAttribute iedModel_Inverter_MMXU1_Hz_mag; +extern DataAttribute iedModel_Inverter_MMXU1_Hz_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_Hz_q; +extern DataAttribute iedModel_Inverter_MMXU1_Hz_t; +extern DataObject iedModel_Inverter_MMXU1_PhV; +extern DataObject iedModel_Inverter_MMXU1_PhV_phsA; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_q; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_t; +extern DataObject iedModel_Inverter_MMXU1_PhV_phsB; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_q; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_t; +extern DataObject iedModel_Inverter_MMXU1_PhV_phsC; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_q; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_t; +extern DataObject iedModel_Inverter_MMXU1_PhV_neut; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal_mag; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_neut_q; +extern DataAttribute iedModel_Inverter_MMXU1_PhV_neut_t; +extern DataObject iedModel_Inverter_MMXU1_A; +extern DataObject iedModel_Inverter_MMXU1_A_phsA; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal_mag; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsA_q; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsA_t; +extern DataObject iedModel_Inverter_MMXU1_A_phsB; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal_mag; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsB_q; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsB_t; +extern DataObject iedModel_Inverter_MMXU1_A_phsC; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal_mag; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsC_q; +extern DataAttribute iedModel_Inverter_MMXU1_A_phsC_t; +extern DataObject iedModel_Inverter_MMXU1_A_neut; +extern DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal; +extern DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal_mag; +extern DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_A_neut_q; +extern DataAttribute iedModel_Inverter_MMXU1_A_neut_t; +extern DataObject iedModel_Inverter_MMXU1_W; +extern DataObject iedModel_Inverter_MMXU1_W_phsA; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal_mag; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsA_q; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsA_t; +extern DataObject iedModel_Inverter_MMXU1_W_phsB; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal_mag; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsB_q; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsB_t; +extern DataObject iedModel_Inverter_MMXU1_W_phsC; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal_mag; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal_mag_f; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsC_q; +extern DataAttribute iedModel_Inverter_MMXU1_W_phsC_t; +extern LogicalDevice iedModel_Battery; +extern LogicalNode iedModel_Battery_LLN0; +extern DataObject iedModel_Battery_LLN0_Mod; +extern DataAttribute iedModel_Battery_LLN0_Mod_q; +extern DataAttribute iedModel_Battery_LLN0_Mod_t; +extern DataAttribute iedModel_Battery_LLN0_Mod_ctlModel; +extern DataObject iedModel_Battery_LLN0_Beh; +extern DataAttribute iedModel_Battery_LLN0_Beh_stVal; +extern DataAttribute iedModel_Battery_LLN0_Beh_q; +extern DataAttribute iedModel_Battery_LLN0_Beh_t; +extern DataObject iedModel_Battery_LLN0_Health; +extern DataAttribute iedModel_Battery_LLN0_Health_stVal; +extern DataAttribute iedModel_Battery_LLN0_Health_q; +extern DataAttribute iedModel_Battery_LLN0_Health_t; +extern DataObject iedModel_Battery_LLN0_NamPlt; +extern DataAttribute iedModel_Battery_LLN0_NamPlt_vendor; +extern DataAttribute iedModel_Battery_LLN0_NamPlt_swRev; +extern DataAttribute iedModel_Battery_LLN0_NamPlt_d; +extern DataAttribute iedModel_Battery_LLN0_NamPlt_configRev; +extern DataAttribute iedModel_Battery_LLN0_NamPlt_ldNs; +extern LogicalNode iedModel_Battery_LPHD1; +extern DataObject iedModel_Battery_LPHD1_PhyNam; +extern DataAttribute iedModel_Battery_LPHD1_PhyNam_vendor; +extern DataObject iedModel_Battery_LPHD1_PhyHealth; +extern DataAttribute iedModel_Battery_LPHD1_PhyHealth_stVal; +extern DataAttribute iedModel_Battery_LPHD1_PhyHealth_q; +extern DataAttribute iedModel_Battery_LPHD1_PhyHealth_t; +extern DataObject iedModel_Battery_LPHD1_Proxy; +extern DataAttribute iedModel_Battery_LPHD1_Proxy_stVal; +extern DataAttribute iedModel_Battery_LPHD1_Proxy_q; +extern DataAttribute iedModel_Battery_LPHD1_Proxy_t; +extern LogicalNode iedModel_Battery_ZBAT1; +extern DataObject iedModel_Battery_ZBAT1_Mod; +extern DataAttribute iedModel_Battery_ZBAT1_Mod_q; +extern DataAttribute iedModel_Battery_ZBAT1_Mod_t; +extern DataAttribute iedModel_Battery_ZBAT1_Mod_ctlModel; +extern DataObject iedModel_Battery_ZBAT1_Beh; +extern DataAttribute iedModel_Battery_ZBAT1_Beh_stVal; +extern DataAttribute iedModel_Battery_ZBAT1_Beh_q; +extern DataAttribute iedModel_Battery_ZBAT1_Beh_t; +extern DataObject iedModel_Battery_ZBAT1_Health; +extern DataAttribute iedModel_Battery_ZBAT1_Health_stVal; +extern DataAttribute iedModel_Battery_ZBAT1_Health_q; +extern DataAttribute iedModel_Battery_ZBAT1_Health_t; +extern DataObject iedModel_Battery_ZBAT1_NamPlt; +extern DataAttribute iedModel_Battery_ZBAT1_NamPlt_vendor; +extern DataAttribute iedModel_Battery_ZBAT1_NamPlt_swRev; +extern DataAttribute iedModel_Battery_ZBAT1_NamPlt_d; +extern DataObject iedModel_Battery_ZBAT1_Vol; +extern DataAttribute iedModel_Battery_ZBAT1_Vol_mag; +extern DataAttribute iedModel_Battery_ZBAT1_Vol_mag_f; +extern DataAttribute iedModel_Battery_ZBAT1_Vol_q; +extern DataAttribute iedModel_Battery_ZBAT1_Vol_t; +extern DataObject iedModel_Battery_ZBAT1_Amp; +extern DataAttribute iedModel_Battery_ZBAT1_Amp_mag; +extern DataAttribute iedModel_Battery_ZBAT1_Amp_mag_f; +extern DataAttribute iedModel_Battery_ZBAT1_Amp_q; +extern DataAttribute iedModel_Battery_ZBAT1_Amp_t; +extern LogicalNode iedModel_Battery_ZBTC1; +extern DataObject iedModel_Battery_ZBTC1_Mod; +extern DataAttribute iedModel_Battery_ZBTC1_Mod_q; +extern DataAttribute iedModel_Battery_ZBTC1_Mod_t; +extern DataAttribute iedModel_Battery_ZBTC1_Mod_ctlModel; +extern DataObject iedModel_Battery_ZBTC1_Beh; +extern DataAttribute iedModel_Battery_ZBTC1_Beh_stVal; +extern DataAttribute iedModel_Battery_ZBTC1_Beh_q; +extern DataAttribute iedModel_Battery_ZBTC1_Beh_t; +extern DataObject iedModel_Battery_ZBTC1_Health; +extern DataAttribute iedModel_Battery_ZBTC1_Health_stVal; +extern DataAttribute iedModel_Battery_ZBTC1_Health_q; +extern DataAttribute iedModel_Battery_ZBTC1_Health_t; +extern DataObject iedModel_Battery_ZBTC1_NamPlt; +extern DataAttribute iedModel_Battery_ZBTC1_NamPlt_vendor; +extern DataAttribute iedModel_Battery_ZBTC1_NamPlt_swRev; +extern DataAttribute iedModel_Battery_ZBTC1_NamPlt_d; +extern DataObject iedModel_Battery_ZBTC1_BatChaSt; +extern DataObject iedModel_Battery_ZBTC1_BatChaPwr; +extern DataObject iedModel_Battery_ZBTC1_BatChaMod; +extern DataObject iedModel_Battery_ZBTC1_ChaV; +extern DataAttribute iedModel_Battery_ZBTC1_ChaV_mag; +extern DataAttribute iedModel_Battery_ZBTC1_ChaV_mag_f; +extern DataAttribute iedModel_Battery_ZBTC1_ChaV_q; +extern DataAttribute iedModel_Battery_ZBTC1_ChaV_t; +extern DataObject iedModel_Battery_ZBTC1_ChaA; +extern DataAttribute iedModel_Battery_ZBTC1_ChaA_mag; +extern DataAttribute iedModel_Battery_ZBTC1_ChaA_mag_f; +extern DataAttribute iedModel_Battery_ZBTC1_ChaA_q; +extern DataAttribute iedModel_Battery_ZBTC1_ChaA_t; +extern LogicalDevice iedModel_Physical_Measurements; +extern LogicalNode iedModel_Physical_Measurements_LLN0; +extern DataObject iedModel_Physical_Measurements_LLN0_Mod; +extern DataAttribute iedModel_Physical_Measurements_LLN0_Mod_q; +extern DataAttribute iedModel_Physical_Measurements_LLN0_Mod_t; +extern DataAttribute iedModel_Physical_Measurements_LLN0_Mod_ctlModel; +extern DataObject iedModel_Physical_Measurements_LLN0_Beh; +extern DataAttribute iedModel_Physical_Measurements_LLN0_Beh_stVal; +extern DataAttribute iedModel_Physical_Measurements_LLN0_Beh_q; +extern DataAttribute iedModel_Physical_Measurements_LLN0_Beh_t; +extern DataObject iedModel_Physical_Measurements_LLN0_Health; +extern DataAttribute iedModel_Physical_Measurements_LLN0_Health_stVal; +extern DataAttribute iedModel_Physical_Measurements_LLN0_Health_q; +extern DataAttribute iedModel_Physical_Measurements_LLN0_Health_t; +extern DataObject iedModel_Physical_Measurements_LLN0_NamPlt; +extern DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_vendor; +extern DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_swRev; +extern DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_d; +extern DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_configRev; +extern DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_ldNs; +extern LogicalNode iedModel_Physical_Measurements_LPHD1; +extern DataObject iedModel_Physical_Measurements_LPHD1_PhyNam; +extern DataAttribute iedModel_Physical_Measurements_LPHD1_PhyNam_vendor; +extern DataObject iedModel_Physical_Measurements_LPHD1_PhyHealth; +extern DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_stVal; +extern DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_q; +extern DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_t; +extern DataObject iedModel_Physical_Measurements_LPHD1_Proxy; +extern DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_stVal; +extern DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_q; +extern DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_t; + + + +#define IEDMODEL_Inverter (&iedModel_Inverter) +#define IEDMODEL_Inverter_LLN0 (&iedModel_Inverter_LLN0) +#define IEDMODEL_Inverter_LLN0_Mod (&iedModel_Inverter_LLN0_Mod) +#define IEDMODEL_Inverter_LLN0_Mod_q (&iedModel_Inverter_LLN0_Mod_q) +#define IEDMODEL_Inverter_LLN0_Mod_t (&iedModel_Inverter_LLN0_Mod_t) +#define IEDMODEL_Inverter_LLN0_Mod_ctlModel (&iedModel_Inverter_LLN0_Mod_ctlModel) +#define IEDMODEL_Inverter_LLN0_Beh (&iedModel_Inverter_LLN0_Beh) +#define IEDMODEL_Inverter_LLN0_Beh_stVal (&iedModel_Inverter_LLN0_Beh_stVal) +#define IEDMODEL_Inverter_LLN0_Beh_q (&iedModel_Inverter_LLN0_Beh_q) +#define IEDMODEL_Inverter_LLN0_Beh_t (&iedModel_Inverter_LLN0_Beh_t) +#define IEDMODEL_Inverter_LLN0_Health (&iedModel_Inverter_LLN0_Health) +#define IEDMODEL_Inverter_LLN0_Health_stVal (&iedModel_Inverter_LLN0_Health_stVal) +#define IEDMODEL_Inverter_LLN0_Health_q (&iedModel_Inverter_LLN0_Health_q) +#define IEDMODEL_Inverter_LLN0_Health_t (&iedModel_Inverter_LLN0_Health_t) +#define IEDMODEL_Inverter_LLN0_NamPlt (&iedModel_Inverter_LLN0_NamPlt) +#define IEDMODEL_Inverter_LLN0_NamPlt_vendor (&iedModel_Inverter_LLN0_NamPlt_vendor) +#define IEDMODEL_Inverter_LLN0_NamPlt_swRev (&iedModel_Inverter_LLN0_NamPlt_swRev) +#define IEDMODEL_Inverter_LLN0_NamPlt_d (&iedModel_Inverter_LLN0_NamPlt_d) +#define IEDMODEL_Inverter_LLN0_NamPlt_configRev (&iedModel_Inverter_LLN0_NamPlt_configRev) +#define IEDMODEL_Inverter_LLN0_NamPlt_ldNs (&iedModel_Inverter_LLN0_NamPlt_ldNs) +#define IEDMODEL_Inverter_LPHD1 (&iedModel_Inverter_LPHD1) +#define IEDMODEL_Inverter_LPHD1_PhyNam (&iedModel_Inverter_LPHD1_PhyNam) +#define IEDMODEL_Inverter_LPHD1_PhyNam_vendor (&iedModel_Inverter_LPHD1_PhyNam_vendor) +#define IEDMODEL_Inverter_LPHD1_PhyHealth (&iedModel_Inverter_LPHD1_PhyHealth) +#define IEDMODEL_Inverter_LPHD1_PhyHealth_stVal (&iedModel_Inverter_LPHD1_PhyHealth_stVal) +#define IEDMODEL_Inverter_LPHD1_PhyHealth_q (&iedModel_Inverter_LPHD1_PhyHealth_q) +#define IEDMODEL_Inverter_LPHD1_PhyHealth_t (&iedModel_Inverter_LPHD1_PhyHealth_t) +#define IEDMODEL_Inverter_LPHD1_Proxy (&iedModel_Inverter_LPHD1_Proxy) +#define IEDMODEL_Inverter_LPHD1_Proxy_stVal (&iedModel_Inverter_LPHD1_Proxy_stVal) +#define IEDMODEL_Inverter_LPHD1_Proxy_q (&iedModel_Inverter_LPHD1_Proxy_q) +#define IEDMODEL_Inverter_LPHD1_Proxy_t (&iedModel_Inverter_LPHD1_Proxy_t) +#define IEDMODEL_Inverter_ZINV1 (&iedModel_Inverter_ZINV1) +#define IEDMODEL_Inverter_ZINV1_Mod (&iedModel_Inverter_ZINV1_Mod) +#define IEDMODEL_Inverter_ZINV1_Mod_q (&iedModel_Inverter_ZINV1_Mod_q) +#define IEDMODEL_Inverter_ZINV1_Mod_t (&iedModel_Inverter_ZINV1_Mod_t) +#define IEDMODEL_Inverter_ZINV1_Mod_ctlModel (&iedModel_Inverter_ZINV1_Mod_ctlModel) +#define IEDMODEL_Inverter_ZINV1_Beh (&iedModel_Inverter_ZINV1_Beh) +#define IEDMODEL_Inverter_ZINV1_Beh_stVal (&iedModel_Inverter_ZINV1_Beh_stVal) +#define IEDMODEL_Inverter_ZINV1_Beh_q (&iedModel_Inverter_ZINV1_Beh_q) +#define IEDMODEL_Inverter_ZINV1_Beh_t (&iedModel_Inverter_ZINV1_Beh_t) +#define IEDMODEL_Inverter_ZINV1_Health (&iedModel_Inverter_ZINV1_Health) +#define IEDMODEL_Inverter_ZINV1_Health_stVal (&iedModel_Inverter_ZINV1_Health_stVal) +#define IEDMODEL_Inverter_ZINV1_Health_q (&iedModel_Inverter_ZINV1_Health_q) +#define IEDMODEL_Inverter_ZINV1_Health_t (&iedModel_Inverter_ZINV1_Health_t) +#define IEDMODEL_Inverter_ZINV1_NamPlt (&iedModel_Inverter_ZINV1_NamPlt) +#define IEDMODEL_Inverter_ZINV1_NamPlt_vendor (&iedModel_Inverter_ZINV1_NamPlt_vendor) +#define IEDMODEL_Inverter_ZINV1_NamPlt_swRev (&iedModel_Inverter_ZINV1_NamPlt_swRev) +#define IEDMODEL_Inverter_ZINV1_NamPlt_d (&iedModel_Inverter_ZINV1_NamPlt_d) +#define IEDMODEL_Inverter_ZINV1_WRtg (&iedModel_Inverter_ZINV1_WRtg) +#define IEDMODEL_Inverter_ZINV1_WRtg_setMag (&iedModel_Inverter_ZINV1_WRtg_setMag) +#define IEDMODEL_Inverter_ZINV1_WRtg_setMag_f (&iedModel_Inverter_ZINV1_WRtg_setMag_f) +#define IEDMODEL_Inverter_ZINV1_WRtg_units (&iedModel_Inverter_ZINV1_WRtg_units) +#define IEDMODEL_Inverter_ZINV1_WRtg_units_SIUnit (&iedModel_Inverter_ZINV1_WRtg_units_SIUnit) +#define IEDMODEL_Inverter_ZINV1_VarRtg (&iedModel_Inverter_ZINV1_VarRtg) +#define IEDMODEL_Inverter_ZINV1_VarRtg_setMag (&iedModel_Inverter_ZINV1_VarRtg_setMag) +#define IEDMODEL_Inverter_ZINV1_VarRtg_setMag_f (&iedModel_Inverter_ZINV1_VarRtg_setMag_f) +#define IEDMODEL_Inverter_ZINV1_VarRtg_units (&iedModel_Inverter_ZINV1_VarRtg_units) +#define IEDMODEL_Inverter_ZINV1_VarRtg_units_SIUnit (&iedModel_Inverter_ZINV1_VarRtg_units_SIUnit) +#define IEDMODEL_Inverter_ZINV1_ACTyp (&iedModel_Inverter_ZINV1_ACTyp) +#define IEDMODEL_Inverter_ZINV1_ACTyp_setVal (&iedModel_Inverter_ZINV1_ACTyp_setVal) +#define IEDMODEL_Inverter_ZINV1_OutWSet (&iedModel_Inverter_ZINV1_OutWSet) +#define IEDMODEL_Inverter_ZINV1_OutWSet_setMag (&iedModel_Inverter_ZINV1_OutWSet_setMag) +#define IEDMODEL_Inverter_ZINV1_OutWSet_setMag_f (&iedModel_Inverter_ZINV1_OutWSet_setMag_f) +#define IEDMODEL_Inverter_ZINV1_OutWSet_units (&iedModel_Inverter_ZINV1_OutWSet_units) +#define IEDMODEL_Inverter_ZINV1_OutWSet_units_SIUnit (&iedModel_Inverter_ZINV1_OutWSet_units_SIUnit) +#define IEDMODEL_Inverter_ZINV1_OutVarSet (&iedModel_Inverter_ZINV1_OutVarSet) +#define IEDMODEL_Inverter_ZINV1_OutVarSet_setMag (&iedModel_Inverter_ZINV1_OutVarSet_setMag) +#define IEDMODEL_Inverter_ZINV1_OutVarSet_setMag_f (&iedModel_Inverter_ZINV1_OutVarSet_setMag_f) +#define IEDMODEL_Inverter_ZINV1_OutVarSet_units (&iedModel_Inverter_ZINV1_OutVarSet_units) +#define IEDMODEL_Inverter_ZINV1_OutVarSet_units_SIUnit (&iedModel_Inverter_ZINV1_OutVarSet_units_SIUnit) +#define IEDMODEL_Inverter_MMXU1 (&iedModel_Inverter_MMXU1) +#define IEDMODEL_Inverter_MMXU1_Mod (&iedModel_Inverter_MMXU1_Mod) +#define IEDMODEL_Inverter_MMXU1_Mod_q (&iedModel_Inverter_MMXU1_Mod_q) +#define IEDMODEL_Inverter_MMXU1_Mod_t (&iedModel_Inverter_MMXU1_Mod_t) +#define IEDMODEL_Inverter_MMXU1_Mod_ctlModel (&iedModel_Inverter_MMXU1_Mod_ctlModel) +#define IEDMODEL_Inverter_MMXU1_Beh (&iedModel_Inverter_MMXU1_Beh) +#define IEDMODEL_Inverter_MMXU1_Beh_stVal (&iedModel_Inverter_MMXU1_Beh_stVal) +#define IEDMODEL_Inverter_MMXU1_Beh_q (&iedModel_Inverter_MMXU1_Beh_q) +#define IEDMODEL_Inverter_MMXU1_Beh_t (&iedModel_Inverter_MMXU1_Beh_t) +#define IEDMODEL_Inverter_MMXU1_Health (&iedModel_Inverter_MMXU1_Health) +#define IEDMODEL_Inverter_MMXU1_Health_stVal (&iedModel_Inverter_MMXU1_Health_stVal) +#define IEDMODEL_Inverter_MMXU1_Health_q (&iedModel_Inverter_MMXU1_Health_q) +#define IEDMODEL_Inverter_MMXU1_Health_t (&iedModel_Inverter_MMXU1_Health_t) +#define IEDMODEL_Inverter_MMXU1_NamPlt (&iedModel_Inverter_MMXU1_NamPlt) +#define IEDMODEL_Inverter_MMXU1_NamPlt_vendor (&iedModel_Inverter_MMXU1_NamPlt_vendor) +#define IEDMODEL_Inverter_MMXU1_NamPlt_swRev (&iedModel_Inverter_MMXU1_NamPlt_swRev) +#define IEDMODEL_Inverter_MMXU1_NamPlt_d (&iedModel_Inverter_MMXU1_NamPlt_d) +#define IEDMODEL_Inverter_MMXU1_TotW (&iedModel_Inverter_MMXU1_TotW) +#define IEDMODEL_Inverter_MMXU1_TotW_mag (&iedModel_Inverter_MMXU1_TotW_mag) +#define IEDMODEL_Inverter_MMXU1_TotW_mag_f (&iedModel_Inverter_MMXU1_TotW_mag_f) +#define IEDMODEL_Inverter_MMXU1_TotW_q (&iedModel_Inverter_MMXU1_TotW_q) +#define IEDMODEL_Inverter_MMXU1_TotW_t (&iedModel_Inverter_MMXU1_TotW_t) +#define IEDMODEL_Inverter_MMXU1_TotVAr (&iedModel_Inverter_MMXU1_TotVAr) +#define IEDMODEL_Inverter_MMXU1_TotVAr_mag (&iedModel_Inverter_MMXU1_TotVAr_mag) +#define IEDMODEL_Inverter_MMXU1_TotVAr_mag_f (&iedModel_Inverter_MMXU1_TotVAr_mag_f) +#define IEDMODEL_Inverter_MMXU1_TotVAr_q (&iedModel_Inverter_MMXU1_TotVAr_q) +#define IEDMODEL_Inverter_MMXU1_TotVAr_t (&iedModel_Inverter_MMXU1_TotVAr_t) +#define IEDMODEL_Inverter_MMXU1_TotVA (&iedModel_Inverter_MMXU1_TotVA) +#define IEDMODEL_Inverter_MMXU1_TotVA_mag (&iedModel_Inverter_MMXU1_TotVA_mag) +#define IEDMODEL_Inverter_MMXU1_TotVA_mag_f (&iedModel_Inverter_MMXU1_TotVA_mag_f) +#define IEDMODEL_Inverter_MMXU1_TotVA_q (&iedModel_Inverter_MMXU1_TotVA_q) +#define IEDMODEL_Inverter_MMXU1_TotVA_t (&iedModel_Inverter_MMXU1_TotVA_t) +#define IEDMODEL_Inverter_MMXU1_Hz (&iedModel_Inverter_MMXU1_Hz) +#define IEDMODEL_Inverter_MMXU1_Hz_mag (&iedModel_Inverter_MMXU1_Hz_mag) +#define IEDMODEL_Inverter_MMXU1_Hz_mag_f (&iedModel_Inverter_MMXU1_Hz_mag_f) +#define IEDMODEL_Inverter_MMXU1_Hz_q (&iedModel_Inverter_MMXU1_Hz_q) +#define IEDMODEL_Inverter_MMXU1_Hz_t (&iedModel_Inverter_MMXU1_Hz_t) +#define IEDMODEL_Inverter_MMXU1_PhV (&iedModel_Inverter_MMXU1_PhV) +#define IEDMODEL_Inverter_MMXU1_PhV_phsA (&iedModel_Inverter_MMXU1_PhV_phsA) +#define IEDMODEL_Inverter_MMXU1_PhV_phsA_cVal (&iedModel_Inverter_MMXU1_PhV_phsA_cVal) +#define IEDMODEL_Inverter_MMXU1_PhV_phsA_cVal_mag (&iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag) +#define IEDMODEL_Inverter_MMXU1_PhV_phsA_cVal_mag_f (&iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag_f) +#define IEDMODEL_Inverter_MMXU1_PhV_phsA_q (&iedModel_Inverter_MMXU1_PhV_phsA_q) +#define IEDMODEL_Inverter_MMXU1_PhV_phsA_t (&iedModel_Inverter_MMXU1_PhV_phsA_t) +#define IEDMODEL_Inverter_MMXU1_PhV_phsB (&iedModel_Inverter_MMXU1_PhV_phsB) +#define IEDMODEL_Inverter_MMXU1_PhV_phsB_cVal (&iedModel_Inverter_MMXU1_PhV_phsB_cVal) +#define IEDMODEL_Inverter_MMXU1_PhV_phsB_cVal_mag (&iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag) +#define IEDMODEL_Inverter_MMXU1_PhV_phsB_cVal_mag_f (&iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag_f) +#define IEDMODEL_Inverter_MMXU1_PhV_phsB_q (&iedModel_Inverter_MMXU1_PhV_phsB_q) +#define IEDMODEL_Inverter_MMXU1_PhV_phsB_t (&iedModel_Inverter_MMXU1_PhV_phsB_t) +#define IEDMODEL_Inverter_MMXU1_PhV_phsC (&iedModel_Inverter_MMXU1_PhV_phsC) +#define IEDMODEL_Inverter_MMXU1_PhV_phsC_cVal (&iedModel_Inverter_MMXU1_PhV_phsC_cVal) +#define IEDMODEL_Inverter_MMXU1_PhV_phsC_cVal_mag (&iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag) +#define IEDMODEL_Inverter_MMXU1_PhV_phsC_cVal_mag_f (&iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag_f) +#define IEDMODEL_Inverter_MMXU1_PhV_phsC_q (&iedModel_Inverter_MMXU1_PhV_phsC_q) +#define IEDMODEL_Inverter_MMXU1_PhV_phsC_t (&iedModel_Inverter_MMXU1_PhV_phsC_t) +#define IEDMODEL_Inverter_MMXU1_PhV_neut (&iedModel_Inverter_MMXU1_PhV_neut) +#define IEDMODEL_Inverter_MMXU1_PhV_neut_cVal (&iedModel_Inverter_MMXU1_PhV_neut_cVal) +#define IEDMODEL_Inverter_MMXU1_PhV_neut_cVal_mag (&iedModel_Inverter_MMXU1_PhV_neut_cVal_mag) +#define IEDMODEL_Inverter_MMXU1_PhV_neut_cVal_mag_f (&iedModel_Inverter_MMXU1_PhV_neut_cVal_mag_f) +#define IEDMODEL_Inverter_MMXU1_PhV_neut_q (&iedModel_Inverter_MMXU1_PhV_neut_q) +#define IEDMODEL_Inverter_MMXU1_PhV_neut_t (&iedModel_Inverter_MMXU1_PhV_neut_t) +#define IEDMODEL_Inverter_MMXU1_A (&iedModel_Inverter_MMXU1_A) +#define IEDMODEL_Inverter_MMXU1_A_phsA (&iedModel_Inverter_MMXU1_A_phsA) +#define IEDMODEL_Inverter_MMXU1_A_phsA_cVal (&iedModel_Inverter_MMXU1_A_phsA_cVal) +#define IEDMODEL_Inverter_MMXU1_A_phsA_cVal_mag (&iedModel_Inverter_MMXU1_A_phsA_cVal_mag) +#define IEDMODEL_Inverter_MMXU1_A_phsA_cVal_mag_f (&iedModel_Inverter_MMXU1_A_phsA_cVal_mag_f) +#define IEDMODEL_Inverter_MMXU1_A_phsA_q (&iedModel_Inverter_MMXU1_A_phsA_q) +#define IEDMODEL_Inverter_MMXU1_A_phsA_t (&iedModel_Inverter_MMXU1_A_phsA_t) +#define IEDMODEL_Inverter_MMXU1_A_phsB (&iedModel_Inverter_MMXU1_A_phsB) +#define IEDMODEL_Inverter_MMXU1_A_phsB_cVal (&iedModel_Inverter_MMXU1_A_phsB_cVal) +#define IEDMODEL_Inverter_MMXU1_A_phsB_cVal_mag (&iedModel_Inverter_MMXU1_A_phsB_cVal_mag) +#define IEDMODEL_Inverter_MMXU1_A_phsB_cVal_mag_f (&iedModel_Inverter_MMXU1_A_phsB_cVal_mag_f) +#define IEDMODEL_Inverter_MMXU1_A_phsB_q (&iedModel_Inverter_MMXU1_A_phsB_q) +#define IEDMODEL_Inverter_MMXU1_A_phsB_t (&iedModel_Inverter_MMXU1_A_phsB_t) +#define IEDMODEL_Inverter_MMXU1_A_phsC (&iedModel_Inverter_MMXU1_A_phsC) +#define IEDMODEL_Inverter_MMXU1_A_phsC_cVal (&iedModel_Inverter_MMXU1_A_phsC_cVal) +#define IEDMODEL_Inverter_MMXU1_A_phsC_cVal_mag (&iedModel_Inverter_MMXU1_A_phsC_cVal_mag) +#define IEDMODEL_Inverter_MMXU1_A_phsC_cVal_mag_f (&iedModel_Inverter_MMXU1_A_phsC_cVal_mag_f) +#define IEDMODEL_Inverter_MMXU1_A_phsC_q (&iedModel_Inverter_MMXU1_A_phsC_q) +#define IEDMODEL_Inverter_MMXU1_A_phsC_t (&iedModel_Inverter_MMXU1_A_phsC_t) +#define IEDMODEL_Inverter_MMXU1_A_neut (&iedModel_Inverter_MMXU1_A_neut) +#define IEDMODEL_Inverter_MMXU1_A_neut_cVal (&iedModel_Inverter_MMXU1_A_neut_cVal) +#define IEDMODEL_Inverter_MMXU1_A_neut_cVal_mag (&iedModel_Inverter_MMXU1_A_neut_cVal_mag) +#define IEDMODEL_Inverter_MMXU1_A_neut_cVal_mag_f (&iedModel_Inverter_MMXU1_A_neut_cVal_mag_f) +#define IEDMODEL_Inverter_MMXU1_A_neut_q (&iedModel_Inverter_MMXU1_A_neut_q) +#define IEDMODEL_Inverter_MMXU1_A_neut_t (&iedModel_Inverter_MMXU1_A_neut_t) +#define IEDMODEL_Inverter_MMXU1_W (&iedModel_Inverter_MMXU1_W) +#define IEDMODEL_Inverter_MMXU1_W_phsA (&iedModel_Inverter_MMXU1_W_phsA) +#define IEDMODEL_Inverter_MMXU1_W_phsA_cVal (&iedModel_Inverter_MMXU1_W_phsA_cVal) +#define IEDMODEL_Inverter_MMXU1_W_phsA_cVal_mag (&iedModel_Inverter_MMXU1_W_phsA_cVal_mag) +#define IEDMODEL_Inverter_MMXU1_W_phsA_cVal_mag_f (&iedModel_Inverter_MMXU1_W_phsA_cVal_mag_f) +#define IEDMODEL_Inverter_MMXU1_W_phsA_q (&iedModel_Inverter_MMXU1_W_phsA_q) +#define IEDMODEL_Inverter_MMXU1_W_phsA_t (&iedModel_Inverter_MMXU1_W_phsA_t) +#define IEDMODEL_Inverter_MMXU1_W_phsB (&iedModel_Inverter_MMXU1_W_phsB) +#define IEDMODEL_Inverter_MMXU1_W_phsB_cVal (&iedModel_Inverter_MMXU1_W_phsB_cVal) +#define IEDMODEL_Inverter_MMXU1_W_phsB_cVal_mag (&iedModel_Inverter_MMXU1_W_phsB_cVal_mag) +#define IEDMODEL_Inverter_MMXU1_W_phsB_cVal_mag_f (&iedModel_Inverter_MMXU1_W_phsB_cVal_mag_f) +#define IEDMODEL_Inverter_MMXU1_W_phsB_q (&iedModel_Inverter_MMXU1_W_phsB_q) +#define IEDMODEL_Inverter_MMXU1_W_phsB_t (&iedModel_Inverter_MMXU1_W_phsB_t) +#define IEDMODEL_Inverter_MMXU1_W_phsC (&iedModel_Inverter_MMXU1_W_phsC) +#define IEDMODEL_Inverter_MMXU1_W_phsC_cVal (&iedModel_Inverter_MMXU1_W_phsC_cVal) +#define IEDMODEL_Inverter_MMXU1_W_phsC_cVal_mag (&iedModel_Inverter_MMXU1_W_phsC_cVal_mag) +#define IEDMODEL_Inverter_MMXU1_W_phsC_cVal_mag_f (&iedModel_Inverter_MMXU1_W_phsC_cVal_mag_f) +#define IEDMODEL_Inverter_MMXU1_W_phsC_q (&iedModel_Inverter_MMXU1_W_phsC_q) +#define IEDMODEL_Inverter_MMXU1_W_phsC_t (&iedModel_Inverter_MMXU1_W_phsC_t) +#define IEDMODEL_Battery (&iedModel_Battery) +#define IEDMODEL_Battery_LLN0 (&iedModel_Battery_LLN0) +#define IEDMODEL_Battery_LLN0_Mod (&iedModel_Battery_LLN0_Mod) +#define IEDMODEL_Battery_LLN0_Mod_q (&iedModel_Battery_LLN0_Mod_q) +#define IEDMODEL_Battery_LLN0_Mod_t (&iedModel_Battery_LLN0_Mod_t) +#define IEDMODEL_Battery_LLN0_Mod_ctlModel (&iedModel_Battery_LLN0_Mod_ctlModel) +#define IEDMODEL_Battery_LLN0_Beh (&iedModel_Battery_LLN0_Beh) +#define IEDMODEL_Battery_LLN0_Beh_stVal (&iedModel_Battery_LLN0_Beh_stVal) +#define IEDMODEL_Battery_LLN0_Beh_q (&iedModel_Battery_LLN0_Beh_q) +#define IEDMODEL_Battery_LLN0_Beh_t (&iedModel_Battery_LLN0_Beh_t) +#define IEDMODEL_Battery_LLN0_Health (&iedModel_Battery_LLN0_Health) +#define IEDMODEL_Battery_LLN0_Health_stVal (&iedModel_Battery_LLN0_Health_stVal) +#define IEDMODEL_Battery_LLN0_Health_q (&iedModel_Battery_LLN0_Health_q) +#define IEDMODEL_Battery_LLN0_Health_t (&iedModel_Battery_LLN0_Health_t) +#define IEDMODEL_Battery_LLN0_NamPlt (&iedModel_Battery_LLN0_NamPlt) +#define IEDMODEL_Battery_LLN0_NamPlt_vendor (&iedModel_Battery_LLN0_NamPlt_vendor) +#define IEDMODEL_Battery_LLN0_NamPlt_swRev (&iedModel_Battery_LLN0_NamPlt_swRev) +#define IEDMODEL_Battery_LLN0_NamPlt_d (&iedModel_Battery_LLN0_NamPlt_d) +#define IEDMODEL_Battery_LLN0_NamPlt_configRev (&iedModel_Battery_LLN0_NamPlt_configRev) +#define IEDMODEL_Battery_LLN0_NamPlt_ldNs (&iedModel_Battery_LLN0_NamPlt_ldNs) +#define IEDMODEL_Battery_LPHD1 (&iedModel_Battery_LPHD1) +#define IEDMODEL_Battery_LPHD1_PhyNam (&iedModel_Battery_LPHD1_PhyNam) +#define IEDMODEL_Battery_LPHD1_PhyNam_vendor (&iedModel_Battery_LPHD1_PhyNam_vendor) +#define IEDMODEL_Battery_LPHD1_PhyHealth (&iedModel_Battery_LPHD1_PhyHealth) +#define IEDMODEL_Battery_LPHD1_PhyHealth_stVal (&iedModel_Battery_LPHD1_PhyHealth_stVal) +#define IEDMODEL_Battery_LPHD1_PhyHealth_q (&iedModel_Battery_LPHD1_PhyHealth_q) +#define IEDMODEL_Battery_LPHD1_PhyHealth_t (&iedModel_Battery_LPHD1_PhyHealth_t) +#define IEDMODEL_Battery_LPHD1_Proxy (&iedModel_Battery_LPHD1_Proxy) +#define IEDMODEL_Battery_LPHD1_Proxy_stVal (&iedModel_Battery_LPHD1_Proxy_stVal) +#define IEDMODEL_Battery_LPHD1_Proxy_q (&iedModel_Battery_LPHD1_Proxy_q) +#define IEDMODEL_Battery_LPHD1_Proxy_t (&iedModel_Battery_LPHD1_Proxy_t) +#define IEDMODEL_Battery_ZBAT1 (&iedModel_Battery_ZBAT1) +#define IEDMODEL_Battery_ZBAT1_Mod (&iedModel_Battery_ZBAT1_Mod) +#define IEDMODEL_Battery_ZBAT1_Mod_q (&iedModel_Battery_ZBAT1_Mod_q) +#define IEDMODEL_Battery_ZBAT1_Mod_t (&iedModel_Battery_ZBAT1_Mod_t) +#define IEDMODEL_Battery_ZBAT1_Mod_ctlModel (&iedModel_Battery_ZBAT1_Mod_ctlModel) +#define IEDMODEL_Battery_ZBAT1_Beh (&iedModel_Battery_ZBAT1_Beh) +#define IEDMODEL_Battery_ZBAT1_Beh_stVal (&iedModel_Battery_ZBAT1_Beh_stVal) +#define IEDMODEL_Battery_ZBAT1_Beh_q (&iedModel_Battery_ZBAT1_Beh_q) +#define IEDMODEL_Battery_ZBAT1_Beh_t (&iedModel_Battery_ZBAT1_Beh_t) +#define IEDMODEL_Battery_ZBAT1_Health (&iedModel_Battery_ZBAT1_Health) +#define IEDMODEL_Battery_ZBAT1_Health_stVal (&iedModel_Battery_ZBAT1_Health_stVal) +#define IEDMODEL_Battery_ZBAT1_Health_q (&iedModel_Battery_ZBAT1_Health_q) +#define IEDMODEL_Battery_ZBAT1_Health_t (&iedModel_Battery_ZBAT1_Health_t) +#define IEDMODEL_Battery_ZBAT1_NamPlt (&iedModel_Battery_ZBAT1_NamPlt) +#define IEDMODEL_Battery_ZBAT1_NamPlt_vendor (&iedModel_Battery_ZBAT1_NamPlt_vendor) +#define IEDMODEL_Battery_ZBAT1_NamPlt_swRev (&iedModel_Battery_ZBAT1_NamPlt_swRev) +#define IEDMODEL_Battery_ZBAT1_NamPlt_d (&iedModel_Battery_ZBAT1_NamPlt_d) +#define IEDMODEL_Battery_ZBAT1_Vol (&iedModel_Battery_ZBAT1_Vol) +#define IEDMODEL_Battery_ZBAT1_Vol_mag (&iedModel_Battery_ZBAT1_Vol_mag) +#define IEDMODEL_Battery_ZBAT1_Vol_mag_f (&iedModel_Battery_ZBAT1_Vol_mag_f) +#define IEDMODEL_Battery_ZBAT1_Vol_q (&iedModel_Battery_ZBAT1_Vol_q) +#define IEDMODEL_Battery_ZBAT1_Vol_t (&iedModel_Battery_ZBAT1_Vol_t) +#define IEDMODEL_Battery_ZBAT1_Amp (&iedModel_Battery_ZBAT1_Amp) +#define IEDMODEL_Battery_ZBAT1_Amp_mag (&iedModel_Battery_ZBAT1_Amp_mag) +#define IEDMODEL_Battery_ZBAT1_Amp_mag_f (&iedModel_Battery_ZBAT1_Amp_mag_f) +#define IEDMODEL_Battery_ZBAT1_Amp_q (&iedModel_Battery_ZBAT1_Amp_q) +#define IEDMODEL_Battery_ZBAT1_Amp_t (&iedModel_Battery_ZBAT1_Amp_t) +#define IEDMODEL_Battery_ZBTC1 (&iedModel_Battery_ZBTC1) +#define IEDMODEL_Battery_ZBTC1_Mod (&iedModel_Battery_ZBTC1_Mod) +#define IEDMODEL_Battery_ZBTC1_Mod_q (&iedModel_Battery_ZBTC1_Mod_q) +#define IEDMODEL_Battery_ZBTC1_Mod_t (&iedModel_Battery_ZBTC1_Mod_t) +#define IEDMODEL_Battery_ZBTC1_Mod_ctlModel (&iedModel_Battery_ZBTC1_Mod_ctlModel) +#define IEDMODEL_Battery_ZBTC1_Beh (&iedModel_Battery_ZBTC1_Beh) +#define IEDMODEL_Battery_ZBTC1_Beh_stVal (&iedModel_Battery_ZBTC1_Beh_stVal) +#define IEDMODEL_Battery_ZBTC1_Beh_q (&iedModel_Battery_ZBTC1_Beh_q) +#define IEDMODEL_Battery_ZBTC1_Beh_t (&iedModel_Battery_ZBTC1_Beh_t) +#define IEDMODEL_Battery_ZBTC1_Health (&iedModel_Battery_ZBTC1_Health) +#define IEDMODEL_Battery_ZBTC1_Health_stVal (&iedModel_Battery_ZBTC1_Health_stVal) +#define IEDMODEL_Battery_ZBTC1_Health_q (&iedModel_Battery_ZBTC1_Health_q) +#define IEDMODEL_Battery_ZBTC1_Health_t (&iedModel_Battery_ZBTC1_Health_t) +#define IEDMODEL_Battery_ZBTC1_NamPlt (&iedModel_Battery_ZBTC1_NamPlt) +#define IEDMODEL_Battery_ZBTC1_NamPlt_vendor (&iedModel_Battery_ZBTC1_NamPlt_vendor) +#define IEDMODEL_Battery_ZBTC1_NamPlt_swRev (&iedModel_Battery_ZBTC1_NamPlt_swRev) +#define IEDMODEL_Battery_ZBTC1_NamPlt_d (&iedModel_Battery_ZBTC1_NamPlt_d) +#define IEDMODEL_Battery_ZBTC1_BatChaSt (&iedModel_Battery_ZBTC1_BatChaSt) +#define IEDMODEL_Battery_ZBTC1_BatChaPwr (&iedModel_Battery_ZBTC1_BatChaPwr) +#define IEDMODEL_Battery_ZBTC1_BatChaMod (&iedModel_Battery_ZBTC1_BatChaMod) +#define IEDMODEL_Battery_ZBTC1_ChaV (&iedModel_Battery_ZBTC1_ChaV) +#define IEDMODEL_Battery_ZBTC1_ChaV_mag (&iedModel_Battery_ZBTC1_ChaV_mag) +#define IEDMODEL_Battery_ZBTC1_ChaV_mag_f (&iedModel_Battery_ZBTC1_ChaV_mag_f) +#define IEDMODEL_Battery_ZBTC1_ChaV_q (&iedModel_Battery_ZBTC1_ChaV_q) +#define IEDMODEL_Battery_ZBTC1_ChaV_t (&iedModel_Battery_ZBTC1_ChaV_t) +#define IEDMODEL_Battery_ZBTC1_ChaA (&iedModel_Battery_ZBTC1_ChaA) +#define IEDMODEL_Battery_ZBTC1_ChaA_mag (&iedModel_Battery_ZBTC1_ChaA_mag) +#define IEDMODEL_Battery_ZBTC1_ChaA_mag_f (&iedModel_Battery_ZBTC1_ChaA_mag_f) +#define IEDMODEL_Battery_ZBTC1_ChaA_q (&iedModel_Battery_ZBTC1_ChaA_q) +#define IEDMODEL_Battery_ZBTC1_ChaA_t (&iedModel_Battery_ZBTC1_ChaA_t) +#define IEDMODEL_Physical_Measurements (&iedModel_Physical_Measurements) +#define IEDMODEL_Physical_Measurements_LLN0 (&iedModel_Physical_Measurements_LLN0) +#define IEDMODEL_Physical_Measurements_LLN0_Mod (&iedModel_Physical_Measurements_LLN0_Mod) +#define IEDMODEL_Physical_Measurements_LLN0_Mod_q (&iedModel_Physical_Measurements_LLN0_Mod_q) +#define IEDMODEL_Physical_Measurements_LLN0_Mod_t (&iedModel_Physical_Measurements_LLN0_Mod_t) +#define IEDMODEL_Physical_Measurements_LLN0_Mod_ctlModel (&iedModel_Physical_Measurements_LLN0_Mod_ctlModel) +#define IEDMODEL_Physical_Measurements_LLN0_Beh (&iedModel_Physical_Measurements_LLN0_Beh) +#define IEDMODEL_Physical_Measurements_LLN0_Beh_stVal (&iedModel_Physical_Measurements_LLN0_Beh_stVal) +#define IEDMODEL_Physical_Measurements_LLN0_Beh_q (&iedModel_Physical_Measurements_LLN0_Beh_q) +#define IEDMODEL_Physical_Measurements_LLN0_Beh_t (&iedModel_Physical_Measurements_LLN0_Beh_t) +#define IEDMODEL_Physical_Measurements_LLN0_Health (&iedModel_Physical_Measurements_LLN0_Health) +#define IEDMODEL_Physical_Measurements_LLN0_Health_stVal (&iedModel_Physical_Measurements_LLN0_Health_stVal) +#define IEDMODEL_Physical_Measurements_LLN0_Health_q (&iedModel_Physical_Measurements_LLN0_Health_q) +#define IEDMODEL_Physical_Measurements_LLN0_Health_t (&iedModel_Physical_Measurements_LLN0_Health_t) +#define IEDMODEL_Physical_Measurements_LLN0_NamPlt (&iedModel_Physical_Measurements_LLN0_NamPlt) +#define IEDMODEL_Physical_Measurements_LLN0_NamPlt_vendor (&iedModel_Physical_Measurements_LLN0_NamPlt_vendor) +#define IEDMODEL_Physical_Measurements_LLN0_NamPlt_swRev (&iedModel_Physical_Measurements_LLN0_NamPlt_swRev) +#define IEDMODEL_Physical_Measurements_LLN0_NamPlt_d (&iedModel_Physical_Measurements_LLN0_NamPlt_d) +#define IEDMODEL_Physical_Measurements_LLN0_NamPlt_configRev (&iedModel_Physical_Measurements_LLN0_NamPlt_configRev) +#define IEDMODEL_Physical_Measurements_LLN0_NamPlt_ldNs (&iedModel_Physical_Measurements_LLN0_NamPlt_ldNs) +#define IEDMODEL_Physical_Measurements_LPHD1 (&iedModel_Physical_Measurements_LPHD1) +#define IEDMODEL_Physical_Measurements_LPHD1_PhyNam (&iedModel_Physical_Measurements_LPHD1_PhyNam) +#define IEDMODEL_Physical_Measurements_LPHD1_PhyNam_vendor (&iedModel_Physical_Measurements_LPHD1_PhyNam_vendor) +#define IEDMODEL_Physical_Measurements_LPHD1_PhyHealth (&iedModel_Physical_Measurements_LPHD1_PhyHealth) +#define IEDMODEL_Physical_Measurements_LPHD1_PhyHealth_stVal (&iedModel_Physical_Measurements_LPHD1_PhyHealth_stVal) +#define IEDMODEL_Physical_Measurements_LPHD1_PhyHealth_q (&iedModel_Physical_Measurements_LPHD1_PhyHealth_q) +#define IEDMODEL_Physical_Measurements_LPHD1_PhyHealth_t (&iedModel_Physical_Measurements_LPHD1_PhyHealth_t) +#define IEDMODEL_Physical_Measurements_LPHD1_Proxy (&iedModel_Physical_Measurements_LPHD1_Proxy) +#define IEDMODEL_Physical_Measurements_LPHD1_Proxy_stVal (&iedModel_Physical_Measurements_LPHD1_Proxy_stVal) +#define IEDMODEL_Physical_Measurements_LPHD1_Proxy_q (&iedModel_Physical_Measurements_LPHD1_Proxy_q) +#define IEDMODEL_Physical_Measurements_LPHD1_Proxy_t (&iedModel_Physical_Measurements_LPHD1_Proxy_t) + +#endif /* STATIC_MODEL_H_ */ +