diff --git a/CMakeLists.txt b/CMakeLists.txt index a4902a2..55ccc69 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 816d55f..aa8f5ba 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 e6a12ed..3117ad9 100644 --- a/config/stack_config.h +++ b/config/stack_config.h @@ -18,7 +18,7 @@ #define DEBUG_ISO_SERVER 0 #define DEBUG_ISO_CLIENT 0 #define DEBUG_IED_SERVER 0 -#define DEBUG_IED_CLIENT 0 +#define DEBUG_IED_CLIENT 1 #define DEBUG_MMS_CLIENT 0 #define DEBUG_MMS_SERVER 0 #define DEBUG_GOOSE_SUBSCRIBER 0 diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 5bc51cf..8e0f41d 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 61f781e..b5f2039 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/iec61850_sv_client_example/sv_client_example.c b/examples/iec61850_sv_client_example/sv_client_example.c index 1a09384..1ffe8ae 100644 --- a/examples/iec61850_sv_client_example/sv_client_example.c +++ b/examples/iec61850_sv_client_example/sv_client_example.c @@ -11,6 +11,19 @@ #include "hal_thread.h" +static void +printDstAddr(DstAddress dstAddress) +{ + printf(" addr: "); + + int i; + for (i = 0; i < 6; i++) + printf("%02x", dstAddress.addr[i]); + + printf("\n prio: %u\n", dstAddress.priority); + printf(" vid: %u\n", dstAddress.vid); + printf(" appID: %u\n", dstAddress.appId); +} int main(int argc, char** argv) { @@ -85,6 +98,9 @@ int main(int argc, char** argv) { printf("noASDU: %i\n", ClientSVControlBlock_getNoASDU(svcb)); + DstAddress dstAddress = ClientSVControlBlock_getDstAddress(svcb); + + printDstAddr(dstAddress); } else { diff --git a/examples/server_example1/static_model.c b/examples/server_example1/static_model.c index c6b2544..3f4b234 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 DataSet iedModelds_Device1_LLN0_dataset1; -extern DataSetEntry ds_Device1_LLN0_dataset1_fcda0; -extern DataSetEntry ds_Device1_LLN0_dataset1_fcda1; -extern DataSetEntry ds_Device1_LLN0_dataset1_fcda2; +extern DataSetEntry iedModelds_Device1_LLN0_dataset1_fcda0; +extern DataSetEntry iedModelds_Device1_LLN0_dataset1_fcda1; +extern DataSetEntry iedModelds_Device1_LLN0_dataset1_fcda2; -DataSetEntry ds_Device1_LLN0_dataset1_fcda0 = { +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 }; @@ -1723,7 +1590,8 @@ DataAttribute iedModel_Device1_MMXU2_TotW_t = { 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 ae61c9d..2e935ca 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 DataSet iedModelds_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; +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 ds_Inverter_LLN0_dataset1_fcda0 = { +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 }; @@ -3877,7 +3580,8 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_t = { 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 8080ff9..84faec8 100644 --- a/examples/server_example3/static_model.c +++ b/examples/server_example3/static_model.c @@ -1955,6 +1955,7 @@ ReportControlBlock iedModel_GenericIO_LLN0_report6 = {&iedModel_GenericIO_LLN0, + IedModel iedModel = { "simpleIO", &iedModel_GenericIO, @@ -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 d5334bc..c2c99bf 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 DataSet iedModelds_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; +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 ds_GenericIO_LLN0_Events_fcda0 = { +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 }; @@ -1915,7 +1773,8 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_t = { 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 ae61c9d..2e935ca 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 DataSet iedModelds_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; +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 ds_Inverter_LLN0_dataset1_fcda0 = { +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 }; @@ -3877,7 +3580,8 @@ DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_t = { 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 68f61f2..b34a03f 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; @@ -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 71cad7d..3bc9396 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; @@ -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 bcd616e..58fdeae 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 8bd02ad..b538b20 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; @@ -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_goose/static_model.c b/examples/server_example_goose/static_model.c index 64549d3..69df5e7 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 DataSet iedModelds_GenericIO_LLN0_Events; +extern DataSet iedModelds_GenericIO_LLN0_Events2; +extern DataSet iedModelds_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; +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 ds_GenericIO_LLN0_Events_fcda0 = { +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 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_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_AnalogValues_fcda0 = { +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 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 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 }; @@ -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 ef3bef8..3086c38 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 d02d95f..2c10dc4 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; @@ -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 b1bd317..1fdf97c 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 DataSet iedModelds_GenericIO_LLN0_Events; +extern DataSet iedModelds_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; +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 ds_GenericIO_LLN0_Events_fcda0 = { +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 }; @@ -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 0000000..ff8cd51 --- /dev/null +++ b/examples/sv_subscriber/CMakeLists.txt @@ -0,0 +1,34 @@ + +set(sv_subscriber_example_SRCS + sv_subscriber_example.c +) + +IF(WIN32) + +IF(WITH_WPCAP) + +set_source_files_properties(${sv_subscriber_example_SRCS} + PROPERTIES LANGUAGE CXX) +add_executable(sv_subscriber_example + ${sv_subscriber_example_SRCS} +) + +target_link_libraries(svsubscriber_example + iec61850 +) + +ENDIF(WITH_WPCAP) + +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 0000000..f84c02d --- /dev/null +++ b/examples/sv_subscriber/Makefile @@ -0,0 +1,21 @@ +LIBIEC_HOME=../../../libiec61850 + +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 0000000..131bc5e --- /dev/null +++ b/examples/sv_subscriber/sv_subscriber_example.c @@ -0,0 +1,73 @@ +/* + * subscriber_test.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)); + + 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) { + printf("Set interface id: %s\n", argv[1]); + SVReceiver_setInterfaceId(receiver, argv[1]); + } + else { + printf("Using interface eth0\n"); + SVReceiver_setInterfaceId(receiver, "eth0"); + } + + SVSubscriber subscriber = SVSubscriber_create(NULL, 0x4000); + + SVSubscriber_setListener(subscriber, svUpdateListener, NULL); + + SVReceiver_addSubscriber(receiver, subscriber); + + SVReceiver_start(receiver); + + signal(SIGINT, sigint_handler); + + while (running) { + Thread_sleep(1); + } + + SVReceiver_stop(receiver); + + SVReceiver_destroy(receiver); +} diff --git a/make/stack_includes.mk b/make/stack_includes.mk index 28e1291..3ddcc44 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 46dbfae..8d83534 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/iec61850/common/iec61850_common.c b/src/iec61850/common/iec61850_common.c index 4a35256..7dae412 100644 --- a/src/iec61850/common/iec61850_common.c +++ b/src/iec61850/common/iec61850_common.c @@ -292,7 +292,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 027c928..69dce0f 100644 --- a/src/iec61850/inc/iec61850_client.h +++ b/src/iec61850/inc/iec61850_client.h @@ -327,6 +327,7 @@ IedConnection_getMmsConnection(IedConnection self); /** 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; @@ -370,7 +371,7 @@ ClientSVControlBlock_isMulticast(ClientSVControlBlock self); * \return the error code of the last read or write access */ IedClientError -ClientSVControlBlock_getLastError(ClientSVControlBlock self); +ClientSVControlBlock_getLastComError(ClientSVControlBlock self); bool @@ -382,6 +383,9 @@ ClientSVControlBlock_getSvEna(ClientSVControlBlock self); bool ClientSVControlBlock_setResv(ClientSVControlBlock self, bool svEna); +bool +ClientSVControlBlock_getResv(ClientSVControlBlock self); + char* ClientSVControlBlock_getMsvID(ClientSVControlBlock self); diff --git a/src/mms/iso_mms/common/mms_value.c b/src/mms/iso_mms/common/mms_value.c index 9ecc61c..ebfa924 100644 --- a/src/mms/iso_mms/common/mms_value.c +++ b/src/mms/iso_mms/common/mms_value.c @@ -1968,22 +1968,6 @@ MmsValue_getTypeString(MmsValue* self) } } - -static void -msTimeToGeneralizedTime(uint64_t msTime, uint8_t* buffer, size_t bufferSize) -{ - time_t unixTime = (msTime / 1000); - - struct tm tmTime; - - int msPart = (msTime % 1000); - gmtime_r(&unixTime, &tmTime); - - snprintf((char*) buffer, bufferSize, "%04d%02d%02d%02d%02d%02d.%03dZ", tmTime.tm_year + 1900, tmTime.tm_mon + 1, - tmTime.tm_mday, tmTime.tm_hour, tmTime.tm_min, tmTime.tm_sec, msPart); -} - - char* MmsValue_printToBuffer(MmsValue* self, char* buffer, int bufferSize) { @@ -2022,7 +2006,11 @@ MmsValue_printToBuffer(MmsValue* self, char* buffer, int bufferSize) break; case MMS_BINARY_TIME: - msTimeToGeneralizedTime(MmsValue_getBinaryTimeAsUtcMs(self), (uint8_t*) buffer, bufferSize); + { + uint8_t tempBuf[20]; + Conversions_msTimeToGeneralizedTime(MmsValue_getBinaryTimeAsUtcMs(self), tempBuf); + snprintf(buffer, bufferSize, "%s", tempBuf); + } break; case MMS_BIT_STRING: @@ -2101,7 +2089,11 @@ MmsValue_printToBuffer(MmsValue* self, char* buffer, int bufferSize) break; case MMS_UTC_TIME: - msTimeToGeneralizedTime(MmsValue_getUtcTimeInMs(self), (uint8_t*) buffer, bufferSize); + { + uint8_t tempBuf[20]; + Conversions_msTimeToGeneralizedTime(MmsValue_getUtcTimeInMs(self), tempBuf); + snprintf(buffer, bufferSize, "%s", tempBuf); + } break; case MMS_STRING: diff --git a/src/sampled_values/sv_subscriber.c b/src/sampled_values/sv_subscriber.c new file mode 100644 index 0000000..4dde938 --- /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_MALLOC(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 0000000..b619e29 --- /dev/null +++ b/src/sampled_values/sv_subscriber.h @@ -0,0 +1,326 @@ +/* + * 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 + +/** + * \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 9041e69..c886c74 100644 --- a/src/vs/libiec61850-wo-goose.def +++ b/src/vs/libiec61850-wo-goose.def @@ -498,4 +498,19 @@ EXPORTS SVControlBlock_create SVControlBlock_addPhyComAddress GSEControlBlock_addPhyComAddress - GooseSubscriber_getConfRev \ No newline at end of file + 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 6012f5a..abde790 100644 --- a/src/vs/libiec61850.def +++ b/src/vs/libiec61850.def @@ -522,4 +522,45 @@ EXPORTS SVControlBlock_create SVControlBlock_addPhyComAddress GSEControlBlock_addPhyComAddress - GooseSubscriber_getConfRev \ No newline at end of file + 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