Project home: https://bues.ch/a/awlsim Original repository at: https://git.bues.ch/git/awlsim.git https://bues.ch/a/awlsim

Michael Buesch e734dc223d core/cpu: Gracefully handle direct I/O errors 16 hours ago
awlsim e734dc223d core/cpu: Gracefully handle direct I/O errors 16 hours ago
awlsim_loader 1aa01dd38f Add AWL optimizer stub 7 months ago
awlsimhw_debug 8b9d372a9b hwmods: Add import of awlsim.common.exceptions 8 months ago
awlsimhw_dummy 8b9d372a9b hwmods: Add import of awlsim.common.exceptions 8 months ago
awlsimhw_linuxcnc 8b9d372a9b hwmods: Add import of awlsim.common.exceptions 8 months ago
awlsimhw_pixtend b964009804 hw/pixtend: Implement direct I/O 17 hours ago
awlsimhw_pyprofibus 8b9d372a9b hwmods: Add import of awlsim.common.exceptions 8 months ago
awlsimhw_rpigpio 8b9d372a9b hwmods: Add import of awlsim.common.exceptions 8 months ago
debian 259b17eb42 Bump version 4 days ago
doc a1ad2b0028 pixtend/musicplayer: Add The Free Software Song 1 week ago
examples 1825c4e8cd examples/player: Increase volume to max 4 days ago
libs b964009804 hw/pixtend: Implement direct I/O 17 hours ago
maintenance be4a33f539 win-build: Fix rmdir 6 days ago
pilc 4f209239b4 pilc: Install raspi-config 3 weeks ago
progs 5bcb65a617 Add PuTTY 1 year ago
submodules 80da6e14c3 Remove pilc-hat 3 weeks ago
tests b964009804 hw/pixtend: Implement direct I/O 17 hours ago
.gitignore 465f14daec doc: Do not generate PDF and PS docs 2 weeks ago
.gitmodules 80da6e14c3 Remove pilc-hat 3 weeks ago
COMPATIBILITY.md c4e79739bc doc: Fix typo 1 year ago
COPYING.txt 193467d27e Clarify license conditions (GPL2+) 3 years ago
MANIFEST.in 9433b1f5e7 Move setup_cython.py to maintenance directory 1 year ago
QUICK-START.md 8918ce156a doc: Move pictures to subdir 3 weeks ago
README.md 28f561c68f README: Add information about git 2 weeks ago
TODO.md 6a74cedb07 fupcompiler: Implement compare box 5 months ago
awlsim-client 2d76736f0d Move cython logic to separate awlsim_loader module 1 year ago
awlsim-gui 250f25803b Update copyright 2 years ago
awlsim-linuxcnc-hal ce4db6dcd8 awlsim-linuxcnc-hal: Add missing server shutdown 2 months ago
awlsim-proupgrade 3efb30cac1 proupgrade: Add FUP upgrade 3 months ago
awlsim-server 164c250f7f awlsim-server: Fix cython helper check 1 year ago
awlsim-server.service.in 74d8702854 service unit: Disable hash randomization and set CPU affinity 8 months ago
awlsim-symtab 21e6cad1f8 ASC: Strip white space in ASC files 8 months ago
awlsim-test 186d80580d forward optimizer settings to actual optimizer instance 3 months ago
awlsim-win.cmd bbaa7ed08d Update windows build scripts 1 year ago
awlsimhw_pyprofibus.conf a2825f0256 hw/pyprofibus/conf: Fix py2 compatibility 1 year ago
setup.py 5ff71a96a0 Add PiXtend hw modules to debian packaging 3 weeks ago

README.md

Awlsim - S7 compatible Soft-PLC

Awlsim is a free Step 7 compatible AWL/STL Soft-PLC written in Python.

The latest version of awlsim can be downloaded from the official awlsim site.

Awlsim - Soft-PLC

Awlsim is a free Step 7 compatible AWL/STL Soft-PLC written in Python. Depending on the host machine and the Python interpreter used, it achieves good performance of several thousand to millions of AWL/STL instructions per second. German and English S7 AWL/STL mnemonics are supported.

AWL/STL programs on PLCs are used for automation of industrial processes. However Awlsim is very flexible, so it can be used for other purposes beyond industrial applications, too. Awlsim aims to be compatible with the industry standard S7 software on the AWL/STL level.

Awlsim can emulate CPUs with two and four accumulator registers (S7-3xx and S7-4xx). Compatibility to S7 hardware is a task taken seriously by the awlsim project. We want to be as close as possible to the real PLC hardware with our AWL/STL code execution. For this reason awlsim ships an extensive selftest suite. Missing features and differences between awlsim and Step 7 are documented in the COMPATIBILITY documentation and TODO documentation files.

Quick start tutorial

