- IED server: make presence of RCB.Owner configurable at runtime with function IedServerConfig_enableOwnerForRCB (B1502/S1634)

pull/331/head
Michael Zillgith 5 years ago
parent fd3847dcc5
commit ea268b46a7

@ -114,6 +114,13 @@ namespace IEC61850.Server
[return: MarshalAs(UnmanagedType.I1)]
static extern bool IedServerConfig_isResvTmsForBRCBEnabled(IntPtr self);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void IedServerConfig_enableOwnerForRCB(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool enable);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
static extern bool IedServerConfig_isOwnerForRCBEnabled(IntPtr self);
internal IntPtr self;
public IedServerConfig()
@ -300,7 +307,7 @@ namespace IEC61850.Server
/// <summary>
/// Enable/Disable the presence of ResvTms attribute in BRCBs (buffered report control blocks)
/// </summary>
/// <value><c>true</c> if BRCB has ResvTms; otherwise, <c>false</c>.</value>
/// <value><c>true</c> if BRCB has ResvTms; otherwise, <c>false</c>. Defaults to true</value>
public bool BRCBHasResvTms
{
get
@ -313,6 +320,22 @@ namespace IEC61850.Server
}
}
/// <summary>
/// Enable/Disable the presence of Owner attribute in RCBs (report control blocks)
/// </summary>
/// <value><c>true</c> if RCB has Owner; otherwise, <c>false</c>. Defaults to false</value>
public bool RCBHasOwner
{
get
{
return IedServerConfig_isOwnerForRCBEnabled(self);
}
set
{
IedServerConfig_enableOwnerForRCB(self, value);
}
}
/// <summary>
/// Releases all resource used by the <see cref="IEC61850.Server.IedServerConfig"/> object.
/// </summary>

@ -108,9 +108,6 @@ typedef enum {
/** Report will be triggered by GI (general interrogation) request */
#define TRG_OPT_GI 16
/** RCB has the owner attribute */
#define RPT_OPT_HAS_OWNER 64
/** Report will be triggered only on rising edge (transient variable */
#define TRG_OPT_TRANSIENT 128
/** @} */

@ -92,6 +92,9 @@ struct sIedServerConfig
/** BRCB has resvTms attribute - only edition 2 (default: true) */
bool enableResvTmsForBRCB;
/** RCB has owner attribute (default: true) */
bool enableOwnerForRCB;
};
/**
@ -308,9 +311,9 @@ LIB61850_API void
IedServerConfig_enableResvTmsForSGCB(IedServerConfig self, bool enable);
/**
* \brief Enable/disable the presence of BRCB.ResvTms
* \brief Enable/disable the presence of BRCB.ResvTms (default value is true)
*
* \param[in] enable set true to enable, otherwise false (default value it true)
* \param[in] enable set true to enable, otherwise false
*/
LIB61850_API void
IedServerConfig_enableResvTmsForBRCB(IedServerConfig self, bool enable);
@ -323,6 +326,22 @@ IedServerConfig_enableResvTmsForBRCB(IedServerConfig self, bool enable);
LIB61850_API bool
IedServerConfig_isResvTmsForBRCBEnabled(IedServerConfig self);
/**
* \brief Enable/disable the presence of owner in report control blocks (default value is false);
*
* \param[in] enable set true to enable, otherwise false
*/
LIB61850_API void
IedServerConfig_enableOwnerForRCB(IedServerConfig self, bool enable);
/**
* \brief Owner for RCBs enabled (visible)
*
* \return true if enabled, false otherwise
*/
LIB61850_API bool
IedServerConfig_isOwnerForRCBEnabled(IedServerConfig self);
/**
* \brief Enable/disable using the integrated GOOSE publisher for configured GoCBs
*

@ -48,6 +48,7 @@ struct sIedServer
int reportBufferSizeBRCBs;
int reportBufferSizeURCBs;
bool enableBRCBResvTms;
bool enableOwnerForRCB;
#endif
#if (CONFIG_MMS_THREADLESS_STACK != 1)

@ -483,10 +483,12 @@ IedServer_createWithConfig(IedModel* dataModel, TLSConfiguration tlsConfiguratio
self->reportBufferSizeBRCBs = serverConfiguration->reportBufferSize;
self->reportBufferSizeURCBs = serverConfiguration->reportBufferSizeURCBs;
self->enableBRCBResvTms = serverConfiguration->enableResvTmsForBRCB;
self->enableOwnerForRCB = serverConfiguration->enableOwnerForRCB;
}
else {
self->reportBufferSizeBRCBs = CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE;
self->reportBufferSizeURCBs = CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE;
self->enableOwnerForRCB = false;
#if (CONFIG_IEC61850_BRCB_WITH_RESVTMS == 1)
self->enableBRCBResvTms = true;
#else

@ -56,6 +56,7 @@ IedServerConfig_create()
self->maxMmsConnections = 5;
self->enableEditSG = true;
self->enableResvTmsForBRCB = true;
self->enableOwnerForRCB = false;
}
return self;
@ -212,6 +213,17 @@ IedServerConfig_isResvTmsForBRCBEnabled(IedServerConfig self)
return self->enableResvTmsForBRCB;
}
void
IedServerConfig_enableOwnerForRCB(IedServerConfig self, bool enable)
{
self->enableOwnerForRCB = enable;
}
bool
IedServerConfig_isOwnerForRCBEnabled(IedServerConfig self)
{
return self->enableOwnerForRCB;
}
void
IedServerConfig_useIntegratedGoosePublisher(IedServerConfig self, bool enable)

@ -1354,8 +1354,7 @@ Reporting_createMmsBufferedRCBs(MmsMapping* self, MmsDomain* domain,
ReportControlBlock* reportControlBlock = getRCBForLogicalNodeWithIndex(
self, logicalNode, currentReport, true);
if (reportControlBlock->trgOps & RPT_OPT_HAS_OWNER)
rc->hasOwner = true;
rc->hasOwner = self->iedServer->enableOwnerForRCB;
rc->name = StringUtils_createString(3, logicalNode->name, "$BR$",
reportControlBlock->name);
@ -1396,8 +1395,7 @@ Reporting_createMmsUnbufferedRCBs(MmsMapping* self, MmsDomain* domain,
ReportControlBlock* reportControlBlock = getRCBForLogicalNodeWithIndex(
self, logicalNode, currentReport, false);
if (reportControlBlock->trgOps & RPT_OPT_HAS_OWNER)
rc->hasOwner = true;
rc->hasOwner = self->iedServer->enableOwnerForRCB;
rc->name = StringUtils_createString(3, logicalNode->name, "$RP$",
reportControlBlock->name);

Loading…
Cancel
Save