Abstract syntax

ProDEVS defines a language which specializes state diagram for DEVS atomic component specification. Atomic components can be coupled via ports for building a modular and hierarchical model. ProDEVS implements an event-driven simulation engine according to the algorithms given by DEVS abstract simulators. This idea is motivated by the trend for using high-level specification language rather than code for dynamic system design.

A phase is a specific parameter that represents a period in the life of the atomic component where it is expected some events to occur (input event or time event). It has a set outgoing of transitions departing from this phase, a set incoming of transitions entering this phase and a timeAdvance attribute to specify the time in which the system as to stay before triggering the output and the internal transition function (a time advance value can also be given by a variable of the component).

A transition is an oriented relationship between a source phase and a target phase. It has a trigger which specifies an input that may fire an external transition in case of external event or an output in case of time event (time elapsed in a phase is reached). It as a guard which provides a fine-grained control over the firing of the transition using boolean expression. The guard is evaluated when an event occurrence, external event or time event, is dispatched by the state diagram. If the guard is true at that time, the transition may be enabled, otherwise, it is disabled. It finally has an action which specifies an optional assignement to be performed onto property when the transition fires.

As a result of coupling of concurrent components, there may be multiple components with simultaneous events. Thus, there may be multiple components which are candidates for the next internal state transition. Such components are called imminents in the DEVS terminology. ProDEVS implements two kinds of algorithm, classic and parallel. In classic DEVS, a Select function is added at the coupled component that allows to select the component to execute among a set
of imminent components. In parallel DEVS, every imminent components are executed. A component may receive a bag of inputs. A confluent transition function is added to refine a transition in case of simultaneous time event and external event.