See the quick start tutorial for a simple example on how to use Awlsim in simulator mode. Simulator mode does not require any special hardware to run.

Example project

If you don't know where to start, you can find an example project in the examples directory as EXAMPLE.awlpro. You can easily run this example in simulation mode without the need for special hardware.

Git repository

The latest development version of Awlsim can be fetched with git:

git clone https://git.bues.ch/git/awlsim.git
cd awlsim

After cloning the main repository the git submodules must also be fetched. The following helper script can be used:

./maintenance/update-submodules

Directory structure

The Awlsim Git repository and source archive awlsim-x.yz.tar.bz2 contain lots of files and directories. Here is an overview of the main files and directories and their purpose:

Main executables

User interface executables. The main user executable is awlsim-gui.

  awlsim-client             : Command line client tool.
  awlsim-gui                : Graphical user interface. This is the main user frontend.
  awlsim-linuxcnc-hal       : LinuxCNC HAL module executable.
  awlsim-proupgrade         : Command line tool to update .awlpro file formats.
  awlsim-server             : Command line server tool.
  awlsim-symtab             : Command line tool to parse symbol tables (.ASC).
  awlsim-test               : Command line tool for unit testing.

                          See tests/run.sh for execution of unit tests.

awlsim-win.cmd : Windows wrapper for awlsim-gui.

Documentation

These files and directories contain useful information about Awlsim.

  doc/                      : Main documentation.
  doc/fup/                  : Awlsim FUP language and editor documentation.
  examples/                 : Various example projects and feature demonstrations.
  COMPATIBILITY.md|html     : S7 compatibility documentation.
  COPYING.txt               : Main license.
  QUICK-START.md|html       : Quick start tutorial.
  README.md|html            : Main README document.
  TODO.md|html              : TODO list.

Main modules

The main modules implement most of Awlsim's functionality.

  awlsim/                   : Main Awlsim Python-module directory. This is where the magic happens.
  awlsim/awlcompiler        : AWL compiler.
  awlsim/awloptimizer       : AWL optimizer.
  awlsim/common             : Common libraries, modules and helper functions.
  awlsim/core               : AWL interpreter core. This is where the AWL program is executed.
  awlsim/core/instructions  : Implementation of AWL instructions.
  awlsim/core/systemblocks  : Implementation of SFCs and SFBs.
  awlsim/coreclient         : Client library to connect to coreserver.
  awlsim/coreserver         : Server library to provide AWL interpreter core access via networking.
  awlsim/fupcompiler        : FUP compiler.
  awlsim/gui                : Graphical user interface implementation (Qt).
  awlsim/library            : AWL block (FC and FB) libraries.
  awlsim/library/iec        : Implementation of IEC FCs and FBs.
  awlsim_loader/            : Import wrapper for the main Awlsim Python-module.

                          This is used to automatically load Cython optimized modules.

libs/ : External libraries used for running or testing Awlsim. progs/ : External programs used in Awlsim. submodules/ : Git submodules used for running Awlsim.

                          See  man git-submodule  for general help about Git submodules.

submodules/pyprofibus/ : PROFIBUS-DP implementation. tests/ : Unit test cases. tests/run.sh : Main interface to run unit tests. Please see --help

Hardware support modules

The hardware modules are the glue between the Awlsim core and the real world. The hardware modules are invoked before and after running the user cycle (OB 1).

  awlsimhw_debug/           : Hardware module for unit tests. Do not use in production.
  awlsimhw_dummy/           : Dummy no-operation hardware module for testing, debugging or simulation.
  awlsimhw_linuxcnc/        : LinuxCNC hardware support module.
  awlsimhw_pixtend/         : PiXtend hardware support module.
  awlsimhw_pyprofibus/      : PROFIBUS-DP hardware support module.
  awlsimhw_pyprofibus.conf  : Configuration file for awlsimhw_pyprofibus.
  awlsimhw_rpigpio/         : Raspberry Pi GPIO hardware support module.

Misc

  awlsim-server.service.in  : Systemd unit template for awlsim-server.
  debian/                   : Debian packaging support.
  maintenance/              : Maintainer scripts.
  pilc/                     : PiLC distribution build scripts.
  setup.py                  : Python package build script. This also builds the Cython modules.

FUP - Funktionsplan - Function block diagram

Awlsim supports programming in an S7-FUP like language. See the FUP documentation for more information about Awlsim's implementation of FUP.

Unit tests

The unit test suite can be run with the invocation of the command ./tests/run.sh. This will run all unit tests and show the results. Please see ./tests/run.sh --help for more options.

License / Copyright

Copyright (C) Michael Büsch / et al.

Awlsim is Open Source Free Software licensed under the GNU General Public License v2+. That means it's available in full source code and you are encouraged to improve it and contribute your changes back to the community. Awlsim is free of charge, too.