Sequence Diagram Generation¶
Moddy can generate sequence diagrams to show the communication between Moddy parts, including their timing information.
To generate a sequence diagrams, your code must call
after the simulation has finished.
The parameters provided to
gen_interactive_sequence_diagram() define the appearance of the sequence diagram.
Moddy generates interactive diagrams, that can be opened in a browser and the time scale can be dynamically adjusted to see less or more details.
The static diagram generator has been removed in moddy 2.x
Elements of a sequence diagram¶
Details of a Sequence Diagram¶
you can specify
So, if you want to send the HTML file to someone who has no moddy installation, use
Current Browser support:
Microsoft Edge: OK
Safari IOS: OK
Internet Explorer (up to IE 11): Does not work
Other browsers not tested
This is a simple example:
moddy.gen_interactive_sequence_diagram( sim=simu, file_name="myExample.html", show_parts_list=["Bob", "Joe"], time_per_div = 1.0)
A more complex case:
moddy.gen_interactive_sequence_diagram( sim=simu, file_name="2_sergw.html", title="Serial Gateway Demo", show_parts_list=[client, gateway.rx_thread, gateway.tx_thread, ser_dev], excluded_element_List=['allTimers'], time_per_div = 50*US, pix_per_div = 30)
Here, no timer expiration events are shown, the time division is set to 50|micro|s and each time division occupies 30 pixels.
Using the Interactive Viewer¶
Please try the following demo:
The major interactive functions of the viewer are:
A time scale factor of 0.01 … 100, relative to the initial time resolution is supported. To change the current time scale
Use +/- keys on keyboard
Use the Time Scale Slider
Hold the shift key and move mouse up and down
Adaption of part spacing
Drag one of the part boxes (“CarInfoSys” in the example above) and move it horizontally. The parts on the right automatically follow.
SHIFT+Drag one of the part boxes (but not the first one) and move it horizontally. The distances between all parts are changed accordingly.
Can be used as a ruler or to measure a time delta.
Two time markers are supported: A green and a red one.
A mouse click somewhere in the diagram activates the green time marker.
A CTRL+mouse click somewhere in the diagram activates the red time marker.
If both time markers are activated, the delta time between the two time markers is displayed in the title bar.
Structure Graph Generation¶
Moddy can also generate files to show the static structure of the model. Very useful to document the model and to explain the model to others.
An example structure graph:
The parts hierarchy is shown: For example, EcDev1 contains two sub-parts: “uC” and “FPGA”.
The ports of a part are shown: For example, EcDev1 has a “ucPort” and an “ecPort”.
The port bindings are shown:
The thin, directed arrows show unidirectional bindings, from an output port to an input port.
The thick, undirected arrows show bidirectional bindings between IO-Ports.
The message type transferred between ports are shown (e.g. EcMsg): Moddy learns during the simulation which message types (python classes) are transferred.
The relation between schedulers and parts are shown. In the example above, “schedCp” controls “App”. In the example below, if the scheduler “sched” controls multiple threads, the relation is shown, including the thread priorities. (WARNING: This feature does not work under all circumstances)
Moddy uses the GraphViz command line tool
dot to generate the structure graphs, so GraphViz has to be installed.
The output format is fixed to SVG.
To generate a structure, just call
gen_dot_structure_graph() after running the simulation.
(You can also run it before the simulation, but then no message types will be shown)
There is currently no way to influence the appearance of the structure graph.
Trace Table Generation¶
Moddy can generate a
CSV (comma separated value) file containing all simulator events.
This file can be viewed with a table calculation program such as MS Excel.
To generate a trace table, call
gen_trace_table() after running the simulation:
moddyGenerateTraceTable(simu, file_name='1_hello.csv', time_unit=1.0)
Where time_unit specifies the time unit for all time stamps in table (‘s’, ‘ms’, ‘us’, ‘ns’).
Explanation to the events:
>MSG: A message transfer starts.
>MSG(Q): A message transfer starts. The message was delayed because another message was blocking the output port. The requestTime tells you when the model requested the message send
<MSG: Message arrived at input port: Note that “Object” specifies the part that contains the output port
T-START: A timer has been started
T-STOP: A timer has been stopped
T-RESTA: A timer was restarted
T-EXP: A timer was expired
ANN: Model added an annotation
ASSFAIL: Assertion failure
STA: Part changed its status (via setStatusIndicator)
State Machine Graph Generation¶
Moddy can also generate graphs to show the finite state machines of the model.
An example state machine graph (from tutorial
The “Apps” and “Vol” boxes are sub-states of the “normal_op” state.
To generate a state machine graph, just call
gen_fsm_graph() after state machine instantiation.
moddy.gen_fsm_graph( fsm=cis.fsm, file_name='3_carinfo_fsm.svg')
There is currently no way to influence the appearance of the graph.