Skip to content
OpenPLC Runtime version 3
C++ JavaScript Shell Yacc C Java Other
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
documentation/EtherNet-IP Included EtherNet/IP documentation Sep 16, 2019
utils Disabled st_optimizer until I get it fixed Jun 27, 2019
webserver Add include for "enipStruct.h" Dec 2, 2019
.gitignore Merge branch 'master' into fix_defunct Apr 25, 2019
.gitlab-ci.yml add and doxygen Feb 6, 2019
.travis.yml GITHUB_TOKEN not defined on main repo Feb 7, 2019
Dockerfile move installation into Feb 1, 2019 Update Feb 6, 2019
appveyor.yml Fix "sudo: command not found" error on installation Nov 5, 2019
doxygen.conf add and doxygen Feb 6, 2019 Added installer log support Jun 6, 2019
requirements.txt Added pymodbus Jun 17, 2019

OpenPLC Runtime version 3

Build Status Build status

OpenPLC is an open-source Programmable Logic Controller that is based on easy to use software. Our focus is to provide a low cost industrial solution for automation and research. OpenPLC has been used in many research papers as a framework for industrial cyber security research, given that it is the only controller to provide the entire source code. The OpenPLC Project consists of three sub-projects:

  1. Runtime
  2. Programming editor
  3. HMI builder


git clone
cd OpenPLC_v3
./ [platform]

Where [platform] can be:

win - Install OpenPLC on Windows over Cygwin

linux - Install OpenPLC on a Debian-based Linux distribution

docker - Used by the Dockerfile (i.e. doesn't invoke sudo)

rpi - Install OpenPLC on a Raspberry Pi

custom - Skip all specific package installation and tries to install OpenPLC assuming your system already has all dependencies met. This option can be useful if you're trying to install OpenPLC on an unsuported Linux platform or had manually installed all the dependency packages before.

Building, Installing and Running inside Docker

Make sure docker is installed


# instead of running as stated above, run:
docker build -t openplc:v3 .


Devices can be passed to the docker daemon using the -v flag (e.g. -v /dev/ttyACM0:/dev/ttyACM0)

docker run -it --rm --privileged -p 8080:8080 openplc:v3
You can’t perform that action at this time.