diff --git a/examples/server_example_complex_array/mhai_array.cid b/examples/server_example_complex_array/mhai_array.cid index 0b588518..06762205 100644 --- a/examples/server_example_complex_array/mhai_array.cid +++ b/examples/server_example_complex_array/mhai_array.cid @@ -103,11 +103,11 @@ - - - - - + + + + + diff --git a/examples/server_example_complex_array/server_example_ca.c b/examples/server_example_complex_array/server_example_ca.c index c70eb7b6..509d4876 100644 --- a/examples/server_example_complex_array/server_example_ca.c +++ b/examples/server_example_complex_array/server_example_ca.c @@ -26,26 +26,30 @@ sigint_handler(int signalId) } static void -updateCMVArrayElement(MmsValue *cval, int index, float magnitude, float angle, Quality quality, Timestamp timestamp) +updateCMVArrayElement(IedServer server, DataObject* phsAHar, int idx, float magnitude, float angle, Quality quality, Timestamp timestamp) { - MmsValue* cmv = MmsValue_getElement(cval, index); + DataObject* phsAHarArrayElem = (DataObject*)ModelNode_getChildWithIdx((ModelNode*)phsAHar, idx); - MmsValue* cValElement = MmsValue_getElement(cmv, 0); + if (phsAHarArrayElem) { - assert(MmsValue_getArraySize(cValElement) == 2); + DataAttribute* mag = (DataAttribute*)ModelNode_getChild((ModelNode*)phsAHarArrayElem, "cVal.mag.f"); + DataAttribute* ang = (DataAttribute*)ModelNode_getChild((ModelNode*)phsAHarArrayElem, "cVal.ang.f"); + DataAttribute* q = (DataAttribute*)ModelNode_getChild((ModelNode*)phsAHarArrayElem, "q"); + DataAttribute* t = (DataAttribute*)ModelNode_getChild((ModelNode*)phsAHarArrayElem, "t"); - MmsValue* cValElement_mag_f = MmsValue_getElement(MmsValue_getElement(cValElement, 0), 0); - - MmsValue* cValElement_ang_f = MmsValue_getElement(MmsValue_getElement(cValElement, 1), 0); - - MmsValue_setFloat(cValElement_mag_f, magnitude); - MmsValue_setFloat(cValElement_ang_f, angle); - - MmsValue* q = MmsValue_getElement(cmv, 1); - MmsValue_setBitStringFromInteger(q, (int) quality); - - MmsValue* t = MmsValue_getElement(cmv, 2); - MmsValue_setUtcTimeByBuffer(t, timestamp.val); + if (mag && ang && q && t) { + IedServer_updateQuality(server, q, quality); + IedServer_updateTimestampAttributeValue(server, t, ×tamp); + IedServer_updateFloatAttributeValue(server, mag, magnitude); + IedServer_updateFloatAttributeValue(server, ang, angle); + } + else { + printf("one of mag, ang, q, t not found\n"); + } + } + else { + printf("Element with index %i not found\n", idx); + } } int @@ -62,10 +66,7 @@ main(int argc, char **argv) /* Get access to the MHAI1.HA data object handle - for static and dynamic model*/ DataObject* mhai1_ha_phsAHar = (DataObject*) - IedModel_getModelNodeByObjectReference(&iedModel, "testComplexArray/MHAI1.HA.phsAHar"); - - /* Get access to the corresponding MMS value data structure - the MX(FC) part of the data object */ - MmsValue* mhai1_ha_phsAHar_mx = IedServer_getFunctionalConstrainedData(iedServer, mhai1_ha_phsAHar, IEC61850_FC_MX); + IedModel_getModelNodeByShortObjectReference(&iedModel, "ComplexArray/MHAI1.HA.phsAHar"); /* assuming the array has 16 elements */ float mag = 200.f; @@ -78,7 +79,7 @@ main(int argc, char **argv) int i; for (i = 0; i < 16; i++) { - updateCMVArrayElement(mhai1_ha_phsAHar_mx, i, mag, angle, quality, timestamp); + updateCMVArrayElement(iedServer, mhai1_ha_phsAHar, i, mag, angle, quality, timestamp); mag += 1.f; angle += 0.01f; } @@ -104,11 +105,13 @@ main(int argc, char **argv) Timestamp_setTimeInMilliseconds(×tamp, Hal_getTimeInMs()); IedServer_lockDataModel(iedServer); + for (i = 0; i < 16; i++) { - updateCMVArrayElement(mhai1_ha_phsAHar_mx, i, mag, angle, quality, timestamp); + updateCMVArrayElement(iedServer, mhai1_ha_phsAHar, i, mag, angle, quality, timestamp); mag += 0.1f; angle += 0.05f; } + IedServer_unlockDataModel(iedServer); if (counter == 10) { diff --git a/examples/server_example_complex_array/static_model.c b/examples/server_example_complex_array/static_model.c index 3f5a6f14..c4daacdf 100644 --- a/examples/server_example_complex_array/static_model.c +++ b/examples/server_example_complex_array/static_model.c @@ -79,7 +79,8 @@ LogicalDevice iedModel_ComplexArray = { "ComplexArray", (ModelNode*) &iedModel, NULL, - (ModelNode*) &iedModel_ComplexArray_LLN0 + (ModelNode*) &iedModel_ComplexArray_LLN0, + NULL }; LogicalNode iedModel_ComplexArray_LLN0 = { @@ -96,7 +97,8 @@ DataObject iedModel_ComplexArray_LLN0_Mod = { (ModelNode*) &iedModel_ComplexArray_LLN0, (ModelNode*) &iedModel_ComplexArray_LLN0_Beh, (ModelNode*) &iedModel_ComplexArray_LLN0_Mod_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_LLN0_Mod_stVal = { @@ -106,6 +108,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Mod_stVal = { (ModelNode*) &iedModel_ComplexArray_LLN0_Mod_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, @@ -119,6 +122,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Mod_q = { (ModelNode*) &iedModel_ComplexArray_LLN0_Mod_t, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -132,6 +136,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Mod_t = { (ModelNode*) &iedModel_ComplexArray_LLN0_Mod_ctlModel, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -145,6 +150,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Mod_ctlModel = { NULL, NULL, 0, + -1, IEC61850_FC_CF, IEC61850_ENUMERATED, 0, @@ -157,7 +163,8 @@ DataObject iedModel_ComplexArray_LLN0_Beh = { (ModelNode*) &iedModel_ComplexArray_LLN0, (ModelNode*) &iedModel_ComplexArray_LLN0_Health, (ModelNode*) &iedModel_ComplexArray_LLN0_Beh_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_LLN0_Beh_stVal = { @@ -167,6 +174,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Beh_stVal = { (ModelNode*) &iedModel_ComplexArray_LLN0_Beh_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, @@ -180,6 +188,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Beh_q = { (ModelNode*) &iedModel_ComplexArray_LLN0_Beh_t, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -193,6 +202,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Beh_t = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -205,7 +215,8 @@ DataObject iedModel_ComplexArray_LLN0_Health = { (ModelNode*) &iedModel_ComplexArray_LLN0, (ModelNode*) &iedModel_ComplexArray_LLN0_NamPlt, (ModelNode*) &iedModel_ComplexArray_LLN0_Health_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_LLN0_Health_stVal = { @@ -215,6 +226,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Health_stVal = { (ModelNode*) &iedModel_ComplexArray_LLN0_Health_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, @@ -228,6 +240,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Health_q = { (ModelNode*) &iedModel_ComplexArray_LLN0_Health_t, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -241,6 +254,7 @@ DataAttribute iedModel_ComplexArray_LLN0_Health_t = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -253,7 +267,8 @@ DataObject iedModel_ComplexArray_LLN0_NamPlt = { (ModelNode*) &iedModel_ComplexArray_LLN0, NULL, (ModelNode*) &iedModel_ComplexArray_LLN0_NamPlt_vendor, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_LLN0_NamPlt_vendor = { @@ -263,6 +278,7 @@ DataAttribute iedModel_ComplexArray_LLN0_NamPlt_vendor = { (ModelNode*) &iedModel_ComplexArray_LLN0_NamPlt_swRev, NULL, 0, + -1, IEC61850_FC_DC, IEC61850_VISIBLE_STRING_255, 0, @@ -276,6 +292,7 @@ DataAttribute iedModel_ComplexArray_LLN0_NamPlt_swRev = { (ModelNode*) &iedModel_ComplexArray_LLN0_NamPlt_d, NULL, 0, + -1, IEC61850_FC_DC, IEC61850_VISIBLE_STRING_255, 0, @@ -289,6 +306,7 @@ DataAttribute iedModel_ComplexArray_LLN0_NamPlt_d = { (ModelNode*) &iedModel_ComplexArray_LLN0_NamPlt_configRev, NULL, 0, + -1, IEC61850_FC_DC, IEC61850_VISIBLE_STRING_255, 0, @@ -302,6 +320,7 @@ DataAttribute iedModel_ComplexArray_LLN0_NamPlt_configRev = { (ModelNode*) &iedModel_ComplexArray_LLN0_NamPlt_ldNs, NULL, 0, + -1, IEC61850_FC_DC, IEC61850_VISIBLE_STRING_255, 0, @@ -315,6 +334,7 @@ DataAttribute iedModel_ComplexArray_LLN0_NamPlt_ldNs = { NULL, NULL, 0, + -1, IEC61850_FC_EX, IEC61850_VISIBLE_STRING_255, 0, @@ -335,7 +355,8 @@ DataObject iedModel_ComplexArray_LPHD1_PhyNam = { (ModelNode*) &iedModel_ComplexArray_LPHD1, (ModelNode*) &iedModel_ComplexArray_LPHD1_PhyHealth, (ModelNode*) &iedModel_ComplexArray_LPHD1_PhyNam_vendor, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_LPHD1_PhyNam_vendor = { @@ -345,6 +366,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_PhyNam_vendor = { NULL, NULL, 0, + -1, IEC61850_FC_DC, IEC61850_VISIBLE_STRING_255, 0, @@ -357,7 +379,8 @@ DataObject iedModel_ComplexArray_LPHD1_PhyHealth = { (ModelNode*) &iedModel_ComplexArray_LPHD1, (ModelNode*) &iedModel_ComplexArray_LPHD1_Proxy, (ModelNode*) &iedModel_ComplexArray_LPHD1_PhyHealth_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_LPHD1_PhyHealth_stVal = { @@ -367,6 +390,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_PhyHealth_stVal = { (ModelNode*) &iedModel_ComplexArray_LPHD1_PhyHealth_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, @@ -380,6 +404,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_PhyHealth_q = { (ModelNode*) &iedModel_ComplexArray_LPHD1_PhyHealth_t, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -393,6 +418,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_PhyHealth_t = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -405,7 +431,8 @@ DataObject iedModel_ComplexArray_LPHD1_Proxy = { (ModelNode*) &iedModel_ComplexArray_LPHD1, NULL, (ModelNode*) &iedModel_ComplexArray_LPHD1_Proxy_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_LPHD1_Proxy_stVal = { @@ -415,6 +442,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_Proxy_stVal = { (ModelNode*) &iedModel_ComplexArray_LPHD1_Proxy_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, @@ -428,6 +456,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_Proxy_q = { (ModelNode*) &iedModel_ComplexArray_LPHD1_Proxy_t, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -441,6 +470,7 @@ DataAttribute iedModel_ComplexArray_LPHD1_Proxy_t = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -461,7 +491,8 @@ DataObject iedModel_ComplexArray_GGIO1_Mod = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_Beh, (ModelNode*) &iedModel_ComplexArray_GGIO1_Mod_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_Mod_stVal = { @@ -471,6 +502,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Mod_stVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Mod_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, @@ -484,6 +516,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Mod_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Mod_t, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -497,6 +530,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Mod_t = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Mod_ctlModel, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -510,6 +544,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Mod_ctlModel = { NULL, NULL, 0, + -1, IEC61850_FC_CF, IEC61850_ENUMERATED, 0, @@ -522,7 +557,8 @@ DataObject iedModel_ComplexArray_GGIO1_Beh = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_Health, (ModelNode*) &iedModel_ComplexArray_GGIO1_Beh_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_Beh_stVal = { @@ -532,6 +568,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Beh_stVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Beh_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, @@ -545,6 +582,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Beh_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Beh_t, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -558,6 +596,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Beh_t = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -570,7 +609,8 @@ DataObject iedModel_ComplexArray_GGIO1_Health = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_NamPlt, (ModelNode*) &iedModel_ComplexArray_GGIO1_Health_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_Health_stVal = { @@ -580,6 +620,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Health_stVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Health_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_ENUMERATED, 0 + TRG_OPT_DATA_CHANGED, @@ -593,6 +634,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Health_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Health_t, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -606,6 +648,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Health_t = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -618,7 +661,8 @@ DataObject iedModel_ComplexArray_GGIO1_NamPlt = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn1, (ModelNode*) &iedModel_ComplexArray_GGIO1_NamPlt_vendor, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_NamPlt_vendor = { @@ -628,6 +672,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_NamPlt_vendor = { (ModelNode*) &iedModel_ComplexArray_GGIO1_NamPlt_swRev, NULL, 0, + -1, IEC61850_FC_DC, IEC61850_VISIBLE_STRING_255, 0, @@ -641,6 +686,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_NamPlt_swRev = { (ModelNode*) &iedModel_ComplexArray_GGIO1_NamPlt_d, NULL, 0, + -1, IEC61850_FC_DC, IEC61850_VISIBLE_STRING_255, 0, @@ -654,6 +700,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_NamPlt_d = { (ModelNode*) &iedModel_ComplexArray_GGIO1_NamPlt_dU, NULL, 0, + -1, IEC61850_FC_DC, IEC61850_VISIBLE_STRING_255, 0, @@ -667,6 +714,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_NamPlt_dU = { NULL, NULL, 0, + -1, IEC61850_FC_DC, IEC61850_UNICODE_STRING_255, 0, @@ -679,7 +727,8 @@ DataObject iedModel_ComplexArray_GGIO1_AnIn1 = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn2, (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn1_mag, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_AnIn1_mag = { @@ -689,6 +738,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn1_mag = { (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn1_q, (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn1_mag_f, 0, + -1, IEC61850_FC_MX, IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, @@ -702,6 +752,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn1_mag_f = { NULL, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, @@ -715,6 +766,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn1_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn1_t, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -728,6 +780,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn1_t = { NULL, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_TIMESTAMP, 0, @@ -740,7 +793,8 @@ DataObject iedModel_ComplexArray_GGIO1_AnIn2 = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn3, (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn2_mag, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_AnIn2_mag = { @@ -750,6 +804,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn2_mag = { (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn2_q, (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn2_mag_f, 0, + -1, IEC61850_FC_MX, IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, @@ -763,6 +818,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn2_mag_f = { NULL, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, @@ -776,6 +832,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn2_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn2_t, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -789,6 +846,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn2_t = { NULL, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_TIMESTAMP, 0, @@ -801,7 +859,8 @@ DataObject iedModel_ComplexArray_GGIO1_AnIn3 = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn4, (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn3_mag, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_AnIn3_mag = { @@ -811,6 +870,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn3_mag = { (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn3_q, (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn3_mag_f, 0, + -1, IEC61850_FC_MX, IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, @@ -824,6 +884,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn3_mag_f = { NULL, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, @@ -837,6 +898,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn3_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn3_t, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -850,6 +912,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn3_t = { NULL, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_TIMESTAMP, 0, @@ -862,7 +925,8 @@ DataObject iedModel_ComplexArray_GGIO1_AnIn4 = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn4_mag, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_AnIn4_mag = { @@ -872,6 +936,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn4_mag = { (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn4_q, (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn4_mag_f, 0, + -1, IEC61850_FC_MX, IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED, @@ -885,6 +950,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn4_mag_f = { NULL, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, @@ -898,6 +964,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn4_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_AnIn4_t, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -911,6 +978,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_AnIn4_t = { NULL, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_TIMESTAMP, 0, @@ -923,7 +991,8 @@ DataObject iedModel_ComplexArray_GGIO1_SPCSO1 = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_origin, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_origin = { @@ -933,6 +1002,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_origin = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_ctlNum, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_origin_orCat, 0, + -1, IEC61850_FC_ST, IEC61850_CONSTRUCTED, 0, @@ -946,6 +1016,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_origin_orCat = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_origin_orIdent, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_ENUMERATED, 0, @@ -959,6 +1030,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_origin_orIdent = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_OCTET_STRING_64, 0, @@ -972,6 +1044,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_ctlNum = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_stVal, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_INT8U, 0, @@ -985,6 +1058,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_stVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, @@ -998,6 +1072,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_t, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -1011,6 +1086,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_t = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_ctlModel, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -1024,6 +1100,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_ctlModel = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_Oper, NULL, 0, + -1, IEC61850_FC_CF, IEC61850_ENUMERATED, 0, @@ -1037,6 +1114,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper = { NULL, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_Oper_ctlVal, 0, + -1, IEC61850_FC_CO, IEC61850_CONSTRUCTED, 0, @@ -1050,6 +1128,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_ctlVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_Oper_origin, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_BOOLEAN, 0, @@ -1063,6 +1142,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_origin = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_Oper_ctlNum, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_Oper_origin_orCat, 0, + -1, IEC61850_FC_CO, IEC61850_CONSTRUCTED, 0, @@ -1076,6 +1156,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_origin_orCat = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_Oper_origin_orIdent, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_ENUMERATED, 0, @@ -1089,6 +1170,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_origin_orIdent = { NULL, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_OCTET_STRING_64, 0, @@ -1102,6 +1184,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_ctlNum = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_Oper_T, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_INT8U, 0, @@ -1115,6 +1198,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_T = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_Oper_Test, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_TIMESTAMP, 0, @@ -1128,6 +1212,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_Test = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO1_Oper_Check, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_BOOLEAN, 0, @@ -1141,6 +1226,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_Check = { NULL, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_CHECK, 0, @@ -1153,7 +1239,8 @@ DataObject iedModel_ComplexArray_GGIO1_SPCSO2 = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_stVal = { @@ -1163,6 +1250,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_stVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, @@ -1176,6 +1264,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2_Oper, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -1189,6 +1278,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2_ctlModel, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2_Oper_ctlVal, 0, + -1, IEC61850_FC_CO, IEC61850_CONSTRUCTED, 0, @@ -1202,6 +1292,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_ctlVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2_Oper_origin, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_BOOLEAN, 0, @@ -1215,6 +1306,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_origin = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2_Oper_ctlNum, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2_Oper_origin_orCat, 0, + -1, IEC61850_FC_CO, IEC61850_CONSTRUCTED, 0, @@ -1228,6 +1320,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_origin_orCat = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2_Oper_origin_orIdent, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_ENUMERATED, 0, @@ -1241,6 +1334,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_origin_orIdent = { NULL, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_OCTET_STRING_64, 0, @@ -1254,6 +1348,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_ctlNum = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2_Oper_T, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_INT8U, 0, @@ -1267,6 +1362,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_T = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2_Oper_Test, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_TIMESTAMP, 0, @@ -1280,6 +1376,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_Test = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2_Oper_Check, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_BOOLEAN, 0, @@ -1293,6 +1390,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_Check = { NULL, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_CHECK, 0, @@ -1306,6 +1404,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_ctlModel = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO2_t, NULL, 0, + -1, IEC61850_FC_CF, IEC61850_ENUMERATED, 0, @@ -1319,6 +1418,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_t = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -1331,7 +1431,8 @@ DataObject iedModel_ComplexArray_GGIO1_SPCSO3 = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_stVal = { @@ -1341,6 +1442,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_stVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, @@ -1354,6 +1456,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3_Oper, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -1367,6 +1470,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3_ctlModel, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3_Oper_ctlVal, 0, + -1, IEC61850_FC_CO, IEC61850_CONSTRUCTED, 0, @@ -1380,6 +1484,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_ctlVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3_Oper_origin, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_BOOLEAN, 0, @@ -1393,6 +1498,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_origin = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3_Oper_ctlNum, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3_Oper_origin_orCat, 0, + -1, IEC61850_FC_CO, IEC61850_CONSTRUCTED, 0, @@ -1406,6 +1512,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_origin_orCat = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3_Oper_origin_orIdent, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_ENUMERATED, 0, @@ -1419,6 +1526,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_origin_orIdent = { NULL, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_OCTET_STRING_64, 0, @@ -1432,6 +1540,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_ctlNum = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3_Oper_T, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_INT8U, 0, @@ -1445,6 +1554,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_T = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3_Oper_Test, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_TIMESTAMP, 0, @@ -1458,6 +1568,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_Test = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3_Oper_Check, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_BOOLEAN, 0, @@ -1471,6 +1582,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_Check = { NULL, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_CHECK, 0, @@ -1484,6 +1596,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_ctlModel = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO3_t, NULL, 0, + -1, IEC61850_FC_CF, IEC61850_ENUMERATED, 0, @@ -1497,6 +1610,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_t = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -1509,7 +1623,8 @@ DataObject iedModel_ComplexArray_GGIO1_SPCSO4 = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind1, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_stVal = { @@ -1519,6 +1634,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_stVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, @@ -1532,6 +1648,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4_Oper, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -1545,6 +1662,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4_ctlModel, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4_Oper_ctlVal, 0, + -1, IEC61850_FC_CO, IEC61850_CONSTRUCTED, 0, @@ -1558,6 +1676,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_ctlVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4_Oper_origin, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_BOOLEAN, 0, @@ -1571,6 +1690,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_origin = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4_Oper_ctlNum, (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4_Oper_origin_orCat, 0, + -1, IEC61850_FC_CO, IEC61850_CONSTRUCTED, 0, @@ -1584,6 +1704,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_origin_orCat = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4_Oper_origin_orIdent, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_ENUMERATED, 0, @@ -1597,6 +1718,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_origin_orIdent = { NULL, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_OCTET_STRING_64, 0, @@ -1610,6 +1732,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_ctlNum = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4_Oper_T, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_INT8U, 0, @@ -1623,6 +1746,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_T = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4_Oper_Test, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_TIMESTAMP, 0, @@ -1636,6 +1760,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_Test = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4_Oper_Check, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_BOOLEAN, 0, @@ -1649,6 +1774,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_Check = { NULL, NULL, 0, + -1, IEC61850_FC_CO, IEC61850_CHECK, 0, @@ -1662,6 +1788,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_ctlModel = { (ModelNode*) &iedModel_ComplexArray_GGIO1_SPCSO4_t, NULL, 0, + -1, IEC61850_FC_CF, IEC61850_ENUMERATED, 0, @@ -1675,6 +1802,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_t = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -1687,7 +1815,8 @@ DataObject iedModel_ComplexArray_GGIO1_Ind1 = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind2, (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind1_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_Ind1_stVal = { @@ -1697,6 +1826,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Ind1_stVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind1_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, @@ -1710,6 +1840,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Ind1_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind1_t, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -1723,6 +1854,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Ind1_t = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -1735,7 +1867,8 @@ DataObject iedModel_ComplexArray_GGIO1_Ind2 = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind3, (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind2_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_Ind2_stVal = { @@ -1745,6 +1878,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Ind2_stVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind2_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, @@ -1758,6 +1892,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Ind2_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind2_t, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -1771,6 +1906,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Ind2_t = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -1783,7 +1919,8 @@ DataObject iedModel_ComplexArray_GGIO1_Ind3 = { (ModelNode*) &iedModel_ComplexArray_GGIO1, (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind4, (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind3_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_Ind3_stVal = { @@ -1793,6 +1930,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Ind3_stVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind3_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, @@ -1806,6 +1944,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Ind3_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind3_t, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -1819,6 +1958,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Ind3_t = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -1831,7 +1971,8 @@ DataObject iedModel_ComplexArray_GGIO1_Ind4 = { (ModelNode*) &iedModel_ComplexArray_GGIO1, NULL, (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind4_stVal, - 0 + 0, + -1 }; DataAttribute iedModel_ComplexArray_GGIO1_Ind4_stVal = { @@ -1841,6 +1982,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Ind4_stVal = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind4_q, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_BOOLEAN, 0 + TRG_OPT_DATA_CHANGED, @@ -1854,6 +1996,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Ind4_q = { (ModelNode*) &iedModel_ComplexArray_GGIO1_Ind4_t, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, @@ -1867,6 +2010,7 @@ DataAttribute iedModel_ComplexArray_GGIO1_Ind4_t = { NULL, NULL, 0, + -1, IEC61850_FC_ST, IEC61850_TIMESTAMP, 0, @@ -1887,7 +2031,8 @@ DataObject iedModel_ComplexArray_MHAI1_HA = { (ModelNode*) &iedModel_ComplexArray_MHAI1, NULL, (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, - 0 + 0, + -1 }; DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar = { @@ -1895,95 +2040,1733 @@ DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar = { "phsAHar", (ModelNode*) &iedModel_ComplexArray_MHAI1_HA, (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_numHar, - (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal, - 16 + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0, + 16, + 0-1 +}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_0 = { + DataObjectModelType, + "phsAHar", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal, + 0, + 0 }; -DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal = { +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal = { DataAttributeModelType, "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_0, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_1 = { + DataObjectModelType, + "phsAHar", (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, - (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_q, - (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_mag, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal, + 0, + 1 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag, 0, + -1, IEC61850_FC_MX, IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, NULL, 0}; -DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_mag = { +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag = { DataAttributeModelType, "mag", - (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal, - (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_ang, - (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_mag_f, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag_f, 0, + -1, IEC61850_FC_MX, IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, NULL, 0}; -DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_mag_f = { +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag_f = { DataAttributeModelType, "f", - (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_mag, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag, NULL, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, NULL, 0}; -DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_ang = { +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang = { DataAttributeModelType, "ang", - (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal, NULL, - (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_ang_f, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang_f, 0, + -1, IEC61850_FC_MX, IEC61850_CONSTRUCTED, 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, NULL, 0}; -DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_ang_f = { +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang_f = { DataAttributeModelType, "f", - (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang, NULL, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, NULL, 0}; -DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_q = { +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_q = { DataAttributeModelType, "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_1, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_2 = { + DataObjectModelType, + "phsAHar", (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, - (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_t, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal, + 0, + 2 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2_t, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_QUALITY, 0 + TRG_OPT_QUALITY_CHANGED, NULL, 0}; -DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_t = { +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_t = { DataAttributeModelType, "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_2, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_3 = { + DataObjectModelType, + "phsAHar", (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal, + 0, + 3 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_3, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_4 = { + DataObjectModelType, + "phsAHar", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal, + 0, + 4 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_4, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_5 = { + DataObjectModelType, + "phsAHar", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal, + 0, + 5 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_5, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_6 = { + DataObjectModelType, + "phsAHar", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal, + 0, + 6 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_6, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_7 = { + DataObjectModelType, + "phsAHar", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal, + 0, + 7 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_7, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_8 = { + DataObjectModelType, + "phsAHar", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal, + 0, + 8 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_8, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_9 = { + DataObjectModelType, + "phsAHar", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal, + 0, + 9 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_9, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_10 = { + DataObjectModelType, + "phsAHar", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal, + 0, + 10 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_10, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_11 = { + DataObjectModelType, + "phsAHar", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal, + 0, + 11 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_11, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_12 = { + DataObjectModelType, + "phsAHar", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal, + 0, + 12 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_12, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_13 = { + DataObjectModelType, + "phsAHar", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal, + 0, + 13 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_13, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_14 = { + DataObjectModelType, + "phsAHar", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal, + 0, + 14 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_14, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_TIMESTAMP, + 0, + NULL, + 0}; + +DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_15 = { + DataObjectModelType, + "phsAHar", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal, + 0, + 15 +}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal = { + DataAttributeModelType, + "cVal", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15_q, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag = { + DataAttributeModelType, + "mag", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang = { + DataAttributeModelType, + "ang", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal, + NULL, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang_f, + 0, + -1, + IEC61850_FC_MX, + IEC61850_CONSTRUCTED, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang_f = { + DataAttributeModelType, + "f", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang, + NULL, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_FLOAT32, + 0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_q = { + DataAttributeModelType, + "q", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15, + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15_t, + NULL, + 0, + -1, + IEC61850_FC_MX, + IEC61850_QUALITY, + 0 + TRG_OPT_QUALITY_CHANGED, + NULL, + 0}; + +DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_t = { + DataAttributeModelType, + "t", + (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_phsAHar_15, NULL, NULL, 0, + -1, IEC61850_FC_MX, IEC61850_TIMESTAMP, 0, @@ -1997,6 +3780,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_numHar = { (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_numCyc, NULL, 0, + -1, IEC61850_FC_CF, IEC61850_INT16U, 0 + TRG_OPT_DATA_CHANGED, @@ -2010,6 +3794,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_numCyc = { (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_evalTm, NULL, 0, + -1, IEC61850_FC_CF, IEC61850_INT16U, 0 + TRG_OPT_DATA_CHANGED, @@ -2023,6 +3808,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_evalTm = { (ModelNode*) &iedModel_ComplexArray_MHAI1_HA_frequency, NULL, 0, + -1, IEC61850_FC_CF, IEC61850_INT16U, 0 + TRG_OPT_DATA_CHANGED, @@ -2036,6 +3822,7 @@ DataAttribute iedModel_ComplexArray_MHAI1_HA_frequency = { NULL, NULL, 0, + -1, IEC61850_FC_CF, IEC61850_FLOAT32, 0 + TRG_OPT_DATA_CHANGED, diff --git a/examples/server_example_complex_array/static_model.h b/examples/server_example_complex_array/static_model.h index d6bb6179..77bb51c2 100644 --- a/examples/server_example_complex_array/static_model.h +++ b/examples/server_example_complex_array/static_model.h @@ -161,13 +161,134 @@ extern DataAttribute iedModel_ComplexArray_GGIO1_Ind4_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 DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_0; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_1; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_2; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_3; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_4; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_5; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_6; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_7; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_8; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_9; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_10; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_11; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_12; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_13; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_14; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_t; +extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_15; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang_f; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_q; +extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_t; extern DataAttribute iedModel_ComplexArray_MHAI1_HA_numHar; extern DataAttribute iedModel_ComplexArray_MHAI1_HA_numCyc; extern DataAttribute iedModel_ComplexArray_MHAI1_HA_evalTm; @@ -325,13 +446,118 @@ extern DataAttribute iedModel_ComplexArray_MHAI1_HA_frequency; #define IEDMODEL_ComplexArray_MHAI1 (&iedModel_ComplexArray_MHAI1) #define IEDMODEL_ComplexArray_MHAI1_HA (&iedModel_ComplexArray_MHAI1_HA) #define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar (&iedModel_ComplexArray_MHAI1_HA_phsAHar) -#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal) -#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_mag) -#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_mag_f) -#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_ang) -#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_cVal_ang_f) -#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_q) -#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_t) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang_f) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_q) +#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_t) #define IEDMODEL_ComplexArray_MHAI1_HA_numHar (&iedModel_ComplexArray_MHAI1_HA_numHar) #define IEDMODEL_ComplexArray_MHAI1_HA_numCyc (&iedModel_ComplexArray_MHAI1_HA_numCyc) #define IEDMODEL_ComplexArray_MHAI1_HA_evalTm (&iedModel_ComplexArray_MHAI1_HA_evalTm) diff --git a/src/iec61850/inc/iec61850_dynamic_model.h b/src/iec61850/inc/iec61850_dynamic_model.h index 20de3cbe..f0402dbd 100644 --- a/src/iec61850/inc/iec61850_dynamic_model.h +++ b/src/iec61850/inc/iec61850_dynamic_model.h @@ -116,9 +116,12 @@ LIB61850_API LogicalNode* LogicalNode_create(const char* name, LogicalDevice* parent); /** - * \brief create a new data object and add it to a parent model node + * \brief create a new data object or array data object and add it to a parent model node * * The parent model node has to be of type DataObject or LogicalNode. + * + * NOTE: When the data object is an array the array elements will also be created by this function. + * This will result in child DataObject instances for each array element. * * \param name the name of the data object (e.h. "Mod", "Health" ...) * \param parent the parent model node diff --git a/src/iec61850/inc/iec61850_model.h b/src/iec61850/inc/iec61850_model.h index 77cb5c5d..d686872f 100644 --- a/src/iec61850/inc/iec61850_model.h +++ b/src/iec61850/inc/iec61850_model.h @@ -214,7 +214,7 @@ struct sDataObject { ModelNode* firstChild; int elementCount; /* value > 0 if this is an array */ - //int arrayIndex; /* value > -1 when this is an array element */ + int arrayIndex; /* value > -1 when this is an array element */ }; struct sDataAttribute { @@ -225,7 +225,7 @@ struct sDataAttribute { ModelNode* firstChild; int elementCount; /* value > 0 if this is an array */ - // int arrayIndex; /* value > -1 when this is an array element */ + int arrayIndex; /* value > -1 when this is an array element */ FunctionalConstraint fc; DataAttributeType type; @@ -234,7 +234,7 @@ struct sDataAttribute { MmsValue* mmsValue; - uint32_t sAddr; + uint32_t sAddr; /* TODO remove in version 2.0 */ }; typedef struct sDataSetEntry { @@ -367,11 +367,22 @@ ModelNode_getChildCount(ModelNode* self); * \param self the model node instance * \param name the name of the child model node * - * \return the model node instance or NULL if model node does not exist. + * \return the model node instance or NULL if model node does not exist. */ LIB61850_API ModelNode* ModelNode_getChild(ModelNode* self, const char* name); +/** + * \brief return the child node of an array or other structure + * + * \param self the model node instance + * \param idx the index (e.g. array index) starting with 0 + * + * \return the model node instance or NULL if model node with given index does not exist. + */ +LIB61850_API ModelNode* +ModelNode_getChildWithIdx(ModelNode* self, int idx); + /** * \brief return a child model node with a given functional constraint * diff --git a/src/iec61850/server/impl/ied_server.c b/src/iec61850/server/impl/ied_server.c index 60df8ce3..bc9a14ae 100644 --- a/src/iec61850/server/impl/ied_server.c +++ b/src/iec61850/server/impl/ied_server.c @@ -237,9 +237,17 @@ exit_function: static void installDefaultValuesForDataAttribute(IedServer self, LogicalDevice* ld, DataAttribute* dataAttribute, - char* objectReference, int position) + char* objectReference, int position, int idx, char* componentId, int compIdPos) { - sprintf(objectReference + position, ".%s", dataAttribute->name); + if (idx == -1) { + sprintf(objectReference + position, ".%s", dataAttribute->name); + } + else { + if (compIdPos == 0) + sprintf(componentId, "%s", dataAttribute->name); + else + sprintf(componentId + compIdPos, "$%s", dataAttribute->name); + } char mmsVariableName[65]; /* maximum size is 64 according to 61850-8-1 */ @@ -268,7 +276,12 @@ installDefaultValuesForDataAttribute(IedServer self, LogicalDevice* ld, DataAttr return; } - MmsValue* cacheValue = MmsServer_getValueFromCache(self->mmsServer, domain, mmsVariableName); + MmsValue* cacheValue = NULL; + + if (idx == -1) + cacheValue = MmsServer_getValueFromCache(self->mmsServer, domain, mmsVariableName); + else + cacheValue = MmsServer_getValueFromCacheEx2(self->mmsServer, domain, mmsVariableName, idx, componentId); dataAttribute->mmsValue = cacheValue; @@ -280,7 +293,6 @@ installDefaultValuesForDataAttribute(IedServer self, LogicalDevice* ld, DataAttr #if (DEBUG_IED_SERVER == 1) if (cacheValue == NULL) { printf("IED_SERVER: exception: invalid initializer for %s\n", mmsVariableName); - exit(-1); } #endif @@ -288,10 +300,12 @@ installDefaultValuesForDataAttribute(IedServer self, LogicalDevice* ld, DataAttr } int childPosition = strlen(objectReference); + int childCompIdPos = strlen(componentId); + DataAttribute* subDataAttribute = (DataAttribute*) dataAttribute->firstChild; while (subDataAttribute != NULL) { - installDefaultValuesForDataAttribute(self, ld, subDataAttribute, objectReference, childPosition); + installDefaultValuesForDataAttribute(self, ld, subDataAttribute, objectReference, childPosition, idx, componentId, childCompIdPos); subDataAttribute = (DataAttribute*) subDataAttribute->sibling; } @@ -299,27 +313,54 @@ installDefaultValuesForDataAttribute(IedServer self, LogicalDevice* ld, DataAttr static void installDefaultValuesForDataObject(IedServer self, LogicalDevice* ld, DataObject* dataObject, - char* objectReference, int position) + char* objectReference, int position, int idx, char* componentId, int compIdPos) { if (dataObject->elementCount > 0) { if (DEBUG_IED_SERVER) - printf("IED_SERVER: DataObject is an array. Skip installing default values in cache\n"); + printf("IED_SERVER: DataObject %s is an array\n", dataObject->name); + + ModelNode* arrayElemNode = dataObject->firstChild; + + sprintf(objectReference + position, ".%s", dataObject->name); + int childPosition = strlen(objectReference); + + int arrayIdx = 0; + + while (arrayElemNode) { + installDefaultValuesForDataObject(self, ld, (DataObject*)arrayElemNode, objectReference, childPosition, arrayIdx, componentId, compIdPos); + + arrayIdx++; + arrayElemNode = arrayElemNode->sibling; + } return; } - sprintf(objectReference + position, ".%s", dataObject->name); + if (dataObject->arrayIndex == -1) { + if (idx == -1) + sprintf(objectReference + position, ".%s", dataObject->name); + else { + if (compIdPos == 0) + sprintf(componentId, "%s", dataObject->name); + else + sprintf(componentId + compIdPos, "$%s", dataObject->name); + } + } + + if (compIdPos == 0) + componentId[0] = 0; ModelNode* childNode = dataObject->firstChild; int childPosition = strlen(objectReference); + int childCompIdPos = strlen(componentId); - while (childNode != NULL) { + while (childNode) { if (childNode->modelType == DataObjectModelType) { - installDefaultValuesForDataObject(self, ld, (DataObject*) childNode, objectReference, childPosition); + installDefaultValuesForDataObject(self, ld, (DataObject*) childNode, objectReference, childPosition, idx, componentId, childCompIdPos); } else if (childNode->modelType == DataAttributeModelType) { - installDefaultValuesForDataAttribute(self, ld, (DataAttribute*) childNode, objectReference, childPosition); + installDefaultValuesForDataAttribute(self, ld, (DataAttribute*) childNode, objectReference, childPosition, idx, componentId, childCompIdPos); } childNode = childNode->sibling; @@ -332,6 +373,8 @@ installDefaultValuesInCache(IedServer self) IedModel* model = self->model; char objectReference[130]; + char componentId[130]; + componentId[0] = 0; LogicalDevice* logicalDevice = model->firstChild; @@ -354,7 +397,7 @@ installDefaultValuesInCache(IedServer self) int refPosition = strlen(objectReference); while (dataObject != NULL) { - installDefaultValuesForDataObject(self, logicalDevice, dataObject, objectReference, refPosition); + installDefaultValuesForDataObject(self, logicalDevice, dataObject, objectReference, refPosition, -1, componentId, 0); dataObject = (DataObject*) dataObject->sibling; } diff --git a/src/iec61850/server/mms_mapping/control.c b/src/iec61850/server/mms_mapping/control.c index 17dbf725..ad406c66 100644 --- a/src/iec61850/server/mms_mapping/control.c +++ b/src/iec61850/server/mms_mapping/control.c @@ -1107,7 +1107,7 @@ ControlObject_initialize(ControlObject* self) else { if (DEBUG_IED_SERVER) - printf("IED_SERVER: ERROR - stValType or ctlValType could not be determined!\n"); + printf("IED_SERVER: ERROR - stValType (%i) or ctlValType (%i) could not be determined!\n", stValType, ctlValType); self->cdc = CST_NONE; } #endif /* (CONFIG_IEC61850_SERVICE_TRACKING == 1) */ diff --git a/src/iec61850/server/mms_mapping/mms_mapping.c b/src/iec61850/server/mms_mapping/mms_mapping.c index feb73c00..b2c46f42 100644 --- a/src/iec61850/server/mms_mapping/mms_mapping.c +++ b/src/iec61850/server/mms_mapping/mms_mapping.c @@ -330,6 +330,9 @@ createFCNamedVariableFromDataObject(DataObject* dataObject, namedVariable->typeSpec.array.elementTypeSpec = (MmsVariableSpecification*) GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); namedVariable = namedVariable->typeSpec.array.elementTypeSpec; + + /* for arrays use the first child as type template */ + dataObject = (DataObject*)dataObject->firstChild; } namedVariable->type = MMS_STRUCTURE; diff --git a/src/iec61850/server/model/dynamic_model.c b/src/iec61850/server/model/dynamic_model.c index 0843d713..82667c18 100644 --- a/src/iec61850/server/model/dynamic_model.c +++ b/src/iec61850/server/model/dynamic_model.c @@ -554,11 +554,32 @@ DataObject_create(const char* name, ModelNode* parent, int arrayElements) self->name = StringUtils_copyString(name); self->modelType = DataObjectModelType; - self->elementCount = arrayElements; self->firstChild = NULL; self->parent = parent; self->sibling = NULL; + self->elementCount = arrayElements; + self->arrayIndex = -1; + + if (arrayElements > 0) { + int i; + + for (i = 0; i < arrayElements; i++) { + DataObject* arrayElement = (DataObject*) GLOBAL_MALLOC(sizeof(DataObject)); + + self->name = NULL; + self->modelType = DataObjectModelType; + self->firstChild = NULL; + self->parent = parent; + self->sibling = NULL; + + self->elementCount = 0; + self->arrayIndex = i; + + DataObject_addChild(self, (ModelNode*) arrayElement); + } + } + if (parent->modelType == LogicalNodeModelType) LogicalNode_addDataObject((LogicalNode*) parent, self); else if (parent->modelType == DataObjectModelType) diff --git a/src/iec61850/server/model/model.c b/src/iec61850/server/model/model.c index 6d8a3e58..73acb013 100644 --- a/src/iec61850/server/model/model.c +++ b/src/iec61850/server/model/model.c @@ -635,9 +635,76 @@ ModelNode_getChildCount(ModelNode* modelNode) { ModelNode* ModelNode_getChild(ModelNode* self, const char* name) { - /* check for separator */ + /* check for element separator */ const char* separator = strchr(name, '.'); + /* allow first character to be "." */ + if (separator == name) + name++; + + /* check for array separator */ + const char* arraySeparator = strchr(name, '('); + + if (arraySeparator) { + + const char* arraySeparator2 = strchr(arraySeparator, ')'); + + if (arraySeparator2) { + int idx = (int) strtol(arraySeparator + 1, NULL, 10); + + ModelNode* arrayNode = NULL; + + if (name == arraySeparator) { + arrayNode = ModelNode_getChildWithIdx(self, idx); + } + else { + char nameCopy[65]; + + const char* pos = name; + + int cpyIdx = 0; + + while (pos < arraySeparator) { + nameCopy[cpyIdx] = *pos; + cpyIdx++; + pos++; + } + + nameCopy[cpyIdx] = 0; + + ModelNode* childNode = ModelNode_getChild(self, nameCopy); + + if (childNode) { + arrayNode = ModelNode_getChildWithIdx(childNode, idx); + } + else + return NULL; + } + + if (arrayNode) { + + if (*(arraySeparator2 + 1) == 0) { + return arrayNode; + } + else { + if (*(arraySeparator2 + 1) == '.') + return ModelNode_getChild(arrayNode, arraySeparator2 + 2); + else + return ModelNode_getChild(arrayNode, arraySeparator2 + 1); + } + + } + else + return NULL; + + } + else { + /* invalid name */ + return NULL; + } + + } + int nameElementLength = 0; if (separator != NULL) @@ -649,7 +716,7 @@ ModelNode_getChild(ModelNode* self, const char* name) ModelNode* matchingNode = NULL; - while (nextNode != NULL) { + while (nextNode) { int nodeNameLen = strlen(nextNode->name); if (nodeNameLen == nameElementLength) { @@ -669,6 +736,31 @@ ModelNode_getChild(ModelNode* self, const char* name) return matchingNode; } +ModelNode* +ModelNode_getChildWithIdx(ModelNode* self, int idx) +{ + ModelNode* foundElement = NULL; + + if (self->modelType == DataObjectModelType || self->modelType == DataAttributeModelType) { + ModelNode* nextNode = self->firstChild; + + int currentIdx = 0; + + while (nextNode) { + if (currentIdx == idx) { + foundElement = nextNode; + break; + } + + currentIdx++; + + nextNode = nextNode->sibling; + } + } + + return foundElement; +} + ModelNode* ModelNode_getChildWithFc(ModelNode* self, const char* name, FunctionalConstraint fc) { diff --git a/src/mms/inc_private/mms_server_libinternal.h b/src/mms/inc_private/mms_server_libinternal.h index ef8f95f4..17a5f418 100644 --- a/src/mms/inc_private/mms_server_libinternal.h +++ b/src/mms/inc_private/mms_server_libinternal.h @@ -82,6 +82,9 @@ MmsServer_getValueFromCache(MmsServer self, MmsDomain* domain, const char* itemI LIB61850_INTERNAL MmsValue* MmsServer_getValueFromCacheEx(MmsServer self, MmsDomain* domain, const char* itemId, MmsVariableSpecification** typeSpec); +LIB61850_INTERNAL MmsValue* +MmsServer_getValueFromCacheEx2(MmsServer self, MmsDomain* domain, const char* itemId, int idx, const char* componentId); + LIB61850_INTERNAL bool MmsServer_isLocked(MmsServer self); diff --git a/src/mms/inc_private/mms_value_cache.h b/src/mms/inc_private/mms_value_cache.h index bdacbb27..ef7fd808 100644 --- a/src/mms/inc_private/mms_value_cache.h +++ b/src/mms/inc_private/mms_value_cache.h @@ -1,7 +1,7 @@ /* * mms_value_cache.h * - * Copyright 2013-2018 Michael Zillgith + * Copyright 2013-2021 Michael Zillgith * * This file is part of libIEC61850. * @@ -38,6 +38,9 @@ MmsValueCache_insertValue(MmsValueCache self, char* itemId, MmsValue* value); LIB61850_INTERNAL MmsValue* MmsValueCache_lookupValue(MmsValueCache self, const char* itemId, MmsVariableSpecification** outSpec); +LIB61850_INTERNAL MmsValue* +MmsValueCache_lookupValueEx(MmsValueCache self, const char* itemId, int idx, const char* componentId, MmsVariableSpecification** outSpec); + LIB61850_INTERNAL void MmsValueCache_destroy(MmsValueCache self); diff --git a/src/mms/iso_mms/common/mms_type_spec.c b/src/mms/iso_mms/common/mms_type_spec.c index 5dd93c3f..167f477e 100644 --- a/src/mms/iso_mms/common/mms_type_spec.c +++ b/src/mms/iso_mms/common/mms_type_spec.c @@ -185,6 +185,10 @@ MmsVariableSpecification_getStructureElements(MmsVariableSpecification* self) MmsVariableSpecification* MmsVariableSpecification_getNamedVariableRecursive(MmsVariableSpecification* variable, const char* nameId) { + if (variable->type == MMS_ARRAY) { + return MmsVariableSpecification_getNamedVariableRecursive(variable->typeSpec.array.elementTypeSpec, nameId); + } + const char* separator = strchr(nameId, '$'); int i; diff --git a/src/mms/iso_mms/server/mms_server.c b/src/mms/iso_mms/server/mms_server.c index c387cb8b..21fb4e76 100644 --- a/src/mms/iso_mms/server/mms_server.c +++ b/src/mms/iso_mms/server/mms_server.c @@ -465,6 +465,17 @@ MmsServer_getValueFromCacheEx(MmsServer self, MmsDomain* domain, const char* ite return NULL ; } +MmsValue* +MmsServer_getValueFromCacheEx2(MmsServer self, MmsDomain* domain, const char* itemId, int idx, const char* componentId) +{ + MmsValueCache cache = (MmsValueCache) Map_getEntry(self->valueCaches, domain); + + if (cache != NULL) + return MmsValueCache_lookupValueEx(cache, itemId, idx, componentId, NULL); + + return NULL ; +} + void MmsServer_insertIntoCache(MmsServer self, MmsDomain* domain, char* itemId, MmsValue* value) { diff --git a/src/mms/iso_mms/server/mms_value_cache.c b/src/mms/iso_mms/server/mms_value_cache.c index fcabff0f..f4ade311 100644 --- a/src/mms/iso_mms/server/mms_value_cache.c +++ b/src/mms/iso_mms/server/mms_value_cache.c @@ -1,7 +1,7 @@ /* * mms_value_cache.c * - * Copyright 2013 Michael Zillgith + * Copyright 2013-2021 Michael Zillgith * * This file is part of libIEC61850. * @@ -62,7 +62,8 @@ MmsValueCache_insertValue(MmsValueCache self, char* itemId, MmsValue* value) Map_addEntry(self->map, StringUtils_copyString(itemId), cacheEntry); } else - if (DEBUG) printf("Cannot insert value into cache %s : no typeSpec found!\n", itemId); + if (DEBUG) + printf("Cannot insert value into cache %s : no typeSpec found!\n", itemId); } static char* @@ -126,34 +127,131 @@ MmsValueCache_lookupValue(MmsValueCache self, const char* itemId, MmsVariableSpe * get value for first matching key substring! * Then iterate the value for the exact value. */ - MmsValue* value = NULL; - MmsValueCacheEntry* cacheEntry; + MmsValueCacheEntry* cacheEntry = (MmsValueCacheEntry*) Map_getEntry(self->map, (void*) itemId); - cacheEntry = (MmsValueCacheEntry*) Map_getEntry(self->map, (void*) itemId); + if (cacheEntry) { + + if (outSpec) { + *outSpec = cacheEntry->typeSpec; + } + + return cacheEntry->value; + } + else { + char itemIdCopy[65]; + StringUtils_copyStringToBuffer(itemId, itemIdCopy); - if (cacheEntry == NULL) { - char* itemIdCopy = StringUtils_copyString(itemId); char* parentItemId = getParentSubString(itemIdCopy); if (parentItemId != NULL) { value = searchCacheForValue(self, itemId, parentItemId, outSpec); } - - GLOBAL_FREEMEM(itemIdCopy); } - if (cacheEntry != NULL) { + return value; +} - if (outSpec) { - *outSpec = cacheEntry->typeSpec; - } +static MmsValue* +searchCacheForValueEx(MmsValueCache self, const char* itemId, char* parentId, int idx, char* componentId, MmsVariableSpecification** outSpec) +{ + MmsValueCacheEntry* cacheEntry; + MmsValue* value = NULL; - return cacheEntry->value; - } - else - return value; + cacheEntry = (MmsValueCacheEntry*) Map_getEntry(self->map, (void*) parentId); + + if (cacheEntry == NULL) { + char* parentItemId = getParentSubString(parentId); + + if (parentItemId) { + value = searchCacheForValueEx(self, itemId, parentItemId, idx, componentId, outSpec); + } + } + else { + + const char* childId = getChildSubString(itemId, parentId); + + if (childId) { + + MmsVariableSpecification* typeSpec = MmsDomain_getNamedVariable(self->domain, parentId); + + value = MmsVariableSpecification_getChildValue(typeSpec, cacheEntry->value, childId); + + if (value) { + if (idx != -1) { + if (MmsValue_getType(value) == MMS_ARRAY) { + MmsValue* elementValue = MmsValue_getElement(value, idx); + + + if (elementValue) { + if (componentId) { + MmsVariableSpecification* childSpec = MmsVariableSpecification_getNamedVariableRecursive(typeSpec, childId); + + if (childSpec) { + MmsVariableSpecification* elementSpec = childSpec->typeSpec.array.elementTypeSpec; + + if (elementSpec) { + MmsValue* componentValue = MmsVariableSpecification_getChildValue(elementSpec, elementValue, componentId); + + if (componentValue) { + value = componentValue; + } + } + } + } + else { + value = elementValue; + } + } + } + } + } + + if (outSpec) { + *outSpec = MmsVariableSpecification_getNamedVariableRecursive(typeSpec, childId); + } + } + } + + return value; +} + +MmsValue* +MmsValueCache_lookupValueEx(MmsValueCache self, const char* itemId, int idx, const char* componentId, MmsVariableSpecification** outSpec) +{ + MmsValue* value = NULL; + + MmsValueCacheEntry* cacheEntry = (MmsValueCacheEntry*) Map_getEntry(self->map, (void*) itemId); + + if (cacheEntry) { + if (outSpec) { + *outSpec = cacheEntry->typeSpec; + } + + return cacheEntry->value; + } + else { + char itemIdCopy[65]; + char componentIdCopyBuf[65]; + + StringUtils_copyStringToBuffer(itemId, itemIdCopy); + + char* componentIdCopy = NULL; + + if (componentId) { + componentIdCopy = StringUtils_copyStringToBuffer(componentId, componentIdCopyBuf); + + } + + char* parentItemId = getParentSubString(itemIdCopy); + + if (parentItemId != NULL) { + value = searchCacheForValueEx(self, itemId, parentItemId, idx, componentIdCopy, outSpec); + } + } + + return value; } static void diff --git a/tools/model_generator/genmodel.jar b/tools/model_generator/genmodel.jar index af906018..ff915a65 100644 Binary files a/tools/model_generator/genmodel.jar and b/tools/model_generator/genmodel.jar differ diff --git a/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java b/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java index 8f49462c..ce3ed472 100644 --- a/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java +++ b/tools/model_generator/src/com/libiec61850/tools/StaticModelGenerator.java @@ -594,7 +594,7 @@ public class StaticModelGenerator { cOut.println("};\n"); - printDataObjectDefinitions(lnName, logicalNode.getDataObjects(), null, false); + printDataObjectDefinitions(lnName, logicalNode.getDataObjects(), null, false, -1); printReportControlBlocks(lnName, logicalNode); @@ -609,11 +609,19 @@ public class StaticModelGenerator { printSettingControlBlock(lnName, logicalNode); } } + + - private void printDataObjectDefinitions(String lnName, List dataObjects, String dataAttributeSibling, boolean isTransient) { + private void printDataObjectDefinitions(String lnName, List dataObjects, String dataAttributeSibling, boolean isTransient, int arrayIdx) { for (int i = 0; i < dataObjects.size(); i++) { + boolean isArray = false; + DataObject dataObject = dataObjects.get(i); - + + if (dataObject.getCount() > 0) { + isArray = true; + } + String doName = lnName + "_" + dataObject.getName(); variablesList.add(doName); @@ -629,27 +637,6 @@ public class StaticModelGenerator { cOut.println(" (ModelNode*) &" + dataAttributeSibling + ","); else cOut.println(" NULL,"); - - String firstSubDataObjectName = null; - String firstDataAttributeName = null; - - if ((dataObject.getSubDataObjects() != null) && (dataObject.getSubDataObjects().size() > 0)) - firstSubDataObjectName = doName + "_" + dataObject.getSubDataObjects().get(0).getName(); - - if ((dataObject.getDataAttributes() != null) && (dataObject.getDataAttributes().size() > 0)) - firstDataAttributeName = doName + "_" + dataObject.getDataAttributes().get(0).getName(); - - if (firstSubDataObjectName != null) { - cOut.println(" (ModelNode*) &" + firstSubDataObjectName + ","); - } else if (firstDataAttributeName != null) { - cOut.println(" (ModelNode*) &" + firstDataAttributeName + ","); - } else { - cOut.println(" NULL,"); - } - - cOut.println(" " + dataObject.getCount()); - - cOut.println("};\n"); boolean isDoTransient = false; @@ -659,17 +646,99 @@ public class StaticModelGenerator { if (dataObject.isTransient()) isDoTransient = true; } + + if (isArray) { + String childName = doName + "_0"; + + cOut.println(" (ModelNode*) &" + childName + ","); + + cOut.println(" " + dataObject.getCount() + ","); + + cOut.println(" 0" + arrayIdx); + + cOut.println("};\n"); + + /* Print array elements */ + + for (int idx = 0; idx < dataObject.getCount(); idx++) { + + String arrayElementdoName = doName + "_" + idx; + + cOut.println("DataObject " + arrayElementdoName + " = {"); + cOut.println(" DataObjectModelType,"); + cOut.println(" \"" + dataObject.getName() + "\","); + cOut.println(" (ModelNode*) &" + doName + ","); + + /* sibling */ + if (idx != dataObject.getCount() - 1) + cOut.println(" (ModelNode*) &" + doName + "_" + (idx + 1) + ","); + else + cOut.println(" NULL,"); + + String firstSubDataObjectName = null; + String firstDataAttributeName = null; + + if ((dataObject.getSubDataObjects() != null) && (dataObject.getSubDataObjects().size() > 0)) + firstSubDataObjectName = arrayElementdoName + "_" + dataObject.getSubDataObjects().get(0).getName(); + + if ((dataObject.getDataAttributes() != null) && (dataObject.getDataAttributes().size() > 0)) + firstDataAttributeName = arrayElementdoName + "_" + dataObject.getDataAttributes().get(0).getName(); + + if (firstSubDataObjectName != null) { + cOut.println(" (ModelNode*) &" + firstSubDataObjectName + ","); + } else if (firstDataAttributeName != null) { + cOut.println(" (ModelNode*) &" + firstDataAttributeName + ","); + } else { + cOut.println(" NULL,"); + } + + cOut.println(" 0,"); + + cOut.println(" " + idx); + + cOut.println("};\n"); + + if (dataObject.getSubDataObjects() != null) + printDataObjectDefinitions(arrayElementdoName, dataObject.getSubDataObjects(), firstDataAttributeName, isDoTransient, -1); + + if (dataObject.getDataAttributes() != null) + printDataAttributeDefinitions(arrayElementdoName, dataObject.getDataAttributes(), isDoTransient, -1); + } + } + else { + String firstSubDataObjectName = null; + String firstDataAttributeName = null; + + if ((dataObject.getSubDataObjects() != null) && (dataObject.getSubDataObjects().size() > 0)) + firstSubDataObjectName = doName + "_" + dataObject.getSubDataObjects().get(0).getName(); - if (dataObject.getSubDataObjects() != null) - printDataObjectDefinitions(doName, dataObject.getSubDataObjects(), firstDataAttributeName, isDoTransient); + if ((dataObject.getDataAttributes() != null) && (dataObject.getDataAttributes().size() > 0)) + firstDataAttributeName = doName + "_" + dataObject.getDataAttributes().get(0).getName(); - if (dataObject.getDataAttributes() != null) - printDataAttributeDefinitions(doName, dataObject.getDataAttributes(), isDoTransient); + if (firstSubDataObjectName != null) { + cOut.println(" (ModelNode*) &" + firstSubDataObjectName + ","); + } else if (firstDataAttributeName != null) { + cOut.println(" (ModelNode*) &" + firstDataAttributeName + ","); + } else { + cOut.println(" NULL,"); + } + + cOut.println(" 0,"); + + cOut.println(" " + arrayIdx); + + cOut.println("};\n"); + + if (dataObject.getSubDataObjects() != null) + printDataObjectDefinitions(doName, dataObject.getSubDataObjects(), firstDataAttributeName, isDoTransient, -1); + if (dataObject.getDataAttributes() != null) + printDataAttributeDefinitions(doName, dataObject.getDataAttributes(), isDoTransient, -1); + } } } - private void printDataAttributeDefinitions(String doName, List dataAttributes, boolean isTransient) { + private void printDataAttributeDefinitions(String doName, List dataAttributes, boolean isTransient, int arrayIdx) { for (int i = 0; i < dataAttributes.size(); i++) { DataAttribute dataAttribute = dataAttributes.get(i); @@ -708,6 +777,7 @@ public class StaticModelGenerator { cOut.println(" NULL,"); cOut.println(" " + dataAttribute.getCount() + ","); + cOut.println(" -1,"); cOut.println(" IEC61850_FC_" + dataAttribute.getFc().toString() + ","); cOut.println(" IEC61850_" + dataAttribute.getType() + ","); @@ -749,7 +819,8 @@ public class StaticModelGenerator { cOut.println("};\n"); if (dataAttribute.getSubDataAttributes() != null) - printDataAttributeDefinitions(daName, dataAttribute.getSubDataAttributes(), isTransient); + printDataAttributeDefinitions(daName, dataAttribute.getSubDataAttributes(), isTransient, -1); + //TODO handle array case DataModelValue value = dataAttribute.getValue(); @@ -899,12 +970,28 @@ public class StaticModelGenerator { String doName = prefix + "_" + dataObject.getName(); hOut.println("extern DataObject " + doName + ";"); + + if (dataObject.getCount() > 0) { + for (int idx = 0; idx < dataObject.getCount(); idx++) { + String arrayElemDoName = doName + "_" + idx; + + hOut.println("extern DataObject " + arrayElemDoName + ";"); + + if (dataObject.getSubDataObjects() != null) { + printDataObjectForwardDeclarations(arrayElemDoName, dataObject.getSubDataObjects()); + } + + printDataAttributeForwardDeclarations(arrayElemDoName, dataObject.getDataAttributes()); + } + } + else { + if (dataObject.getSubDataObjects() != null) { + printDataObjectForwardDeclarations(doName, dataObject.getSubDataObjects()); + } - if (dataObject.getSubDataObjects() != null) { - printDataObjectForwardDeclarations(doName, dataObject.getSubDataObjects()); + printDataAttributeForwardDeclarations(doName, dataObject.getDataAttributes()); } - printDataAttributeForwardDeclarations(doName, dataObject.getDataAttributes()); } }