- IED server: fixed problem that BL FC is not writable (#287)

pull/291/head
Michael Zillgith 5 years ago
parent ae4f940753
commit 4793e298ff

@ -2,7 +2,8 @@
* server_example_substitution.c
*
* - How to use the IEC 61850 substitution service
* - Two data objects can be substituted:
* - How to use the blocking service
* - Two data objects can be substituted and/or blocked:
* -- GGIO1.AnIn1
* -- GGIO1.Ind1
*/
@ -24,6 +25,8 @@ static IedServer iedServer = NULL;
static bool subsAnIn1 = false;
static bool subsInd1 = false;
static bool blkEnaAnIn1 = false;
static bool blkEnaInd1 = false;
static float an1 = 0.f;
static uint64_t timestamp = 0;
@ -35,7 +38,6 @@ sigint_handler(int signalId)
running = 0;
}
static void
connectionHandler (IedServer self, ClientConnection connection, bool connected, void* parameter)
{
@ -54,13 +56,13 @@ updateProcessValues()
Timestamp_setTimeInMilliseconds(&iecTimestamp, timestamp);
Timestamp_setLeapSecondKnown(&iecTimestamp, true);
if (subsAnIn1 == false) {
if ((subsAnIn1 == false) && (blkEnaAnIn1 == false)) {
IedServer_updateTimestampAttributeValue(iedServer, IEDMODEL_LD1_GGIO1_AnIn1_t, &iecTimestamp);
IedServer_updateQuality(iedServer, IEDMODEL_LD1_GGIO1_AnIn1_q, QUALITY_VALIDITY_GOOD);
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_LD1_GGIO1_AnIn1_mag_f, an1);
}
if (subsInd1 == false) {
if ((subsInd1 == false) && (blkEnaInd1 == false)) {
IedServer_updateTimestampAttributeValue(iedServer, IEDMODEL_LD1_GGIO1_Ind1_t, &iecTimestamp);
IedServer_updateQuality(iedServer, IEDMODEL_LD1_GGIO1_Ind1_q, QUALITY_VALIDITY_GOOD);
IedServer_updateBooleanAttributeValue(iedServer, IEDMODEL_LD1_GGIO1_Ind1_stVal, ind1);
@ -116,6 +118,23 @@ writeAccessHandler (DataAttribute* dataAttribute, MmsValue* value, ClientConnect
}
}
else if (dataAttribute == IEDMODEL_LD1_GGIO1_AnIn1_blkEna) {
printf("Received GGIO1.AnIn1.blkEna: %i\n", MmsValue_getBoolean(value));
blkEnaAnIn1 = MmsValue_getBoolean(value);
/* Update quality flags */
Quality quality =
Quality_fromMmsValue(IedServer_getAttributeValue(iedServer, IEDMODEL_LD1_GGIO1_AnIn1_q));
if (blkEnaAnIn1)
Quality_setFlag(&quality, QUALITY_OPERATOR_BLOCKED);
else
Quality_unsetFlag(&quality, QUALITY_OPERATOR_BLOCKED);
IedServer_updateQuality(iedServer, IEDMODEL_LD1_GGIO1_AnIn1_q, quality);
}
else if (dataAttribute == IEDMODEL_LD1_GGIO1_Ind1_subEna) {
printf("Received GGIO1.Ind1.subEna: %i\n", MmsValue_getBoolean(value));
@ -160,6 +179,23 @@ writeAccessHandler (DataAttribute* dataAttribute, MmsValue* value, ClientConnect
}
}
else if (dataAttribute == IEDMODEL_LD1_GGIO1_Ind1_blkEna) {
printf("Received GGIO1.Ind1.blkEna: %i\n", MmsValue_getBoolean(value));
blkEnaInd1 = MmsValue_getBoolean(value);
/* Update quality flags */
Quality quality =
Quality_fromMmsValue(IedServer_getAttributeValue(iedServer, IEDMODEL_LD1_GGIO1_Ind1_q));
if (blkEnaAnIn1)
Quality_setFlag(&quality, QUALITY_OPERATOR_BLOCKED);
else
Quality_unsetFlag(&quality, QUALITY_OPERATOR_BLOCKED);
IedServer_updateQuality(iedServer, IEDMODEL_LD1_GGIO1_Ind1_q, quality);
}
return DATA_ACCESS_ERROR_SUCCESS;
}
@ -179,10 +215,12 @@ main(int argc, char** argv)
IedServer_handleWriteAccess(iedServer, IEDMODEL_LD1_GGIO1_AnIn1_subEna, writeAccessHandler, NULL);
IedServer_handleWriteAccess(iedServer, IEDMODEL_LD1_GGIO1_AnIn1_subMag_f, writeAccessHandler, NULL);
IedServer_handleWriteAccess(iedServer, IEDMODEL_LD1_GGIO1_AnIn1_subQ, writeAccessHandler, NULL);
IedServer_handleWriteAccess(iedServer, IEDMODEL_LD1_GGIO1_AnIn1_blkEna, writeAccessHandler, NULL);
IedServer_handleWriteAccess(iedServer, IEDMODEL_LD1_GGIO1_Ind1_subEna, writeAccessHandler, NULL);
IedServer_handleWriteAccess(iedServer, IEDMODEL_LD1_GGIO1_Ind1_subVal, writeAccessHandler, NULL);
IedServer_handleWriteAccess(iedServer, IEDMODEL_LD1_GGIO1_Ind1_subQ, writeAccessHandler, NULL);
IedServer_handleWriteAccess(iedServer, IEDMODEL_LD1_GGIO1_Ind1_blkEna, writeAccessHandler, NULL);
/* MMS server will be instructed to start listening for client connections. */
IedServer_start(iedServer, 102);
@ -225,6 +263,6 @@ main(int argc, char** argv)
/* Cleanup - free all resources */
IedServer_destroy(iedServer);
return 0;
return 0;
} /* main() */

