- 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)] [return: MarshalAs(UnmanagedType.I1)]
static extern bool IedServerConfig_isResvTmsForBRCBEnabled(IntPtr self); 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; internal IntPtr self;
public IedServerConfig() public IedServerConfig()
@ -300,7 +307,7 @@ namespace IEC61850.Server
/// <summary> /// <summary>
/// Enable/Disable the presence of ResvTms attribute in BRCBs (buffered report control blocks) /// Enable/Disable the presence of ResvTms attribute in BRCBs (buffered report control blocks)
/// </summary> /// </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 public bool BRCBHasResvTms
{ {
get 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> /// <summary>
/// Releases all resource used by the <see cref="IEC61850.Server.IedServerConfig"/> object. /// Releases all resource used by the <see cref="IEC61850.Server.IedServerConfig"/> object.
/// </summary> /// </summary>

@ -108,9 +108,6 @@ typedef enum {
/** Report will be triggered by GI (general interrogation) request */ /** Report will be triggered by GI (general interrogation) request */
#define TRG_OPT_GI 16 #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 */ /** Report will be triggered only on rising edge (transient variable */
#define TRG_OPT_TRANSIENT 128 #define TRG_OPT_TRANSIENT 128
/** @} */ /** @} */

@ -92,6 +92,9 @@ struct sIedServerConfig
/** BRCB has resvTms attribute - only edition 2 (default: true) */ /** BRCB has resvTms attribute - only edition 2 (default: true) */
bool enableResvTmsForBRCB; bool enableResvTmsForBRCB;
/** RCB has owner attribute (default: true) */
bool enableOwnerForRCB;
}; };
/** /**
@ -308,9 +311,9 @@ LIB61850_API void
IedServerConfig_enableResvTmsForSGCB(IedServerConfig self, bool enable); 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 LIB61850_API void
IedServerConfig_enableResvTmsForBRCB(IedServerConfig self, bool enable); IedServerConfig_enableResvTmsForBRCB(IedServerConfig self, bool enable);
@ -323,6 +326,22 @@ IedServerConfig_enableResvTmsForBRCB(IedServerConfig self, bool enable);
LIB61850_API bool LIB61850_API bool
IedServerConfig_isResvTmsForBRCBEnabled(IedServerConfig self); 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 * \brief Enable/disable using the integrated GOOSE publisher for configured GoCBs
* *

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

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

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

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

Loading…
Cancel
Save