Today I am happy to announce version 0.7 of libIEC61850. The most important new features are support for buffered reporting and a very flexible mechanism to perform server-side access control to data attributes. Also the client API has been extended to provide easy access to report and GOOSE control blocks. Also included is client support for abort and release services. Next to these more visible changes also a lot of smaller changes and bug fixes have been included in this release. I also uploaded a datasheet that contains a list of the ACSI services supported by this version.
The latest version of libIEC61850 contains a demo project for the BeagleBone and the BeagleBone Black boards. The BeagleBone is a low cost embedded Linux board featuring a Cortex-A8 processor from Texas Instruments (see http://beagleboard.org/Products/BeagleBone+Black). The BeagleBone Black can be purchased from various vendors for approximately 45 EUR.
The demo consists of an IEC61850/MMS server providing access to the four LEDs of the Beaglebone. Also included is a simple client application that performs some actions with the LEDs. Access to the LEDs is modeled with GGIO logical nodes. It should be easy to extend the demo to control GPIOs and port it to other embedded linux boards like the Raspberry Pi or the Carambola 2 board.
At the moment the demo is primarily intended to illustrate the usage of IEC 61850 control models with libIEC61850. The first three LED are modeled as a single point control (SPC) whilst the last LED is modeled as a double point control (a flashing LED represent the intermediate state).
To run the demo on the BeagleBone you need a cross-compile GCC toolchain installed on your development system. E.g. on a current Ubuntu system (tested with Ubuntu 13.04) you can easily install such a tool chain by typing
apt-get install gcc-4.7-arm-linux-gnueabi
on the command line.
Then go to the demo/beaglebone folder and enter
Depending on the OS installed on the BeagleBone you may require a different tool chain. The instructions have been tested with the stock firmware installed on the BeagleBone Black.
If you have successfully compiled the demo you can copy the created binary to the BeagleBone and execute it. Then you can use a generic client to trigger the LEDs by performing operate requests on the data objects representing the LEDs. Or you can modify the provided demo client to trigger the LEDs.
Depending on the version/firmware of the BeagleBone you may have to adjust the file paths for LED control in the file demos/beaglebone/beaglebone_leds.h.
The demo will be extended with future versions of libIEC61850 to illustrate the usage of new features.
After two months without a new version I released a new version today. This version provides a lot of enhancements especially for the client API. But also the server side API changed. Both APIs should be much more usable now. Also included are a lot of bug fixes for problems reported by users and a simple demo application to control the LEDs of a BeagleBone or BeagleBone black with IEC 61850 (a post with detailed instructions will follow soon).
The release plan has also been changed a bit. Originally I planned this release as version 0.5.4. But since a lot of new features have been introduced and also the API changed in an incompatible way (concerning server side callbacks) I decided to release this version as 0.6. The support for TLS has been postponed to a later release. The next major release will focus on support for buffered reporting.
Since many people have asked how to build libiec61850 with Visual Studio this new release contains a new build system based on cmake that is able to generate solution and project files for Visual Studio, Code Blocks and other tools. With the help of cmake it is now possible to build all examples and the library as a DLL for Windows with Visual Studio 2010 and 2012. To cross-compile for Embedded Linux systems it is recommended to use the old make based build system. The new release also improved server support for the reporting service. Clients can now create new data sets and connect them to existing report control blocks. This enables a more flexible use of reporting (event based message transmission).
This new release includes full server support for all IEC 61850 control models as well as time activated control. The new control handlers provide applications full access to all aspects of the selected control model. The IEC 61850 client API has also been extended to support control client side. There have also been some smaller changes in the client API and some bug fixes in the SCL file parser. The server now provides support for the MMS identify services. See also CHANGELOG and the API documentation.
IEC 61850 provides a very “elaborated” (it would also be justified to say complicated) model of functions to execute commands at devices. These functions are called “control models” in IEC 61580 speech. The abstract control models are defined in IEC 61850-7-2 and the mapping to the MMS (Manufacturing Message Specification) application protocol is defined in IEC 61850-8-1. Whilst the first provides control functions of different complexity in an abstract manner the latter is mapping the IEC 61850 control primitives to MMS.
IEC 61850 provides four different control models:
– direct control with normal security
– SBO (select before operate) with normal security
– direct control with enhanced security
– SBO with enhanced security
The “direct control” models provide simple means to start actions at the server. If multiple clients are trying to perform conflicting control actions this will not be prevented by the server. If this is required the “select before operate” mode can be used. Using this mode a client has to “select” the control object. After selection the selecting client is the only one allowed to perform control actions.
“Security” in this context actually means safety. The “enhanced security” models just provide more feedback to the calling client than the models with “normal security”. E.g. they transmit additional error codes and state information.
All of those control models optionally provide “time activated control”. With this mechanism a control action will not be executed immediately but in the future at a time specified by the client.
From a technical point of view the MMS mapping of the IEC 61850 control services is implemented by reading and writing to MMS pseudo-variables. While client requests are mapped to MMS read or write service requests the server responses may be mapped to read and write responses and additionally to MMS information report messages. The MMS information reports are used to transmit error codes in case of a service error. So in case of a negative response there is the response PDU of the read or write services indicating that there was a problem and additionally an MMS information report that contains more detailed information about the problem that occured.
As of version 0.5 libIEC61850 has support for all control models. A tutorial about the usage of the different control models in libiec61850 can be found here.
This release contains GOOSE publisher and subscriber code for both Linux and Windows. Also a new IEC 61850 client API has been created. This API is just in the beginning but already contains functions to read and write variables, activate and receive reports, and simple data model discovery. This release also contains improvements for the ACSE and presentation layers that are now more memory efficient.
This release introduces additional features for the server stack. Experimental GOOSE publisher code has been integrated. This feature is only available for Linux yet and can be disabled by a stack configuration option. Other changes include the possibility to install data attribute specific callback functions to observe successful write attempts to data attributes by MMS clients. Also the reporting module has been improved.
This release contains support functions for handling MMS time data types. It also contains bug fixes for report handling and COTP layer. Also the server side report handling code has been extended. The new Semaphore type has been added to the Thread API. This is used by the server code for internal synchronization. See also CHANGELOG for more details. Also I would like to thank all the people who provided feedback and bug reports!
This release improves the server support for reports. Also basic support for the IEC 61850 control model is included in this release. The direct control model is now supported. Support for more elaborated control models is prepared. The server has also been tested on a ARM7 based ucLinux system.
The IEC 61850 server tutorial now reflects the API changes.