Page History
Info | ||
---|---|---|
| ||
This page is part of the SCCharts Editor 0.13 RC1 documentation. This page is still under construction. We are still in the process of creating the release candidate. Please excuse any missing or incomplete entry. We apologize for any inconvenience. |
Table of Contents |
---|
SCCharts
Each SCChart starts with the keyword scchart followed by an ID. A ID can be any alpha-numerical combination, but must start with an alphabetical character or an underscore (a single underscore is prohibited). However, underscores are used to identify auto-generated constructs, so the modeler should not use them as prefix.
Simple States
One of the basic constructs of SCCharts is a simple state. A simple state does not have any inner behavior and can be connected via transitions to other states.
Initial State
To tell the program where to start, a state can be marked as initial. Exactly one state (per concurrent region, see concurrency) must be marked as initial.
Transitions
Note | ||
---|---|---|
| ||
IMPORTANT: We are testing different syntax variations for transitions in the release candidate. Hence, some example may differ slightly from each other. Feel free to experiment. Please provide us with feedback. We will streamline the syntax before the final release. Nonetheless, at the moment we prefer the following syntax as default for transitions. [immediate] [if condition] [do effect[; effect]*] (go | abort | join) to targetstate Please test it. We appreciate it. |
Transitions connect states. There are different kinds of Transitions, but we will restrict ourselves to the two basic types for now. (See below for more complex transitions.)
Delayed Transitions
Immediate Transitions
Explicit Delay Behavior
Final State
A state can also be marked as final. A final state marks the end of a thread. If a final state is reached on root level, the program terminates.
Code Block | ||||
---|---|---|---|---|
| ||||
scchart Simple { initial state A go to B state B go to C state C go to A immediate } |
Code Block | ||||
---|---|---|---|---|
| ||||
scchart Simple { initial state A go to B auto state B go to C delayed final state C } |
Declarations & Variables
Each scope (for now just the SCChart) can have a list of declarations. The SCChart code on the right gives an example. A declaration starts with the type, followed by a list of variable identifier. Each variables can be initialized with a specific value.
Types
The following native types are supported: bool, int, double, string, signal (see below)
Additionally, you can mark a declaration as extern and give it a string that will be used in the serialization of the final code, e.g., the name of a host type. You can then add variables as before.
Arrays
If you add brackets to a variable and specify cardinalities, you declare an array.
Constants
Declarations can be marked as constant, meaning that each occurrence is then replaced by the initialization because the variable is not allowed to be changed.
Code Block | ||||
---|---|---|---|---|
| ||||
scchart Variables { input bool second output bool beep int i, j, k int arr[10] bool alarm = false const bool ON = 1 extern "rObj" rail initial state A go to B state B } |
Tuples
You can assign a whole tuple at once to an array.
Code Block | ||||
---|---|---|---|---|
| ||||
scchart tuples { output int arr[5] = {1, 2, 3, 4, 5} initial state init { entry do arr = {6, 7, 8, 9, 10} } } |
To assign only certain values of an array, you can also use the ignore value placeholder. Consult the expression manual for further information.
Code Block | ||||
---|---|---|---|---|
| ||||
scchart tuples { const int A = 1 output int arr[3][2] = {{A,0}, {2,0}, {3,0}} initial state init --> init do arr = {{arr[0] + 1, _}, _, {arr[2] + 1, _}} } |
This would, for example, result in c code assignments as displayed on the right.
Code Block | ||||
---|---|---|---|---|
| ||||
void logic(TickData* d) { d->_g0 = d->_GO; if (d->_g0) { d->arr[0][0] = 1; d->arr[0][1] = 0; d->arr[1][0] = 2; d->arr[1][1] = 0; d->arr[2][0] = 3; d->arr[2][1] = 0; } d->_g2 = d->_pg1; if (d->_g2) { d->arr[0][0] = d->arr[0] + 1; d->arr[2][0] = d->arr[2] + 1; } d->_g1 = d->_g0 || d->_g2; } |
Comments
You can simply use JavaDoc-style comments to comment you SCChart. The comments will appear in the synthesized diagram as comment boxes. You can toggle these boxes in your sidebar.
Additionally, for documentation reason, you can annotate different elements to give them a user-defined style. E.g. colorize a state or comment box for visual effect. Use html-like color codes for different colors. Please read more on annotations in the section below.
Code Block | ||||
---|---|---|---|---|
| ||||
/** * Getting there! */ scchart Root { /** Test */ input bool second output bool speaker /** * Main region! */ region main: /** * The initial state * This is entered as soon as the program starts. */ @foreground f0f024 @background ffffcc @backgroundTarget fff9ba initial state Superstate { initial state R1 } /** Transition */ /** Transition 2 */ join to S /** * The final state! * @foreground f00 * @background a00 */ final state S } |
Trigger & Effects
hey can be guarded by a trigger that determines when this transition is enabled and they can have effects that are executed whenever this transition becomes active.
Overview
Here you can see an SCCharts graphical notation overview.