Generate production quality code from state diagrams created with Enterprise Architect
SinelaboreRT generates readable and maintainable code from hierarchical UML state machines. With its unique features and the C code generator the tool covers well the requirements of embedded real-time and low power application developers. With its C++, Python and Java backend it is also a perfect tool for developers of server or desktop applications.
- Automated robustness checks before code generation
- No run-time environment needed
- Can be used with any CPU and with or without OS/RTOS
- Code generation especially for embedded real-time and high availability systems.
- Fits well in different system designs (foreground/background, RTOS-based …)
- No gap between design and code
- Support for automatic test-case generation
- Simulation in interactive or batch mode.
- Optionally generating trace code
- Generated code creates no trouble when using static code checkers
Watch the code generator in action
The following example shows how the code generator works by means of a simple microwave oven.
- Cooking time can be adjusted from 0s and 60s.
- Cooking starts if the cooking time is > 0s and the door is closed.
- If the door is opened during cooking the microwave generator is switched off. The cooking time stops.
- Cooking continuous if the cooking time is not over and the door is closed again
- Cooking stops if the cooking time is over or the time is adjusted to zero.
- Cooking time and power can be changed at any time.
The sate machine below shows a possible solution.
To generate for example C code just export your model to XMI and call the code generator as follows:
java -jar codegen.jar -p EA -t "Model:Class Model:first_example_step3" -o oven first_example_step3.xml
After checking the model against a set of well-formedness rules (e.g. no double state names) the complete state machine code is generated.
Look into the generated files: oven.c oven.h oven_ext.h
In the examples folder you will find the complete code ready to be tested and expanded by you.
Supported State Machine Elements
The code-generator supports a subset of the design elements provided by Enterprise Architect. The supported elements are:
- Hierarchical states
- (Signal-)Events with event name, guard and action – Initial and final pseudo-states
- History states (deep, flat)
- Sub-machine states on various levels
- Entry and exit pseudo-states
- Regions on various levels
Find out more about the code generator
- How sinelabore supports model based testing of state diagrams
- How to interactively simulate your state diagram and generating trace code
- Read section “Drawing State-Charts with Enterprise Architect” in the manual
- How easy it is to add attributes and operations to the stateful class like shown below. Operations are mapped to C-functions. Attributes to members of the instance data of the state machine. This allows to add entry/exit code functions or other helper functions. Even the body code can be easily added with EA if you want. Presently attributes and operations are only generated in the C-backend.
Download the demo version and try it right now. It includes many other examples.
Enterprise Architect HowTo
Enterprise Architect HowTo
Below some tips and tricks are listed that simplify the state-chart creation using Enterprise Architect. If you have further hints let us know and we add them here. For a short intro on on how to use EA with the codegen go on reading here.
Where to put the events to:
States should be put “below” the class containing the state diagram. See next figure.
How to define the path to the state machine:
Since version 9.0 of Enterprise architect it looks like that always a view package is required. This package must appear in the path you specify on the codegen command line. In the figure above the path to the state machine is -t “Model:test:testclass”
I always get the error message ‘Can't find path element ….’. But I’m sure the path is correct:
Most probably you have not selected to root element (e.g. Model in the figure above) before exporting the XMI file. Select the root model element and then export to XMI.
How to specify multiple lines entry/exit/do action code:
So far there were two ways. The codegen took the name of the action as code. To specify multiple lines it was necessary to specify several actions. The other option was to attach a comment to a state and define the code there.
Now with EA 9.2 it is possible to specify multiple lines of action code in the behavior field. The name of the action is not used anymore as code line if code is found in the behavior field. The strange thing is that EA allows to define initial code which is unfortunately not exported in the normal XMI state tree. So it can't be used right now. In the example below two lines of entry code were added to S1.
Where do I find the “export to XMI” dialog?
In recent versions of EA the export to XMI is available under
Publish → Export XMI