Usage * Server: * inside debugging_environment: `node debugging_server.js` * Client: * inside debugging_environment: `python simulation_client.py` * Interface: * go to [localhost:9595] (http://localhost:9595) for the debugging interface * Operations (Toolbar): * Simulate: simulates the model as-fast-as-possible. * Realtime Simulate: simulates the model in (scaled) real-time (change the scale by adjusting the parameter to the right of the button). * Pause * Big Step: perform one iteration of the simulation algorithm. * Small Step: perform one of the eight phases of one iteration of the simulation algorithm. Detail on each phase is listed below. * Imminent components are shown in blue. * Selected component is shown in blue. * Output generated is visualized under the output ports. Click on a message to show its contents in the console. * Output is routed along port connections (and potentially translated). * Components that will execute their external transition function are shown in red, those that will execute their internal transition function in blue. * The next state of each transitioning component is computed. * The next time at which an internal transition function is scheduled is computed and displayed. * Structural changes are displayed. * Reset the simulation to its initial state. Also resets the visualization. * Add a Breakpoint with four parameters: * The name of the breakpoint. * A function, returning `True` (simulation halts) or `False` (simulation does not halt). The parameter `t` is an array of two elements representing the current time and phase, `m` is the model being simulated, and `tr` is a set of models that just transitioned to a new state. * Enabled allows to specify whether the breakpoint is enabled or not. * Disable on Trigger allows to specify whether the breakpoint is to be disabled once it has been triggered. * Operations (Canvas Elements): * Instances: * Left-clicking an instance will log its current state in the console. * Right-clicking an instance allows to change one of its state variables with a god event. * Left-clicking an input port allows to inject a message on that port at a specified time. * Breakpoints: * Clicking the trash bin icon next to the breakpoint's name will delete it. * Clicking the breakpoint will enable or disable it. * Triggered breakpoints are highlighted in red. * Information: * Instances: * Names of coupled DEVS models are displayed in italics. * Input ports are green, output ports are purple. * The time at which the next internal transition function is scheduled is shown in the top right corner. * Hovering over an instance will display its current state. * Hovering over a port of an instance shows its name and connections. * The simulation time is displayed, as well as the phase (in case multiple transitions are executed on the same simulated time instance). * go to [localhost:9696] (http://localhost:9696) for the visualization * Left-clicking a particle sends a realtime interrupt to the simulation (which selects that particle). * Pressing the delete button sends a realtime interrupt to the simulation (deleting all selected particles). * Right-clicking a particle will display the state of that particle in the debugging interface. Models and Source Files * User Model: `particle_interaction.py` * User Visualization: * Statechart model: `javascript_models/particle_interaction_vis_js_instrumented.xml` * Webpage: `visualization_server.html` * Simulator: * Statechart model: `debugging_environment/pypdevs/sccd.xml` * Simulation client: `debugging_environment/simulation_client.py` * Communication Layer: `debugging_server.js`