CIP-Tool

CIP-Tool (Communicating Interacting Processes) is a software tool for the modelling and implementation of event-driven applications. It is especially relevant for the development of software components of embedded systems.
History.
The underlying mathematical formalisms of CIP were first proposed by the physicist, Prof. Dr. Hugo Fierz. The tool was subsequently developed at the Swiss Federal Institute of Technology (Zurich) in a series of research projects during the 1990s. Development and distribution has since been transferred to a commercially operating spin-off company, CIP-Tool, based in Solothurn, Switzerland.
CIP Tool has been over taken by Actifsource GmbH in summer 2011. Actifsource has integrated the CIP Tool into the Actifsource workbench. 
Methodology.
The CIP-model is basically a finite state machine, or more precisely, an extended finite state machine (processes can store and modify variables and can use these to enable or disable transitions).
In CIP, a desired system behaviour is broken down into distinct "processes", each of which is a set of "states" interconnected by "transitions". One state in every process is tagged as "active" state. This active status can be transferred to another state through the execution of a transition. Such transitions are triggered by "events" (from external sources, e.g. sensors) or "in-pulses" (from other processes). Transitions can in turn send one or several "out-pulses" (to other processes) or "actions" (to external receivers, e.g. effectors).
The CIP-model is sometimes confused with petri nets. This may be because to beginners, the notation looks similar. The similarities should not be over-stressed, however. For example, CIP allows only (and exactly) one active state per process and processes are neither started nor terminated during run-time.
Code generation.
CIP-Tool permits models to be automatically converted to executable code. This greatly facilitates testing, documentation and final implementation. Currently the languages C/C++ and Java are supported as output formats.