libiec61850  1.2.0
Functions
General dynamic model creation functions

Functions

IedModel * IedModel_create (const char *name)
 create a new IedModel instance More...
 
void IedModel_setIedNameForDynamicModel (IedModel *self, const char *name)
 Set the name of the IED (use only for dynamic model!) More...
 
void IedModel_destroy (IedModel *model)
 destroy a dynamically created data model More...
 
LogicalDevice * LogicalDevice_create (const char *name, IedModel *parent)
 Create a new logical device model and add it to the IED model. More...
 
LogicalNode * LogicalNode_create (const char *name, LogicalDevice *parent)
 Create a new logical mode and add it to a logical device. More...
 
DataObject * DataObject_create (const char *name, ModelNode *parent, int arrayElements)
 create a new data object and add it to a parent model node More...
 
DataAttribute * DataAttribute_create (const char *name, ModelNode *parent, DataAttributeType type, FunctionalConstraint fc, uint8_t triggerOptions, int arrayElements, uint32_t sAddr)
 create a new data attribute and add it to a parent model node More...
 
ReportControlBlock * ReportControlBlock_create (const char *name, LogicalNode *parent, char *rptId, bool isBuffered, char *dataSetName, uint32_t confRef, uint8_t trgOps, uint8_t options, uint32_t bufTm, uint32_t intgPd)
 create a new report control block (RCB) More...
 
LogControlBlock * LogControlBlock_create (const char *name, LogicalNode *parent, char *dataSetName, char *logRef, uint8_t trgOps, uint32_t intgPd, bool logEna, bool reasonCode)
 create a new log control block (LCB) More...
 
Log * Log_create (const char *name, LogicalNode *parent)
 create a log (used by the IEC 61850 log service) More...
 
SettingGroupControlBlock * SettingGroupControlBlock_create (LogicalNode *parent, uint8_t actSG, uint8_t numOfSGs)
 create a setting group control block (SGCB) More...
 
GSEControlBlock * GSEControlBlock_create (const char *name, LogicalNode *parent, char *appId, char *dataSet, uint32_t confRev, bool fixedOffs, int minTime, int maxTime)
 create a new GSE/GOOSE control block (GoCB) More...
 
SVControlBlock * SVControlBlock_create (const char *name, LogicalNode *parent, char *svID, char *dataSet, uint32_t confRev, uint8_t smpMod, uint16_t smpRate, uint8_t optFlds, bool isUnicast)
 create a new Multicast/Unicast Sampled Value (SV) control block (SvCB) More...
 
void SVControlBlock_addPhyComAddress (SVControlBlock *self, PhyComAddress *phyComAddress)
 
void GSEControlBlock_addPhyComAddress (GSEControlBlock *self, PhyComAddress *phyComAddress)
 
PhyComAddressPhyComAddress_create (uint8_t vlanPriority, uint16_t vlanId, uint16_t appId, uint8_t dstAddress[])
 create a PhyComAddress object More...
 
DataSet * DataSet_create (const char *name, LogicalNode *parent)
 create a new data set More...
 
int DataSet_getSize (DataSet *self)
 returns the number of elements (entries) of the data set More...
 
DataSetEntryDataSet_getFirstEntry (DataSet *self)
 
DataSetEntryDataSetEntry_getNext (DataSetEntry *self)
 
DataSetEntryDataSetEntry_create (DataSet *dataSet, const char *variable, int index, const char *component)
 create a new data set entry (FCDA) More...
 

Detailed Description

Function Documentation

DataAttribute* DataAttribute_create ( const char *  name,
ModelNode *  parent,
DataAttributeType  type,
FunctionalConstraint  fc,
uint8_t  triggerOptions,
int  arrayElements,
uint32_t  sAddr 
)

create a new data attribute and add it to a parent model node

The parent model node has to be of type LogicalNode or DataObject

Parameters
namethe name of the data attribute (e.g. "stVal")
parentthe parent model node
typethe type of the data attribute (CONSTRUCTED if the type contains sub data attributes)
fcthe functional constraint (FC) of the data attribte
triggerOptionsthe trigger options (dupd, dchg, qchg) that cause an event notification
arrayElementsthe number of array elements if the data attribute is an array or 0
sAddran optional short address
Returns
the newly create DataAttribute instance
DataObject* DataObject_create ( const char *  name,
ModelNode *  parent,
int  arrayElements 
)

