You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libiec61850/pyiec61850
Mikael Bourhis 65847e4ffe Python wrapper: update the README file
Signed-off-by: Mikael Bourhis <mikael.bourhis@smile.fr>
2 years ago
..
eventHandlers control server for python: add control action handler for operate server 3 years ago
examples Python wrapper: update CMakeLists, and rename the module to 'pyiec61850' 2 years ago
CMakeLists.txt Python wrapper: update and improve CMakeLists 2 years ago
README.md Python wrapper: update the README file 2 years ago
iec61850.i Python wrapper: update CMakeLists, and rename the module to 'pyiec61850' 2 years ago
servicePythonWrapper.hpp python service wrapper: add state management for blocking IO in python 3 years ago
test_pyiec61850.py Python wrapper: update CMakeLists, and rename the module to 'pyiec61850' 2 years ago

README.md

Python wrapper for libIEC61850

Building

Before building you should install SWIG and Python (see the 'Setup development environment on Linux' section for help).

To build the Python bindings you have to turn on the BUILD_PYTHON_BINDINGS flag in CMake from cmake-gui or in command line:

$ mkdir build && cd build
$ cmake -DBUILD_PYTHON_BINDINGS=ON ..

Then compile the library and install it:

$ make
$ sudo make install

(Eventually, update your ld cache with: sudo ldconfig)

CMake and SWIG will automatically detect your Python version and install the Python library in Python library directories.

For running the integrated tests:

$ make test

pyiec61850 library is to be imported calling:

import pyiec61850 as iec61850

Client tutorial

The Python bindings works similarly to the basic C library. However there are some differences:

  • a specific function is to be called to cast variables from one type to another
  • arguments passed by pointer are to be removed from arguments and append to the return list

For example to create a connection, call:

	con = iec61850.IedConnection_create()
	error = iec61850.IedConnection_connect(con, "localhost", 102)
	if (error == iec61850.IED_ERROR_OK):
		# Do some work
		iec61850.IedConnection_close(con)
	iec61850.IedConnection_destroy(con)

To iterate over a list of logical devices, the code becomes:

[deviceList, error] = iec61850.IedConnection_getLogicalDeviceList(con)
device = iec61850.LinkedList_getNext(deviceList)
 
while device:
	print("LD: %s" % iec61850.toCharP(device.data))
	[logicalNodes, error] = iec61850.IedConnection_getLogicalDeviceDirectory(
				con, iec61850.toCharP(device.data))
	device = iec61850.LinkedList_getNext(device)
iec61850.LinkedList_destroy(deviceList)

Reading and writing operations can be performed using this syntax:

[floatValue, error] = iec61850.IedConnection_readFloatValue(con,
	"simpleIOGenericIO/GGIO1.AnIn1.mag.f", iec61850.IEC61850_FC_MX)
err = iec61850.IedConnection_writeFloatValue(con, 
	"simpleIOGenericIO/GGIO1.AnIn1.mag.f", iec61850.IEC61850_FC_MX, 10.0)

Appendix

Setup development environment on Linux Ubuntu

[Tested on Ubuntu 20.04 LTS, Ubuntu 22.04 LTS, Ubuntu 23.10]

Here the minimum required packages for compiling libiec61850 and the Python wrapper (without TLS, SQlite, ...):

$ sudo apt-get update
$ sudo apt-get install g++ cmake swig git python3 python3-all-dev

Setup development environment on Linux Alpine

[Tested on Alpine 3.18]

Here the minimum required packages for compiling libiec61850 and the Python wrapper (without TLS, SQlite, ...):

$ apk update
$ apk add git g++ swig make cmake python3 python3-dev linux-headers