Grafchart is a language for supervisory level sequence control and procedure handling that has been developed at the department since 1991. Grafchart is based on ideas from Grafcet/Sequential Function Charts, Petri nets, Statecharts, and object-oriented programming.

The original implementation of Grafchart had the same name and was developed in G2 from Gensym Corporation. Using this platform Grafchart was used for batch recipe control, diagnosis of mode-changning processes, alarm filtering, implementation of operator decision support systems, and implementation of robot cells.

JGrafchart JGrafchart

In 2001 an open implementation of Grafchart was made in Java. It is called JGrafchart and supports the following features:

  • Steps and transitions with parallel and alternative paths
  • Hierarchically structured Workspaces
  • Procedures for code reuse
  • Macro steps and Procedure Steps with exception handling
  • Process Steps for asynchronous Procedure execution
  • Digital I/O, analog I/O, socket-based I/O, XML-based I/O, DPWS I/O, OPC UA I/O, and LabComm I/O
  • Simple and complex variables
  • Interactive graphical elements
  • XML-based storage on file
  • Printing as vector graphics

JGrafchart is used in our laboratory exercises on logical sequence control and batch control as well as in several research projects, for example, Grafchart for Industrial Automation and PRACE. It has also been used within the EU/GROWTH project CHEM for control in process industry, the EU FR7 project ROSETTA for robotic assembly, and several master's theses, for example, for modeling or code generation. DFKI has used it to implement the coordination of several demonstrators with real industrial equipment. Finally, there are a few cases where it is used for live industrial control, for example, myvision MANUFACTO (video on YouTube) (description).

JGrafchart is available for download as freeware. The included documentation for the latest version is also available online.


The Batch Heating Process is a process where a tank is to be filled up to a certain level and heated to a certain temperature. Heating is only allowed when the level is above a certain threshold. Once the correct level and temperature are reached, the tank shall be emptied. An implementation of this in JGrafchart can be seen in the following screenshot:


The following people have contributed to JGrafchart: