| |
The Friedrich-Alexander University Discrete Event Systems Library is a C++ library that implements data structures and algorithms for finite automata and regular languages. The library takes a control theoretic perspective as introduced by P.J. Ramadge an W.M. Wonham in the 1980's. Since then, many researchers have contributed to supervisory control theory, including extensions for hierarchical, modular and decentralized controller synthesis. The main purpose of libFAUDES is to provide a convenient basis for the software implementation of recent approaches to the control of discrete event systems.
G E T T I N G S T A R T E D
Many libFAUDES data-types and functions can be accessed via the
Non-restrictive Open Source License
libFAUDES sources are distributed for free under conditions of the GNU Lesser General Public License (LGPL). There are no restrictions to use the library in non-open source and/or commercial projects. Furthermore, libFAUDES comes with a (compile-time-) plug-in mechanism to extend the library in an organised manner. In particular, plug-in developers are invited but not forced to contribute their code to the core library. Plug-in developers may distribute their plug-in under an alternative licensing scheme that meets their requirements best.
C++ Library
libFAUDES is written in C++ with use of the C++ Standard Template Library (STL). Most of the classes provided by libFAUDES are implemented on top of STL containers for sorted sets, sorted maps, linked lists and dynamic arrays, which provide good performance while programmers can focus their efforts on efficient algorithms, rather than data management. However, some memory overhead can be observed when compared to plain C arrays.
Set Based Automaton Model
The data structure of libFAUDES Generator classes is implemented as a set based model, that resembles the definition of the five tuple automaton G = (Q, Sigma, delta, Qo, Qm). All lower level container classes EventSet, StateSet and TransSet internally hold a sorted set, where states and events are represented by integer values. Optional SymbolTable instances are used to associate symbolic names with integer values. Especially for library extensions, template Generator classes are provided to derive generator classes with customised attributes for events and states.
Lua Scripting Support
The interpreter luafaudes makes libFAUDES data types and functions available within the scripting language Lua. The wrapper code that integrates libFAUDES with Lua is automatically generated by the build-system using the tool SWIG. Thus, the additional effort required to access libFAUDES extensions from Lua is minimal; see plug-in example.
Extensible Build-System
The library provides a simple, but powerful compile-time plug-in mechanism. Developers can build their library extensions in their own directory structure and at the same time take advantage of the the libFAUDES build-system to generate source dependencies, HTML documentation and Lua-bindings. An example how to implement such a library plug-in is included; see plug-in example. Technically, plug-ins may be distributed independently from the core library and under a different license e.g. non-open source.
libFAUDES is continuously developed at the Lehrstuhl fuer Regelungstechnik of the University Erlangen-Nuernberg. Starting from a preliminary study conducted by Thomas Moor and Klaus Schmidt, the first functional version was designed and coded by Bernd Opitz' as a masters project [thesis]. As of May 2009, the following people have contributed to the development of the library:
We are committed to extend and improve libFAUDES. External contributions are highly welcome, for contact write to Klaus Schmidt or Thomas Moor.
15.11.2009 | libFAUDES 2.14e (incl. iodevice and diagnosis plug-ins) |
01.06.2009 | libFAUDES 2.13a (incl. luabindings, hiosys and multitasking plug-ins) |
10.11.2008 | libFAUDES 2.11v (incl. timed and simulator plug-ins) |
15.05.2008 | libFAUDES 2.09b (incl. observer plug-in) |
01.05.2008 | libFAUDES 2.09a (used for WODES 2008 benchmark) |
01.05.2006 | libFAUDES 1.00 (first public release) |
libFAUDES 2.14g --- 2009-12-3