create a new data object and add it to a parent model node

The parent model node has to be of type DataObject or LogicalNode.

Parameters
namethe name of the data object (e.h. "Mod", "Health" ...)
parentthe parent model node
arrayElementsthe number of array elements if the data object is an array or 0
Returns
the newly create DataObject instance
DataSet* DataSet_create ( const char *  name,
LogicalNode *  parent 
)

create a new data set

Parameters
namethe name of the data set
parentthe logical node that hosts the data set (typically a LLN0)
Returns
the new data set instance
DataSetEntry* DataSet_getFirstEntry ( DataSet *  self)
int DataSet_getSize ( DataSet *  self)

returns the number of elements (entries) of the data set

Parameters
selfthe instance of the data set
Returns
the number of data set elements
DataSetEntry* DataSetEntry_create ( DataSet *  dataSet,
const char *  variable,
int  index,
const char *  component 
)

create a new data set entry (FCDA)

Create a new FCDA reference and add it to the given data set as a new data set member.

Note: Be aware that data set entries are not IEC 61850 object reference but MMS variable names that have to contain the LN name, the FC and subsequent path elements separated by "$" instead of ".". This is due to efficiency reasons to avoid the creation of additional strings.

If the variable parameter does not contain a logical device name (separated from the remaining variable name by the "/" character) the logical device where the data set resides is used automatically.

Parameters
dataSetthe data set to which the new entry will be added
variablethe name of the variable as MMS variable name including FC ("$" used as separator!)
indexthe index if the FCDA is an array element, otherwise -1
componentthe name of the component of the variable if the FCDA is a sub element of an array element. If this is not the case then NULL should be given here.
Returns
the new data set entry instance
DataSetEntry* DataSetEntry_getNext ( DataSetEntry self)
void GSEControlBlock_addPhyComAddress ( GSEControlBlock *  self,
PhyComAddress phyComAddress 
)
GSEControlBlock* GSEControlBlock_create ( const char *  name,
LogicalNode *  parent,
char *  appId,
char *  dataSet,
uint32_t  confRev,
bool  fixedOffs,
int  minTime,
int  maxTime 
)

create a new GSE/GOOSE control block (GoCB)

Create a new GOOSE control block (GoCB) and add it to the given logical node (LN)

Parameters
namename of the GoCB relative to the parent LN
parentthe parent LN
appIdthe application ID of the GoCB
dataSetthe data set reference to be used by the GoCB
confRevthe configuration revision
fixedOffsindicates if GOOSE publisher shall use fixed offsets (NOT YET SUPPORTED)
minTimeminimum GOOSE retransmission time (-1 if not specified - uses stack default then)
maxTimeGOOSE retransmission time in stable state (-1 if not specified - uses stack default then)
Returns
the new GoCB instance
IedModel* IedModel_create ( const char *  name)

create a new IedModel instance

The IedModel object is the root node of an IEC 61850 service data model.

Parameters
namethe name of the IedModel or NULL (optional - NOT YET USED)
Returns
void IedModel_destroy ( IedModel *  model)

destroy a dynamically created data model

This function will free all the memory allocated for the data model.

NOTE: Do not use this function when using a static data model (static_model.c create by static model generator).

Parameters
modelthe model instance to destroy
void IedModel_setIedNameForDynamicModel ( IedModel *  self,
const char *  name 
)

Set the name of the IED (use only for dynamic model!)

This will change the default name (usualy "TEMPLATE") to a user configured values. NOTE: This function has to be called before IedServer_create ! NOTE: For dynamic model (and configuration file date model) this function has to be used instead of IedModel_setIedName.

Parameters
modelthe IedModel instance
thename of the configured IED
Log* Log_create ( const char *  name,
LogicalNode *  parent 
)

create a log (used by the IEC 61850 log service)

