/echidna

Compiler and virtual machine run-time for IEC 61131-3 languages

Primary LanguageCBSD 2-Clause "Simplified" LicenseBSD-2-Clause

Codacy Badge Build Status Coverage GitHub

Overview

Echidna is a compiler and virtual machine run-time for IEC 61131-3 languages for programmable controllers. This project can be used to create programmable logic controllers for interface with industrial automation, Internet-of-Things (IoT) and I/O control applications.

Features

  • Preemptive, high performance virtual machine run-time
  • IEC 61131-3 language compiler supporting Instruction List (IL)
  • Support for all IEC 61131-3 standard functions, function blocks and configuration elements
  • API support for custom function and function block extensions
  • Comprehensive test suite

Demonstration

The following shows an echidna application running on a Raspberry Pi 1 Model B with PiFace Digital I/O board.

Dependencies

  • libev - High-performance event loop modelled after libevent
  • libconfig - C/C++ library for processing configuration files
  • protobuf-c - Protocol Buffers implementation in C
  • GNU bison - General purpose parser-generator (build dependency)
  • GNU flex - Fast lexical analyser generator (build dependency)
  • µnit - C unit testing framework (test dependency)
  • gcovr - Generate code coverage reports with gcc/gcov (test dependency)

Installation

The echidna compiler and virtual machine run-time can only be built from source. No pre-built binary packages have been issued or released for this project.

    $ git clone https://github.com/61131/echidna.git
    $ cd echidna
    $ make tests
    $ make

Following a successful build, the echidna binary can be found in the src sub-directory. This can be used to compile and execute any of the supplied IEC 61131-3 language applications that can be found in the examples sub-directory.

Links

  • IEC 61131-3:2013 Programmable controllers - Part 3: Programming languages (Edition 3.0)
  • IEC 61131-3:2003 Programmable controllers - Part 3: Programming languages (Edition 2.0)