diff --git a/CMakeLists.txt b/CMakeLists.txt index 13296b57..55ccc698 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,8 +10,8 @@ endif() project(libiec61850) set(LIB_VERSION_MAJOR "0") -set(LIB_VERSION_MINOR "8") -set(LIB_VERSION_PATCH "7") +set(LIB_VERSION_MINOR "9") +set(LIB_VERSION_PATCH "0") # feature checks include(CheckLibraryExists) @@ -59,6 +59,7 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR}/config src/common/inc src/goose + src/sampled_values src/hal/inc src/iec61850/inc src/iec61850/inc_private @@ -75,27 +76,28 @@ set(API_HEADERS src/common/inc/linked_list.h src/common/inc/byte_buffer.h src/common/inc/lib_memory.h - src/iec61850/inc/iec61850_client.h - src/iec61850/inc/iec61850_common.h - src/iec61850/inc/iec61850_server.h - src/iec61850/inc/iec61850_model.h - src/iec61850/inc/iec61850_cdc.h - src/iec61850/inc/iec61850_dynamic_model.h - src/iec61850/inc/iec61850_config_file_parser.h - src/mms/inc/mms_value.h - src/mms/inc/mms_common.h - src/mms/inc/mms_types.h - src/mms/inc/mms_device_model.h - src/mms/inc/mms_server.h - src/mms/inc/mms_named_variable_list.h - src/mms/inc/mms_type_spec.h - src/mms/inc/mms_client_connection.h - src/mms/inc/iso_connection_parameters.h - src/mms/inc/iso_server.h - src/mms/inc/ber_integer.h - src/mms/inc/asn1_ber_primitive_value.h - src/goose/goose_subscriber.h - src/goose/goose_receiver.h + src/iec61850/inc/iec61850_client.h + src/iec61850/inc/iec61850_common.h + src/iec61850/inc/iec61850_server.h + src/iec61850/inc/iec61850_model.h + src/iec61850/inc/iec61850_cdc.h + src/iec61850/inc/iec61850_dynamic_model.h + src/iec61850/inc/iec61850_config_file_parser.h + src/mms/inc/mms_value.h + src/mms/inc/mms_common.h + src/mms/inc/mms_types.h + src/mms/inc/mms_device_model.h + src/mms/inc/mms_server.h + src/mms/inc/mms_named_variable_list.h + src/mms/inc/mms_type_spec.h + src/mms/inc/mms_client_connection.h + src/mms/inc/iso_connection_parameters.h + src/mms/inc/iso_server.h + src/mms/inc/ber_integer.h + src/mms/inc/asn1_ber_primitive_value.h + src/goose/goose_subscriber.h + src/goose/goose_receiver.h + src/sampled_values/sv_subscriber.h ) IF(WIN32) diff --git a/Makefile b/Makefile index 816d55fc..aa8f5bad 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,7 @@ LIB_SOURCE_DIRS += src/mms/iso_mms/asn1c LIB_SOURCE_DIRS += src/mms/iso_server ifndef EXCLUDE_ETHERNET_WINDOWS LIB_SOURCE_DIRS += src/goose +LIB_SOURCE_DIRS += src/sampled_values endif LIB_SOURCE_DIRS += src/iec61850/client LIB_SOURCE_DIRS += src/iec61850/common @@ -45,13 +46,14 @@ LIB_SOURCE_DIRS += src/hal/ethernet/bsd LIB_SOURCE_DIRS += src/hal/filesystem/linux LIB_SOURCE_DIRS += src/hal/time/unix endif -LIB_INCLUDE_DIRS += config +LIB_INCLUDE_DIRS += config LIB_INCLUDE_DIRS += src/common/inc LIB_INCLUDE_DIRS += src/mms/iso_mms/asn1c LIB_INCLUDE_DIRS += src/mms/inc -LIB_INCLUDE_DIRS += src/mms/inc_private -LIB_INCLUDE_DIRS += src/hal/inc -LIB_INCLUDE_DIRS += src/goose +LIB_INCLUDE_DIRS += src/mms/inc_private +LIB_INCLUDE_DIRS += src/hal/inc +LIB_INCLUDE_DIRS += src/goose +LIB_INCLUDE_DIRS += src/sampled_values LIB_INCLUDE_DIRS += src/iec61850/inc LIB_INCLUDE_DIRS += src/iec61850/inc_private ifeq ($(HAL_IMPL), WIN32) @@ -92,6 +94,7 @@ LIB_API_HEADER_FILES += src/mms/inc/ber_integer.h LIB_API_HEADER_FILES += src/mms/inc/asn1_ber_primitive_value.h LIB_API_HEADER_FILES += src/goose/goose_subscriber.h LIB_API_HEADER_FILES += src/goose/goose_receiver.h +LIB_API_HEADER_FILES += src/sampled_values/sv_subscriber.h get_sources_from_directory = $(wildcard $1/*.c) get_sources = $(foreach dir, $1, $(call get_sources_from_directory,$(dir))) diff --git a/config/stack_config.h b/config/stack_config.h index 53c649fc..405a5a1a 100644 --- a/config/stack_config.h +++ b/config/stack_config.h @@ -23,6 +23,8 @@ #define DEBUG_MMS_SERVER 0 #define DEBUG_GOOSE_SUBSCRIBER 0 #define DEBUG_GOOSE_PUBLISHER 0 +#define DEBUG_SV_SUBSCRIBER 0 +#define DEBUG_HAL_ETHERNET 0 /* Maximum MMS PDU SIZE - default is 65000 */ #define CONFIG_MMS_MAXIMUM_PDU_SIZE 65000 @@ -34,7 +36,7 @@ * 0 ==> server runs in multi-threaded mode (one thread for each connection and * one server background thread ) */ -#define CONFIG_MMS_SINGLE_THREADED 0 +#define CONFIG_MMS_SINGLE_THREADED 1 /* * Optimize stack for threadless operation - don't use semaphores @@ -67,12 +69,14 @@ /* Ethernet interface ID for GOOSE and SV */ #define CONFIG_ETHERNET_INTERFACE_ID "eth0" //#define CONFIG_ETHERNET_INTERFACE_ID "vboxnet0" -//#define CONFIG_ETHERNET_INTERFACE_ID "eth-f" //#define CONFIG_ETHERNET_INTERFACE_ID "en0" // OS X uses enX in place of ethX as ethernet NIC names. /* Set to 1 to include GOOSE support in the build. Otherwise set to 0 */ #define CONFIG_INCLUDE_GOOSE_SUPPORT 1 +/* Set to 1 to include Sampled Values support in the build. Otherwise set to 0 */ +#define CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT 1 + #ifdef _WIN32 /* GOOSE will be disabled for Windows if ethernet support (winpcap) is not available */ @@ -98,9 +102,14 @@ /* The number of GOOSE retransmissions after an event */ #define CONFIG_GOOSE_EVENT_RETRANSMISSION_COUNT 2 -/* Define if GOOSE control block elements are writable (1) or read-only (0) */ -#define CONFIG_GOOSE_GOID_WRITABLE 1 -#define CONFIG_GOOSE_DATSET_WRITABLE 1 +/* Define if GOOSE control block elements are writable (1) or read-only (0) + * + * WARNING: To be compliant with the IEC 61850-8-1 standard all GoCB elements + * but GoEna have to be read-only! + * + * */ +#define CONFIG_GOOSE_GOID_WRITABLE 0 +#define CONFIG_GOOSE_DATSET_WRITABLE 0 #define CONFIG_GOOSE_CONFREV_WRITABLE 0 #define CONFIG_GOOSE_NDSCOM_WRITABLE 0 #define CONFIG_GOOSE_DSTADDRESS_WRITABLE 0 @@ -129,6 +138,9 @@ /* include support for IEC 61850 reporting services */ #define CONFIG_IEC61850_REPORT_SERVICE 1 +/* support buffered report control blocks with ResvTms field */ +#define CONFIG_IEC61850_BRCB_WITH_RESVTMS 0 + /* The default buffer size of buffered RCBs in bytes */ #define CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE 65536 @@ -141,7 +153,7 @@ /* default results for MMS identify service */ #define CONFIG_DEFAULT_MMS_VENDOR_NAME "libiec61850.com" #define CONFIG_DEFAULT_MMS_MODEL_NAME "LIBIEC61850" -#define CONFIG_DEFAULT_MMS_REVISION "0.8.7" +#define CONFIG_DEFAULT_MMS_REVISION "0.9.0" /* MMS virtual file store base path - where file services are looking for files */ #define CONFIG_VIRTUAL_FILESTORE_BASEPATH "./vmd-filestore/" diff --git a/config/stack_config.h.cmake b/config/stack_config.h.cmake index 011cbf82..36b7ff3e 100644 --- a/config/stack_config.h.cmake +++ b/config/stack_config.h.cmake @@ -71,6 +71,9 @@ /* Set to 1 to include GOOSE support in the build. Otherwise set to 0 */ #cmakedefine01 CONFIG_INCLUDE_GOOSE_SUPPORT +/* Set to 1 to include Sampled Values support in the build. Otherwise set to 0 */ +#cmakedefine01 CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT + #ifdef _WIN32 /* GOOSE will be disabled for Windows if ethernet support (winpcap) is not available */ diff --git a/demos/beaglebone/static_model.c b/demos/beaglebone/static_model.c index 993db3ec..ae7b9539 100644 --- a/demos/beaglebone/static_model.c +++ b/demos/beaglebone/static_model.c @@ -96,7 +96,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -109,7 +109,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -122,7 +122,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -144,7 +144,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -157,7 +157,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -170,7 +170,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -183,7 +183,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -205,7 +205,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -218,7 +218,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -231,7 +231,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -253,7 +253,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -266,7 +266,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -279,7 +279,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -292,7 +292,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -305,7 +305,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -335,7 +335,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -357,7 +357,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -370,7 +370,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -383,7 +383,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -405,7 +405,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -418,7 +418,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -431,7 +431,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -461,7 +461,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -474,7 +474,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -487,7 +487,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -509,7 +509,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -522,7 +522,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -535,7 +535,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -548,7 +548,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -570,7 +570,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -583,7 +583,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -596,7 +596,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -618,7 +618,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -631,7 +631,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -644,7 +644,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -666,7 +666,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -679,7 +679,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -692,7 +692,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -705,7 +705,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -727,7 +727,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -740,7 +740,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -753,7 +753,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -766,7 +766,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -788,7 +788,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -801,7 +801,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -814,7 +814,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -827,7 +827,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -849,7 +849,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -862,7 +862,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -875,7 +875,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -888,7 +888,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -910,7 +910,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -923,7 +923,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -936,7 +936,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -949,7 +949,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -962,7 +962,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -975,7 +975,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -988,7 +988,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1001,7 +1001,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1014,7 +1014,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1027,7 +1027,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1040,7 +1040,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1053,7 +1053,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1066,7 +1066,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1088,7 +1088,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1101,7 +1101,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1114,7 +1114,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_SBO = { NULL, 0, IEC61850_FC_CO, - VISIBLE_STRING_64, + IEC61850_VISIBLE_STRING_64, 0, NULL, 0}; @@ -1127,7 +1127,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1140,7 +1140,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1153,7 +1153,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1166,7 +1166,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1179,7 +1179,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1192,7 +1192,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1205,7 +1205,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1218,7 +1218,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1231,7 +1231,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1244,7 +1244,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Cancel_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1257,7 +1257,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_ctlVal = { NULL, 0, IEC61850_FC_CO, - INT8, + IEC61850_INT8, 0, NULL, 0}; @@ -1270,7 +1270,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Cancel_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1283,7 +1283,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1296,7 +1296,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1309,7 +1309,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1322,7 +1322,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1335,7 +1335,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1348,7 +1348,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1361,7 +1361,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1383,7 +1383,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1396,7 +1396,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1409,7 +1409,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1422,7 +1422,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1435,7 +1435,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1448,7 +1448,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1461,7 +1461,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1474,7 +1474,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1487,7 +1487,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1500,7 +1500,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1513,7 +1513,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1526,7 +1526,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1539,7 +1539,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1561,7 +1561,7 @@ DataAttribute iedModel_GenericIO_GGIO1_DPCSO1_stVal = { NULL, 0, IEC61850_FC_ST, - CODEDENUM, + IEC61850_CODEDENUM, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1574,7 +1574,7 @@ DataAttribute iedModel_GenericIO_GGIO1_DPCSO1_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1587,7 +1587,7 @@ DataAttribute iedModel_GenericIO_GGIO1_DPCSO1_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_DPCSO1_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1600,7 +1600,7 @@ DataAttribute iedModel_GenericIO_GGIO1_DPCSO1_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1613,7 +1613,7 @@ DataAttribute iedModel_GenericIO_GGIO1_DPCSO1_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_DPCSO1_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1626,7 +1626,7 @@ DataAttribute iedModel_GenericIO_GGIO1_DPCSO1_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1639,7 +1639,7 @@ DataAttribute iedModel_GenericIO_GGIO1_DPCSO1_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1652,7 +1652,7 @@ DataAttribute iedModel_GenericIO_GGIO1_DPCSO1_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1665,7 +1665,7 @@ DataAttribute iedModel_GenericIO_GGIO1_DPCSO1_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1678,7 +1678,7 @@ DataAttribute iedModel_GenericIO_GGIO1_DPCSO1_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1691,7 +1691,7 @@ DataAttribute iedModel_GenericIO_GGIO1_DPCSO1_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1704,7 +1704,7 @@ DataAttribute iedModel_GenericIO_GGIO1_DPCSO1_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1717,7 +1717,7 @@ DataAttribute iedModel_GenericIO_GGIO1_DPCSO1_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1739,7 +1739,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1752,7 +1752,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1765,7 +1765,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1787,7 +1787,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1800,7 +1800,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1813,7 +1813,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1835,7 +1835,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1848,7 +1848,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1861,7 +1861,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1883,7 +1883,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1896,7 +1896,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1909,7 +1909,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1939,7 +1939,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1952,7 +1952,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1965,7 +1965,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1987,7 +1987,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Mod_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2000,7 +2000,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2013,7 +2013,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2026,7 +2026,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2048,7 +2048,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Str_general = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2061,7 +2061,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Str_dirGeneral = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2074,7 +2074,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Str_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2087,7 +2087,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Str_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2109,7 +2109,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Op_general = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2122,7 +2122,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Op_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2135,7 +2135,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_Op_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2157,7 +2157,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpDlTmms_setVal = { NULL, 0, IEC61850_FC_SP, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2170,7 +2170,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpDlTmms_dataNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2192,7 +2192,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_RsDlTmms_setVal = { NULL, 0, IEC61850_FC_SP, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2205,7 +2205,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_RsDlTmms_dataNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2227,7 +2227,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpCntRs_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2240,7 +2240,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpCntRs_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2253,7 +2253,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpCntRs_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2266,7 +2266,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpCntRs_Oper = { (ModelNode*) &iedModel_GenericIO_TIM_GAPC1_OpCntRs_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2279,7 +2279,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpCntRs_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2292,7 +2292,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpCntRs_Oper_origin = { (ModelNode*) &iedModel_GenericIO_TIM_GAPC1_OpCntRs_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2305,7 +2305,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpCntRs_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2318,7 +2318,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpCntRs_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -2331,7 +2331,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpCntRs_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -2344,7 +2344,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpCntRs_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2357,7 +2357,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpCntRs_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2370,7 +2370,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpCntRs_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -2383,7 +2383,7 @@ DataAttribute iedModel_GenericIO_TIM_GAPC1_OpCntRs_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; diff --git a/dotnet/IEC61850forCSharp/IEC61850ClientAPI.cs b/dotnet/IEC61850forCSharp/IEC61850ClientAPI.cs index 3c581979..ab051de2 100644 --- a/dotnet/IEC61850forCSharp/IEC61850ClientAPI.cs +++ b/dotnet/IEC61850forCSharp/IEC61850ClientAPI.cs @@ -1224,14 +1224,15 @@ namespace IEC61850 DATA_REFERENCE = 16, BUFFER_OVERFLOW = 32, ENTRY_ID = 64, - CONF_REV = 128 + CONF_REV = 128, + ALL = 255 } public enum Validity { GOOD = 0, - INVALID = 1, - RESERVED = 2, + RESERVED = 1, + INVALID = 2, QUESTIONABLE = 3 } @@ -1322,6 +1323,16 @@ namespace IEC61850 EX = 11, /** Control */ CO = 12, + /** Unicast SV */ + US = 13, + /** Multicast SV */ + MS = 14, + /** Unbuffered report */ + RP = 15, + /** Buffered report */ + BR = 16, + + /** All FCs - wildcard value */ ALL = 99, NONE = -1 } diff --git a/dotnet/IEC61850forCSharp/MmsValue.cs b/dotnet/IEC61850forCSharp/MmsValue.cs index 3f69b7b0..d4e84436 100644 --- a/dotnet/IEC61850forCSharp/MmsValue.cs +++ b/dotnet/IEC61850forCSharp/MmsValue.cs @@ -140,6 +140,12 @@ namespace IEC61850 [return: MarshalAs(UnmanagedType.I1)] static extern bool MmsValue_equals(IntPtr self, IntPtr otherValue); + [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] + static extern IntPtr MmsValue_newBinaryTime (bool timeOfDay); + + [DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)] + static extern void MmsValue_setBinaryTime (IntPtr self, UInt64 timestamp); + internal MmsValue (IntPtr value) { @@ -229,6 +235,26 @@ namespace IEC61850 return new MmsValue(newValue, true); } + /// + /// Create a new MmsValue instance of type MMS_BINARY_TIME + /// + /// the new MmsValue instance. + /// If set to true large 6 byte format. + public static MmsValue NewBinaryTime(bool largeFormat) + { + IntPtr newValue = MmsValue_newBinaryTime (largeFormat); + + return new MmsValue (newValue, true); + } + + /// + /// Sets the binary time. + /// + /// Timestamp. + public void SetBinaryTime(UInt64 timestamp) { + MmsValue_setBinaryTime (this.valueReference, timestamp); + } + internal IntPtr valueReference; private bool responsableForDeletion; diff --git a/dotnet/IEC61850forCSharp/ReportControlBlock.cs b/dotnet/IEC61850forCSharp/ReportControlBlock.cs index 889e8d61..f4b4a699 100644 --- a/dotnet/IEC61850forCSharp/ReportControlBlock.cs +++ b/dotnet/IEC61850forCSharp/ReportControlBlock.cs @@ -372,6 +372,8 @@ namespace IEC61850 IedConnection_setRCBValues (connection, out error, self, parametersMask, singleRequest); + resetSendFlags(); + if (error != 0) throw new IedConnectionException ("setRCBValues service failed", error); @@ -382,8 +384,6 @@ namespace IEC61850 InstallReportHandler(this.reportHandler, this.reportHandlerParameter); } } - - resetSendFlags(); } /// diff --git a/dotnet/reporting/Settings.cs b/dotnet/reporting/Settings.cs new file mode 100644 index 00000000..99fcfeb5 --- /dev/null +++ b/dotnet/reporting/Settings.cs @@ -0,0 +1,28 @@ +namespace reporting.Properties { + + + // This class allows you to handle specific events on the settings class: + // The SettingChanging event is raised before a setting's value is changed. + // The PropertyChanged event is raised after a setting's value is changed. + // The SettingsLoaded event is raised after the setting values are loaded. + // The SettingsSaving event is raised before the setting values are saved. + internal sealed partial class Settings { + + public Settings() { + // // To add event handlers for saving and changing settings, uncomment the lines below: + // + // this.SettingChanging += this.SettingChangingEventHandler; + // + // this.SettingsSaving += this.SettingsSavingEventHandler; + // + } + + private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { + // Add code to handle the SettingChangingEvent event here. + } + + private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { + // Add code to handle the SettingsSaving event here. + } + } +} diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 5bc51cf5..8e0f41dd 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -18,8 +18,9 @@ add_subdirectory(iec61850_client_example4) add_subdirectory(iec61850_client_example5) add_subdirectory(iec61850_client_example_files) add_subdirectory(iec61850_client_example_reporting) -add_subdirectory(goose_subscriber) add_subdirectory(mms_client_example1) add_subdirectory(mms_client_example2) add_subdirectory(mms_client_example3) add_subdirectory(mms_client_example4) +add_subdirectory(goose_subscriber) +add_subdirectory(sv_subscriber) diff --git a/examples/Makefile b/examples/Makefile index 61f781e8..b5f20397 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -25,6 +25,7 @@ EXAMPLE_DIRS += server_example_threadless EXAMPLE_DIRS += server_example_setting_groups EXAMPLE_DIRS += goose_subscriber EXAMPLE_DIRS += goose_publisher +EXAMPLE_DIRS += sv_subscriber EXAMPLE_DIRS += mms_utility MODEL_DIRS += server_example1 diff --git a/examples/goose_subscriber/CMakeLists.txt b/examples/goose_subscriber/CMakeLists.txt index 91724d24..a5874fa4 100644 --- a/examples/goose_subscriber/CMakeLists.txt +++ b/examples/goose_subscriber/CMakeLists.txt @@ -5,8 +5,6 @@ set(goose_subscriber_example_SRCS IF(WIN32) -IF(WITH_WPCAP) - set_source_files_properties(${goose_subscriber_example_SRCS} PROPERTIES LANGUAGE CXX) add_executable(goose_subscriber_example @@ -17,8 +15,6 @@ target_link_libraries(goose_subscriber_example iec61850 ) -ENDIF(WITH_WPCAP) - ELSE(WIN32) add_executable(goose_subscriber_example diff --git a/examples/iec61850_9_2_LE_example/CMakeLists.txt b/examples/iec61850_9_2_LE_example/CMakeLists.txt new file mode 100644 index 00000000..994caae3 --- /dev/null +++ b/examples/iec61850_9_2_LE_example/CMakeLists.txt @@ -0,0 +1,21 @@ +include_directories( + . +) + +set(server_example2_SRCS + server_example2.c + static_model.c +) + +IF(WIN32) +set_source_files_properties(${server_example2_SRCS} + PROPERTIES LANGUAGE CXX) +ENDIF(WIN32) + +add_executable(server_example2 + ${server_example2_SRCS} +) + +target_link_libraries(server_example2 + iec61850 +) diff --git a/examples/iec61850_9_2_LE_example/Makefile b/examples/iec61850_9_2_LE_example/Makefile new file mode 100644 index 00000000..3781758b --- /dev/null +++ b/examples/iec61850_9_2_LE_example/Makefile @@ -0,0 +1,24 @@ +LIBIEC_HOME=../.. + +PROJECT_BINARY_NAME = server_example2 +PROJECT_SOURCES = server_example2.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) $(LDFLAGS) $(LDLIBS) + +clean: + rm -f $(PROJECT_BINARY_NAME) + diff --git a/examples/iec61850_9_2_LE_example/server_example2.c b/examples/iec61850_9_2_LE_example/server_example2.c new file mode 100644 index 00000000..662cf501 --- /dev/null +++ b/examples/iec61850_9_2_LE_example/server_example2.c @@ -0,0 +1,86 @@ +/* + * server_example2.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 the generated header with the model access handles */ +#include "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) +{ + IedServer iedServer = IedServer_create(&iedModel); + + // TODO get stored values from persistent storage + + // TODO set initial measurement and status values from process + + /* 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 power = 500.f; + + while (running) { + + uint64_t timeval = Hal_getTimeInMs(); + + IedServer_unlockDataModel(iedServer); + + power += 0.1f; + + Thread_sleep(500); + } + + /* stop MMS server - close TCP server socket and all client sockets */ + IedServer_stop(iedServer); + + /* Cleanup - free all resources */ + IedServer_destroy(iedServer); + + return 0; +} /* main() */ diff --git a/examples/iec61850_9_2_LE_example/static_model.c b/examples/iec61850_9_2_LE_example/static_model.c new file mode 100644 index 00000000..ecc29bfb --- /dev/null +++ b/examples/iec61850_9_2_LE_example/static_model.c @@ -0,0 +1,1009 @@ +/* + * static_model.c + * + * automatically generated from sv.icd + */ +#include "static_model.h" + +static void initializeValues(); + +extern DataSet iedModelds_MUnn_LLN0_PhsMeas1; + + +extern DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda0; +extern DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda1; +extern DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda2; +extern DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda3; +extern DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda4; +extern DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda5; +extern DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda6; +extern DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda7; + +DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda0 = { + "1", + false, + "TCTR$MX$Amp", + -1, + NULL, + NULL, + &iedModelds_MUnn_LLN0_PhsMeas1_fcda1 +}; + +DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda1 = { + "2", + false, + "TCTR$MX$Amp", + -1, + NULL, + NULL, + &iedModelds_MUnn_LLN0_PhsMeas1_fcda2 +}; + +DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda2 = { + "3", + false, + "TCTR$MX$Amp", + -1, + NULL, + NULL, + &iedModelds_MUnn_LLN0_PhsMeas1_fcda3 +}; + +DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda3 = { + "4", + false, + "TCTR$MX$Amp", + -1, + NULL, + NULL, + &iedModelds_MUnn_LLN0_PhsMeas1_fcda4 +}; + +DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda4 = { + "1", + false, + "TVTR$MX$Vol", + -1, + NULL, + NULL, + &iedModelds_MUnn_LLN0_PhsMeas1_fcda5 +}; + +DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda5 = { + "2", + false, + "TVTR$MX$Vol", + -1, + NULL, + NULL, + &iedModelds_MUnn_LLN0_PhsMeas1_fcda6 +}; + +DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda6 = { + "3", + false, + "TVTR$MX$Vol", + -1, + NULL, + NULL, + &iedModelds_MUnn_LLN0_PhsMeas1_fcda7 +}; + +DataSetEntry iedModelds_MUnn_LLN0_PhsMeas1_fcda7 = { + "4", + false, + "TVTR$MX$Vol", + -1, + NULL, + NULL, + NULL +}; + +DataSet iedModelds_MUnn_LLN0_PhsMeas1 = { + "MUnn", + "LLN0$PhsMeas1", + 8, + &iedModelds_MUnn_LLN0_PhsMeas1_fcda0, + NULL +}; + +LogicalDevice iedModel_MUnn = { + LogicalDeviceModelType, + "MUnn", + (ModelNode*) &iedModel, + NULL, + (ModelNode*) &iedModel_MUnn_LLN0 +}; + +LogicalNode iedModel_MUnn_LLN0 = { + LogicalNodeModelType, + "LLN0", + (ModelNode*) &iedModel_MUnn, + (ModelNode*) &iedModel_MUnn_TCTR1, + (ModelNode*) &iedModel_MUnn_LLN0_Mod, +}; + +DataObject iedModel_MUnn_LLN0_Mod = { + DataObjectModelType, + "Mod", + (ModelNode*) &iedModel_MUnn_LLN0, + NULL, + (ModelNode*) &iedModel_MUnn_LLN0_Mod_ctlVal, + 0 +}; + +DataAttribute iedModel_MUnn_LLN0_Mod_ctlVal = { + DataAttributeModelType, + "ctlVal", + (ModelNode*) &iedModel_MUnn_LLN0_Mod, + (ModelNode*) &iedModel_MUnn_LLN0_Mod_stVal, + NULL, + 0, + IEC61850_FC_CO, + IEC61850_INT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_LLN0_Mod_stVal = { + DataAttributeModelType, + "stVal", + (ModelNode*) &iedModel_MUnn_LLN0_Mod, + (ModelNode*) &iedModel_MUnn_LLN0_Mod_q, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_INT32, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_MUnn_LLN0_Mod_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_MUnn_LLN0_Mod, + (ModelNode*) &iedModel_MUnn_LLN0_Mod_t, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_QUALITY, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_MUnn_LLN0_Mod_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_MUnn_LLN0_Mod, + NULL, + NULL, + 0, + IEC61850_FC_ST, + IEC61850_TIMESTAMP, + 0 + TRG_OPT_DATA_CHANGED, + NULL, + 0}; + +LogicalNode iedModel_MUnn_TCTR1 = { + LogicalNodeModelType, + "TCTR1", + (ModelNode*) &iedModel_MUnn, + (ModelNode*) &iedModel_MUnn_TCTR2, + (ModelNode*) &iedModel_MUnn_TCTR1_Amp, +}; + +DataObject iedModel_MUnn_TCTR1_Amp = { + DataObjectModelType, + "Amp", + (ModelNode*) &iedModel_MUnn_TCTR1, + NULL, + (ModelNode*) &iedModel_MUnn_TCTR1_Amp_instMag, + 0 +}; + +DataAttribute iedModel_MUnn_TCTR1_Amp_instMag = { + DataAttributeModelType, + "instMag", + (ModelNode*) &iedModel_MUnn_TCTR1_Amp, + (ModelNode*) &iedModel_MUnn_TCTR1_Amp_q, + (ModelNode*) &iedModel_MUnn_TCTR1_Amp_instMag_i, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR1_Amp_instMag_i = { + DataAttributeModelType, + "i", + (ModelNode*) &iedModel_MUnn_TCTR1_Amp_instMag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_INT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR1_Amp_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_MUnn_TCTR1_Amp, + (ModelNode*) &iedModel_MUnn_TCTR1_Amp_sVC, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR1_Amp_sVC = { + DataAttributeModelType, + "sVC", + (ModelNode*) &iedModel_MUnn_TCTR1_Amp, + NULL, + (ModelNode*) &iedModel_MUnn_TCTR1_Amp_sVC_scaleFactor, + 0, + IEC61850_FC_CF, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR1_Amp_sVC_scaleFactor = { + DataAttributeModelType, + "scaleFactor", + (ModelNode*) &iedModel_MUnn_TCTR1_Amp_sVC, + (ModelNode*) &iedModel_MUnn_TCTR1_Amp_sVC_offset, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR1_Amp_sVC_offset = { + DataAttributeModelType, + "offset", + (ModelNode*) &iedModel_MUnn_TCTR1_Amp_sVC, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +LogicalNode iedModel_MUnn_TCTR2 = { + LogicalNodeModelType, + "TCTR2", + (ModelNode*) &iedModel_MUnn, + (ModelNode*) &iedModel_MUnn_TCTR3, + (ModelNode*) &iedModel_MUnn_TCTR2_Amp, +}; + +DataObject iedModel_MUnn_TCTR2_Amp = { + DataObjectModelType, + "Amp", + (ModelNode*) &iedModel_MUnn_TCTR2, + NULL, + (ModelNode*) &iedModel_MUnn_TCTR2_Amp_instMag, + 0 +}; + +DataAttribute iedModel_MUnn_TCTR2_Amp_instMag = { + DataAttributeModelType, + "instMag", + (ModelNode*) &iedModel_MUnn_TCTR2_Amp, + (ModelNode*) &iedModel_MUnn_TCTR2_Amp_q, + (ModelNode*) &iedModel_MUnn_TCTR2_Amp_instMag_i, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR2_Amp_instMag_i = { + DataAttributeModelType, + "i", + (ModelNode*) &iedModel_MUnn_TCTR2_Amp_instMag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_INT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR2_Amp_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_MUnn_TCTR2_Amp, + (ModelNode*) &iedModel_MUnn_TCTR2_Amp_sVC, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR2_Amp_sVC = { + DataAttributeModelType, + "sVC", + (ModelNode*) &iedModel_MUnn_TCTR2_Amp, + NULL, + (ModelNode*) &iedModel_MUnn_TCTR2_Amp_sVC_scaleFactor, + 0, + IEC61850_FC_CF, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR2_Amp_sVC_scaleFactor = { + DataAttributeModelType, + "scaleFactor", + (ModelNode*) &iedModel_MUnn_TCTR2_Amp_sVC, + (ModelNode*) &iedModel_MUnn_TCTR2_Amp_sVC_offset, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR2_Amp_sVC_offset = { + DataAttributeModelType, + "offset", + (ModelNode*) &iedModel_MUnn_TCTR2_Amp_sVC, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +LogicalNode iedModel_MUnn_TCTR3 = { + LogicalNodeModelType, + "TCTR3", + (ModelNode*) &iedModel_MUnn, + (ModelNode*) &iedModel_MUnn_TCTR4, + (ModelNode*) &iedModel_MUnn_TCTR3_Amp, +}; + +DataObject iedModel_MUnn_TCTR3_Amp = { + DataObjectModelType, + "Amp", + (ModelNode*) &iedModel_MUnn_TCTR3, + NULL, + (ModelNode*) &iedModel_MUnn_TCTR3_Amp_instMag, + 0 +}; + +DataAttribute iedModel_MUnn_TCTR3_Amp_instMag = { + DataAttributeModelType, + "instMag", + (ModelNode*) &iedModel_MUnn_TCTR3_Amp, + (ModelNode*) &iedModel_MUnn_TCTR3_Amp_q, + (ModelNode*) &iedModel_MUnn_TCTR3_Amp_instMag_i, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR3_Amp_instMag_i = { + DataAttributeModelType, + "i", + (ModelNode*) &iedModel_MUnn_TCTR3_Amp_instMag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_INT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR3_Amp_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_MUnn_TCTR3_Amp, + (ModelNode*) &iedModel_MUnn_TCTR3_Amp_sVC, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR3_Amp_sVC = { + DataAttributeModelType, + "sVC", + (ModelNode*) &iedModel_MUnn_TCTR3_Amp, + NULL, + (ModelNode*) &iedModel_MUnn_TCTR3_Amp_sVC_scaleFactor, + 0, + IEC61850_FC_CF, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR3_Amp_sVC_scaleFactor = { + DataAttributeModelType, + "scaleFactor", + (ModelNode*) &iedModel_MUnn_TCTR3_Amp_sVC, + (ModelNode*) &iedModel_MUnn_TCTR3_Amp_sVC_offset, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR3_Amp_sVC_offset = { + DataAttributeModelType, + "offset", + (ModelNode*) &iedModel_MUnn_TCTR3_Amp_sVC, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +LogicalNode iedModel_MUnn_TCTR4 = { + LogicalNodeModelType, + "TCTR4", + (ModelNode*) &iedModel_MUnn, + (ModelNode*) &iedModel_MUnn_TVTR1, + (ModelNode*) &iedModel_MUnn_TCTR4_Amp, +}; + +DataObject iedModel_MUnn_TCTR4_Amp = { + DataObjectModelType, + "Amp", + (ModelNode*) &iedModel_MUnn_TCTR4, + NULL, + (ModelNode*) &iedModel_MUnn_TCTR4_Amp_instMag, + 0 +}; + +DataAttribute iedModel_MUnn_TCTR4_Amp_instMag = { + DataAttributeModelType, + "instMag", + (ModelNode*) &iedModel_MUnn_TCTR4_Amp, + (ModelNode*) &iedModel_MUnn_TCTR4_Amp_q, + (ModelNode*) &iedModel_MUnn_TCTR4_Amp_instMag_i, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR4_Amp_instMag_i = { + DataAttributeModelType, + "i", + (ModelNode*) &iedModel_MUnn_TCTR4_Amp_instMag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_INT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR4_Amp_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_MUnn_TCTR4_Amp, + (ModelNode*) &iedModel_MUnn_TCTR4_Amp_sVC, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR4_Amp_sVC = { + DataAttributeModelType, + "sVC", + (ModelNode*) &iedModel_MUnn_TCTR4_Amp, + NULL, + (ModelNode*) &iedModel_MUnn_TCTR4_Amp_sVC_scaleFactor, + 0, + IEC61850_FC_CF, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR4_Amp_sVC_scaleFactor = { + DataAttributeModelType, + "scaleFactor", + (ModelNode*) &iedModel_MUnn_TCTR4_Amp_sVC, + (ModelNode*) &iedModel_MUnn_TCTR4_Amp_sVC_offset, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TCTR4_Amp_sVC_offset = { + DataAttributeModelType, + "offset", + (ModelNode*) &iedModel_MUnn_TCTR4_Amp_sVC, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +LogicalNode iedModel_MUnn_TVTR1 = { + LogicalNodeModelType, + "TVTR1", + (ModelNode*) &iedModel_MUnn, + (ModelNode*) &iedModel_MUnn_TVTR2, + (ModelNode*) &iedModel_MUnn_TVTR1_Vol, +}; + +DataObject iedModel_MUnn_TVTR1_Vol = { + DataObjectModelType, + "Vol", + (ModelNode*) &iedModel_MUnn_TVTR1, + NULL, + (ModelNode*) &iedModel_MUnn_TVTR1_Vol_instMag, + 0 +}; + +DataAttribute iedModel_MUnn_TVTR1_Vol_instMag = { + DataAttributeModelType, + "instMag", + (ModelNode*) &iedModel_MUnn_TVTR1_Vol, + (ModelNode*) &iedModel_MUnn_TVTR1_Vol_q, + (ModelNode*) &iedModel_MUnn_TVTR1_Vol_instMag_i, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR1_Vol_instMag_i = { + DataAttributeModelType, + "i", + (ModelNode*) &iedModel_MUnn_TVTR1_Vol_instMag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_INT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR1_Vol_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_MUnn_TVTR1_Vol, + (ModelNode*) &iedModel_MUnn_TVTR1_Vol_sVC, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR1_Vol_sVC = { + DataAttributeModelType, + "sVC", + (ModelNode*) &iedModel_MUnn_TVTR1_Vol, + NULL, + (ModelNode*) &iedModel_MUnn_TVTR1_Vol_sVC_scaleFactor, + 0, + IEC61850_FC_CF, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR1_Vol_sVC_scaleFactor = { + DataAttributeModelType, + "scaleFactor", + (ModelNode*) &iedModel_MUnn_TVTR1_Vol_sVC, + (ModelNode*) &iedModel_MUnn_TVTR1_Vol_sVC_offset, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR1_Vol_sVC_offset = { + DataAttributeModelType, + "offset", + (ModelNode*) &iedModel_MUnn_TVTR1_Vol_sVC, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +LogicalNode iedModel_MUnn_TVTR2 = { + LogicalNodeModelType, + "TVTR2", + (ModelNode*) &iedModel_MUnn, + (ModelNode*) &iedModel_MUnn_TVTR3, + (ModelNode*) &iedModel_MUnn_TVTR2_Vol, +}; + +DataObject iedModel_MUnn_TVTR2_Vol = { + DataObjectModelType, + "Vol", + (ModelNode*) &iedModel_MUnn_TVTR2, + NULL, + (ModelNode*) &iedModel_MUnn_TVTR2_Vol_instMag, + 0 +}; + +DataAttribute iedModel_MUnn_TVTR2_Vol_instMag = { + DataAttributeModelType, + "instMag", + (ModelNode*) &iedModel_MUnn_TVTR2_Vol, + (ModelNode*) &iedModel_MUnn_TVTR2_Vol_q, + (ModelNode*) &iedModel_MUnn_TVTR2_Vol_instMag_i, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR2_Vol_instMag_i = { + DataAttributeModelType, + "i", + (ModelNode*) &iedModel_MUnn_TVTR2_Vol_instMag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_INT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR2_Vol_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_MUnn_TVTR2_Vol, + (ModelNode*) &iedModel_MUnn_TVTR2_Vol_sVC, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR2_Vol_sVC = { + DataAttributeModelType, + "sVC", + (ModelNode*) &iedModel_MUnn_TVTR2_Vol, + NULL, + (ModelNode*) &iedModel_MUnn_TVTR2_Vol_sVC_scaleFactor, + 0, + IEC61850_FC_CF, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR2_Vol_sVC_scaleFactor = { + DataAttributeModelType, + "scaleFactor", + (ModelNode*) &iedModel_MUnn_TVTR2_Vol_sVC, + (ModelNode*) &iedModel_MUnn_TVTR2_Vol_sVC_offset, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR2_Vol_sVC_offset = { + DataAttributeModelType, + "offset", + (ModelNode*) &iedModel_MUnn_TVTR2_Vol_sVC, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +LogicalNode iedModel_MUnn_TVTR3 = { + LogicalNodeModelType, + "TVTR3", + (ModelNode*) &iedModel_MUnn, + (ModelNode*) &iedModel_MUnn_TVTR4, + (ModelNode*) &iedModel_MUnn_TVTR3_Vol, +}; + +DataObject iedModel_MUnn_TVTR3_Vol = { + DataObjectModelType, + "Vol", + (ModelNode*) &iedModel_MUnn_TVTR3, + NULL, + (ModelNode*) &iedModel_MUnn_TVTR3_Vol_instMag, + 0 +}; + +DataAttribute iedModel_MUnn_TVTR3_Vol_instMag = { + DataAttributeModelType, + "instMag", + (ModelNode*) &iedModel_MUnn_TVTR3_Vol, + (ModelNode*) &iedModel_MUnn_TVTR3_Vol_q, + (ModelNode*) &iedModel_MUnn_TVTR3_Vol_instMag_i, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR3_Vol_instMag_i = { + DataAttributeModelType, + "i", + (ModelNode*) &iedModel_MUnn_TVTR3_Vol_instMag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_INT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR3_Vol_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_MUnn_TVTR3_Vol, + (ModelNode*) &iedModel_MUnn_TVTR3_Vol_sVC, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR3_Vol_sVC = { + DataAttributeModelType, + "sVC", + (ModelNode*) &iedModel_MUnn_TVTR3_Vol, + NULL, + (ModelNode*) &iedModel_MUnn_TVTR3_Vol_sVC_scaleFactor, + 0, + IEC61850_FC_CF, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR3_Vol_sVC_scaleFactor = { + DataAttributeModelType, + "scaleFactor", + (ModelNode*) &iedModel_MUnn_TVTR3_Vol_sVC, + (ModelNode*) &iedModel_MUnn_TVTR3_Vol_sVC_offset, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR3_Vol_sVC_offset = { + DataAttributeModelType, + "offset", + (ModelNode*) &iedModel_MUnn_TVTR3_Vol_sVC, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +LogicalNode iedModel_MUnn_TVTR4 = { + LogicalNodeModelType, + "TVTR4", + (ModelNode*) &iedModel_MUnn, + NULL, + (ModelNode*) &iedModel_MUnn_TVTR4_Vol, +}; + +DataObject iedModel_MUnn_TVTR4_Vol = { + DataObjectModelType, + "Vol", + (ModelNode*) &iedModel_MUnn_TVTR4, + NULL, + (ModelNode*) &iedModel_MUnn_TVTR4_Vol_instMag, + 0 +}; + +DataAttribute iedModel_MUnn_TVTR4_Vol_instMag = { + DataAttributeModelType, + "instMag", + (ModelNode*) &iedModel_MUnn_TVTR4_Vol, + (ModelNode*) &iedModel_MUnn_TVTR4_Vol_q, + (ModelNode*) &iedModel_MUnn_TVTR4_Vol_instMag_i, + 0, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR4_Vol_instMag_i = { + DataAttributeModelType, + "i", + (ModelNode*) &iedModel_MUnn_TVTR4_Vol_instMag, + NULL, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_INT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR4_Vol_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_MUnn_TVTR4_Vol, + (ModelNode*) &iedModel_MUnn_TVTR4_Vol_sVC, + NULL, + 0, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR4_Vol_sVC = { + DataAttributeModelType, + "sVC", + (ModelNode*) &iedModel_MUnn_TVTR4_Vol, + NULL, + (ModelNode*) &iedModel_MUnn_TVTR4_Vol_sVC_scaleFactor, + 0, + IEC61850_FC_CF, + IEC61850_CONSTRUCTED, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR4_Vol_sVC_scaleFactor = { + DataAttributeModelType, + "scaleFactor", + (ModelNode*) &iedModel_MUnn_TVTR4_Vol_sVC, + (ModelNode*) &iedModel_MUnn_TVTR4_Vol_sVC_offset, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + +DataAttribute iedModel_MUnn_TVTR4_Vol_sVC_offset = { + DataAttributeModelType, + "offset", + (ModelNode*) &iedModel_MUnn_TVTR4_Vol_sVC, + NULL, + NULL, + 0, + IEC61850_FC_CF, + IEC61850_FLOAT32, + 0, + NULL, + 0}; + + + +extern SVControlBlock iedModel_MUnn_LLN0_smv0; + +static PhyComAddress iedModel_MUnn_LLN0_smv0_address = { + 4, + 1, + 4097, + {0x1, 0xc, 0xcd, 0x4, 0x0, 0x1} +}; + +SVControlBlock iedModel_MUnn_LLN0_smv0 = {&iedModel_MUnn_LLN0, "MSVCB01", "xxxxMUnn01", "PhsMeas1", 2, 0, 80, 1, &iedModel_MUnn_LLN0_smv0_address, true, 1, NULL}; + + + + +IedModel iedModel = { + "TEMPLATE", + &iedModel_MUnn, + &iedModelds_MUnn_LLN0_PhsMeas1, + NULL, + NULL, + &iedModel_MUnn_LLN0_smv0, + NULL, + initializeValues +}; + +static void +initializeValues() +{ + +iedModel_MUnn_TCTR1_Amp_sVC_scaleFactor.mmsValue = MmsValue_newFloat(0.001); + +iedModel_MUnn_TCTR1_Amp_sVC_offset.mmsValue = MmsValue_newFloat(0.0); + +iedModel_MUnn_TCTR2_Amp_sVC_scaleFactor.mmsValue = MmsValue_newFloat(0.001); + +iedModel_MUnn_TCTR2_Amp_sVC_offset.mmsValue = MmsValue_newFloat(0.0); + +iedModel_MUnn_TCTR3_Amp_sVC_scaleFactor.mmsValue = MmsValue_newFloat(0.001); + +iedModel_MUnn_TCTR3_Amp_sVC_offset.mmsValue = MmsValue_newFloat(0.0); + +iedModel_MUnn_TCTR4_Amp_sVC_scaleFactor.mmsValue = MmsValue_newFloat(0.001); + +iedModel_MUnn_TCTR4_Amp_sVC_offset.mmsValue = MmsValue_newFloat(0.0); + +iedModel_MUnn_TVTR1_Vol_sVC_scaleFactor.mmsValue = MmsValue_newFloat(0.01); + +iedModel_MUnn_TVTR1_Vol_sVC_offset.mmsValue = MmsValue_newFloat(0.0); + +iedModel_MUnn_TVTR2_Vol_sVC_scaleFactor.mmsValue = MmsValue_newFloat(0.01); + +iedModel_MUnn_TVTR2_Vol_sVC_offset.mmsValue = MmsValue_newFloat(0.0); + +iedModel_MUnn_TVTR3_Vol_sVC_scaleFactor.mmsValue = MmsValue_newFloat(0.01); + +iedModel_MUnn_TVTR3_Vol_sVC_offset.mmsValue = MmsValue_newFloat(0.0); + +iedModel_MUnn_TVTR4_Vol_sVC_scaleFactor.mmsValue = MmsValue_newFloat(0.01); + +iedModel_MUnn_TVTR4_Vol_sVC_offset.mmsValue = MmsValue_newFloat(0.0); +} diff --git a/examples/iec61850_9_2_LE_example/static_model.h b/examples/iec61850_9_2_LE_example/static_model.h new file mode 100644 index 00000000..f45de247 --- /dev/null +++ b/examples/iec61850_9_2_LE_example/static_model.h @@ -0,0 +1,161 @@ +/* + * static_model.h + * + * automatically generated from sv.icd + */ + +#ifndef STATIC_MODEL_H_ +#define STATIC_MODEL_H_ + +#include +#include "iec61850_model.h" + +extern IedModel iedModel; +extern LogicalDevice iedModel_MUnn; +extern LogicalNode iedModel_MUnn_LLN0; +extern DataObject iedModel_MUnn_LLN0_Mod; +extern DataAttribute iedModel_MUnn_LLN0_Mod_ctlVal; +extern DataAttribute iedModel_MUnn_LLN0_Mod_stVal; +extern DataAttribute iedModel_MUnn_LLN0_Mod_q; +extern DataAttribute iedModel_MUnn_LLN0_Mod_t; +extern LogicalNode iedModel_MUnn_TCTR1; +extern DataObject iedModel_MUnn_TCTR1_Amp; +extern DataAttribute iedModel_MUnn_TCTR1_Amp_instMag; +extern DataAttribute iedModel_MUnn_TCTR1_Amp_instMag_i; +extern DataAttribute iedModel_MUnn_TCTR1_Amp_q; +extern DataAttribute iedModel_MUnn_TCTR1_Amp_sVC; +extern DataAttribute iedModel_MUnn_TCTR1_Amp_sVC_scaleFactor; +extern DataAttribute iedModel_MUnn_TCTR1_Amp_sVC_offset; +extern LogicalNode iedModel_MUnn_TCTR2; +extern DataObject iedModel_MUnn_TCTR2_Amp; +extern DataAttribute iedModel_MUnn_TCTR2_Amp_instMag; +extern DataAttribute iedModel_MUnn_TCTR2_Amp_instMag_i; +extern DataAttribute iedModel_MUnn_TCTR2_Amp_q; +extern DataAttribute iedModel_MUnn_TCTR2_Amp_sVC; +extern DataAttribute iedModel_MUnn_TCTR2_Amp_sVC_scaleFactor; +extern DataAttribute iedModel_MUnn_TCTR2_Amp_sVC_offset; +extern LogicalNode iedModel_MUnn_TCTR3; +extern DataObject iedModel_MUnn_TCTR3_Amp; +extern DataAttribute iedModel_MUnn_TCTR3_Amp_instMag; +extern DataAttribute iedModel_MUnn_TCTR3_Amp_instMag_i; +extern DataAttribute iedModel_MUnn_TCTR3_Amp_q; +extern DataAttribute iedModel_MUnn_TCTR3_Amp_sVC; +extern DataAttribute iedModel_MUnn_TCTR3_Amp_sVC_scaleFactor; +extern DataAttribute iedModel_MUnn_TCTR3_Amp_sVC_offset; +extern LogicalNode iedModel_MUnn_TCTR4; +extern DataObject iedModel_MUnn_TCTR4_Amp; +extern DataAttribute iedModel_MUnn_TCTR4_Amp_instMag; +extern DataAttribute iedModel_MUnn_TCTR4_Amp_instMag_i; +extern DataAttribute iedModel_MUnn_TCTR4_Amp_q; +extern DataAttribute iedModel_MUnn_TCTR4_Amp_sVC; +extern DataAttribute iedModel_MUnn_TCTR4_Amp_sVC_scaleFactor; +extern DataAttribute iedModel_MUnn_TCTR4_Amp_sVC_offset; +extern LogicalNode iedModel_MUnn_TVTR1; +extern DataObject iedModel_MUnn_TVTR1_Vol; +extern DataAttribute iedModel_MUnn_TVTR1_Vol_instMag; +extern DataAttribute iedModel_MUnn_TVTR1_Vol_instMag_i; +extern DataAttribute iedModel_MUnn_TVTR1_Vol_q; +extern DataAttribute iedModel_MUnn_TVTR1_Vol_sVC; +extern DataAttribute iedModel_MUnn_TVTR1_Vol_sVC_scaleFactor; +extern DataAttribute iedModel_MUnn_TVTR1_Vol_sVC_offset; +extern LogicalNode iedModel_MUnn_TVTR2; +extern DataObject iedModel_MUnn_TVTR2_Vol; +extern DataAttribute iedModel_MUnn_TVTR2_Vol_instMag; +extern DataAttribute iedModel_MUnn_TVTR2_Vol_instMag_i; +extern DataAttribute iedModel_MUnn_TVTR2_Vol_q; +extern DataAttribute iedModel_MUnn_TVTR2_Vol_sVC; +extern DataAttribute iedModel_MUnn_TVTR2_Vol_sVC_scaleFactor; +extern DataAttribute iedModel_MUnn_TVTR2_Vol_sVC_offset; +extern LogicalNode iedModel_MUnn_TVTR3; +extern DataObject iedModel_MUnn_TVTR3_Vol; +extern DataAttribute iedModel_MUnn_TVTR3_Vol_instMag; +extern DataAttribute iedModel_MUnn_TVTR3_Vol_instMag_i; +extern DataAttribute iedModel_MUnn_TVTR3_Vol_q; +extern DataAttribute iedModel_MUnn_TVTR3_Vol_sVC; +extern DataAttribute iedModel_MUnn_TVTR3_Vol_sVC_scaleFactor; +extern DataAttribute iedModel_MUnn_TVTR3_Vol_sVC_offset; +extern LogicalNode iedModel_MUnn_TVTR4; +extern DataObject iedModel_MUnn_TVTR4_Vol; +extern DataAttribute iedModel_MUnn_TVTR4_Vol_instMag; +extern DataAttribute iedModel_MUnn_TVTR4_Vol_instMag_i; +extern DataAttribute iedModel_MUnn_TVTR4_Vol_q; +extern DataAttribute iedModel_MUnn_TVTR4_Vol_sVC; +extern DataAttribute iedModel_MUnn_TVTR4_Vol_sVC_scaleFactor; +extern DataAttribute iedModel_MUnn_TVTR4_Vol_sVC_offset; + + + +#define IEDMODEL_MUnn (&iedModel_MUnn) +#define IEDMODEL_MUnn_LLN0 (&iedModel_MUnn_LLN0) +#define IEDMODEL_MUnn_LLN0_Mod (&iedModel_MUnn_LLN0_Mod) +#define IEDMODEL_MUnn_LLN0_Mod_ctlVal (&iedModel_MUnn_LLN0_Mod_ctlVal) +#define IEDMODEL_MUnn_LLN0_Mod_stVal (&iedModel_MUnn_LLN0_Mod_stVal) +#define IEDMODEL_MUnn_LLN0_Mod_q (&iedModel_MUnn_LLN0_Mod_q) +#define IEDMODEL_MUnn_LLN0_Mod_t (&iedModel_MUnn_LLN0_Mod_t) +#define IEDMODEL_MUnn_TCTR1 (&iedModel_MUnn_TCTR1) +#define IEDMODEL_MUnn_TCTR1_Amp (&iedModel_MUnn_TCTR1_Amp) +#define IEDMODEL_MUnn_TCTR1_Amp_instMag (&iedModel_MUnn_TCTR1_Amp_instMag) +#define IEDMODEL_MUnn_TCTR1_Amp_instMag_i (&iedModel_MUnn_TCTR1_Amp_instMag_i) +#define IEDMODEL_MUnn_TCTR1_Amp_q (&iedModel_MUnn_TCTR1_Amp_q) +#define IEDMODEL_MUnn_TCTR1_Amp_sVC (&iedModel_MUnn_TCTR1_Amp_sVC) +#define IEDMODEL_MUnn_TCTR1_Amp_sVC_scaleFactor (&iedModel_MUnn_TCTR1_Amp_sVC_scaleFactor) +#define IEDMODEL_MUnn_TCTR1_Amp_sVC_offset (&iedModel_MUnn_TCTR1_Amp_sVC_offset) +#define IEDMODEL_MUnn_TCTR2 (&iedModel_MUnn_TCTR2) +#define IEDMODEL_MUnn_TCTR2_Amp (&iedModel_MUnn_TCTR2_Amp) +#define IEDMODEL_MUnn_TCTR2_Amp_instMag (&iedModel_MUnn_TCTR2_Amp_instMag) +#define IEDMODEL_MUnn_TCTR2_Amp_instMag_i (&iedModel_MUnn_TCTR2_Amp_instMag_i) +#define IEDMODEL_MUnn_TCTR2_Amp_q (&iedModel_MUnn_TCTR2_Amp_q) +#define IEDMODEL_MUnn_TCTR2_Amp_sVC (&iedModel_MUnn_TCTR2_Amp_sVC) +#define IEDMODEL_MUnn_TCTR2_Amp_sVC_scaleFactor (&iedModel_MUnn_TCTR2_Amp_sVC_scaleFactor) +#define IEDMODEL_MUnn_TCTR2_Amp_sVC_offset (&iedModel_MUnn_TCTR2_Amp_sVC_offset) +#define IEDMODEL_MUnn_TCTR3 (&iedModel_MUnn_TCTR3) +#define IEDMODEL_MUnn_TCTR3_Amp (&iedModel_MUnn_TCTR3_Amp) +#define IEDMODEL_MUnn_TCTR3_Amp_instMag (&iedModel_MUnn_TCTR3_Amp_instMag) +#define IEDMODEL_MUnn_TCTR3_Amp_instMag_i (&iedModel_MUnn_TCTR3_Amp_instMag_i) +#define IEDMODEL_MUnn_TCTR3_Amp_q (&iedModel_MUnn_TCTR3_Amp_q) +#define IEDMODEL_MUnn_TCTR3_Amp_sVC (&iedModel_MUnn_TCTR3_Amp_sVC) +#define IEDMODEL_MUnn_TCTR3_Amp_sVC_scaleFactor (&iedModel_MUnn_TCTR3_Amp_sVC_scaleFactor) +#define IEDMODEL_MUnn_TCTR3_Amp_sVC_offset (&iedModel_MUnn_TCTR3_Amp_sVC_offset) +#define IEDMODEL_MUnn_TCTR4 (&iedModel_MUnn_TCTR4) +#define IEDMODEL_MUnn_TCTR4_Amp (&iedModel_MUnn_TCTR4_Amp) +#define IEDMODEL_MUnn_TCTR4_Amp_instMag (&iedModel_MUnn_TCTR4_Amp_instMag) +#define IEDMODEL_MUnn_TCTR4_Amp_instMag_i (&iedModel_MUnn_TCTR4_Amp_instMag_i) +#define IEDMODEL_MUnn_TCTR4_Amp_q (&iedModel_MUnn_TCTR4_Amp_q) +#define IEDMODEL_MUnn_TCTR4_Amp_sVC (&iedModel_MUnn_TCTR4_Amp_sVC) +#define IEDMODEL_MUnn_TCTR4_Amp_sVC_scaleFactor (&iedModel_MUnn_TCTR4_Amp_sVC_scaleFactor) +#define IEDMODEL_MUnn_TCTR4_Amp_sVC_offset (&iedModel_MUnn_TCTR4_Amp_sVC_offset) +#define IEDMODEL_MUnn_TVTR1 (&iedModel_MUnn_TVTR1) +#define IEDMODEL_MUnn_TVTR1_Vol (&iedModel_MUnn_TVTR1_Vol) +#define IEDMODEL_MUnn_TVTR1_Vol_instMag (&iedModel_MUnn_TVTR1_Vol_instMag) +#define IEDMODEL_MUnn_TVTR1_Vol_instMag_i (&iedModel_MUnn_TVTR1_Vol_instMag_i) +#define IEDMODEL_MUnn_TVTR1_Vol_q (&iedModel_MUnn_TVTR1_Vol_q) +#define IEDMODEL_MUnn_TVTR1_Vol_sVC (&iedModel_MUnn_TVTR1_Vol_sVC) +#define IEDMODEL_MUnn_TVTR1_Vol_sVC_scaleFactor (&iedModel_MUnn_TVTR1_Vol_sVC_scaleFactor) +#define IEDMODEL_MUnn_TVTR1_Vol_sVC_offset (&iedModel_MUnn_TVTR1_Vol_sVC_offset) +#define IEDMODEL_MUnn_TVTR2 (&iedModel_MUnn_TVTR2) +#define IEDMODEL_MUnn_TVTR2_Vol (&iedModel_MUnn_TVTR2_Vol) +#define IEDMODEL_MUnn_TVTR2_Vol_instMag (&iedModel_MUnn_TVTR2_Vol_instMag) +#define IEDMODEL_MUnn_TVTR2_Vol_instMag_i (&iedModel_MUnn_TVTR2_Vol_instMag_i) +#define IEDMODEL_MUnn_TVTR2_Vol_q (&iedModel_MUnn_TVTR2_Vol_q) +#define IEDMODEL_MUnn_TVTR2_Vol_sVC (&iedModel_MUnn_TVTR2_Vol_sVC) +#define IEDMODEL_MUnn_TVTR2_Vol_sVC_scaleFactor (&iedModel_MUnn_TVTR2_Vol_sVC_scaleFactor) +#define IEDMODEL_MUnn_TVTR2_Vol_sVC_offset (&iedModel_MUnn_TVTR2_Vol_sVC_offset) +#define IEDMODEL_MUnn_TVTR3 (&iedModel_MUnn_TVTR3) +#define IEDMODEL_MUnn_TVTR3_Vol (&iedModel_MUnn_TVTR3_Vol) +#define IEDMODEL_MUnn_TVTR3_Vol_instMag (&iedModel_MUnn_TVTR3_Vol_instMag) +#define IEDMODEL_MUnn_TVTR3_Vol_instMag_i (&iedModel_MUnn_TVTR3_Vol_instMag_i) +#define IEDMODEL_MUnn_TVTR3_Vol_q (&iedModel_MUnn_TVTR3_Vol_q) +#define IEDMODEL_MUnn_TVTR3_Vol_sVC (&iedModel_MUnn_TVTR3_Vol_sVC) +#define IEDMODEL_MUnn_TVTR3_Vol_sVC_scaleFactor (&iedModel_MUnn_TVTR3_Vol_sVC_scaleFactor) +#define IEDMODEL_MUnn_TVTR3_Vol_sVC_offset (&iedModel_MUnn_TVTR3_Vol_sVC_offset) +#define IEDMODEL_MUnn_TVTR4 (&iedModel_MUnn_TVTR4) +#define IEDMODEL_MUnn_TVTR4_Vol (&iedModel_MUnn_TVTR4_Vol) +#define IEDMODEL_MUnn_TVTR4_Vol_instMag (&iedModel_MUnn_TVTR4_Vol_instMag) +#define IEDMODEL_MUnn_TVTR4_Vol_instMag_i (&iedModel_MUnn_TVTR4_Vol_instMag_i) +#define IEDMODEL_MUnn_TVTR4_Vol_q (&iedModel_MUnn_TVTR4_Vol_q) +#define IEDMODEL_MUnn_TVTR4_Vol_sVC (&iedModel_MUnn_TVTR4_Vol_sVC) +#define IEDMODEL_MUnn_TVTR4_Vol_sVC_scaleFactor (&iedModel_MUnn_TVTR4_Vol_sVC_scaleFactor) +#define IEDMODEL_MUnn_TVTR4_Vol_sVC_offset (&iedModel_MUnn_TVTR4_Vol_sVC_offset) + +#endif /* STATIC_MODEL_H_ */ + diff --git a/examples/iec61850_9_2_LE_example/sv.icd b/examples/iec61850_9_2_LE_example/sv.icd new file mode 100644 index 00000000..78ade53b --- /dev/null +++ b/examples/iec61850_9_2_LE_example/sv.icd @@ -0,0 +1,148 @@ + + + +
+ + + Station bus + 10 + +
+

10.0.0.2

+

255.255.255.0

+

10.0.0.1

+

0001

+

00000001

+

0001

+
+ + +
+

1

+

4

+

01-0c-cd-04-00-01

+

1001

+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0.001 + + +0 + + + + +0.01 + + +0 + + + + + diff --git a/examples/iec61850_sv_client_example/CMakeLists.txt b/examples/iec61850_sv_client_example/CMakeLists.txt new file mode 100644 index 00000000..1b9b1334 --- /dev/null +++ b/examples/iec61850_sv_client_example/CMakeLists.txt @@ -0,0 +1,17 @@ + +set(iec61850_sv_client_example_SRCS + sv_client_example.c +) + +IF(WIN32) +set_source_files_properties(${iec61850_sv_client_example_SRCS} + PROPERTIES LANGUAGE CXX) +ENDIF(WIN32) + +add_executable(iec61850_sv_client_example + ${iec61850_sv_client_example_SRCS} +) + +target_link_libraries(iec61850_sv_client_example + iec61850 +) diff --git a/examples/iec61850_sv_client_example/Makefile b/examples/iec61850_sv_client_example/Makefile new file mode 100644 index 00000000..39f73461 --- /dev/null +++ b/examples/iec61850_sv_client_example/Makefile @@ -0,0 +1,17 @@ +LIBIEC_HOME=../.. + +PROJECT_BINARY_NAME = sv_client_example +PROJECT_SOURCES = sv_client_example.c + +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 + +$(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/iec61850_sv_client_example/sv_client_example.c b/examples/iec61850_sv_client_example/sv_client_example.c new file mode 100644 index 00000000..90922ec0 --- /dev/null +++ b/examples/iec61850_sv_client_example/sv_client_example.c @@ -0,0 +1,119 @@ +/* + * sv_client_example.c + * + * This example is intended to show how SV control blocks are accessed + */ + +#include "iec61850_client.h" + +#include +#include + +#include "hal_thread.h" + +static void +printDstAddr(PhyComAddress dstAddress) +{ + printf(" addr: "); + + int i; + for (i = 0; i < 6; i++) + printf("%02x", dstAddress.dstAddress[i]); + + printf("\n prio: %u\n", dstAddress.vlanPriority); + printf(" vid: %u\n", dstAddress.vlanId); + printf(" appID: %u\n", dstAddress.appId); +} + +int main(int argc, char** argv) { + + char* hostname; + int tcpPort = 102; + + if (argc > 1) + hostname = argv[1]; + else + hostname = "localhost"; + + if (argc > 2) + tcpPort = atoi(argv[2]); + + IedClientError error; + + IedConnection con = IedConnection_create(); + + IedConnection_connect(con, &error, hostname, tcpPort); + + if (error == IED_ERROR_OK) { + + char* svcbRef = "simpleIOGenericIO/LLN0.Volt"; + + ClientSVControlBlock svcb = ClientSVControlBlock_create(con, svcbRef); + + if (svcb != NULL) { + if (ClientSVControlBlock_isMulticast(svcb)) + printf("SVCB is multicast\n"); + else + printf("SVCB is unicast\n"); + + if (ClientSVControlBlock_setSvEna(svcb, true)) + printf("SVCB enabled\n"); + else + printf("Failed to enable SVCB\n"); + + printf("SvEna state: %i\n", ClientSVControlBlock_getSvEna(svcb)); + + char* msvID = ClientSVControlBlock_getMsvID(svcb); + + if (msvID != NULL) { + printf("MsvID: %s\n", msvID); + free(msvID); + } + + char* datSetName = ClientSVControlBlock_getDatSet(svcb); + + if (datSetName != NULL) { + printf("DatSet: %s\n", datSetName); + free(datSetName); + } + + printf("ConfRev: %i\n", ClientSVControlBlock_getConfRev(svcb)); + printf("SmpRate: %i\n", ClientSVControlBlock_getSmpRate(svcb)); + printf("SmpMod: %i\n", ClientSVControlBlock_getSmpMod(svcb)); + + int optFlds = ClientSVControlBlock_getOptFlds(svcb); + + printf("OptFlds: "); + if (optFlds & IEC61850_SV_OPT_REFRESH_TIME) + printf("refresh-time "); + if (optFlds & IEC61850_SV_OPT_SAMPLE_SYNC) + printf("sample-synch "); + if (optFlds & IEC61850_SV_OPT_SAMPLE_RATE) + printf("sample-rate "); + if (optFlds & IEC61850_SV_OPT_DATA_SET) + printf("date-set "); + if (optFlds & IEC61850_SV_OPT_SECURITY) + printf("security "); + printf("\n"); + + printf("noASDU: %i\n", ClientSVControlBlock_getNoASDU(svcb)); + + PhyComAddress dstAddress = ClientSVControlBlock_getDstAddress(svcb); + + printDstAddr(dstAddress); + + } + else { + printf("SVCB %s does not exist on server!\n", svcbRef); + } + + IedConnection_close(con); + } + else { + printf("Failed to connect to %s:%i\n", hostname, tcpPort); + } + + IedConnection_destroy(con); +} + + diff --git a/examples/mms_utility/mms_utility.c b/examples/mms_utility/mms_utility.c index b59d3337..f941514c 100644 --- a/examples/mms_utility/mms_utility.c +++ b/examples/mms_utility/mms_utility.c @@ -8,13 +8,27 @@ static void print_help() { - printf("MMS utility (libiec61850 v0.5) options:\n"); + + printf("MMS utility (libiec61850 " LIBIEC61850_VERSION ") options:\n"); printf("-h specify hostname\n"); printf("-p specify port\n"); printf("-l specify maximum PDU size\n"); printf("-d show list of MMS domains\n"); printf("-i show server identity\n"); printf("-t show domain directory\n"); + printf("-r read domain variable\n"); + printf("-a specify domain for read or write command\n"); + printf("-f show file list\n"); +} + +static void +mmsFileDirectoryHandler (void* parameter, char* filename, uint32_t size, uint64_t lastModified) +{ + char* lastName = (char*) parameter; + + strcpy (lastName, filename); + + printf("%s\n", filename); } int main(int argc, char** argv) { @@ -24,14 +38,19 @@ int main(int argc, char** argv) { int maxPduSize = 65000; char* domainName = NULL; + char* variableName = NULL; int readDeviceList = 0; int getDeviceDirectory = 0; int identifyDevice = 0; + int readWriteHasDomain = 0; + int readVariable = 0; + int showFileList = 0; + int c; - while ((c = getopt(argc, argv, "idh:p:l:t:")) != -1) + while ((c = getopt(argc, argv, "ifdh:p:l:t:a:r:")) != -1) switch (c) { case 'h': hostname = copyString(optarg); @@ -52,6 +71,18 @@ int main(int argc, char** argv) { getDeviceDirectory = 1; domainName = copyString(optarg); break; + case 'a': + readWriteHasDomain = 1; + domainName = copyString(optarg); + break; + case 'r': + readVariable = 1; + variableName = copyString(optarg); + break; + case 'f': + showFileList = 1; + break; + default: print_help(); return 0; @@ -103,12 +134,49 @@ int main(int argc, char** argv) { while ((element = LinkedList_getNext(element)) != NULL) { char* name = (char*) element->data; - if (strchr(name, '$') == NULL) - printf(" %s\n", name); + printf(" %s\n", name); } } + if (readVariable) { + if (readWriteHasDomain) { + MmsValue* result = MmsConnection_readVariable(con, &error, domainName, variableName); + + if (error != MMS_ERROR_NONE) { + printf("Reading variable failed: (ERROR %i)\n", error); + } + else { + printf("Read SUCCESS\n"); + + + if (result != NULL) { + char outbuf[1024]; + + MmsValue_printToBuffer(result, outbuf, 1024); + + printf("%s\n", outbuf); + } + else + printf("result: NULL\n"); + } + + } + else + printf("Reading VMD scope variable not yet supported!\n"); + } + + if (showFileList) { + char lastName[300]; + lastName[0] = 0; + + char* continueAfter = NULL; + + while (MmsConnection_getFileDirectory(con, &error, "", continueAfter, mmsFileDirectoryHandler, lastName)) { + continueAfter = lastName; + } + } + exit: MmsConnection_destroy(con); } diff --git a/examples/server_example1/static_model.c b/examples/server_example1/static_model.c index 88e51ab6..3f4b234b 100644 --- a/examples/server_example1/static_model.c +++ b/examples/server_example1/static_model.c @@ -3,171 +3,38 @@ * * automatically generated from sampleModel_with_dataset.icd */ -#include -#include "iec61850_model.h" +#include "static_model.h" -extern IedModel iedModel; static void initializeValues(); -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; - -extern DataSet ds_Device1_LLN0_dataset1; - - -extern DataSetEntry ds_Device1_LLN0_dataset1_fcda0; -extern DataSetEntry ds_Device1_LLN0_dataset1_fcda1; -extern DataSetEntry ds_Device1_LLN0_dataset1_fcda2; - -DataSetEntry ds_Device1_LLN0_dataset1_fcda0 = { + +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, - &ds_Device1_LLN0_dataset1_fcda1 + &iedModelds_Device1_LLN0_dataset1_fcda1 }; -DataSetEntry ds_Device1_LLN0_dataset1_fcda1 = { +DataSetEntry iedModelds_Device1_LLN0_dataset1_fcda1 = { "Device1", false, "MMXU1$ST$Mod$q", -1, NULL, NULL, - &ds_Device1_LLN0_dataset1_fcda2 + &iedModelds_Device1_LLN0_dataset1_fcda2 }; -DataSetEntry ds_Device1_LLN0_dataset1_fcda2 = { +DataSetEntry iedModelds_Device1_LLN0_dataset1_fcda2 = { "Device1", false, "MMXU1$CF$Mod$ctlModel", @@ -177,11 +44,11 @@ DataSetEntry ds_Device1_LLN0_dataset1_fcda2 = { NULL }; -DataSet ds_Device1_LLN0_dataset1 = { +DataSet iedModelds_Device1_LLN0_dataset1 = { "Device1", "LLN0$dataset1", 3, - &ds_Device1_LLN0_dataset1_fcda0, + &iedModelds_Device1_LLN0_dataset1_fcda0, NULL }; @@ -218,7 +85,7 @@ DataAttribute iedModel_Device1_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -231,7 +98,7 @@ DataAttribute iedModel_Device1_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -244,7 +111,7 @@ DataAttribute iedModel_Device1_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -266,7 +133,7 @@ DataAttribute iedModel_Device1_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -279,7 +146,7 @@ DataAttribute iedModel_Device1_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -292,7 +159,7 @@ DataAttribute iedModel_Device1_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -314,7 +181,7 @@ DataAttribute iedModel_Device1_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -327,7 +194,7 @@ DataAttribute iedModel_Device1_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -340,7 +207,7 @@ DataAttribute iedModel_Device1_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -362,7 +229,7 @@ DataAttribute iedModel_Device1_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -375,7 +242,7 @@ DataAttribute iedModel_Device1_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -388,7 +255,7 @@ DataAttribute iedModel_Device1_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -401,7 +268,7 @@ DataAttribute iedModel_Device1_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -414,7 +281,7 @@ DataAttribute iedModel_Device1_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -444,7 +311,7 @@ DataAttribute iedModel_Device1_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -466,7 +333,7 @@ DataAttribute iedModel_Device1_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -479,7 +346,7 @@ DataAttribute iedModel_Device1_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -492,7 +359,7 @@ DataAttribute iedModel_Device1_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -514,7 +381,7 @@ DataAttribute iedModel_Device1_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -527,7 +394,7 @@ DataAttribute iedModel_Device1_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -540,7 +407,7 @@ DataAttribute iedModel_Device1_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -570,7 +437,7 @@ DataAttribute iedModel_Device1_DGEN1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -583,7 +450,7 @@ DataAttribute iedModel_Device1_DGEN1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -596,7 +463,7 @@ DataAttribute iedModel_Device1_DGEN1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -618,7 +485,7 @@ DataAttribute iedModel_Device1_DGEN1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -631,7 +498,7 @@ DataAttribute iedModel_Device1_DGEN1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -644,7 +511,7 @@ DataAttribute iedModel_Device1_DGEN1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -666,7 +533,7 @@ DataAttribute iedModel_Device1_DGEN1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -679,7 +546,7 @@ DataAttribute iedModel_Device1_DGEN1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -692,7 +559,7 @@ DataAttribute iedModel_Device1_DGEN1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -714,7 +581,7 @@ DataAttribute iedModel_Device1_DGEN1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -727,7 +594,7 @@ DataAttribute iedModel_Device1_DGEN1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -740,7 +607,7 @@ DataAttribute iedModel_Device1_DGEN1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -762,7 +629,7 @@ DataAttribute iedModel_Device1_DGEN1_OpTmh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -775,7 +642,7 @@ DataAttribute iedModel_Device1_DGEN1_OpTmh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -788,7 +655,7 @@ DataAttribute iedModel_Device1_DGEN1_OpTmh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -810,7 +677,7 @@ DataAttribute iedModel_Device1_DGEN1_GnOpSt_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -823,7 +690,7 @@ DataAttribute iedModel_Device1_DGEN1_GnOpSt_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -836,7 +703,7 @@ DataAttribute iedModel_Device1_DGEN1_GnOpSt_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -858,7 +725,7 @@ DataAttribute iedModel_Device1_DGEN1_OpTmsRs_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -871,7 +738,7 @@ DataAttribute iedModel_Device1_DGEN1_OpTmsRs_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -884,7 +751,7 @@ DataAttribute iedModel_Device1_DGEN1_OpTmsRs_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -906,7 +773,7 @@ DataAttribute iedModel_Device1_DGEN1_TotWh_mag = { (ModelNode*) &iedModel_Device1_DGEN1_TotWh_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -919,7 +786,7 @@ DataAttribute iedModel_Device1_DGEN1_TotWh_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -932,7 +799,7 @@ DataAttribute iedModel_Device1_DGEN1_TotWh_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -945,7 +812,7 @@ DataAttribute iedModel_Device1_DGEN1_TotWh_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -975,7 +842,7 @@ DataAttribute iedModel_Device1_DSCH1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -988,7 +855,7 @@ DataAttribute iedModel_Device1_DSCH1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1001,7 +868,7 @@ DataAttribute iedModel_Device1_DSCH1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1023,7 +890,7 @@ DataAttribute iedModel_Device1_DSCH1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1036,7 +903,7 @@ DataAttribute iedModel_Device1_DSCH1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1049,7 +916,7 @@ DataAttribute iedModel_Device1_DSCH1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1071,7 +938,7 @@ DataAttribute iedModel_Device1_DSCH1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1084,7 +951,7 @@ DataAttribute iedModel_Device1_DSCH1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1097,7 +964,7 @@ DataAttribute iedModel_Device1_DSCH1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1119,7 +986,7 @@ DataAttribute iedModel_Device1_DSCH1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1132,7 +999,7 @@ DataAttribute iedModel_Device1_DSCH1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1145,7 +1012,7 @@ DataAttribute iedModel_Device1_DSCH1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1167,7 +1034,7 @@ DataAttribute iedModel_Device1_DSCH1_SchdSt_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1180,7 +1047,7 @@ DataAttribute iedModel_Device1_DSCH1_SchdSt_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1193,7 +1060,7 @@ DataAttribute iedModel_Device1_DSCH1_SchdSt_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1242,7 +1109,7 @@ DataAttribute iedModel_Device1_DSCH1_SchdAbsTm_val = { NULL, 255, IEC61850_FC_SP, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1255,7 +1122,7 @@ DataAttribute iedModel_Device1_DSCH1_SchdAbsTm_time = { NULL, 255, IEC61850_FC_SP, - TIMESTAMP, + IEC61850_TIMESTAMP, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1285,7 +1152,7 @@ DataAttribute iedModel_Device1_MMXU1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1298,7 +1165,7 @@ DataAttribute iedModel_Device1_MMXU1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1311,7 +1178,7 @@ DataAttribute iedModel_Device1_MMXU1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1333,7 +1200,7 @@ DataAttribute iedModel_Device1_MMXU1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1346,7 +1213,7 @@ DataAttribute iedModel_Device1_MMXU1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1359,7 +1226,7 @@ DataAttribute iedModel_Device1_MMXU1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1381,7 +1248,7 @@ DataAttribute iedModel_Device1_MMXU1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1394,7 +1261,7 @@ DataAttribute iedModel_Device1_MMXU1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1407,7 +1274,7 @@ DataAttribute iedModel_Device1_MMXU1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1429,7 +1296,7 @@ DataAttribute iedModel_Device1_MMXU1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1442,7 +1309,7 @@ DataAttribute iedModel_Device1_MMXU1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1455,7 +1322,7 @@ DataAttribute iedModel_Device1_MMXU1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1485,7 +1352,7 @@ DataAttribute iedModel_Device1_MMXU2_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1498,7 +1365,7 @@ DataAttribute iedModel_Device1_MMXU2_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1511,7 +1378,7 @@ DataAttribute iedModel_Device1_MMXU2_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1533,7 +1400,7 @@ DataAttribute iedModel_Device1_MMXU2_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1546,7 +1413,7 @@ DataAttribute iedModel_Device1_MMXU2_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1559,7 +1426,7 @@ DataAttribute iedModel_Device1_MMXU2_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1581,7 +1448,7 @@ DataAttribute iedModel_Device1_MMXU2_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1594,7 +1461,7 @@ DataAttribute iedModel_Device1_MMXU2_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1607,7 +1474,7 @@ DataAttribute iedModel_Device1_MMXU2_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1629,7 +1496,7 @@ DataAttribute iedModel_Device1_MMXU2_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1642,7 +1509,7 @@ DataAttribute iedModel_Device1_MMXU2_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1655,7 +1522,7 @@ DataAttribute iedModel_Device1_MMXU2_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1677,7 +1544,7 @@ DataAttribute iedModel_Device1_MMXU2_TotW_mag = { (ModelNode*) &iedModel_Device1_MMXU2_TotW_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1690,7 +1557,7 @@ DataAttribute iedModel_Device1_MMXU2_TotW_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1703,7 +1570,7 @@ DataAttribute iedModel_Device1_MMXU2_TotW_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1716,14 +1583,15 @@ DataAttribute iedModel_Device1_MMXU2_TotW_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + 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, 9, 239, 50, 900000, NULL}; +ReportControlBlock iedModel_Device1_LLN0_report0 = {&iedModel_Device1_LLN0, "LLN0_Events_BuffRep01", "LLN0$RP$brcbEV1", true, "dataset1", 1, 25, 239, 50, 900000, NULL}; + @@ -1731,10 +1599,11 @@ ReportControlBlock iedModel_Device1_LLN0_report0 = {&iedModel_Device1_LLN0, "LLN IedModel iedModel = { "SampleIED", &iedModel_Device1, - &ds_Device1_LLN0_dataset1, + &iedModelds_Device1_LLN0_dataset1, &iedModel_Device1_LLN0_report0, NULL, NULL, + NULL, initializeValues }; diff --git a/examples/server_example2/static_model.c b/examples/server_example2/static_model.c index fdc336cb..2e935caf 100644 --- a/examples/server_example2/static_model.c +++ b/examples/server_example2/static_model.c @@ -3,357 +3,60 @@ * * automatically generated from complexModel.icd */ -#include -#include "iec61850_model.h" +#include "static_model.h" -extern IedModel iedModel; static void initializeValues(); -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; - -extern DataSet ds_Inverter_LLN0_dataset1; - - -extern DataSetEntry ds_Inverter_LLN0_dataset1_fcda0; -extern DataSetEntry ds_Inverter_LLN0_dataset1_fcda1; -extern DataSetEntry ds_Inverter_LLN0_dataset1_fcda2; -extern DataSetEntry ds_Inverter_LLN0_dataset1_fcda3; -extern DataSetEntry ds_Inverter_LLN0_dataset1_fcda4; - -DataSetEntry ds_Inverter_LLN0_dataset1_fcda0 = { + +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, - &ds_Inverter_LLN0_dataset1_fcda1 + &iedModelds_Inverter_LLN0_dataset1_fcda1 }; -DataSetEntry ds_Inverter_LLN0_dataset1_fcda1 = { +DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda1 = { "Battery", false, "LLN0$ST$Mod$q", -1, NULL, NULL, - &ds_Inverter_LLN0_dataset1_fcda2 + &iedModelds_Inverter_LLN0_dataset1_fcda2 }; -DataSetEntry ds_Inverter_LLN0_dataset1_fcda2 = { +DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda2 = { "Inverter", false, "MMXU1$ST$Mod$q", -1, NULL, NULL, - &ds_Inverter_LLN0_dataset1_fcda3 + &iedModelds_Inverter_LLN0_dataset1_fcda3 }; -DataSetEntry ds_Inverter_LLN0_dataset1_fcda3 = { +DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda3 = { "Inverter", false, "MMXU1$CF$Mod$ctlModel", -1, NULL, NULL, - &ds_Inverter_LLN0_dataset1_fcda4 + &iedModelds_Inverter_LLN0_dataset1_fcda4 }; -DataSetEntry ds_Inverter_LLN0_dataset1_fcda4 = { +DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda4 = { "Inverter", false, "MMXU1$MX$TotW$mag", @@ -363,11 +66,11 @@ DataSetEntry ds_Inverter_LLN0_dataset1_fcda4 = { NULL }; -DataSet ds_Inverter_LLN0_dataset1 = { +DataSet iedModelds_Inverter_LLN0_dataset1 = { "Inverter", "LLN0$dataset1", 5, - &ds_Inverter_LLN0_dataset1_fcda0, + &iedModelds_Inverter_LLN0_dataset1_fcda0, NULL }; @@ -404,7 +107,7 @@ DataAttribute iedModel_Inverter_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -417,7 +120,7 @@ DataAttribute iedModel_Inverter_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -430,7 +133,7 @@ DataAttribute iedModel_Inverter_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -452,7 +155,7 @@ DataAttribute iedModel_Inverter_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -465,7 +168,7 @@ DataAttribute iedModel_Inverter_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -478,7 +181,7 @@ DataAttribute iedModel_Inverter_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -500,7 +203,7 @@ DataAttribute iedModel_Inverter_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -513,7 +216,7 @@ DataAttribute iedModel_Inverter_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -526,7 +229,7 @@ DataAttribute iedModel_Inverter_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -548,7 +251,7 @@ DataAttribute iedModel_Inverter_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -561,7 +264,7 @@ DataAttribute iedModel_Inverter_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -574,7 +277,7 @@ DataAttribute iedModel_Inverter_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -587,7 +290,7 @@ DataAttribute iedModel_Inverter_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -600,7 +303,7 @@ DataAttribute iedModel_Inverter_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -630,7 +333,7 @@ DataAttribute iedModel_Inverter_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -652,7 +355,7 @@ DataAttribute iedModel_Inverter_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -665,7 +368,7 @@ DataAttribute iedModel_Inverter_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -678,7 +381,7 @@ DataAttribute iedModel_Inverter_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -700,7 +403,7 @@ DataAttribute iedModel_Inverter_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -713,7 +416,7 @@ DataAttribute iedModel_Inverter_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -726,7 +429,7 @@ DataAttribute iedModel_Inverter_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -756,7 +459,7 @@ DataAttribute iedModel_Inverter_ZINV1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -769,7 +472,7 @@ DataAttribute iedModel_Inverter_ZINV1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -782,7 +485,7 @@ DataAttribute iedModel_Inverter_ZINV1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -804,7 +507,7 @@ DataAttribute iedModel_Inverter_ZINV1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -817,7 +520,7 @@ DataAttribute iedModel_Inverter_ZINV1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -830,7 +533,7 @@ DataAttribute iedModel_Inverter_ZINV1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -852,7 +555,7 @@ DataAttribute iedModel_Inverter_ZINV1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -865,7 +568,7 @@ DataAttribute iedModel_Inverter_ZINV1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -878,7 +581,7 @@ DataAttribute iedModel_Inverter_ZINV1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -900,7 +603,7 @@ DataAttribute iedModel_Inverter_ZINV1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -913,7 +616,7 @@ DataAttribute iedModel_Inverter_ZINV1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -926,7 +629,7 @@ DataAttribute iedModel_Inverter_ZINV1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -948,7 +651,7 @@ DataAttribute iedModel_Inverter_ZINV1_WRtg_setMag = { (ModelNode*) &iedModel_Inverter_ZINV1_WRtg_setMag_f, 0, IEC61850_FC_SP, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -961,7 +664,7 @@ DataAttribute iedModel_Inverter_ZINV1_WRtg_setMag_f = { NULL, 0, IEC61850_FC_SP, - FLOAT32, + IEC61850_FLOAT32, 0, NULL, 0}; @@ -974,7 +677,7 @@ DataAttribute iedModel_Inverter_ZINV1_WRtg_units = { (ModelNode*) &iedModel_Inverter_ZINV1_WRtg_units_SIUnit, 0, IEC61850_FC_CF, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -987,7 +690,7 @@ DataAttribute iedModel_Inverter_ZINV1_WRtg_units_SIUnit = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1009,7 +712,7 @@ DataAttribute iedModel_Inverter_ZINV1_VarRtg_setMag = { (ModelNode*) &iedModel_Inverter_ZINV1_VarRtg_setMag_f, 0, IEC61850_FC_SP, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1022,7 +725,7 @@ DataAttribute iedModel_Inverter_ZINV1_VarRtg_setMag_f = { NULL, 0, IEC61850_FC_SP, - FLOAT32, + IEC61850_FLOAT32, 0, NULL, 0}; @@ -1035,7 +738,7 @@ DataAttribute iedModel_Inverter_ZINV1_VarRtg_units = { (ModelNode*) &iedModel_Inverter_ZINV1_VarRtg_units_SIUnit, 0, IEC61850_FC_CF, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1048,7 +751,7 @@ DataAttribute iedModel_Inverter_ZINV1_VarRtg_units_SIUnit = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1070,7 +773,7 @@ DataAttribute iedModel_Inverter_ZINV1_ACTyp_setVal = { NULL, 0, IEC61850_FC_SP, - INT32, + IEC61850_INT32, 0, NULL, 0}; @@ -1092,7 +795,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutWSet_setMag = { (ModelNode*) &iedModel_Inverter_ZINV1_OutWSet_setMag_f, 0, IEC61850_FC_SP, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1105,7 +808,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutWSet_setMag_f = { NULL, 0, IEC61850_FC_SP, - FLOAT32, + IEC61850_FLOAT32, 0, NULL, 0}; @@ -1118,7 +821,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutWSet_units = { (ModelNode*) &iedModel_Inverter_ZINV1_OutWSet_units_SIUnit, 0, IEC61850_FC_CF, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1131,7 +834,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutWSet_units_SIUnit = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1153,7 +856,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutVarSet_setMag = { (ModelNode*) &iedModel_Inverter_ZINV1_OutVarSet_setMag_f, 0, IEC61850_FC_SP, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1166,7 +869,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutVarSet_setMag_f = { NULL, 0, IEC61850_FC_SP, - FLOAT32, + IEC61850_FLOAT32, 0, NULL, 0}; @@ -1179,7 +882,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutVarSet_units = { (ModelNode*) &iedModel_Inverter_ZINV1_OutVarSet_units_SIUnit, 0, IEC61850_FC_CF, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1192,7 +895,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutVarSet_units_SIUnit = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1222,7 +925,7 @@ DataAttribute iedModel_Inverter_MMXU1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1235,7 +938,7 @@ DataAttribute iedModel_Inverter_MMXU1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1248,7 +951,7 @@ DataAttribute iedModel_Inverter_MMXU1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1270,7 +973,7 @@ DataAttribute iedModel_Inverter_MMXU1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1283,7 +986,7 @@ DataAttribute iedModel_Inverter_MMXU1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1296,7 +999,7 @@ DataAttribute iedModel_Inverter_MMXU1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1318,7 +1021,7 @@ DataAttribute iedModel_Inverter_MMXU1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1331,7 +1034,7 @@ DataAttribute iedModel_Inverter_MMXU1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1344,7 +1047,7 @@ DataAttribute iedModel_Inverter_MMXU1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1366,7 +1069,7 @@ DataAttribute iedModel_Inverter_MMXU1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1379,7 +1082,7 @@ DataAttribute iedModel_Inverter_MMXU1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1392,7 +1095,7 @@ DataAttribute iedModel_Inverter_MMXU1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1414,7 +1117,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotW_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_TotW_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1427,7 +1130,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotW_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1440,7 +1143,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotW_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1453,7 +1156,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotW_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1475,7 +1178,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVAr_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_TotVAr_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1488,7 +1191,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVAr_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1501,7 +1204,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVAr_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1514,7 +1217,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVAr_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1536,7 +1239,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVA_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_TotVA_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1549,7 +1252,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVA_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1562,7 +1265,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVA_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1575,7 +1278,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVA_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1597,7 +1300,7 @@ DataAttribute iedModel_Inverter_MMXU1_Hz_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_Hz_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1610,7 +1313,7 @@ DataAttribute iedModel_Inverter_MMXU1_Hz_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1623,7 +1326,7 @@ DataAttribute iedModel_Inverter_MMXU1_Hz_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1636,7 +1339,7 @@ DataAttribute iedModel_Inverter_MMXU1_Hz_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1667,7 +1370,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1680,7 +1383,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1693,7 +1396,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1706,7 +1409,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1719,7 +1422,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1741,7 +1444,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1754,7 +1457,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1767,7 +1470,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1780,7 +1483,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1793,7 +1496,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1815,7 +1518,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1828,7 +1531,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1841,7 +1544,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1854,7 +1557,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1867,7 +1570,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1889,7 +1592,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1902,7 +1605,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1915,7 +1618,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1928,7 +1631,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_neut_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1941,7 +1644,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_neut_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1972,7 +1675,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1985,7 +1688,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1998,7 +1701,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2011,7 +1714,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsA_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2024,7 +1727,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsA_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2046,7 +1749,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2059,7 +1762,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2072,7 +1775,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2085,7 +1788,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsB_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2098,7 +1801,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsB_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2120,7 +1823,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2133,7 +1836,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2146,7 +1849,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2159,7 +1862,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsC_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2172,7 +1875,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsC_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2194,7 +1897,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_A_neut_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2207,7 +1910,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_A_neut_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2220,7 +1923,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2233,7 +1936,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_neut_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2246,7 +1949,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_neut_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2277,7 +1980,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2290,7 +1993,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2303,7 +2006,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2316,7 +2019,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsA_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2329,7 +2032,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsA_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2351,7 +2054,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2364,7 +2067,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2377,7 +2080,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2390,7 +2093,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsB_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2403,7 +2106,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsB_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2425,7 +2128,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2438,7 +2141,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2451,7 +2154,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2464,7 +2167,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsC_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2477,7 +2180,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsC_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2516,7 +2219,7 @@ DataAttribute iedModel_Battery_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2529,7 +2232,7 @@ DataAttribute iedModel_Battery_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2542,7 +2245,7 @@ DataAttribute iedModel_Battery_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2564,7 +2267,7 @@ DataAttribute iedModel_Battery_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2577,7 +2280,7 @@ DataAttribute iedModel_Battery_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2590,7 +2293,7 @@ DataAttribute iedModel_Battery_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2612,7 +2315,7 @@ DataAttribute iedModel_Battery_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2625,7 +2328,7 @@ DataAttribute iedModel_Battery_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2638,7 +2341,7 @@ DataAttribute iedModel_Battery_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2660,7 +2363,7 @@ DataAttribute iedModel_Battery_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2673,7 +2376,7 @@ DataAttribute iedModel_Battery_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2686,7 +2389,7 @@ DataAttribute iedModel_Battery_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2699,7 +2402,7 @@ DataAttribute iedModel_Battery_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2712,7 +2415,7 @@ DataAttribute iedModel_Battery_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2742,7 +2445,7 @@ DataAttribute iedModel_Battery_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2764,7 +2467,7 @@ DataAttribute iedModel_Battery_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2777,7 +2480,7 @@ DataAttribute iedModel_Battery_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2790,7 +2493,7 @@ DataAttribute iedModel_Battery_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2812,7 +2515,7 @@ DataAttribute iedModel_Battery_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2825,7 +2528,7 @@ DataAttribute iedModel_Battery_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2838,7 +2541,7 @@ DataAttribute iedModel_Battery_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2868,7 +2571,7 @@ DataAttribute iedModel_Battery_ZBAT1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2881,7 +2584,7 @@ DataAttribute iedModel_Battery_ZBAT1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2894,7 +2597,7 @@ DataAttribute iedModel_Battery_ZBAT1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2916,7 +2619,7 @@ DataAttribute iedModel_Battery_ZBAT1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2929,7 +2632,7 @@ DataAttribute iedModel_Battery_ZBAT1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2942,7 +2645,7 @@ DataAttribute iedModel_Battery_ZBAT1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2964,7 +2667,7 @@ DataAttribute iedModel_Battery_ZBAT1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2977,7 +2680,7 @@ DataAttribute iedModel_Battery_ZBAT1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2990,7 +2693,7 @@ DataAttribute iedModel_Battery_ZBAT1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3012,7 +2715,7 @@ DataAttribute iedModel_Battery_ZBAT1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3025,7 +2728,7 @@ DataAttribute iedModel_Battery_ZBAT1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3038,7 +2741,7 @@ DataAttribute iedModel_Battery_ZBAT1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3060,7 +2763,7 @@ DataAttribute iedModel_Battery_ZBAT1_Vol_mag = { (ModelNode*) &iedModel_Battery_ZBAT1_Vol_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3073,7 +2776,7 @@ DataAttribute iedModel_Battery_ZBAT1_Vol_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3086,7 +2789,7 @@ DataAttribute iedModel_Battery_ZBAT1_Vol_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3099,7 +2802,7 @@ DataAttribute iedModel_Battery_ZBAT1_Vol_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3121,7 +2824,7 @@ DataAttribute iedModel_Battery_ZBAT1_Amp_mag = { (ModelNode*) &iedModel_Battery_ZBAT1_Amp_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3134,7 +2837,7 @@ DataAttribute iedModel_Battery_ZBAT1_Amp_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3147,7 +2850,7 @@ DataAttribute iedModel_Battery_ZBAT1_Amp_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3160,7 +2863,7 @@ DataAttribute iedModel_Battery_ZBAT1_Amp_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3190,7 +2893,7 @@ DataAttribute iedModel_Battery_ZBTC1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3203,7 +2906,7 @@ DataAttribute iedModel_Battery_ZBTC1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3216,7 +2919,7 @@ DataAttribute iedModel_Battery_ZBTC1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3238,7 +2941,7 @@ DataAttribute iedModel_Battery_ZBTC1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3251,7 +2954,7 @@ DataAttribute iedModel_Battery_ZBTC1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3264,7 +2967,7 @@ DataAttribute iedModel_Battery_ZBTC1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3286,7 +2989,7 @@ DataAttribute iedModel_Battery_ZBTC1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3299,7 +3002,7 @@ DataAttribute iedModel_Battery_ZBTC1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3312,7 +3015,7 @@ DataAttribute iedModel_Battery_ZBTC1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3334,7 +3037,7 @@ DataAttribute iedModel_Battery_ZBTC1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3347,7 +3050,7 @@ DataAttribute iedModel_Battery_ZBTC1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3360,7 +3063,7 @@ DataAttribute iedModel_Battery_ZBTC1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3409,7 +3112,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaV_mag = { (ModelNode*) &iedModel_Battery_ZBTC1_ChaV_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3422,7 +3125,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaV_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3435,7 +3138,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaV_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3448,7 +3151,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaV_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3470,7 +3173,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaA_mag = { (ModelNode*) &iedModel_Battery_ZBTC1_ChaA_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3483,7 +3186,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaA_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3496,7 +3199,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaA_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3509,7 +3212,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaA_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3548,7 +3251,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3561,7 +3264,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3574,7 +3277,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3596,7 +3299,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3609,7 +3312,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3622,7 +3325,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3644,7 +3347,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3657,7 +3360,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3670,7 +3373,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3692,7 +3395,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3705,7 +3408,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3718,7 +3421,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3731,7 +3434,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3744,7 +3447,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3774,7 +3477,7 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3796,7 +3499,7 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3809,7 +3512,7 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3822,7 +3525,7 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3844,7 +3547,7 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3857,7 +3560,7 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3870,14 +3573,15 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; extern ReportControlBlock iedModel_Inverter_LLN0_report0; -ReportControlBlock iedModel_Inverter_LLN0_report0 = {&iedModel_Inverter_LLN0, "rcb101", "ID", false, "dataset1", 0, 3, 32, 0, 0, NULL}; +ReportControlBlock iedModel_Inverter_LLN0_report0 = {&iedModel_Inverter_LLN0, "rcb101", "ID", false, "dataset1", 0, 19, 32, 0, 0, NULL}; + @@ -3885,10 +3589,11 @@ ReportControlBlock iedModel_Inverter_LLN0_report0 = {&iedModel_Inverter_LLN0, "r IedModel iedModel = { "ied1", &iedModel_Inverter, - &ds_Inverter_LLN0_dataset1, + &iedModelds_Inverter_LLN0_dataset1, &iedModel_Inverter_LLN0_report0, NULL, NULL, + NULL, initializeValues }; diff --git a/examples/server_example3/static_model.c b/examples/server_example3/static_model.c index 9208a9fb..84faec82 100644 --- a/examples/server_example3/static_model.c +++ b/examples/server_example3/static_model.c @@ -248,7 +248,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -261,7 +261,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -274,7 +274,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -287,7 +287,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -309,7 +309,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -322,7 +322,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -335,7 +335,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -357,7 +357,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -370,7 +370,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -383,7 +383,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -405,7 +405,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -418,7 +418,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -431,7 +431,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -444,7 +444,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -457,7 +457,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -487,7 +487,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -509,7 +509,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -522,7 +522,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -535,7 +535,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -557,7 +557,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -570,7 +570,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -583,7 +583,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -613,7 +613,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -626,7 +626,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -639,7 +639,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -661,7 +661,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -674,7 +674,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -687,7 +687,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -709,7 +709,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -722,7 +722,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -735,7 +735,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -757,7 +757,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -770,7 +770,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -783,7 +783,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -805,7 +805,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -818,7 +818,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -831,7 +831,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -844,7 +844,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -866,7 +866,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -879,7 +879,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -892,7 +892,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -905,7 +905,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -927,7 +927,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -940,7 +940,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -953,7 +953,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -966,7 +966,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -988,7 +988,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1001,7 +1001,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1014,7 +1014,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1027,7 +1027,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1049,7 +1049,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1062,7 +1062,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1075,7 +1075,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1088,7 +1088,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1101,7 +1101,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1114,7 +1114,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1127,7 +1127,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1140,7 +1140,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1153,7 +1153,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1166,7 +1166,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1179,7 +1179,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1192,7 +1192,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1205,7 +1205,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1227,7 +1227,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1240,7 +1240,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1253,7 +1253,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1266,7 +1266,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1279,7 +1279,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1292,7 +1292,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1305,7 +1305,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1318,7 +1318,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1331,7 +1331,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1344,7 +1344,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1357,7 +1357,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1370,7 +1370,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1383,7 +1383,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1405,7 +1405,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1418,7 +1418,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1431,7 +1431,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1444,7 +1444,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1457,7 +1457,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1470,7 +1470,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1483,7 +1483,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1496,7 +1496,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1509,7 +1509,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1522,7 +1522,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1535,7 +1535,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1548,7 +1548,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1561,7 +1561,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1583,7 +1583,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1596,7 +1596,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1609,7 +1609,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1622,7 +1622,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1635,7 +1635,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1648,7 +1648,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1661,7 +1661,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1674,7 +1674,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1687,7 +1687,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1700,7 +1700,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1713,7 +1713,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1726,7 +1726,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1739,7 +1739,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1761,7 +1761,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1774,7 +1774,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1787,7 +1787,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1809,7 +1809,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1822,7 +1822,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1835,7 +1835,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1857,7 +1857,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1870,7 +1870,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1883,7 +1883,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1905,7 +1905,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1918,7 +1918,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1931,7 +1931,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1944,13 +1944,14 @@ 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, 8, 111, 50, 1000, &iedModel_GenericIO_LLN0_report1}; -ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "EventsIndexed01", "Events2", false, "Events", 1, 8, 111, 50, 1000, &iedModel_GenericIO_LLN0_report2}; -ReportControlBlock iedModel_GenericIO_LLN0_report2 = {&iedModel_GenericIO_LLN0, "EventsIndexed02", "Events2", false, "Events", 1, 8, 111, 50, 1000, &iedModel_GenericIO_LLN0_report3}; -ReportControlBlock iedModel_GenericIO_LLN0_report3 = {&iedModel_GenericIO_LLN0, "EventsIndexed03", "Events2", false, "Events", 1, 8, 111, 50, 1000, &iedModel_GenericIO_LLN0_report4}; -ReportControlBlock iedModel_GenericIO_LLN0_report4 = {&iedModel_GenericIO_LLN0, "Measurements01", "Measurements", true, "Measurements", 1, 0, 111, 50, 1000, &iedModel_GenericIO_LLN0_report5}; -ReportControlBlock iedModel_GenericIO_LLN0_report5 = {&iedModel_GenericIO_LLN0, "Measurements02", "Measurements", true, "Measurements", 1, 0, 111, 50, 1000, &iedModel_GenericIO_LLN0_report6}; -ReportControlBlock iedModel_GenericIO_LLN0_report6 = {&iedModel_GenericIO_LLN0, "Measurements03", "Measurements", true, "Measurements", 1, 0, 111, 50, 1000, NULL}; +ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events1", false, "Events", 4294967295, 24, 111, 50, 1000, &iedModel_GenericIO_LLN0_report1}; +ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "EventsIndexed01", "Events2", false, "Events", 1, 24, 111, 50, 1000, &iedModel_GenericIO_LLN0_report2}; +ReportControlBlock iedModel_GenericIO_LLN0_report2 = {&iedModel_GenericIO_LLN0, "EventsIndexed02", "Events2", false, "Events", 1, 24, 111, 50, 1000, &iedModel_GenericIO_LLN0_report3}; +ReportControlBlock iedModel_GenericIO_LLN0_report3 = {&iedModel_GenericIO_LLN0, "EventsIndexed03", "Events2", false, "Events", 1, 24, 111, 50, 1000, &iedModel_GenericIO_LLN0_report4}; +ReportControlBlock iedModel_GenericIO_LLN0_report4 = {&iedModel_GenericIO_LLN0, "Measurements01", "Measurements", true, "Measurements", 1, 16, 111, 50, 1000, &iedModel_GenericIO_LLN0_report5}; +ReportControlBlock iedModel_GenericIO_LLN0_report5 = {&iedModel_GenericIO_LLN0, "Measurements02", "Measurements", true, "Measurements", 1, 16, 111, 50, 1000, &iedModel_GenericIO_LLN0_report6}; +ReportControlBlock iedModel_GenericIO_LLN0_report6 = {&iedModel_GenericIO_LLN0, "Measurements03", "Measurements", true, "Measurements", 1, 16, 111, 50, 1000, NULL}; + @@ -1962,6 +1963,7 @@ IedModel iedModel = { &iedModel_GenericIO_LLN0_report0, NULL, NULL, + NULL, initializeValues }; diff --git a/examples/server_example4/static_model.c b/examples/server_example4/static_model.c index c391fde0..c2c99bf9 100644 --- a/examples/server_example4/static_model.c +++ b/examples/server_example4/static_model.c @@ -3,191 +3,49 @@ * * automatically generated from simpleIO_direct_control.icd */ -#include -#include "iec61850_model.h" +#include "static_model.h" -extern IedModel iedModel; static void initializeValues(); -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; - -extern DataSet ds_GenericIO_LLN0_Events; - - -extern DataSetEntry ds_GenericIO_LLN0_Events_fcda0; -extern DataSetEntry ds_GenericIO_LLN0_Events_fcda1; -extern DataSetEntry ds_GenericIO_LLN0_Events_fcda2; -extern DataSetEntry ds_GenericIO_LLN0_Events_fcda3; - -DataSetEntry ds_GenericIO_LLN0_Events_fcda0 = { + +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, - &ds_GenericIO_LLN0_Events_fcda1 + &iedModelds_GenericIO_LLN0_Events_fcda1 }; -DataSetEntry ds_GenericIO_LLN0_Events_fcda1 = { +DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda1 = { "GenericIO", false, "GGIO1$ST$SPCSO2$stVal", -1, NULL, NULL, - &ds_GenericIO_LLN0_Events_fcda2 + &iedModelds_GenericIO_LLN0_Events_fcda2 }; -DataSetEntry ds_GenericIO_LLN0_Events_fcda2 = { +DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda2 = { "GenericIO", false, "GGIO1$ST$SPCSO3$stVal", -1, NULL, NULL, - &ds_GenericIO_LLN0_Events_fcda3 + &iedModelds_GenericIO_LLN0_Events_fcda3 }; -DataSetEntry ds_GenericIO_LLN0_Events_fcda3 = { +DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda3 = { "GenericIO", false, "GGIO1$ST$SPCSO4$stVal", @@ -197,11 +55,11 @@ DataSetEntry ds_GenericIO_LLN0_Events_fcda3 = { NULL }; -DataSet ds_GenericIO_LLN0_Events = { +DataSet iedModelds_GenericIO_LLN0_Events = { "GenericIO", "LLN0$Events", 4, - &ds_GenericIO_LLN0_Events_fcda0, + &iedModelds_GenericIO_LLN0_Events_fcda0, NULL }; @@ -238,7 +96,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -251,7 +109,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -264,7 +122,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -286,7 +144,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -299,7 +157,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -312,7 +170,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -334,7 +192,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -347,7 +205,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -360,7 +218,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -382,7 +240,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -395,7 +253,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -408,7 +266,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -421,7 +279,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -434,7 +292,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -464,7 +322,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -486,7 +344,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -499,7 +357,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -512,7 +370,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -534,7 +392,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -547,7 +405,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -560,7 +418,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -590,7 +448,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -603,7 +461,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -616,7 +474,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -638,7 +496,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -651,7 +509,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -664,7 +522,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -686,7 +544,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -699,7 +557,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -712,7 +570,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -734,7 +592,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -747,7 +605,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -760,7 +618,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -782,7 +640,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -795,7 +653,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -808,7 +666,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -821,7 +679,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -843,7 +701,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -856,7 +714,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -869,7 +727,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -882,7 +740,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -904,7 +762,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -917,7 +775,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -930,7 +788,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -943,7 +801,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -965,7 +823,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -978,7 +836,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -991,7 +849,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1004,7 +862,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1026,7 +884,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1039,7 +897,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1052,7 +910,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1065,7 +923,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1078,7 +936,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1091,7 +949,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1104,7 +962,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1117,7 +975,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1130,7 +988,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1143,7 +1001,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1156,7 +1014,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1169,7 +1027,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1182,7 +1040,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1204,7 +1062,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1217,7 +1075,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1230,7 +1088,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1243,7 +1101,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1256,7 +1114,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1269,7 +1127,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1282,7 +1140,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1295,7 +1153,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1308,7 +1166,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1321,7 +1179,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1334,7 +1192,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1347,7 +1205,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1360,7 +1218,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1382,7 +1240,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1395,7 +1253,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1408,7 +1266,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1421,7 +1279,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1434,7 +1292,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1447,7 +1305,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1460,7 +1318,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1473,7 +1331,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1486,7 +1344,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1499,7 +1357,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1512,7 +1370,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1525,7 +1383,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1538,7 +1396,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1560,7 +1418,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1573,7 +1431,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1586,7 +1444,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1599,7 +1457,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1612,7 +1470,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1625,7 +1483,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1638,7 +1496,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1651,7 +1509,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1664,7 +1522,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1677,7 +1535,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1690,7 +1548,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1703,7 +1561,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1716,7 +1574,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1738,7 +1596,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1751,7 +1609,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1764,7 +1622,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1786,7 +1644,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1799,7 +1657,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1812,7 +1670,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1834,7 +1692,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1847,7 +1705,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1860,7 +1718,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1882,7 +1740,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1895,7 +1753,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1908,14 +1766,15 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; extern ReportControlBlock iedModel_GenericIO_LLN0_report0; -ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events", false, "Events", 1, 8, 111, 50, 1000, NULL}; +ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events", false, "Events", 1, 24, 111, 50, 1000, NULL}; + @@ -1923,10 +1782,11 @@ ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, IedModel iedModel = { "simpleIO", &iedModel_GenericIO, - &ds_GenericIO_LLN0_Events, + &iedModelds_GenericIO_LLN0_Events, &iedModel_GenericIO_LLN0_report0, NULL, NULL, + NULL, initializeValues }; diff --git a/examples/server_example5/static_model.c b/examples/server_example5/static_model.c index fdc336cb..2e935caf 100644 --- a/examples/server_example5/static_model.c +++ b/examples/server_example5/static_model.c @@ -3,357 +3,60 @@ * * automatically generated from complexModel.icd */ -#include -#include "iec61850_model.h" +#include "static_model.h" -extern IedModel iedModel; static void initializeValues(); -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; - -extern DataSet ds_Inverter_LLN0_dataset1; - - -extern DataSetEntry ds_Inverter_LLN0_dataset1_fcda0; -extern DataSetEntry ds_Inverter_LLN0_dataset1_fcda1; -extern DataSetEntry ds_Inverter_LLN0_dataset1_fcda2; -extern DataSetEntry ds_Inverter_LLN0_dataset1_fcda3; -extern DataSetEntry ds_Inverter_LLN0_dataset1_fcda4; - -DataSetEntry ds_Inverter_LLN0_dataset1_fcda0 = { + +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, - &ds_Inverter_LLN0_dataset1_fcda1 + &iedModelds_Inverter_LLN0_dataset1_fcda1 }; -DataSetEntry ds_Inverter_LLN0_dataset1_fcda1 = { +DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda1 = { "Battery", false, "LLN0$ST$Mod$q", -1, NULL, NULL, - &ds_Inverter_LLN0_dataset1_fcda2 + &iedModelds_Inverter_LLN0_dataset1_fcda2 }; -DataSetEntry ds_Inverter_LLN0_dataset1_fcda2 = { +DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda2 = { "Inverter", false, "MMXU1$ST$Mod$q", -1, NULL, NULL, - &ds_Inverter_LLN0_dataset1_fcda3 + &iedModelds_Inverter_LLN0_dataset1_fcda3 }; -DataSetEntry ds_Inverter_LLN0_dataset1_fcda3 = { +DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda3 = { "Inverter", false, "MMXU1$CF$Mod$ctlModel", -1, NULL, NULL, - &ds_Inverter_LLN0_dataset1_fcda4 + &iedModelds_Inverter_LLN0_dataset1_fcda4 }; -DataSetEntry ds_Inverter_LLN0_dataset1_fcda4 = { +DataSetEntry iedModelds_Inverter_LLN0_dataset1_fcda4 = { "Inverter", false, "MMXU1$MX$TotW$mag", @@ -363,11 +66,11 @@ DataSetEntry ds_Inverter_LLN0_dataset1_fcda4 = { NULL }; -DataSet ds_Inverter_LLN0_dataset1 = { +DataSet iedModelds_Inverter_LLN0_dataset1 = { "Inverter", "LLN0$dataset1", 5, - &ds_Inverter_LLN0_dataset1_fcda0, + &iedModelds_Inverter_LLN0_dataset1_fcda0, NULL }; @@ -404,7 +107,7 @@ DataAttribute iedModel_Inverter_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -417,7 +120,7 @@ DataAttribute iedModel_Inverter_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -430,7 +133,7 @@ DataAttribute iedModel_Inverter_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -452,7 +155,7 @@ DataAttribute iedModel_Inverter_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -465,7 +168,7 @@ DataAttribute iedModel_Inverter_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -478,7 +181,7 @@ DataAttribute iedModel_Inverter_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -500,7 +203,7 @@ DataAttribute iedModel_Inverter_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -513,7 +216,7 @@ DataAttribute iedModel_Inverter_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -526,7 +229,7 @@ DataAttribute iedModel_Inverter_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -548,7 +251,7 @@ DataAttribute iedModel_Inverter_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -561,7 +264,7 @@ DataAttribute iedModel_Inverter_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -574,7 +277,7 @@ DataAttribute iedModel_Inverter_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -587,7 +290,7 @@ DataAttribute iedModel_Inverter_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -600,7 +303,7 @@ DataAttribute iedModel_Inverter_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -630,7 +333,7 @@ DataAttribute iedModel_Inverter_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -652,7 +355,7 @@ DataAttribute iedModel_Inverter_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -665,7 +368,7 @@ DataAttribute iedModel_Inverter_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -678,7 +381,7 @@ DataAttribute iedModel_Inverter_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -700,7 +403,7 @@ DataAttribute iedModel_Inverter_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -713,7 +416,7 @@ DataAttribute iedModel_Inverter_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -726,7 +429,7 @@ DataAttribute iedModel_Inverter_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -756,7 +459,7 @@ DataAttribute iedModel_Inverter_ZINV1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -769,7 +472,7 @@ DataAttribute iedModel_Inverter_ZINV1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -782,7 +485,7 @@ DataAttribute iedModel_Inverter_ZINV1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -804,7 +507,7 @@ DataAttribute iedModel_Inverter_ZINV1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -817,7 +520,7 @@ DataAttribute iedModel_Inverter_ZINV1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -830,7 +533,7 @@ DataAttribute iedModel_Inverter_ZINV1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -852,7 +555,7 @@ DataAttribute iedModel_Inverter_ZINV1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -865,7 +568,7 @@ DataAttribute iedModel_Inverter_ZINV1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -878,7 +581,7 @@ DataAttribute iedModel_Inverter_ZINV1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -900,7 +603,7 @@ DataAttribute iedModel_Inverter_ZINV1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -913,7 +616,7 @@ DataAttribute iedModel_Inverter_ZINV1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -926,7 +629,7 @@ DataAttribute iedModel_Inverter_ZINV1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -948,7 +651,7 @@ DataAttribute iedModel_Inverter_ZINV1_WRtg_setMag = { (ModelNode*) &iedModel_Inverter_ZINV1_WRtg_setMag_f, 0, IEC61850_FC_SP, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -961,7 +664,7 @@ DataAttribute iedModel_Inverter_ZINV1_WRtg_setMag_f = { NULL, 0, IEC61850_FC_SP, - FLOAT32, + IEC61850_FLOAT32, 0, NULL, 0}; @@ -974,7 +677,7 @@ DataAttribute iedModel_Inverter_ZINV1_WRtg_units = { (ModelNode*) &iedModel_Inverter_ZINV1_WRtg_units_SIUnit, 0, IEC61850_FC_CF, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -987,7 +690,7 @@ DataAttribute iedModel_Inverter_ZINV1_WRtg_units_SIUnit = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1009,7 +712,7 @@ DataAttribute iedModel_Inverter_ZINV1_VarRtg_setMag = { (ModelNode*) &iedModel_Inverter_ZINV1_VarRtg_setMag_f, 0, IEC61850_FC_SP, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1022,7 +725,7 @@ DataAttribute iedModel_Inverter_ZINV1_VarRtg_setMag_f = { NULL, 0, IEC61850_FC_SP, - FLOAT32, + IEC61850_FLOAT32, 0, NULL, 0}; @@ -1035,7 +738,7 @@ DataAttribute iedModel_Inverter_ZINV1_VarRtg_units = { (ModelNode*) &iedModel_Inverter_ZINV1_VarRtg_units_SIUnit, 0, IEC61850_FC_CF, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1048,7 +751,7 @@ DataAttribute iedModel_Inverter_ZINV1_VarRtg_units_SIUnit = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1070,7 +773,7 @@ DataAttribute iedModel_Inverter_ZINV1_ACTyp_setVal = { NULL, 0, IEC61850_FC_SP, - INT32, + IEC61850_INT32, 0, NULL, 0}; @@ -1092,7 +795,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutWSet_setMag = { (ModelNode*) &iedModel_Inverter_ZINV1_OutWSet_setMag_f, 0, IEC61850_FC_SP, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1105,7 +808,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutWSet_setMag_f = { NULL, 0, IEC61850_FC_SP, - FLOAT32, + IEC61850_FLOAT32, 0, NULL, 0}; @@ -1118,7 +821,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutWSet_units = { (ModelNode*) &iedModel_Inverter_ZINV1_OutWSet_units_SIUnit, 0, IEC61850_FC_CF, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1131,7 +834,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutWSet_units_SIUnit = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1153,7 +856,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutVarSet_setMag = { (ModelNode*) &iedModel_Inverter_ZINV1_OutVarSet_setMag_f, 0, IEC61850_FC_SP, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1166,7 +869,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutVarSet_setMag_f = { NULL, 0, IEC61850_FC_SP, - FLOAT32, + IEC61850_FLOAT32, 0, NULL, 0}; @@ -1179,7 +882,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutVarSet_units = { (ModelNode*) &iedModel_Inverter_ZINV1_OutVarSet_units_SIUnit, 0, IEC61850_FC_CF, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1192,7 +895,7 @@ DataAttribute iedModel_Inverter_ZINV1_OutVarSet_units_SIUnit = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1222,7 +925,7 @@ DataAttribute iedModel_Inverter_MMXU1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1235,7 +938,7 @@ DataAttribute iedModel_Inverter_MMXU1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1248,7 +951,7 @@ DataAttribute iedModel_Inverter_MMXU1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1270,7 +973,7 @@ DataAttribute iedModel_Inverter_MMXU1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1283,7 +986,7 @@ DataAttribute iedModel_Inverter_MMXU1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1296,7 +999,7 @@ DataAttribute iedModel_Inverter_MMXU1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1318,7 +1021,7 @@ DataAttribute iedModel_Inverter_MMXU1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1331,7 +1034,7 @@ DataAttribute iedModel_Inverter_MMXU1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1344,7 +1047,7 @@ DataAttribute iedModel_Inverter_MMXU1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1366,7 +1069,7 @@ DataAttribute iedModel_Inverter_MMXU1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1379,7 +1082,7 @@ DataAttribute iedModel_Inverter_MMXU1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1392,7 +1095,7 @@ DataAttribute iedModel_Inverter_MMXU1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1414,7 +1117,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotW_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_TotW_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1427,7 +1130,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotW_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1440,7 +1143,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotW_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1453,7 +1156,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotW_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1475,7 +1178,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVAr_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_TotVAr_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1488,7 +1191,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVAr_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1501,7 +1204,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVAr_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1514,7 +1217,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVAr_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1536,7 +1239,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVA_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_TotVA_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1549,7 +1252,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVA_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1562,7 +1265,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVA_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1575,7 +1278,7 @@ DataAttribute iedModel_Inverter_MMXU1_TotVA_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1597,7 +1300,7 @@ DataAttribute iedModel_Inverter_MMXU1_Hz_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_Hz_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1610,7 +1313,7 @@ DataAttribute iedModel_Inverter_MMXU1_Hz_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1623,7 +1326,7 @@ DataAttribute iedModel_Inverter_MMXU1_Hz_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1636,7 +1339,7 @@ DataAttribute iedModel_Inverter_MMXU1_Hz_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1667,7 +1370,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1680,7 +1383,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1693,7 +1396,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1706,7 +1409,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1719,7 +1422,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1741,7 +1444,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1754,7 +1457,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1767,7 +1470,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1780,7 +1483,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1793,7 +1496,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1815,7 +1518,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1828,7 +1531,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1841,7 +1544,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1854,7 +1557,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1867,7 +1570,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1889,7 +1592,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1902,7 +1605,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_PhV_neut_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1915,7 +1618,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1928,7 +1631,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_neut_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1941,7 +1644,7 @@ DataAttribute iedModel_Inverter_MMXU1_PhV_neut_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1972,7 +1675,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1985,7 +1688,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_A_phsA_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1998,7 +1701,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2011,7 +1714,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsA_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2024,7 +1727,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsA_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2046,7 +1749,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2059,7 +1762,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_A_phsB_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2072,7 +1775,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2085,7 +1788,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsB_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2098,7 +1801,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsB_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2120,7 +1823,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2133,7 +1836,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_A_phsC_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2146,7 +1849,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2159,7 +1862,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsC_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2172,7 +1875,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_phsC_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2194,7 +1897,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_A_neut_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2207,7 +1910,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_A_neut_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2220,7 +1923,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2233,7 +1936,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_neut_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2246,7 +1949,7 @@ DataAttribute iedModel_Inverter_MMXU1_A_neut_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2277,7 +1980,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2290,7 +1993,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_W_phsA_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2303,7 +2006,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2316,7 +2019,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsA_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2329,7 +2032,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsA_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2351,7 +2054,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2364,7 +2067,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_W_phsB_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2377,7 +2080,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2390,7 +2093,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsB_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2403,7 +2106,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsB_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2425,7 +2128,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal = { (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2438,7 +2141,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal_mag = { (ModelNode*) &iedModel_Inverter_MMXU1_W_phsC_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2451,7 +2154,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2464,7 +2167,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsC_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2477,7 +2180,7 @@ DataAttribute iedModel_Inverter_MMXU1_W_phsC_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2516,7 +2219,7 @@ DataAttribute iedModel_Battery_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2529,7 +2232,7 @@ DataAttribute iedModel_Battery_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2542,7 +2245,7 @@ DataAttribute iedModel_Battery_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2564,7 +2267,7 @@ DataAttribute iedModel_Battery_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2577,7 +2280,7 @@ DataAttribute iedModel_Battery_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2590,7 +2293,7 @@ DataAttribute iedModel_Battery_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2612,7 +2315,7 @@ DataAttribute iedModel_Battery_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2625,7 +2328,7 @@ DataAttribute iedModel_Battery_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2638,7 +2341,7 @@ DataAttribute iedModel_Battery_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2660,7 +2363,7 @@ DataAttribute iedModel_Battery_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2673,7 +2376,7 @@ DataAttribute iedModel_Battery_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2686,7 +2389,7 @@ DataAttribute iedModel_Battery_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2699,7 +2402,7 @@ DataAttribute iedModel_Battery_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2712,7 +2415,7 @@ DataAttribute iedModel_Battery_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2742,7 +2445,7 @@ DataAttribute iedModel_Battery_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -2764,7 +2467,7 @@ DataAttribute iedModel_Battery_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2777,7 +2480,7 @@ DataAttribute iedModel_Battery_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2790,7 +2493,7 @@ DataAttribute iedModel_Battery_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2812,7 +2515,7 @@ DataAttribute iedModel_Battery_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2825,7 +2528,7 @@ DataAttribute iedModel_Battery_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2838,7 +2541,7 @@ DataAttribute iedModel_Battery_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2868,7 +2571,7 @@ DataAttribute iedModel_Battery_ZBAT1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2881,7 +2584,7 @@ DataAttribute iedModel_Battery_ZBAT1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2894,7 +2597,7 @@ DataAttribute iedModel_Battery_ZBAT1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2916,7 +2619,7 @@ DataAttribute iedModel_Battery_ZBAT1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2929,7 +2632,7 @@ DataAttribute iedModel_Battery_ZBAT1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2942,7 +2645,7 @@ DataAttribute iedModel_Battery_ZBAT1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2964,7 +2667,7 @@ DataAttribute iedModel_Battery_ZBAT1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2977,7 +2680,7 @@ DataAttribute iedModel_Battery_ZBAT1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2990,7 +2693,7 @@ DataAttribute iedModel_Battery_ZBAT1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3012,7 +2715,7 @@ DataAttribute iedModel_Battery_ZBAT1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3025,7 +2728,7 @@ DataAttribute iedModel_Battery_ZBAT1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3038,7 +2741,7 @@ DataAttribute iedModel_Battery_ZBAT1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3060,7 +2763,7 @@ DataAttribute iedModel_Battery_ZBAT1_Vol_mag = { (ModelNode*) &iedModel_Battery_ZBAT1_Vol_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3073,7 +2776,7 @@ DataAttribute iedModel_Battery_ZBAT1_Vol_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3086,7 +2789,7 @@ DataAttribute iedModel_Battery_ZBAT1_Vol_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3099,7 +2802,7 @@ DataAttribute iedModel_Battery_ZBAT1_Vol_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3121,7 +2824,7 @@ DataAttribute iedModel_Battery_ZBAT1_Amp_mag = { (ModelNode*) &iedModel_Battery_ZBAT1_Amp_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3134,7 +2837,7 @@ DataAttribute iedModel_Battery_ZBAT1_Amp_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3147,7 +2850,7 @@ DataAttribute iedModel_Battery_ZBAT1_Amp_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3160,7 +2863,7 @@ DataAttribute iedModel_Battery_ZBAT1_Amp_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3190,7 +2893,7 @@ DataAttribute iedModel_Battery_ZBTC1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3203,7 +2906,7 @@ DataAttribute iedModel_Battery_ZBTC1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3216,7 +2919,7 @@ DataAttribute iedModel_Battery_ZBTC1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3238,7 +2941,7 @@ DataAttribute iedModel_Battery_ZBTC1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3251,7 +2954,7 @@ DataAttribute iedModel_Battery_ZBTC1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3264,7 +2967,7 @@ DataAttribute iedModel_Battery_ZBTC1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3286,7 +2989,7 @@ DataAttribute iedModel_Battery_ZBTC1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3299,7 +3002,7 @@ DataAttribute iedModel_Battery_ZBTC1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3312,7 +3015,7 @@ DataAttribute iedModel_Battery_ZBTC1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3334,7 +3037,7 @@ DataAttribute iedModel_Battery_ZBTC1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3347,7 +3050,7 @@ DataAttribute iedModel_Battery_ZBTC1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3360,7 +3063,7 @@ DataAttribute iedModel_Battery_ZBTC1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3409,7 +3112,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaV_mag = { (ModelNode*) &iedModel_Battery_ZBTC1_ChaV_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3422,7 +3125,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaV_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3435,7 +3138,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaV_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3448,7 +3151,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaV_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3470,7 +3173,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaA_mag = { (ModelNode*) &iedModel_Battery_ZBTC1_ChaA_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3483,7 +3186,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaA_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3496,7 +3199,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaA_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3509,7 +3212,7 @@ DataAttribute iedModel_Battery_ZBTC1_ChaA_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3548,7 +3251,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3561,7 +3264,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3574,7 +3277,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3596,7 +3299,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3609,7 +3312,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3622,7 +3325,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3644,7 +3347,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3657,7 +3360,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3670,7 +3373,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3692,7 +3395,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3705,7 +3408,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3718,7 +3421,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3731,7 +3434,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3744,7 +3447,7 @@ DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3774,7 +3477,7 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -3796,7 +3499,7 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3809,7 +3512,7 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3822,7 +3525,7 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3844,7 +3547,7 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3857,7 +3560,7 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3870,14 +3573,15 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; extern ReportControlBlock iedModel_Inverter_LLN0_report0; -ReportControlBlock iedModel_Inverter_LLN0_report0 = {&iedModel_Inverter_LLN0, "rcb101", "ID", false, "dataset1", 0, 3, 32, 0, 0, NULL}; +ReportControlBlock iedModel_Inverter_LLN0_report0 = {&iedModel_Inverter_LLN0, "rcb101", "ID", false, "dataset1", 0, 19, 32, 0, 0, NULL}; + @@ -3885,10 +3589,11 @@ ReportControlBlock iedModel_Inverter_LLN0_report0 = {&iedModel_Inverter_LLN0, "r IedModel iedModel = { "ied1", &iedModel_Inverter, - &ds_Inverter_LLN0_dataset1, + &iedModelds_Inverter_LLN0_dataset1, &iedModel_Inverter_LLN0_report0, NULL, NULL, + NULL, initializeValues }; diff --git a/examples/server_example_61400_25/static_model.c b/examples/server_example_61400_25/static_model.c index ba022fdc..b34a03f0 100644 --- a/examples/server_example_61400_25/static_model.c +++ b/examples/server_example_61400_25/static_model.c @@ -3,342 +3,9 @@ * * automatically generated from wtur.icd */ -#include -#include "iec61850_model.h" +#include "static_model.h" -extern IedModel iedModel; static void initializeValues(); -extern LogicalDevice iedModel_WTG; -extern LogicalNode iedModel_WTG_LLN0; -extern DataObject iedModel_WTG_LLN0_Mod; -extern DataAttribute iedModel_WTG_LLN0_Mod_Oper; -extern DataAttribute iedModel_WTG_LLN0_Mod_Oper_ctlVal; -extern DataAttribute iedModel_WTG_LLN0_Mod_Oper_operTm; -extern DataAttribute iedModel_WTG_LLN0_Mod_Oper_origin; -extern DataAttribute iedModel_WTG_LLN0_Mod_Oper_origin_orCat; -extern DataAttribute iedModel_WTG_LLN0_Mod_Oper_origin_orIdent; -extern DataAttribute iedModel_WTG_LLN0_Mod_Oper_ctlNum; -extern DataAttribute iedModel_WTG_LLN0_Mod_Oper_T; -extern DataAttribute iedModel_WTG_LLN0_Mod_Oper_Test; -extern DataAttribute iedModel_WTG_LLN0_Mod_Oper_Check; -extern DataAttribute iedModel_WTG_LLN0_Mod_stVal; -extern DataAttribute iedModel_WTG_LLN0_Mod_q; -extern DataAttribute iedModel_WTG_LLN0_Mod_t; -extern DataAttribute iedModel_WTG_LLN0_Mod_ctlModel; -extern DataObject iedModel_WTG_LLN0_Beh; -extern DataAttribute iedModel_WTG_LLN0_Beh_stVal; -extern DataAttribute iedModel_WTG_LLN0_Beh_q; -extern DataAttribute iedModel_WTG_LLN0_Beh_t; -extern DataObject iedModel_WTG_LLN0_Health; -extern DataAttribute iedModel_WTG_LLN0_Health_stVal; -extern DataAttribute iedModel_WTG_LLN0_Health_q; -extern DataAttribute iedModel_WTG_LLN0_Health_t; -extern DataObject iedModel_WTG_LLN0_NamPlt; -extern DataAttribute iedModel_WTG_LLN0_NamPlt_vendor; -extern DataAttribute iedModel_WTG_LLN0_NamPlt_swRev; -extern DataAttribute iedModel_WTG_LLN0_NamPlt_configRev; -extern LogicalNode iedModel_WTG_LPHD1; -extern DataObject iedModel_WTG_LPHD1_NamPlt; -extern DataAttribute iedModel_WTG_LPHD1_NamPlt_vendor; -extern DataAttribute iedModel_WTG_LPHD1_NamPlt_swRev; -extern DataAttribute iedModel_WTG_LPHD1_NamPlt_configRev; -extern DataObject iedModel_WTG_LPHD1_PhyNam; -extern DataAttribute iedModel_WTG_LPHD1_PhyNam_vendor; -extern DataAttribute iedModel_WTG_LPHD1_PhyNam_hwRev; -extern DataAttribute iedModel_WTG_LPHD1_PhyNam_swRev; -extern DataAttribute iedModel_WTG_LPHD1_PhyNam_serNum; -extern DataAttribute iedModel_WTG_LPHD1_PhyNam_model; -extern DataObject iedModel_WTG_LPHD1_PhyHealth; -extern DataAttribute iedModel_WTG_LPHD1_PhyHealth_stVal; -extern DataAttribute iedModel_WTG_LPHD1_PhyHealth_q; -extern DataAttribute iedModel_WTG_LPHD1_PhyHealth_t; -extern DataObject iedModel_WTG_LPHD1_Proxy; -extern DataAttribute iedModel_WTG_LPHD1_Proxy_stVal; -extern DataAttribute iedModel_WTG_LPHD1_Proxy_q; -extern DataAttribute iedModel_WTG_LPHD1_Proxy_t; -extern LogicalNode iedModel_WTG_WTUR1; -extern DataObject iedModel_WTG_WTUR1_NamPlt; -extern DataAttribute iedModel_WTG_WTUR1_NamPlt_vendor; -extern DataAttribute iedModel_WTG_WTUR1_NamPlt_swRev; -extern DataAttribute iedModel_WTG_WTUR1_NamPlt_configRev; -extern DataObject iedModel_WTG_WTUR1_TotWh; -extern DataObject iedModel_WTG_WTUR1_TotWh_manRs; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_ctlVal; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_operTm; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_origin; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_origin_orCat; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_origin_orIdent; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_ctlNum; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_T; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_Test; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_Check; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_q; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_t; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_ctlModel; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_sboTimeout; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_sboClass; -extern DataObject iedModel_WTG_WTUR1_TotWh_hisRs; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_ctlVal; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_operTm; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_origin; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_origin_orCat; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_origin_orIdent; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_ctlNum; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_T; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_Test; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_Check; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_q; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_t; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_ctlModel; -extern DataObject iedModel_WTG_WTUR1_TotWh_actCtVal; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_actCtVal_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_actCtVal_q; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_actCtVal_t; -extern DataObject iedModel_WTG_WTUR1_TotWh_oldCtVal; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_oldCtVal_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_oldCtVal_q; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_oldCtVal_t; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_ctTot; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_dly; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_mly; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_yly; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_tot; -extern DataAttribute iedModel_WTG_WTUR1_TotWh_rsPer; -extern DataObject iedModel_WTG_WTUR1_TurSt; -extern DataObject iedModel_WTG_WTUR1_TurSt_actSt; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_actSt_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_actSt_q; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_actSt_t; -extern DataObject iedModel_WTG_WTUR1_TurSt_oldSt; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_oldSt_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_oldSt_q; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_oldSt_t; -extern DataObject iedModel_WTG_WTUR1_TurSt_stTm; -extern DataObject iedModel_WTG_WTUR1_TurSt_stTm_manRs; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_ctlVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_operTm; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_origin; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_origin_orCat; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_origin_orIdent; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_ctlNum; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_T; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_Test; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_Check; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_q; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_t; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_ctlModel; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_sboTimeout; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_sboClass; -extern DataObject iedModel_WTG_WTUR1_TurSt_stTm_hisRs; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_ctlVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_operTm; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_origin; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_origin_orCat; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_origin_orIdent; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_ctlNum; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_T; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_Test; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_Check; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_q; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_t; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_ctlModel; -extern DataObject iedModel_WTG_WTUR1_TurSt_stTm_actTmVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_actTmVal_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_actTmVal_q; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_actTmVal_t; -extern DataObject iedModel_WTG_WTUR1_TurSt_stTm_oldTmVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_oldTmVal_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_oldTmVal_q; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_oldTmVal_t; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_tmTot; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_dly; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_mly; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_yly; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_tot; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_rsPer; -extern DataObject iedModel_WTG_WTUR1_TurSt_stCt; -extern DataObject iedModel_WTG_WTUR1_TurSt_stCt_manRs; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_ctlVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_operTm; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_origin; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_origin_orCat; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_origin_orIdent; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_ctlNum; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_T; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_Test; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_Check; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_q; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_t; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_ctlModel; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_sboTimeout; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_sboClass; -extern DataObject iedModel_WTG_WTUR1_TurSt_stCt_hisRs; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_ctlVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_operTm; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_origin; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_origin_orCat; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_origin_orIdent; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_ctlNum; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_T; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_Test; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_Check; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_q; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_t; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_ctlModel; -extern DataObject iedModel_WTG_WTUR1_TurSt_stCt_actCtVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_actCtVal_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_actCtVal_q; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_actCtVal_t; -extern DataObject iedModel_WTG_WTUR1_TurSt_stCt_oldCtVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_oldCtVal_stVal; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_oldCtVal_q; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_oldCtVal_t; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_ctTot; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_dly; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_mly; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_yly; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_tot; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_rsPer; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_preTmms; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_pstTmms; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_smpTmms; -extern DataAttribute iedModel_WTG_WTUR1_TurSt_datSetMx; -extern DataObject iedModel_WTG_WTUR1_W; -extern DataAttribute iedModel_WTG_WTUR1_W_instMag; -extern DataAttribute iedModel_WTG_WTUR1_W_instMag_i; -extern DataAttribute iedModel_WTG_WTUR1_W_instMag_f; -extern DataAttribute iedModel_WTG_WTUR1_W_mag; -extern DataAttribute iedModel_WTG_WTUR1_W_mag_i; -extern DataAttribute iedModel_WTG_WTUR1_W_mag_f; -extern DataAttribute iedModel_WTG_WTUR1_W_q; -extern DataAttribute iedModel_WTG_WTUR1_W_t; -extern DataObject iedModel_WTG_WTUR1_SetTurOp; -extern DataObject iedModel_WTG_WTUR1_SetTurOp_actSt; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_ctlVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_operTm; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_origin; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_origin_orCat; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_origin_orIdent; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_ctlNum; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_T; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_Test; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_Check; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_stVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_q; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_t; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_ctlModel; -extern DataObject iedModel_WTG_WTUR1_SetTurOp_oldSt; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_oldSt_stVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_oldSt_q; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_oldSt_t; -extern DataObject iedModel_WTG_WTUR1_SetTurOp_cmTm; -extern DataObject iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_ctlVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_operTm; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_origin; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_origin_orCat; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_origin_orIdent; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_ctlNum; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_T; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_Test; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_Check; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_stVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_q; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_t; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_ctlModel; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_sboTimeout; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_sboClass; -extern DataObject iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_ctlVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_operTm; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_origin; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_origin_orCat; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_origin_orIdent; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_ctlNum; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_T; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_Test; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_Check; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_stVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_q; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_t; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_ctlModel; -extern DataObject iedModel_WTG_WTUR1_SetTurOp_cmTm_actTmVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_actTmVal_stVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_actTmVal_q; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_actTmVal_t; -extern DataObject iedModel_WTG_WTUR1_SetTurOp_cmTm_oldTmVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_oldTmVal_stVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_oldTmVal_q; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_oldTmVal_t; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_tmTot; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_dly; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_mly; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_yly; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_tot; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_rsPer; -extern DataObject iedModel_WTG_WTUR1_SetTurOp_cmCt; -extern DataObject iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_ctlVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_operTm; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_origin; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_origin_orCat; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_origin_orIdent; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_ctlNum; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_T; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_Test; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_Check; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_stVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_q; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_t; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_ctlModel; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_sboTimeout; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_sboClass; -extern DataObject iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_ctlVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_operTm; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_origin; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_origin_orCat; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_origin_orIdent; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_ctlNum; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_T; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_Test; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_Check; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_stVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_q; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_t; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_ctlModel; -extern DataObject iedModel_WTG_WTUR1_SetTurOp_cmCt_actCtVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_actCtVal_stVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_actCtVal_q; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_actCtVal_t; -extern DataObject iedModel_WTG_WTUR1_SetTurOp_cmCt_oldCtVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_oldCtVal_stVal; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_oldCtVal_q; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_oldCtVal_t; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_ctTot; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_dly; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_mly; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_yly; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_tot; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_rsPer; -extern DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmAcs; @@ -375,7 +42,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_Oper = { (ModelNode*) &iedModel_WTG_LLN0_Mod_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -388,7 +55,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - INT32, + IEC61850_INT32, 0, NULL, 0}; @@ -401,7 +68,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -414,7 +81,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_Oper_origin = { (ModelNode*) &iedModel_WTG_LLN0_Mod_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -427,7 +94,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -440,7 +107,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -453,7 +120,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -466,7 +133,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -479,7 +146,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -492,7 +159,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -505,7 +172,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -518,7 +185,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -531,7 +198,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -544,7 +211,7 @@ DataAttribute iedModel_WTG_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -566,7 +233,7 @@ DataAttribute iedModel_WTG_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -579,7 +246,7 @@ DataAttribute iedModel_WTG_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -592,7 +259,7 @@ DataAttribute iedModel_WTG_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -614,7 +281,7 @@ DataAttribute iedModel_WTG_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -627,7 +294,7 @@ DataAttribute iedModel_WTG_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -640,7 +307,7 @@ DataAttribute iedModel_WTG_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -662,7 +329,7 @@ DataAttribute iedModel_WTG_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -675,7 +342,7 @@ DataAttribute iedModel_WTG_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -688,7 +355,7 @@ DataAttribute iedModel_WTG_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -718,7 +385,7 @@ DataAttribute iedModel_WTG_LPHD1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -731,7 +398,7 @@ DataAttribute iedModel_WTG_LPHD1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -744,7 +411,7 @@ DataAttribute iedModel_WTG_LPHD1_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -766,7 +433,7 @@ DataAttribute iedModel_WTG_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -779,7 +446,7 @@ DataAttribute iedModel_WTG_LPHD1_PhyNam_hwRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -792,7 +459,7 @@ DataAttribute iedModel_WTG_LPHD1_PhyNam_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -805,7 +472,7 @@ DataAttribute iedModel_WTG_LPHD1_PhyNam_serNum = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -818,7 +485,7 @@ DataAttribute iedModel_WTG_LPHD1_PhyNam_model = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -840,7 +507,7 @@ DataAttribute iedModel_WTG_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -853,7 +520,7 @@ DataAttribute iedModel_WTG_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -866,7 +533,7 @@ DataAttribute iedModel_WTG_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -888,7 +555,7 @@ DataAttribute iedModel_WTG_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -901,7 +568,7 @@ DataAttribute iedModel_WTG_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -914,7 +581,7 @@ DataAttribute iedModel_WTG_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -944,7 +611,7 @@ DataAttribute iedModel_WTG_WTUR1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -957,7 +624,7 @@ DataAttribute iedModel_WTG_WTUR1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -970,7 +637,7 @@ DataAttribute iedModel_WTG_WTUR1_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -1001,7 +668,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper = { (ModelNode*) &iedModel_WTG_WTUR1_TotWh_manRs_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1014,7 +681,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1027,7 +694,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1040,7 +707,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_origin = { (ModelNode*) &iedModel_WTG_WTUR1_TotWh_manRs_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1053,7 +720,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1066,7 +733,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1079,7 +746,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1092,7 +759,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1105,7 +772,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1118,7 +785,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1131,7 +798,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1144,7 +811,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1157,7 +824,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1170,7 +837,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1183,7 +850,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_sboTimeout = { NULL, 0, IEC61850_FC_CF, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -1196,7 +863,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_manRs_sboClass = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1218,7 +885,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper = { (ModelNode*) &iedModel_WTG_WTUR1_TotWh_hisRs_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1231,7 +898,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - INT32, + IEC61850_INT32, 0, NULL, 0}; @@ -1244,7 +911,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1257,7 +924,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_origin = { (ModelNode*) &iedModel_WTG_WTUR1_TotWh_hisRs_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1270,7 +937,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1283,7 +950,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1296,7 +963,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1309,7 +976,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1322,7 +989,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1335,7 +1002,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1348,7 +1015,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1361,7 +1028,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1374,7 +1041,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1387,7 +1054,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_hisRs_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1409,7 +1076,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_actCtVal_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1422,7 +1089,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_actCtVal_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1435,7 +1102,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_actCtVal_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1457,7 +1124,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_oldCtVal_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1470,7 +1137,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_oldCtVal_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1483,7 +1150,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_oldCtVal_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1496,7 +1163,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_ctTot = { NULL, 0, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -1509,7 +1176,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_dly = { NULL, 32, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -1522,7 +1189,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_mly = { NULL, 13, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -1535,7 +1202,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_yly = { NULL, 21, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -1548,7 +1215,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_tot = { NULL, 0, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -1561,7 +1228,7 @@ DataAttribute iedModel_WTG_WTUR1_TotWh_rsPer = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1592,7 +1259,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_actSt_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1605,7 +1272,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_actSt_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1618,7 +1285,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_actSt_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1640,7 +1307,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_oldSt_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1653,7 +1320,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_oldSt_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1666,7 +1333,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_oldSt_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1697,7 +1364,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper = { (ModelNode*) &iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1710,7 +1377,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1723,7 +1390,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1736,7 +1403,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_origin = { (ModelNode*) &iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1749,7 +1416,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1762,7 +1429,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1775,7 +1442,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1788,7 +1455,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1801,7 +1468,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1814,7 +1481,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1827,7 +1494,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1840,7 +1507,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1853,7 +1520,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1866,7 +1533,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1879,7 +1546,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_sboTimeout = { NULL, 0, IEC61850_FC_CF, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -1892,7 +1559,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_manRs_sboClass = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1914,7 +1581,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper = { (ModelNode*) &iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1927,7 +1594,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - INT32, + IEC61850_INT32, 0, NULL, 0}; @@ -1940,7 +1607,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1953,7 +1620,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_origin = { (ModelNode*) &iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1966,7 +1633,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1979,7 +1646,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1992,7 +1659,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -2005,7 +1672,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2018,7 +1685,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2031,7 +1698,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -2044,7 +1711,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2057,7 +1724,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2070,7 +1737,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2083,7 +1750,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_hisRs_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2105,7 +1772,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_actTmVal_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2118,7 +1785,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_actTmVal_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2131,7 +1798,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_actTmVal_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2153,7 +1820,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_oldTmVal_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2166,7 +1833,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_oldTmVal_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2179,7 +1846,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_oldTmVal_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2192,7 +1859,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_tmTot = { NULL, 0, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -2205,7 +1872,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_dly = { NULL, 32, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -2218,7 +1885,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_mly = { NULL, 13, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -2231,7 +1898,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_yly = { NULL, 21, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -2244,7 +1911,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_tot = { NULL, 0, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -2257,7 +1924,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stTm_rsPer = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2288,7 +1955,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper = { (ModelNode*) &iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2301,7 +1968,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2314,7 +1981,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2327,7 +1994,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_origin = { (ModelNode*) &iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2340,7 +2007,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2353,7 +2020,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -2366,7 +2033,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -2379,7 +2046,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2392,7 +2059,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2405,7 +2072,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -2418,7 +2085,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2431,7 +2098,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2444,7 +2111,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2457,7 +2124,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2470,7 +2137,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_sboTimeout = { NULL, 0, IEC61850_FC_CF, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -2483,7 +2150,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_manRs_sboClass = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2505,7 +2172,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper = { (ModelNode*) &iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2518,7 +2185,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - INT32, + IEC61850_INT32, 0, NULL, 0}; @@ -2531,7 +2198,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2544,7 +2211,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_origin = { (ModelNode*) &iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2557,7 +2224,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2570,7 +2237,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -2583,7 +2250,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -2596,7 +2263,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2609,7 +2276,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2622,7 +2289,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -2635,7 +2302,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2648,7 +2315,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2661,7 +2328,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2674,7 +2341,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_hisRs_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2696,7 +2363,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_actCtVal_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2709,7 +2376,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_actCtVal_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2722,7 +2389,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_actCtVal_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2744,7 +2411,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_oldCtVal_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2757,7 +2424,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_oldCtVal_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2770,7 +2437,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_oldCtVal_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2783,7 +2450,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_ctTot = { NULL, 0, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -2796,7 +2463,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_dly = { NULL, 32, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -2809,7 +2476,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_mly = { NULL, 13, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -2822,7 +2489,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_yly = { NULL, 21, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -2835,7 +2502,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_tot = { NULL, 0, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -2848,7 +2515,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_stCt_rsPer = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2861,7 +2528,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_preTmms = { NULL, 0, IEC61850_FC_CF, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -2874,7 +2541,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_pstTmms = { NULL, 0, IEC61850_FC_CF, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -2887,7 +2554,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_smpTmms = { NULL, 0, IEC61850_FC_CF, - INT16U, + IEC61850_INT16U, 0, NULL, 0}; @@ -2900,7 +2567,7 @@ DataAttribute iedModel_WTG_WTUR1_TurSt_datSetMx = { NULL, 0, IEC61850_FC_CF, - VISIBLE_STRING_129, + IEC61850_VISIBLE_STRING_129, 0, NULL, 0}; @@ -2922,7 +2589,7 @@ DataAttribute iedModel_WTG_WTUR1_W_instMag = { (ModelNode*) &iedModel_WTG_WTUR1_W_instMag_i, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2935,7 +2602,7 @@ DataAttribute iedModel_WTG_WTUR1_W_instMag_i = { NULL, 0, IEC61850_FC_MX, - INT32, + IEC61850_INT32, 0, NULL, 0}; @@ -2948,7 +2615,7 @@ DataAttribute iedModel_WTG_WTUR1_W_instMag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0, NULL, 0}; @@ -2961,7 +2628,7 @@ DataAttribute iedModel_WTG_WTUR1_W_mag = { (ModelNode*) &iedModel_WTG_WTUR1_W_mag_i, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2974,7 +2641,7 @@ DataAttribute iedModel_WTG_WTUR1_W_mag_i = { NULL, 0, IEC61850_FC_MX, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2987,7 +2654,7 @@ DataAttribute iedModel_WTG_WTUR1_W_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3000,7 +2667,7 @@ DataAttribute iedModel_WTG_WTUR1_W_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3013,7 +2680,7 @@ DataAttribute iedModel_WTG_WTUR1_W_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3044,7 +2711,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper = { (ModelNode*) &iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3057,7 +2724,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - INT32, + IEC61850_INT32, 0, NULL, 0}; @@ -3070,7 +2737,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3083,7 +2750,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_origin = { (ModelNode*) &iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3096,7 +2763,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3109,7 +2776,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -3122,7 +2789,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -3135,7 +2802,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3148,7 +2815,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3161,7 +2828,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -3174,7 +2841,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3187,7 +2854,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3200,7 +2867,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3213,7 +2880,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_actSt_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3235,7 +2902,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_oldSt_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3248,7 +2915,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_oldSt_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3261,7 +2928,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_oldSt_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3292,7 +2959,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper = { (ModelNode*) &iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3305,7 +2972,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3318,7 +2985,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3331,7 +2998,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_origin = { (ModelNode*) &iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3344,7 +3011,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3357,7 +3024,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -3370,7 +3037,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -3383,7 +3050,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3396,7 +3063,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3409,7 +3076,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -3422,7 +3089,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3435,7 +3102,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3448,7 +3115,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3461,7 +3128,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3474,7 +3141,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_sboTimeout = { NULL, 0, IEC61850_FC_CF, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -3487,7 +3154,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_manRs_sboClass = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3509,7 +3176,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper = { (ModelNode*) &iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3522,7 +3189,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - INT32, + IEC61850_INT32, 0, NULL, 0}; @@ -3535,7 +3202,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3548,7 +3215,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_origin = { (ModelNode*) &iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3561,7 +3228,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3574,7 +3241,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -3587,7 +3254,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -3600,7 +3267,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3613,7 +3280,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3626,7 +3293,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -3639,7 +3306,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3652,7 +3319,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3665,7 +3332,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3678,7 +3345,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_hisRs_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3700,7 +3367,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_actTmVal_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3713,7 +3380,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_actTmVal_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3726,7 +3393,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_actTmVal_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3748,7 +3415,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_oldTmVal_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3761,7 +3428,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_oldTmVal_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3774,7 +3441,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_oldTmVal_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3787,7 +3454,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_tmTot = { NULL, 0, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -3800,7 +3467,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_dly = { NULL, 32, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -3813,7 +3480,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_mly = { NULL, 13, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -3826,7 +3493,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_yly = { NULL, 21, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -3839,7 +3506,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_tot = { NULL, 0, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -3852,7 +3519,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmTm_rsPer = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3883,7 +3550,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper = { (ModelNode*) &iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3896,7 +3563,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3909,7 +3576,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3922,7 +3589,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_origin = { (ModelNode*) &iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3935,7 +3602,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3948,7 +3615,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -3961,7 +3628,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -3974,7 +3641,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3987,7 +3654,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -4000,7 +3667,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -4013,7 +3680,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -4026,7 +3693,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -4039,7 +3706,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -4052,7 +3719,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -4065,7 +3732,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_sboTimeout = { NULL, 0, IEC61850_FC_CF, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -4078,7 +3745,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_manRs_sboClass = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -4100,7 +3767,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper = { (ModelNode*) &iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -4113,7 +3780,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - INT32, + IEC61850_INT32, 0, NULL, 0}; @@ -4126,7 +3793,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -4139,7 +3806,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_origin = { (ModelNode*) &iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -4152,7 +3819,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -4165,7 +3832,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -4178,7 +3845,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -4191,7 +3858,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -4204,7 +3871,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -4217,7 +3884,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -4230,7 +3897,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -4243,7 +3910,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -4256,7 +3923,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -4269,7 +3936,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_hisRs_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -4291,7 +3958,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_actCtVal_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -4304,7 +3971,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_actCtVal_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -4317,7 +3984,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_actCtVal_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -4339,7 +4006,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_oldCtVal_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -4352,7 +4019,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_oldCtVal_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -4365,7 +4032,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_oldCtVal_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -4378,7 +4045,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_ctTot = { NULL, 0, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -4391,7 +4058,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_dly = { NULL, 32, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -4404,7 +4071,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_mly = { NULL, 13, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -4417,7 +4084,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_yly = { NULL, 21, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -4430,7 +4097,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_tot = { NULL, 0, IEC61850_FC_ST, - INT32U, + IEC61850_INT32U, 0, NULL, 0}; @@ -4443,7 +4110,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmCt_rsPer = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -4456,7 +4123,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmAcs = { NULL, 0, IEC61850_FC_CF, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -4466,6 +4133,7 @@ DataAttribute iedModel_WTG_WTUR1_SetTurOp_cmAcs = { + IedModel iedModel = { "WIND", &iedModel_WTG, @@ -4473,6 +4141,7 @@ IedModel iedModel = { NULL, NULL, NULL, + NULL, initializeValues }; diff --git a/examples/server_example_complex_array/static_model.c b/examples/server_example_complex_array/static_model.c index 458b189f..3bc9396a 100644 --- a/examples/server_example_complex_array/static_model.c +++ b/examples/server_example_complex_array/static_model.c @@ -3,56 +3,9 @@ * * automatically generated from mhai_array.icd */ -#include -#include "iec61850_model.h" +#include "static_model.h" -extern IedModel iedModel; static void initializeValues(); -extern LogicalDevice iedModel_ComplexArray; -extern LogicalNode iedModel_ComplexArray_LLN0; -extern DataObject iedModel_ComplexArray_LLN0_Mod; -extern DataAttribute iedModel_ComplexArray_LLN0_Mod_q; -extern DataAttribute iedModel_ComplexArray_LLN0_Mod_t; -extern DataAttribute iedModel_ComplexArray_LLN0_Mod_ctlModel; -extern DataObject iedModel_ComplexArray_LLN0_Beh; -extern DataAttribute iedModel_ComplexArray_LLN0_Beh_stVal; -extern DataAttribute iedModel_ComplexArray_LLN0_Beh_q; -extern DataAttribute iedModel_ComplexArray_LLN0_Beh_t; -extern DataObject iedModel_ComplexArray_LLN0_Health; -extern DataAttribute iedModel_ComplexArray_LLN0_Health_stVal; -extern DataAttribute iedModel_ComplexArray_LLN0_Health_q; -extern DataAttribute iedModel_ComplexArray_LLN0_Health_t; -extern DataObject iedModel_ComplexArray_LLN0_NamPlt; -extern DataAttribute iedModel_ComplexArray_LLN0_NamPlt_vendor; -extern DataAttribute iedModel_ComplexArray_LLN0_NamPlt_swRev; -extern DataAttribute iedModel_ComplexArray_LLN0_NamPlt_d; -extern DataAttribute iedModel_ComplexArray_LLN0_NamPlt_configRev; -extern DataAttribute iedModel_ComplexArray_LLN0_NamPlt_ldNs; -extern LogicalNode iedModel_ComplexArray_LPHD1; -extern DataObject iedModel_ComplexArray_LPHD1_PhyNam; -extern DataAttribute iedModel_ComplexArray_LPHD1_PhyNam_vendor; -extern DataObject iedModel_ComplexArray_LPHD1_PhyHealth; -extern DataAttribute iedModel_ComplexArray_LPHD1_PhyHealth_stVal; -extern DataAttribute iedModel_ComplexArray_LPHD1_PhyHealth_q; -extern DataAttribute iedModel_ComplexArray_LPHD1_PhyHealth_t; -extern DataObject iedModel_ComplexArray_LPHD1_Proxy; -extern DataAttribute iedModel_ComplexArray_LPHD1_Proxy_stVal; -extern DataAttribute iedModel_ComplexArray_LPHD1_Proxy_q; -extern DataAttribute iedModel_ComplexArray_LPHD1_Proxy_t; -extern LogicalNode iedModel_ComplexArray_MHAI1; -extern DataObject iedModel_ComplexArray_MHAI1_HA; -extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar; -extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal; -extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_mag; -extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_mag_f; -extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_ang; -extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_ang_f; -extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_q; -extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_t; -extern DataAttribute iedModel_ComplexArray_MHAI1_HA_numHar; -extern DataAttribute iedModel_ComplexArray_MHAI1_HA_numCyc; -extern DataAttribute iedModel_ComplexArray_MHAI1_HA_evalTm; -extern DataAttribute iedModel_ComplexArray_MHAI1_HA_frequency; @@ -89,7 +42,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -102,7 +55,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -115,7 +68,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -137,7 +90,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -150,7 +103,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -163,7 +116,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -185,7 +138,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -198,7 +151,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -211,7 +164,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -233,7 +186,7 @@ DataAttribute iedModel_ComplexArray_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -246,7 +199,7 @@ DataAttribute iedModel_ComplexArray_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -259,7 +212,7 @@ DataAttribute iedModel_ComplexArray_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -272,7 +225,7 @@ DataAttribute iedModel_ComplexArray_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -285,7 +238,7 @@ DataAttribute iedModel_ComplexArray_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -315,7 +268,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -337,7 +290,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -350,7 +303,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -363,7 +316,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -385,7 +338,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -398,7 +351,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -411,7 +364,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -450,7 +403,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal = { (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_mag, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, NULL, 0}; @@ -463,7 +416,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_mag = { (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, NULL, 0}; @@ -476,7 +429,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, NULL, 0}; @@ -489,7 +442,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_ang = { (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_ang_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, NULL, 0}; @@ -502,7 +455,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_ang_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, NULL, 0}; @@ -515,7 +468,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -528,7 +481,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -541,7 +494,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_numHar = { NULL, 0, IEC61850_FC_CF, - INT16U, + IEC61850_INT16U, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -554,7 +507,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_numCyc = { NULL, 0, IEC61850_FC_CF, - INT16U, + IEC61850_INT16U, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -567,7 +520,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_evalTm = { NULL, 0, IEC61850_FC_CF, - INT16U, + IEC61850_INT16U, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -580,7 +533,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_frequency = { NULL, 0, IEC61850_FC_CF, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -590,6 +543,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_frequency = { + IedModel iedModel = { "test", &iedModel_ComplexArray, @@ -597,6 +551,7 @@ IedModel iedModel = { NULL, NULL, NULL, + NULL, initializeValues }; diff --git a/examples/server_example_config_file/vmd-filestore/model.cfg b/examples/server_example_config_file/vmd-filestore/model.cfg index bcd616e1..58fdeaee 100644 --- a/examples/server_example_config_file/vmd-filestore/model.cfg +++ b/examples/server_example_config_file/vmd-filestore/model.cfg @@ -40,13 +40,13 @@ DE(GGIO1$MX$AnIn2); DE(GGIO1$MX$AnIn3); DE(GGIO1$MX$AnIn4); } -RC(EventsRCB01 Events 0 Events 1 8 111 50 1000); -RC(AnalogValuesRCB01 AnalogValues 0 AnalogValues 1 8 111 50 1000); +RC(EventsRCB01 Events 0 Events 1 24 111 50 1000); +RC(AnalogValuesRCB01 AnalogValues 0 AnalogValues 1 24 111 50 1000); GC(gcbEvents events Events 2 0 -1 -1 ){ -PA(4 111 1000 010ccd010001); +PA(4 273 4096 010ccd010001); } GC(gcbAnalogValues analog AnalogValues 2 0 -1 -1 ){ -PA(4 111 1000 010ccd010001); +PA(4 273 4096 010ccd010001); } } LN(LPHD1){ diff --git a/examples/server_example_control/static_model.c b/examples/server_example_control/static_model.c index fe058594..b538b20e 100644 --- a/examples/server_example_control/static_model.c +++ b/examples/server_example_control/static_model.c @@ -3,318 +3,9 @@ * * automatically generated from simpleIO_control_tests.icd */ -#include -#include "iec61850_model.h" +#include "static_model.h" -extern IedModel iedModel; static void initializeValues(); -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_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_stVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_q; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel; -extern DataObject iedModel_GenericIO_GGIO1_SPCSO2; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_SBO; -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_Cancel; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_stVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_q; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_t; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_ctlModel; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_sboClass; -extern DataObject iedModel_GenericIO_GGIO1_SPCSO3; -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_Cancel; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_stVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_q; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_t; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_ctlModel; -extern DataObject iedModel_GenericIO_GGIO1_SPCSO4; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_Check; -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_Cancel; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_stVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_q; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_t; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_ctlModel; -extern DataObject iedModel_GenericIO_GGIO1_SPCSO5; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_operTm; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_Check; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_stVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_q; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_t; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_ctlModel; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_Test; -extern DataObject iedModel_GenericIO_GGIO1_SPCSO6; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_SBO; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_operTm; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_Check; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_operTm; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_stVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_q; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_t; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_ctlModel; -extern DataObject iedModel_GenericIO_GGIO1_SPCSO7; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_operTm; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_Check; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_operTm; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_stVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_q; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_t; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_ctlModel; -extern DataObject iedModel_GenericIO_GGIO1_SPCSO8; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_operTm; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_Check; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_operTm; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_Check; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_operTm; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_stVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_q; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_t; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_ctlModel; -extern DataObject iedModel_GenericIO_GGIO1_SPCSO9; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_Check; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_ctlVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_origin; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_origin_orCat; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_origin_orIdent; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_ctlNum; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_T; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_Test; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_stVal; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_q; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_t; -extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_ctlModel; -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; @@ -351,7 +42,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -364,7 +55,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -377,7 +68,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -399,7 +90,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -412,7 +103,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -425,7 +116,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -447,7 +138,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -460,7 +151,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -473,7 +164,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -495,7 +186,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -508,7 +199,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -521,7 +212,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -534,7 +225,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -547,7 +238,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -577,7 +268,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -599,7 +290,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -612,7 +303,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -625,7 +316,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -647,7 +338,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -660,7 +351,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -673,7 +364,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -703,7 +394,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -716,7 +407,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -729,7 +420,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -751,7 +442,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -764,7 +455,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -777,7 +468,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -799,7 +490,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -812,7 +503,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -825,7 +516,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -847,7 +538,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -860,7 +551,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -873,7 +564,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -895,7 +586,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -908,7 +599,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -921,7 +612,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -934,7 +625,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -956,7 +647,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -969,7 +660,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -982,7 +673,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -995,7 +686,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1017,7 +708,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1030,7 +721,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1043,7 +734,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1056,7 +747,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1078,7 +769,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1091,7 +782,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1104,7 +795,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1117,7 +808,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1139,7 +830,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1152,7 +843,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1165,7 +856,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1178,7 +869,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1191,7 +882,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1204,7 +895,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1217,7 +908,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1230,7 +921,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1243,7 +934,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1256,7 +947,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1269,7 +960,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1282,7 +973,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1295,7 +986,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1317,7 +1008,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_SBO = { NULL, 0, IEC61850_FC_CO, - VISIBLE_STRING_64, + IEC61850_VISIBLE_STRING_64, 0, NULL, 0}; @@ -1330,7 +1021,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1343,7 +1034,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1356,7 +1047,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1369,7 +1060,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1382,7 +1073,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1395,7 +1086,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1408,7 +1099,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1421,7 +1112,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1434,7 +1125,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1447,7 +1138,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Cancel_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1460,7 +1151,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1473,7 +1164,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Cancel_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1486,7 +1177,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1499,7 +1190,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1512,7 +1203,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1525,7 +1216,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1538,7 +1229,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Cancel_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1551,7 +1242,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1564,7 +1255,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1577,7 +1268,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1590,7 +1281,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1603,7 +1294,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_sboClass = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1625,7 +1316,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1638,7 +1329,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1651,7 +1342,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1664,7 +1355,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1677,7 +1368,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1690,7 +1381,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1703,7 +1394,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1716,7 +1407,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1729,7 +1420,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1742,7 +1433,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Cancel_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1755,7 +1446,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1768,7 +1459,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Cancel_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1781,7 +1472,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1794,7 +1485,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1807,7 +1498,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1820,7 +1511,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1833,7 +1524,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Cancel_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1846,7 +1537,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1859,7 +1550,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1872,7 +1563,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1885,7 +1576,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1907,7 +1598,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_SBOw_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1920,7 +1611,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1933,7 +1624,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_SBOw_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1946,7 +1637,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1959,7 +1650,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1972,7 +1663,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1985,7 +1676,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1998,7 +1689,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2011,7 +1702,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_SBOw_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -2024,7 +1715,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2037,7 +1728,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2050,7 +1741,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2063,7 +1754,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2076,7 +1767,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -2089,7 +1780,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -2102,7 +1793,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2115,7 +1806,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2128,7 +1819,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -2141,7 +1832,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Cancel_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2154,7 +1845,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2167,7 +1858,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Cancel_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2180,7 +1871,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2193,7 +1884,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -2206,7 +1897,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -2219,7 +1910,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2232,7 +1923,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Cancel_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2245,7 +1936,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2258,7 +1949,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2271,7 +1962,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2284,7 +1975,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2306,7 +1997,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO5_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2319,7 +2010,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2332,7 +2023,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2345,7 +2036,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO5_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2358,7 +2049,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2371,7 +2062,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -2384,7 +2075,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -2397,7 +2088,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2410,7 +2101,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2423,7 +2114,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -2436,7 +2127,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2449,7 +2140,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2462,7 +2153,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2475,7 +2166,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2488,7 +2179,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO5_Cancel_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2501,7 +2192,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2514,7 +2205,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO5_Cancel_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2527,7 +2218,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2540,7 +2231,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -2553,7 +2244,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -2566,7 +2257,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2579,7 +2270,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO5_Cancel_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2601,7 +2292,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_SBO = { NULL, 0, IEC61850_FC_CO, - VISIBLE_STRING_64, + IEC61850_VISIBLE_STRING_64, 0, NULL, 0}; @@ -2614,7 +2305,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO6_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2627,7 +2318,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2640,7 +2331,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2653,7 +2344,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO6_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2666,7 +2357,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2679,7 +2370,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -2692,7 +2383,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -2705,7 +2396,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2718,7 +2409,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2731,7 +2422,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -2744,7 +2435,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO6_Cancel_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2757,7 +2448,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2770,7 +2461,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2783,7 +2474,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO6_Cancel_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2796,7 +2487,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2809,7 +2500,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -2822,7 +2513,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -2835,7 +2526,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2848,7 +2539,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_Cancel_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2861,7 +2552,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -2874,7 +2565,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -2887,7 +2578,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2900,7 +2591,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO6_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2922,7 +2613,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO7_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2935,7 +2626,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -2948,7 +2639,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -2961,7 +2652,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO7_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -2974,7 +2665,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -2987,7 +2678,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -3000,7 +2691,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -3013,7 +2704,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3026,7 +2717,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3039,7 +2730,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -3052,7 +2743,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO7_Cancel_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3065,7 +2756,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3078,7 +2769,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3091,7 +2782,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO7_Cancel_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3104,7 +2795,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3117,7 +2808,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -3130,7 +2821,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -3143,7 +2834,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3156,7 +2847,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_Cancel_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3169,7 +2860,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3182,7 +2873,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3195,7 +2886,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3208,7 +2899,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO7_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3230,7 +2921,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO8_SBOw_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3243,7 +2934,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3256,7 +2947,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3269,7 +2960,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO8_SBOw_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3282,7 +2973,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3295,7 +2986,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -3308,7 +2999,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -3321,7 +3012,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3334,7 +3025,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3347,7 +3038,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_SBOw_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -3360,7 +3051,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO8_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3373,7 +3064,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3386,7 +3077,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3399,7 +3090,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO8_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3412,7 +3103,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3425,7 +3116,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -3438,7 +3129,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -3451,7 +3142,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3464,7 +3155,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3477,7 +3168,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -3490,7 +3181,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO8_Cancel_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3503,7 +3194,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3516,7 +3207,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3529,7 +3220,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO8_Cancel_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3542,7 +3233,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3555,7 +3246,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -3568,7 +3259,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -3581,7 +3272,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3594,7 +3285,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_Cancel_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3607,7 +3298,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO8_origin_orCat, 0, IEC61850_FC_ST, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3620,7 +3311,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_origin_orCat = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3633,7 +3324,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_origin_orIdent = { NULL, 0, IEC61850_FC_ST, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -3646,7 +3337,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_ctlNum = { NULL, 0, IEC61850_FC_ST, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -3659,7 +3350,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3672,7 +3363,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3685,7 +3376,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3698,7 +3389,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO8_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3720,7 +3411,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO9_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3733,7 +3424,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3746,7 +3437,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO9_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3759,7 +3450,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3772,7 +3463,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -3785,7 +3476,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -3798,7 +3489,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3811,7 +3502,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3824,7 +3515,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -3837,7 +3528,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO9_Cancel_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3850,7 +3541,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3863,7 +3554,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO9_Cancel_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -3876,7 +3567,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -3889,7 +3580,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -3902,7 +3593,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -3915,7 +3606,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3928,7 +3619,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_Cancel_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -3941,7 +3632,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -3954,7 +3645,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -3967,7 +3658,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -3980,7 +3671,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO9_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -4002,7 +3693,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -4015,7 +3706,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -4028,7 +3719,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -4050,7 +3741,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -4063,7 +3754,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -4076,7 +3767,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -4098,7 +3789,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -4111,7 +3802,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -4124,7 +3815,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -4146,7 +3837,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -4159,7 +3850,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -4172,7 +3863,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -4182,6 +3873,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_t = { + IedModel iedModel = { "simpleIO", &iedModel_GenericIO, @@ -4189,6 +3881,7 @@ IedModel iedModel = { NULL, NULL, NULL, + NULL, initializeValues }; diff --git a/examples/server_example_dynamic/server_example_dynamic.c b/examples/server_example_dynamic/server_example_dynamic.c index 49dccbc1..2bab1f05 100644 --- a/examples/server_example_dynamic/server_example_dynamic.c +++ b/examples/server_example_dynamic/server_example_dynamic.c @@ -57,6 +57,8 @@ int main(int argc, char** argv) { ReportControlBlock_create("events01", lln0, "events01", false, NULL, 1, TRG_OPT_DATA_CHANGED, rptOptions, 50, 0); ReportControlBlock_create("events02", lln0, "events02", false, NULL, 1, TRG_OPT_DATA_CHANGED, rptOptions, 50, 0); + GSEControlBlock_create("gse01", lln0, "events01", "events", 1, false, 200, 3000); + /********************* * run server ********************/ @@ -81,9 +83,8 @@ int main(int argc, char** argv) { while (running) { IedServer_lockDataModel(iedServer); - MmsValue_setFloat(temperatureValue->mmsValue, val); - MmsValue_setUtcTimeMs(temperatureTimestamp->mmsValue, Hal_getTimeInMs()); - IedServer_updateAttributeValue(iedServer, temperatureValue, temperatureValue->mmsValue); + IedServer_updateUTCTimeAttributeValue(iedServer, temperatureTimestamp, Hal_getTimeInMs()) + IedServer_updateFloatAttributeValue(iedServer, temperatureValue, val); IedServer_unlockDataModel(iedServer); diff --git a/examples/server_example_goose/static_model.c b/examples/server_example_goose/static_model.c index 8c60853e..69df5e7f 100644 --- a/examples/server_example_goose/static_model.c +++ b/examples/server_example_goose/static_model.c @@ -3,192 +3,51 @@ * * automatically generated from simpleIO_direct_control_goose.icd */ -#include -#include "iec61850_model.h" +#include "static_model.h" -extern IedModel iedModel; static void initializeValues(); -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; - -extern DataSet ds_GenericIO_LLN0_Events; -extern DataSet ds_GenericIO_LLN0_AnalogValues; - - -extern DataSetEntry ds_GenericIO_LLN0_Events_fcda0; -extern DataSetEntry ds_GenericIO_LLN0_Events_fcda1; -extern DataSetEntry ds_GenericIO_LLN0_Events_fcda2; -extern DataSetEntry ds_GenericIO_LLN0_Events_fcda3; - -DataSetEntry ds_GenericIO_LLN0_Events_fcda0 = { + +extern DataSet iedModelds_GenericIO_LLN0_Events; +extern DataSet iedModelds_GenericIO_LLN0_Events2; +extern DataSet iedModelds_GenericIO_LLN0_AnalogValues; + + +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, - &ds_GenericIO_LLN0_Events_fcda1 + &iedModelds_GenericIO_LLN0_Events_fcda1 }; -DataSetEntry ds_GenericIO_LLN0_Events_fcda1 = { +DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda1 = { "GenericIO", false, "GGIO1$ST$SPCSO2$stVal", -1, NULL, NULL, - &ds_GenericIO_LLN0_Events_fcda2 + &iedModelds_GenericIO_LLN0_Events_fcda2 }; -DataSetEntry ds_GenericIO_LLN0_Events_fcda2 = { +DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda2 = { "GenericIO", false, "GGIO1$ST$SPCSO3$stVal", -1, NULL, NULL, - &ds_GenericIO_LLN0_Events_fcda3 + &iedModelds_GenericIO_LLN0_Events_fcda3 }; -DataSetEntry ds_GenericIO_LLN0_Events_fcda3 = { +DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda3 = { "GenericIO", false, "GGIO1$ST$SPCSO4$stVal", @@ -198,50 +57,103 @@ DataSetEntry ds_GenericIO_LLN0_Events_fcda3 = { NULL }; -DataSet ds_GenericIO_LLN0_Events = { +DataSet iedModelds_GenericIO_LLN0_Events = { "GenericIO", "LLN0$Events", 4, - &ds_GenericIO_LLN0_Events_fcda0, - &ds_GenericIO_LLN0_AnalogValues + &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_AnalogValues }; -extern DataSetEntry ds_GenericIO_LLN0_AnalogValues_fcda0; -extern DataSetEntry ds_GenericIO_LLN0_AnalogValues_fcda1; -extern DataSetEntry ds_GenericIO_LLN0_AnalogValues_fcda2; -extern DataSetEntry ds_GenericIO_LLN0_AnalogValues_fcda3; +extern DataSetEntry iedModelds_GenericIO_LLN0_AnalogValues_fcda0; +extern DataSetEntry iedModelds_GenericIO_LLN0_AnalogValues_fcda1; +extern DataSetEntry iedModelds_GenericIO_LLN0_AnalogValues_fcda2; +extern DataSetEntry iedModelds_GenericIO_LLN0_AnalogValues_fcda3; -DataSetEntry ds_GenericIO_LLN0_AnalogValues_fcda0 = { +DataSetEntry iedModelds_GenericIO_LLN0_AnalogValues_fcda0 = { "GenericIO", false, "GGIO1$MX$AnIn1", -1, NULL, NULL, - &ds_GenericIO_LLN0_AnalogValues_fcda1 + &iedModelds_GenericIO_LLN0_AnalogValues_fcda1 }; -DataSetEntry ds_GenericIO_LLN0_AnalogValues_fcda1 = { +DataSetEntry iedModelds_GenericIO_LLN0_AnalogValues_fcda1 = { "GenericIO", false, "GGIO1$MX$AnIn2", -1, NULL, NULL, - &ds_GenericIO_LLN0_AnalogValues_fcda2 + &iedModelds_GenericIO_LLN0_AnalogValues_fcda2 }; -DataSetEntry ds_GenericIO_LLN0_AnalogValues_fcda2 = { +DataSetEntry iedModelds_GenericIO_LLN0_AnalogValues_fcda2 = { "GenericIO", false, "GGIO1$MX$AnIn3", -1, NULL, NULL, - &ds_GenericIO_LLN0_AnalogValues_fcda3 + &iedModelds_GenericIO_LLN0_AnalogValues_fcda3 }; -DataSetEntry ds_GenericIO_LLN0_AnalogValues_fcda3 = { +DataSetEntry iedModelds_GenericIO_LLN0_AnalogValues_fcda3 = { "GenericIO", false, "GGIO1$MX$AnIn4", @@ -251,11 +163,11 @@ DataSetEntry ds_GenericIO_LLN0_AnalogValues_fcda3 = { NULL }; -DataSet ds_GenericIO_LLN0_AnalogValues = { +DataSet iedModelds_GenericIO_LLN0_AnalogValues = { "GenericIO", "LLN0$AnalogValues", 4, - &ds_GenericIO_LLN0_AnalogValues_fcda0, + &iedModelds_GenericIO_LLN0_AnalogValues_fcda0, NULL }; @@ -292,7 +204,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -305,7 +217,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -318,7 +230,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -340,7 +252,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -353,7 +265,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -366,7 +278,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -388,7 +300,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -401,7 +313,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -414,7 +326,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -436,7 +348,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -449,7 +361,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -462,7 +374,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -475,7 +387,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -488,7 +400,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -518,7 +430,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -540,7 +452,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -553,7 +465,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -566,7 +478,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -588,7 +500,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -601,7 +513,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -614,7 +526,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -644,7 +556,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -657,7 +569,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -670,7 +582,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -692,7 +604,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -705,7 +617,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -718,7 +630,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -740,7 +652,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -753,7 +665,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -766,7 +678,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -788,7 +700,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -801,7 +713,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -814,7 +726,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -836,7 +748,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -849,7 +761,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -862,7 +774,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -875,7 +787,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -897,7 +809,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -910,7 +822,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -923,7 +835,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -936,7 +848,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -958,7 +870,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -971,7 +883,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -984,7 +896,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -997,7 +909,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1019,7 +931,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1032,7 +944,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1045,7 +957,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1058,7 +970,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1080,7 +992,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1093,7 +1005,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1106,7 +1018,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1119,7 +1031,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1132,7 +1044,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1145,7 +1057,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1158,7 +1070,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1171,7 +1083,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1184,7 +1096,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1197,7 +1109,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1210,7 +1122,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1223,7 +1135,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1236,7 +1148,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1258,7 +1170,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1271,7 +1183,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1284,7 +1196,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1297,7 +1209,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1310,7 +1222,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1323,7 +1235,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1336,7 +1248,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1349,7 +1261,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1362,7 +1274,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1375,7 +1287,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1388,7 +1300,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1401,7 +1313,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1414,7 +1326,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1436,7 +1348,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1449,7 +1361,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1462,7 +1374,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1475,7 +1387,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1488,7 +1400,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1501,7 +1413,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1514,7 +1426,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1527,7 +1439,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1540,7 +1452,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1553,7 +1465,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1566,7 +1478,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1579,7 +1491,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1592,7 +1504,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1614,7 +1526,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1627,7 +1539,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1640,7 +1552,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1653,7 +1565,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1666,7 +1578,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1679,7 +1591,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1692,7 +1604,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1705,7 +1617,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1718,7 +1630,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1731,7 +1643,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1744,7 +1656,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1757,7 +1669,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1770,7 +1682,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1792,7 +1704,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1805,7 +1717,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1818,7 +1730,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1840,7 +1752,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1853,7 +1765,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1866,7 +1778,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1888,7 +1800,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1901,7 +1813,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1914,7 +1826,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1936,7 +1848,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1949,7 +1861,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1962,7 +1874,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1970,8 +1882,9 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_t = { extern ReportControlBlock iedModel_GenericIO_LLN0_report0; extern ReportControlBlock iedModel_GenericIO_LLN0_report1; -ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events", false, "Events", 1, 8, 111, 50, 1000, &iedModel_GenericIO_LLN0_report1}; -ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "AnalogValuesRCB01", "AnalogValues", false, "AnalogValues", 1, 8, 111, 50, 1000, NULL}; +ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events", false, "Events", 1, 24, 111, 50, 1000, &iedModel_GenericIO_LLN0_report1}; +ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "AnalogValuesRCB01", "AnalogValues", false, "AnalogValues", 1, 24, 111, 50, 1000, NULL}; + extern GSEControlBlock iedModel_GenericIO_LLN0_gse0; extern GSEControlBlock iedModel_GenericIO_LLN0_gse1; @@ -1979,7 +1892,7 @@ extern GSEControlBlock iedModel_GenericIO_LLN0_gse1; static PhyComAddress iedModel_GenericIO_LLN0_gse0_address = { 4, 1, - 1000, + 4096, {0x1, 0xc, 0xcd, 0x1, 0x0, 0x1} }; @@ -1988,7 +1901,7 @@ GSEControlBlock iedModel_GenericIO_LLN0_gse0 = {&iedModel_GenericIO_LLN0, "gcbEv static PhyComAddress iedModel_GenericIO_LLN0_gse1_address = { 4, 1, - 1000, + 4096, {0x1, 0xc, 0xcd, 0x1, 0x0, 0x1} }; @@ -1999,10 +1912,11 @@ GSEControlBlock iedModel_GenericIO_LLN0_gse1 = {&iedModel_GenericIO_LLN0, "gcbAn IedModel iedModel = { "simpleIO", &iedModel_GenericIO, - &ds_GenericIO_LLN0_Events, + &iedModelds_GenericIO_LLN0_Events, &iedModel_GenericIO_LLN0_report0, &iedModel_GenericIO_LLN0_gse0, NULL, + NULL, initializeValues }; diff --git a/examples/server_example_setting_groups/sg_demo.icd b/examples/server_example_setting_groups/sg_demo.icd index ef3bef81..3086c38e 100644 --- a/examples/server_example_setting_groups/sg_demo.icd +++ b/examples/server_example_setting_groups/sg_demo.icd @@ -122,7 +122,6 @@ - @@ -151,7 +150,6 @@ - diff --git a/examples/server_example_setting_groups/static_model.c b/examples/server_example_setting_groups/static_model.c index af840569..2c10dc43 100644 --- a/examples/server_example_setting_groups/static_model.c +++ b/examples/server_example_setting_groups/static_model.c @@ -3,101 +3,9 @@ * * automatically generated from sg_demo.icd */ -#include -#include "iec61850_model.h" +#include "static_model.h" -extern IedModel iedModel; static void initializeValues(); -extern LogicalDevice iedModel_PROT; -extern LogicalNode iedModel_PROT_LLN0; -extern DataObject iedModel_PROT_LLN0_Mod; -extern DataAttribute iedModel_PROT_LLN0_Mod_Oper; -extern DataAttribute iedModel_PROT_LLN0_Mod_Oper_ctlVal; -extern DataAttribute iedModel_PROT_LLN0_Mod_Oper_operTm; -extern DataAttribute iedModel_PROT_LLN0_Mod_Oper_origin; -extern DataAttribute iedModel_PROT_LLN0_Mod_Oper_origin_orCat; -extern DataAttribute iedModel_PROT_LLN0_Mod_Oper_origin_orIdent; -extern DataAttribute iedModel_PROT_LLN0_Mod_Oper_ctlNum; -extern DataAttribute iedModel_PROT_LLN0_Mod_Oper_T; -extern DataAttribute iedModel_PROT_LLN0_Mod_Oper_Test; -extern DataAttribute iedModel_PROT_LLN0_Mod_Oper_Check; -extern DataAttribute iedModel_PROT_LLN0_Mod_stVal; -extern DataAttribute iedModel_PROT_LLN0_Mod_q; -extern DataAttribute iedModel_PROT_LLN0_Mod_t; -extern DataAttribute iedModel_PROT_LLN0_Mod_ctlModel; -extern DataObject iedModel_PROT_LLN0_Beh; -extern DataAttribute iedModel_PROT_LLN0_Beh_stVal; -extern DataAttribute iedModel_PROT_LLN0_Beh_q; -extern DataAttribute iedModel_PROT_LLN0_Beh_t; -extern DataObject iedModel_PROT_LLN0_Health; -extern DataAttribute iedModel_PROT_LLN0_Health_stVal; -extern DataAttribute iedModel_PROT_LLN0_Health_q; -extern DataAttribute iedModel_PROT_LLN0_Health_t; -extern DataObject iedModel_PROT_LLN0_NamPlt; -extern DataAttribute iedModel_PROT_LLN0_NamPlt_vendor; -extern DataAttribute iedModel_PROT_LLN0_NamPlt_swRev; -extern DataAttribute iedModel_PROT_LLN0_NamPlt_d; -extern DataAttribute iedModel_PROT_LLN0_NamPlt_configRev; -extern DataAttribute iedModel_PROT_LLN0_NamPlt_ldNs; -extern LogicalNode iedModel_PROT_LPHD1; -extern DataObject iedModel_PROT_LPHD1_PhyNam; -extern DataAttribute iedModel_PROT_LPHD1_PhyNam_vendor; -extern DataAttribute iedModel_PROT_LPHD1_PhyNam_hwRev; -extern DataAttribute iedModel_PROT_LPHD1_PhyNam_swRev; -extern DataAttribute iedModel_PROT_LPHD1_PhyNam_serNum; -extern DataAttribute iedModel_PROT_LPHD1_PhyNam_model; -extern DataAttribute iedModel_PROT_LPHD1_PhyNam_location; -extern DataObject iedModel_PROT_LPHD1_PhyHealth; -extern DataAttribute iedModel_PROT_LPHD1_PhyHealth_stVal; -extern DataAttribute iedModel_PROT_LPHD1_PhyHealth_q; -extern DataAttribute iedModel_PROT_LPHD1_PhyHealth_t; -extern DataObject iedModel_PROT_LPHD1_Proxy; -extern DataAttribute iedModel_PROT_LPHD1_Proxy_stVal; -extern DataAttribute iedModel_PROT_LPHD1_Proxy_q; -extern DataAttribute iedModel_PROT_LPHD1_Proxy_t; -extern LogicalNode iedModel_PROT_PTOC1; -extern DataObject iedModel_PROT_PTOC1_Beh; -extern DataAttribute iedModel_PROT_PTOC1_Beh_stVal; -extern DataAttribute iedModel_PROT_PTOC1_Beh_q; -extern DataAttribute iedModel_PROT_PTOC1_Beh_t; -extern DataObject iedModel_PROT_PTOC1_Mod; -extern DataAttribute iedModel_PROT_PTOC1_Mod_Oper; -extern DataAttribute iedModel_PROT_PTOC1_Mod_Oper_ctlVal; -extern DataAttribute iedModel_PROT_PTOC1_Mod_Oper_operTm; -extern DataAttribute iedModel_PROT_PTOC1_Mod_Oper_origin; -extern DataAttribute iedModel_PROT_PTOC1_Mod_Oper_origin_orCat; -extern DataAttribute iedModel_PROT_PTOC1_Mod_Oper_origin_orIdent; -extern DataAttribute iedModel_PROT_PTOC1_Mod_Oper_ctlNum; -extern DataAttribute iedModel_PROT_PTOC1_Mod_Oper_T; -extern DataAttribute iedModel_PROT_PTOC1_Mod_Oper_Test; -extern DataAttribute iedModel_PROT_PTOC1_Mod_Oper_Check; -extern DataAttribute iedModel_PROT_PTOC1_Mod_stVal; -extern DataAttribute iedModel_PROT_PTOC1_Mod_q; -extern DataAttribute iedModel_PROT_PTOC1_Mod_t; -extern DataAttribute iedModel_PROT_PTOC1_Mod_ctlModel; -extern DataObject iedModel_PROT_PTOC1_Str; -extern DataAttribute iedModel_PROT_PTOC1_Str_general; -extern DataAttribute iedModel_PROT_PTOC1_Str_dirGeneral; -extern DataAttribute iedModel_PROT_PTOC1_Str_q; -extern DataAttribute iedModel_PROT_PTOC1_Str_t; -extern DataObject iedModel_PROT_PTOC1_Op; -extern DataAttribute iedModel_PROT_PTOC1_Op_general; -extern DataAttribute iedModel_PROT_PTOC1_Op_q; -extern DataAttribute iedModel_PROT_PTOC1_Op_t; -extern DataObject iedModel_PROT_PTOC1_StrVal; -extern DataAttribute iedModel_PROT_PTOC1_StrVal_setMag; -extern DataAttribute iedModel_PROT_PTOC1_StrVal_setMag_f; -extern DataAttribute iedModel_SE_PROT_PTOC1_StrVal_setMag; -extern DataAttribute iedModel_SE_PROT_PTOC1_StrVal_setMag_f; -extern DataObject iedModel_PROT_PTOC1_OpDlTmms; -extern DataAttribute iedModel_PROT_PTOC1_OpDlTmms_setVal; -extern DataAttribute iedModel_SE_PROT_PTOC1_OpDlTmms_setVal; -extern DataObject iedModel_PROT_PTOC1_RsDlTmms; -extern DataAttribute iedModel_PROT_PTOC1_RsDlTmms_setVal; -extern DataAttribute iedModel_SE_PROT_PTOC1_RsDlTmms_setVal; -extern DataObject iedModel_PROT_PTOC1_RstTms; -extern DataAttribute iedModel_PROT_PTOC1_RstTms_setVal; -extern DataAttribute iedModel_SE_PROT_PTOC1_RstTms_setVal; @@ -134,7 +42,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_Oper = { (ModelNode*) &iedModel_PROT_LLN0_Mod_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -147,7 +55,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -160,7 +68,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -173,7 +81,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_Oper_origin = { (ModelNode*) &iedModel_PROT_LLN0_Mod_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -186,7 +94,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -199,7 +107,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -212,7 +120,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -225,7 +133,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -238,7 +146,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -251,7 +159,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -264,7 +172,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -277,7 +185,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -290,7 +198,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -303,7 +211,7 @@ DataAttribute iedModel_PROT_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -325,7 +233,7 @@ DataAttribute iedModel_PROT_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -338,7 +246,7 @@ DataAttribute iedModel_PROT_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -351,7 +259,7 @@ DataAttribute iedModel_PROT_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -373,7 +281,7 @@ DataAttribute iedModel_PROT_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -386,7 +294,7 @@ DataAttribute iedModel_PROT_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -399,7 +307,7 @@ DataAttribute iedModel_PROT_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -421,7 +329,7 @@ DataAttribute iedModel_PROT_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -434,7 +342,7 @@ DataAttribute iedModel_PROT_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -447,7 +355,7 @@ DataAttribute iedModel_PROT_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -460,7 +368,7 @@ DataAttribute iedModel_PROT_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -473,7 +381,7 @@ DataAttribute iedModel_PROT_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -503,7 +411,7 @@ DataAttribute iedModel_PROT_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -516,7 +424,7 @@ DataAttribute iedModel_PROT_LPHD1_PhyNam_hwRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -529,7 +437,7 @@ DataAttribute iedModel_PROT_LPHD1_PhyNam_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -542,7 +450,7 @@ DataAttribute iedModel_PROT_LPHD1_PhyNam_serNum = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -555,7 +463,7 @@ DataAttribute iedModel_PROT_LPHD1_PhyNam_model = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -568,7 +476,7 @@ DataAttribute iedModel_PROT_LPHD1_PhyNam_location = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -590,7 +498,7 @@ DataAttribute iedModel_PROT_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -603,7 +511,7 @@ DataAttribute iedModel_PROT_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -616,7 +524,7 @@ DataAttribute iedModel_PROT_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -638,7 +546,7 @@ DataAttribute iedModel_PROT_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -651,7 +559,7 @@ DataAttribute iedModel_PROT_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -664,7 +572,7 @@ DataAttribute iedModel_PROT_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -694,7 +602,7 @@ DataAttribute iedModel_PROT_PTOC1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -707,7 +615,7 @@ DataAttribute iedModel_PROT_PTOC1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -720,7 +628,7 @@ DataAttribute iedModel_PROT_PTOC1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -742,7 +650,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_Oper = { (ModelNode*) &iedModel_PROT_PTOC1_Mod_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -755,7 +663,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -768,7 +676,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_Oper_operTm = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -781,7 +689,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_Oper_origin = { (ModelNode*) &iedModel_PROT_PTOC1_Mod_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -794,7 +702,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -807,7 +715,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -820,7 +728,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -833,7 +741,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -846,7 +754,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -859,7 +767,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -872,7 +780,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_stVal = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -885,7 +793,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -898,7 +806,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -911,7 +819,7 @@ DataAttribute iedModel_PROT_PTOC1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -933,7 +841,7 @@ DataAttribute iedModel_PROT_PTOC1_Str_general = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -946,7 +854,7 @@ DataAttribute iedModel_PROT_PTOC1_Str_dirGeneral = { NULL, 0, IEC61850_FC_ST, - ENUMERATED, + IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -959,7 +867,7 @@ DataAttribute iedModel_PROT_PTOC1_Str_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -972,7 +880,7 @@ DataAttribute iedModel_PROT_PTOC1_Str_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -994,7 +902,7 @@ DataAttribute iedModel_PROT_PTOC1_Op_general = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1007,7 +915,7 @@ DataAttribute iedModel_PROT_PTOC1_Op_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1020,7 +928,7 @@ DataAttribute iedModel_PROT_PTOC1_Op_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1042,7 +950,7 @@ DataAttribute iedModel_PROT_PTOC1_StrVal_setMag = { (ModelNode*) &iedModel_PROT_PTOC1_StrVal_setMag_f, 0, IEC61850_FC_SG, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1055,7 +963,7 @@ DataAttribute iedModel_PROT_PTOC1_StrVal_setMag_f = { NULL, 0, IEC61850_FC_SG, - FLOAT32, + IEC61850_FLOAT32, 0, NULL, 0}; @@ -1068,7 +976,7 @@ DataAttribute iedModel_SE_PROT_PTOC1_StrVal_setMag = { (ModelNode*) &iedModel_SE_PROT_PTOC1_StrVal_setMag_f, 0, IEC61850_FC_SE, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1081,7 +989,7 @@ DataAttribute iedModel_SE_PROT_PTOC1_StrVal_setMag_f = { NULL, 0, IEC61850_FC_SE, - FLOAT32, + IEC61850_FLOAT32, 0, NULL, 0}; @@ -1103,7 +1011,7 @@ DataAttribute iedModel_PROT_PTOC1_OpDlTmms_setVal = { NULL, 0, IEC61850_FC_SG, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1116,7 +1024,7 @@ DataAttribute iedModel_SE_PROT_PTOC1_OpDlTmms_setVal = { NULL, 0, IEC61850_FC_SE, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1138,7 +1046,7 @@ DataAttribute iedModel_PROT_PTOC1_RsDlTmms_setVal = { NULL, 0, IEC61850_FC_SG, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1151,7 +1059,7 @@ DataAttribute iedModel_SE_PROT_PTOC1_RsDlTmms_setVal = { NULL, 0, IEC61850_FC_SE, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1173,7 +1081,7 @@ DataAttribute iedModel_PROT_PTOC1_RstTms_setVal = { NULL, 0, IEC61850_FC_SG, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1186,7 +1094,7 @@ DataAttribute iedModel_SE_PROT_PTOC1_RstTms_setVal = { NULL, 0, IEC61850_FC_SE, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1194,6 +1102,7 @@ DataAttribute iedModel_SE_PROT_PTOC1_RstTms_setVal = { + extern SettingGroupControlBlock iedModel_PROT_LLN0_sgcb; SettingGroupControlBlock iedModel_PROT_LLN0_sgcb = {&iedModel_PROT_LLN0, 1, 5, 0, false, 0, 0, NULL}; @@ -1205,6 +1114,7 @@ IedModel iedModel = { NULL, NULL, NULL, + NULL, &iedModel_PROT_LLN0_sgcb, initializeValues }; diff --git a/examples/server_example_threadless/static_model.c b/examples/server_example_threadless/static_model.c index 10cab577..1fdf97c7 100644 --- a/examples/server_example_threadless/static_model.c +++ b/examples/server_example_threadless/static_model.c @@ -3,193 +3,50 @@ * * automatically generated from simpleIO_direct_control.icd */ -#include -#include "iec61850_model.h" +#include "static_model.h" -extern IedModel iedModel; static void initializeValues(); -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; - -extern DataSet ds_GenericIO_LLN0_Events; -extern DataSet ds_GenericIO_LLN0_Events2; - - -extern DataSetEntry ds_GenericIO_LLN0_Events_fcda0; -extern DataSetEntry ds_GenericIO_LLN0_Events_fcda1; -extern DataSetEntry ds_GenericIO_LLN0_Events_fcda2; -extern DataSetEntry ds_GenericIO_LLN0_Events_fcda3; - -DataSetEntry ds_GenericIO_LLN0_Events_fcda0 = { + +extern DataSet iedModelds_GenericIO_LLN0_Events; +extern DataSet iedModelds_GenericIO_LLN0_Events2; + + +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, - &ds_GenericIO_LLN0_Events_fcda1 + &iedModelds_GenericIO_LLN0_Events_fcda1 }; -DataSetEntry ds_GenericIO_LLN0_Events_fcda1 = { +DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda1 = { "GenericIO", false, "GGIO1$ST$SPCSO2$stVal", -1, NULL, NULL, - &ds_GenericIO_LLN0_Events_fcda2 + &iedModelds_GenericIO_LLN0_Events_fcda2 }; -DataSetEntry ds_GenericIO_LLN0_Events_fcda2 = { +DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda2 = { "GenericIO", false, "GGIO1$ST$SPCSO3$stVal", -1, NULL, NULL, - &ds_GenericIO_LLN0_Events_fcda3 + &iedModelds_GenericIO_LLN0_Events_fcda3 }; -DataSetEntry ds_GenericIO_LLN0_Events_fcda3 = { +DataSetEntry iedModelds_GenericIO_LLN0_Events_fcda3 = { "GenericIO", false, "GGIO1$ST$SPCSO4$stVal", @@ -199,50 +56,50 @@ DataSetEntry ds_GenericIO_LLN0_Events_fcda3 = { NULL }; -DataSet ds_GenericIO_LLN0_Events = { +DataSet iedModelds_GenericIO_LLN0_Events = { "GenericIO", "LLN0$Events", 4, - &ds_GenericIO_LLN0_Events_fcda0, - &ds_GenericIO_LLN0_Events2 + &iedModelds_GenericIO_LLN0_Events_fcda0, + &iedModelds_GenericIO_LLN0_Events2 }; -extern DataSetEntry ds_GenericIO_LLN0_Events2_fcda0; -extern DataSetEntry ds_GenericIO_LLN0_Events2_fcda1; -extern DataSetEntry ds_GenericIO_LLN0_Events2_fcda2; -extern DataSetEntry ds_GenericIO_LLN0_Events2_fcda3; +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 ds_GenericIO_LLN0_Events2_fcda0 = { +DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda0 = { "GenericIO", false, "GGIO1$ST$SPCSO1", -1, NULL, NULL, - &ds_GenericIO_LLN0_Events2_fcda1 + &iedModelds_GenericIO_LLN0_Events2_fcda1 }; -DataSetEntry ds_GenericIO_LLN0_Events2_fcda1 = { +DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda1 = { "GenericIO", false, "GGIO1$ST$SPCSO2", -1, NULL, NULL, - &ds_GenericIO_LLN0_Events2_fcda2 + &iedModelds_GenericIO_LLN0_Events2_fcda2 }; -DataSetEntry ds_GenericIO_LLN0_Events2_fcda2 = { +DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda2 = { "GenericIO", false, "GGIO1$ST$SPCSO3", -1, NULL, NULL, - &ds_GenericIO_LLN0_Events2_fcda3 + &iedModelds_GenericIO_LLN0_Events2_fcda3 }; -DataSetEntry ds_GenericIO_LLN0_Events2_fcda3 = { +DataSetEntry iedModelds_GenericIO_LLN0_Events2_fcda3 = { "GenericIO", false, "GGIO1$ST$SPCSO4", @@ -252,11 +109,11 @@ DataSetEntry ds_GenericIO_LLN0_Events2_fcda3 = { NULL }; -DataSet ds_GenericIO_LLN0_Events2 = { +DataSet iedModelds_GenericIO_LLN0_Events2 = { "GenericIO", "LLN0$Events2", 4, - &ds_GenericIO_LLN0_Events2_fcda0, + &iedModelds_GenericIO_LLN0_Events2_fcda0, NULL }; @@ -293,7 +150,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -306,7 +163,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -319,7 +176,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -332,7 +189,7 @@ DataAttribute iedModel_GenericIO_LLN0_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -354,7 +211,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -367,7 +224,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -380,7 +237,7 @@ DataAttribute iedModel_GenericIO_LLN0_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -402,7 +259,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -415,7 +272,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -428,7 +285,7 @@ DataAttribute iedModel_GenericIO_LLN0_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -450,7 +307,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -463,7 +320,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -476,7 +333,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -489,7 +346,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_configRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -502,7 +359,7 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_ldNs = { NULL, 0, IEC61850_FC_EX, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -532,7 +389,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyNam_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -554,7 +411,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -567,7 +424,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -580,7 +437,7 @@ DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -602,7 +459,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -615,7 +472,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -628,7 +485,7 @@ DataAttribute iedModel_GenericIO_LPHD1_Proxy_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -658,7 +515,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -671,7 +528,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -684,7 +541,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Mod_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -706,7 +563,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -719,7 +576,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -732,7 +589,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Beh_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -754,7 +611,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_stVal = { NULL, 0, IEC61850_FC_ST, - INT32, + IEC61850_INT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -767,7 +624,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -780,7 +637,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Health_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -802,7 +659,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_vendor = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -815,7 +672,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_swRev = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -828,7 +685,7 @@ DataAttribute iedModel_GenericIO_GGIO1_NamPlt_d = { NULL, 0, IEC61850_FC_DC, - VISIBLE_STRING_255, + IEC61850_VISIBLE_STRING_255, 0, NULL, 0}; @@ -850,7 +707,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn1_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -863,7 +720,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -876,7 +733,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -889,7 +746,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn1_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -911,7 +768,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn2_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -924,7 +781,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -937,7 +794,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -950,7 +807,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn2_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -972,7 +829,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn3_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -985,7 +842,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -998,7 +855,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1011,7 +868,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn3_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1033,7 +890,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag = { (ModelNode*) &iedModel_GenericIO_GGIO1_AnIn4_mag_f, 0, IEC61850_FC_MX, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1046,7 +903,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag_f = { NULL, 0, IEC61850_FC_MX, - FLOAT32, + IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1059,7 +916,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_q = { NULL, 0, IEC61850_FC_MX, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1072,7 +929,7 @@ DataAttribute iedModel_GenericIO_GGIO1_AnIn4_t = { NULL, 0, IEC61850_FC_MX, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1094,7 +951,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1107,7 +964,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1120,7 +977,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1133,7 +990,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1146,7 +1003,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1159,7 +1016,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1172,7 +1029,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1185,7 +1042,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1198,7 +1055,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1211,7 +1068,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1224,7 +1081,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1237,7 +1094,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1250,7 +1107,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1272,7 +1129,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1285,7 +1142,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1298,7 +1155,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1311,7 +1168,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1324,7 +1181,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1337,7 +1194,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1350,7 +1207,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1363,7 +1220,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1376,7 +1233,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1389,7 +1246,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1402,7 +1259,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1415,7 +1272,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1428,7 +1285,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1450,7 +1307,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1463,7 +1320,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1476,7 +1333,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1489,7 +1346,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1502,7 +1359,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1515,7 +1372,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1528,7 +1385,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1541,7 +1398,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1554,7 +1411,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1567,7 +1424,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1580,7 +1437,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1593,7 +1450,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1606,7 +1463,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1628,7 +1485,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1641,7 +1498,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1654,7 +1511,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1667,7 +1524,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1680,7 +1537,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin = { (ModelNode*) &iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat, 0, IEC61850_FC_CO, - CONSTRUCTED, + IEC61850_CONSTRUCTED, 0, NULL, 0}; @@ -1693,7 +1550,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat = { NULL, 0, IEC61850_FC_CO, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1706,7 +1563,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent = { NULL, 0, IEC61850_FC_CO, - OCTET_STRING_64, + IEC61850_OCTET_STRING_64, 0, NULL, 0}; @@ -1719,7 +1576,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlNum = { NULL, 0, IEC61850_FC_CO, - INT8U, + IEC61850_INT8U, 0, NULL, 0}; @@ -1732,7 +1589,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_T = { NULL, 0, IEC61850_FC_CO, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1745,7 +1602,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Test = { NULL, 0, IEC61850_FC_CO, - BOOLEAN, + IEC61850_BOOLEAN, 0, NULL, 0}; @@ -1758,7 +1615,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Check = { NULL, 0, IEC61850_FC_CO, - CHECK, + IEC61850_CHECK, 0, NULL, 0}; @@ -1771,7 +1628,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_ctlModel = { NULL, 0, IEC61850_FC_CF, - ENUMERATED, + IEC61850_ENUMERATED, 0, NULL, 0}; @@ -1784,7 +1641,7 @@ DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1806,7 +1663,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1819,7 +1676,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1832,7 +1689,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind1_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1854,7 +1711,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1867,7 +1724,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1880,7 +1737,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind2_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1902,7 +1759,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1915,7 +1772,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1928,7 +1785,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind3_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1950,7 +1807,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_stVal = { NULL, 0, IEC61850_FC_ST, - BOOLEAN, + IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, NULL, 0}; @@ -1963,7 +1820,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_q = { NULL, 0, IEC61850_FC_ST, - QUALITY, + IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; @@ -1976,7 +1833,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_t = { NULL, 0, IEC61850_FC_ST, - TIMESTAMP, + IEC61850_TIMESTAMP, 0, NULL, 0}; @@ -1986,10 +1843,11 @@ extern ReportControlBlock iedModel_GenericIO_LLN0_report1; extern ReportControlBlock iedModel_GenericIO_LLN0_report2; extern ReportControlBlock iedModel_GenericIO_LLN0_report3; -ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events1", false, "Events", 1, 8, 111, 50, 1000, &iedModel_GenericIO_LLN0_report1}; -ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "EventsIndexed01", "Events2", false, "Events", 1, 8, 111, 50, 1000, &iedModel_GenericIO_LLN0_report2}; -ReportControlBlock iedModel_GenericIO_LLN0_report2 = {&iedModel_GenericIO_LLN0, "EventsIndexed02", "Events2", false, "Events", 1, 8, 111, 50, 1000, &iedModel_GenericIO_LLN0_report3}; -ReportControlBlock iedModel_GenericIO_LLN0_report3 = {&iedModel_GenericIO_LLN0, "EventsIndexed03", "Events2", false, "Events", 1, 8, 111, 50, 1000, NULL}; +ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events1", false, "Events", 1, 24, 111, 50, 1000, &iedModel_GenericIO_LLN0_report1}; +ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "EventsIndexed01", "Events2", false, "Events", 1, 24, 111, 50, 1000, &iedModel_GenericIO_LLN0_report2}; +ReportControlBlock iedModel_GenericIO_LLN0_report2 = {&iedModel_GenericIO_LLN0, "EventsIndexed02", "Events2", false, "Events", 1, 24, 111, 50, 1000, &iedModel_GenericIO_LLN0_report3}; +ReportControlBlock iedModel_GenericIO_LLN0_report3 = {&iedModel_GenericIO_LLN0, "EventsIndexed03", "Events2", false, "Events", 1, 24, 111, 50, 1000, NULL}; + @@ -1997,10 +1855,11 @@ ReportControlBlock iedModel_GenericIO_LLN0_report3 = {&iedModel_GenericIO_LLN0, IedModel iedModel = { "simpleIO", &iedModel_GenericIO, - &ds_GenericIO_LLN0_Events, + &iedModelds_GenericIO_LLN0_Events, &iedModel_GenericIO_LLN0_report0, NULL, NULL, + NULL, initializeValues }; diff --git a/examples/sv_subscriber/CMakeLists.txt b/examples/sv_subscriber/CMakeLists.txt new file mode 100644 index 00000000..65071fbe --- /dev/null +++ b/examples/sv_subscriber/CMakeLists.txt @@ -0,0 +1,30 @@ + +set(sv_subscriber_example_SRCS + sv_subscriber_example.c +) + +IF(WIN32) + +set_source_files_properties(${sv_subscriber_example_SRCS} + PROPERTIES LANGUAGE CXX) +add_executable(sv_subscriber_example + ${sv_subscriber_example_SRCS} +) + +target_link_libraries(sv_subscriber_example + iec61850 +) + +ELSE(WIN32) + +add_executable(sv_subscriber_example + ${sv_subscriber_example_SRCS} +) + +target_link_libraries(sv_subscriber_example + iec61850 +) + +ENDIF(WIN32) + + diff --git a/examples/sv_subscriber/Makefile b/examples/sv_subscriber/Makefile new file mode 100644 index 00000000..cefcd7ac --- /dev/null +++ b/examples/sv_subscriber/Makefile @@ -0,0 +1,21 @@ +LIBIEC_HOME=../.. + +PROJECT_BINARY_NAME = sv_subscriber +PROJECT_SOURCES += sv_subscriber_example.c + +INCLUDES += -I. + +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 + +$(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/sv_subscriber/sv_subscriber_example.c b/examples/sv_subscriber/sv_subscriber_example.c new file mode 100644 index 00000000..d8046478 --- /dev/null +++ b/examples/sv_subscriber/sv_subscriber_example.c @@ -0,0 +1,88 @@ +/* + * sv_subscriber_example.c + * + * Example program for Sampled Values (SV) subscriber + * + */ + +#include "hal_thread.h" +#include +#include +#include "sv_subscriber.h" + + +static bool running = true; + +void sigint_handler(int signalId) +{ + running = 0; +} + + +/* Callback handler for received SV messages */ +static void +svUpdateListener (SVSubscriber subscriber, void* parameter, SVClientASDU asdu) +{ + printf("svUpdateListener called\n"); + + const char* svID = SVClientASDU_getSvId(asdu); + + if (svID != NULL) + printf(" svID=(%s)\n", svID); + + printf(" smpCnt: %i\n", SVClientASDU_getSmpCnt(asdu)); + printf(" confRev: %u\n", SVClientASDU_getConfRev(asdu)); + + /* + * Access to the data requires a priori knowledge of the data set. + * For this example we assume a data set consisting of FLOAT32 values. + * A FLOAT32 value is encoded as 4 bytes. You can find the first FLOAT32 + * value at byte position 0, the second value at byte position 4, the third + * value at byte position 8, and so on. + * + * To prevent damages due configuration, please check the length of the + * data block of the SV message before accessing the data. + */ + if (SVClientASDU_getDataSize(asdu) >= 8) { + printf(" DATA[0]: %f\n", SVClientASDU_getFLOAT32(asdu, 0)); + printf(" DATA[1]: %f\n", SVClientASDU_getFLOAT32(asdu, 4)); + } +} + +int +main(int argc, char** argv) +{ + SVReceiver receiver = SVReceiver_create(); + + if (argc > 1) { + SVReceiver_setInterfaceId(receiver, argv[1]); + printf("Set interface id: %s\n", argv[1]); + } + else { + printf("Using interface eth0\n"); + SVReceiver_setInterfaceId(receiver, "eth0"); + } + + /* Create a subscriber listening to SV messages with APPID 4000h */ + SVSubscriber subscriber = SVSubscriber_create(NULL, 0x4000); + + /* Install a callback handler for the subscriber */ + SVSubscriber_setListener(subscriber, svUpdateListener, NULL); + + /* Connect the subscriber to the receiver */ + SVReceiver_addSubscriber(receiver, subscriber); + + /* Start listening to SV messages - starts a new receiver background thread */ + SVReceiver_start(receiver); + + signal(SIGINT, sigint_handler); + + while (running) + Thread_sleep(1); + + /* Stop listening to SV messages */ + SVReceiver_stop(receiver); + + /* Cleanup and free resources */ + SVReceiver_destroy(receiver); +} diff --git a/examples/sv_subscriber/test_publisher/Makefile b/examples/sv_subscriber/test_publisher/Makefile new file mode 100644 index 00000000..56c20628 --- /dev/null +++ b/examples/sv_subscriber/test_publisher/Makefile @@ -0,0 +1,22 @@ +LIBIEC_HOME=../../../ + +PROJECT_BINARY_NAME = sv_test_publisher +PROJECT_SOURCES = sv_publisher.c +# PROJECT_SOURCES += remote_control.c + +INCLUDES += -I. + +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 + +$(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/sv_subscriber/test_publisher/sv_publisher.c b/examples/sv_subscriber/test_publisher/sv_publisher.c new file mode 100644 index 00000000..0fea09b2 --- /dev/null +++ b/examples/sv_subscriber/test_publisher/sv_publisher.c @@ -0,0 +1,571 @@ +/* + * sv_publisher.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 "stack_config.h" +#include "libiec61850_platform_includes.h" + +#include "hal_ethernet.h" + +#define DEBUG_SV_PUBLISHER 1 + +#define CONFIG_SV_DEFAULT_DST_ADDRESS CONFIG_GOOSE_DEFAULT_DST_ADDRESS + +#define CONFIG_SV_DEFAULT_PRIORITY 4 +#define CONFIG_SV_DEFAULT_VLAN_ID 0 +#define CONFIG_SV_DEFAULT_APPID 0x4000 + +#define SV_MAX_MESSAGE_SIZE 1518 + +#define IEC61850_SV_SMPSYNC_NOT_SYNCHRONIZED 0 +#define IEC61850_SV_SMPSYNC_SYNCED_UNSPEC_LOCAL_CLOCK 1 +#define IEC61850_SV_SMPSYNC_SYNCED_GLOBAL_CLOCK 2 + +#define IEC61850_SV_SMPMOD_PER_NOMINAL_PERIOD 0 +#define IEC61850_SV_SMPMOD_SAMPLES_PER_SECOND 1 +#define IEC61850_SV_SMPMOD_SECONDS_PER_SAMPLE 2 + +typedef struct sCommParameters { + uint8_t vlanPriority; + uint16_t vlanId; + uint16_t appId; + uint8_t dstAddress[6]; +} CommParameters; + +typedef struct sSV_ASDU* SV_ASDU; + +struct sSV_ASDU { + char* svID; + char* datset; + int dataSize; + + bool hasRefrTm; + bool hasSmpRate; + bool hasSmpMod; + + uint8_t* _dataBuffer; + + uint8_t smpSynch; + uint16_t smpCnt; + uint32_t confRev; + + uint8_t* smpCntBuf; + + SV_ASDU _next; +}; + +typedef struct sSampledValuesPublisher* SampledValuesPublisher; + +struct sSampledValuesPublisher { + uint8_t* buffer; + uint16_t appId; + EthernetSocket ethernetSocket; + + int lengthField; /* can probably be removed since packets have fixed size! */ + int payloadStart; + + int payloadLength; /* length of payload buffer */ + + int asduCount; /* number of ASDUs in the APDU */ + SV_ASDU asduLIst; + + +}; + + +static void +preparePacketBuffer(SampledValuesPublisher self, CommParameters* parameters, char* interfaceID) +{ + uint8_t srcAddr[6]; + + if (interfaceID != NULL) + Ethernet_getInterfaceMACAddress(interfaceID, srcAddr); + else + Ethernet_getInterfaceMACAddress(CONFIG_ETHERNET_INTERFACE_ID, srcAddr); + + uint8_t defaultDstAddr[] = CONFIG_SV_DEFAULT_DST_ADDRESS; + + uint8_t* dstAddr; + uint8_t priority; + uint16_t vlanId; + uint16_t appId; + + if (parameters == NULL) { + dstAddr = defaultDstAddr; + priority = CONFIG_SV_DEFAULT_PRIORITY; + vlanId = CONFIG_SV_DEFAULT_VLAN_ID; + appId = CONFIG_SV_DEFAULT_APPID; + } + else { + dstAddr = parameters->dstAddress; + priority = parameters->vlanPriority; + vlanId = parameters->vlanId; + appId = parameters->appId; + } + + if (interfaceID != NULL) + self->ethernetSocket = Ethernet_createSocket(interfaceID, dstAddr); + else + self->ethernetSocket = Ethernet_createSocket(CONFIG_ETHERNET_INTERFACE_ID, dstAddr); + + self->buffer = (uint8_t*) GLOBAL_MALLOC(SV_MAX_MESSAGE_SIZE); + + memcpy(self->buffer, dstAddr, 6); + memcpy(self->buffer + 6, srcAddr, 6); + + int bufPos = 12; + + /* Priority tag - IEEE 802.1Q */ + self->buffer[bufPos++] = 0x81; + self->buffer[bufPos++] = 0x00; + + uint8_t tci1 = priority << 5; + tci1 += vlanId / 256; + + uint8_t tci2 = vlanId % 256; + + self->buffer[bufPos++] = tci1; /* Priority + VLAN-ID */ + self->buffer[bufPos++] = tci2; /* VLAN-ID */ + + /* EtherType Sampled Values */ + self->buffer[bufPos++] = 0x88; + self->buffer[bufPos++] = 0xBa; + + /* APPID */ + self->buffer[bufPos++] = appId / 256; + self->buffer[bufPos++] = appId % 256; + + self->lengthField = bufPos; + + /* Length */ + self->buffer[bufPos++] = 0x00; + self->buffer[bufPos++] = 0x08; + + /* Reserved1 */ + self->buffer[bufPos++] = 0x00; + self->buffer[bufPos++] = 0x00; + + /* Reserved2 */ + self->buffer[bufPos++] = 0x00; + self->buffer[bufPos++] = 0x00; + + self->payloadStart = bufPos; +} + + +static int +encodeUInt16FixedSize(uint16_t value, uint8_t* buffer, int bufPos) +{ + uint8_t* valueArray = (uint8_t*) &value; + +#if (ORDER_LITTLE_ENDIAN == 1) + buffer[bufPos++] = valueArray[1]; + buffer[bufPos++] = valueArray[0]; +#else + buffer[bufPos++] = valueArray[0]; + buffer[bufPos++] = valueArray[1]; +#endif + + return bufPos; +} + +static int +encodeUInt32FixedSize(uint32_t value, uint8_t* buffer, int bufPos) +{ + uint8_t* valueArray = (uint8_t*) &value; + +#if (ORDER_LITTLE_ENDIAN == 1) + buffer[bufPos++] = valueArray[3]; + buffer[bufPos++] = valueArray[2]; + buffer[bufPos++] = valueArray[1]; + buffer[bufPos++] = valueArray[0]; +#else + buffer[bufPos++] = valueArray[0]; + buffer[bufPos++] = valueArray[1]; + buffer[bufPos++] = valueArray[2]; + buffer[bufPos++] = valueArray[3]; +#endif + + return bufPos; +} + + +SampledValuesPublisher +SampledValuesPublisher_create() +{ + SampledValuesPublisher self = GLOBAL_CALLOC(1, sizeof(struct sSampledValuesPublisher)); + + self->asduLIst = NULL; + + preparePacketBuffer(self, NULL, "eth0"); + + return self; +} + +SV_ASDU +SampledValuesPublisher_addASDU(SampledValuesPublisher self, char* svID, char* datset, uint32_t confRev) +{ + SV_ASDU newAsdu = GLOBAL_CALLOC(1, sizeof(struct sSV_ASDU)); + + newAsdu->svID = svID; + newAsdu->datset = datset; + newAsdu->confRev = confRev; + + newAsdu->_next = NULL; + + /* append new ASDU to list */ + if (self->asduLIst == NULL) + self->asduLIst = newAsdu; + else { + SV_ASDU lastAsdu = self->asduLIst; + + while (lastAsdu->_next != NULL) + lastAsdu = lastAsdu->_next; + + lastAsdu->_next = newAsdu; + } + + return newAsdu; +} + +static int +SV_ASDU_getEncodedSize(SV_ASDU self) +{ + int encodedSize = 0; + + /* svID */ + encodedSize += ( 2 + strlen(self->svID) ); + + /* datset */ + if (self->datset != NULL) + encodedSize += ( 2 + strlen(self->datset) ); + + /* smpCnt */ + encodedSize += 4; + + /* confRef */ + encodedSize += 6; + + /* refrTm */ + if (self->hasRefrTm) + encodedSize += 10; /* ??? */ + + /* smpSynch */ + encodedSize += 3; + + /* smpRate */ + if (self->hasSmpRate) + encodedSize += 4; + + /* sample */ + encodedSize += 2; + encodedSize += self->dataSize; + + /* smpMod */ + if (self->hasSmpMod) + encodedSize += 4; + + return encodedSize; +} + +static int +SV_ASDU_encodeToBuffer(SV_ASDU self, uint8_t* buffer, int bufPos) +{ + int encodedSize = SV_ASDU_getEncodedSize(self); + + /* tag and length field */ + bufPos = BerEncoder_encodeTL(0x30, encodedSize, buffer, bufPos); + + /* svID */ + bufPos = BerEncoder_encodeStringWithTag(0x80, self->svID, buffer, bufPos); + + /* DatSet */ + if (self->datset != NULL) + bufPos = BerEncoder_encodeStringWithTag(0x81, self->datset, buffer, bufPos); + + uint8_t octetString[4]; + + /* SmpCnt */ + bufPos = BerEncoder_encodeTL(0x82, 2, buffer, bufPos); + self->smpCntBuf = buffer + bufPos; + bufPos = encodeUInt16FixedSize(self->smpCnt, buffer, bufPos); + + /* ConfRev */ + bufPos = BerEncoder_encodeTL(0x83, 4, buffer, bufPos); + bufPos = encodeUInt32FixedSize(self->confRev, buffer, bufPos); + + /* RefrTm */ + //TODO implement me + + /* SmpSynch */ + bufPos = BerEncoder_encodeTL(0x85, 1, buffer, bufPos); + buffer[bufPos++] = self->smpSynch; + + /* SmpRate */ + //TODO implement me + + /* Sample */ + bufPos = BerEncoder_encodeTL(0x87, self->dataSize, buffer, bufPos); + + self->_dataBuffer = buffer + bufPos; + + bufPos += self->dataSize; /* data has to inserted by user before sending message */ + + /* SmpMod */ + //TODO implement me + + return bufPos; +} + +void +SampledValuesPublisher_setupComplete(SampledValuesPublisher self) +{ + int numberOfAsdu = 0; + + /* determine number of ASDUs and length of all ASDUs */ + SV_ASDU nextAsdu = self->asduLIst; + int totalASDULength = 0; + + while (nextAsdu != NULL) { + numberOfAsdu++; + int asduLength = SV_ASDU_getEncodedSize(nextAsdu); + + /* tag and length field */ + asduLength += BerEncoder_determineLengthSize(asduLength); + asduLength++; + + totalASDULength += asduLength; + + nextAsdu = nextAsdu->_next; + } + + /* encode frame to buffer */ + int sequenceSize = 1 + BerEncoder_determineLengthSize(totalASDULength) + totalASDULength; + + int innerSize = 2 + BerEncoder_UInt32determineEncodedSize(numberOfAsdu) + sequenceSize; + + uint8_t* buffer = self->buffer + self->payloadStart; + + int bufPos = BerEncoder_encodeTL(0x60, innerSize, buffer, 0); + + /* noASDU */ + bufPos = BerEncoder_encodeUInt32WithTL(0x80, numberOfAsdu, buffer, bufPos); + + /* seqASDU */ + bufPos = BerEncoder_encodeTL(0xa2, totalASDULength, buffer, bufPos); + + nextAsdu = self->asduLIst; + + while (nextAsdu != NULL) { + bufPos = SV_ASDU_encodeToBuffer(nextAsdu, buffer, bufPos); + + nextAsdu = nextAsdu->_next; + } + + /* Update length field */ + int payloadLength = bufPos; + + size_t msgLength = payloadLength + 8; + + int lengthIndex = self->lengthField; + + self->buffer[lengthIndex] = msgLength / 256; + self->buffer[lengthIndex + 1] = msgLength & 0xff; + + self->payloadLength = payloadLength; + +} + + +void +SampledValuesPublisher_publish(SampledValuesPublisher self) +{ + if (DEBUG_SV_PUBLISHER) + printf("SV_PUBLISHER: send SV message\n"); + + Ethernet_sendPacket(self->ethernetSocket, self->buffer, self->payloadStart + self->payloadLength); + +} + + +void +SampledValuesPublisher_destroy(SampledValuesPublisher self) +{ + GLOBAL_FREEMEM(self->buffer); +} + + +void +SV_ASDU_resetBuffer(SV_ASDU self) +{ + self->dataSize = 0; +} + + +int +SV_ASDU_addINT8(SV_ASDU self) +{ + int index = self->dataSize; + + self->dataSize += 1; + + return index; +} + +void +SV_ASDU_setINT8(SV_ASDU self, int index, int8_t value) +{ + self->_dataBuffer[index] = value; +} + +int +SV_ASDU_addINT32(SV_ASDU self) +{ + int index = self->dataSize; + + self->dataSize += 4; + + return index; +} + +int +SV_ASDU_addFLOAT(SV_ASDU self) +{ + int index = self->dataSize; + + self->dataSize += 4; + + return index; +} + +void +SV_ASDU_setFLOAT(SV_ASDU self, int index, float value) +{ + uint8_t* buf = (uint8_t*) &value; + + +#if (ORDER_LITTLE_ENDIAN == 1) + BerEncoder_revertByteOrder(buf, 4); +#endif + + int i; + + uint8_t* buffer = self->_dataBuffer + index; + + for (i = 0; i < 4; i++) { + buffer[i] = buf[i]; + } +} + + +void +SV_ASDU_setSmpCnt(SV_ASDU self, uint16_t value) +{ + //TODO write value to correct field in buffer +} + +void +SV_ASDU_increaseSmpCnt(SV_ASDU self) +{ + self->smpCnt++; + + encodeUInt16FixedSize(self->smpCnt, self->smpCntBuf, 0); +} + +#if 0 +void +SV_ASDU_setRefrTm(SV_ASDU self, Timestamp refrTm) +{ +} +#endif + + +int +main(int argc, char** argv) +{ + SampledValuesPublisher svPublisher = SampledValuesPublisher_create(); + + SV_ASDU asdu1 = SampledValuesPublisher_addASDU(svPublisher, "svpub1", NULL, 1); + + int float1 = SV_ASDU_addFLOAT(asdu1); + int float2 = SV_ASDU_addFLOAT(asdu1); + + SV_ASDU asdu2 = SampledValuesPublisher_addASDU(svPublisher, "svpub2", NULL, 1); + + int float3 = SV_ASDU_addFLOAT(asdu2); + int float4 = SV_ASDU_addFLOAT(asdu2); + + SampledValuesPublisher_setupComplete(svPublisher); + + float fVal1 = 1234.5678f; + float fVal2 = 0.12345f; + + int i; + + for (i = 0; i < 10; i++) { + SV_ASDU_setFLOAT(asdu1, float1, fVal1); + SV_ASDU_setFLOAT(asdu1, float2, fVal2); + + SV_ASDU_increaseSmpCnt(asdu1); + SV_ASDU_increaseSmpCnt(asdu2); + + fVal1 += 1.1f; + fVal2 += 0.1f; + + SampledValuesPublisher_publish(svPublisher); + } + + SampledValuesPublisher_destroy(svPublisher); +} + +int +main1(int argc, char** argv) +{ + SampledValuesPublisher svPublisher = SampledValuesPublisher_create(); + + SV_ASDU asdu = SampledValuesPublisher_addASDU(svPublisher, "svpub1", NULL, 1); + + int float1 = SV_ASDU_addFLOAT(asdu); + int float2 = SV_ASDU_addFLOAT(asdu); + + SampledValuesPublisher_setupComplete(svPublisher); + + + float fVal1 = 1234.5678f; + float fVal2 = 0.12345f; + + int i; + + for (i = 0; i < 10; i++) { + SV_ASDU_setFLOAT(asdu, float1, fVal1); + SV_ASDU_setFLOAT(asdu, float2, fVal2); + SV_ASDU_increaseSmpCnt(asdu); + + fVal1 += 1.1f; + fVal2 += 0.1f; + + SampledValuesPublisher_publish(svPublisher); + } + + SampledValuesPublisher_destroy(svPublisher); +} + diff --git a/make/stack_includes.mk b/make/stack_includes.mk index 28e1291c..3ddcc443 100644 --- a/make/stack_includes.mk +++ b/make/stack_includes.mk @@ -7,3 +7,4 @@ INCLUDES += -I$(LIBIEC_HOME)/src/iec61850/inc INCLUDES += -I$(LIBIEC_HOME)/src/iec61850/inc_private INCLUDES += -I$(LIBIEC_HOME)/src/hal/inc INCLUDES += -I$(LIBIEC_HOME)/src/goose +INCLUDES += -I$(LIBIEC_HOME)/src/sampled_values diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 46dbfae8..8d835346 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -58,6 +58,7 @@ set (lib_common_SRCS ./iec61850/client/client_control.c ./iec61850/client/client_report_control.c ./iec61850/client/client_goose_control.c +./iec61850/client/client_sv_control.c ./iec61850/client/client_report.c ./iec61850/client/ied_connection.c ./iec61850/common/iec61850_common.c @@ -71,7 +72,7 @@ set (lib_common_SRCS ./iec61850/server/mms_mapping/mms_mapping.c ./iec61850/server/mms_mapping/reporting.c ./iec61850/server/mms_mapping/mms_goose.c - +./iec61850/server/mms_mapping/mms_sv.c ) set (lib_asn1c_SRCS @@ -173,6 +174,10 @@ set (lib_goose_SRCS ./goose/goose_publisher.c ) +set (lib_sv_SRCS +./sampled_values/sv_subscriber.c +) + set (lib_linux_SRCS ./hal/socket/linux/socket_linux.c ./hal/ethernet/linux/ethernet_linux.c @@ -213,6 +218,8 @@ set_source_files_properties(${lib_common_SRCS} ${lib_windows_SRCS} IF(WITH_WPCAP) set_source_files_properties(${lib_goose_SRCS} PROPERTIES LANGUAGE CXX) +set_source_files_properties(${lib_sv_SRCS} + PROPERTIES LANGUAGE CXX) ELSE() add_definitions(-DEXCLUDE_ETHERNET_WINDOWS) ENDIF() @@ -225,16 +232,17 @@ include_directories( IF(WITH_WPCAP) set (library_SRCS - ${lib_common_SRCS} - ${lib_asn1c_SRCS} - ${lib_goose_SRCS} + ${lib_common_SRCS} + ${lib_asn1c_SRCS} + ${lib_goose_SRCS} + ${lib_sv_SRCS} ${lib_windows_SRCS} ) ELSE() set (library_SRCS - ${lib_common_SRCS} - ${lib_asn1c_SRCS} + ${lib_common_SRCS} + ${lib_asn1c_SRCS} ${lib_windows_SRCS} ) @@ -243,23 +251,26 @@ ENDIF(WITH_WPCAP) ELSEIF(UNIX) IF(APPLE) set (library_SRCS - ${lib_common_SRCS} - ${lib_asn1c_SRCS} - ${lib_goose_SRCS} + ${lib_common_SRCS} + ${lib_asn1c_SRCS} + ${lib_goose_SRCS} + ${lib_sv_SRCS} ${lib_bsd_SRCS} ) ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") set (library_SRCS - ${lib_common_SRCS} - ${lib_asn1c_SRCS} - ${lib_goose_SRCS} + ${lib_common_SRCS} + ${lib_asn1c_SRCS} + ${lib_goose_SRCS} + ${lib_sv_SRCS} ${lib_bsd_SRCS} ) ELSE() set (library_SRCS - ${lib_common_SRCS} - ${lib_asn1c_SRCS} - ${lib_goose_SRCS} + ${lib_common_SRCS} + ${lib_asn1c_SRCS} + ${lib_goose_SRCS} + ${lib_sv_SRCS} ${lib_linux_SRCS} ) ENDIF(APPLE) diff --git a/src/common/inc/libiec61850_platform_includes.h b/src/common/inc/libiec61850_platform_includes.h index 9a9f9097..f4de6b94 100644 --- a/src/common/inc/libiec61850_platform_includes.h +++ b/src/common/inc/libiec61850_platform_includes.h @@ -15,7 +15,7 @@ #include "platform_endian.h" -#define LIBIEC61850_VERSION "0.8.7" +#define LIBIEC61850_VERSION "0.9.0" #ifndef CONFIG_DEFAULT_MMS_VENDOR_NAME #define CONFIG_DEFAULT_MMS_VENDOR_NAME "libiec61850.com" @@ -29,6 +29,10 @@ #define CONFIG_DEFAULT_MMS_REVISION LIBIEC61850_VERSION #endif +#ifndef CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT +#define CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT 0 +#endif + #if (DEBUG != 1) #define NDEBUG 1 #endif diff --git a/src/doxygen.config b/src/doxygen.config index f6275955..c9c1c332 100644 --- a/src/doxygen.config +++ b/src/doxygen.config @@ -18,7 +18,7 @@ DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "libIEC61850" -PROJECT_NUMBER = 0.8.7 +PROJECT_NUMBER = 0.9.0 PROJECT_BRIEF = "Open-source IEC 61850 MMS/GOOSE server and client library" @@ -219,6 +219,7 @@ INPUT += "iec61850/inc/iec61850_config_file_parser.h" INPUT += "iec61850/inc/iec61850_cdc.h" INPUT += "goose/goose_subscriber.h" INPUT += "goose/goose_receiver.h" +INPUT += "sampled_values/sv_subscriber.h" INPUT += "mms/inc/mms_device_model.h" INPUT += "mms/inc/mms_types.h" INPUT += "mms/inc/mms_common.h" diff --git a/src/goose/goose_subscriber.c b/src/goose/goose_subscriber.c index f1d1e8ea..2bc01782 100644 --- a/src/goose/goose_subscriber.c +++ b/src/goose/goose_subscriber.c @@ -109,6 +109,12 @@ GooseSubscriber_isTest(GooseSubscriber self) return self->simulation; } +uint32_t +GooseSubscriber_getConfRev(GooseSubscriber self) +{ + return self->confRev; +} + bool GooseSubscriber_needsCommission(GooseSubscriber self) { diff --git a/src/goose/goose_subscriber.h b/src/goose/goose_subscriber.h index db35050c..d575355e 100644 --- a/src/goose/goose_subscriber.h +++ b/src/goose/goose_subscriber.h @@ -125,6 +125,17 @@ GooseSubscriber_getSqNum(GooseSubscriber self); bool GooseSubscriber_isTest(GooseSubscriber self); +/** + * \brief returns the confRev value of the last received GOOSE message + * + * \param self GooseSubscriber instance to operate on. + * + * \return the confRev value of the last received GOOSE message. If the message does not contain such + * a value the result is always 0 + */ +uint32_t +GooseSubscriber_getConfRev(GooseSubscriber self); + bool GooseSubscriber_needsCommission(GooseSubscriber self); diff --git a/src/hal/ethernet/win32/ethernet_win32.c b/src/hal/ethernet/win32/ethernet_win32.c index 432c36cf..2770df81 100644 --- a/src/hal/ethernet/win32/ethernet_win32.c +++ b/src/hal/ethernet/win32/ethernet_win32.c @@ -29,6 +29,10 @@ #include "libiec61850_platform_includes.h" +#ifndef DEBUG_HAL_ETHERNET +#define DEBUG_HAL_ETHERNET 1 +#endif + #if (CONFIG_INCLUDE_ETHERNET_WINDOWS == 1) @@ -92,26 +96,25 @@ static bool dllLoaded = false; static void loadDLLs(void) { - HINSTANCE hDll = LoadLibrary("iphlpapi.dll"); - - if (hDll == NULL) { - printf("Error loading iphlpapi.dll!\n"); - return; - } + HINSTANCE hDll = LoadLibrary("iphlpapi.dll"); + if (hDll == NULL) { + if (DEBUG_HAL_ETHERNET) + printf("Error loading iphlpapi.dll!\n"); + return; + } - GetAdaptersAddresses = (pgetadaptersaddresses) GetProcAddress(hDll, - "GetAdaptersAddresses"); + GetAdaptersAddresses = (pgetadaptersaddresses) GetProcAddress(hDll, + "GetAdaptersAddresses"); - if (GetAdaptersAddresses == NULL) - printf("Error loading GetAdaptersAddresses from iphlpapi.dll (%d)\n", (int) GetLastError()); + if (GetAdaptersAddresses == NULL) + printf("Error loading GetAdaptersAddresses from iphlpapi.dll (%d)\n", (int) GetLastError()); } #endif /* __MINGW64_VERSION_MAJOR */ #endif /* __GNUC__ */ - static char* getInterfaceName(int interfaceIndex) { @@ -137,6 +140,7 @@ getInterfaceName(int interfaceIndex) if (i == interfaceIndex) { interfaceName = (char*) malloc(strlen(device->name) + 1); strcpy(interfaceName, device->name); + if (DEBUG_HAL_ETHERNET) printf("Use interface (%s)\n", interfaceName); ifaceFound = true; break; @@ -147,6 +151,7 @@ getInterfaceName(int interfaceIndex) if (!ifaceFound) { + if (DEBUG_HAL_ETHERNET) printf("No ethernet interfaces found! Make sure WinPcap is installed.\n"); return NULL; } @@ -159,52 +164,55 @@ getInterfaceName(int interfaceIndex) static void getAdapterMacAddress(char* pcapAdapterName, uint8_t* macAddress) { - PIP_ADAPTER_ADDRESSES pAddresses = NULL; - ULONG outBufLen = 0; + PIP_ADAPTER_ADDRESSES pAddresses = NULL; + ULONG outBufLen = 0; - pAddresses = (IP_ADAPTER_ADDRESSES*) malloc(65000); + pAddresses = (IP_ADAPTER_ADDRESSES*) malloc(65000); - if (GetAdaptersAddresses(AF_UNSPEC, 0, NULL, pAddresses, &outBufLen) == ERROR_BUFFER_OVERFLOW) { - free(pAddresses); - pAddresses = (IP_ADAPTER_ADDRESSES*) malloc(outBufLen); - } + if (GetAdaptersAddresses(AF_UNSPEC, 0, NULL, pAddresses, &outBufLen) == ERROR_BUFFER_OVERFLOW) { + free(pAddresses); + pAddresses = (IP_ADAPTER_ADDRESSES*) malloc(outBufLen); + } - if (GetAdaptersAddresses(AF_UNSPEC, 0, NULL, pAddresses, &outBufLen) == NO_ERROR) { - PIP_ADAPTER_ADDRESSES pAddress = pAddresses; + if (GetAdaptersAddresses(AF_UNSPEC, 0, NULL, pAddresses, &outBufLen) == NO_ERROR) { + PIP_ADAPTER_ADDRESSES pAddress = pAddresses; - while (pAddress != NULL) { + while (pAddress != NULL) { - DWORD addressLength = pAddress->PhysicalAddressLength; + DWORD addressLength = pAddress->PhysicalAddressLength; - if (addressLength == 6) { + if (addressLength == 6) { - int i; + int i; - printf("Adapter %s: ", pAddress->AdapterName); + if (DEBUG_HAL_ETHERNET) { + printf("Adapter %s: ", pAddress->AdapterName); - for (i = 0; i < (int) addressLength; i++) { - printf("%02x ", pAddress->PhysicalAddress[i]); - } + for (i = 0; i < (int) addressLength; i++) { + printf("%02x ", pAddress->PhysicalAddress[i]); + } + } - if (strstr(pcapAdapterName, pAddress->AdapterName) != 0) { - printf(" requested found!"); + if (strstr(pcapAdapterName, pAddress->AdapterName) != 0) { + if (DEBUG_HAL_ETHERNET) + printf(" requested found!"); - for (i = 0; i < (int) addressLength; i++) { - macAddress[i] = pAddress->PhysicalAddress[i]; - } - } + for (i = 0; i < (int) addressLength; i++) { + macAddress[i] = pAddress->PhysicalAddress[i]; + } + } - printf("\n"); - } + printf("\n"); + } - pAddress = pAddress->Next; - } + pAddress = pAddress->Next; + } - free(pAddresses); - } - else { - printf("Error getting device addresses!\n"); - } + free(pAddresses); + } + else { + printf("Error getting device addresses!\n"); + } } @@ -215,8 +223,8 @@ Ethernet_getInterfaceMACAddress(const char* interfaceId, uint8_t* addr) #ifdef __GNUC__ #ifndef __MINGW64_VERSION_MAJOR if (!dllLoaded) { - loadDLLs(); - dllLoaded = true; + loadDLLs(); + dllLoaded = true; } #endif #endif @@ -226,13 +234,13 @@ Ethernet_getInterfaceMACAddress(const char* interfaceId, uint8_t* addr) long interfaceIndex = strtol(interfaceId, &endPtr, 10); if (endPtr != NULL) { - printf("Ethernet_getInterfaceMACAddress: invalid interface number %s\n", interfaceId); - return; + printf("Ethernet_getInterfaceMACAddress: invalid interface number %s\n", interfaceId); + return; } char* interfaceName = getInterfaceName((int) interfaceIndex); - getAdapterMacAddress(interfaceName, addr); + getAdapterMacAddress(interfaceName, addr); } @@ -276,44 +284,44 @@ Ethernet_sendPacket(EthernetSocket ethSocket, uint8_t* buffer, int packetSize) void Ethernet_setProtocolFilter(EthernetSocket ethSocket, uint16_t etherType) { - char filterString[100]; + char filterString[100]; - sprintf(filterString, "(ether proto 0x%04x) or (vlan and ether proto 0x%04x)", etherType, etherType); + sprintf(filterString, "(ether proto 0x%04x) or (vlan and ether proto 0x%04x)", etherType, etherType); - if (pcap_compile(ethSocket->rawSocket, &(ethSocket->etherTypeFilter), filterString, 1, 0) < 0) { - printf("Compiling packet filter failed!\n"); - return; - } + if (pcap_compile(ethSocket->rawSocket, &(ethSocket->etherTypeFilter), filterString, 1, 0) < 0) { + printf("Compiling packet filter failed!\n"); + return; + } - if (pcap_setfilter(ethSocket->rawSocket, &(ethSocket->etherTypeFilter)) < 0) { - printf("Setting packet filter failed!\n"); - } + if (pcap_setfilter(ethSocket->rawSocket, &(ethSocket->etherTypeFilter)) < 0) { + printf("Setting packet filter failed!\n"); + } } int Ethernet_receivePacket(EthernetSocket self, uint8_t* buffer, int bufferSize) { - struct pcap_pkthdr* header; - uint8_t* packetData; + struct pcap_pkthdr* header; + uint8_t* packetData; - int pcapCode = pcap_next_ex(self->rawSocket, &header, (const unsigned char**) &packetData); + int pcapCode = pcap_next_ex(self->rawSocket, &header, (const unsigned char**) &packetData); - if (pcapCode > 0) { - int packetSize = header->caplen; + if (pcapCode > 0) { + int packetSize = header->caplen; - if (packetSize > bufferSize) - packetSize = bufferSize; + if (packetSize > bufferSize) + packetSize = bufferSize; - memcpy(buffer, packetData, packetSize); + memcpy(buffer, packetData, packetSize); - return packetSize; - } - else { - if (pcapCode < 0) - printf("winpcap error\n"); + return packetSize; + } + else { + if (pcapCode < 0) + printf("winpcap error\n"); - return 0; - } + return 0; + } } bool diff --git a/src/hal/socket/linux/socket_linux.c b/src/hal/socket/linux/socket_linux.c index fc01f75d..b00423dd 100644 --- a/src/hal/socket/linux/socket_linux.c +++ b/src/hal/socket/linux/socket_linux.c @@ -316,7 +316,7 @@ Socket_connect(Socket self, const char* address, int port) activateTcpNoDelay(self); -#if CONFIG_ACTIVATE_TCP_KEEPALIVE == 1 +#if (CONFIG_ACTIVATE_TCP_KEEPALIVE == 1) activateKeepAlive(self->fd); #endif diff --git a/src/iec61850/client/client_report.c b/src/iec61850/client/client_report.c index f930c4cd..20cc3c1b 100644 --- a/src/iec61850/client/client_report.c +++ b/src/iec61850/client/client_report.c @@ -397,11 +397,15 @@ private_IedConnection_handleReport(IedConnection self, MmsValue* value) /* has report-timestamp */ if (MmsValue_getBitStringBit(optFlds, 2) == true) { + MmsValue* timeStampValue = MmsValue_getElement(value, inclusionIndex); if (MmsValue_getType(timeStampValue) == MMS_BINARY_TIME) { matchingReport->hasTimestamp = true; matchingReport->timestamp = MmsValue_getBinaryTimeAsUtcMs(timeStampValue); + + if (DEBUG_IED_CLIENT) + printf("DEBUG_IED_CLIENT: report has timestamp %llu\n", matchingReport->timestamp); } inclusionIndex++; diff --git a/src/iec61850/client/client_report_control.c b/src/iec61850/client/client_report_control.c index 3d01defe..b0b4a187 100644 --- a/src/iec61850/client/client_report_control.c +++ b/src/iec61850/client/client_report_control.c @@ -637,7 +637,7 @@ IedConnection_setRCBValues(IedConnection self, IedClientError* error, ClientRepo MmsValue* dataAccessError = (MmsValue*) accessResult->data; if (MmsValue_getDataAccessError(dataAccessError) != DATA_ACCESS_ERROR_SUCCESS) { - *error = IED_ERROR_UNKNOWN; + *error = iedConnection_mapDataAccessErrorToIedError(MmsValue_getDataAccessError(dataAccessError)); break; } diff --git a/src/iec61850/client/client_sv_control.c b/src/iec61850/client/client_sv_control.c new file mode 100644 index 00000000..966ea638 --- /dev/null +++ b/src/iec61850/client/client_sv_control.c @@ -0,0 +1,358 @@ +/* + * client_sv_control.c + * + * Copyright 2015 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_client.h" + +#include "stack_config.h" + +#include "ied_connection_private.h" + +#include "libiec61850_platform_includes.h" + +struct sClientSVControlBlock { + IedConnection connection; + bool isMulticast; + char* reference; + IedClientError lastError; +}; + +ClientSVControlBlock +ClientSVControlBlock_create(IedConnection connection, const char* reference) +{ + bool isMulticast = false; + + /* Check if CB exists and if it is a unicast or mulitcast CB */ + IedClientError error; + MmsValue* value = IedConnection_readObject(connection, &error, reference, IEC61850_FC_MS); + + if (value != NULL) { + isMulticast = true; + MmsValue_delete(value); + } + else { + value = IedConnection_readObject(connection, &error, reference, IEC61850_FC_US); + + if (value == NULL) + return NULL; + + MmsValue_delete(value); + } + + ClientSVControlBlock self = (ClientSVControlBlock) GLOBAL_CALLOC(1, sizeof(struct sClientSVControlBlock)); + + if (self) { + self->connection = connection; + self->reference = copyString(reference); + self->isMulticast = isMulticast; + } + + return self; +} + +void +ClientSVControlBlock_destroy(ClientSVControlBlock self) +{ + if (self) { + GLOBAL_FREEMEM(self->reference); + GLOBAL_FREEMEM(self); + } +} + + +IedClientError +ClientSVControlBlock_getLastComError(ClientSVControlBlock self) +{ + return self->lastError; +} + +bool +ClientSVControlBlock_isMulticast(ClientSVControlBlock self) +{ + return self->isMulticast; +} + +static bool +setBooleanVariable(ClientSVControlBlock self, const char* varName, bool value) +{ + char refBuf[130]; + + strcpy(refBuf, self->reference); + strcat(refBuf, "."); + strcat(refBuf, varName); + + self->lastError = IED_ERROR_OK; + + if (self->isMulticast) + IedConnection_writeBooleanValue(self->connection, &(self->lastError), refBuf, IEC61850_FC_MS, value); + else + IedConnection_writeBooleanValue(self->connection, &(self->lastError), refBuf, IEC61850_FC_US, value); + + + if (self->lastError == IED_ERROR_OK) + return true; + else + return false; +} + +bool +ClientSVControlBlock_setSvEna(ClientSVControlBlock self, bool svEna) +{ + return setBooleanVariable(self, "SvEna", svEna); +} + +bool +ClientSVControlBlock_setResv(ClientSVControlBlock self, bool svEna) +{ + if (self->isMulticast == false) + return setBooleanVariable(self, "SvEna", svEna); + else + return false; +} + +static bool +readBooleanVariable(ClientSVControlBlock self, const char* varName) +{ + char refBuf[130]; + + strcpy(refBuf, self->reference); + strcat(refBuf, "."); + strcat(refBuf, varName); + + self->lastError = IED_ERROR_OK; + + bool retVal; + + if (self->isMulticast) + retVal = IedConnection_readBooleanValue(self->connection, &(self->lastError), refBuf, IEC61850_FC_MS); + else + retVal = IedConnection_readBooleanValue(self->connection, &(self->lastError), refBuf, IEC61850_FC_US); + + return retVal; +} + +bool +ClientSVControlBlock_getSvEna(ClientSVControlBlock self) +{ + return readBooleanVariable(self, "SvEna"); +} + +bool +ClientSVControlBlock_getResv(ClientSVControlBlock self) +{ + return readBooleanVariable(self, "Resv"); +} + +static char* +readStringVariable(ClientSVControlBlock self, const char* varName) +{ + char refBuf[130]; + + strcpy(refBuf, self->reference); + strcat(refBuf, "."); + strcat(refBuf, varName); + + self->lastError = IED_ERROR_OK; + + char* retVal; + + if (self->isMulticast) + retVal = IedConnection_readStringValue(self->connection, &(self->lastError), refBuf, IEC61850_FC_MS); + else + retVal = IedConnection_readStringValue(self->connection, &(self->lastError), refBuf, IEC61850_FC_US); + + return retVal; +} + +char* +ClientSVControlBlock_getMsvID(ClientSVControlBlock self) +{ + return readStringVariable(self, "MsvID"); +} + +char* +ClientSVControlBlock_getDatSet(ClientSVControlBlock self) +{ + return readStringVariable(self, "DatSet"); +} + +static uint32_t +readUIntVariable(ClientSVControlBlock self, const char* varName) +{ + char refBuf[130]; + + strcpy(refBuf, self->reference); + strcat(refBuf, "."); + strcat(refBuf, varName); + + self->lastError = IED_ERROR_OK; + + uint32_t retVal; + + if (self->isMulticast) + retVal = IedConnection_readUnsigned32Value(self->connection, &(self->lastError), refBuf, IEC61850_FC_MS); + else + retVal = IedConnection_readUnsigned32Value(self->connection, &(self->lastError), refBuf, IEC61850_FC_US); + + return retVal; +} + +uint32_t +ClientSVControlBlock_getConfRev(ClientSVControlBlock self) +{ + return readUIntVariable(self, "ConfRev"); +} + +uint16_t +ClientSVControlBlock_getSmpRate(ClientSVControlBlock self) +{ + return readUIntVariable(self, "SmpRate"); +} + +int +ClientSVControlBlock_getOptFlds(ClientSVControlBlock self) +{ + char refBuf[130]; + + strcpy(refBuf, self->reference); + strcat(refBuf, "."); + strcat(refBuf, "OptFlds"); + + self->lastError = IED_ERROR_OK; + + MmsValue* optFlds; + + if (self->isMulticast) + optFlds = IedConnection_readObject(self->connection, &(self->lastError), refBuf, IEC61850_FC_MS); + else + optFlds = IedConnection_readObject(self->connection, &(self->lastError), refBuf, IEC61850_FC_US); + + if (optFlds == NULL) + return 0; + + int retVal = 0; + + if (MmsValue_getType(optFlds) == MMS_BIT_STRING) + retVal = MmsValue_getBitStringAsInteger(optFlds); + + MmsValue_delete(optFlds); + + return retVal; +} + +uint8_t +ClientSVControlBlock_getSmpMod(ClientSVControlBlock self) +{ + return readUIntVariable(self, "SmpMod"); +} + +int +ClientSVControlBlock_getNoASDU(ClientSVControlBlock self) +{ + return readUIntVariable(self, "noASDU"); +} + +PhyComAddress +ClientSVControlBlock_getDstAddress(ClientSVControlBlock self) +{ + char refBuf[130]; + + strcpy(refBuf, self->reference); + strcat(refBuf, "."); + strcat(refBuf, "DstAddress"); + + self->lastError = IED_ERROR_OK; + + MmsValue* dstAddrValue; + + if (self->isMulticast) + dstAddrValue = IedConnection_readObject(self->connection, &(self->lastError), refBuf, IEC61850_FC_MS); + else + dstAddrValue = IedConnection_readObject(self->connection, &(self->lastError), refBuf, IEC61850_FC_US); + + PhyComAddress retVal; + memset(&retVal, 0, sizeof(retVal)); + + if (dstAddrValue == NULL) goto exit_error; + + if (MmsValue_getType(dstAddrValue) != MMS_STRUCTURE) { + if (DEBUG_IED_CLIENT) printf("IED_CLIENT: SVCB - addr has wrong type\n"); + goto exit_cleanup; + } + + if (MmsValue_getArraySize(dstAddrValue) != 4) { + if (DEBUG_IED_CLIENT) printf("IED_CLIENT: SVCB - addr has wrong type\n"); + goto exit_cleanup; + } + + MmsValue* addr = MmsValue_getElement(dstAddrValue, 0); + + if (MmsValue_getType(addr) != MMS_OCTET_STRING) { + if (DEBUG_IED_CLIENT) printf("IED_CLIENT: SVCB - addr has wrong type\n"); + goto exit_cleanup; + } + + if (MmsValue_getOctetStringSize(addr) != 6) { + if (DEBUG_IED_CLIENT) printf("IED_CLIENT: SVCB - addr has wrong size\n"); + goto exit_cleanup; + } + + uint8_t* addrBuf = MmsValue_getOctetStringBuffer(addr); + + memcpy(&(retVal.dstAddress), addrBuf, 6); + + MmsValue* prio = MmsValue_getElement(dstAddrValue, 1); + + if (MmsValue_getType(prio) != MMS_UNSIGNED) { + if (DEBUG_IED_CLIENT) printf("IED_CLIENT: SVCB - prio has wrong type\n"); + goto exit_cleanup; + } + + retVal.vlanPriority = MmsValue_toUint32(prio); + + MmsValue* vid = MmsValue_getElement(dstAddrValue, 2); + + if (MmsValue_getType(vid) != MMS_UNSIGNED) { + if (DEBUG_IED_CLIENT) printf("IED_CLIENT: SVCB - vid has wrong type\n"); + goto exit_cleanup; + } + + retVal.vlanId = MmsValue_toUint32(vid); + + MmsValue* appID = MmsValue_getElement(dstAddrValue, 3); + + if (MmsValue_getType(appID) != MMS_UNSIGNED) { + if (DEBUG_IED_CLIENT) printf("IED_CLIENT: SVCB - appID has wrong type\n"); + goto exit_cleanup; + } + + retVal.appId = MmsValue_toUint32(appID); + + +exit_cleanup: + MmsValue_delete(dstAddrValue); + +exit_error: + return retVal; +} + + diff --git a/src/iec61850/client/ied_connection.c b/src/iec61850/client/ied_connection.c index 7c305683..3d5bee5c 100644 --- a/src/iec61850/client/ied_connection.c +++ b/src/iec61850/client/ied_connection.c @@ -1901,23 +1901,34 @@ IedConnection_createDataSet(IedConnection self, IedClientError* error, const cha bool isAssociationSpecific = false; if (dataSetReference[0] != '@') { - domainId = MmsMapping_getMmsDomainFromObjectReference(dataSetReference, domainIdBuffer); - if (domainId == NULL) { - *error = IED_ERROR_OBJECT_REFERENCE_INVALID; - goto exit_function; + if ((dataSetReference[0] == '/') || (strchr(dataSetReference, '/') == NULL)) { + domainId = NULL; + + if (dataSetReference[0] == '/') + itemId = dataSetReference + 1; + else + itemId = dataSetReference; } + else { + domainId = MmsMapping_getMmsDomainFromObjectReference(dataSetReference, domainIdBuffer); + + if (domainId == NULL) { + *error = IED_ERROR_OBJECT_REFERENCE_INVALID; + goto exit_function; + } - int domainIdLength = strlen(domainId); + int domainIdLength = strlen(domainId); - if ((strlen(dataSetReference) - domainIdLength - 1) > 32) { - *error = IED_ERROR_OBJECT_REFERENCE_INVALID; - goto exit_function; - } + if ((strlen(dataSetReference) - domainIdLength - 1) > 32) { + *error = IED_ERROR_OBJECT_REFERENCE_INVALID; + goto exit_function; + } - char* itemIdRef = copyStringToBuffer(dataSetReference + domainIdLength + 1, itemIdBuffer); - StringUtils_replace(itemIdRef, '.', '$'); - itemId = itemIdRef; + char* itemIdRef = copyStringToBuffer(dataSetReference + domainIdLength + 1, itemIdBuffer); + StringUtils_replace(itemIdRef, '.', '$'); + itemId = itemIdRef; + } } else { itemId = dataSetReference + 1; @@ -1965,28 +1976,40 @@ exit_function: void IedConnection_deleteDataSet(IedConnection self, IedClientError* error, const char* dataSetReference) { - char domainId[65]; + char domainIdBuf[65]; + char* domainId = domainIdBuf; char itemId[DATA_SET_MAX_NAME_LENGTH + 1]; bool isAssociationSpecific = false; int dataSetReferenceLength = strlen(dataSetReference); if (dataSetReference[0] != '@') { - if (MmsMapping_getMmsDomainFromObjectReference(dataSetReference, domainId) == NULL) { - *error = IED_ERROR_OBJECT_REFERENCE_INVALID; - goto exit_function; + if ((dataSetReference[0] == '/') || (strchr(dataSetReference, '/') == NULL)) { + domainId = NULL; + + if (dataSetReference[0] == '/') + strcpy(itemId, dataSetReference + 1); + else + strcpy(itemId, dataSetReference); } + else { + + if (MmsMapping_getMmsDomainFromObjectReference(dataSetReference, domainId) == NULL) { + *error = IED_ERROR_OBJECT_REFERENCE_INVALID; + goto exit_function; + } - const char* itemIdString = dataSetReference + strlen(domainId) + 1; + const char* itemIdString = dataSetReference + strlen(domainId) + 1; - if (strlen(itemIdString) > DATA_SET_MAX_NAME_LENGTH) { - *error = IED_ERROR_OBJECT_REFERENCE_INVALID; - goto exit_function; - } + if (strlen(itemIdString) > DATA_SET_MAX_NAME_LENGTH) { + *error = IED_ERROR_OBJECT_REFERENCE_INVALID; + goto exit_function; + } - copyStringToBuffer(itemIdString, itemId); + copyStringToBuffer(itemIdString, itemId); - StringUtils_replace(itemId, '.', '$'); + StringUtils_replace(itemId, '.', '$'); + } } else { if (dataSetReferenceLength > 33) { @@ -2028,23 +2051,33 @@ IedConnection_getDataSetDirectory(IedConnection self, IedClientError* error, con bool isAssociationSpecific = false; if (dataSetReference[0] != '@') { - domainId = MmsMapping_getMmsDomainFromObjectReference(dataSetReference, domainIdBuffer); + if ((dataSetReference[0] == '/') || (strchr(dataSetReference, '/') == NULL)) { + domainId = NULL; - if (domainId == NULL) { - *error = IED_ERROR_OBJECT_REFERENCE_INVALID; - goto exit_function; + if (dataSetReference[0] == '/') + itemId = dataSetReference + 1; + else + itemId = dataSetReference; } + else { + domainId = MmsMapping_getMmsDomainFromObjectReference(dataSetReference, domainIdBuffer); - const char* itemIdRef = dataSetReference + strlen(domainId) + 1; + if (domainId == NULL) { + *error = IED_ERROR_OBJECT_REFERENCE_INVALID; + goto exit_function; + } - if (strlen(itemIdRef) > DATA_SET_MAX_NAME_LENGTH) { - *error = IED_ERROR_OBJECT_REFERENCE_INVALID; - goto exit_function; - } + const char* itemIdRef = dataSetReference + strlen(domainId) + 1; + + if (strlen(itemIdRef) > DATA_SET_MAX_NAME_LENGTH) { + *error = IED_ERROR_OBJECT_REFERENCE_INVALID; + goto exit_function; + } - char* itemIdRefInBuffer = copyStringToBuffer(itemIdRef, itemIdBuffer); - StringUtils_replace(itemIdRefInBuffer, '.', '$'); - itemId = itemIdRefInBuffer; + char* itemIdRefInBuffer = copyStringToBuffer(itemIdRef, itemIdBuffer); + StringUtils_replace(itemIdRefInBuffer, '.', '$'); + itemId = itemIdRefInBuffer; + } } else { itemId = dataSetReference + 1; @@ -2103,24 +2136,35 @@ IedConnection_readDataSetValues(IedConnection self, IedClientError* error, const bool isAssociationSpecific = false; if (dataSetReference[0] != '@') { - domainId = MmsMapping_getMmsDomainFromObjectReference(dataSetReference, domainIdBuffer); - if (domainId == NULL) { - *error = IED_ERROR_OBJECT_REFERENCE_INVALID; - goto exit_function; + if ((dataSetReference[0] == '/') || (strchr(dataSetReference, '/') == NULL)) { + domainId = NULL; + + if (dataSetReference[0] == '/') + itemId = dataSetReference + 1; + else + itemId = dataSetReference; } + else { + domainId = MmsMapping_getMmsDomainFromObjectReference(dataSetReference, domainIdBuffer); - const char* itemIdRefOrig = dataSetReference + strlen(domainId) + 1; + if (domainId == NULL) { + *error = IED_ERROR_OBJECT_REFERENCE_INVALID; + goto exit_function; + } - if (strlen(itemIdRefOrig) > DATA_SET_MAX_NAME_LENGTH) { - *error = IED_ERROR_OBJECT_REFERENCE_INVALID; - goto exit_function; - } + const char* itemIdRefOrig = dataSetReference + strlen(domainId) + 1; - char* itemIdRef = copyStringToBuffer(itemIdRefOrig, itemIdBuffer); + if (strlen(itemIdRefOrig) > DATA_SET_MAX_NAME_LENGTH) { + *error = IED_ERROR_OBJECT_REFERENCE_INVALID; + goto exit_function; + } - StringUtils_replace(itemIdRef, '.', '$'); - itemId = itemIdRef; + char* itemIdRef = copyStringToBuffer(itemIdRefOrig, itemIdBuffer); + + StringUtils_replace(itemIdRef, '.', '$'); + itemId = itemIdRef; + } } else { itemId = dataSetReference + 1; diff --git a/src/iec61850/common/iec61850_common.c b/src/iec61850/common/iec61850_common.c index 53f8194b..f8e0f016 100644 --- a/src/iec61850/common/iec61850_common.c +++ b/src/iec61850/common/iec61850_common.c @@ -125,6 +125,14 @@ FunctionalConstraint_toString(FunctionalConstraint fc) { return "EX"; case IEC61850_FC_CO: return "CO"; + case IEC61850_FC_US: + return "US"; + case IEC61850_FC_MS: + return "MS"; + case IEC61850_FC_RP: + return "RP"; + case IEC61850_FC_BR: + return "BR"; default: return NULL; } @@ -153,6 +161,8 @@ FunctionalConstraint_fromString(const char* fcString) if (fcString[0] == 'M') { if (fcString[1] == 'X') return IEC61850_FC_MX; + if (fcString[1] == 'S') + return IEC61850_FC_MS; return IEC61850_FC_NONE; } @@ -179,6 +189,8 @@ FunctionalConstraint_fromString(const char* fcString) if (fcString[0] == 'B') { if (fcString[1] == 'L') return IEC61850_FC_BL; + if (fcString[1] == 'R') + return IEC61850_FC_BR; return IEC61850_FC_NONE; } @@ -188,6 +200,18 @@ FunctionalConstraint_fromString(const char* fcString) return IEC61850_FC_NONE; } + if (fcString[0] == 'U') { + if (fcString[1] == 'S') + return IEC61850_FC_US; + return IEC61850_FC_NONE; + } + + if (fcString[0] == 'R') { + if (fcString[1] == 'P') + return IEC61850_FC_RP; + return IEC61850_FC_NONE; + } + return IEC61850_FC_NONE; } @@ -288,7 +312,7 @@ Timestamp_setTimeInSeconds(Timestamp* self, uint32_t secondsSinceEpoch) void Timestamp_setTimeInMilliseconds(Timestamp* self, uint64_t millisSinceEpoch) { - uint32_t timeval32 = (millisSinceEpoch / 1000LL); + uint32_t timeval32 = (uint32_t) (millisSinceEpoch / 1000LL); uint8_t* timeArray = (uint8_t*) &timeval32; uint8_t* valueArray = self->val; diff --git a/src/iec61850/inc/iec61850_client.h b/src/iec61850/inc/iec61850_client.h index f0b86f81..c9ed2541 100644 --- a/src/iec61850/inc/iec61850_client.h +++ b/src/iec61850/inc/iec61850_client.h @@ -1,7 +1,7 @@ /* * iec61850_client.h * - * Copyright 2013, 2014 Michael Zillgith + * Copyright 2013, 2014, 2015 Michael Zillgith * * This file is part of libIEC61850. * @@ -304,6 +304,138 @@ IedConnection_installConnectionClosedHandler(IedConnection self, IedConnectionCl MmsConnection IedConnection_getMmsConnection(IedConnection self); +/** @} */ + +/** + * @defgroup IEC61850_CLIENT_SV Client side SV control block handling functions + * + * @{ + */ + +/** SV ASDU contains attribute RefrTm */ +#define IEC61850_SV_OPT_REFRESH_TIME 1 + +/** SV ASDU contains attribute SmpSynch */ +#define IEC61850_SV_OPT_SAMPLE_SYNC 2 + +/** SV ASDU contains attribute SmpRate */ +#define IEC61850_SV_OPT_SAMPLE_RATE 4 + +/** SV ASDU contains attribute DatSet */ +#define IEC61850_SV_OPT_DATA_SET 8 + +/** SV ASDU contains attribute Security */ +#define IEC61850_SV_OPT_SECURITY 16 + + +/** an opaque handle to the instance data of a ClientSVControlBlock object */ +typedef struct sClientSVControlBlock* ClientSVControlBlock; + +/** + * \brief Create a new ClientSVControlBlock instance + * + * This function simplifies client side access to server MSV/USV control blocks + * NOTE: Do not use the functions after the IedConnection object is invalidated! + * + * \param connection the IedConnection object with a valid connection to the server. + * \param reference the object reference of the control block + * + * \return the new instance + */ +ClientSVControlBlock +ClientSVControlBlock_create(IedConnection connection, const char* reference); + +/** + * \brief Free all resources related to the ClientSVControlBlock instance. + * + * \param self the ClientSVControlBlock instance to operate on + */ +void +ClientSVControlBlock_destroy(ClientSVControlBlock self); + +bool +ClientSVControlBlock_isMulticast(ClientSVControlBlock self); + +/** + * \brief Return the error code of the last write or write acccess to the SVCB + * + * \param self the ClientSVControlBlock instance to operate on + * + * \return the error code of the last read or write access + */ +IedClientError +ClientSVControlBlock_getLastComError(ClientSVControlBlock self); + + +bool +ClientSVControlBlock_setSvEna(ClientSVControlBlock self, bool svEna); + +bool +ClientSVControlBlock_getSvEna(ClientSVControlBlock self); + +bool +ClientSVControlBlock_setResv(ClientSVControlBlock self, bool svEna); + +bool +ClientSVControlBlock_getResv(ClientSVControlBlock self); + +char* +ClientSVControlBlock_getMsvID(ClientSVControlBlock self); + +/** + * \brief Get the (MMS) reference to the data set + * + * NOTE: the returned string is dynamically allocated with the + * GLOBAL_MALLOC macro. The application is responsible to release + * the memory when the string is no longer needed. + * + * \param self the ClientSVControlBlock instance to operate on + * + * \return the data set reference as a NULL terminated string + */ +char* +ClientSVControlBlock_getDatSet(ClientSVControlBlock self); + +uint32_t +ClientSVControlBlock_getConfRev(ClientSVControlBlock self); + +uint16_t +ClientSVControlBlock_getSmpRate(ClientSVControlBlock self); + + +/** + * \brief returns the destination address of the SV publisher + * + * \param self the ClientSVControlBlock instance to operate on + */ +PhyComAddress +ClientSVControlBlock_getDstAddress(ClientSVControlBlock self); + +/** + * \brief returns the OptFlds bit string as integer + * + * \param self the ClientSVControlBlock instance to operate on + */ +int +ClientSVControlBlock_getOptFlds(ClientSVControlBlock self); + +/** + * \brief returns number of sample mode of the SV publisher + * + * \param self the ClientSVControlBlock instance to operate on + */ +uint8_t +ClientSVControlBlock_getSmpMod(ClientSVControlBlock self); + +/** + * \brief returns number of ASDUs included in the SV message + * + * \param self the ClientSVControlBlock instance to operate on + */ +int +ClientSVControlBlock_getNoASDU(ClientSVControlBlock self); + + /** @} */ /** @@ -1178,7 +1310,9 @@ IedConnection_readDataSetValues(IedConnection self, IedClientError* error, const * \brief create a new data set at the connected server device * * This function creates a new data set at the server. The parameter dataSetReference is the name of the new data set - * to create. It is either in the form LDName/LNodeName.dataSetName or @dataSetName for an association specific data set. + * to create. It is either in the form LDName/LNodeName.dataSetName for permanent domain or VMD scope data sets or + * @dataSetName for an association specific data set. If the LDName part of the reference is missing the resulting + * data set will be of VMD scope. * * The dataSetElements parameter contains a linked list containing the object references of FCDs or FCDAs. The format of * this object references is LDName/LNodeName.item(arrayIndex)component[FC]. diff --git a/src/iec61850/inc/iec61850_common.h b/src/iec61850/inc/iec61850_common.h index c3d3bc65..938c9d17 100644 --- a/src/iec61850/inc/iec61850_common.h +++ b/src/iec61850/inc/iec61850_common.h @@ -36,6 +36,14 @@ extern "C" { */ /**@{*/ +/** PhyComAddress type contains Ethernet address and VLAN attributes */ +typedef struct { + uint8_t vlanPriority; + uint16_t vlanId; + uint16_t appId; + uint8_t dstAddress[6]; +} PhyComAddress; + /** * @defgroup TRIGGER_OPTIONS Trigger options (bit values combinable) * @@ -217,6 +225,16 @@ typedef enum eFunctionalConstraint { IEC61850_FC_EX = 11, /** Control */ IEC61850_FC_CO = 12, + /** Unicast SV */ + IEC61850_FC_US = 13, + /** Multicast SV */ + IEC61850_FC_MS = 14, + /** Unbuffered report */ + IEC61850_FC_RP = 15, + /** Buffered report */ + IEC61850_FC_BR = 16, + + /** All FCs - wildcard value */ IEC61850_FC_ALL = 99, IEC61850_FC_NONE = -1 } FunctionalConstraint; diff --git a/src/iec61850/inc/iec61850_dynamic_model.h b/src/iec61850/inc/iec61850_dynamic_model.h index 77725334..967c764f 100644 --- a/src/iec61850/inc/iec61850_dynamic_model.h +++ b/src/iec61850/inc/iec61850_dynamic_model.h @@ -183,7 +183,7 @@ SettingGroupControlBlock_create(LogicalNode* parent, uint8_t actSG, uint8_t numO * \param parent the parent LN * \param appId the application ID of the GoCB * \param dataSet the data set reference to be used by the GoCB - * \param confRef the configuration revision + * \param confRev the configuration revision * \param fixedOffs indicates if GOOSE publisher shall use fixed offsets (NOT YET SUPPORTED) * \param minTime minimum GOOSE retransmission time (-1 if not specified - uses stack default then) * \param maxTime GOOSE retransmission time in stable state (-1 if not specified - uses stack default then) @@ -191,15 +191,40 @@ SettingGroupControlBlock_create(LogicalNode* parent, uint8_t actSG, uint8_t numO * \return the new GoCB instance */ GSEControlBlock* -GSEControlBlock_create(const char* name, LogicalNode* parent, char* appId, char* dataSet, uint32_t confRef, +GSEControlBlock_create(const char* name, LogicalNode* parent, char* appId, char* dataSet, uint32_t confRev, bool fixedOffs, int minTime, int maxTime); /** - * \brief create a PhyComAddress object and add it to a GoCB + * \brief create a new Multicast/Unicast Sampled Value (SV) control block (SvCB) + * + * Create a new Sampled Value control block (SvCB) and add it to the given logical node (LN) + * + * \param name name of the SvCB relative to the parent LN + * \param parent the parent LN + * \param svID the application ID of the SvCB + * \param dataSet the data set reference to be used by the SVCB + * \param confRev the configuration revision + * \param smpMod the sampling mode used + * \param smpRate the sampling rate used + * \param optFlds the optional element configuration + * + * \return the new SvCB instance + */ +SVControlBlock* +SVControlBlock_create(const char* name, LogicalNode* parent, char* svID, char* dataSet, uint32_t confRev, uint8_t smpMod, + uint16_t smpRate, uint8_t optFlds, bool isUnicast); + +void +SVControlBlock_addPhyComAddress(SVControlBlock* self, PhyComAddress* phyComAddress); + +void +GSEControlBlock_addPhyComAddress(GSEControlBlock* self, PhyComAddress* phyComAddress); + +/** + * \brief create a PhyComAddress object * - * A PhyComAddress object contains all required addressing informations for a GOOSE publisher. + * A PhyComAddress object contains all required addressing information for a GOOSE publisher. * - * \param parent the parent GSEControlBlock object * \param vlanPriority the priority field of the VLAN tag * \param vlanId the ID field of the VLAN tag * \param appId the application identifier @@ -208,7 +233,7 @@ GSEControlBlock_create(const char* name, LogicalNode* parent, char* appId, char* * \return the new PhyComAddress object */ PhyComAddress* -PhyComAddress_create(GSEControlBlock* parent, uint8_t vlanPriority, uint16_t vlanId, uint16_t appId, uint8_t dstAddress[]); +PhyComAddress_create(uint8_t vlanPriority, uint16_t vlanId, uint16_t appId, uint8_t dstAddress[]); /** * \brief create a new data set diff --git a/src/iec61850/inc/iec61850_model.h b/src/iec61850/inc/iec61850_model.h index 665a2491..cd6828bf 100644 --- a/src/iec61850/inc/iec61850_model.h +++ b/src/iec61850/inc/iec61850_model.h @@ -1,7 +1,7 @@ /* * model.h * - * Copyright 2013, 2014 Michael Zillgith + * Copyright 2013, 2014, 2015 Michael Zillgith * * This file is part of libIEC61850. * @@ -80,38 +80,75 @@ typedef struct sSettingGroupControlBlock SettingGroupControlBlock; typedef struct sGSEControlBlock GSEControlBlock; +typedef struct sSVControlBlock SVControlBlock; + typedef enum { - BOOLEAN = 0,/* int */ - INT8 = 1, /* int8_t */ - INT16 = 2, /* int16_t */ - INT32 = 3, /* int32_t */ - INT64 = 4, /* int64_t */ - INT128 = 5, /* no native mapping! */ - INT8U = 6, /* uint8_t */ - INT16U = 7, /* uint16_t */ - INT24U = 8, /* uint32_t */ - INT32U = 9, /* uint32_t */ - FLOAT32 = 10, /* float */ - FLOAT64 = 11, /* double */ - ENUMERATED = 12, - OCTET_STRING_64 = 13, - OCTET_STRING_6 = 14, - OCTET_STRING_8 = 15, - VISIBLE_STRING_32 = 16, - VISIBLE_STRING_64 = 17, - VISIBLE_STRING_65 = 18, - VISIBLE_STRING_129 = 19, - VISIBLE_STRING_255 = 20, - UNICODE_STRING_255 = 21, - TIMESTAMP = 22, - QUALITY = 23, - CHECK = 24, - CODEDENUM = 25, - GENERIC_BITSTRING = 26, - CONSTRUCTED = 27, - ENTRY_TIME = 28, - PHYCOMADDR = 29 + IEC61850_BOOLEAN = 0,/* int */ + IEC61850_INT8 = 1, /* int8_t */ + IEC61850_INT16 = 2, /* int16_t */ + IEC61850_INT32 = 3, /* int32_t */ + IEC61850_INT64 = 4, /* int64_t */ + IEC61850_INT128 = 5, /* no native mapping! */ + IEC61850_INT8U = 6, /* uint8_t */ + IEC61850_INT16U = 7, /* uint16_t */ + IEC61850_INT24U = 8, /* uint32_t */ + IEC61850_INT32U = 9, /* uint32_t */ + IEC61850_FLOAT32 = 10, /* float */ + IEC61850_FLOAT64 = 11, /* double */ + IEC61850_ENUMERATED = 12, + IEC61850_OCTET_STRING_64 = 13, + IEC61850_OCTET_STRING_6 = 14, + IEC61850_OCTET_STRING_8 = 15, + IEC61850_VISIBLE_STRING_32 = 16, + IEC61850_VISIBLE_STRING_64 = 17, + IEC61850_VISIBLE_STRING_65 = 18, + IEC61850_VISIBLE_STRING_129 = 19, + IEC61850_VISIBLE_STRING_255 = 20, + IEC61850_UNICODE_STRING_255 = 21, + IEC61850_TIMESTAMP = 22, + IEC61850_QUALITY = 23, + IEC61850_CHECK = 24, + IEC61850_CODEDENUM = 25, + IEC61850_GENERIC_BITSTRING = 26, + IEC61850_CONSTRUCTED = 27, + IEC61850_ENTRY_TIME = 28, + IEC61850_PHYCOMADDR = 29 + + +#if (CONFIG_IEC61850_USE_COMPAT_TYPE_DECLARATIONS == 1) + , + BOOLEAN = 0,/* int */ + INT8 = 1, /* int8_t */ + INT16 = 2, /* int16_t */ + INT32 = 3, /* int32_t */ + INT64 = 4, /* int64_t */ + INT128 = 5, /* no native mapping! */ + INT8U = 6, /* uint8_t */ + INT16U = 7, /* uint16_t */ + INT24U = 8, /* uint32_t */ + INT32U = 9, /* uint32_t */ + FLOAT32 = 10, /* float */ + FLOAT64 = 11, /* double */ + ENUMERATED = 12, + OCTET_STRING_64 = 13, + OCTET_STRING_6 = 14, + OCTET_STRING_8 = 15, + VISIBLE_STRING_32 = 16, + VISIBLE_STRING_64 = 17, + VISIBLE_STRING_65 = 18, + VISIBLE_STRING_129 = 19, + VISIBLE_STRING_255 = 20, + UNICODE_STRING_255 = 21, + TIMESTAMP = 22, + QUALITY = 23, + CHECK = 24, + CODEDENUM = 25, + GENERIC_BITSTRING = 26, + CONSTRUCTED = 27, + ENTRY_TIME = 28, + PHYCOMADDR = 29 +#endif } DataAttributeType; typedef enum { @@ -127,6 +164,7 @@ struct sIedModel { DataSet* dataSets; ReportControlBlock* rcbs; GSEControlBlock* gseCBs; + SVControlBlock* svCBs; SettingGroupControlBlock* sgcbs; void (*initializer) (void); }; @@ -232,19 +270,12 @@ struct sSettingGroupControlBlock { SettingGroupControlBlock* sibling; /* next control block in list or NULL if this is the last entry */ }; -typedef struct { - uint8_t vlanPriority; - uint16_t vlanId; - uint16_t appId; - uint8_t dstAddress[6]; -} PhyComAddress; - struct sGSEControlBlock { LogicalNode* parent; char* name; char* appId; char* dataSetName; /* pre loaded with relative name in logical node */ - uint32_t confRef; /* ConfRef - configuration revision */ + uint32_t confRev; /* ConfRev - configuration revision */ bool fixedOffs; /* fixed offsets */ PhyComAddress* address; /* GSE communication parameters */ int minTime; /* optional minTime parameter --> -1 if not present */ @@ -252,6 +283,29 @@ struct sGSEControlBlock { GSEControlBlock* sibling; /* next control block in list or NULL if this is the last entry */ }; +struct sSVControlBlock { + LogicalNode* parent; + char* name; + + char* svId; /* MsvUD/UsvID */ + char* dataSetName; /* pre loaded with relative name in logical node */ + + uint8_t optFlds; + + uint8_t smpMod; + uint16_t smpRate; + + uint32_t confRev; /* ConfRev - configuration revision */ + + PhyComAddress* dstAddress; /* SV communication parameters */ + + bool isUnicast; + + int noASDU; + + SVControlBlock* sibling; /* next control block in list or NULL if this is the last entry */ +}; + /** * \brief get the number of direct children of a model node * diff --git a/src/iec61850/inc_private/mms_mapping_internal.h b/src/iec61850/inc_private/mms_mapping_internal.h index a23fe8e9..ef09bb24 100644 --- a/src/iec61850/inc_private/mms_mapping_internal.h +++ b/src/iec61850/inc_private/mms_mapping_internal.h @@ -40,6 +40,11 @@ struct sMmsMapping { const char* gooseInterfaceId; #endif +#if (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) + LinkedList svControls; + const char* svInterfaceId; +#endif + LinkedList controlObjects; LinkedList observedObjects; LinkedList attributeAccessHandlers; diff --git a/src/iec61850/inc_private/mms_sv.h b/src/iec61850/inc_private/mms_sv.h new file mode 100644 index 00000000..f868d75f --- /dev/null +++ b/src/iec61850/inc_private/mms_sv.h @@ -0,0 +1,47 @@ +/* + * mms_sv.h + * + * Copyright 2015 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. + */ + +#ifndef LIBIEC61850_SRC_IEC61850_INC_PRIVATE_MMS_SV_H_ +#define LIBIEC61850_SRC_IEC61850_INC_PRIVATE_MMS_SV_H_ + + +typedef struct sMmsSampledValueControlBlock* MmsSampledValueControlBlock; + +MmsSampledValueControlBlock +MmsSampledValueControlBlock_create(void); + +void +MmsSampledValueControlBlock_destroy(MmsSampledValueControlBlock self); + +MmsVariableSpecification* +LIBIEC61850_SV_createSVControlBlocks(MmsMapping* self, MmsDomain* domain, + LogicalNode* logicalNode, int svCount, bool unicast); + +MmsValue* +LIBIEC61850_SV_readAccessSampledValueControlBlock(MmsMapping* self, MmsDomain* domain, char* variableIdOrig); + +MmsDataAccessError +LIBIEC61850_SV_writeAccessSVControlBlock(MmsMapping* self, MmsDomain* domain, char* variableIdOrig, + MmsValue* value, MmsServerConnection connection); + +#endif /* LIBIEC61850_SRC_IEC61850_INC_PRIVATE_MMS_SV_H_ */ diff --git a/src/iec61850/inc_private/reporting.h b/src/iec61850/inc_private/reporting.h index 739bdf22..4c8443ff 100644 --- a/src/iec61850/inc_private/reporting.h +++ b/src/iec61850/inc_private/reporting.h @@ -63,7 +63,7 @@ typedef struct { MmsValue** valueReferences; /* array to store value references for fast access */ - bool gi; + bool gi; /* flag to indicate that a GI report is triggered */ uint16_t sqNum; uint32_t intgPd; @@ -84,9 +84,14 @@ typedef struct { bool triggered; /* { covered by mutex } */ uint64_t reportTime; /* { covered by mutex } */ - /* the following members are only required for buffered RCBs */ + /* + * the following members are only required for buffered RCBs * + * TODO move to ReportBuffer structure! + */ + bool isBuffering; /* true if buffered RCB is buffering (datSet is set to a valid value) */ bool isResync; /* true if buffered RCB is in resync state */ + ReportBuffer* reportBuffer; MmsValue* timeOfEntry; } ReportControl; diff --git a/src/iec61850/server/impl/ied_server.c b/src/iec61850/server/impl/ied_server.c index 7652650a..83a3a9ef 100644 --- a/src/iec61850/server/impl/ied_server.c +++ b/src/iec61850/server/impl/ied_server.c @@ -188,7 +188,16 @@ createMmsServerCache(IedServer self) #endif /* (CONFIG_IEC61850_CONTROL_SERVICE == 1) */ if ((strcmp(fcName, "BR") != 0) && (strcmp(fcName, "RP") != 0) - && (strcmp(fcName, "GO") != 0)) + +#if (CONFIG_INCLUDE_GOOSE_SUPPORT == 1) + && (strcmp(fcName, "GO") != 0) +#endif + +#if (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) + && (strcmp(fcName, "MS") != 0) && (strcmp(fcName, "US") != 0) +#endif + + ) { char* variableName = createString(3, lnName, "$", fcName); diff --git a/src/iec61850/server/mms_mapping/mms_goose.c b/src/iec61850/server/mms_mapping/mms_goose.c index 85428f30..dafc5188 100644 --- a/src/iec61850/server/mms_mapping/mms_goose.c +++ b/src/iec61850/server/mms_mapping/mms_goose.c @@ -305,24 +305,20 @@ MmsGooseControlBlock_checkAndPublish(MmsGooseControlBlock self, uint64_t current GoosePublisher_publish(self->publisher, self->dataSetValues); if (self->retransmissionsLeft > 0) { - self->nextPublishTime = currentTime + CONFIG_GOOSE_EVENT_RETRANSMISSION_INTERVAL; + self->nextPublishTime = currentTime + self->minTime; if (self->retransmissionsLeft > 1) - GoosePublisher_setTimeAllowedToLive(self->publisher, - CONFIG_GOOSE_EVENT_RETRANSMISSION_INTERVAL * 3); + GoosePublisher_setTimeAllowedToLive(self->publisher, self->minTime * 3); else - GoosePublisher_setTimeAllowedToLive(self->publisher, - CONFIG_GOOSE_STABLE_STATE_TRANSMISSION_INTERVAL * 3); + GoosePublisher_setTimeAllowedToLive(self->publisher, self->maxTime * 3); self->retransmissionsLeft--; } else { - GoosePublisher_setTimeAllowedToLive(self->publisher, - CONFIG_GOOSE_STABLE_STATE_TRANSMISSION_INTERVAL * 3); + GoosePublisher_setTimeAllowedToLive(self->publisher, self->maxTime * 3); - self->nextPublishTime = currentTime + - CONFIG_GOOSE_STABLE_STATE_TRANSMISSION_INTERVAL; + self->nextPublishTime = currentTime + self->maxTime; } #if (CONFIG_MMS_THREADLESS_STACK != 1) @@ -343,18 +339,14 @@ MmsGooseControlBlock_observedObjectChanged(MmsGooseControlBlock self) self->retransmissionsLeft = CONFIG_GOOSE_EVENT_RETRANSMISSION_COUNT; if (self->retransmissionsLeft > 0) { - self->nextPublishTime = currentTime + - CONFIG_GOOSE_EVENT_RETRANSMISSION_INTERVAL; + self->nextPublishTime = currentTime + self->minTime; - GoosePublisher_setTimeAllowedToLive(self->publisher, - CONFIG_GOOSE_EVENT_RETRANSMISSION_INTERVAL * 3); + GoosePublisher_setTimeAllowedToLive(self->publisher, self->minTime * 3); } else { - self->nextPublishTime = currentTime + - CONFIG_GOOSE_STABLE_STATE_TRANSMISSION_INTERVAL; + self->nextPublishTime = currentTime + self->maxTime; - GoosePublisher_setTimeAllowedToLive(self->publisher, - CONFIG_GOOSE_STABLE_STATE_TRANSMISSION_INTERVAL * 3); + GoosePublisher_setTimeAllowedToLive(self->publisher, self->maxTime * 3); } GoosePublisher_publish(self->publisher, self->dataSetValues); @@ -550,7 +542,7 @@ GOOSE_createGOOSEControlBlocks(MmsMapping* self, MmsDomain* domain, MmsValue* confRef = MmsValue_getElement(gseValues, 3); - MmsValue_setUint32(confRef, gooseControlBlock->confRef); + MmsValue_setUint32(confRef, gooseControlBlock->confRev); mmsGCB->dataSet = NULL; @@ -587,5 +579,5 @@ GOOSE_createGOOSEControlBlocks(MmsMapping* self, MmsDomain* domain, return namedVariable; } -#endif +#endif /* (CONFIG_INCLUDE_GOOSE_SUPPORT == 1) */ diff --git a/src/iec61850/server/mms_mapping/mms_mapping.c b/src/iec61850/server/mms_mapping/mms_mapping.c index 6e404930..a358bc2f 100644 --- a/src/iec61850/server/mms_mapping/mms_mapping.c +++ b/src/iec61850/server/mms_mapping/mms_mapping.c @@ -1,7 +1,7 @@ /* * mms_mapping.c * - * Copyright 2013, 2014 Michael Zillgith + * Copyright 2013, 2014, 2015 Michael Zillgith * * This file is part of libIEC61850. * @@ -28,6 +28,7 @@ #include "stack_config.h" #include "mms_goose.h" +#include "mms_sv.h" #include "reporting.h" #include "control.h" #include "ied_server_private.h" @@ -154,118 +155,118 @@ createNamedVariableFromDataAttribute(DataAttribute* attribute) } else { switch (attribute->type) { - case BOOLEAN: + case IEC61850_BOOLEAN: namedVariable->type = MMS_BOOLEAN; break; - case INT8: + case IEC61850_INT8: namedVariable->typeSpec.integer = 8; namedVariable->type = MMS_INTEGER; break; - case INT16: + case IEC61850_INT16: namedVariable->typeSpec.integer = 16; namedVariable->type = MMS_INTEGER; break; - case INT32: + case IEC61850_INT32: namedVariable->typeSpec.integer = 32; namedVariable->type = MMS_INTEGER; break; - case INT64: + case IEC61850_INT64: namedVariable->typeSpec.integer = 64; namedVariable->type = MMS_INTEGER; break; - case INT128: + case IEC61850_INT128: namedVariable->typeSpec.integer = 128; namedVariable->type = MMS_INTEGER; break; - case INT8U: + case IEC61850_INT8U: namedVariable->typeSpec.unsignedInteger = 8; namedVariable->type = MMS_UNSIGNED; break; - case INT16U: + case IEC61850_INT16U: namedVariable->typeSpec.unsignedInteger = 16; namedVariable->type = MMS_UNSIGNED; break; - case INT24U: + case IEC61850_INT24U: namedVariable->typeSpec.unsignedInteger = 24; namedVariable->type = MMS_UNSIGNED; break; - case INT32U: + case IEC61850_INT32U: namedVariable->typeSpec.unsignedInteger = 32; namedVariable->type = MMS_UNSIGNED; break; - case FLOAT32: + case IEC61850_FLOAT32: namedVariable->typeSpec.floatingpoint.formatWidth = 32; namedVariable->typeSpec.floatingpoint.exponentWidth = 8; namedVariable->type = MMS_FLOAT; break; - case FLOAT64: + case IEC61850_FLOAT64: namedVariable->typeSpec.floatingpoint.formatWidth = 64; namedVariable->typeSpec.floatingpoint.exponentWidth = 11; namedVariable->type = MMS_FLOAT; break; - case ENUMERATED: + case IEC61850_ENUMERATED: namedVariable->typeSpec.integer = 8; /* 8 bit integer should be enough for all enumerations */ namedVariable->type = MMS_INTEGER; break; - case CHECK: + case IEC61850_CHECK: namedVariable->typeSpec.bitString = -2; namedVariable->type = MMS_BIT_STRING; break; - case CODEDENUM: + case IEC61850_CODEDENUM: namedVariable->typeSpec.bitString = 2; namedVariable->type = MMS_BIT_STRING; break; - case OCTET_STRING_6: + case IEC61850_OCTET_STRING_6: namedVariable->typeSpec.octetString = -6; namedVariable->type = MMS_OCTET_STRING; break; - case OCTET_STRING_8: + case IEC61850_OCTET_STRING_8: namedVariable->typeSpec.octetString = 8; namedVariable->type = MMS_OCTET_STRING; break; - case OCTET_STRING_64: + case IEC61850_OCTET_STRING_64: namedVariable->typeSpec.octetString = -64; namedVariable->type = MMS_OCTET_STRING; break; - case VISIBLE_STRING_32: + case IEC61850_VISIBLE_STRING_32: namedVariable->typeSpec.visibleString = -129; namedVariable->type = MMS_VISIBLE_STRING; break; - case VISIBLE_STRING_64: + case IEC61850_VISIBLE_STRING_64: namedVariable->typeSpec.visibleString = -129; namedVariable->type = MMS_VISIBLE_STRING; break; - case VISIBLE_STRING_65: + case IEC61850_VISIBLE_STRING_65: namedVariable->typeSpec.visibleString = -129; namedVariable->type = MMS_VISIBLE_STRING; break; - case VISIBLE_STRING_129: + case IEC61850_VISIBLE_STRING_129: namedVariable->typeSpec.visibleString = -129; namedVariable->type = MMS_VISIBLE_STRING; break; - case VISIBLE_STRING_255: + case IEC61850_VISIBLE_STRING_255: namedVariable->typeSpec.visibleString = -255; namedVariable->type = MMS_VISIBLE_STRING; break; - case UNICODE_STRING_255: + case IEC61850_UNICODE_STRING_255: namedVariable->typeSpec.mmsString = -255; namedVariable->type = MMS_STRING; break; - case GENERIC_BITSTRING: + case IEC61850_GENERIC_BITSTRING: namedVariable->type = MMS_BIT_STRING; break; - case TIMESTAMP: + case IEC61850_TIMESTAMP: namedVariable->type = MMS_UTC_TIME; break; - case QUALITY: + case IEC61850_QUALITY: namedVariable->typeSpec.bitString = -13; // -13 = up to 13 bits namedVariable->type = MMS_BIT_STRING; break; - case ENTRY_TIME: + case IEC61850_ENTRY_TIME: namedVariable->type = MMS_BINARY_TIME; namedVariable->typeSpec.binaryTime = 6; break; - case PHYCOMADDR: + case IEC61850_PHYCOMADDR: MmsMapping_createPhyComAddrStructure(namedVariable); break; default: @@ -766,9 +767,8 @@ countGSEControlBlocksForLogicalNode(MmsMapping* self, LogicalNode* logicalNode) GSEControlBlock* gcb = self->model->gseCBs; while (gcb != NULL) { - if (gcb->parent == logicalNode) { + if (gcb->parent == logicalNode) gseCount++; - } gcb = gcb->sibling; } @@ -778,6 +778,27 @@ countGSEControlBlocksForLogicalNode(MmsMapping* self, LogicalNode* logicalNode) #endif /* (CONFIG_INCLUDE_GOOSE_SUPPORT == 1) */ +#if (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) + +static int +countSVControlBlocksForLogicalNode(MmsMapping* self, LogicalNode* logicalNode, bool unicast) +{ + int svCount = 0; + + SVControlBlock* svCb = self->model->svCBs; + + while (svCb != NULL) { + if ((svCb->parent == logicalNode) && (svCb->isUnicast == unicast)) + svCount++; + + svCb = svCb->sibling; + } + + return svCount; +} + +#endif /* (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) */ + static SettingGroupControlBlock* checkForSgcb(MmsMapping* self, LogicalNode* logicalNode) { @@ -862,6 +883,28 @@ createNamedVariableFromLogicalNode(MmsMapping* self, MmsDomain* domain, #endif /* (CONFIG_INCLUDE_GOOSE_SUPPORT == 1) */ +#if (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) + + int msvcbCount = countSVControlBlocksForLogicalNode(self, logicalNode, false); + + if (msvcbCount > 0) { + if (DEBUG_IED_SERVER) + printf(" and %i MSV control blocks\n", msvcbCount); + + componentCount++; + } + + int usvcbCount = countSVControlBlocksForLogicalNode(self, logicalNode, true); + + if (usvcbCount > 0) { + if (DEBUG_IED_SERVER) + printf(" and %i USV control blocks\n", usvcbCount); + + componentCount++; + } + +#endif /* (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) */ + namedVariable->typeSpec.structure.elements = (MmsVariableSpecification**) GLOBAL_CALLOC(componentCount, sizeof(MmsVariableSpecification*)); @@ -961,6 +1004,24 @@ createNamedVariableFromLogicalNode(MmsMapping* self, MmsDomain* domain, currentComponent++; } +#if (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) + + /* Add MS and US named variables */ + if (msvcbCount > 0) { + namedVariable->typeSpec.structure.elements[currentComponent] = + LIBIEC61850_SV_createSVControlBlocks(self, domain, logicalNode, msvcbCount, false); + + currentComponent++; + } + + if (usvcbCount > 0) { + namedVariable->typeSpec.structure.elements[currentComponent] = + LIBIEC61850_SV_createSVControlBlocks(self, domain, logicalNode, msvcbCount, true); + + currentComponent++; + } +#endif + if (LogicalNode_hasFCData(logicalNode, IEC61850_FC_EX)) { namedVariable->typeSpec.structure.elements[currentComponent] = createFCNamedVariable(logicalNode, IEC61850_FC_EX); @@ -1138,6 +1199,11 @@ MmsMapping_create(IedModel* model) self->gooseInterfaceId = NULL; #endif +#if (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) + self->svControls = LinkedList_create(); + self->svInterfaceId = NULL; +#endif + #if (CONFIG_IEC61850_CONTROL_SERVICE == 1) self->controlObjects = LinkedList_create(); #endif @@ -1177,6 +1243,10 @@ MmsMapping_destroy(MmsMapping* self) LinkedList_destroyDeep(self->gseControls, (LinkedListValueDeleteFunction) MmsGooseControlBlock_destroy); #endif +#if (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) + LinkedList_destroyDeep(self->svControls, (LinkedListValueDeleteFunction) MmsSampledValueControlBlock_destroy); +#endif + #if (CONFIG_IEC61850_CONTROL_SERVICE == 1) LinkedList_destroyDeep(self->controlObjects, (LinkedListValueDeleteFunction) ControlObject_destroy); #endif @@ -1284,6 +1354,23 @@ isGooseControlBlock(char* separator) #endif /* (CONFIG_INCLUDE_GOOSE_SUPPORT == 1) */ + +#if (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) + +static bool +isSampledValueControlBlock(char* separator) +{ + if (strncmp(separator + 1, "MS", 2) == 0) + return true; + + if (strncmp(separator + 1, "US", 2) == 0) + return true; + + return false; +} + +#endif /* (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) */ + char* MmsMapping_getNextNameElement(char* name) { @@ -1604,12 +1691,22 @@ mmsWriteHandler(void* parameter, MmsDomain* domain, #endif /* (CONFIG_IEC61850_CONTROL_SERVICE == 1) */ #if (CONFIG_INCLUDE_GOOSE_SUPPORT == 1) + /* Goose control block - GO */ - if (isGooseControlBlock(separator)) { + if (isGooseControlBlock(separator)) return writeAccessGooseControlBlock(self, domain, variableId, value); - } + #endif /* (CONFIG_INCLUDE_GOOSE_SUPPORT == 1) */ +#if (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) + + /* Sampled Value control block - MS/US */ + if (isSampledValueControlBlock(separator)) + return LIBIEC61850_SV_writeAccessSVControlBlock(self, domain, variableId, value, connection); + +#endif /* (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) */ + + #if (CONFIG_IEC61850_REPORT_SERVICE == 1) /* Report control blocks - BR, RP */ if (isReportControlBlock(separator)) { @@ -2006,6 +2103,7 @@ readAccessGooseControlBlock(MmsMapping* self, MmsDomain* domain, char* variableI #endif /* (CONFIG_INCLUDE_GOOSE_SUPPORT == 1) */ + static MmsValue* mmsReadHandler(void* parameter, MmsDomain* domain, char* variableId, MmsServerConnection connection) { @@ -2031,14 +2129,23 @@ mmsReadHandler(void* parameter, MmsDomain* domain, char* variableId, MmsServerCo } #endif - /* GOOSE control blocks - GO */ + #if (CONFIG_INCLUDE_GOOSE_SUPPORT == 1) + /* GOOSE control blocks - GO */ if (isGooseControlBlock(separator)) { retValue = readAccessGooseControlBlock(self, domain, variableId); goto exit_function; } #endif +#if (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) + /* Sampled Value control blocks - MS/US */ + if (isSampledValueControlBlock(separator)) { + retValue = LIBIEC61850_SV_readAccessSampledValueControlBlock(self, domain, variableId); + goto exit_function; + } +#endif + #if (CONFIG_IEC61850_REPORT_SERVICE == 1) /* Report control blocks - BR, RP */ if (isReportControlBlock(separator)) { diff --git a/src/iec61850/server/mms_mapping/mms_sv.c b/src/iec61850/server/mms_mapping/mms_sv.c new file mode 100644 index 00000000..49ca4817 --- /dev/null +++ b/src/iec61850/server/mms_mapping/mms_sv.c @@ -0,0 +1,493 @@ +/* + * mms_sv.c + * + * Copyright 2015 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 "stack_config.h" + +#if (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) + +#include "libiec61850_platform_includes.h" +#include "mms_mapping.h" +#include "linked_list.h" +#include "array_list.h" + +#include "mms_sv.h" + +#include "mms_mapping_internal.h" + +struct sMmsSampledValueControlBlock { + char* name; + + bool svEna; + MmsServerConnection reservedByClient; + + char* dstAddress; + + MmsDomain* domain; + LogicalNode* logicalNode; + + MmsVariableSpecification* mmsType; + MmsValue* mmsValue; + + MmsValue* svEnaValue; + MmsValue* resvValue; +}; + +MmsSampledValueControlBlock +MmsSampledValueControlBlock_create() +{ + MmsSampledValueControlBlock self = (MmsSampledValueControlBlock) GLOBAL_CALLOC(1, sizeof(struct sMmsSampledValueControlBlock)); + + return self; +} + + +void +MmsSampledValueControlBlock_destroy(MmsSampledValueControlBlock self) +{ + MmsValue_delete(self->mmsValue); + + GLOBAL_FREEMEM(self); +} + +static MmsSampledValueControlBlock +lookupSVCB(MmsMapping* self, MmsDomain* domain, char* lnName, char* objectName) +{ + LinkedList element = LinkedList_getNext(self->svControls); + + while (element != NULL) { + MmsSampledValueControlBlock mmsSVCB = (MmsSampledValueControlBlock) element->data; + + if (mmsSVCB->domain == domain) { + if (strcmp(mmsSVCB->logicalNode->name, lnName) == 0) { + if (strcmp(mmsSVCB->name, objectName) == 0) { + return mmsSVCB; + } + } + } + + element = LinkedList_getNext(element); + } + + return NULL; +} + +static void +MmsSampledValueControlBlock_enable(MmsSampledValueControlBlock self) +{ + //TODO call application callback handler + self->svEna = true; + MmsValue_setBoolean(self->svEnaValue, true); +} + +static void +MmsSampledValueControlBlock_disable(MmsSampledValueControlBlock self) +{ + //TODO call application callback handler + self->svEna = false; + MmsValue_setBoolean(self->svEnaValue, false); +} + +static bool +MmsSampledValueControlBlock_isEnabled(MmsSampledValueControlBlock self) +{ + return self->svEna; +} + +MmsDataAccessError +LIBIEC61850_SV_writeAccessSVControlBlock(MmsMapping* self, MmsDomain* domain, char* variableIdOrig, + MmsValue* value, MmsServerConnection connection) +{ + char variableId[130]; + + strncpy(variableId, variableIdOrig, 129); + + char* separator = strchr(variableId, '$'); + + *separator = 0; + + char* lnName = variableId; + + if (lnName == NULL) + return DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; + + char* objectName = MmsMapping_getNextNameElement(separator + 1); + + if (objectName == NULL) + return DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; + + char* varName = MmsMapping_getNextNameElement(objectName); + + if (varName != NULL) + *(varName - 1) = 0; + else + return DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; + + MmsSampledValueControlBlock mmsSVCB = lookupSVCB(self, domain, lnName, objectName); + + if (mmsSVCB == NULL) + return DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; + + if (mmsSVCB->reservedByClient != NULL) { + if (mmsSVCB->reservedByClient != connection) + return DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE; + } + + if (strcmp(varName, "Resv") == 0) { + if (MmsValue_getType(value) != MMS_BOOLEAN) + return DATA_ACCESS_ERROR_TYPE_INCONSISTENT; + + if (MmsValue_getBoolean(value)) { + mmsSVCB->reservedByClient = connection; + MmsValue_setBoolean(mmsSVCB->resvValue, true); + } + else { + mmsSVCB->reservedByClient = NULL; + MmsValue_setBoolean(mmsSVCB->resvValue, false); + } + + return DATA_ACCESS_ERROR_SUCCESS; + } + else if (strcmp(varName, "SvEna") == 0) { + if (MmsValue_getType(value) != MMS_BOOLEAN) + return DATA_ACCESS_ERROR_TYPE_INCONSISTENT; + + if (MmsValue_getBoolean(value)) + MmsSampledValueControlBlock_enable(mmsSVCB); + else + MmsSampledValueControlBlock_disable(mmsSVCB); + + return DATA_ACCESS_ERROR_SUCCESS; + } + else { + if (MmsSampledValueControlBlock_isEnabled(mmsSVCB)) + return DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE; + else { + bool allowAccess = false; + + // In 61850-9-2 mapping only Resv and SvEna are writable! + + if (allowAccess) + return DATA_ACCESS_ERROR_SUCCESS; + else + return DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; + + } + } +} + +MmsValue* +LIBIEC61850_SV_readAccessSampledValueControlBlock(MmsMapping* self, MmsDomain* domain, char* variableIdOrig) +{ + MmsValue* value = NULL; + + char variableId[130]; + + strncpy(variableId, variableIdOrig, 129); + + char* separator = strchr(variableId, '$'); + + *separator = 0; + + char* lnName = variableId; + + if (lnName == NULL) + return NULL; + + char* objectName = MmsMapping_getNextNameElement(separator + 1); + + if (objectName == NULL) + return NULL; + + char* varName = MmsMapping_getNextNameElement(objectName); + + if (varName != NULL) + *(varName - 1) = 0; + + MmsSampledValueControlBlock mmsSVCB = lookupSVCB(self, domain, lnName, objectName); + + if (mmsSVCB != NULL) { + if (varName != NULL) { + value = MmsValue_getSubElement(mmsSVCB->mmsValue, mmsSVCB->mmsType, varName); + } + else { + value = mmsSVCB->mmsValue; + } + } + + return value; +} + + +static SVControlBlock* +getSVCBForLogicalNodeWithIndex(MmsMapping* self, LogicalNode* logicalNode, int index, bool isUnicast) +{ + int svCount = 0; + + SVControlBlock* svcb = self->model->svCBs; + + /* Iterate list of SvCBs */ + while (svcb != NULL ) { + if ((svcb->parent == logicalNode) && (svcb->isUnicast == isUnicast)) { + if (svCount == index) + return svcb; + + svCount++; + } + + svcb = svcb->sibling; + } + + return NULL ; +} + + +static MmsVariableSpecification* +createSVControlBlockMmsStructure(char* gcbName, bool isUnicast) +{ + MmsVariableSpecification* gcb = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); + gcb->name = copyString(gcbName); + gcb->type = MMS_STRUCTURE; + + int elementCount; + + if (isUnicast) + elementCount = 10; + else + elementCount = 9; + + gcb->typeSpec.structure.elementCount = elementCount; + gcb->typeSpec.structure.elements = (MmsVariableSpecification**) + GLOBAL_CALLOC(elementCount, sizeof(MmsVariableSpecification*)); + + int currentElement = 0; + + MmsVariableSpecification* namedVariable; + + namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); + namedVariable->name = copyString("SvEna"); + namedVariable->type = MMS_BOOLEAN; + + gcb->typeSpec.structure.elements[currentElement++] = namedVariable; + + if (isUnicast) { + namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); + namedVariable->name = copyString("Resv"); + namedVariable->type = MMS_BOOLEAN; + + gcb->typeSpec.structure.elements[currentElement++] = namedVariable; + } + + namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); + if (isUnicast) + namedVariable->name = copyString("UsvID"); + else + namedVariable->name = copyString("MsvID"); + namedVariable->typeSpec.visibleString = -129; + namedVariable->type = MMS_VISIBLE_STRING; + + gcb->typeSpec.structure.elements[currentElement++] = namedVariable; + + namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); + namedVariable->name = copyString("DatSet"); + namedVariable->typeSpec.visibleString = -129; + namedVariable->type = MMS_VISIBLE_STRING; + + gcb->typeSpec.structure.elements[currentElement++] = namedVariable; + + namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); + namedVariable->name = copyString("ConfRev"); + namedVariable->type = MMS_INTEGER; + namedVariable->typeSpec.integer = 32; + + gcb->typeSpec.structure.elements[currentElement++] = namedVariable; + + namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); + namedVariable->name = copyString("SmpRate"); + namedVariable->type = MMS_INTEGER; + namedVariable->typeSpec.unsignedInteger = 32; + + gcb->typeSpec.structure.elements[currentElement++] = namedVariable; + + namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); + namedVariable->name = copyString("OptFlds"); + namedVariable->type = MMS_BIT_STRING; + namedVariable->typeSpec.bitString = 5; + + gcb->typeSpec.structure.elements[currentElement++] = namedVariable; + + namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); + namedVariable->name = copyString("SmpMod"); + namedVariable->type = MMS_INTEGER; + namedVariable->typeSpec.integer = 8; + + gcb->typeSpec.structure.elements[currentElement++] = namedVariable; + + namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); + namedVariable->name = copyString("DstAddress"); + MmsMapping_createPhyComAddrStructure(namedVariable); + + gcb->typeSpec.structure.elements[currentElement++] = namedVariable; + + namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); + namedVariable->name = copyString("noASDU"); + namedVariable->type = MMS_INTEGER; + namedVariable->typeSpec.integer = 32; + + gcb->typeSpec.structure.elements[currentElement++] = namedVariable; + + return gcb; +} + +static void +createDataSetReference(char* buffer, char* domainName, char* lnName, char* dataSetName) +{ + StringUtils_createStringInBuffer(buffer, 5, domainName, "/", lnName, "$", dataSetName); +} + +MmsVariableSpecification* +LIBIEC61850_SV_createSVControlBlocks(MmsMapping* self, MmsDomain* domain, + LogicalNode* logicalNode, int svCount, bool unicast) +{ + MmsVariableSpecification* namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, + sizeof(MmsVariableSpecification)); + + if (unicast) + namedVariable->name = copyString("US"); + else + namedVariable->name = copyString("MS"); + + namedVariable->type = MMS_STRUCTURE; + + namedVariable->typeSpec.structure.elementCount = svCount; + namedVariable->typeSpec.structure.elements = (MmsVariableSpecification**) GLOBAL_CALLOC(svCount, + sizeof(MmsVariableSpecification*)); + + int currentSVCB = 0; + + char dataRefBuffer[130]; + + while (currentSVCB < svCount) { + SVControlBlock* svControlBlock = getSVCBForLogicalNodeWithIndex( + self, logicalNode, currentSVCB, unicast); + + MmsVariableSpecification* svTypeSpec = createSVControlBlockMmsStructure(svControlBlock->name, unicast); + + MmsValue* svValues = MmsValue_newStructure(svTypeSpec); + + namedVariable->typeSpec.structure.elements[currentSVCB] = svTypeSpec; + + int currentIndex = 0; + + /* SvEna */ + MmsValue* svEna = MmsValue_getElement(svValues, currentIndex++); + + MmsValue* resv = NULL; + + if (unicast) { + /* Resv */ + resv = MmsValue_getElement(svValues, currentIndex++); + } + + + /* SvID */ + MmsValue* svID = MmsValue_getElement(svValues, currentIndex++); + MmsValue_setVisibleString(svID, svControlBlock->svId); + + /* DatSet */ + MmsValue* dataSetRef = MmsValue_getElement(svValues, currentIndex++); + + createDataSetReference(dataRefBuffer, MmsDomain_getName(domain), + logicalNode->name, svControlBlock->dataSetName); + + MmsValue_setVisibleString(dataSetRef, dataRefBuffer); + + /* ConfRev */ + MmsValue* confRev = MmsValue_getElement(svValues, currentIndex++); + MmsValue_setInt32(confRev, svControlBlock->confRev); + + /* SmpRate */ + MmsValue* smpRate = MmsValue_getElement(svValues, currentIndex++); + MmsValue_setInt32(smpRate, svControlBlock->smpRate); + + /* OptFlds */ + MmsValue* optFlds = MmsValue_getElement(svValues, currentIndex++); + MmsValue_setBitStringFromInteger(optFlds, svControlBlock->optFlds); + + /* SmpMod */ + MmsValue* smpMod = MmsValue_getElement(svValues, currentIndex++); + MmsValue_setInt32(smpMod, svControlBlock->smpMod); + + /* Set communication parameters - DstAddress */ + uint8_t priority = CONFIG_GOOSE_DEFAULT_PRIORITY; + uint8_t dstAddr[] = CONFIG_GOOSE_DEFAULT_DST_ADDRESS; + uint16_t vid = CONFIG_GOOSE_DEFAULT_VLAN_ID; + uint16_t appId = CONFIG_GOOSE_DEFAULT_APPID; + + if (svControlBlock->dstAddress != NULL) { + priority = svControlBlock->dstAddress->vlanPriority; + vid = svControlBlock->dstAddress->vlanId; + appId = svControlBlock->dstAddress->appId; + + int i; + for (i = 0; i < 6; i++) { + dstAddr[i] = svControlBlock->dstAddress->dstAddress[i]; + } + } + + MmsValue* dstAddress = MmsValue_getElement(svValues, currentIndex++); + + MmsValue* addr = MmsValue_getElement(dstAddress, 0); + MmsValue_setOctetString(addr, dstAddr, 6); + + MmsValue* prio = MmsValue_getElement(dstAddress, 1); + MmsValue_setUint8(prio, priority); + + MmsValue* vlanId = MmsValue_getElement(dstAddress, 2); + MmsValue_setUint16(vlanId, vid); + + MmsValue* appIdVal = MmsValue_getElement(dstAddress, 3); + MmsValue_setUint16(appIdVal, appId); + + /* noASDU */ + MmsValue* noASDU = MmsValue_getElement(svValues, currentIndex++); + MmsValue_setInt32(noASDU, svControlBlock->noASDU); + + MmsSampledValueControlBlock mmsSvCb = MmsSampledValueControlBlock_create(); + + mmsSvCb->mmsValue = svValues; + mmsSvCb->svEnaValue = svEna; + mmsSvCb->resvValue = resv; + mmsSvCb->mmsType = svTypeSpec; + mmsSvCb->domain = domain; + mmsSvCb->logicalNode = logicalNode; + mmsSvCb->name = svControlBlock->name; + + LinkedList_add(self->svControls, (void*) mmsSvCb); + + currentSVCB++; + } + + return namedVariable; +} + +#endif /* (CONFIG_IEC61850_SAMPLED_VALUES_SUPPORT == 1) */ diff --git a/src/iec61850/server/mms_mapping/reporting.c b/src/iec61850/server/mms_mapping/reporting.c index 61ee939f..2ce1a3ff 100644 --- a/src/iec61850/server/mms_mapping/reporting.c +++ b/src/iec61850/server/mms_mapping/reporting.c @@ -43,6 +43,10 @@ #if (CONFIG_IEC61850_REPORT_SERVICE == 1) +#ifndef CONFIG_IEC61850_BRCB_WITH_RESVTMS +#define CONFIG_IEC61850_BRCB_WITH_RESVTMS 0 +#endif + static ReportBuffer* ReportBuffer_create(void) { @@ -53,7 +57,7 @@ ReportBuffer_create(void) self->memoryBlockSize = CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE; self->memoryBlock = (uint8_t*) GLOBAL_MALLOC(self->memoryBlockSize); self->reportsCount = 0; - self->isOverflow = false; + self->isOverflow = true; return self; } @@ -216,10 +220,15 @@ ReportControl_getRCBValue(ReportControl* rc, char* elementName) return MmsValue_getElement(rc->rcbValues, 11); else if (strcmp(elementName, "TimeofEntry") == 0) return MmsValue_getElement(rc->rcbValues, 12); +#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1) else if (strcmp(elementName, "ResvTms") == 0) return MmsValue_getElement(rc->rcbValues, 13); else if (strcmp(elementName, "Owner") == 0) return MmsValue_getElement(rc->rcbValues, 14); +#else + else if (strcmp(elementName, "Owner") == 0) + return MmsValue_getElement(rc->rcbValues, 13); +#endif } else { if (strcmp(elementName, "RptID") == 0) return MmsValue_getElement(rc->rcbValues, 0); @@ -499,15 +508,30 @@ updateReportDataset(MmsMapping* mapping, ReportControl* rc, MmsValue* newDatSet, if (dataSet == NULL) { + /* check if association specific data set is requested */ + + if (dataSetName[0] == '@') { - if (connection != NULL) { - MmsNamedVariableList mmsVariableList - = MmsServerConnection_getNamedVariableList(connection, dataSetName + 1); - if (mmsVariableList != NULL) - dataSet = MmsMapping_createDataSetByNamedVariableList(mapping, mmsVariableList); + if (rc->buffered == false) { /* for buffered report non-permanent datasets are not allowed */ + if (connection != NULL) { + MmsNamedVariableList mmsVariableList + = MmsServerConnection_getNamedVariableList(connection, dataSetName + 1); + + if (mmsVariableList != NULL) + dataSet = MmsMapping_createDataSetByNamedVariableList(mapping, mmsVariableList); + } } + + } + + /* check for VMD specific data set */ + else if (dataSetName[0] == '/') { + MmsNamedVariableList mmsVariableList = MmsDevice_getNamedVariableListWithName(mapping->mmsDevice, dataSetName + 1); + + if (mmsVariableList != NULL) + dataSet = MmsMapping_createDataSetByNamedVariableList(mapping, mmsVariableList); } } @@ -634,7 +658,7 @@ refreshTriggerOptions(ReportControl* rc) static void purgeBuf(ReportControl* rc) { - if (DEBUG_IED_SERVER) printf("reporting.c: run purgeBuf\n"); + if (DEBUG_IED_SERVER) printf("IED_SERVER: reporting.c: run purgeBuf\n"); ReportBuffer* reportBuffer = rc->reportBuffer; @@ -836,15 +860,23 @@ createBufferedReportControlBlock(ReportControlBlock* reportControlBlock, rcb->name = copyString(reportControlBlock->name); rcb->type = MMS_STRUCTURE; + int brcbElementCount; + +#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1) + brcbElementCount = 15; +#else + brcbElementCount = 14; +#endif + + MmsValue* mmsValue = (MmsValue*) GLOBAL_CALLOC(1, sizeof(MmsValue)); mmsValue->deleteValue = false; mmsValue->type = MMS_STRUCTURE; - mmsValue->value.structure.size = 15; - mmsValue->value.structure.components = (MmsValue**) GLOBAL_CALLOC(15, sizeof(MmsValue*)); - - rcb->typeSpec.structure.elementCount = 15; + mmsValue->value.structure.size = brcbElementCount; + mmsValue->value.structure.components = (MmsValue**) GLOBAL_CALLOC(brcbElementCount, sizeof(MmsValue*)); - rcb->typeSpec.structure.elements = (MmsVariableSpecification**) GLOBAL_CALLOC(15, + rcb->typeSpec.structure.elementCount = brcbElementCount; + rcb->typeSpec.structure.elements = (MmsVariableSpecification**) GLOBAL_CALLOC(brcbElementCount, sizeof(MmsVariableSpecification*)); MmsVariableSpecification* namedVariable = @@ -957,19 +989,24 @@ createBufferedReportControlBlock(ReportControlBlock* reportControlBlock, reportControl->timeOfEntry = mmsValue->value.structure.components[12]; + int currentIndex = 13; + +#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1) namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); namedVariable->name = copyString("ResvTms"); - namedVariable->type = MMS_UNSIGNED; - namedVariable->typeSpec.unsignedInteger = 32; - rcb->typeSpec.structure.elements[13] = namedVariable; - mmsValue->value.structure.components[13] = MmsValue_newUnsigned(32); + namedVariable->type = MMS_INTEGER; + namedVariable->typeSpec.integer = 16; + rcb->typeSpec.structure.elements[currentIndex] = namedVariable; + mmsValue->value.structure.components[currentIndex] = MmsValue_newInteger(16); + currentIndex++; +#endif /* (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1) */ namedVariable = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); namedVariable->name = copyString("Owner"); namedVariable->type = MMS_OCTET_STRING; namedVariable->typeSpec.octetString = -64; - rcb->typeSpec.structure.elements[14] = namedVariable; - mmsValue->value.structure.components[14] = MmsValue_newOctetString(0, 4); /* size 4 is enough to store client IPv4 address */ + rcb->typeSpec.structure.elements[currentIndex] = namedVariable; + mmsValue->value.structure.components[currentIndex] = MmsValue_newOctetString(0, 128); /* size 4 is enough to store client IPv4 address */ reportControl->rcbValues = mmsValue; @@ -1143,6 +1180,24 @@ updateOwner(ReportControl* rc, MmsServerConnection connection) #endif /* CONFIG_REPORTING_SUPPORTS_OWNER == 1*/ } + +static bool +checkForZeroEntryID(MmsValue* value) +{ + uint8_t* buffer = MmsValue_getOctetStringBuffer(value); + + int i = 0; + + while (i < 8) { + if (buffer[i] != 0) + return false; + + i++; + } + + return true; +} + static bool checkReportBufferForEntryID(ReportControl* rc, MmsValue* value) { @@ -1154,18 +1209,14 @@ checkReportBufferForEntryID(ReportControl* rc, MmsValue* value) if (memcmp(entry->entryId, value->value.octetString.buf, 8) == 0) { ReportBufferEntry* nextEntryForResync = entry->next; - if (nextEntryForResync != NULL) { - rc->reportBuffer->nextToTransmit = nextEntryForResync; - rc->isResync = true; - } - else { - rc->isResync = false; - rc->reportBuffer->nextToTransmit = NULL; - } + rc->reportBuffer->nextToTransmit = nextEntryForResync; + rc->isResync = true; retVal = true; break; } + + entry = entry->next; } return retVal; @@ -1202,7 +1253,7 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme } if (DEBUG_IED_SERVER) - printf("Activate report for client %s\n", + printf("IED_SERVER: Activate report for client %s\n", MmsServerConnection_getClientAddress(connection)); if (updateReportDataset(self, rc, NULL, connection)) { @@ -1213,8 +1264,17 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme MmsValue_update(rptEna, value); + if (rc->buffered) { + + if (rc->isResync == false) { + rc->reportBuffer->nextToTransmit = rc->reportBuffer->oldestReport; + rc->reportBuffer->isOverflow = true; + } + + rc->isResync = false; + } + rc->enabled = true; - rc->isResync = false; rc->gi = false; refreshBufferTime(rc); @@ -1245,10 +1305,14 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme } if (DEBUG_IED_SERVER) - printf("Deactivate report for client %s\n", + printf("IED_SERVER: Deactivate report for client %s\n", MmsServerConnection_getClientAddress(connection)); - if (rc->buffered == false) { + if (rc->buffered) { + rc->reportBuffer->isOverflow = true; + rc->isResync = false; + } + else { GLOBAL_FREEMEM(rc->inclusionFlags); rc->inclusionFlags = NULL; @@ -1270,8 +1334,10 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme if (strcmp(elementName, "GI") == 0) { if ((rc->enabled) && (rc->clientConnection == connection)) { - if (MmsValue_getBoolean(value)) - rc->gi = true; + if (MmsValue_getBoolean(value)) { + if (rc->triggerOps & TRG_OPT_GI) + rc->gi = true; + } retVal = DATA_ACCESS_ERROR_SUCCESS; goto exit_function; @@ -1321,7 +1387,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme increaseConfRev(rc); } else { - printf("BBBBBB\n"); retVal = DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID; goto exit_function; } @@ -1360,19 +1425,30 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme goto exit_function; } - else if (strcmp(elementName, "EntryId") == 0) { + else if (strcmp(elementName, "EntryID") == 0) { + if (MmsValue_getOctetStringSize(value) != 8) { retVal = DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID; goto exit_function; } - if (!checkReportBufferForEntryID(rc, value)) { - retVal = DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID; - goto exit_function; + if (checkForZeroEntryID(value) == false) { + + if (!checkReportBufferForEntryID(rc, value)) { + rc->reportBuffer->isOverflow = true; + retVal = DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID; + goto exit_function; + } + + rc->reportBuffer->isOverflow = false; + } + else { + rc->reportBuffer->nextToTransmit = rc->reportBuffer->oldestReport; + rc->reportBuffer->isOverflow = true; + rc->isResync = false; } MmsValue* entryID = ReportControl_getRCBValue(rc, elementName); - MmsValue_update(entryID, value); goto exit_function; @@ -1392,13 +1468,12 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme goto exit_function; } - else if ((strcmp(elementName, "ConfRev") == 0) || (strcmp(elementName, "SqNum") == 0)) { - retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; - goto exit_function; - } else if (strcmp(elementName, "RptID") == 0) { MmsValue* rptId = ReportControl_getRCBValue(rc, elementName); + if (rc->buffered) + purgeBuf(rc); + if (strlen(MmsValue_toString(value)) == 0) updateWithDefaultRptId(rc, rptId); else @@ -1406,6 +1481,10 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme goto exit_function; } + else if (strcmp(elementName, "ConfRev") == 0) { + retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; + goto exit_function; + } else if (strcmp(elementName, "SqNum") == 0) { retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; goto exit_function; @@ -1414,6 +1493,10 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; goto exit_function; } + else if (strcmp(elementName, "TimeofEntry") == 0) { + retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; + goto exit_function; + } MmsValue* rcbValue = ReportControl_getRCBValue(rc, elementName); @@ -1474,6 +1557,7 @@ printEnqueuedReports(ReportControl* reportControl) { ReportBuffer* rb = reportControl->reportBuffer; +#if 0 printf("IED_SERVER: --- Enqueued reports ---\n"); if (rb->oldestReport == NULL) { @@ -1504,7 +1588,8 @@ printEnqueuedReports(ReportControl* reportControl) entry = entry->next; } } - printf("IED_SERVER: reports: %i\n", rb->reportsCount); +#endif + printf("IED_SERVER: BRCB %s reports: %i\n", reportControl->name, rb->reportsCount); printf("IED_SERVER: -------------------------\n"); } @@ -1518,6 +1603,42 @@ printReportId(ReportBufferEntry* report) } #endif + +static void +removeAllGIReportsFromReportBuffer(ReportBuffer* reportBuffer) +{ + ReportBufferEntry* currentReport = reportBuffer->oldestReport; + ReportBufferEntry* lastReport = NULL; + + while (currentReport != NULL) { + if (currentReport->flags & 2) { + + if (currentReport == reportBuffer->oldestReport) { + reportBuffer->oldestReport = currentReport->next; + } + else { + lastReport->next = currentReport->next; + + } + +#if (DEBUG_IED_SERVER == 1) + printf("IED_SERVER: REMOVE old GI report with ID "); + printReportId(currentReport); + printf("\n"); +#endif + + if (reportBuffer->nextToTransmit == currentReport) + reportBuffer->nextToTransmit = currentReport->next; + + currentReport = currentReport->next; + } + else { + lastReport = currentReport; + currentReport = currentReport->next; + } + } +} + static void enqueueReport(ReportControl* reportControl, bool isIntegrity, bool isGI, uint64_t timeOfEntry) { @@ -1582,6 +1703,8 @@ enqueueReport(ReportControl* reportControl, bool isIntegrity, bool isGI, uint64_ return; } + if (isGI) removeAllGIReportsFromReportBuffer(buffer); + uint8_t* entryBufPos = NULL; uint8_t* entryStartPos; @@ -1605,7 +1728,7 @@ enqueueReport(ReportControl* reportControl, bool isIntegrity, bool isGI, uint64_ if (DEBUG_IED_SERVER) printf ("IED_SERVER: Last buffer offset: %i\n", (int) ((uint8_t*) buffer->lastEnqueuedReport - buffer->memoryBlock)); - if (buffer->lastEnqueuedReport == buffer->oldestReport) { // --> buffer->reportsCount = 1? + if (buffer->lastEnqueuedReport == buffer->oldestReport) { /* --> buffer->reportsCount == 1 */ assert(buffer->reportsCount == 1); entryBufPos = (uint8_t*) ((uint8_t*) buffer->lastEnqueuedReport + buffer->lastEnqueuedReport->entryLength); @@ -1639,11 +1762,14 @@ enqueueReport(ReportControl* reportControl, bool isIntegrity, bool isGI, uint64_ if ((entryBufPos + bufferEntrySize) > (buffer->memoryBlock + buffer->memoryBlockSize)) { /* buffer overflow */ entryBufPos = buffer->memoryBlock; + /* remove old reports until enough space for new entry is available */ while ((entryBufPos + bufferEntrySize) > (uint8_t*) buffer->oldestReport) { assert(buffer->oldestReport != NULL); - if (buffer->nextToTransmit == buffer->oldestReport) + if (buffer->nextToTransmit == buffer->oldestReport) { buffer->nextToTransmit = buffer->oldestReport->next; + buffer->isOverflow = true; + } #if (DEBUG_IED_SERVER == 1) printf("IED_SERVER: REMOVE report with ID "); @@ -1651,8 +1777,6 @@ enqueueReport(ReportControl* reportControl, bool isIntegrity, bool isGI, uint64_ printf("\n"); #endif - buffer->isOverflow = true; - buffer->oldestReport = buffer->oldestReport->next; buffer->reportsCount--; @@ -1677,8 +1801,10 @@ enqueueReport(ReportControl* reportControl, bool isIntegrity, bool isGI, uint64_ while ((uint8_t*) buffer->oldestReport > buffer->memoryBlock) { assert(buffer->oldestReport != NULL); - if (buffer->nextToTransmit == buffer->oldestReport) + if (buffer->nextToTransmit == buffer->oldestReport) { buffer->nextToTransmit = buffer->oldestReport->next; + buffer->isOverflow = true; + } #if (DEBUG_IED_SERVER == 1) printf("IED_SERVER: REMOVE report with ID "); @@ -1697,8 +1823,10 @@ enqueueReport(ReportControl* reportControl, bool isIntegrity, bool isGI, uint64_ assert(buffer->oldestReport != NULL); - if (buffer->nextToTransmit == buffer->oldestReport) + if (buffer->nextToTransmit == buffer->oldestReport) { buffer->nextToTransmit = buffer->oldestReport->next; + buffer->isOverflow = true; + } #if (DEBUG_IED_SERVER == 1) printf("IED_SERVER: REMOVE report with ID "); @@ -1718,8 +1846,10 @@ enqueueReport(ReportControl* reportControl, bool isIntegrity, bool isGI, uint64_ assert(buffer->oldestReport != NULL); - if (buffer->nextToTransmit == buffer->oldestReport) + if (buffer->nextToTransmit == buffer->oldestReport) { buffer->nextToTransmit = buffer->oldestReport->next; + buffer->isOverflow = true; + } #if (DEBUG_IED_SERVER == 1) printf("IED_SERVER: REMOVE report with ID "); @@ -1930,8 +2060,10 @@ sendNextReportEntry(ReportControl* self) if (timeOfEntry == NULL) goto return_out_of_memory; timeOfEntry->deleteValue = 0; - timeOfEntry->type = MMS_UTC_TIME; - MmsValue_setUtcTimeMs(timeOfEntry, report->timeOfEntry); + timeOfEntry->type = MMS_BINARY_TIME; + timeOfEntry->value.binaryTime.size = 6; + + MmsValue_setBinaryTime(timeOfEntry, report->timeOfEntry); if (MemAllocLinkedList_add(reportElements, timeOfEntry) == NULL) goto return_out_of_memory; diff --git a/src/iec61850/server/model/cdc.c b/src/iec61850/server/model/cdc.c index 9391b998..eb6806e9 100644 --- a/src/iec61850/server/model/cdc.c +++ b/src/iec61850/server/model/cdc.c @@ -35,12 +35,12 @@ DataAttribute* CAC_AnalogueValue_create(const char* name, ModelNode* parent, FunctionalConstraint fc, uint8_t triggerOptions, bool isIntegerNotFloat) { - DataAttribute* analogeValue = DataAttribute_create(name, parent, CONSTRUCTED, fc, triggerOptions, 0, 0); + DataAttribute* analogeValue = DataAttribute_create(name, parent, IEC61850_CONSTRUCTED, fc, triggerOptions, 0, 0); if (isIntegerNotFloat) - DataAttribute_create("i", (ModelNode*) analogeValue, INT32, fc, triggerOptions, 0, 0); + DataAttribute_create("i", (ModelNode*) analogeValue, IEC61850_INT32, fc, triggerOptions, 0, 0); else - DataAttribute_create("f", (ModelNode*) analogeValue, FLOAT32, fc, triggerOptions, 0, 0); + DataAttribute_create("f", (ModelNode*) analogeValue, IEC61850_FLOAT32, fc, triggerOptions, 0, 0); return analogeValue; } @@ -48,12 +48,12 @@ CAC_AnalogueValue_create(const char* name, ModelNode* parent, FunctionalConstrai DataAttribute* CAC_ValWithTrans_create(const char* name, ModelNode* parent, FunctionalConstraint fc, uint8_t triggerOptions, bool hasTransientIndicator) { - DataAttribute* valWithTrans = DataAttribute_create(name, parent, CONSTRUCTED, fc, triggerOptions, 0, 0); + DataAttribute* valWithTrans = DataAttribute_create(name, parent, IEC61850_CONSTRUCTED, fc, triggerOptions, 0, 0); - DataAttribute_create("posVal", (ModelNode*) valWithTrans, INT8, fc, triggerOptions, 0, 0); + DataAttribute_create("posVal", (ModelNode*) valWithTrans, IEC61850_INT8, fc, triggerOptions, 0, 0); if (hasTransientIndicator) - DataAttribute_create("transInd", (ModelNode*) valWithTrans, BOOLEAN, fc, triggerOptions, 0, 0); + DataAttribute_create("transInd", (ModelNode*) valWithTrans, IEC61850_BOOLEAN, fc, triggerOptions, 0, 0); return valWithTrans; } @@ -64,7 +64,7 @@ CAC_ValWithTrans_create(const char* name, ModelNode* parent, FunctionalConstrain DataAttribute* CAC_Vector_create(const char* name, ModelNode* parent, uint32_t options, FunctionalConstraint fc, uint8_t triggerOptions) { - DataAttribute* vector = DataAttribute_create(name, parent, CONSTRUCTED, fc, triggerOptions, 0, 0); + DataAttribute* vector = DataAttribute_create(name, parent, IEC61850_CONSTRUCTED, fc, triggerOptions, 0, 0); CAC_AnalogueValue_create("mag", (ModelNode*) vector, fc, triggerOptions, false); @@ -77,13 +77,13 @@ CAC_Vector_create(const char* name, ModelNode* parent, uint32_t options, Functio DataAttribute* CAC_Point_create(const char* name, ModelNode* parent, FunctionalConstraint fc, uint8_t triggerOptions, bool hasZVal) { - DataAttribute* point = DataAttribute_create(name, parent, CONSTRUCTED, fc, triggerOptions, 0, 0); + DataAttribute* point = DataAttribute_create(name, parent, IEC61850_CONSTRUCTED, fc, triggerOptions, 0, 0); - DataAttribute_create("xVal", (ModelNode*) point, FLOAT32, fc, triggerOptions, 0, 0); - DataAttribute_create("yVal", (ModelNode*) point, FLOAT32, fc, triggerOptions, 0, 0); + DataAttribute_create("xVal", (ModelNode*) point, IEC61850_FLOAT32, fc, triggerOptions, 0, 0); + DataAttribute_create("yVal", (ModelNode*) point, IEC61850_FLOAT32, fc, triggerOptions, 0, 0); if (hasZVal) - DataAttribute_create("zVal", (ModelNode*) point, FLOAT32, fc, triggerOptions, 0, 0); + DataAttribute_create("zVal", (ModelNode*) point, IEC61850_FLOAT32, fc, triggerOptions, 0, 0); return point; } @@ -91,10 +91,10 @@ CAC_Point_create(const char* name, ModelNode* parent, FunctionalConstraint fc, u DataAttribute* CAC_ScaledValueConfig_create(const char* name, ModelNode* parent) { - DataAttribute* scaling = DataAttribute_create(name, parent, CONSTRUCTED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute* scaling = DataAttribute_create(name, parent, IEC61850_CONSTRUCTED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); - DataAttribute_create("scaleFactor", (ModelNode*) scaling, FLOAT32, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); - DataAttribute_create("offset", (ModelNode*) scaling, FLOAT32, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("scaleFactor", (ModelNode*) scaling, IEC61850_FLOAT32, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("offset", (ModelNode*) scaling, IEC61850_FLOAT32, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); return scaling; } @@ -102,12 +102,12 @@ CAC_ScaledValueConfig_create(const char* name, ModelNode* parent) DataAttribute* CAC_Unit_create(const char* name, ModelNode* parent, bool hasMagnitude) { - DataAttribute* unit = DataAttribute_create(name, parent, CONSTRUCTED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute* unit = DataAttribute_create(name, parent, IEC61850_CONSTRUCTED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); - DataAttribute_create("SIUnit", (ModelNode*) unit, ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("SIUnit", (ModelNode*) unit, IEC61850_ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); if (hasMagnitude) - DataAttribute_create("multiplier", (ModelNode*) unit, ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("multiplier", (ModelNode*) unit, IEC61850_ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); return unit; } @@ -119,10 +119,10 @@ CAC_Unit_create(const char* name, ModelNode* parent, bool hasMagnitude) static void addOriginator(char* name, ModelNode* parent, FunctionalConstraint fc) { - DataAttribute* origin = DataAttribute_create(name, parent, CONSTRUCTED, fc, 0 ,0 ,0); + DataAttribute* origin = DataAttribute_create(name, parent, IEC61850_CONSTRUCTED, fc, 0 ,0 ,0); - DataAttribute_create("orCat", (ModelNode*) origin, ENUMERATED, fc, 0, 0, 0); - DataAttribute_create("orIdent", (ModelNode*) origin, OCTET_STRING_64, fc, 0, 0, 0); + DataAttribute_create("orCat", (ModelNode*) origin, IEC61850_ENUMERATED, fc, 0, 0, 0); + DataAttribute_create("orIdent", (ModelNode*) origin, IEC61850_OCTET_STRING_64, fc, 0, 0, 0); } @@ -132,38 +132,38 @@ addGenericOperateElements(DataAttribute* oper, DataAttributeType type, bool isTi DataAttribute_create("ctlVal", (ModelNode*) oper, type, IEC61850_FC_CO, 0, 0, 0); if (isTimeActivated) - DataAttribute_create("operTm", (ModelNode*) oper, TIMESTAMP, IEC61850_FC_CO, 0, 0, 0); + DataAttribute_create("operTm", (ModelNode*) oper, IEC61850_TIMESTAMP, IEC61850_FC_CO, 0, 0, 0); addOriginator("origin", (ModelNode*) oper, IEC61850_FC_CO); - DataAttribute_create("ctlNum", (ModelNode*) oper, INT8U, IEC61850_FC_CO, 0, 0, 0); - DataAttribute_create("T", (ModelNode*) oper, TIMESTAMP, IEC61850_FC_CO, 0, 0, 0); - DataAttribute_create("Test", (ModelNode*) oper, BOOLEAN, IEC61850_FC_CO, 0, 0, 0); + DataAttribute_create("ctlNum", (ModelNode*) oper, IEC61850_INT8U, IEC61850_FC_CO, 0, 0, 0); + DataAttribute_create("T", (ModelNode*) oper, IEC61850_TIMESTAMP, IEC61850_FC_CO, 0, 0, 0); + DataAttribute_create("Test", (ModelNode*) oper, IEC61850_BOOLEAN, IEC61850_FC_CO, 0, 0, 0); if (hasCheck) - DataAttribute_create("Check", (ModelNode*) oper, CHECK, IEC61850_FC_CO, 0, 0, 0); + DataAttribute_create("Check", (ModelNode*) oper, IEC61850_CHECK, IEC61850_FC_CO, 0, 0, 0); } static void addCommonOperateElements(DataAttribute* oper, bool isTimeActivated, bool hasCheck) { if (isTimeActivated) - DataAttribute_create("operTm", (ModelNode*) oper, TIMESTAMP, IEC61850_FC_CO, 0, 0, 0); + DataAttribute_create("operTm", (ModelNode*) oper, IEC61850_TIMESTAMP, IEC61850_FC_CO, 0, 0, 0); addOriginator("origin", (ModelNode*) oper, IEC61850_FC_CO); - DataAttribute_create("ctlNum", (ModelNode*) oper, INT8U, IEC61850_FC_CO, 0, 0, 0); - DataAttribute_create("T", (ModelNode*) oper, TIMESTAMP, IEC61850_FC_CO, 0, 0, 0); - DataAttribute_create("Test", (ModelNode*) oper, BOOLEAN, IEC61850_FC_CO, 0, 0, 0); + DataAttribute_create("ctlNum", (ModelNode*) oper, IEC61850_INT8U, IEC61850_FC_CO, 0, 0, 0); + DataAttribute_create("T", (ModelNode*) oper, IEC61850_TIMESTAMP, IEC61850_FC_CO, 0, 0, 0); + DataAttribute_create("Test", (ModelNode*) oper, IEC61850_BOOLEAN, IEC61850_FC_CO, 0, 0, 0); if (hasCheck) - DataAttribute_create("Check", (ModelNode*) oper, CHECK, IEC61850_FC_CO, 0, 0, 0); + DataAttribute_create("Check", (ModelNode*) oper, IEC61850_CHECK, IEC61850_FC_CO, 0, 0, 0); } static DataAttribute* CDA_Oper(ModelNode* parent, DataAttributeType type, bool isTImeActivated) { - DataAttribute* oper = DataAttribute_create("Oper", parent, CONSTRUCTED, IEC61850_FC_CO, 0, 0, 0); + DataAttribute* oper = DataAttribute_create("Oper", parent, IEC61850_CONSTRUCTED, IEC61850_FC_CO, 0, 0, 0); addGenericOperateElements(oper, type, isTImeActivated, true); @@ -173,7 +173,7 @@ CDA_Oper(ModelNode* parent, DataAttributeType type, bool isTImeActivated) static DataAttribute* CDA_SBOw(ModelNode* parent, DataAttributeType type, bool isTImeActivated) { - DataAttribute* oper = DataAttribute_create("SBOw", parent, CONSTRUCTED, IEC61850_FC_CO, 0, 0, 0); + DataAttribute* oper = DataAttribute_create("SBOw", parent, IEC61850_CONSTRUCTED, IEC61850_FC_CO, 0, 0, 0); addGenericOperateElements(oper, type, isTImeActivated, true); @@ -183,7 +183,7 @@ CDA_SBOw(ModelNode* parent, DataAttributeType type, bool isTImeActivated) static DataAttribute* CDA_Cancel(ModelNode* parent, DataAttributeType type, bool isTImeActivated) { - DataAttribute* oper = DataAttribute_create("Cancel", parent, CONSTRUCTED, IEC61850_FC_CO, 0, 0, 0); + DataAttribute* oper = DataAttribute_create("Cancel", parent, IEC61850_CONSTRUCTED, IEC61850_FC_CO, 0, 0, 0); addGenericOperateElements(oper, type, isTImeActivated, false); @@ -199,8 +199,8 @@ CDA_Cancel(ModelNode* parent, DataAttributeType type, bool isTImeActivated) static void CDC_addTimeQuality(DataObject* dataObject, FunctionalConstraint fc) { - DataAttribute_create("q", (ModelNode*) dataObject, QUALITY, fc, TRG_OPT_QUALITY_CHANGED, 0, 0); - DataAttribute_create("t", (ModelNode*) dataObject, TIMESTAMP, fc, 0, 0, 0); + DataAttribute_create("q", (ModelNode*) dataObject, IEC61850_QUALITY, fc, TRG_OPT_QUALITY_CHANGED, 0, 0); + DataAttribute_create("t", (ModelNode*) dataObject, IEC61850_TIMESTAMP, fc, 0, 0, 0); } static void @@ -213,21 +213,21 @@ CDC_addStatusToDataObject(DataObject* dataObject, DataAttributeType statusType) static void CDC_addOptionPicsSubst(DataObject* dataObject, DataAttributeType type) { - DataAttribute_create("subEna", (ModelNode*) dataObject, BOOLEAN, IEC61850_FC_SV, 0, 0, 0); + DataAttribute_create("subEna", (ModelNode*) dataObject, IEC61850_BOOLEAN, IEC61850_FC_SV, 0, 0, 0); DataAttribute_create("subVal", (ModelNode*) dataObject, type, IEC61850_FC_SV, 0, 0, 0); - DataAttribute_create("subQ", (ModelNode*) dataObject, QUALITY, IEC61850_FC_SV, 0, 0, 0); - DataAttribute_create("subID", (ModelNode*) dataObject, VISIBLE_STRING_64, IEC61850_FC_SV, 0, 0, 0); + DataAttribute_create("subQ", (ModelNode*) dataObject, IEC61850_QUALITY, IEC61850_FC_SV, 0, 0, 0); + DataAttribute_create("subID", (ModelNode*) dataObject, IEC61850_VISIBLE_STRING_64, IEC61850_FC_SV, 0, 0, 0); } static void CDC_addOptionPicsSubstValWithTrans(DataObject* dataObject, bool hasTransientIndicator) { - DataAttribute_create("subEna", (ModelNode*) dataObject, BOOLEAN, IEC61850_FC_SV, 0, 0, 0); + DataAttribute_create("subEna", (ModelNode*) dataObject, IEC61850_BOOLEAN, IEC61850_FC_SV, 0, 0, 0); CAC_ValWithTrans_create("subVal", (ModelNode*) dataObject, IEC61850_FC_SV, 0, hasTransientIndicator); - DataAttribute_create("subQ", (ModelNode*) dataObject, QUALITY, IEC61850_FC_SV, 0, 0, 0); - DataAttribute_create("subID", (ModelNode*) dataObject, VISIBLE_STRING_64, IEC61850_FC_SV, 0, 0, 0); + DataAttribute_create("subQ", (ModelNode*) dataObject, IEC61850_QUALITY, IEC61850_FC_SV, 0, 0, 0); + DataAttribute_create("subID", (ModelNode*) dataObject, IEC61850_VISIBLE_STRING_64, IEC61850_FC_SV, 0, 0, 0); } /* Add optional attributes for extension (name spaces) and textual descriptions */ @@ -236,18 +236,18 @@ CDC_addStandardOptions(DataObject* dataObject, uint32_t options) { /* Standard options ? */ if (options & CDC_OPTION_DESC) - DataAttribute_create("d",(ModelNode*) dataObject, VISIBLE_STRING_255, IEC61850_FC_DC, 0, 0, 0); + DataAttribute_create("d",(ModelNode*) dataObject, IEC61850_VISIBLE_STRING_255, IEC61850_FC_DC, 0, 0, 0); if (options & CDC_OPTION_DESC_UNICODE) - DataAttribute_create("dU", (ModelNode*) dataObject, UNICODE_STRING_255, IEC61850_FC_DC, 0, 0, 0); + DataAttribute_create("dU", (ModelNode*) dataObject, IEC61850_UNICODE_STRING_255, IEC61850_FC_DC, 0, 0, 0); if (options & CDC_OPTION_AC_DLNDA) { - DataAttribute_create("cdcNs", (ModelNode*) dataObject, VISIBLE_STRING_255, IEC61850_FC_EX, 0, 0, 0); - DataAttribute_create("cdcName", (ModelNode*) dataObject, VISIBLE_STRING_255, IEC61850_FC_EX, 0, 0, 0); + DataAttribute_create("cdcNs", (ModelNode*) dataObject, IEC61850_VISIBLE_STRING_255, IEC61850_FC_EX, 0, 0, 0); + DataAttribute_create("cdcName", (ModelNode*) dataObject, IEC61850_VISIBLE_STRING_255, IEC61850_FC_EX, 0, 0, 0); } if (options & CDC_OPTION_AC_DLN) - DataAttribute_create("dataNs", (ModelNode*) dataObject, VISIBLE_STRING_255, IEC61850_FC_EX, 0, 0, 0); + DataAttribute_create("dataNs", (ModelNode*) dataObject, IEC61850_VISIBLE_STRING_255, IEC61850_FC_EX, 0, 0, 0); } /************************************************ @@ -259,13 +259,13 @@ CDC_SPS_create(const char* dataObjectName, ModelNode* parent, uint32_t options) { DataObject* newSPS = DataObject_create(dataObjectName, parent, 0); - CDC_addStatusToDataObject(newSPS, BOOLEAN); + CDC_addStatusToDataObject(newSPS, IEC61850_BOOLEAN); if (options & CDC_OPTION_PICS_SUBST) - CDC_addOptionPicsSubst(newSPS, BOOLEAN); + CDC_addOptionPicsSubst(newSPS, IEC61850_BOOLEAN); if (options & CDC_OPTION_BLK_ENA) - DataAttribute_create("blkEna", (ModelNode*) newSPS, BOOLEAN, IEC61850_FC_BL, 0, 0, 0); + DataAttribute_create("blkEna", (ModelNode*) newSPS, IEC61850_BOOLEAN, IEC61850_FC_BL, 0, 0, 0); CDC_addStandardOptions(newSPS, options); @@ -277,13 +277,13 @@ CDC_DPS_create(const char* dataObjectName, ModelNode* parent, uint32_t options) { DataObject* newDPS = DataObject_create(dataObjectName, parent, 0); - CDC_addStatusToDataObject(newDPS, CODEDENUM); + CDC_addStatusToDataObject(newDPS, IEC61850_CODEDENUM); if (options & CDC_OPTION_PICS_SUBST) - CDC_addOptionPicsSubst(newDPS, CODEDENUM); + CDC_addOptionPicsSubst(newDPS, IEC61850_CODEDENUM); if (options & CDC_OPTION_BLK_ENA) - DataAttribute_create("blkEna", (ModelNode*) newDPS, BOOLEAN, IEC61850_FC_BL, 0, 0, 0); + DataAttribute_create("blkEna", (ModelNode*) newDPS, IEC61850_BOOLEAN, IEC61850_FC_BL, 0, 0, 0); CDC_addStandardOptions(newDPS, options); @@ -295,13 +295,13 @@ CDC_INS_create(const char* dataObjectName, ModelNode* parent, uint32_t options) { DataObject* newINS = DataObject_create(dataObjectName, parent, 0); - CDC_addStatusToDataObject(newINS, INT32); + CDC_addStatusToDataObject(newINS, IEC61850_INT32); if (options & CDC_OPTION_PICS_SUBST) - CDC_addOptionPicsSubst(newINS, INT32); + CDC_addOptionPicsSubst(newINS, IEC61850_INT32); if (options & CDC_OPTION_BLK_ENA) - DataAttribute_create("blkEna", (ModelNode*) newINS, BOOLEAN, IEC61850_FC_BL, 0, 0, 0); + DataAttribute_create("blkEna", (ModelNode*) newINS, IEC61850_BOOLEAN, IEC61850_FC_BL, 0, 0, 0); CDC_addStandardOptions(newINS, options); @@ -314,13 +314,13 @@ CDC_ENS_create(const char* dataObjectName, ModelNode* parent, uint32_t options) { DataObject* newENS = DataObject_create(dataObjectName, parent, 0); - CDC_addStatusToDataObject(newENS, ENUMERATED); + CDC_addStatusToDataObject(newENS, IEC61850_ENUMERATED); if (options & CDC_OPTION_PICS_SUBST) - CDC_addOptionPicsSubst(newENS, ENUMERATED); + CDC_addOptionPicsSubst(newENS, IEC61850_ENUMERATED); if (options & CDC_OPTION_BLK_ENA) - DataAttribute_create("blkEna", (ModelNode*) newENS, BOOLEAN, IEC61850_FC_BL, 0, 0, 0); + DataAttribute_create("blkEna", (ModelNode*) newENS, IEC61850_BOOLEAN, IEC61850_FC_BL, 0, 0, 0); CDC_addStandardOptions(newENS, options); @@ -332,25 +332,25 @@ CDC_BCR_create(const char* dataObjectName, ModelNode* parent, uint32_t options) { DataObject* newBCR = DataObject_create(dataObjectName, parent, 0); - DataAttribute_create("actVal", (ModelNode*) newBCR, INT64, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("actVal", (ModelNode*) newBCR, IEC61850_INT64, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); if (options & CDC_OPTION_FROZEN_VALUE) { - DataAttribute_create("frVal", (ModelNode*) newBCR, INT64, IEC61850_FC_ST, TRG_OPT_DATA_UPDATE, 0, 0); - DataAttribute_create("frTm", (ModelNode*) newBCR, TIMESTAMP, IEC61850_FC_ST, 0, 0, 0); + DataAttribute_create("frVal", (ModelNode*) newBCR, IEC61850_INT64, IEC61850_FC_ST, TRG_OPT_DATA_UPDATE, 0, 0); + DataAttribute_create("frTm", (ModelNode*) newBCR, IEC61850_TIMESTAMP, IEC61850_FC_ST, 0, 0, 0); } CDC_addTimeQuality(newBCR, IEC61850_FC_ST); if (options & CDC_OPTION_UNIT) - DataAttribute_create("units", (ModelNode*) newBCR, ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("units", (ModelNode*) newBCR, IEC61850_ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); - DataAttribute_create("pulsQty", (ModelNode*) newBCR, FLOAT32, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("pulsQty", (ModelNode*) newBCR, IEC61850_FLOAT32, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); if (options & CDC_OPTION_FROZEN_VALUE) { - DataAttribute_create("frEna", (ModelNode*) newBCR, BOOLEAN, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); - DataAttribute_create("strTm", (ModelNode*) newBCR, TIMESTAMP, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); - DataAttribute_create("frPd", (ModelNode*) newBCR, INT32, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); - DataAttribute_create("frRs", (ModelNode*) newBCR, BOOLEAN, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("frEna", (ModelNode*) newBCR, IEC61850_BOOLEAN, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("strTm", (ModelNode*) newBCR, IEC61850_TIMESTAMP, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("frPd", (ModelNode*) newBCR, IEC61850_INT32, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("frRs", (ModelNode*) newBCR, IEC61850_BOOLEAN, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); } CDC_addStandardOptions(newBCR, options); @@ -363,15 +363,15 @@ CDC_SEC_create(const char* dataObjectName, ModelNode* parent, uint32_t options) { DataObject* newSEC = DataObject_create(dataObjectName, parent, 0); - DataAttribute_create("cnt", (ModelNode*) newSEC, INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); - DataAttribute_create("sev", (ModelNode*) newSEC, ENUMERATED, IEC61850_FC_ST, 0, 0, 0); - DataAttribute_create("t", (ModelNode*) newSEC, TIMESTAMP, IEC61850_FC_ST, 0, 0, 0); + DataAttribute_create("cnt", (ModelNode*) newSEC, IEC61850_INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("sev", (ModelNode*) newSEC, IEC61850_ENUMERATED, IEC61850_FC_ST, 0, 0, 0); + DataAttribute_create("t", (ModelNode*) newSEC, IEC61850_TIMESTAMP, IEC61850_FC_ST, 0, 0, 0); if (options & CDC_OPTION_ADDR) - DataAttribute_create("addr", (ModelNode*) newSEC, OCTET_STRING_64, IEC61850_FC_ST, 0, 0, 0); + DataAttribute_create("addr", (ModelNode*) newSEC, IEC61850_OCTET_STRING_64, IEC61850_FC_ST, 0, 0, 0); if (options & CDC_OPTION_ADDINFO) - DataAttribute_create("addInfo", (ModelNode*) newSEC, VISIBLE_STRING_64, IEC61850_FC_ST, 0, 0, 0); + DataAttribute_create("addInfo", (ModelNode*) newSEC, IEC61850_VISIBLE_STRING_64, IEC61850_FC_ST, 0, 0, 0); CDC_addStandardOptions(newSEC, options); @@ -397,7 +397,7 @@ CDC_MV_create(const char* dataObjectName, ModelNode* parent, uint32_t options, b CAC_AnalogueValue_create("mag", (ModelNode*) newMV, IEC61850_FC_MX, TRG_OPT_DATA_CHANGED | TRG_OPT_DATA_UPDATE, isIntegerNotFloat); if (options & CDC_OPTION_RANGE) - DataAttribute_create("range", (ModelNode*) newMV, ENUMERATED, IEC61850_FC_MX, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("range", (ModelNode*) newMV, IEC61850_ENUMERATED, IEC61850_FC_MX, TRG_OPT_DATA_CHANGED, 0, 0); CDC_addTimeQuality(newMV, IEC61850_FC_MX); @@ -424,10 +424,10 @@ CDC_CMV_create(const char* dataObjectName, ModelNode* parent, uint32_t options) CAC_Vector_create("cVal", (ModelNode*) newMV, options, IEC61850_FC_MX, TRG_OPT_DATA_CHANGED | TRG_OPT_DATA_UPDATE); if (options & CDC_OPTION_RANGE) - DataAttribute_create("range", (ModelNode*) newMV, ENUMERATED, IEC61850_FC_MX, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("range", (ModelNode*) newMV, IEC61850_ENUMERATED, IEC61850_FC_MX, TRG_OPT_DATA_CHANGED, 0, 0); if (options & CDC_OPTION_RANGE_ANG) - DataAttribute_create("rangeAng", (ModelNode*) newMV, ENUMERATED, IEC61850_FC_MX, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("rangeAng", (ModelNode*) newMV, IEC61850_ENUMERATED, IEC61850_FC_MX, TRG_OPT_DATA_CHANGED, 0, 0); CDC_addTimeQuality(newMV, IEC61850_FC_MX); @@ -477,17 +477,17 @@ CDC_HST_create(const char* dataObjectName, ModelNode* parent, uint32_t options, { DataObject* newHST = DataObject_create(dataObjectName, parent, 0); - DataAttribute_create("hstVal", (ModelNode*) newHST, INT32, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED | TRG_OPT_DATA_UPDATE, maxPts, 0); + DataAttribute_create("hstVal", (ModelNode*) newHST, IEC61850_INT32, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED | TRG_OPT_DATA_UPDATE, maxPts, 0); CDC_addTimeQuality(newHST, IEC61850_FC_ST); - DataAttribute_create("numPts", (ModelNode*) newHST, INT16U, IEC61850_FC_CF, 0, 0, 0); + DataAttribute_create("numPts", (ModelNode*) newHST, IEC61850_INT16U, IEC61850_FC_CF, 0, 0, 0); //TODO add mandatory attribute "hstRangeC" CAC_Unit_create("units", (ModelNode*) newHST, options & CDC_OPTION_UNIT_MULTIPLIER); - DataAttribute_create("maxPts", (ModelNode*) newHST, INT16U, IEC61850_FC_CF, 0, 0, 0); + DataAttribute_create("maxPts", (ModelNode*) newHST, IEC61850_INT16U, IEC61850_FC_CF, 0, 0, 0); CDC_addStandardOptions(newHST, options); @@ -499,7 +499,7 @@ static void addControls(DataObject* parent, DataAttributeType type, uint32_t controlOptions) { DataAttribute* ctlModel = - DataAttribute_create("ctlModel", (ModelNode*) parent, ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("ctlModel", (ModelNode*) parent, IEC61850_ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); int controlModel = controlOptions & 0x07; @@ -508,7 +508,7 @@ addControls(DataObject* parent, DataAttributeType type, uint32_t controlOptions) if (controlModel > 0) { if (controlModel == CDC_CTL_MODEL_SBO_NORMAL) - DataAttribute_create("SBO", (ModelNode*) parent, VISIBLE_STRING_129, IEC61850_FC_CO, 0, 0, 0); + DataAttribute_create("SBO", (ModelNode*) parent, IEC61850_VISIBLE_STRING_129, IEC61850_FC_CO, 0, 0, 0); bool isTimeActivated = false; @@ -533,7 +533,7 @@ addOriginatorAndCtlNumOptions(ModelNode* parent, uint32_t controlOptions) addOriginator("origin", parent, IEC61850_FC_ST); if (controlOptions & CDC_CTL_OPTION_CTL_NUM) - DataAttribute_create("ctlNum", parent, INT8U, IEC61850_FC_ST, 0, 0, 0); + DataAttribute_create("ctlNum", parent, IEC61850_INT8U, IEC61850_FC_ST, 0, 0, 0); } /** @@ -552,15 +552,15 @@ CDC_SPC_create(const char* dataObjectName, ModelNode* parent, uint32_t options, addOriginatorAndCtlNumOptions((ModelNode*) newSPC, controlOptions); - CDC_addStatusToDataObject(newSPC, BOOLEAN); + CDC_addStatusToDataObject(newSPC, IEC61850_BOOLEAN); - addControls(newSPC, BOOLEAN, controlOptions); + addControls(newSPC, IEC61850_BOOLEAN, controlOptions); if (options & CDC_OPTION_PICS_SUBST) - CDC_addOptionPicsSubst(newSPC, BOOLEAN); + CDC_addOptionPicsSubst(newSPC, IEC61850_BOOLEAN); if (options & CDC_OPTION_BLK_ENA) - DataAttribute_create("blkEna", (ModelNode*) newSPC, BOOLEAN, IEC61850_FC_BL, 0, 0, 0); + DataAttribute_create("blkEna", (ModelNode*) newSPC, IEC61850_BOOLEAN, IEC61850_FC_BL, 0, 0, 0); CDC_addStandardOptions(newSPC, options); @@ -583,15 +583,15 @@ CDC_DPC_create(const char* dataObjectName, ModelNode* parent, uint32_t options, addOriginatorAndCtlNumOptions((ModelNode*) newDPC, controlOptions); - CDC_addStatusToDataObject(newDPC, CODEDENUM); + CDC_addStatusToDataObject(newDPC, IEC61850_CODEDENUM); - addControls(newDPC, BOOLEAN, controlOptions); + addControls(newDPC, IEC61850_BOOLEAN, controlOptions); if (options & CDC_OPTION_PICS_SUBST) - CDC_addOptionPicsSubst(newDPC, CODEDENUM); + CDC_addOptionPicsSubst(newDPC, IEC61850_CODEDENUM); if (options & CDC_OPTION_BLK_ENA) - DataAttribute_create("blkEna", (ModelNode*) newDPC, BOOLEAN, IEC61850_FC_BL, 0, 0, 0); + DataAttribute_create("blkEna", (ModelNode*) newDPC, IEC61850_BOOLEAN, IEC61850_FC_BL, 0, 0, 0); CDC_addStandardOptions(newDPC, options); @@ -602,7 +602,7 @@ static void addAnalogControls(DataObject* parent, uint32_t controlOptions, bool isIntegerNotFloat) { DataAttribute* ctlModel = - DataAttribute_create("ctlModel", (ModelNode*) parent, ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("ctlModel", (ModelNode*) parent, IEC61850_ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); int controlModel = controlOptions & 0x07; @@ -611,7 +611,7 @@ addAnalogControls(DataObject* parent, uint32_t controlOptions, bool isIntegerNot if (controlModel != CDC_CTL_MODEL_NONE) { if (controlModel == CDC_CTL_MODEL_SBO_NORMAL) - DataAttribute_create("SBO", (ModelNode*) parent, VISIBLE_STRING_129, IEC61850_FC_CO, 0, 0, 0); + DataAttribute_create("SBO", (ModelNode*) parent, IEC61850_VISIBLE_STRING_129, IEC61850_FC_CO, 0, 0, 0); bool isTimeActivated = false; @@ -619,21 +619,21 @@ addAnalogControls(DataObject* parent, uint32_t controlOptions, bool isIntegerNot isTimeActivated = true; if (controlModel == CDC_CTL_MODEL_SBO_ENHANCED) { - DataAttribute* sBOw = DataAttribute_create("SBOw", (ModelNode*) parent, CONSTRUCTED, IEC61850_FC_CO, 0, 0, 0); + DataAttribute* sBOw = DataAttribute_create("SBOw", (ModelNode*) parent, IEC61850_CONSTRUCTED, IEC61850_FC_CO, 0, 0, 0); CAC_AnalogueValue_create("ctlVal", (ModelNode*) sBOw, IEC61850_FC_CO, 0, isIntegerNotFloat); addCommonOperateElements(sBOw, isTimeActivated, true); } - DataAttribute* oper = DataAttribute_create("Oper", (ModelNode*) parent, CONSTRUCTED, IEC61850_FC_CO, 0, 0, 0); + DataAttribute* oper = DataAttribute_create("Oper", (ModelNode*) parent, IEC61850_CONSTRUCTED, IEC61850_FC_CO, 0, 0, 0); CAC_AnalogueValue_create("ctlVal", (ModelNode*) oper, IEC61850_FC_CO, 0, isIntegerNotFloat); addCommonOperateElements(oper, isTimeActivated, true); if (controlOptions & CDC_CTL_MODEL_HAS_CANCEL) { - DataAttribute* cancel = DataAttribute_create("SBOw", (ModelNode*) parent, CONSTRUCTED, IEC61850_FC_CO, 0, 0, 0); + DataAttribute* cancel = DataAttribute_create("SBOw", (ModelNode*) parent, IEC61850_CONSTRUCTED, IEC61850_FC_CO, 0, 0, 0); CAC_AnalogueValue_create("ctlVal", (ModelNode*) cancel, IEC61850_FC_CO, 0, isIntegerNotFloat); @@ -652,33 +652,33 @@ CDC_APC_create(const char* dataObjectName, ModelNode* parent, uint32_t options, addOriginator("origin", (ModelNode*) newAPC, IEC61850_FC_MX); if (controlOptions & CDC_CTL_OPTION_CTL_NUM) - DataAttribute_create("ctlNum", (ModelNode*) newAPC, INT8U, IEC61850_FC_MX, 0, 0, 0); + DataAttribute_create("ctlNum", (ModelNode*) newAPC, IEC61850_INT8U, IEC61850_FC_MX, 0, 0, 0); CAC_AnalogueValue_create("mxVal", (ModelNode*) newAPC, IEC61850_FC_MX, TRG_OPT_DATA_CHANGED, isIntegerNotFloat); CDC_addTimeQuality(newAPC, IEC61850_FC_MX); if (controlOptions & CDC_CTL_OPTION_ST_SELD) - DataAttribute_create("stSeld", (ModelNode*) newAPC, BOOLEAN, IEC61850_FC_MX, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("stSeld", (ModelNode*) newAPC, IEC61850_BOOLEAN, IEC61850_FC_MX, TRG_OPT_DATA_CHANGED, 0, 0); if (controlOptions & CDC_CTL_OPTION_OP_RCVD) - DataAttribute_create("opRcvd", (ModelNode*) newAPC, BOOLEAN, IEC61850_FC_OR, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("opRcvd", (ModelNode*) newAPC, IEC61850_BOOLEAN, IEC61850_FC_OR, TRG_OPT_DATA_CHANGED, 0, 0); if (controlOptions & CDC_CTL_OPTION_OP_OK) - DataAttribute_create("opOk", (ModelNode*) newAPC, BOOLEAN, IEC61850_FC_OR, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("opOk", (ModelNode*) newAPC, IEC61850_BOOLEAN, IEC61850_FC_OR, TRG_OPT_DATA_CHANGED, 0, 0); if (controlOptions & CDC_CTL_OPTION_T_OP_OK) - DataAttribute_create("tOpOk", (ModelNode*) newAPC, BOOLEAN, IEC61850_FC_OR, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("tOpOk", (ModelNode*) newAPC, IEC61850_BOOLEAN, IEC61850_FC_OR, TRG_OPT_DATA_CHANGED, 0, 0); if (options & CDC_OPTION_PICS_SUBST) { - DataAttribute_create("subEna", (ModelNode*) newAPC, BOOLEAN, IEC61850_FC_SV, 0, 0, 0); + DataAttribute_create("subEna", (ModelNode*) newAPC, IEC61850_BOOLEAN, IEC61850_FC_SV, 0, 0, 0); CAC_AnalogueValue_create("subVal", (ModelNode*) newAPC, IEC61850_FC_SV, 0, isIntegerNotFloat); - DataAttribute_create("subQ", (ModelNode*) newAPC, QUALITY, IEC61850_FC_SV, 0, 0, 0); - DataAttribute_create("subID", (ModelNode*) newAPC, VISIBLE_STRING_64, IEC61850_FC_SV, 0, 0, 0); + DataAttribute_create("subQ", (ModelNode*) newAPC, IEC61850_QUALITY, IEC61850_FC_SV, 0, 0, 0); + DataAttribute_create("subID", (ModelNode*) newAPC, IEC61850_VISIBLE_STRING_64, IEC61850_FC_SV, 0, 0, 0); } if (options & CDC_OPTION_BLK_ENA) - DataAttribute_create("blkEna", (ModelNode*) newAPC, BOOLEAN, IEC61850_FC_BL, 0, 0, 0); + DataAttribute_create("blkEna", (ModelNode*) newAPC, IEC61850_BOOLEAN, IEC61850_FC_BL, 0, 0, 0); addAnalogControls(newAPC, controlOptions, isIntegerNotFloat); @@ -695,24 +695,24 @@ CDC_INC_create(const char* dataObjectName, ModelNode* parent, uint32_t options, addOriginatorAndCtlNumOptions((ModelNode*) newINC, controlOptions); - CDC_addStatusToDataObject(newINC, INT32); + CDC_addStatusToDataObject(newINC, IEC61850_INT32); - addControls(newINC, INT32, controlOptions); + addControls(newINC, IEC61850_INT32, controlOptions); if (options & CDC_OPTION_PICS_SUBST) - CDC_addOptionPicsSubst(newINC, INT32); + CDC_addOptionPicsSubst(newINC, IEC61850_INT32); if (options & CDC_OPTION_BLK_ENA) - DataAttribute_create("blkEna", (ModelNode*) newINC, BOOLEAN, IEC61850_FC_BL, 0, 0, 0); + DataAttribute_create("blkEna", (ModelNode*) newINC, IEC61850_BOOLEAN, IEC61850_FC_BL, 0, 0, 0); if (options & CDC_OPTION_MIN) - DataAttribute_create("minVal", (ModelNode*) newINC, INT32, IEC61850_FC_CF, 0, 0, 0); + DataAttribute_create("minVal", (ModelNode*) newINC, IEC61850_INT32, IEC61850_FC_CF, 0, 0, 0); if (options & CDC_OPTION_MAX) - DataAttribute_create("maxVal", (ModelNode*) newINC, INT32, IEC61850_FC_CF, 0, 0, 0); + DataAttribute_create("maxVal", (ModelNode*) newINC, IEC61850_INT32, IEC61850_FC_CF, 0, 0, 0); if (options & CDC_OPTION_STEP_SIZE) - DataAttribute_create("stepSize", (ModelNode*) newINC, INT32U, IEC61850_FC_CF, 0, 0, 0); + DataAttribute_create("stepSize", (ModelNode*) newINC, IEC61850_INT32U, IEC61850_FC_CF, 0, 0, 0); CDC_addStandardOptions(newINC, options); @@ -726,15 +726,15 @@ CDC_ENC_create(const char* dataObjectName, ModelNode* parent, uint32_t options, addOriginatorAndCtlNumOptions((ModelNode*) newENC, controlOptions); - CDC_addStatusToDataObject(newENC, ENUMERATED); + CDC_addStatusToDataObject(newENC, IEC61850_ENUMERATED); - addControls(newENC, ENUMERATED, controlOptions); + addControls(newENC, IEC61850_ENUMERATED, controlOptions); if (options & CDC_OPTION_PICS_SUBST) - CDC_addOptionPicsSubst(newENC, ENUMERATED); + CDC_addOptionPicsSubst(newENC, IEC61850_ENUMERATED); if (options & CDC_OPTION_BLK_ENA) - DataAttribute_create("blkEna", (ModelNode*) newENC, BOOLEAN, IEC61850_FC_BL, 0, 0, 0); + DataAttribute_create("blkEna", (ModelNode*) newENC, IEC61850_BOOLEAN, IEC61850_FC_BL, 0, 0, 0); CDC_addStandardOptions(newENC, options); @@ -751,15 +751,15 @@ CDC_BSC_create(const char* dataObjectName, ModelNode* parent, uint32_t options, CAC_ValWithTrans_create("valWTr", (ModelNode*) newBSC, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, hasTransientIndicator); CDC_addTimeQuality(newBSC, IEC61850_FC_ST); - DataAttribute_create("persistent", (ModelNode*) newBSC, BOOLEAN, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("persistent", (ModelNode*) newBSC, IEC61850_BOOLEAN, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); - addControls(newBSC, CODEDENUM, controlOptions); + addControls(newBSC, IEC61850_CODEDENUM, controlOptions); if (options & CDC_OPTION_PICS_SUBST) CDC_addOptionPicsSubstValWithTrans(newBSC, hasTransientIndicator); if (options & CDC_OPTION_BLK_ENA) - DataAttribute_create("blkEna", (ModelNode*) newBSC, BOOLEAN, IEC61850_FC_BL, 0, 0, 0); + DataAttribute_create("blkEna", (ModelNode*) newBSC, IEC61850_BOOLEAN, IEC61850_FC_BL, 0, 0, 0); CDC_addStandardOptions(newBSC, options); @@ -771,8 +771,8 @@ CDC_LPL_create(const char* dataObjectName, ModelNode* parent, uint32_t options) { DataObject* newLPL = DataObject_create(dataObjectName, parent, 0); - DataAttribute_create("vendor", (ModelNode*) newLPL, VISIBLE_STRING_255, IEC61850_FC_DC, 0, 0, 0); - DataAttribute_create("swRev", (ModelNode*) newLPL, VISIBLE_STRING_255, IEC61850_FC_DC, 0, 0, 0); + DataAttribute_create("vendor", (ModelNode*) newLPL, IEC61850_VISIBLE_STRING_255, IEC61850_FC_DC, 0, 0, 0); + DataAttribute_create("swRev", (ModelNode*) newLPL, IEC61850_VISIBLE_STRING_255, IEC61850_FC_DC, 0, 0, 0); CDC_addStandardOptions(newLPL, options); @@ -785,27 +785,27 @@ CDC_ACD_create(const char* dataObjectName, ModelNode* parent, uint32_t options) { DataObject* newACD = DataObject_create(dataObjectName, parent, 0); - DataAttribute_create("general", (ModelNode*) newACD, BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); - DataAttribute_create("dirGeneral", (ModelNode*) newACD, ENUMERATED, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("general", (ModelNode*) newACD, IEC61850_BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("dirGeneral", (ModelNode*) newACD, IEC61850_ENUMERATED, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); if (options & CDC_OPTION_PHASE_A) { - DataAttribute_create("phsA", (ModelNode*) newACD, BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); - DataAttribute_create("dirPhsA", (ModelNode*) newACD, ENUMERATED, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("phsA", (ModelNode*) newACD, IEC61850_BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("dirPhsA", (ModelNode*) newACD, IEC61850_ENUMERATED, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); } if (options & CDC_OPTION_PHASE_B) { - DataAttribute_create("phsB", (ModelNode*) newACD, BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); - DataAttribute_create("dirPhsB", (ModelNode*) newACD, ENUMERATED, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("phsB", (ModelNode*) newACD, IEC61850_BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("dirPhsB", (ModelNode*) newACD, IEC61850_ENUMERATED, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); } if (options & CDC_OPTION_PHASE_C) { - DataAttribute_create("phsC", (ModelNode*) newACD, BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); - DataAttribute_create("dirPhsC", (ModelNode*) newACD, ENUMERATED, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("phsC", (ModelNode*) newACD, IEC61850_BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("dirPhsC", (ModelNode*) newACD, IEC61850_ENUMERATED, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); } if (options & CDC_OPTION_PHASE_NEUT) { - DataAttribute_create("neut", (ModelNode*) newACD, BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); - DataAttribute_create("dirNeut", (ModelNode*) newACD, ENUMERATED, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("neut", (ModelNode*) newACD, IEC61850_BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("dirNeut", (ModelNode*) newACD, IEC61850_ENUMERATED, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); } CDC_addTimeQuality(newACD, IEC61850_FC_ST); @@ -820,19 +820,19 @@ CDC_ACT_create(const char* dataObjectName, ModelNode* parent, uint32_t options) { DataObject* newACT = DataObject_create(dataObjectName, parent, 0); - DataAttribute_create("general", (ModelNode*) newACT, BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("general", (ModelNode*) newACT, IEC61850_BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); if (options & CDC_OPTION_PHASE_A) - DataAttribute_create("phsA", (ModelNode*) newACT, BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("phsA", (ModelNode*) newACT, IEC61850_BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); if (options & CDC_OPTION_PHASE_B) - DataAttribute_create("phsB", (ModelNode*) newACT, BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("phsB", (ModelNode*) newACT, IEC61850_BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); if (options & CDC_OPTION_PHASE_C) - DataAttribute_create("phsC", (ModelNode*) newACT, BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("phsC", (ModelNode*) newACT, IEC61850_BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); if (options & CDC_OPTION_PHASE_NEUT) - DataAttribute_create("neut", (ModelNode*) newACT, BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("neut", (ModelNode*) newACT, IEC61850_BOOLEAN, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); CDC_addTimeQuality(newACT, IEC61850_FC_ST); @@ -856,7 +856,7 @@ CDC_WYE_create(const char* dataObjectName, ModelNode* parent, uint32_t options) CDC_CMV_create("res", (ModelNode*) newWYE, options); if (options & CDC_OPTION_ANGLE_REF) - DataAttribute_create("angRef", (ModelNode*) newWYE, ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("angRef", (ModelNode*) newWYE, IEC61850_ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); CDC_addStandardOptions(newWYE, options); @@ -875,7 +875,7 @@ CDC_DEL_create(const char* dataObjectName, ModelNode* parent, uint32_t options) CDC_CMV_create("phsCA", (ModelNode*) newDEL, options); if (options & CDC_OPTION_ANGLE_REF) - DataAttribute_create("angRef", (ModelNode*) newDEL, ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("angRef", (ModelNode*) newDEL, IEC61850_ENUMERATED, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, 0, 0); CDC_addStandardOptions(newDEL, options); @@ -888,7 +888,7 @@ CDC_SPG_create(const char* dataObjectName, ModelNode* parent, uint32_t options) { DataObject* newSPG = DataObject_create(dataObjectName, parent, 0); - DataAttribute_create("setVal", (ModelNode*) newSPG, BOOLEAN, IEC61850_FC_SP, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("setVal", (ModelNode*) newSPG, IEC61850_BOOLEAN, IEC61850_FC_SP, TRG_OPT_DATA_CHANGED, 0, 0); CDC_addStandardOptions(newSPG, options); @@ -900,7 +900,7 @@ CDC_ENG_create(const char* dataObjectName, ModelNode* parent, uint32_t options) { DataObject* newENG = DataObject_create(dataObjectName, parent, 0); - DataAttribute_create("setVal", (ModelNode*) newENG, ENUMERATED, IEC61850_FC_SP, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("setVal", (ModelNode*) newENG, IEC61850_ENUMERATED, IEC61850_FC_SP, TRG_OPT_DATA_CHANGED, 0, 0); CDC_addStandardOptions(newENG, options); @@ -912,19 +912,19 @@ CDC_ING_create(const char* dataObjectName, ModelNode* parent, uint32_t options) { DataObject* newING = DataObject_create(dataObjectName, parent, 0); - DataAttribute_create("setVal", (ModelNode*) newING, INT32, IEC61850_FC_SP, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("setVal", (ModelNode*) newING, IEC61850_INT32, IEC61850_FC_SP, TRG_OPT_DATA_CHANGED, 0, 0); if (options & CDC_OPTION_UNIT) CAC_Unit_create("units", (ModelNode*) newING, options & CDC_OPTION_UNIT_MULTIPLIER); if (options & CDC_OPTION_MIN) - DataAttribute_create("minVal", (ModelNode*) newING, INT32, IEC61850_FC_SP, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("minVal", (ModelNode*) newING, IEC61850_INT32, IEC61850_FC_SP, TRG_OPT_DATA_CHANGED, 0, 0); if (options & CDC_OPTION_MAX) - DataAttribute_create("maxVal", (ModelNode*) newING, INT32, IEC61850_FC_SP, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("maxVal", (ModelNode*) newING, IEC61850_INT32, IEC61850_FC_SP, TRG_OPT_DATA_CHANGED, 0, 0); if (options & CDC_OPTION_STEP_SIZE) - DataAttribute_create("stepSize", (ModelNode*) newING, INT32U, IEC61850_FC_SP, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("stepSize", (ModelNode*) newING, IEC61850_INT32U, IEC61850_FC_SP, TRG_OPT_DATA_CHANGED, 0, 0); CDC_addStandardOptions(newING, options); @@ -997,10 +997,10 @@ CDC_SPV_create(const char* dataObjectName, ModelNode* parent, uint32_t options, CAC_AnalogueValue_create("maxVal", (ModelNode*) newSPV, IEC61850_FC_CF, TRG_OPT_DATA_CHANGED, false); if (wpOptions & CDC_OPTION_61400_SP_ACS) - DataAttribute_create("spAcs", (ModelNode*) newSPV, CODEDENUM, IEC61850_FC_CF, 0, 0, 0); + DataAttribute_create("spAcs", (ModelNode*) newSPV, IEC61850_CODEDENUM, IEC61850_FC_CF, 0, 0, 0); if (wpOptions & CDC_OPTION_61400_CHA_PER_RS) - DataAttribute_create("chaPerRs", (ModelNode*) newSPV, CODEDENUM, IEC61850_FC_CF, 0, 0, 0); + DataAttribute_create("chaPerRs", (ModelNode*) newSPV, IEC61850_CODEDENUM, IEC61850_FC_CF, 0, 0, 0); CDC_addStandardOptions(newSPV, options); @@ -1064,7 +1064,7 @@ CDC_CMD_create(const char* dataObjectName, ModelNode* parent, CDC_INS_create("oldSt", (ModelNode*) newCMD, 0); if (wpOptions & CDC_OPTION_61400_CM_ACS) - DataAttribute_create("cmAcs", (ModelNode*) newCMD, INT8U, IEC61850_FC_CF, 0, 0, 0); + DataAttribute_create("cmAcs", (ModelNode*) newCMD, IEC61850_INT8U, IEC61850_FC_CF, 0, 0, 0); CDC_addStandardOptions(newCMD, options); @@ -1094,19 +1094,19 @@ CDC_CTE_create(const char* dataObjectName, ModelNode* parent, CDC_INS_create("oldCtVal", (ModelNode*) newCTE, 0); if (wpOptions & CDC_OPTION_61400_TM_TOT) - DataAttribute_create("ctTot", (ModelNode*) newCTE, INT32U, IEC61850_FC_ST, 0, 0, 0); + DataAttribute_create("ctTot", (ModelNode*) newCTE, IEC61850_INT32U, IEC61850_FC_ST, 0, 0, 0); if (wpOptions & CDC_OPTION_61400_COUNTING_DAILY) - DataAttribute_create("dly", (ModelNode*) newCTE, INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 32, 0); + DataAttribute_create("dly", (ModelNode*) newCTE, IEC61850_INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 32, 0); if (wpOptions & CDC_OPTION_61400_COUNTING_MONTHLY) - DataAttribute_create("mly", (ModelNode*) newCTE, INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 13, 0); + DataAttribute_create("mly", (ModelNode*) newCTE, IEC61850_INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 13, 0); if (wpOptions & CDC_OPTION_61400_COUNTING_YEARLY) - DataAttribute_create("mly", (ModelNode*) newCTE, INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 21, 0); + DataAttribute_create("mly", (ModelNode*) newCTE, IEC61850_INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 21, 0); if (wpOptions & CDC_OPTION_61400_COUNTING_TOTAL) - DataAttribute_create("tot", (ModelNode*) newCTE, INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("tot", (ModelNode*) newCTE, IEC61850_INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); CDC_addStandardOptions(newCTE, options); @@ -1133,19 +1133,19 @@ CDC_TMS_create(const char* dataObjectName, ModelNode* parent, CDC_INS_create("oldTmVal", (ModelNode*) newTMS, 0); if (wpOptions & CDC_OPTION_61400_TM_TOT) - DataAttribute_create("tmTot", (ModelNode*) newTMS, INT32U, IEC61850_FC_ST, 0, 0, 0); + DataAttribute_create("tmTot", (ModelNode*) newTMS, IEC61850_INT32U, IEC61850_FC_ST, 0, 0, 0); if (wpOptions & CDC_OPTION_61400_COUNTING_DAILY) - DataAttribute_create("dly", (ModelNode*) newTMS, INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 32, 0); + DataAttribute_create("dly", (ModelNode*) newTMS, IEC61850_INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 32, 0); if (wpOptions & CDC_OPTION_61400_COUNTING_MONTHLY) - DataAttribute_create("mly", (ModelNode*) newTMS, INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 13, 0); + DataAttribute_create("mly", (ModelNode*) newTMS, IEC61850_INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 13, 0); if (wpOptions & CDC_OPTION_61400_COUNTING_YEARLY) - DataAttribute_create("mly", (ModelNode*) newTMS, INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 21, 0); + DataAttribute_create("mly", (ModelNode*) newTMS, IEC61850_INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 21, 0); if (wpOptions & CDC_OPTION_61400_COUNTING_TOTAL) - DataAttribute_create("tot", (ModelNode*) newTMS, INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); + DataAttribute_create("tot", (ModelNode*) newTMS, IEC61850_INT32U, IEC61850_FC_ST, TRG_OPT_DATA_CHANGED, 0, 0); CDC_addStandardOptions(newTMS, options); diff --git a/src/iec61850/server/model/config_file_parser.c b/src/iec61850/server/model/config_file_parser.c index fef92d37..e34258dc 100644 --- a/src/iec61850/server/model/config_file_parser.c +++ b/src/iec61850/server/model/config_file_parser.c @@ -292,7 +292,7 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle) if (valueIndicator != NULL) { switch (dataAttribute->type) { - case UNICODE_STRING_255: + case IEC61850_UNICODE_STRING_255: { char* stringStart = valueIndicator + 2; terminateString(stringStart, '"'); @@ -300,11 +300,11 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle) } break; - case VISIBLE_STRING_255: - case VISIBLE_STRING_129: - case VISIBLE_STRING_65: - case VISIBLE_STRING_64: - case VISIBLE_STRING_32: + case IEC61850_VISIBLE_STRING_255: + case IEC61850_VISIBLE_STRING_129: + case IEC61850_VISIBLE_STRING_65: + case IEC61850_VISIBLE_STRING_64: + case IEC61850_VISIBLE_STRING_32: { char* stringStart = valueIndicator + 2; terminateString(stringStart, '"'); @@ -312,12 +312,12 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle) } break; - case INT8: - case INT16: - case INT32: - case INT64: - case INT128: - case ENUMERATED: + case IEC61850_INT8: + case IEC61850_INT16: + case IEC61850_INT32: + case IEC61850_INT64: + case IEC61850_INT128: + case IEC61850_ENUMERATED: { int32_t intValue; if (sscanf(valueIndicator + 1, "%i", &intValue) != 1) goto exit_error; @@ -325,10 +325,10 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle) } break; - case INT8U: - case INT16U: - case INT24U: - case INT32U: + case IEC61850_INT8U: + case IEC61850_INT16U: + case IEC61850_INT24U: + case IEC61850_INT32U: { uint32_t uintValue; if (sscanf(valueIndicator + 1, "%u", &uintValue) != 1) goto exit_error; @@ -336,7 +336,7 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle) } break; - case FLOAT32: + case IEC61850_FLOAT32: { float floatValue; if (sscanf(valueIndicator + 1, "%f", &floatValue) != 1) goto exit_error; @@ -344,7 +344,7 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle) } break; - case FLOAT64: + case IEC61850_FLOAT64: { double doubleValue; if (sscanf(valueIndicator + 1, "%lf", &doubleValue) != 1) goto exit_error; @@ -352,7 +352,7 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle) } break; - case BOOLEAN: + case IEC61850_BOOLEAN: { int boolean; if (sscanf(valueIndicator + 1, "%i", &boolean) != 1) goto exit_error; @@ -395,8 +395,12 @@ ConfigFileParser_createModelFromConfigFile(FileHandle fileHandle) if (StringUtils_createBufferFromHexString(nameString, (uint8_t*) nameString2) != 6) goto exit_error; - PhyComAddress_create(currentGoCB, (uint8_t) vlanPrio, (uint16_t) vlanId, (uint16_t) appId, - (uint8_t*) nameString2); + + PhyComAddress* dstAddress = + PhyComAddress_create((uint8_t) vlanPrio, (uint16_t) vlanId, (uint16_t) appId, + (uint8_t*) nameString2); + + GSEControlBlock_addPhyComAddress(currentGoCB, dstAddress); } else diff --git a/src/iec61850/server/model/dynamic_model.c b/src/iec61850/server/model/dynamic_model.c index 09a719e9..206e7b87 100644 --- a/src/iec61850/server/model/dynamic_model.c +++ b/src/iec61850/server/model/dynamic_model.c @@ -327,7 +327,7 @@ GSEControlBlock_create(const char* name, LogicalNode* parent, char* appId, char* else self->dataSetName = NULL; - self->confRef = confRef; + self->confRev = confRef; self->fixedOffs = fixedOffs; self->minTime = minTime; self->maxTime = maxTime; @@ -342,14 +342,47 @@ GSEControlBlock_create(const char* name, LogicalNode* parent, char* appId, char* return self; } -static void +SVControlBlock* +SVControlBlock_create(const char* name, LogicalNode* parent, char* svID, char* dataSet, uint32_t confRev, uint8_t smpMod, + uint16_t smpRate, uint8_t optFlds, bool isUnicast) +{ + SVControlBlock* self = (SVControlBlock*) GLOBAL_MALLOC(sizeof(SVControlBlock)); + + self->name = copyString(name); + self->parent = parent; + + self->svId = copyString(svID); /* Is there a default value? */ + + if (dataSet) + self->dataSetName = copyString(dataSet); + else + self->dataSetName = NULL; + + self->confRev = confRev; + + self->smpMod = smpMod; + self->smpRate = smpRate; + + self->optFlds = optFlds; + self->isUnicast = isUnicast; + + return self; +} + +void +SVControlBlock_addPhyComAddress(SVControlBlock* self, PhyComAddress* phyComAddress) +{ + self->dstAddress = phyComAddress; +} + +void GSEControlBlock_addPhyComAddress(GSEControlBlock* self, PhyComAddress* phyComAddress) { self->address = phyComAddress; } PhyComAddress* -PhyComAddress_create(GSEControlBlock* parent, uint8_t vlanPriority, uint16_t vlanId, uint16_t appId, uint8_t dstAddress[]) +PhyComAddress_create(uint8_t vlanPriority, uint16_t vlanId, uint16_t appId, uint8_t dstAddress[]) { PhyComAddress* self = (PhyComAddress*) GLOBAL_MALLOC(sizeof(PhyComAddress)); @@ -359,9 +392,6 @@ PhyComAddress_create(GSEControlBlock* parent, uint8_t vlanPriority, uint16_t vla memcpy(self->dstAddress, dstAddress, 6); - if (parent != NULL) - GSEControlBlock_addPhyComAddress(parent, self); - return self; } diff --git a/src/mms/inc/mms_client_connection.h b/src/mms/inc/mms_client_connection.h index d87667e2..e745678e 100644 --- a/src/mms/inc/mms_client_connection.h +++ b/src/mms/inc/mms_client_connection.h @@ -292,7 +292,8 @@ MmsConnection_getVariableListNamesAssociationSpecific(MmsConnection self, MmsErr * \param itemId name of the variable to be read * * \return Returns a MmsValue object or NULL if the request failed. The MmsValue object can - * either be a simple value or a complex value or array. + * either be a simple value or a complex value or array. It is also possible that the return value is NULL + * even if mmsError = MMS_ERROR_NON. This is the case when the servers returns an empty result list. */ MmsValue* MmsConnection_readVariable(MmsConnection self, MmsError* mmsError, const char* domainId, const char* itemId); @@ -383,6 +384,9 @@ MmsConnection_getVariableAccessAttributes(MmsConnection self, MmsError* mmsError /** * \brief Read the values of a domain specific named variable list * + * The resulting named variable list will either be of domain scope (when the domainId argument + * is present) or VMD scope when the domainId argument is NULL. + * * \param self MmsConnection instance to operate on * \param mmsError user provided variable to store error code * \param domainId the domain name of the requested variables. @@ -415,7 +419,10 @@ MmsConnection_readNamedVariableListValuesAssociationSpecific(MmsConnection self, const char* listName, bool specWithResult); /** - * \brief Define a new named variable list at the server. + * \brief Define a new VMD or domain scoped named variable list at the server. + * + * The resulting named variable list will either be of domain scope (when the domainId argument + * is present) or VMD scope when the domainId argument is NULL. * * \param self MmsConnection instance to operate on * \param mmsError user provided variable to store error code @@ -445,6 +452,9 @@ MmsConnection_defineNamedVariableListAssociationSpecific(MmsConnection self, Mms /** * \brief Read the entry list of a named variable list at the server. * + * The resulting named variable list will either be of domain scope (when the domainId argument + * is present) or VMD scope when the domainId argument is NULL. + * * \param self MmsConnection instance to operate on * \param mmsError user provided variable to store error code * \param domainId the domain name of the domain of the variable list @@ -476,6 +486,9 @@ MmsConnection_readNamedVariableListDirectoryAssociationSpecific(MmsConnection se /** * \brief Delete a named variable list at the server. * + * The resulting named variable list will either be of domain scope (when the domainId argument + * is present) or VMD scope when the domainId argument is NULL. + * * \param self MmsConnection instance to operate on * \param mmsError user provided variable to store error code * \param domainId the domain name of the domain of the variable list diff --git a/src/mms/inc/mms_device_model.h b/src/mms/inc/mms_device_model.h index 0787fa41..218bdeff 100644 --- a/src/mms/inc/mms_device_model.h +++ b/src/mms/inc/mms_device_model.h @@ -116,7 +116,7 @@ void MmsDomain_deleteNamedVariableList(MmsDomain* self, char* variableListName); MmsNamedVariableList -MmsDomain_getNamedVariableList(MmsDomain* self, char* variableListName); +MmsDomain_getNamedVariableList(MmsDomain* self, const char* variableListName); LinkedList MmsDomain_getNamedVariableLists(MmsDomain* self); @@ -182,6 +182,9 @@ MmsDevice_getNamedVariable(MmsDevice* self, char* variableName); LinkedList MmsDevice_getNamedVariableLists(MmsDevice* self); +MmsNamedVariableList +MmsDevice_getNamedVariableListWithName(MmsDevice* self, const char* variableListName); + /**@}*/ #ifdef __cplusplus diff --git a/src/mms/inc/mms_value.h b/src/mms/inc/mms_value.h index 0a8aeb8a..235cbb62 100644 --- a/src/mms/inc/mms_value.h +++ b/src/mms/inc/mms_value.h @@ -935,6 +935,18 @@ MmsValue_getSubElement(MmsValue* self, MmsVariableSpecification* varSpec, char* char* MmsValue_getTypeString(MmsValue* self); +/** + * \brief create a string representation of the MmsValue object in the provided buffer + * + * NOTE: This function is for debugging purposes only. It may not be aimed to be used + * in embedded systems. It requires a full featured snprintf function. + * + * \param self the MmsValue instance + * \param buffer the buffer where to copy the string representation + * \param bufferSize the size of the provided buffer + * + * \return a pointer to the start of the buffer + */ char* MmsValue_printToBuffer(MmsValue* self, char* buffer, int bufferSize); diff --git a/src/mms/inc_private/mms_server_internal.h b/src/mms/inc_private/mms_server_internal.h index 2e7f5712..69913375 100644 --- a/src/mms/inc_private/mms_server_internal.h +++ b/src/mms/inc_private/mms_server_internal.h @@ -272,6 +272,9 @@ mmsServer_getLowIndex(AlternateAccess_t* alternateAccess); int mmsServer_getNumberOfElements(AlternateAccess_t* alternateAccess); +MmsNamedVariableList +mmsServer_getNamedVariableListWithName(LinkedList namedVariableLists, const char* variableListName); + void mmsServer_deleteVariableList(LinkedList namedVariableLists, char* variableListName); diff --git a/src/mms/iso_mms/client/mms_client_named_variable_list.c b/src/mms/iso_mms/client/mms_client_named_variable_list.c index 43b67273..49bf84d0 100644 --- a/src/mms/iso_mms/client/mms_client_named_variable_list.c +++ b/src/mms/iso_mms/client/mms_client_named_variable_list.c @@ -54,11 +54,18 @@ mmsClient_createDeleteNamedVariableListRequest(long invokeId, ByteBuffer* writeB request->listOfVariableListName->list.array = (ObjectName_t**) GLOBAL_CALLOC(1, sizeof(ObjectName_t*)); request->listOfVariableListName->list.array[0] = (ObjectName_t*) GLOBAL_CALLOC(1, sizeof(ObjectName_t)); - request->listOfVariableListName->list.array[0]->present = ObjectName_PR_domainspecific; - request->listOfVariableListName->list.array[0]->choice.domainspecific.domainId.size = strlen(domainId); - request->listOfVariableListName->list.array[0]->choice.domainspecific.domainId.buf = (uint8_t*) copyString(domainId); - request->listOfVariableListName->list.array[0]->choice.domainspecific.itemId.size = strlen(listNameId); - request->listOfVariableListName->list.array[0]->choice.domainspecific.itemId.buf = (uint8_t*) copyString(listNameId); + if (domainId != NULL) { + request->listOfVariableListName->list.array[0]->present = ObjectName_PR_domainspecific; + request->listOfVariableListName->list.array[0]->choice.domainspecific.domainId.size = strlen(domainId); + request->listOfVariableListName->list.array[0]->choice.domainspecific.domainId.buf = (uint8_t*) copyString(domainId); + request->listOfVariableListName->list.array[0]->choice.domainspecific.itemId.size = strlen(listNameId); + request->listOfVariableListName->list.array[0]->choice.domainspecific.itemId.buf = (uint8_t*) copyString(listNameId); + } + else { + request->listOfVariableListName->list.array[0]->present = ObjectName_PR_vmdspecific; + request->listOfVariableListName->list.array[0]->choice.vmdspecific.size = strlen(listNameId); + request->listOfVariableListName->list.array[0]->choice.vmdspecific.buf = (uint8_t*) copyString(listNameId); + } request->scopeOfDelete = (INTEGER_t*) GLOBAL_CALLOC(1, sizeof(INTEGER_t)); asn_long2INTEGER(request->scopeOfDelete, DeleteNamedVariableListRequest__scopeOfDelete_specific); @@ -156,13 +163,21 @@ mmsClient_createGetNamedVariableListAttributesRequest(uint32_t invokeId, ByteBuf GetNamedVariableListAttributesRequest_t* request = &(mmsPdu->choice.confirmedRequestPdu.confirmedServiceRequest.choice.getNamedVariableListAttributes); - request->present = ObjectName_PR_domainspecific; + if (domainId != NULL) { + request->present = ObjectName_PR_domainspecific; + + request->choice.domainspecific.domainId.size = strlen(domainId); + request->choice.domainspecific.domainId.buf = (uint8_t*) copyString(domainId); - request->choice.domainspecific.domainId.size = strlen(domainId); - request->choice.domainspecific.domainId.buf = (uint8_t*) copyString(domainId); + request->choice.domainspecific.itemId.size = strlen(listNameId); + request->choice.domainspecific.itemId.buf = (uint8_t*) copyString(listNameId); + } + else { + request->present = ObjectName_PR_vmdspecific; - request->choice.domainspecific.itemId.size = strlen(listNameId); - request->choice.domainspecific.itemId.buf = (uint8_t*) copyString(listNameId); + request->choice.vmdspecific.size = strlen(listNameId); + request->choice.vmdspecific.buf = (uint8_t*) copyString(listNameId); + } der_encode(&asn_DEF_MmsPdu, mmsPdu, (asn_app_consume_bytes_f*) mmsClient_write_out, (void*) writeBuffer); @@ -277,13 +292,21 @@ mmsClient_createDefineNamedVariableListRequest( request->variableListName.choice.aaspecific.buf = (uint8_t*) copyString(listNameId); } else { - request->variableListName.present = ObjectName_PR_domainspecific; + if (domainId != NULL) { /* domain scope */ + request->variableListName.present = ObjectName_PR_domainspecific; + + request->variableListName.choice.domainspecific.domainId.size = strlen(domainId); + request->variableListName.choice.domainspecific.domainId.buf = (uint8_t*) copyString(domainId); - request->variableListName.choice.domainspecific.domainId.size = strlen(domainId); - request->variableListName.choice.domainspecific.domainId.buf = (uint8_t*) copyString(domainId); + request->variableListName.choice.domainspecific.itemId.size = strlen(listNameId); + request->variableListName.choice.domainspecific.itemId.buf = (uint8_t*) copyString(listNameId); + } + else { /* VMD scope */ + request->variableListName.present = ObjectName_PR_vmdspecific; - request->variableListName.choice.domainspecific.itemId.size = strlen(listNameId); - request->variableListName.choice.domainspecific.itemId.buf = (uint8_t*) copyString(listNameId); + request->variableListName.choice.vmdspecific.size = strlen(listNameId); + request->variableListName.choice.vmdspecific.buf = (uint8_t*) copyString(listNameId); + } } int listSize = LinkedList_size(listOfVariables); diff --git a/src/mms/iso_mms/client/mms_client_read.c b/src/mms/iso_mms/client/mms_client_read.c index b3b3b149..df94412e 100644 --- a/src/mms/iso_mms/client/mms_client_read.c +++ b/src/mms/iso_mms/client/mms_client_read.c @@ -307,13 +307,22 @@ mmsClient_createReadNamedVariableListRequest(uint32_t invokeId, const char* doma ObjectName_t* objectName = &(readRequest->variableAccessSpecification.choice.variableListName); - objectName->present = ObjectName_PR_domainspecific; - objectName->choice.domainspecific.domainId.buf = (uint8_t*) copyString(domainId); - objectName->choice.domainspecific.domainId.size = strlen(domainId); + if (domainId != NULL) { + objectName->present = ObjectName_PR_domainspecific; + + objectName->choice.domainspecific.domainId.buf = (uint8_t*) copyString(domainId); + objectName->choice.domainspecific.domainId.size = strlen(domainId); + + objectName->choice.domainspecific.itemId.buf = (uint8_t*) copyString(itemId); + objectName->choice.domainspecific.itemId.size = strlen(itemId); + } + else { + objectName->present = ObjectName_PR_vmdspecific; - objectName->choice.domainspecific.itemId.buf = (uint8_t*) copyString(itemId); - objectName->choice.domainspecific.itemId.size = strlen(itemId); + objectName->choice.vmdspecific.buf = (uint8_t*) copyString(itemId); + objectName->choice.vmdspecific.size = strlen(itemId); + } asn_enc_rval_t rval; diff --git a/src/mms/iso_mms/common/mms_value.c b/src/mms/iso_mms/common/mms_value.c index 8c9492a4..ebfa924f 100644 --- a/src/mms/iso_mms/common/mms_value.c +++ b/src/mms/iso_mms/common/mms_value.c @@ -1,7 +1,7 @@ /* * MmsValue.c * - * Copyright 2013 Michael Zillgith + * Copyright 2013-2015 Michael Zillgith * * This file is part of libIEC61850. * @@ -1995,19 +1995,36 @@ MmsValue_printToBuffer(MmsValue* self, char* buffer, int bufferSize) } } - buffer[bufPos++] = '}'; - buffer[bufPos] = 0; + if (bufPos < (bufferSize - 1)) { + buffer[bufPos++] = '}'; + buffer[bufPos] = 0; + } + else + buffer[bufferSize - 1] = 0; + } break; + case MMS_BINARY_TIME: - Conversions_msTimeToGeneralizedTime(MmsValue_getBinaryTimeAsUtcMs(self), (uint8_t*) buffer); + { + uint8_t tempBuf[20]; + Conversions_msTimeToGeneralizedTime(MmsValue_getBinaryTimeAsUtcMs(self), tempBuf); + snprintf(buffer, bufferSize, "%s", tempBuf); + } break; + case MMS_BIT_STRING: { int bufPos = 0; int size = MmsValue_getBitStringSize(self); + /* Behave like strncpy and fill buffer with zeros */ + if (size > bufferSize) { + memset(buffer, 0, bufferSize); + break; + } + int i; for (i = 0; i < size; i++) { if (MmsValue_getBitStringBit(self, i)) @@ -2018,24 +2035,40 @@ MmsValue_printToBuffer(MmsValue* self, char* buffer, int bufferSize) buffer[bufPos] = 0; } break; + case MMS_BOOLEAN: if (MmsValue_getBoolean(self)) strncpy(buffer, "true", bufferSize); else strncpy(buffer, "false", bufferSize); + + /* Ensure buffer is always 0 terminated */ + if (bufferSize > 0) + buffer[bufferSize - 1] = 0; + break; + case MMS_DATA_ACCESS_ERROR: snprintf(buffer, bufferSize, "error %i", self->value.dataAccessError); break; + case MMS_FLOAT: snprintf(buffer, bufferSize, "%f", MmsValue_toFloat(self)); break; - case MMS_GENERALIZED_TIME: + + case MMS_GENERALIZED_TIME: /* type not supported */ strncpy(buffer, "generalized time", bufferSize); + + /* Ensure buffer is always 0 terminated */ + if (bufferSize > 0) + buffer[bufferSize - 1] = 0; + break; + case MMS_INTEGER: snprintf(buffer, bufferSize, "%i", MmsValue_toInt32(self)); break; + case MMS_OCTET_STRING: { int size = MmsValue_getOctetStringSize(self); @@ -2049,20 +2082,37 @@ MmsValue_printToBuffer(MmsValue* self, char* buffer, int bufferSize) break; } } - break; + case MMS_UNSIGNED: snprintf(buffer, bufferSize, "%u", MmsValue_toUint32(self)); break; + case MMS_UTC_TIME: - Conversions_msTimeToGeneralizedTime(MmsValue_getUtcTimeInMs(self), (uint8_t*) buffer); + { + uint8_t tempBuf[20]; + Conversions_msTimeToGeneralizedTime(MmsValue_getUtcTimeInMs(self), tempBuf); + snprintf(buffer, bufferSize, "%s", tempBuf); + } break; + case MMS_STRING: case MMS_VISIBLE_STRING: strncpy(buffer, MmsValue_toString(self), bufferSize); + + /* Ensure buffer is always 0 terminated */ + if (bufferSize > 0) + buffer[bufferSize - 1] = 0; + break; + default: strncpy(buffer, "unknown type", bufferSize); + + /* Ensure buffer is always 0 terminated */ + if (bufferSize > 0) + buffer[bufferSize - 1] = 0; + break; } diff --git a/src/mms/iso_mms/server/mms_device.c b/src/mms/iso_mms/server/mms_device.c index e0968bf5..36db62c6 100644 --- a/src/mms/iso_mms/server/mms_device.c +++ b/src/mms/iso_mms/server/mms_device.c @@ -127,3 +127,10 @@ MmsDevice_getNamedVariableLists(MmsDevice* self) { return self->namedVariableLists; } + +MmsNamedVariableList +MmsDevice_getNamedVariableListWithName(MmsDevice* self, const char* variableListName) +{ + return mmsServer_getNamedVariableListWithName(self->namedVariableLists, variableListName); +} + diff --git a/src/mms/iso_mms/server/mms_domain.c b/src/mms/iso_mms/server/mms_domain.c index c70567d0..5e22fe29 100644 --- a/src/mms/iso_mms/server/mms_domain.c +++ b/src/mms/iso_mms/server/mms_domain.c @@ -77,26 +77,14 @@ MmsDomain_addNamedVariableList(MmsDomain* self, MmsNamedVariableList variableLis } MmsNamedVariableList -MmsDomain_getNamedVariableList(MmsDomain* self, char* variableListName) +MmsDomain_getNamedVariableList(MmsDomain* self, const char* variableListName) { MmsNamedVariableList variableList = NULL; if (self == NULL) goto exit_function; - LinkedList element = LinkedList_getNext(self->namedVariableLists); - - while (element != NULL) { - MmsNamedVariableList varList = (MmsNamedVariableList) element->data; - - if (strcmp(MmsNamedVariableList_getName(varList), variableListName) == 0) { - variableList = varList; - break; - } - - element = LinkedList_getNext(element); - } - + variableList = mmsServer_getNamedVariableListWithName(self->namedVariableLists, variableListName); exit_function: return variableList; diff --git a/src/mms/iso_mms/server/mms_file_service.c b/src/mms/iso_mms/server/mms_file_service.c index 74c60d56..41d7e307 100644 --- a/src/mms/iso_mms/server/mms_file_service.c +++ b/src/mms/iso_mms/server/mms_file_service.c @@ -437,7 +437,7 @@ encodeFileSpecification(uint8_t tag, char* fileSpecification, uint8_t* buffer, i } static int -addFileEntriesToResponse(uint8_t* buffer, int bufPos, int maxBufSize, char* directoryName, char* continueAfterFileName, bool* moreFollows) +addFileEntriesToResponse(uint8_t* buffer, int bufPos, int maxBufSize, char* directoryName, char** continueAfterFileName, bool* moreFollows) { int directoryNameLength = strlen(directoryName); @@ -464,9 +464,10 @@ addFileEntriesToResponse(uint8_t* buffer, int bufPos, int maxBufSize, char* dire break; } else { - if (continueAfterFileName != NULL) { - if (strcmp(continueAfterFileName, directoryName) == 0) - continueAfterFileName = NULL; + if (*continueAfterFileName != NULL) { + if (strcmp(*continueAfterFileName, directoryName) == 0) { + *continueAfterFileName = NULL; + } } else { uint64_t msTime; @@ -517,9 +518,9 @@ addFileEntriesToResponse(uint8_t* buffer, int bufPos, int maxBufSize, char* dire } static void -createFileDirectoryResponse(uint32_t invokeId, ByteBuffer* response, char* directoryName, char* continueAfterFileName) +createFileDirectoryResponse(uint32_t invokeId, ByteBuffer* response, int maxPduSize, char* directoryName, char* continueAfterFileName) { - int maxSize = response->maxSize - 3; /* reserve space for moreFollows */ + int maxSize = maxPduSize - 3; /* reserve space for moreFollows */ uint8_t* buffer = response->buffer; bool moreFollows = false; @@ -533,7 +534,7 @@ createFileDirectoryResponse(uint32_t invokeId, ByteBuffer* response, char* direc continueAfterFileName = NULL; } - tempCurPos = addFileEntriesToResponse(buffer, tempCurPos, maxSize, directoryName, continueAfterFileName, &moreFollows); + tempCurPos = addFileEntriesToResponse(buffer, tempCurPos, maxSize, directoryName, &continueAfterFileName, &moreFollows); if (tempCurPos < 0) { @@ -708,7 +709,9 @@ mmsServer_handleFileDirectoryRequest( } - createFileDirectoryResponse(invokeId, response, filename, continueAfter); + int maxPduSize = connection->maxPduSize; + + createFileDirectoryResponse(invokeId, response, maxPduSize, filename, continueAfter); } #endif /* MMS_FILE_SERVICE == 1 */ diff --git a/src/mms/iso_mms/server/mms_get_namelist_service.c b/src/mms/iso_mms/server/mms_get_namelist_service.c index 7719e1ca..a36dbedb 100644 --- a/src/mms/iso_mms/server/mms_get_namelist_service.c +++ b/src/mms/iso_mms/server/mms_get_namelist_service.c @@ -266,7 +266,7 @@ getNamedVariableListsDomainSpecific(MmsServerConnection connection, char* domain } static LinkedList -getnamedVariableListsVMDSpecific(MmsServerConnection connection) +getNamedVariableListsVMDSpecific(MmsServerConnection connection) { MmsDevice* device = MmsServer_getDevice(connection->server); @@ -555,7 +555,7 @@ mmsServer_handleGetNameListRequest( #if (MMS_DATA_SET_SERVICE == 1) else if (objectClass == OBJECT_CLASS_NAMED_VARIABLE_LIST) { - LinkedList nameList = getnamedVariableListsVMDSpecific(connection); + LinkedList nameList = getNamedVariableListsVMDSpecific(connection); #if (CONFIG_MMS_SORT_NAME_LIST == 1) StringUtils_sortList(nameList); diff --git a/src/mms/iso_mms/server/mms_named_variable_list_service.c b/src/mms/iso_mms/server/mms_named_variable_list_service.c index 954da06a..71ce3a5e 100644 --- a/src/mms/iso_mms/server/mms_named_variable_list_service.c +++ b/src/mms/iso_mms/server/mms_named_variable_list_service.c @@ -179,6 +179,24 @@ mmsServer_handleDeleteNamedVariableListRequest(MmsServerConnection connection, } } } + else if (request->listOfVariableListName->list.array[i]->present == ObjectName_PR_vmdspecific) { + char listName[65]; + + mmsMsg_copyAsn1IdentifierToStringBuffer(request->listOfVariableListName->list.array[i]->choice.vmdspecific, + listName, 65); + + MmsNamedVariableList variableList = mmsServer_getNamedVariableListWithName(device->namedVariableLists, listName); + + if (variableList != NULL) { + numberMatched++; + + if (mmsServer_callVariableListChangedHandler(false, MMS_VMD_SPECIFIC, NULL, listName, connection) + == MMS_ERROR_NONE) { + numberDeleted++; + mmsServer_deleteVariableList(device->namedVariableLists, listName); + } + } + } } createDeleteNamedVariableListResponse(invokeId, response, numberMatched, numberDeleted); @@ -451,6 +469,7 @@ mmsServer_handleDefineNamedVariableListRequest( char variableListName[65]; if (request->variableListName.choice.aaspecific.size > 64) { + //TODO send reject PDU instead? mmsServer_createConfirmedErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT); goto exit_free_struct; } @@ -487,6 +506,48 @@ mmsServer_handleDefineNamedVariableListRequest( else mmsServer_createConfirmedErrorPdu(invokeId, response, MMS_ERROR_RESOURCE_CAPABILITY_UNAVAILABLE); } + else if (request->variableListName.present == ObjectName_PR_vmdspecific) { + LinkedList vmdScopeNVLs = MmsDevice_getNamedVariableLists(connection->server->device); + + if (LinkedList_size(vmdScopeNVLs) < CONFIG_MMS_MAX_NUMBER_OF_VMD_SPECIFIC_DATA_SETS) { + + char variableListName[65]; + + if (request->variableListName.choice.vmdspecific.size > 64) { + //TODO send reject PDU instead? + mmsServer_createConfirmedErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT); + goto exit_free_struct; + } + + StringUtils_createStringFromBufferInBuffer(variableListName, + request->variableListName.choice.vmdspecific.buf, + request->variableListName.choice.vmdspecific.size); + + if (mmsServer_getNamedVariableListWithName(MmsDevice_getNamedVariableLists(connection->server->device), variableListName) != NULL) { + mmsServer_createConfirmedErrorPdu(invokeId, response, MMS_ERROR_DEFINITION_OBJECT_EXISTS); + } + else { + MmsError mmsError; + + MmsNamedVariableList namedVariableList = createNamedVariableList(NULL, device, + request, variableListName, &mmsError); + + if (namedVariableList != NULL) { + if (mmsServer_callVariableListChangedHandler(true, MMS_VMD_SPECIFIC, NULL, variableListName, connection) + == MMS_ERROR_NONE) { + LinkedList_add(vmdScopeNVLs, (void*) namedVariableList); + + createDefineNamedVariableListResponse(invokeId, response); + } + else { + MmsNamedVariableList_destroy(namedVariableList); + mmsServer_createConfirmedErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_DENIED); + } + + } + } + } + } else mmsServer_createConfirmedErrorPdu(invokeId, response, MMS_ERROR_DEFINITION_TYPE_UNSUPPORTED); @@ -635,6 +696,26 @@ mmsServer_handleGetNamedVariableListAttributesRequest( mmsServer_createConfirmedErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT); } #endif /* (MMS_DYNAMIC_DATA_SETS == 1) */ + else if (request->present == ObjectName_PR_vmdspecific) { + char listName[65]; + + if (request->choice.vmdspecific.size > 64) { + mmsServer_createConfirmedErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OTHER); + goto exit_function; + } + + StringUtils_createStringFromBufferInBuffer(listName, request->choice.vmdspecific.buf, + request->choice.vmdspecific.size); + + MmsDevice* mmsDevice = MmsServer_getDevice(connection->server); + + MmsNamedVariableList varList = mmsServer_getNamedVariableListWithName(mmsDevice->namedVariableLists, listName); + + if (varList != NULL) + createGetNamedVariableListAttributesResponse(invokeId, response, varList); + else + mmsServer_createConfirmedErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT); + } else { mmsServer_createConfirmedErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED); } diff --git a/src/mms/iso_mms/server/mms_read_service.c b/src/mms/iso_mms/server/mms_read_service.c index 6ad75e49..1f48c642 100644 --- a/src/mms/iso_mms/server/mms_read_service.c +++ b/src/mms/iso_mms/server/mms_read_service.c @@ -663,6 +663,29 @@ handleReadNamedVariableListRequest( } } } + else if (read->variableAccessSpecification.choice.variableListName.present == ObjectName_PR_vmdspecific) + { + char listName[65]; + + mmsMsg_copyAsn1IdentifierToStringBuffer(read->variableAccessSpecification.choice.variableListName.choice.vmdspecific, + listName, 65); + + MmsNamedVariableList namedList = mmsServer_getNamedVariableListWithName(connection->server->device->namedVariableLists, listName); + + if (namedList == NULL) + mmsServer_createConfirmedErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT); + else { + + VarAccessSpec accessSpec; + + accessSpec.isNamedVariableList = true; + accessSpec.specific = 0; + accessSpec.domainId = NULL; + accessSpec.itemId = listName; + + createNamedVariableListResponse(connection, namedList, invokeId, response, read, &accessSpec); + } + } #if (MMS_DYNAMIC_DATA_SETS == 1) else if (read->variableAccessSpecification.choice.variableListName.present == ObjectName_PR_aaspecific) @@ -674,17 +697,18 @@ handleReadNamedVariableListRequest( MmsNamedVariableList namedList = MmsServerConnection_getNamedVariableList(connection, listName); - VarAccessSpec accessSpec; - - accessSpec.isNamedVariableList = true; - accessSpec.specific = 2; - accessSpec.domainId = NULL; - accessSpec.itemId = listName; - if (namedList == NULL) mmsServer_createConfirmedErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT); - else + else { + VarAccessSpec accessSpec; + + accessSpec.isNamedVariableList = true; + accessSpec.specific = 2; + accessSpec.domainId = NULL; + accessSpec.itemId = listName; + createNamedVariableListResponse(connection, namedList, invokeId, response, read, &accessSpec); + } } #endif /* (MMS_DYNAMIC_DATA_SETS == 1) */ else diff --git a/src/mms/iso_mms/server/mms_server_common.c b/src/mms/iso_mms/server/mms_server_common.c index f5a16e42..46d87bed 100644 --- a/src/mms/iso_mms/server/mms_server_common.c +++ b/src/mms/iso_mms/server/mms_server_common.c @@ -201,6 +201,28 @@ mmsServer_getNumberOfElements(AlternateAccess_t* alternateAccess) return 0; } +MmsNamedVariableList +mmsServer_getNamedVariableListWithName(LinkedList namedVariableLists, const char* variableListName) +{ + MmsNamedVariableList variableList = NULL; + + LinkedList element = LinkedList_getNext(namedVariableLists); + + while (element != NULL) { + MmsNamedVariableList varList = (MmsNamedVariableList) element->data; + + if (strcmp(MmsNamedVariableList_getName(varList), variableListName) == 0) { + variableList = varList; + break; + } + + element = LinkedList_getNext(element); + } + + return variableList; +} + + void mmsServer_deleteVariableList(LinkedList namedVariableLists, char* variableListName) { diff --git a/src/mms/iso_mms/server/mms_server_connection.c b/src/mms/iso_mms/server/mms_server_connection.c index 60bc6543..c0cf1c20 100644 --- a/src/mms/iso_mms/server/mms_server_connection.c +++ b/src/mms/iso_mms/server/mms_server_connection.c @@ -355,23 +355,7 @@ MmsServerConnection_deleteNamedVariableList(MmsServerConnection self, char* list MmsNamedVariableList MmsServerConnection_getNamedVariableList(MmsServerConnection self, const char* variableListName) { - //TODO remove code duplication - similar to MmsDomain_getNamedVariableList ! - MmsNamedVariableList variableList = NULL; - - LinkedList element = LinkedList_getNext(self->namedVariableLists); - - while (element != NULL) { - MmsNamedVariableList varList = (MmsNamedVariableList) element->data; - - if (strcmp(MmsNamedVariableList_getName(varList), variableListName) == 0) { - variableList = varList; - break; - } - - element = LinkedList_getNext(element); - } - - return variableList; + return mmsServer_getNamedVariableListWithName(self->namedVariableLists, variableListName); } #endif /* (MMS_DYNAMIC_DATA_SETS == 1) */ diff --git a/src/sampled_values/sv_subscriber.c b/src/sampled_values/sv_subscriber.c new file mode 100644 index 00000000..990565c9 --- /dev/null +++ b/src/sampled_values/sv_subscriber.c @@ -0,0 +1,621 @@ +/* + * sv_receiver.c + * + * Copyright 2015 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 "stack_config.h" + +#include "libiec61850_platform_includes.h" + +#include "hal_ethernet.h" +#include "hal_thread.h" +#include "ber_decode.h" +#include "ber_encoder.h" + +#include "sv_subscriber.h" + +#ifndef DEBUG_SV_SUBSCRIBER +#define DEBUG_SV_SUBSCRIBER 1 +#endif + +#define ETH_BUFFER_LENGTH 1518 + +#define ETH_P_SV 0x88ba + +struct sSVReceiver { + bool running; + bool stopped; + + bool checkDestAddr; /* option: check destination address (additionally to AppID) to identify application */ + + char* interfaceId; + + uint8_t* buffer; + EthernetSocket ethSocket; + LinkedList subscriberList; +}; + +struct sSVSubscriber { + uint8_t ethAddr[6]; + uint16_t appId; + + SVUpdateListener listener; + void* listenerParameter; +}; + +struct sSVClientASDU { + + char* svId; + + uint8_t* smpCnt; + uint8_t* confRev; + uint8_t* smpSynch; + + + int dataBufferLength; + uint8_t* dataBuffer; +}; + + + + +SVReceiver +SVReceiver_create(void) +{ + SVReceiver self = (SVReceiver) GLOBAL_CALLOC(1, sizeof(struct sSVReceiver)); + + if (self != NULL) { + self->subscriberList = LinkedList_create(); + self->buffer = (uint8_t*) GLOBAL_MALLOC(ETH_BUFFER_LENGTH); + + self->checkDestAddr = false; + } + + return self; +} + +void +SVReceiver_setInterfaceId(SVReceiver self, const char* interfaceId) +{ + if (self->interfaceId != NULL) + GLOBAL_FREEMEM(self->interfaceId); + + self->interfaceId = copyString(interfaceId); +} + +void +SVReceiver_disableDestAddrCheck(SVReceiver self) +{ + self->checkDestAddr = false; +} + +void +SVReceiver_addSubscriber(SVReceiver self, SVSubscriber subscriber) +{ + LinkedList_add(self->subscriberList, (void*) subscriber); +} + +void +SVReceiver_removeSubscriber(SVReceiver self, SVSubscriber subscriber) +{ + LinkedList_remove(self->subscriberList, (void*) subscriber); +} + +static void +svReceiverLoop(void* threadParameter) +{ + SVReceiver self = (SVReceiver) threadParameter; + + self->running = true; + self->stopped = false; + + SVReceiver_startThreadless(self); + + while (self->running) { + + if (SVReceiver_tick(self) == false) + Thread_sleep(1); + } + + SVReceiver_stopThreadless(self); + + self->stopped = true; +} + + +void +SVReceiver_start(SVReceiver self) +{ + Thread thread = Thread_create((ThreadExecutionFunction) svReceiverLoop, (void*) self, true); + + if (thread != NULL) { + if (DEBUG_SV_SUBSCRIBER) + printf("SV_SUBSCRIBER: SV receiver started for interface %s\n", self->interfaceId); + + Thread_start(thread); + } + else { + if (DEBUG_SV_SUBSCRIBER) + printf("SV_SUBSCRIBER: Starting SV receiver failed for interface %s\n", self->interfaceId); + } +} + +void +SVReceiver_stop(SVReceiver self) +{ + self->running = false; + + while (self->stopped == false) + Thread_sleep(1); +} + +void +SVReceiver_destroy(SVReceiver self) +{ + LinkedList_destroyDeep(self->subscriberList, + (LinkedListValueDeleteFunction) SVSubscriber_destroy); + + GLOBAL_FREEMEM(self->buffer); + GLOBAL_FREEMEM(self); +} + +void +SVReceiver_startThreadless(SVReceiver self) +{ + if (self->interfaceId == NULL) + self->ethSocket = Ethernet_createSocket(CONFIG_ETHERNET_INTERFACE_ID, NULL); + else + self->ethSocket = Ethernet_createSocket(self->interfaceId, NULL); + + Ethernet_setProtocolFilter(self->ethSocket, ETH_P_SV); + + self->running = true; +} + +void +SVReceiver_stopThreadless(SVReceiver self) +{ + Ethernet_destroySocket(self->ethSocket); + + self->running = false; +} + + +static void +parseASDU(SVReceiver self, SVSubscriber subscriber, uint8_t* buffer, int length) +{ + int bufPos = 0; + + struct sSVClientASDU asdu; + memset(&asdu, 0, sizeof(struct sSVClientASDU)); + + int svIdLength = 0; + + + while (bufPos < length) { + int elementLength; + + uint8_t tag = buffer[bufPos++]; + + bufPos = BerDecoder_decodeLength(buffer, &elementLength, bufPos, length); + + switch (tag) { + + case 0x80: + asdu.svId = (char*) (buffer + bufPos); + svIdLength = elementLength; + break; + + case 0x82: + asdu.smpCnt = buffer + bufPos; + break; + + case 0x83: + asdu.confRev = buffer + bufPos; + break; + + case 0x85: + asdu.smpSynch = buffer + bufPos; + break; + + case 0x87: + asdu.dataBuffer = buffer + bufPos; + asdu.dataBufferLength = elementLength; + break; + + default: /* ignore unknown tag */ + break; + } + + bufPos += elementLength; + } + + if (asdu.svId != NULL) + asdu.svId[svIdLength] = 0; + + /* Call callback handler */ + if (subscriber->listener != NULL) + subscriber->listener(subscriber, subscriber->listenerParameter, &asdu); +} + +static void +parseSequenceOfASDU(SVReceiver self, SVSubscriber subscriber, uint8_t* buffer, int length) +{ + int bufPos = 0; + + while (bufPos < length) { + int elementLength; + + uint8_t tag = buffer[bufPos++]; + + bufPos = BerDecoder_decodeLength(buffer, &elementLength, bufPos, length); + + switch (tag) { + case 0x30: + parseASDU(self, subscriber, buffer + bufPos, elementLength); + break; + + default: /* ignore unknown tag */ + break; + } + + bufPos += elementLength; + } +} + +static void +parseSVPayload(SVReceiver self, SVSubscriber subscriber, uint8_t* buffer, int apduLength) +{ + int bufPos = 0; + + if (buffer[bufPos++] == 0x60) { + int elementLength; + + bufPos = BerDecoder_decodeLength(buffer, &elementLength, bufPos, apduLength); + + int svEnd = bufPos + elementLength; + + while (bufPos < svEnd) { + uint8_t tag = buffer[bufPos++]; + + bufPos = BerDecoder_decodeLength(buffer, &elementLength, bufPos, svEnd); + + if (bufPos + elementLength > apduLength) { + if (DEBUG_SV_SUBSCRIBER) + printf("SV_SUBSCRIBER: Malformed message: sub element is too large!\n"); + + goto exit_error; + } + + if (bufPos == -1) + goto exit_error; + + switch(tag) { + case 0x80: /* noASDU (INTEGER) */ + /* ignore */ + break; + + case 0xa2: /* asdu (SEQUENCE) */ + parseSequenceOfASDU(self, subscriber, buffer + bufPos, elementLength); + break; + + default: /* ignore unknown tag */ + break; + } + + + bufPos += elementLength; + } + + return; + } + +exit_error: + if (DEBUG_SV_SUBSCRIBER) + printf("SV_SUBSCRIBER: Invalid SV message!\n"); + + return; +} + +static void +parseSVMessage(SVReceiver self, int numbytes) +{ + int bufPos; + bool subscriberFound = false; + uint8_t* buffer = self->buffer; + + if (numbytes < 22) return; + + /* Ethernet source address */ + uint8_t* srcAddr = buffer; + + /* skip ethernet addresses */ + bufPos = 12; + int headerLength = 14; + + /* check for VLAN tag */ + if ((buffer[bufPos] == 0x81) && (buffer[bufPos + 1] == 0x00)) { + bufPos += 4; /* skip VLAN tag */ + headerLength += 4; + } + + /* check for SV Ethertype */ + if (buffer[bufPos++] != 0x88) + return; + if (buffer[bufPos++] != 0xba) + return; + + uint16_t appId; + + appId = buffer[bufPos++] * 0x100; + appId += buffer[bufPos++]; + + uint16_t length; + + length = buffer[bufPos++] * 0x100; + length += buffer[bufPos++]; + + /* skip reserved fields */ + bufPos += 4; + + int apduLength = length - 8; + + if (numbytes < length + headerLength) { + if (DEBUG_SV_SUBSCRIBER) + printf("SV_SUBSCRIBER: Invalid PDU size\n"); + return; + } + + if (DEBUG_SV_SUBSCRIBER) { + printf("SV_SUBSCRIBER: SV message: ----------------\n"); + printf("SV_SUBSCRIBER: APPID: %u\n", appId); + printf("SV_SUBSCRIBER: LENGTH: %u\n", length); + printf("SV_SUBSCRIBER: APDU length: %i\n", apduLength); + } + + + /* check if there is a matching subscriber */ + LinkedList element = LinkedList_getNext(self->subscriberList); + + SVSubscriber subscriber; + + while (element != NULL) { + subscriber = (SVSubscriber) LinkedList_getData(element); + + if (subscriber->appId == appId) { + + if (self->checkDestAddr) { + if (memcmp(srcAddr, subscriber->ethAddr, 6) == 0) { + subscriberFound = true; + break; + } + else + if (DEBUG_SV_SUBSCRIBER) + printf("SV_SUBSCRIBER: Checking ethernet src address failed!\n"); + } + else { + subscriberFound = true; + break; + } + + + } + + element = LinkedList_getNext(element); + } + + + if (subscriberFound) + parseSVPayload(self, subscriber, buffer + bufPos, apduLength); + else { + if (DEBUG_SV_SUBSCRIBER) + printf("SV_SUBSCRIBER: SV message ignored due to unknown APPID value\n"); + } +} + +bool +SVReceiver_tick(SVReceiver self) +{ + int packetSize = Ethernet_receivePacket(self->ethSocket, self->buffer, ETH_BUFFER_LENGTH); + + if (packetSize > 0) { + parseSVMessage(self, packetSize); + return true; + } + else + return false; +} + +SVSubscriber +SVSubscriber_create(const uint8_t* ethAddr, uint16_t appID) +{ + SVSubscriber self = (SVSubscriber) GLOBAL_CALLOC(1, sizeof(struct sSVSubscriber)); + + if (self != NULL) { + self->appId = appID; + + if (ethAddr != NULL) + memcpy(self->ethAddr, ethAddr, 6); + } + + return self; +} + +void +SVSubscriber_destroy(SVSubscriber self) +{ + if (self != NULL) + GLOBAL_FREEMEM(self); +} + + +void +SVSubscriber_setListener(SVSubscriber self, SVUpdateListener listener, void* parameter) +{ + self->listener = listener; + self->listenerParameter = parameter; +} + +uint16_t +SVClientASDU_getSmpCnt(SVClientASDU self) +{ + uint16_t retVal; + uint8_t* valBytes = (uint8_t*) &retVal; + +#if (ORDER_LITTLE_ENDIAN == 1) + valBytes[0] = self->smpCnt[1]; + valBytes[1] = self->smpCnt[0]; +#else + valBytes[0] = self->smpCnt[0]; + valBytes[1] = self->smpCnt[1]; +#endif + + return retVal; +} + +const char* +SVClientASDU_getSvId(SVClientASDU self) +{ + return self->svId; +} + +uint32_t +SVClientASDU_getConfRev(SVClientASDU self) +{ + uint32_t retVal = *((uint32_t*) (self->confRev)); + +#if (ORDER_LITTLE_ENDIAN == 1) + uint8_t* buf = (uint8_t*) (&retVal); + + BerEncoder_revertByteOrder(buf, 4); +#endif + + return retVal; +} + +int8_t +SVClientASDU_getINT8(SVClientASDU self, int index) +{ + int8_t retVal = *((int8_t*) (self->dataBuffer + index)); + + return retVal; +} + +int16_t +SVClientASDU_getINT16(SVClientASDU self, int index) +{ + int16_t retVal = *((int16_t*) (self->dataBuffer + index)); + +#if (ORDER_LITTLE_ENDIAN == 1) + uint8_t* buf = (uint8_t*) (&retVal); + + BerEncoder_revertByteOrder(buf, 2); +#endif + + return retVal; +} + +int32_t +SVClientASDU_getINT32(SVClientASDU self, int index) +{ + int32_t retVal = *((int32_t*) (self->dataBuffer + index)); + +#if (ORDER_LITTLE_ENDIAN == 1) + uint8_t* buf = (uint8_t*) (&retVal); + + BerEncoder_revertByteOrder(buf, 4); +#endif + + return retVal; +} + +uint8_t +SVClientASDU_getINT8U(SVClientASDU self, int index) +{ + uint8_t retVal = *((uint8_t*) (self->dataBuffer + index)); + + return retVal; +} + +uint16_t +SVClientASDU_getINT16U(SVClientASDU self, int index) +{ + uint16_t retVal = *((uint16_t*) (self->dataBuffer + index)); + +#if (ORDER_LITTLE_ENDIAN == 1) + uint8_t* buf = (uint8_t*) (&retVal); + + BerEncoder_revertByteOrder(buf, 2); +#endif + + return retVal; +} + +uint32_t +SVClientASDU_getINT32U(SVClientASDU self, int index) +{ + uint32_t retVal = *((uint32_t*) (self->dataBuffer + index)); + +#if (ORDER_LITTLE_ENDIAN == 1) + uint8_t* buf = (uint8_t*) (&retVal); + + BerEncoder_revertByteOrder(buf, 4); +#endif + + return retVal; +} + + +float +SVClientASDU_getFLOAT32(SVClientASDU self, int index) +{ + float retVal = *((float*) (self->dataBuffer + index)); + +#if (ORDER_LITTLE_ENDIAN == 1) + uint8_t* buf = (uint8_t*) (&retVal); + + BerEncoder_revertByteOrder(buf, 4); +#endif + + return retVal; +} + +double +SVClientASDU_getFLOAT64(SVClientASDU self, int index) +{ + double retVal = *((double*) (self->dataBuffer + index)); + +#if (ORDER_LITTLE_ENDIAN == 1) + uint8_t* buf = (uint8_t*) (&retVal); + + BerEncoder_revertByteOrder(buf, 8); +#endif + + return retVal; +} + + +int +SVClientASDU_getDataSize(SVClientASDU self) +{ + return self->dataBufferLength; +} + diff --git a/src/sampled_values/sv_subscriber.h b/src/sampled_values/sv_subscriber.h new file mode 100644 index 00000000..c463e5bd --- /dev/null +++ b/src/sampled_values/sv_subscriber.h @@ -0,0 +1,376 @@ +/* + * sv_subscriber_api.h + * + * Copyright 2015 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. + */ + +#ifndef SAMPLED_VALUES_SV_SUBSCRIBER_H_ +#define SAMPLED_VALUES_SV_SUBSCRIBER_H_ + +#include "libiec61850_common_api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup sv_subscriber_api_group IEC 61850 sampled values (SV) subscriber API + * + * The sampled values (SV) subscriber API consists of three different objects. + * The \ref SVReceiver object is responsible for handling all SV Ethernet messages + * for a specific Ethernet interface. If you want to receive SV messages on multiple + * Ethernet interfaces you have to use several \ref SVReceiver instances. + * An \ref SVSubscriber object is associated to a SV data stream that is identified by its appID + * and destination Ethernet address. The \reg SVSubscriber object is used to install a callback + * handler \ref SVUpdateListener that is invoked for each ASDU (application service data unit) received for the + * associated stream. An \ref SVClientASDU is an object that represents a single ASDU. Each ASDU contains + * some meta information that can be obtained by specific access functions like e.g. + * \ref SVClientASDU_getSmpCnt to access the "SmpCnt" (sample count) attribute of the ASDU. The actual + * measurement data contained in the ASDU does not consist of structured ASN.1 data but stored as raw binary + * data. Without a priori knowledge of the dataset associated with the ASDU data stream it is not + * possible to interpret the received data correctly. Therefore you have to provide the data access functions + * with an index value to indicate the data type and the start of the data in the data block of the ASDU. + * E.g. reading a data set consisting of two FLOAT32 values you can use two subsequent calls of + * \ref SVClientASDU_getFLOAT32 one with index = 0 and the second one with index = 4. + * + * | IEC 61850 type | required bytes | + * | -------------- | -------------- | + * | BOOLEAN | 1 byte | + * | INT8 | 1 byte | + * | INT16 | 2 byte | + * | INT32 | 4 byte | + * | INT64 | 8 byte | + * | INT8U | 1 byte | + * | INT16U | 2 byte | + * | INT24U | 3 byte | + * | INT32U | 4 byte | + * | FLOAT32 | 4 byte | + * | FLOAT64 | 8 byte | + * | ENUMERATED | 4 byte | + * | CODED ENUM | 4 byte | + * | OCTET STRING | 20 byte | + * | VISIBLE STRING | 35 byte | + * | TimeStamp | 8 byte | + * | EntryTime | 6 byte | + * | BITSTRING | 4 byte | + * + * The SV subscriber API can be used independent of the IEC 61850 client API. In order to access the SVCB via MMS you + * have to use the IEC 61850 client API. Please see \ref ClientSVControlBlock object in section \ref IEC61850_CLIENT_SV. + * + */ +/**@{*/ + + +/** + * \brief opaque handle to a SV ASDU (Application service data unit) instance. + * + * Sampled Values (SV) ASDUs (application service data units) are the basic units for + * sampled value data. Each ASDU represents a single sample consisting of multiple measurement + * values with a single dedicated timestamp. + * + * NOTE: SVClientASDU are statically allocated and are only valid inside of the SVUpdateListener + * function when called by the library. If you need the data contained in the ASDU elsewhere + * you have to copy and store the data by yourself! + */ +typedef struct sSVClientASDU* SVClientASDU; + +/** + * \brief opaque handle to a SV subscriber instance + * + * A subscriber is an instance associated with a single stream of measurement data. It is identified + * by the Ethernet destination address, the appID value (both are on SV message level) and the svID value + * that is part of each ASDU (SVClientASDU object). + */ +typedef struct sSVSubscriber* SVSubscriber; + +/** + * \brief Callback function for received SV messages + * + * Will be called for each ASDU contained in a SV message! + * + * \param subscriber the subscriber that was associated with the received SV message + * \param parameter a user provided parameter that is simply passed to the callback + * \param asdu SV ASDU data structure. This structure is only valid inside of the callback function + */ +typedef void (*SVUpdateListener)(SVSubscriber subscriber, void* parameter, SVClientASDU asdu); + +/** + * \brief opaque handle to a SV receiver instance + */ +typedef struct sSVReceiver* SVReceiver; + +/** + * \brief Create a new SV receiver instance. + * + * A receiver is responsible for processing all SV message for a single Ethernet interface. + * In order to process messages from multiple Ethernet interfaces you have to create multiple + * instances. + * + * \return the newly created receiver instance + */ +SVReceiver +SVReceiver_create(void); + +/** + * \brief Disable check for destination address of the received SV messages + * + * Per default both the appID and the destination address are checked to identify + * relevant SV messages. Destination address check can be disabled for performance + * reason when the appIDs are unique in the local system. + * + * \param self the receiver instance reference + */ +void +SVReceiver_disableDestAddrCheck(SVReceiver self); + +/** + * \brief Set the Ethernet interface ID for the receiver instance + * + * Use this function if you want to use a different interface than + * the default interface set by CONFIG_ETHERNET_INTERFACE_ID (stack_config.h) + * NOTE: This function has to be called before calling SVReceiver_start. + * + * \param self the receiver instance reference + * \param interfaceId the Ethernet interface id (platform specific e.g. eth0 for linux). + */ +void +SVReceiver_setInterfaceId(SVReceiver self, const char* interfaceId); + +/** + * \brief Add a subscriber instance to the receiver + * + * The given subscriber will be connected to the receiver instance. + * + * \param self the receiver instance reference + * \param subscriber the subscriber instance to connect + */ +void +SVReceiver_addSubscriber(SVReceiver self, SVSubscriber subscriber); + +/** + * \brief Disconnect subscriber and receiver + * + * \param self the receiver instance reference + * \param subscriber the subscriber instance to disconnect + */ +void +SVReceiver_removeSubscriber(SVReceiver self, SVSubscriber subscriber); + +/** + * \brief Receiver starts listening for SV messages. + * + * NOTE: This call will start a new background thread. + * + * \param self the receiver instance reference + */ +void +SVReceiver_start(SVReceiver self); + +/** + * \brief Receiver stops listening for SV messages + * + * \param self the receiver instance reference + */ +void +SVReceiver_stop(SVReceiver self); + +/** + * \brief Destroy receiver instance (cleanup resources) + * + * \param self the receiver instance reference + */ +void +SVReceiver_destroy(SVReceiver self); + +/*************************************** + * Functions for non-threaded operation + ***************************************/ + +void +SVReceiver_startThreadless(SVReceiver self); + +void +SVReceiver_stopThreadless(SVReceiver self); + +bool +SVReceiver_tick(SVReceiver self); + +/* + * Subscriber + */ + +SVSubscriber +SVSubscriber_create(const uint8_t* ethAddr, uint16_t appID); + +/** + * \brief Set a callback handler to process received SV messages + * + * If the received SV message contains multiple ASDUs (application service data units) the callback + * function will be called for each ASDU separately. If a callback function has already been installed + * for this SVSubscriber object the old callback will be replaced. + * + * \param self The subscriber object + * \param listener the callback function to install + * \param a user provided parameter that is provided to the callback function + * + */ +void +SVSubscriber_setListener(SVSubscriber self, SVUpdateListener listener, void* parameter); + +void +SVSubscriber_destroy(SVSubscriber self); + +/************************************************************************* + * SVClientASDU object methods + **************************************************************************/ + +/** + * \brief return the SmpCnt value included in the SV ASDU + * + * The SmpCnt (sample counter) is increased for each ASDU to + * identify the sample. + * + * \param self ASDU object instance + */ +uint16_t +SVClientASDU_getSmpCnt(SVClientASDU self); + +/** + * \brief return the SvID value included in the SV ASDU + * + * \param self ASDU object instance + */ +const char* +SVClientASDU_getSvId(SVClientASDU self); + +/** + * \brief return the ConfRev value included in the SV ASDU + * + * \param self ASDU object instance + */ +uint32_t +SVClientASDU_getConfRev(SVClientASDU self); + +/** + * \brief Get an INT8 data value in the data part of the ASDU + * + * \param self ASDU object instance + * \param index the index (byte position of the start) of the data in the data part + * + * \return SV data + */ +int8_t +SVClientASDU_getINT8(SVClientASDU self, int index); + +/** + * \brief Get an INT16 data value in the data part of the ASDU + * + * \param self ASDU object instance + * \param index the index (byte position of the start) of the data in the data part + * + * \return SV data + */ +int16_t +SVClientASDU_getINT16(SVClientASDU self, int index); + +/** + * \brief Get an INT32 data value in the data part of the ASDU + * + * \param self ASDU object instance + * \param index the index (byte position of the start) of the data in the data part + * + * \return SV data + */ +int32_t +SVClientASDU_getINT32(SVClientASDU self, int index); + +/** + * \brief Get an INT8U data value in the data part of the ASDU + * + * \param self ASDU object instance + * \param index the index (byte position of the start) of the data in the data part + * + * \return SV data + */ +uint8_t +SVClientASDU_getINT8U(SVClientASDU self, int index); + +/** + * \brief Get an INT16U data value in the data part of the ASDU + * + * \param self ASDU object instance + * \param index the index (byte position of the start) of the data in the data part + * + * \return SV data + */ +uint16_t +SVClientASDU_getINT16U(SVClientASDU self, int index); + +/** + * \brief Get an INT32U data value in the data part of the ASDU + * + * \param self ASDU object instance + * \param index the index (byte position of the start) of the data in the data part + * + * \return SV data + */ +uint32_t +SVClientASDU_getINT32U(SVClientASDU self, int index); + +/** + * \brief Get an FLOAT32 data value in the data part of the ASDU + * + * \param self ASDU object instance + * \param index the index (byte position of the start) of the data in the data part + * + * \return SV data + */ +float +SVClientASDU_getFLOAT32(SVClientASDU self, int index); + +/** + * \brief Get an FLOAT64 data value in the data part of the ASDU + * + * \param self ASDU object instance + * \param index the index (byte position of the start) of the data in the data part + * + * \return SV data + */ +double +SVClientASDU_getFLOAT64(SVClientASDU self, int index); + +/** + * \brief Returns the size of the data part of the ASDU + * + * \param self ASDU object instance + * + * \return size of the ASDU data part in bytes. + */ +int +SVClientASDU_getDataSize(SVClientASDU self); + +/**@}*/ + +#ifdef __cplusplus +} +#endif + + +#endif /* SAMPLED_VALUES_SV_SUBSCRIBER_ */ diff --git a/src/vs/libiec61850-wo-goose.def b/src/vs/libiec61850-wo-goose.def index 9b30b7d0..c886c741 100644 --- a/src/vs/libiec61850-wo-goose.def +++ b/src/vs/libiec61850-wo-goose.def @@ -494,4 +494,23 @@ EXPORTS LogicalDevice_getChildByMmsVariableName LogicalNode_getDataSet ClientReport_getDataSetName - MmsValue_getStringSize \ No newline at end of file + MmsValue_getStringSize + SVControlBlock_create + SVControlBlock_addPhyComAddress + GSEControlBlock_addPhyComAddress + ClientSVControlBlock_create + ClientSVControlBlock_destroy + ClientSVControlBlock_isMulticast + ClientSVControlBlock_getLastComError + ClientSVControlBlock_setSvEna + ClientSVControlBlock_getSvEna + ClientSVControlBlock_setResv + ClientSVControlBlock_getResv + ClientSVControlBlock_getMsvID + ClientSVControlBlock_getDatSet + ClientSVControlBlock_getConfRev + ClientSVControlBlock_getSmpRate + ClientSVControlBlock_getDstAddress + ClientSVControlBlock_getOptFlds + ClientSVControlBlock_getSmpMod + ClientSVControlBlock_getNoASDU \ No newline at end of file diff --git a/src/vs/libiec61850.def b/src/vs/libiec61850.def index a88a7fc5..abde790d 100644 --- a/src/vs/libiec61850.def +++ b/src/vs/libiec61850.def @@ -519,3 +519,48 @@ EXPORTS LogicalNode_getDataSet ClientReport_getDataSetName MmsValue_getStringSize + SVControlBlock_create + SVControlBlock_addPhyComAddress + GSEControlBlock_addPhyComAddress + GooseSubscriber_getConfRev + SVReceiver_create + SVReceiver_setInterfaceId + SVReceiver_addSubscriber + SVReceiver_removeSubscriber + SVReceiver_start + SVReceiver_stop + SVReceiver_destroy + SVReceiver_startThreadless + SVReceiver_stopThreadless + SVReceiver_tick + SVSubscriber_create + SVSubscriber_setListener + SVSubscriber_destroy + SVClientASDU_getSmpCnt + SVClientASDU_getSvId + SVClientASDU_getConfRev + SVClientASDU_getINT8 + SVClientASDU_getINT16 + SVClientASDU_getINT32 + SVClientASDU_getINT8U + SVClientASDU_getINT16U + SVClientASDU_getINT32U + SVClientASDU_getFLOAT32 + SVClientASDU_getFLOAT64 + SVClientASDU_getDataSize + ClientSVControlBlock_create + ClientSVControlBlock_destroy + ClientSVControlBlock_isMulticast + ClientSVControlBlock_getLastComError + ClientSVControlBlock_setSvEna + ClientSVControlBlock_getSvEna + ClientSVControlBlock_setResv + ClientSVControlBlock_getResv + ClientSVControlBlock_getMsvID + ClientSVControlBlock_getDatSet + ClientSVControlBlock_getConfRev + ClientSVControlBlock_getSmpRate + ClientSVControlBlock_getDstAddress + ClientSVControlBlock_getOptFlds + ClientSVControlBlock_getSmpMod + ClientSVControlBlock_getNoASDU \ No newline at end of file diff --git a/third_party/winpcap/README b/third_party/winpcap/README new file mode 100644 index 00000000..9050673d --- /dev/null +++ b/third_party/winpcap/README @@ -0,0 +1,2 @@ +For GOOSE support add winpcap source and headers here. Rerun cmake to configure the build system for GOOSE support. + diff --git a/tools/model_generator/build-modelviewer.sh b/tools/model_generator/build-modelviewer.sh new file mode 100755 index 00000000..42d27fb2 --- /dev/null +++ b/tools/model_generator/build-modelviewer.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +mkdir build + +find src/ -name "*.java" > listFile.tmp + +javac -target 1.6 -source 1.6 -d build @listFile.tmp + +jar cfm modelviewer.jar manifest-modelviewer.mf -C build/ com/ + +rm listFile.tmp +rm -r build diff --git a/tools/model_generator/genconfig.jar b/tools/model_generator/genconfig.jar index 3a36f546..9e3e43d5 100644 Binary files a/tools/model_generator/genconfig.jar and b/tools/model_generator/genconfig.jar differ diff --git a/tools/model_generator/genmodel.jar b/tools/model_generator/genmodel.jar index 28621fac..784ac0ac 100644 Binary files a/tools/model_generator/genmodel.jar and b/tools/model_generator/genmodel.jar differ diff --git a/tools/model_generator/manifest-modelviewer.mf b/tools/model_generator/manifest-modelviewer.mf new file mode 100644 index 00000000..dd837e70 --- /dev/null +++ b/tools/model_generator/manifest-modelviewer.mf @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Main-Class: com.libiec61850.tools.ModelViewer diff --git a/tools/model_generator/modelviewer.jar b/tools/model_generator/modelviewer.jar new file mode 100644 index 00000000..27a0c016 Binary files /dev/null and b/tools/model_generator/modelviewer.jar differ diff --git a/tools/model_generator/src/com/libiec61850/scl/SclParser.java b/tools/model_generator/src/com/libiec61850/scl/SclParser.java index 8ed6b2c3..4ed22e51 100644 --- a/tools/model_generator/src/com/libiec61850/scl/SclParser.java +++ b/tools/model_generator/src/com/libiec61850/scl/SclParser.java @@ -62,28 +62,47 @@ public class SclParser { private List ieds; private Communication communication; private TypeDeclarations typeDeclarations; - private Node scl; + + public static boolean withOutput = true; + + public TypeDeclarations getTypeDeclarations() { + return typeDeclarations; + } - public SclParser(InputStream stream) throws SclParserException { + private Node scl; + + public SclParser(InputStream stream, boolean withOutput) throws SclParserException { + this.withOutput = withOutput; + Document doc = parseXmlDocument(stream); scl = getRootNode(doc); - System.out.println("parse data type templates ..."); + if (withOutput) + System.out.println("parse data type templates ..."); + typeDeclarations = parseTypeDeclarations(); - System.out.println("parse IED section ..."); + if (withOutput) + System.out.println("parse IED section ..."); parseIedSections(); - System.out.println("parse communication section ..."); + if (withOutput) + System.out.println("parse communication section ..."); + communication = parseCommunicationSection(); if (communication == null) - System.out.println("WARNING: No communication section found!"); + if (withOutput) + System.out.println("WARNING: No communication section found!"); + } + + public SclParser(InputStream stream) throws SclParserException { + this(stream, true); } - public IED getIedByteName(String iedName) { + public IED getIedByName(String iedName) { for (IED ied : ieds) { if (ied.getName().equals(iedName)) return ied; @@ -280,7 +299,8 @@ public class SclParser { if (connectedAP.getApName().equals(accessPointName)) { - System.out.println("Found connectedAP " + accessPointName + " for IED " + ied.getName()); + if (withOutput) + System.out.println("Found connectedAP " + accessPointName + " for IED " + ied.getName()); return connectedAP; } diff --git a/tools/model_generator/src/com/libiec61850/scl/communication/ConnectedAP.java b/tools/model_generator/src/com/libiec61850/scl/communication/ConnectedAP.java index 46579aaf..bfa61d39 100644 --- a/tools/model_generator/src/com/libiec61850/scl/communication/ConnectedAP.java +++ b/tools/model_generator/src/com/libiec61850/scl/communication/ConnectedAP.java @@ -35,6 +35,7 @@ public class ConnectedAP { private String apName; private List gses; + private List smvs; public ConnectedAP(Node node) throws SclParserException { iedName = ParserUtils.parseAttribute(node, "iedName"); @@ -47,9 +48,15 @@ public class ConnectedAP { List gseNodes = ParserUtils.getChildNodesWithTag(node, "GSE"); - for (Node gseNode : gseNodes) { + for (Node gseNode : gseNodes) gses.add(new GSE(gseNode)); - } + + smvs = new LinkedList(); + + List smvNodes = ParserUtils.getChildNodesWithTag(node, "SMV"); + + for (Node smvNode : smvNodes) + smvs.add(new SMV(smvNode)); } public String getIedName() { @@ -64,7 +71,11 @@ public class ConnectedAP { return gses; } - public GSEAddress lookupGSEAddress(String logicalDeviceName, String name) { + public List getSmvs() { + return smvs; + } + + public PhyComAddress lookupGSEAddress(String logicalDeviceName, String name) { for (GSE gse : this.getGses()) { if (gse.getLdInst().equals(logicalDeviceName)) { @@ -75,5 +86,17 @@ public class ConnectedAP { return null; } + + public PhyComAddress lookupSMVAddress(String logicalDeviceName, String name) { + + for (SMV smv : this.getSmvs()) { + if (smv.getLdInst().equals(logicalDeviceName)) { + if (smv.getCbName().equals(name)) + return smv.getAddress(); + } + } + + return null; + } } diff --git a/tools/model_generator/src/com/libiec61850/scl/communication/GSE.java b/tools/model_generator/src/com/libiec61850/scl/communication/GSE.java index 1bb0427b..eb56e1bf 100644 --- a/tools/model_generator/src/com/libiec61850/scl/communication/GSE.java +++ b/tools/model_generator/src/com/libiec61850/scl/communication/GSE.java @@ -31,7 +31,7 @@ public class GSE { private String ldInst; private String cbName; - private GSEAddress address; + private PhyComAddress address; public GSE(Node gseNode) throws SclParserException { ldInst = ParserUtils.parseAttribute(gseNode, "ldInst"); @@ -45,7 +45,7 @@ public class GSE { if (addressNode == null) throw new SclParserException(gseNode, "GSE is missing address definition!"); - address = new GSEAddress(addressNode); + address = new PhyComAddress(addressNode); } public String getLdInst() { @@ -56,7 +56,7 @@ public class GSE { return cbName; } - public GSEAddress getAddress() { + public PhyComAddress getAddress() { return address; } diff --git a/tools/model_generator/src/com/libiec61850/scl/communication/GSEAddress.java b/tools/model_generator/src/com/libiec61850/scl/communication/PhyComAddress.java similarity index 96% rename from tools/model_generator/src/com/libiec61850/scl/communication/GSEAddress.java rename to tools/model_generator/src/com/libiec61850/scl/communication/PhyComAddress.java index 151033ea..c4ff7e10 100644 --- a/tools/model_generator/src/com/libiec61850/scl/communication/GSEAddress.java +++ b/tools/model_generator/src/com/libiec61850/scl/communication/PhyComAddress.java @@ -29,14 +29,14 @@ import org.w3c.dom.Node; import com.libiec61850.scl.ParserUtils; import com.libiec61850.scl.SclParserException; -public class GSEAddress { +public class PhyComAddress { private Integer vlanId = null; private Integer vlanPriority = null; private Integer appId = null; private int[] macAddress = null; - public GSEAddress(Node addressNode) throws DOMException, SclParserException { + public PhyComAddress(Node addressNode) throws DOMException, SclParserException { List pNodes = ParserUtils.getChildNodesWithTag(addressNode, "P"); diff --git a/tools/model_generator/src/com/libiec61850/scl/communication/SMV.java b/tools/model_generator/src/com/libiec61850/scl/communication/SMV.java new file mode 100644 index 00000000..71012cf8 --- /dev/null +++ b/tools/model_generator/src/com/libiec61850/scl/communication/SMV.java @@ -0,0 +1,61 @@ +package com.libiec61850.scl.communication; + +import org.w3c.dom.Node; + +import com.libiec61850.scl.ParserUtils; +import com.libiec61850.scl.SclParserException; + +/* + * Copyright 2015 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. + */ + +public class SMV { + private String ldInst; + private String cbName; + + private PhyComAddress address; + + public SMV(Node gseNode) throws SclParserException { + ldInst = ParserUtils.parseAttribute(gseNode, "ldInst"); + cbName = ParserUtils.parseAttribute(gseNode, "cbName"); + + if ((ldInst == null) || (cbName == null)) + throw new SclParserException(gseNode, "SMV is missing required attribute"); + + Node addressNode = ParserUtils.getChildNodeWithTag(gseNode, "Address"); + + if (addressNode == null) + throw new SclParserException(gseNode, "SMV is missing address definition!"); + + address = new PhyComAddress(addressNode); + } + + public String getLdInst() { + return ldInst; + } + + public String getCbName() { + return cbName; + } + + public PhyComAddress getAddress() { + return address; + } +} diff --git a/tools/model_generator/src/com/libiec61850/scl/model/DataAttribute.java b/tools/model_generator/src/com/libiec61850/scl/model/DataAttribute.java index 44193d78..8362d86e 100644 --- a/tools/model_generator/src/com/libiec61850/scl/model/DataAttribute.java +++ b/tools/model_generator/src/com/libiec61850/scl/model/DataAttribute.java @@ -87,6 +87,8 @@ public class DataAttribute implements DataModelNode { if (!(this.sclType instanceof EnumerationType)) throw new SclParserException("Wrong type definition for enumerated data attribute"); + + this.sclType.setUsed(true); } private void createConstructedAttribute(DataAttributeDefinition daDefinition, TypeDeclarations typeDeclarations) @@ -98,6 +100,8 @@ public class DataAttribute implements DataModelNode { if (!(this.sclType instanceof DataAttributeType)) throw new SclParserException("Wrong type definition for constructed data attribute"); + + this.sclType.setUsed(true); DataAttributeType dataAttributeType = (DataAttributeType) this.sclType; diff --git a/tools/model_generator/src/com/libiec61850/scl/model/DataObject.java b/tools/model_generator/src/com/libiec61850/scl/model/DataObject.java index 7a861767..c7fae5e0 100644 --- a/tools/model_generator/src/com/libiec61850/scl/model/DataObject.java +++ b/tools/model_generator/src/com/libiec61850/scl/model/DataObject.java @@ -55,6 +55,9 @@ public class DataObject implements DataModelNode { if (sclType == null) throw new SclParserException("type declaration missing for data object."); + + /* mark type as used */ + sclType.setUsed(true); createDataAttributes(typeDeclarations, sclType); @@ -82,12 +85,9 @@ public class DataObject implements DataModelNode { for (DataAttributeDefinition daDefinition : daDefinitions) { - if (daDefinition.getFc() == FunctionalConstraint.SE) { - - System.out.println("Add SG DA for corresponding SE DA: "); - this.dataAttributes.add(new DataAttribute(daDefinition, typeDeclarations, FunctionalConstraint.SG, this)); - } - + if (daDefinition.getFc() == FunctionalConstraint.SE) + this.dataAttributes.add(new DataAttribute(daDefinition, typeDeclarations, FunctionalConstraint.SG, this)); + this.dataAttributes.add(new DataAttribute(daDefinition, typeDeclarations, null, this)); diff --git a/tools/model_generator/src/com/libiec61850/scl/model/GSEControl.java b/tools/model_generator/src/com/libiec61850/scl/model/GSEControl.java index 40ee837e..73309921 100644 --- a/tools/model_generator/src/com/libiec61850/scl/model/GSEControl.java +++ b/tools/model_generator/src/com/libiec61850/scl/model/GSEControl.java @@ -36,40 +36,45 @@ public class GSEControl { private boolean fixedOffs = false; private int minTime = -1; private int maxTime = -1; - + public GSEControl(Node gseControlNode) throws SclParserException { this.name = ParserUtils.parseAttribute(gseControlNode, "name"); this.desc = ParserUtils.parseAttribute(gseControlNode, "desc"); this.dataSet = ParserUtils.parseAttribute(gseControlNode, "datSet"); - - String confRevString = ParserUtils.parseAttribute(gseControlNode, "confRev"); - + + String confRevString = ParserUtils.parseAttribute(gseControlNode, + "confRev"); + if (confRevString != null) this.confRev = new Integer(confRevString); - + this.appID = ParserUtils.parseAttribute(gseControlNode, "appID"); - - Boolean fixedOffs = ParserUtils.parseBooleanAttribute(gseControlNode, "fixedOffs"); - - if (fixedOffs != null) - this.fixedOffs = fixedOffs; - - String minTimeStr = ParserUtils.parseAttribute(gseControlNode, "minTime"); - String maxTimeStr = ParserUtils.parseAttribute(gseControlNode, "maxTime"); - - if (minTimeStr != null) - minTime = new Integer(minTimeStr); - - if (maxTimeStr != null) - maxTime = new Integer(maxTimeStr); - - String typeString = ParserUtils.parseAttribute(gseControlNode, "type"); - - if (typeString != null) - if (!typeString.equals("GOOSE")) - throw new SclParserException(gseControlNode, "GSEControl of type " + typeString + " not supported!"); - + + Boolean fixedOffs = ParserUtils.parseBooleanAttribute(gseControlNode, + "fixedOffs"); + + if (fixedOffs != null) + this.fixedOffs = fixedOffs; + + String minTimeStr = ParserUtils.parseAttribute(gseControlNode, + "minTime"); + String maxTimeStr = ParserUtils.parseAttribute(gseControlNode, + "maxTime"); + + if (minTimeStr != null) + minTime = new Integer(minTimeStr); + + if (maxTimeStr != null) + maxTime = new Integer(maxTimeStr); + + String typeString = ParserUtils.parseAttribute(gseControlNode, "type"); + + if (typeString != null) + if (!typeString.equals("GOOSE")) + throw new SclParserException(gseControlNode, + "GSEControl of type " + typeString + " not supported!"); + } public String getName() { diff --git a/tools/model_generator/src/com/libiec61850/scl/model/LogicalNode.java b/tools/model_generator/src/com/libiec61850/scl/model/LogicalNode.java index 8fa7c58c..021dfc80 100644 --- a/tools/model_generator/src/com/libiec61850/scl/model/LogicalNode.java +++ b/tools/model_generator/src/com/libiec61850/scl/model/LogicalNode.java @@ -47,6 +47,7 @@ public class LogicalNode implements DataModelNode { private List dataSets; private List reportControlBlocks; private List gseControlBlocks; + private List smvControlBlocks; private List logControlBlocks; private List logs; private List settingGroupControlBlocks; @@ -81,6 +82,9 @@ public class LogicalNode implements DataModelNode { dataObjects = new LinkedList(); LogicalNodeType type = (LogicalNodeType) sclType; + + /* mark type as used */ + type.setUsed(true); List doDefinitions = type.getDataObjectDefinitions(); @@ -113,6 +117,13 @@ public class LogicalNode implements DataModelNode { for (Node gseControlNode : gseControlNodes) gseControlBlocks.add(new GSEControl(gseControlNode)); + /* Parse Sampled Values (SV) control block definitions */ + smvControlBlocks = new LinkedList(); + + List svControlNodes = ParserUtils.getChildNodesWithTag(lnNode, "SampledValueControl"); + for (Node svControlNode : svControlNodes) + smvControlBlocks.add(new SampledValueControl(svControlNode)); + /* Parse log control block definitions */ logControlBlocks = new LinkedList(); @@ -261,6 +272,10 @@ public class LogicalNode implements DataModelNode { return gseControlBlocks; } + public List getSampledValueControlBlocks() { + return smvControlBlocks; + } + public List getSettingGroupControlBlocks() { return settingGroupControlBlocks; } diff --git a/tools/model_generator/src/com/libiec61850/scl/model/SampledValueControl.java b/tools/model_generator/src/com/libiec61850/scl/model/SampledValueControl.java new file mode 100644 index 00000000..f2f03b66 --- /dev/null +++ b/tools/model_generator/src/com/libiec61850/scl/model/SampledValueControl.java @@ -0,0 +1,92 @@ +package com.libiec61850.scl.model; + +import org.w3c.dom.Node; + +import com.libiec61850.scl.ParserUtils; +import com.libiec61850.scl.SclParserException; + +public class SampledValueControl { + + private String name; + private String desc = null; + private String datSet; + private int confRev = 1; + private String smvID; + private int smpRate; + private int nofASDU; + private boolean multicast = false; + private SmvOpts smvOpts; + + + + public SampledValueControl(Node smvControlNode) throws SclParserException { + this.name = ParserUtils.parseAttribute(smvControlNode, "name"); + this.desc = ParserUtils.parseAttribute(smvControlNode, "desc"); + this.datSet = ParserUtils.parseAttribute(smvControlNode, "datSet"); + + String confRevString = ParserUtils.parseAttribute(smvControlNode, "confRev"); + + if (confRevString != null) + this.confRev = new Integer(confRevString); + + this.smvID = ParserUtils.parseAttribute(smvControlNode, "smvID"); + + Boolean multicast = ParserUtils.parseBooleanAttribute(smvControlNode, "multicast"); + + if (multicast != null) + this.multicast = multicast; + + String smpRateString = ParserUtils.parseAttribute(smvControlNode, "smpRate"); + + if (smpRateString != null) + this.smpRate = new Integer(smpRateString); + + String nofASDUString = ParserUtils.parseAttribute(smvControlNode, "nofASDU"); + + if (nofASDUString != null) + this.nofASDU = new Integer(nofASDUString); + + Node smvOptsNode = ParserUtils.getChildNodeWithTag(smvControlNode, "SmvOpts"); + + this.smvOpts = new SmvOpts(smvOptsNode); + } + + + + public String getName() { + return name; + } + + public String getDesc() { + return desc; + } + + public String getDatSet() { + return datSet; + } + + public int getConfRev() { + return confRev; + } + + public String getSmvID() { + return smvID; + } + + public int getSmpRate() { + return smpRate; + } + + public int getNofASDI() { + return nofASDU; + } + + public boolean isMulticast() { + return multicast; + } + + public SmvOpts getSmvOpts() { + return smvOpts; + } + +} diff --git a/tools/model_generator/src/com/libiec61850/scl/model/SmvOpts.java b/tools/model_generator/src/com/libiec61850/scl/model/SmvOpts.java new file mode 100644 index 00000000..02646af9 --- /dev/null +++ b/tools/model_generator/src/com/libiec61850/scl/model/SmvOpts.java @@ -0,0 +1,54 @@ +package com.libiec61850.scl.model; + +import org.w3c.dom.Node; + +import com.libiec61850.scl.ParserUtils; +import com.libiec61850.scl.SclParserException; + +public class SmvOpts { + + + private boolean refreshTime = false; /* 1 */ + private boolean sampleSynchronized = false; /* 2 */ + private boolean sampleRate = false; /* 4 */ + private boolean dataSet = false; /* 8 */ + private boolean security = false; /* 16 */ + + + public SmvOpts(Node smvOptsNode) throws SclParserException { + + Boolean refreshTime = ParserUtils.parseBooleanAttribute(smvOptsNode, "refreshTime"); + if (refreshTime != null) + this.refreshTime = refreshTime; + + Boolean sampleRate = ParserUtils.parseBooleanAttribute(smvOptsNode, "sampleRate"); + if (sampleRate != null) + this.sampleRate = sampleRate; + + Boolean dataSet = ParserUtils.parseBooleanAttribute(smvOptsNode, "dataSet"); + if (dataSet != null) + this.dataSet = dataSet; + + Boolean security = ParserUtils.parseBooleanAttribute(smvOptsNode, "security"); + if (security != null) + this.security = security; + + Boolean sampleSynchronized = ParserUtils.parseBooleanAttribute(smvOptsNode, "sampleSynchronized"); + if (sampleSynchronized != null) + this.sampleSynchronized = sampleSynchronized; + + } + + + public int getIntValue() { + int intValue = 0; + + if (refreshTime) intValue += 1; + if (sampleSynchronized) intValue += 2; + if (sampleRate) intValue += 4; + if (dataSet) intValue += 8; + if (security) intValue += 16; + + return intValue; + } +} diff --git a/tools/model_generator/src/com/libiec61850/scl/types/SclType.java b/tools/model_generator/src/com/libiec61850/scl/types/SclType.java index 04c9e45d..fab834bb 100644 --- a/tools/model_generator/src/com/libiec61850/scl/types/SclType.java +++ b/tools/model_generator/src/com/libiec61850/scl/types/SclType.java @@ -26,10 +26,11 @@ import org.w3c.dom.Node; import com.libiec61850.scl.ParserUtils; import com.libiec61850.scl.SclParserException; -public class SclType { +public abstract class SclType { private String id = null; private String description; + private boolean isUsed = false; public SclType(Node xmlNode) throws SclParserException { this.id = ParserUtils.parseAttribute(xmlNode, "id"); @@ -51,4 +52,12 @@ public class SclType { public String getDesc() { return description; } + + public void setUsed(boolean isUsed) { + this.isUsed = isUsed; + } + + public boolean isUsed() { + return this.isUsed; + } } diff --git a/tools/model_generator/src/com/libiec61850/scl/types/TypeDeclarations.java b/tools/model_generator/src/com/libiec61850/scl/types/TypeDeclarations.java index 4d9999ae..2931ce15 100644 --- a/tools/model_generator/src/com/libiec61850/scl/types/TypeDeclarations.java +++ b/tools/model_generator/src/com/libiec61850/scl/types/TypeDeclarations.java @@ -68,5 +68,11 @@ public class TypeDeclarations { return null; } + + public List getTypeDeclarations() { + return typeDeclarations; + } + + } diff --git a/tools/model_generator/src/com/libiec61850/tools/DynamicModelGenerator.java b/tools/model_generator/src/com/libiec61850/tools/DynamicModelGenerator.java index ac47251c..a7fd6606 100644 --- a/tools/model_generator/src/com/libiec61850/tools/DynamicModelGenerator.java +++ b/tools/model_generator/src/com/libiec61850/tools/DynamicModelGenerator.java @@ -35,7 +35,7 @@ import com.libiec61850.scl.DataAttributeDefinition; import com.libiec61850.scl.SclParser; import com.libiec61850.scl.SclParserException; import com.libiec61850.scl.communication.ConnectedAP; -import com.libiec61850.scl.communication.GSEAddress; +import com.libiec61850.scl.communication.PhyComAddress; import com.libiec61850.scl.model.AccessPoint; import com.libiec61850.scl.model.DataAttribute; import com.libiec61850.scl.model.DataModelValue; @@ -62,7 +62,7 @@ public class DynamicModelGenerator { if (iedName == null) ied = sclParser.getFirstIed(); else - ied = sclParser.getIedByteName(iedName); + ied = sclParser.getIedByName(iedName); if (ied == null) throw new SclParserException("No data model present in SCL file! Exit."); @@ -145,7 +145,7 @@ public class DynamicModelGenerator { for (GSEControl gcb : logicalNode.getGSEControlBlocks()) { LogicalDevice ld = logicalNode.getParentLogicalDevice(); - GSEAddress gseAddress = null; + PhyComAddress gseAddress = null; if (connectedAP != null) gseAddress = connectedAP.lookupGSEAddress(ld.getInst(), gcb.getName()); diff --git a/tools/model_generator/src/com/libiec61850/tools/ModelViewer.java b/tools/model_generator/src/com/libiec61850/tools/ModelViewer.java new file mode 100644 index 00000000..b1059043 --- /dev/null +++ b/tools/model_generator/src/com/libiec61850/tools/ModelViewer.java @@ -0,0 +1,275 @@ +package com.libiec61850.tools; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.List; + +import com.libiec61850.scl.SclParser; +import com.libiec61850.scl.SclParserException; +import com.libiec61850.scl.model.AccessPoint; +import com.libiec61850.scl.model.DataAttribute; +import com.libiec61850.scl.model.DataObject; +import com.libiec61850.scl.model.IED; +import com.libiec61850.scl.model.LogicalDevice; +import com.libiec61850.scl.model.LogicalNode; +import com.libiec61850.scl.model.Server; +import com.libiec61850.scl.types.DataAttributeType; +import com.libiec61850.scl.types.DataObjectType; +import com.libiec61850.scl.types.EnumerationType; +import com.libiec61850.scl.types.LogicalNodeType; +import com.libiec61850.scl.types.SclType; +import com.libiec61850.scl.types.TypeDeclarations; + +public class ModelViewer { + + private static void showTypes(InputStream stream, String icdFile, PrintStream output, String iedName, String accessPointName, boolean unusedOnly) + throws SclParserException { + + SclParser sclParser = new SclParser(stream, false); + + TypeDeclarations typeDecl = sclParser.getTypeDeclarations(); + + for (SclType type : typeDecl.getTypeDeclarations()) { + + if (unusedOnly) { + if (type.isUsed() == true) + continue; + } + + output.print(type.getId()); + + if (type.getClass() == LogicalNodeType.class) + output.print(" : LogicalNode"); + else if (type.getClass() == DataObjectType.class) + output.print(" : DataObject"); + else if (type.getClass() == DataAttributeType.class) + output.print(" : DataAttribute"); + else if (type.getClass() == EnumerationType.class) + output.print(" : Enumeration"); + + if (!unusedOnly) + if (type.isUsed() == false) + System.out.print(" UNUSED TYPE!"); + + output.println(); + } + } + + private static void printSubAttributes(DataAttribute attribute, PrintStream output, String indent, String add) { + + if (attribute.getSubDataAttributes() != null) { + + for (DataAttribute attr : attribute.getSubDataAttributes()) { + output.println(indent + add + attr.getName()); + + printSubAttributes(attr, output, indent + add, add); + } + } + } + + private static void printModelStructure(InputStream stream, String icdFile, PrintStream output, String iedName, String accessPointName) + throws SclParserException { + + SclParser sclParser = new SclParser(stream, false); + + IED ied = null; + + if (iedName == null) + ied = sclParser.getFirstIed(); + else + ied = sclParser.getIedByName(iedName); + + AccessPoint ap = ied.getFirstAccessPoint(); + + Server server = ap.getServer(); + + List devices = server.getLogicalDevices(); + + for (LogicalDevice device : devices) { + output.println(device.getInst()); + + List lNodes = device.getLogicalNodes(); + + for (LogicalNode lNode : lNodes) { + output.println(" " + lNode.getName()); + + for (DataObject dObject : lNode.getDataObjects()) { + output.println(" " + dObject.getName()); + + for (DataAttribute dAttribute : dObject.getDataAttributes()) { + output.println(" " + dAttribute.getName() + " [" + dAttribute.getFc().toString() + "]"); + + printSubAttributes(dAttribute, output, " ", " "); + } + + } + } + } + + } + + + private static void printSubAttributeList(DataAttribute attribute, PrintStream output, String prefix) { + + if (attribute.getSubDataAttributes() != null) { + + for (DataAttribute attr : attribute.getSubDataAttributes()) { + + String nextPrefix = prefix + "." + attr.getName(); + + output.println(nextPrefix + " [" + attr.getFc() + "]"); + + printSubAttributeList(attr, output, nextPrefix); + } + } + } + + + private static void printAttributeList(InputStream stream, String icdFile, PrintStream output, String iedName, String accessPointName) + throws SclParserException { + + SclParser sclParser = new SclParser(stream, false); + + IED ied = null; + + if (iedName == null) + ied = sclParser.getFirstIed(); + else + ied = sclParser.getIedByName(iedName); + + AccessPoint ap = ied.getFirstAccessPoint(); + + Server server = ap.getServer(); + + List devices = server.getLogicalDevices(); + + + + for (LogicalDevice device : devices) { + + String devPrefix = ied.getName() + device.getInst() + "/"; + + List lNodes = device.getLogicalNodes(); + + for (LogicalNode lNode : lNodes) { + String lNodePrefix = devPrefix + lNode.getName(); + + for (DataObject dObject : lNode.getDataObjects()) { + + String dOPrefix = lNodePrefix + "." + dObject.getName(); + + for (DataAttribute dAttribute : dObject.getDataAttributes()) { + + String daPrefix = dOPrefix + "." + dAttribute.getName(); + + output.println(daPrefix + " [" + dAttribute.getFc().toString() + "]"); + + printSubAttributeList(dAttribute, output, daPrefix); + } + + } + } + } + + } + + public static void main(String[] args) throws FileNotFoundException { + + if (args.length < 1) { + System.out.println("SCL model viewer"); + System.out.println("Usage: scltool [-ied ] [-ap ] [-t] [-s] [-a] []"); + System.out.println(" -ied select IED"); + System.out.println(" -ap select AP"); + System.out.println(" -t print type list"); + System.out.println(" -u print list of unused types"); + System.out.println(" -s print IED device model structure"); + System.out.println(" -a print list of data attributes (object references)"); + System.exit(1); + } + + String icdFile = args[0]; + + PrintStream outputStream = System.out; + + String accessPointName = null; + String iedName = null; + + boolean printTypeList = false; + boolean printUnusedTypes = false; + boolean printModelStructure = false; + boolean printDataAttribtues = false; + + if (args.length > 1) { + for (int i = 1; i < args.length; i++) { + if (args[i].equals("-ap")) { + accessPointName = args[i+1]; + + System.out.println("Select access point " + accessPointName); + + i++; + } + else if (args[i].equals("-ied")) { + iedName = args[i+1]; + + System.out.println("Select IED " + iedName); + + i++; + + } + else if (args[i].equals("-t")) { + printTypeList = true; + + i++; + + } + else if (args[i].equals("-s")) { + printModelStructure = true; + + i++; + + } + else if (args[i].equals("-a")) { + printDataAttribtues = true; + + i++; + + } + else if (args[i].equals("-u")) { + printUnusedTypes = true; + + i++; + + } + else { + outputStream = new PrintStream(new FileOutputStream(new File(args[i]))); + } + } + + } + + InputStream stream = new FileInputStream(icdFile); + + try { + if (printTypeList) + showTypes(stream, icdFile, outputStream, iedName, accessPointName, false); + + if (printUnusedTypes) + showTypes(stream, icdFile, outputStream, iedName, accessPointName, true); + + if (printModelStructure) + printModelStructure(stream, icdFile, outputStream, iedName, accessPointName); + + if (printDataAttribtues) + printAttributeList(stream, icdFile, outputStream, iedName, accessPointName); + + + } catch (SclParserException e) { + System.err.println("ERROR: " + e.getMessage()); + } + } + +} diff --git a/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java b/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java index c35b8392..a0b1ea6d 100644 --- a/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java +++ b/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java @@ -37,7 +37,7 @@ import com.libiec61850.scl.SclParserException; import com.libiec61850.scl.communication.Communication; import com.libiec61850.scl.communication.ConnectedAP; import com.libiec61850.scl.communication.GSE; -import com.libiec61850.scl.communication.GSEAddress; +import com.libiec61850.scl.communication.PhyComAddress; import com.libiec61850.scl.communication.SubNetwork; import com.libiec61850.scl.model.AccessPoint; import com.libiec61850.scl.model.DataAttribute; @@ -51,6 +51,7 @@ import com.libiec61850.scl.model.IED; import com.libiec61850.scl.model.LogicalDevice; import com.libiec61850.scl.model.LogicalNode; import com.libiec61850.scl.model.ReportControlBlock; +import com.libiec61850.scl.model.SampledValueControl; import com.libiec61850.scl.model.Server; import com.libiec61850.scl.model.SettingControl; import com.libiec61850.scl.model.TriggerOptions; @@ -71,6 +72,10 @@ public class StaticModelGenerator { private List gseVariableNames; private int currentGseVariableNumber = 0; + private StringBuffer smvControlBlocks; + private List smvVariableNames; + private int currentSvCBVariableNumber = 0; + private StringBuffer settingGroupControlBlocks; private List sgcbVariableNames; private int currentSGCBVariableNumber = 0; @@ -101,6 +106,9 @@ public class StaticModelGenerator { this.gseControlBlocks = new StringBuffer(); this.gseVariableNames = new LinkedList(); + this.smvControlBlocks = new StringBuffer(); + this.smvVariableNames = new LinkedList(); + this.settingGroupControlBlocks = new StringBuffer(); this.sgcbVariableNames = new LinkedList(); @@ -121,7 +129,7 @@ public class StaticModelGenerator { if (iedName == null) ied = sclParser.getFirstIed(); else - ied = sclParser.getIedByteName(iedName); + ied = sclParser.getIedByName(iedName); if (ied == null) System.out.println("IED model not found in SCL file! Exit."); @@ -267,6 +275,8 @@ public class StaticModelGenerator { createGooseVariableList(logicalDevices); + createSmvVariableList(logicalDevices); + createSettingControlsVariableList(logicalDevices); for (int i = 0; i < logicalDevices.size(); i++) { @@ -308,6 +318,11 @@ public class StaticModelGenerator { cOut.println(reportControlBlocks); + for (String smv : smvVariableNames) + cOut.println("extern SVControlBlock " + smv + ";"); + + cOut.println(smvControlBlocks); + for (String gcb : gseVariableNames) cOut.println("extern GSEControlBlock " + gcb + ";"); @@ -338,6 +353,11 @@ public class StaticModelGenerator { else cOut.println(" NULL,"); + if (smvVariableNames.size() > 0) + cOut.println(" &" + smvVariableNames.get(0) + ","); + else + cOut.println(" NULL,"); + if (sgcbVariableNames.size() > 0) cOut.println(" &" + sgcbVariableNames.get(0) + ","); else @@ -366,6 +386,28 @@ public class StaticModelGenerator { } } + + private void createSmvVariableList(List logicalDevices) { + for (LogicalDevice ld : logicalDevices) { + List lnodes = ld.getLogicalNodes(); + + String ldName = ld.getInst(); + + + for (LogicalNode ln : lnodes) { + List svCBs = ln.getSampledValueControlBlocks(); + + int smvCount = 0; + + for (SampledValueControl smv : svCBs) { + String smvVariableName = modelPrefix + "_" + ldName + "_" + ln.getName() + "_smv" + smvCount; + smvVariableNames.add(smvVariableName); + smvCount++; + } + } + } + } + private void createReportVariableList(List logicalDevices) { for (LogicalDevice ld : logicalDevices) { @@ -445,6 +487,8 @@ public class StaticModelGenerator { printGSEControlBlocks(ldName, lnName, logicalNode); + printSVControlBlocks(ldName, lnName, logicalNode); + printSettingControlBlock(lnName, logicalNode); } } @@ -539,7 +583,7 @@ public class StaticModelGenerator { cOut.println(" " + dataAttribute.getCount() + ","); cOut.println(" IEC61850_FC_" + dataAttribute.getFc().toString() + ","); - cOut.println(" " + dataAttribute.getType() + ","); + cOut.println(" IEC61850_" + dataAttribute.getType() + ","); /* print trigger options */ cOut.print(" 0"); @@ -742,18 +786,107 @@ public class StaticModelGenerator { hOut.println("#endif /* " + hDefineName + " */\n"); } + private void printSVControlBlocks(String ldName, String lnPrefix, LogicalNode logicalNode) { + List svControlBlocks = logicalNode.getSampledValueControlBlocks(); + + /* strip "iedModel_" from ldName */ + String[] ldNameComponents = ldName.split("_"); + String logicalDeviceName = ldNameComponents[1]; + + int smvControlNumber = 0; + + for (SampledValueControl svCB : svControlBlocks) { + + System.out.println("SVCB: " + svCB.getName()); + + PhyComAddress svAddress = connectedAP.lookupSMVAddress(logicalDeviceName, svCB.getName()); + + String svString = ""; + + String phyComAddrName = ""; + + if (svAddress != null) { + phyComAddrName = lnPrefix + "_smv" + smvControlNumber + "_address"; + + svString += "\nstatic PhyComAddress " + phyComAddrName + " = {\n"; + svString += " " + svAddress.getVlanPriority() + ",\n"; + svString += " " + svAddress.getVlanId() + ",\n"; + svString += " " + svAddress.getAppId() + ",\n"; + svString += " {"; + + for (int i = 0; i < 6; i++) { + svString += "0x" + Integer.toHexString(svAddress.getMacAddress()[i]); + if (i == 5) + svString += "}\n"; + else + svString += ", "; + } + + svString += "};\n\n"; + } + + String smvVariableName = lnPrefix + "_smv" + smvControlNumber; + + svString += "SVControlBlock " + smvVariableName + " = {"; + svString += "&" + lnPrefix + ", "; + + svString += "\"" + svCB.getName() + "\", "; + + if (svCB.getSmvID() == null) + svString += "NULL, "; + else + svString += "\"" + svCB.getSmvID() + "\", "; + + if (svCB.getDatSet() != null) + svString += "\"" + svCB.getDatSet() + "\", "; + else + svString += "NULL, "; + + svString += svCB.getSmvOpts().getIntValue() + ", "; + + svString += "0, " + svCB.getSmpRate() + ", "; + + svString += svCB.getConfRev() + ", "; + + if (svAddress != null) + svString += "&" + phyComAddrName + ", "; + else + svString += "NULL, "; + + if (svCB.isMulticast()) + svString += "false, "; + else + svString += "true, "; + + svString += svCB.getNofASDI() + ", "; + + currentSvCBVariableNumber++; + + if (currentSvCBVariableNumber < smvVariableNames.size()) + svString += "&" + smvVariableNames.get(currentSvCBVariableNumber); + else + svString += "NULL"; + + svString += "};\n"; + + this.smvControlBlocks.append(svString); + + smvControlNumber++; + } + } + private void printGSEControlBlocks(String ldName, String lnPrefix, LogicalNode logicalNode) { List gseControlBlocks = logicalNode.getGSEControlBlocks(); + /* strip "iedModel_" from ldName */ String[] ldNameComponents = ldName.split("_"); - String logicalDeviceName = ldNameComponents[1]; int gseControlNumber = 0; for (GSEControl gseControlBlock : gseControlBlocks) { - GSEAddress gseAddress = connectedAP.lookupGSEAddress(logicalDeviceName, gseControlBlock.getName()); + PhyComAddress gseAddress = connectedAP.lookupGSEAddress(logicalDeviceName, gseControlBlock.getName()); String gseString = "";