Version 0.8 released

This new release brings some internal refactoring and some small changes in HAL. This was required to make the threading behavior of the server side stack more configurable. Starting with this release a user of the library can select between a multi-threaded or single-threaded operation mode and a “thread-less” operation mode that doesn’t use threads at all. The new operation modes are intended to save resources. The non-threaded operation mode simplifies porting to platforms where pre-emptive multi-threading is not available or too expensive. Therefore it is especially applicable for small embedded systems. Here you can find instructions on how to control the threading behavior. Also the C# client API has been extended and the documentation has been improved. An online API documentation for C# can be found here.

13 thoughts on “Version 0.8 released

  1. toscho

    Hi,
    I have the following touble:
    I installed on Win7 mingw, cmake and the libie61850. In the Installation Directory I created a sub directory “mingw”, there I called: cmake ../ -G”MinGW Makefiles”.
    Calling “mingw32-make all” caused a bunch of errors like the following. Can you please tell me how to solve these issues? Mingw uses the compiler GCC4.8.1
    Thanks, Thomas
    D:\libiec61850-0.8.0\src\mms\iso_mms\client\mms_client_status.c:112:1: error: jump to label 'exit_error' [-fpermissive]
    exit_error:
    ^
    D:\libiec61850-0.8.0\src\mms\iso_mms\client\mms_client_status.c:76:14: error: from here [-fpermissive]
    goto exit_error;
    ^
    D:\libiec61850-0.8.0\src\mms\iso_mms\client\mms_client_status.c:80:10: error: crosses initialization of 'bool hasLogical
    Status'
    bool hasLogicalStatus = false;
    ^

    1. Michael Zillgith Post author

      Hi Thomas,
      The cmake script is not designed to work with mingw. Please use the provided makefiles instead. This works fine for me (with gcc 4.7). If the problem persists you can try to add
      CFLAGS+= -fpermissive
      to the file
      make/target_system.mk
      Regards,Michael

  2. Mike

    Đ¢here is no way to send one GOOSE frame which contains multiple data attributes modified (data + timestamp). Call sequence

    IedServer_lockDataModel(iedServer);
    IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_mag_f, anIn1);
    IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_t, timestamp);
    IedServer_unlockDataModel(iedServer);

    results in the transmission of two frames GOOSE.

    1. Michael Zillgith Post author

      For GOOSE every value change of a value with a trigger options is considered as a separate event. But usually a time stamp has no trigger option and therefore changing the time stamp should not trigger a GOOSE message. Also in order for the GOOSE message to contain the proper time stamp you should update the time stamp first and the float value afterwards.
      EDIT: I have seen that this is a bug in version 0.8 that GOOSE messages are also sent when no trigger option is set. This will be fixed in the next release (0.8.1).

  3. Chris

    Are there any edits that need to be made to get the “goose_subscriber” example to work with “server_example_goose”? I was able to get “goose_publisher” to work with “goose_subcriber”, but once I saw that “goose_subscriber” was meant for “goose_example_server” I reinstalled everything and can’t seem to get the two programs to see each other. I used Wireshark to verify that the server is sending out GOOSE messages, but I know so little about IEC 61850 that I’m pretty lost in terms of where to go next. Any help would be greatly appreciated.

    Thanks,
    Chris

    1. Michael Zillgith Post author

      With the new update (0.8.2) the subscriber example should work with both the goose_publisher and server_example_goose without changes.
      There are two other potential pitfalls:
      1. On Linux (and Mac OS X) the goose subscriber does not see the messages of the publisher running on the same network interface.
      2. When using a switch you should have a look at the VLAN settings of the switch. The switch may not forward messages with the wrong VLAN id.

      1. Chris

        I’m pretty new to IEC 61850 and VLANs so please forgive me if this is a silly question, but why won’t the subscriber see messages being published on the same network interface?

        1. Michael Zillgith Post author

          The linux and bsd implementations of GOOSE are using raw sockets. I am not familiar with the details of the implementation but apparently the sent messages are not copied to the input queue of the same interface. The windows implementation is using libpcap instead. Libpcap can capture any sent and received message of an interface.

  4. viking

    Hi,I have a problem:I compile server_example2 of libiec61850-0.8.3(0.8.2, 0.8.0) with mingw on win7 platform successfully,but the server_example2.exe can only be connected by iedscout installed on my own computer with ip 127.0.0.1 . I use other computers installed iedscout in the same Lan cannot connect to server_example2.exe. While I do the same things with the version 0.7.8, it works well. i don’t know the reason.

  5. viking

    I use iedscout to connect a iedserver based on serverexample2 of ver 0.8.3, sometimes I find a mistake, the error message in iedscout:

    Reading Configuration File C:\Documents and Settings\All Users\Application Data\OMICRON\IEDScout\IEDScout.ini
    Reading Servers data from file C:\Documents and Settings\All Users\Application Data\OMICRON\IEDScout\IEDScout.ini
    Servers Configuration Read, Devices = 5
    192.168.1.116: Initiate Response, status: SUCCESS
    192.168.1.116: Requesting domain global names for Server
    192.168.1.116: GetNameList response: domain global names for Server
    192.168.1.116: Requesting namedVariable names for Logical Device TEMPLATE1SE
    192.168.1.116: GetNameList response: namedVariable names for Logical Device TEMPLATE1SE
    192.168.1.116: GetNameList request failed: Transaction timed out

Comments are closed.