Parameters
namename of the LOG relative to the parent LN
parentthe parent LN
Returns
the new LOG instance
LogControlBlock* LogControlBlock_create ( const char *  name,
LogicalNode *  parent,
char *  dataSetName,
char *  logRef,
uint8_t  trgOps,
uint32_t  intgPd,
bool  logEna,
bool  reasonCode 
)

create a new log control block (LCB)

Create a new log control block (LCB) and add it to the given logical node (LN).

Parameters
namename of the LCB relative to the parent LN
parentthe parent LN.
dataSetNamename (object reference) of the default data set or NULL if no data set is set by default
logRefname (object reference) of the default log or NULL if no log is set by default. THe LDname doesn't contain the IED name!
trgOpsthe trigger options supported by this LCB (bit set)
intgPdintegrity period in milliseconds
logEnaif true the log will be enabled by default, false otherwise
reasonCodeif true the reasonCode will be included in the log (this is always true in MMS mapping)
Returns
the new LCB instance
LogicalDevice* LogicalDevice_create ( const char *  name,
IedModel *  parent 
)

Create a new logical device model and add it to the IED model.

Parameters
namethe name of the new logical device
parentthe parent IED model
Returns
the newly created LogicalDevice instance
LogicalNode* LogicalNode_create ( const char *  name,
LogicalDevice *  parent 
)

Create a new logical mode and add it to a logical device.

Parameters
namethe name of the new logical node
parentthe parent logical device
Returns
the newly created LogicalNode instance
PhyComAddress* PhyComAddress_create ( uint8_t  vlanPriority,
uint16_t  vlanId,
uint16_t  appId,
uint8_t  dstAddress[] 
)

create a PhyComAddress object

A PhyComAddress object contains all required addressing information for a GOOSE publisher.

Parameters
vlanPrioritythe priority field of the VLAN tag
vlanIdthe ID field of the VLAN tag
appIdthe application identifier
dstAddressthe 6 byte multicast MAC address to specify the destination
Returns
the new PhyComAddress object
ReportControlBlock* ReportControlBlock_create ( const char *  name,
LogicalNode *  parent,
char *  rptId,
bool  isBuffered,
char *  dataSetName,
uint32_t  confRef,
uint8_t  trgOps,
uint8_t  options,
uint32_t  bufTm,
uint32_t  intgPd 
)

create a new report control block (RCB)

Create a new report control block (RCB) and add it to the given logical node (LN).

Parameters
namename of the RCB relative to the parent LN
parentthe parent LN.
rptIdof the report. If NULL the default report ID (object reference) is used.
isBufferedtrue for a buffered RCB - false for unbuffered RCB
dataSetNamename (object reference) of the default data set or NULL if no data set is set by default
confRefthe configuration revision
trgOpsthe trigger options supported by this RCB (bit set)
optionsthe inclusion options. Specifies what elements are included in a report (bit set)
bufTmthe buffering time of the RCB in milliseconds (time between the first event and the preparation of the report).
intgPdintegrity period in milliseconds
Returns
the new RCB instance.
SettingGroupControlBlock* SettingGroupControlBlock_create ( LogicalNode *  parent,
uint8_t  actSG,
uint8_t  numOfSGs 
)

create a setting group control block (SGCB)

Create a new setting group control block (SGCB) and add it to the given logical node (LN).

Parameters
parentthe parent LN.
theactive setting group on server startup (1..N)
thenumber of setting groups (N)
Returns
the new SGCB instance
void SVControlBlock_addPhyComAddress ( SVControlBlock *  self,
PhyComAddress phyComAddress 
)
SVControlBlock* SVControlBlock_create ( const char *  name,
LogicalNode *  parent,
char *  svID,
char *  dataSet,
uint32_t  confRev,
uint8_t  smpMod,
uint16_t  smpRate,
uint8_t  optFlds,
bool  isUnicast 
)

create a new Multicast/Unicast Sampled Value (SV) control block (SvCB)

Create a new Sampled Value control block (SvCB) and add it to the given logical node (LN)

Parameters
namename of the SvCB relative to the parent LN
parentthe parent LN
svIDthe application ID of the SvCB
dataSetthe data set reference to be used by the SVCB
confRevthe configuration revision
smpModthe sampling mode used
smpRatethe sampling rate used
optFldsthe optional element configuration
Returns
the new SvCB instance