@ -1,7 +1,7 @@
/*
* static_model.c
*
* automatically generated from substitution_example.icd
* automatically generated from substitution_example.cid
*/
#include "static_model.h"
@ -242,7 +242,7 @@ DataAttribute iedModel_LD1_LPHD1_Proxy_subID = {
DataAttributeModelType,
"subID",
(ModelNode*) &iedModel_LD1_LPHD1_Proxy,
NULL,
(ModelNode*) &iedModel_LD1_LPHD1_Proxy_blkEna,
NULL,
0,
IEC61850_FC_SV,
@ -251,6 +251,19 @@ DataAttribute iedModel_LD1_LPHD1_Proxy_subID = {
NULL,
0};
DataAttribute iedModel_LD1_LPHD1_Proxy_blkEna = {
DataAttributeModelType,
"blkEna",
(ModelNode*) &iedModel_LD1_LPHD1_Proxy,
NULL,
NULL,
0,
IEC61850_FC_BL,
IEC61850_BOOLEAN,
0,
NULL,
0};
LogicalNode iedModel_LD1_MMDC1 = {
LogicalNodeModelType,
"MMDC1",
@ -424,7 +437,7 @@ DataAttribute iedModel_LD1_MMDC1_Watt_subID = {
DataAttributeModelType,
"subID",
(ModelNode*) &iedModel_LD1_MMDC1_Watt,
NULL,
(ModelNode*) &iedModel_LD1_MMDC1_Watt_blkEna,
NULL,
0,
IEC61850_FC_SV,
@ -433,6 +446,19 @@ DataAttribute iedModel_LD1_MMDC1_Watt_subID = {
NULL,
0};
DataAttribute iedModel_LD1_MMDC1_Watt_blkEna = {
DataAttributeModelType,
"blkEna",
(ModelNode*) &iedModel_LD1_MMDC1_Watt,
NULL,
NULL,
0,
IEC61850_FC_BL,
IEC61850_BOOLEAN,
0,
NULL,
0};
DataObject iedModel_LD1_MMDC1_Amp = {
DataObjectModelType,
"Amp",
@ -550,7 +576,7 @@ DataAttribute iedModel_LD1_MMDC1_Amp_subID = {
DataAttributeModelType,
"subID",
(ModelNode*) &iedModel_LD1_MMDC1_Amp,
NULL,
(ModelNode*) &iedModel_LD1_MMDC1_Amp_blkEna,
NULL,
0,
IEC61850_FC_SV,
@ -559,6 +585,19 @@ DataAttribute iedModel_LD1_MMDC1_Amp_subID = {
NULL,
0};
DataAttribute iedModel_LD1_MMDC1_Amp_blkEna = {
DataAttributeModelType,
"blkEna",
(ModelNode*) &iedModel_LD1_MMDC1_Amp,
NULL,
NULL,
0,
IEC61850_FC_BL,
IEC61850_BOOLEAN,
0,
NULL,
0};
DataObject iedModel_LD1_MMDC1_Vol = {
DataObjectModelType,
"Vol",
@ -676,7 +715,7 @@ DataAttribute iedModel_LD1_MMDC1_Vol_subID = {
DataAttributeModelType,
"subID",
(ModelNode*) &iedModel_LD1_MMDC1_Vol,
NULL,
(ModelNode*) &iedModel_LD1_MMDC1_Vol_blkEna,
NULL,
0,
IEC61850_FC_SV,
@ -685,6 +724,19 @@ DataAttribute iedModel_LD1_MMDC1_Vol_subID = {
NULL,
0};
DataAttribute iedModel_LD1_MMDC1_Vol_blkEna = {
DataAttributeModelType,
"blkEna",
(ModelNode*) &iedModel_LD1_MMDC1_Vol,
NULL,
NULL,
0,
IEC61850_FC_BL,
IEC61850_BOOLEAN,
0,
NULL,
0};
LogicalNode iedModel_LD1_GGIO1 = {
LogicalNodeModelType,
"GGIO1",
@ -832,7 +884,7 @@ DataAttribute iedModel_LD1_GGIO1_Ind1_subID = {
DataAttributeModelType,
"subID",
(ModelNode*) &iedModel_LD1_GGIO1_Ind1,
NULL,
(ModelNode*) &iedModel_LD1_GGIO1_Ind1_blkEna,
NULL,
0,
IEC61850_FC_SV,
@ -841,6 +893,19 @@ DataAttribute iedModel_LD1_GGIO1_Ind1_subID = {
NULL,
0};
DataAttribute iedModel_LD1_GGIO1_Ind1_blkEna = {
DataAttributeModelType,
"blkEna",
(ModelNode*) &iedModel_LD1_GGIO1_Ind1,
NULL,
NULL,
0,
IEC61850_FC_BL,
IEC61850_BOOLEAN,
0,
NULL,
0};
DataObject iedModel_LD1_GGIO1_AnIn1 = {
DataObjectModelType,
"AnIn1",
@ -958,7 +1023,7 @@ DataAttribute iedModel_LD1_GGIO1_AnIn1_subID = {
DataAttributeModelType,
"subID",
(ModelNode*) &iedModel_LD1_GGIO1_AnIn1,
NULL,
(ModelNode*) &iedModel_LD1_GGIO1_AnIn1_blkEna,
NULL,
0,
IEC61850_FC_SV,
@ -967,6 +1032,19 @@ DataAttribute iedModel_LD1_GGIO1_AnIn1_subID = {
NULL,
0};
DataAttribute iedModel_LD1_GGIO1_AnIn1_blkEna = {
DataAttributeModelType,
"blkEna",
(ModelNode*) &iedModel_LD1_GGIO1_AnIn1,
NULL,
NULL,
0,
IEC61850_FC_BL,
IEC61850_BOOLEAN,
0,
NULL,
0};
extern ReportControlBlock iedModel_LD1_LLN0_report0;
extern ReportControlBlock iedModel_LD1_LLN0_report1;

@ -1,7 +1,7 @@
/*
* static_model.h
*
* automatically generated from substitution_example.icd
* automatically generated from substitution_example.cid
*/
#ifndef STATIC_MODEL_H_
@ -32,6 +32,7 @@ extern DataAttribute iedModel_LD1_LPHD1_Proxy_subEna;
extern DataAttribute iedModel_LD1_LPHD1_Proxy_subVal;
extern DataAttribute iedModel_LD1_LPHD1_Proxy_subQ;
extern DataAttribute iedModel_LD1_LPHD1_Proxy_subID;
extern DataAttribute iedModel_LD1_LPHD1_Proxy_blkEna;
extern LogicalNode iedModel_LD1_MMDC1;
extern DataObject iedModel_LD1_MMDC1_Beh;
extern DataAttribute iedModel_LD1_MMDC1_Beh_stVal;
@ -47,6 +48,7 @@ extern DataAttribute iedModel_LD1_MMDC1_Watt_subMag;
extern DataAttribute iedModel_LD1_MMDC1_Watt_subMag_f;
extern DataAttribute iedModel_LD1_MMDC1_Watt_subQ;
extern DataAttribute iedModel_LD1_MMDC1_Watt_subID;
extern DataAttribute iedModel_LD1_MMDC1_Watt_blkEna;
extern DataObject iedModel_LD1_MMDC1_Amp;
extern DataAttribute iedModel_LD1_MMDC1_Amp_mag;
extern DataAttribute iedModel_LD1_MMDC1_Amp_mag_f;
@ -57,6 +59,7 @@ extern DataAttribute iedModel_LD1_MMDC1_Amp_subMag;
extern DataAttribute iedModel_LD1_MMDC1_Amp_subMag_f;
extern DataAttribute iedModel_LD1_MMDC1_Amp_subQ;
extern DataAttribute iedModel_LD1_MMDC1_Amp_subID;
extern DataAttribute iedModel_LD1_MMDC1_Amp_blkEna;
extern DataObject iedModel_LD1_MMDC1_Vol;
extern DataAttribute iedModel_LD1_MMDC1_Vol_mag;
extern DataAttribute iedModel_LD1_MMDC1_Vol_mag_f;
@ -67,6 +70,7 @@ extern DataAttribute iedModel_LD1_MMDC1_Vol_subMag;
extern DataAttribute iedModel_LD1_MMDC1_Vol_subMag_f;
extern DataAttribute iedModel_LD1_MMDC1_Vol_subQ;
extern DataAttribute iedModel_LD1_MMDC1_Vol_subID;
extern DataAttribute iedModel_LD1_MMDC1_Vol_blkEna;
extern LogicalNode iedModel_LD1_GGIO1;
extern DataObject iedModel_LD1_GGIO1_Beh;
extern DataAttribute iedModel_LD1_GGIO1_Beh_stVal;
@ -80,6 +84,7 @@ extern DataAttribute iedModel_LD1_GGIO1_Ind1_subEna;
extern DataAttribute iedModel_LD1_GGIO1_Ind1_subVal;
extern DataAttribute iedModel_LD1_GGIO1_Ind1_subQ;
extern DataAttribute iedModel_LD1_GGIO1_Ind1_subID;
extern DataAttribute iedModel_LD1_GGIO1_Ind1_blkEna;
extern DataObject iedModel_LD1_GGIO1_AnIn1;
extern DataAttribute iedModel_LD1_GGIO1_AnIn1_mag;
extern DataAttribute iedModel_LD1_GGIO1_AnIn1_mag_f;
@ -90,6 +95,7 @@ extern DataAttribute iedModel_LD1_GGIO1_AnIn1_subMag;
extern DataAttribute iedModel_LD1_GGIO1_AnIn1_subMag_f;
extern DataAttribute iedModel_LD1_GGIO1_AnIn1_subQ;
extern DataAttribute iedModel_LD1_GGIO1_AnIn1_subID;
extern DataAttribute iedModel_LD1_GGIO1_AnIn1_blkEna;
@ -114,6 +120,7 @@ extern DataAttribute iedModel_LD1_GGIO1_AnIn1_subID;
#define IEDMODEL_LD1_LPHD1_Proxy_subVal (&iedModel_LD1_LPHD1_Proxy_subVal)
#define IEDMODEL_LD1_LPHD1_Proxy_subQ (&iedModel_LD1_LPHD1_Proxy_subQ)
#define IEDMODEL_LD1_LPHD1_Proxy_subID (&iedModel_LD1_LPHD1_Proxy_subID)
#define IEDMODEL_LD1_LPHD1_Proxy_blkEna (&iedModel_LD1_LPHD1_Proxy_blkEna)
#define IEDMODEL_LD1_MMDC1 (&iedModel_LD1_MMDC1)
#define IEDMODEL_LD1_MMDC1_Beh (&iedModel_LD1_MMDC1_Beh)
#define IEDMODEL_LD1_MMDC1_Beh_stVal (&iedModel_LD1_MMDC1_Beh_stVal)
@ -129,6 +136,7 @@ extern DataAttribute iedModel_LD1_GGIO1_AnIn1_subID;
#define IEDMODEL_LD1_MMDC1_Watt_subMag_f (&iedModel_LD1_MMDC1_Watt_subMag_f)
#define IEDMODEL_LD1_MMDC1_Watt_subQ (&iedModel_LD1_MMDC1_Watt_subQ)
#define IEDMODEL_LD1_MMDC1_Watt_subID (&iedModel_LD1_MMDC1_Watt_subID)
#define IEDMODEL_LD1_MMDC1_Watt_blkEna (&iedModel_LD1_MMDC1_Watt_blkEna)
#define IEDMODEL_LD1_MMDC1_Amp (&iedModel_LD1_MMDC1_Amp)
#define IEDMODEL_LD1_MMDC1_Amp_mag (&iedModel_LD1_MMDC1_Amp_mag)
#define IEDMODEL_LD1_MMDC1_Amp_mag_f (&iedModel_LD1_MMDC1_Amp_mag_f)
@ -139,6 +147,7 @@ extern DataAttribute iedModel_LD1_GGIO1_AnIn1_subID;
#define IEDMODEL_LD1_MMDC1_Amp_subMag_f (&iedModel_LD1_MMDC1_Amp_subMag_f)
#define IEDMODEL_LD1_MMDC1_Amp_subQ (&iedModel_LD1_MMDC1_Amp_subQ)
#define IEDMODEL_LD1_MMDC1_Amp_subID (&iedModel_LD1_MMDC1_Amp_subID)
#define IEDMODEL_LD1_MMDC1_Amp_blkEna (&iedModel_LD1_MMDC1_Amp_blkEna)
#define IEDMODEL_LD1_MMDC1_Vol (&iedModel_LD1_MMDC1_Vol)
#define IEDMODEL_LD1_MMDC1_Vol_mag (&iedModel_LD1_MMDC1_Vol_mag)
#define IEDMODEL_LD1_MMDC1_Vol_mag_f (&iedModel_LD1_MMDC1_Vol_mag_f)
@ -149,6 +158,7 @@ extern DataAttribute iedModel_LD1_GGIO1_AnIn1_subID;
#define IEDMODEL_LD1_MMDC1_Vol_subMag_f (&iedModel_LD1_MMDC1_Vol_subMag_f)
#define IEDMODEL_LD1_MMDC1_Vol_subQ (&iedModel_LD1_MMDC1_Vol_subQ)
#define IEDMODEL_LD1_MMDC1_Vol_subID (&iedModel_LD1_MMDC1_Vol_subID)
#define IEDMODEL_LD1_MMDC1_Vol_blkEna (&iedModel_LD1_MMDC1_Vol_blkEna)
#define IEDMODEL_LD1_GGIO1 (&iedModel_LD1_GGIO1)
#define IEDMODEL_LD1_GGIO1_Beh (&iedModel_LD1_GGIO1_Beh)
#define IEDMODEL_LD1_GGIO1_Beh_stVal (&iedModel_LD1_GGIO1_Beh_stVal)
@ -162,6 +172,7 @@ extern DataAttribute iedModel_LD1_GGIO1_AnIn1_subID;
#define IEDMODEL_LD1_GGIO1_Ind1_subVal (&iedModel_LD1_GGIO1_Ind1_subVal)
#define IEDMODEL_LD1_GGIO1_Ind1_subQ (&iedModel_LD1_GGIO1_Ind1_subQ)
#define IEDMODEL_LD1_GGIO1_Ind1_subID (&iedModel_LD1_GGIO1_Ind1_subID)
#define IEDMODEL_LD1_GGIO1_Ind1_blkEna (&iedModel_LD1_GGIO1_Ind1_blkEna)
#define IEDMODEL_LD1_GGIO1_AnIn1 (&iedModel_LD1_GGIO1_AnIn1)
#define IEDMODEL_LD1_GGIO1_AnIn1_mag (&iedModel_LD1_GGIO1_AnIn1_mag)
#define IEDMODEL_LD1_GGIO1_AnIn1_mag_f (&iedModel_LD1_GGIO1_AnIn1_mag_f)
@ -172,6 +183,7 @@ extern DataAttribute iedModel_LD1_GGIO1_AnIn1_subID;
#define IEDMODEL_LD1_GGIO1_AnIn1_subMag_f (&iedModel_LD1_GGIO1_AnIn1_subMag_f)
#define IEDMODEL_LD1_GGIO1_AnIn1_subQ (&iedModel_LD1_GGIO1_AnIn1_subQ)
#define IEDMODEL_LD1_GGIO1_AnIn1_subID (&iedModel_LD1_GGIO1_AnIn1_subID)
#define IEDMODEL_LD1_GGIO1_AnIn1_blkEna (&iedModel_LD1_GGIO1_AnIn1_blkEna)
#endif /* STATIC_MODEL_H_ */

@ -99,6 +99,7 @@
<DA bType="BOOLEAN" fc="SV" name="subVal"/>
<DA bType="Quality" fc="SV" name="subQ"/>
<DA bType="VisString64" fc="SV" name="subID"/>
<DA bType="BOOLEAN" fc="BL" name="blkEna"/>
</DOType>
<DOType cdc="MV" id="MV">
<DA bType="Struct" dchg="true" dupd="false" fc="MX" name="mag" type="AnalogueValue"/>
@ -108,6 +109,7 @@
<DA bType="Struct" fc="SV" name="subMag" type="AnalogueValue"/>
<DA bType="Quality" fc="SV" name="subQ"/>
<DA bType="VisString64" fc="SV" name="subID"/>
<DA bType="BOOLEAN" fc="BL" name="blkEna"/>
</DOType>
<DAType id="AnalogueValue">
<BDA bType="FLOAT32" name="f"/>

@ -32,6 +32,7 @@
#define ALLOW_WRITE_ACCESS_SP 4
#define ALLOW_WRITE_ACCESS_SV 8
#define ALLOW_WRITE_ACCESS_SE 16
#define ALLOW_WRITE_ACCESS_BL 32
struct sIedServer
{

@ -2100,45 +2100,9 @@ isReportControlBlock(char* separator)
#endif /* (CONFIG_IEC61850_REPORT_SERVICE == 1) */
static bool
isFunctionalConstraintCF(char* separator)
isFunctionalConstraint(const char* fcStr, char* separator)
{
if (strncmp(separator + 1, "CF", 2) == 0)
return true;
else
return false;
}
static bool
isFunctionalConstraintDC(char* separator)
{
if (strncmp(separator + 1, "DC", 2) == 0)
return true;
else
return false;
}
static bool
isFunctionalConstraintSP(char* separator)
{
if (strncmp(separator + 1, "SP", 2) == 0)
return true;
else
return false;
}
static bool
isFunctionalConstraintSV(char* separator)
{
if (strncmp(separator + 1, "SV", 2) == 0)
return true;
else
return false;
}
static bool
isFunctionalConstraintSE(char* separator)
{
if (strncmp(separator + 1, "SE", 2) == 0)
if (strncmp(separator + 1, fcStr, 2) == 0)
return true;
else
return false;
@ -2445,16 +2409,18 @@ checkIfValueBelongsToModelNode(DataAttribute* dataAttribute, MmsValue* value, Mm
static FunctionalConstraint
getFunctionalConstraintForWritableNode(char* separator)
{
if (isFunctionalConstraintCF(separator))
if (isFunctionalConstraint("CF", separator))
return IEC61850_FC_CF;
if (isFunctionalConstraintDC(separator))
if (isFunctionalConstraint("DC", separator))
return IEC61850_FC_DC;
if (isFunctionalConstraintSP(separator))
if (isFunctionalConstraint("SP", separator))
return IEC61850_FC_SP;
if (isFunctionalConstraintSV(separator))
if (isFunctionalConstraint("SV", separator))
return IEC61850_FC_SV;
if (isFunctionalConstraintSE(separator))
if (isFunctionalConstraint("SE", separator))
return IEC61850_FC_SE;
if (isFunctionalConstraint("BL", separator))
return IEC61850_FC_BL;
return IEC61850_FC_NONE;
}
@ -2497,6 +2463,13 @@ getAccessPolicyForFC(MmsMapping* self, FunctionalConstraint fc)
return ACCESS_POLICY_DENY;
}
if (fc == IEC61850_FC_BL) {
if (self->iedServer->writeAccessPolicies & ALLOW_WRITE_ACCESS_BL)
return ACCESS_POLICY_ALLOW;
else
return ACCESS_POLICY_DENY;
}
return ACCESS_POLICY_DENY;
}
@ -2811,7 +2784,7 @@ mmsWriteHandler(void* parameter, MmsDomain* domain,
printf("IED_SERVER: write to %s policy:%i\n", variableId, nodeAccessPolicy);
#if (CONFIG_IEC61850_SETTING_GROUPS == 1)
if (isFunctionalConstraintSE(separator)) {
if (isFunctionalConstraint("SE", separator)) {
SettingGroup* sg = getSettingGroupByMmsDomain(self, domain);
if (sg != NULL) {
@ -3189,7 +3162,7 @@ mmsReadAccessHandler (void* parameter, MmsDomain* domain, char* variableId, MmsS
#if (CONFIG_IEC61850_SETTING_GROUPS == 1)
if (separator) {
if (isFunctionalConstraintSE(separator)) {
if (isFunctionalConstraint("SE", separator)) {
SettingGroup* sg = getSettingGroupByMmsDomain(self, domain);
if (sg != NULL) {

Loading…
Cancel
Save