Robot Cell Simulator – Cell simulation
« Programs and paths | Contents | Station PLC (SPS) and SmartPad »
Run on all robotsHow the robots runFanuc programsOptions of the runCollision riskLive 3D collision checkInterlock signalsProgram flowPOT process timesMarkers and FB PSPSMotion planner Motion timesSimulation filePlugin settingsCommand APIHow realistic is the simulation?

Run on all robots Simulation

The Simulation tab starts the same program (e.g. Folge 12) on all robots of the cell at the same time. Loops repeats the run, Stop on breakpoints uses the breakpoints of the programs (see Program flow), Stop all stops all robots. The same command is in Simulation → Run program on all robots....

Program: type Folge or UP and the number (1..9999). Loops: 1..999. With the SPS program the field is locked and shows the cycles of the Start block of the SPS program. During the run the loop counter next to it shows n / m (the robot that is furthest behind).

Speed: 0..400 % of real time, with the slider, the field and the buttons 25 / 50 / 100 / 200 / 400 %. 0 % = pause. The button Pause sets the speed to 0: the robots, the stops at commands and the clock of the station stand. Resume (the same button) continues with the speed before the pause.

Start in two phases: the robots first prepare the run (the motion planner computes the path of the first loop and the start of the next ones), the simulation clock stands meanwhile; when all robots are ready, the clock starts and all robots move together (console: All robots are ready ... preparation x s, not counted in the simulation time; SmartPad: Preparing the motion / Ready).

Preparation in the background: after loading a study or a simulation, changing the SPS program or the program of this tab, the programs the robots will run (Folge and the UP called from it) are parsed in the background, one file after the other, while the scene stays usable (console: Preparing the simulation ..., a small window with a progress bar in the corner). The start then takes them from the memory (console: Robots prepared in x s: n program(s) from the memory, m parsed now); a program changed in the SmartPad or in the editor is parsed again, macros at the start.

Up to 12 robots at the same time; every robot runs in its own thread, so the computer needs at least robots + 1 logical processors – see Running, processor and accuracy.

The green SPS button runs the cell with the simulated station PLC: Folgenstart, releases of the station and cycles come from the SPS program – see Station PLC (SPS) and SmartPad.

Fast Run – under the SPS button a row of buttons that start a given program on all robots at once, with a given number of loops and without the SPS program (the SPS button and the fields of the tab stay unchanged; the next Run on all robots works with the SPS again). Typical use: Folge 125 to bring all robots to HOME before the simulation with the SPS (after loading a cell the robots are never in HOME). The buttons are defined in template/RCS/fast_run.xml of DReS, one element per button:

<FastRun version="1">
  <Button program="folge123" loops="1"/>
  <Button program="folge125" loops="1" text="HOME" tooltip="All robots to HOME"/>
</FastRun>

program – Folge or UP with its number (folge125, Folge 125, up42), loops – number of loops (default 1), text / tooltip – optional. The row wraps to the next line when the buttons do not fit; without buttons it is hidden. A changed file is read again at once; right click on the row: open the file / reload the buttons. The options of the tab (interlock signals, program rules, speed) apply as for Run on all robots. Fast Run always runs without the SPS program, also when the SPS button is on; Stop on breakpoints applies to it.

All robots of the cell during the run of Folge 81

End of the simulation: when a station simulation ends, the message Simulation finished says The simulation of the station has ended. The window is not modal – the scene, the console and the other windows stay usable while it is open. With Do not show this message again (until DReS is started again) it does not come again in this session; after the next start of DReS it is shown again. When the run found request races, the window Request race found comes instead (see Request races: proposal and simulation of both orders). Only one window Simulation finished is open at a time: when the next run ends while it is still open, its text is replaced (before, two or three windows could be open at once).

Runs started through the command API (since 2026-10-25): a run, a robustness test or a simulation of both orders that a script or the AI agent started – or stopped – through the command API ends without the windows Simulation finished, Collision risk in the simulation, Request races, Request race found and the result of the simulation of both orders; their text is in the console and in the API (status.lastRunMessages, run_data). Before, 50 runs and stops through the API left about 90 windows. A simulation file loaded through the API does not open Load simulation – Not restored either. Runs started with the buttons of the window show the windows as before. The pause at a collision risk (option Stop the simulation at a collision risk) opens its window with Continue also for a run of the API.

Closing DReS during a simulation (since 2026-10-25): DReS asks only once – the window of the simulator asks The simulation is running. Do you really want to stop the simulation? (default No; with No DReS stays open with its licenses). The question Plugin important result of DReS comes only when the window of the simulator is closed (hidden) and a simulation or a robustness test still runs. When DReS is closed while a file is loaded, the closing waits until the load has finished (message in the console) and DReS then closes itself. The clock of the simulation (simTime in the API) stands while no simulation runs, also after the opening of the simulator.

Message Simulation finished at the end of a station simulation, with the check box that hides it until DReS is started again

How the robots run in the simulation

Fanuc programs in the simulation

A Fanuc robot (VW standard, see Fanuc robots) runs in the simulation like a KUKA robot: when the archive is loaded, its .ls programs are translated into substitute KUKA programs in the cache folder, and these run with the same options, SPS program, interlocks and reports. The .ls files of the archive are not changed.

FanucIn the simulation
FOLGEnnn, UPnnn, MAKROnnnFolge n, UP n, Makro n (e.g. FOLGE31 → Folge 31, UP031 → UP 31)
motion programs MOTNnnnsubprograms with a free UP number (the console lists the numbers)
DO[n], DI[n], F[n], M[n]output A n, input E n, flag F n, marker M n
DO[n]=PULSEPuls
TC_ONLINE (...)motion condition: the first one as FB ONL, the following ones as FB PSPS (see FB PSPS)
WAIT (condition) / WAIT x(sec)WARTE BIS / WARTE ZEIT
TIMER[n]=RESET, TIMER[n]=START, TIMER[n]=STOP, ... (TIMER[m])program timers of the VW standard (reset, start, stop, read), counted by the simulation clock (since 2026-10-21)
WAIT (signal OR TIMER[m]>=x)WARTE BIS signal – the robot waits for the signal; the time limit is not simulated (warning in the console of the load)
RTCP motion to a point without its RTCP position (RX..RR)simulated to the exact end point (warning in the console of the load); since 2026-10-21
CALL UPnnn, IF (condition),CALL UPnnnUP call (with the condition)
CALL MAKROnnnSPSMAKRO n; MAKRO020 activates the interlock requests
interlocksas with KUKA: request DO[81..96], release DO[41..56], permission DI[41..56] in TC_ONLINE
MAKRO050 / MAKRO057marker macros: initialise the markers at the program start
J ... % / L ... mm/secPTP % / LIN mm/s (cm/min, mm/min and inch/min converted; max_speed = 2000 mm/s)
CNT, ACCapproximation, acceleration
... Offset,PR[n]the point shifted by PR[n] in the user frame (UF) of the motion – when PR[n] has a Cartesian value in the backup (POSREG.VA)
... Tool_Offset,PR[n]the point shifted by PR[n] in the tool frame (UT) – when PR[n] has a Cartesian value in POSREG.VA

Not simulated – always reported in the console of the load as an error or a note, never left out silently:

Options of the run Simulation

Before the run. The collision check of the run needs up-to-date Work Zones. When they are missing or old, the simulator asks: Calculate and run or Run without collision check (the command API calculates them; since 2026-10-25 the calculation runs in the background, the window responds and Cancel works, see Work Zones). With Respect interlock signals an incomplete interlock map asks: Show the map or Run anyway.

During the run the options of the tab are locked. These work also while the simulation runs: the axis values in the console, the collision map, the state lamp, Console messages..., Collision risks..., the speed, Pause and Continue (Quitt).

Collision risk in the run Work Zones

Stop the simulation at a collision risk (on by default): when a robot moves without interlock into an area shared with a partner while the partner is in this area, the simulation pauses at once. The simulator takes a screenshot of the scene, writes the axes of all robots and opens the window of the collision risks. Off: the run goes on, the risks are written to the console and to the report.

The button Collision risks... opens this window, also during the run. In the window: Ignore (the case does not pause the simulation any more), robots to the points, programs in the editor, save as HTML / PDF. Neighbouring points of the same place are one case by default (see Plugin settings > Collision report). The small buttons in the table (robots to the points, program in the editor) keep their size, also in the last column. Where the risk is in the cell is shown by the places of collisions in the scene.

Robots to the points (only when the simulation is stopped or paused): for a collision risk from the work zones both robots move to the points of their programs. For a contact of the 3D models (COLLISION (3D models)) both robots move to their axes at the first place of contact of the row (the axes are saved by the Live 3D check). One row can hold several places of contact (see Places of collisions): every further click of the button moves the robots to the next place of the row, after the last one it starts again with the first. The console names both robots, the place and the simulation time, e.g. contact 2 of 6 of this row (7.34 s); the red sphere with the same time lies on the touching parts. The button of a 3D row with more than one place shows the number of places (e.g. 6), after a click the place shown (e.g. 2/6).

For a row of the work zones (violet) the simulator also checks the 3D models once in this pose of the program points (the same models as Live 3D: robot links, CAD tool model with grippers / guns, fixtures, dummy tool). If they touch, an orange sphere marks the place (label 3D contact in the program points R2 / R1) and the console warns: in the run the robots were not there at the same time, but another timing (speed, waiting, SPS) makes it a real collision – keep the interlock until the area is free. Otherwise the console writes that the models do not touch and the closest distance with the parts. The first check takes a few seconds (the models are read), later ones are immediate. The orange sphere disappears at the next Robots to the points or at the start of the simulation.

A blue line below the table says what the 3D view shows after the last click, e.g. Shown: contact 2 of 6 at 7.30 s - R2 to UP142/P2, R1 to UP142/P2 (the red sphere with this time) or Shown: program points - ... with the result of the check of the pose. The tooltips of the columns Point / Partner point explain the notation: P2-P5 = the range of points P2 to P5, P2, P12 = the two points P2 and P12.

API: {"cmd":"collision_case","key":"...","action":"points"} (a repeated call = the next contact), the answer contains point ([x, y, z] mm, the sphere of the shown contact), place / places (3D rows) and shown (the text of the blue line); for a work zone row the result of the check of the pose comes about 0.2–6 s later in the console.

Live 3D collision check Collision 3D

The option Live 3D collision check checks the 3D models during the simulation of the station (Run on all robots, Fast Run, robustness test, run from the command API – not the run of a single robot). At every check the simulator compares:

FieldDefaultRangeMeaning
cell30 mm10..100 mmaccuracy of the check: smaller = more exact and slower
dummy tool body R60 mm10..300 mmradius of the body from the flange to the TCP of a dummy tool
distance up to200 mm50..1000 mmthe smallest distance of each pair of robots is measured up to this value. At the end of the simulation the console shows the closest approach of every pair with the parts: base / carriage, link A1..A6, tool model, dummy tool, body of the dummy tool from the flange to the TCP
warn below30 mm (new settings; 0 = off)0..500 mmsafety distance: a closer approach without contact goes to the window Collision risks as 3D proximity (console: PROXIMITY (3D models)); the simulation does not pause
contact up to5 mm0..50 mmcontact threshold: the closest points of the two models at most this far apart = COLLISION (3D models). Farther = 3D proximity, also when the models share a cell of the check (see below)
check in its own threadonthe check runs in its own thread, independent of drawing the scene, windows and SmartPads. Off: the check runs in the GUI thread – only for comparisons
use several processor cores for one checkonthe points of the robots and the pairs of robots of one check are calculated at the same time on half of the logical processors (2..8); the results are the same, a check takes less than half of the time
fixed step: the simulation clock waits for every checkonthe robots are checked exactly every step of simulation time: the clock of the station does not go past the next step until all robots are checked there. The result does not depend on the simulation speed and on the computer – a slow computer only makes the run longer. Off: a check whenever the computer manages it (at 400 % about every 0.2–0.3 s of simulation time)
step20 ms10..500 msstep of the fixed check in simulation time (see the recommendation below)
redraw the scene16 ms16..1000 mshow often the moving robots are drawn: less often = less work for the processor and the graphics card (long tests over night); the times and the checks do not change

The fields of the check can be changed only while Live 3D collision check is on; fixed step needs check in its own thread, and step needs fixed step.

Collision and proximity. Every check measures the smallest distance between the surface points of the two models (the points lie about 0.6–0.7 × cell apart, 18–21 mm at 30 mm). The result is one of two kinds:

KindWhenReport
3D collision (contact)closest points at most contact up to (default 5 mm)console COLLISION (3D models) … closest points x mm (error), red sphere, the simulation pauses like at a collision risk (not in the robustness test – the cases go to its report). Finds real contacts also in areas protected by interlocks.
3D proximityno contact: the models share a cell of the check, or they come closer than warn belowconsole PROXIMITY (3D models) … closest points x mm (warning), smaller yellow sphere, no pause; column Kind of the window 3D proximity (x mm)

Why: a common cell of 30 mm with the closest points 10–26 mm apart depends on the moment of the check – in a test (2026-10-25) the same pass of the guns was reported mostly as a proximity, in single runs as a contact, with every format of the tool models (see Tool model formats). Real collisions show 0–3 mm. When a proximity of the same two robots in the same points becomes a contact during the run, the case is a collision (one row; the occurrences of the proximity are counted with it).

Older simulation files and agents. A simulation file without live3dContact uses 5 mm; its live3dWarn stays as saved (often 0 = off – then only the common cells without contact are proximities). The borderline cases that were reported as COLLISION before 2026-10-25 are now proximities: they do not pause the simulation and are warnings in Check interlocks. Close to the old behaviour: contact up to 50 mm (then every approach below 50 mm is a collision, also without a common cell).

Places of collisions (spheres)

After a run with Live 3D collision check and / or the check of the work zones, the 3D scene shows a sphere at every place where the check found a problem. The menu View > Show the places of collisions switches them on and off (on by default, kept in the settings). A work zone case has one sphere. A 3D contact case keeps up to 4 places of contact that are more than 400 mm apart (e.g. the guns touch first, later the arm touches the forearm); each place has its own red sphere, time and robot axes. The label above a sphere names the robot, the partner and the simulation time of that place.

View > Show the labels of the collision places (on by default, kept in the settings) switches the texts above the spheres; off = only the spheres, useful when many labels hide the robots. Both switches are also in the context menu of the 3D view. API: {"cmd":"view","collisionPlaceLabels":false}.

SphereLabelMeaning
red
(default #ff0000, radius 60 mm)
3D contact R2 / R1  7.1 s the 3D models (robot links, tool CAD model or dummy tool) really touched at this time in the run. The sphere is in the middle of the closest points of both models at the deepest contact of this place – it lies on the touching parts.
yellow
(default #ffc000, radius 45 mm)
3D proximity R2 / R1  17 mm  7.4 s a 3D proximity: the models came close without contact (common cell of the check or below warn below); the sphere is in the middle of the closest points of the closest approach of this case.
violet
(default #e000e0, radius 90 mm, more transparent)
zones R2 / R1  7.7 s a collision risk from the work zones: both robots were in their shared area at the same time without an interlock. The sphere is the centre of the cell (voxel) where both work zones meet. It does not mean that the models touched – the work zones are an approximation of the robot and its tool (mode triangles or cubes, see Work Zones).
orange
(#ff9800, radius 70 mm)
3D contact in the program points R2 / R1 only after Robots to the points of a work zone row: in this pose of the program points the 3D models touch. In the run the robots were not there at the same time – another timing (speed, waiting, SPS) would make it a real collision, so keep the interlock until the area is free. Removed at the next Robots to the points or the start of the simulation.
Places of collisions after a run of two robots: red spheres = contacts of the 3D models, violet spheres = collision risks from the work zones

The spheres are drawn on top of the models, so they are visible also through a robot or a tool. Cases set to Ignore in the window Collision risks are not shown. The spheres stay after the end of the run and are removed at the start of the next run.

The colors are set in View > Colors of the collision places... (Restore Defaults sets red, violet and yellow back). API: {"cmd":"view","collisionPlaces":true}, {"cmd":"view","collisionPlaceColor3D":"#ff0000","collisionPlaceColorZone":"#e000e0","collisionPlaceColorProximity":"#ffc000"} (see Command API).

More spheres than rows. The window Collision risk in the simulation groups the cases of one robot pair in following points into one row (e.g. UP142/P2-P5; the column Count is the number of checks that found it; the column Kind says 3D collision, 3D proximity or work zones, with the closest distance of the models in brackets; a proximity row is orange, not red). The scene shows a sphere for every place of every case, so there can be more spheres than rows – in the picture above four red spheres (7.1, 7.4, 7.7 and 7.9 s) belong to one row.

Stepping through the places of a row. Robots to the points (green play button) of a 3D row moves both robots to their axes at the first place of contact of the row. Every further click moves them to the next place of all cases of the row; the console writes e.g. 'R2' and 'R1' at the contact 2 of 6 of this row (7.34 s) - the red sphere with this time marks the place; click again for the next contact. After the last place it starts again with the first. The red sphere with the same time then lies on the touching parts.

Rows of the work zones. Robots to the points of a work zone row puts both robots at the points of their programs. This pose may never happen at the same time in the run (e.g. both robots at their weld points, while in the run one of them was already gone), so it is correct that no red sphere is there: the red spheres mark only contacts that really happened in the run. Whether the models would touch in this pose shows the check of the pose: an orange sphere and a warning in the console, or the closest distance (see Collision risk in the run).

Robots to the points, contact 1 of the row: the red sphere 3D contact R2 / R1 7.1 s lies where the two welding guns touch

API: {"cmd":"collision_case","key":"...","action":"points"} does the same (a repeated call = the next place; or the key of one contact) and answers point [x, y, z] mm of the shown contact. To look at the place: {"cmd":"view","target":[x, y, z],"zoom":6} and scene_shot.

Accuracy: how far a robot moves between two checks

A contact shorter than the time between two checks can be missed. What counts is not the time, but how far a point of a model moves between two checks while the robot is near a partner (closer than distance up to) – fast motions in free space do not matter. After every run the console writes:

The same values are in the API (live_check → stats) and, for every run of a robustness test, in its log and report. One run with the Live 3D check on a new station or a new computer is enough to get the settings.

Measured (station A: 5 robots + SPS program, 10 cycles = about 720 s of simulation, cell 20 mm, laptop i7-8750H)

ModeSpeedDurationTime of one checkGap between checks (largest)Largest move near a partnerContacts of the 3D models found
own thread, several cores, no fixed step400 %194 s17 ms0.13 s (0.57 s)483 mm2
fixed step 50 ms, several cores400 %502 s17 ms0.05 s (0.05 s)153 mm3
fixed step 50 ms, several cores200 %706 s16 ms0.05 s (0.05 s)153 mm3
fixed step 20 ms, several cores400 %835 s19 ms0.02 s (0.02 s)65 mm3 + close approaches below 50 mm
Recommended for finding collisions (robustness test, delay test, a run over night): Live 3D on, own thread, several cores, fixed step 20 ms (or the step of the recommendation in the console), any simulation speed (400 % = shortest duration), redraw every 250–1000 ms. For cycle times without collision check: Live 3D off.

Interlock signals between the robots Simulation

With Respect interlock signals (A8n / Makro20 / A4n) the robots of Run on all robots exchange the interlock signals of the VW standard as the PLC does:

The partner robot of a zone comes from the descriptions of the signals E(40+n), A(40+n) and A(80+n) in the long texts of the robot archive (Longtexts) and from the comments Verriegelung n ... 0001R03 in the programs; a zone without a description is shared with every robot that uses the same zone. For Fanuc robots the descriptions come from the signal comments of the controller in DIOCFGSV.IO (DI n = E n, DO n = A n, e.g. DI 41 "L.Ant.1>R1" = release from the partner robot R1), see Fanuc robots. At the start the console shows the interlock map (zone - partner) of every robot.

During the run the console reports every wait: waited 16.38 s at folge12 P17 for interlock 3, 5 (taken by ...) (simulation time). At the end it shows the waiting time per robot - the points where the cycle time is lost. A robot that ends its program with a zone still taken (no A(40+n) = EIN) is reported as an error, and if all robots wait for each other the run stops with a deadlock message.

The simulation follows the program order and the motion planner; it shows where robots wait, not whether the zones are released at the right place geometrically - for that use Work Zones and Check interlocks.

Program flow

Without the station PLC (SPS) the controller inputs and the PLC are not simulated (except the interlock signals above, when switched on), so the conditions of the programs are evaluated as follows:

Console messages: what is written, how often, and the option DEBUG

The options apply to the single program run and to Run on all robots.

Import of the POT process times (Makro40) Simulation

POT = Produktion ohne Teil (ghost run): the test mode of the station without parts, in which the robot waits the process times of the POT macro instead of the real process – the same situation as in the simulation. The button Import POT times... under the table Program rules takes these times into the simulation. The import runs automatically – you only open the window and confirm the suggestions:

Import POT times: applications of Makro40, expressions from the tech user of the archive (VW User KS26.01.98), modes
  1. The simulator reads the POT macro from the archive of every robot (VW: Makro40 POT Prozesszeiten setzen, the number of the macro is asked, default 40) and takes all applications with their process times, e.g. BZ1 Schweissen 1.0 s, BZ1 Bolzen Nachladen 2.0 s. Different times in the robots – the longest one (details in the tooltip of the time).
  2. From the archive it reads the VW User version of the robot (VW_User\vw_usr_s.src, e.g. KS26.01.98_20260419) and from this version the tech groups and subgroups (the same definitions as the Tech command editor, all formats of the tech user). The version is shown in the window; a version that is not in DReS is marked and the groups of the default version are used.
  3. For every application the command of the program is built automatically as a regular expression: the group and the subgroup at the beginning of the command, the number of the application as Steuerung, e.g. BZ1 → ^TECH2\s+BZ(\s|$).*\bSteuerung\s*=\s*Nr1\b, STP → ^TECH2\s+STP(\s|$), KL → ^TECH3\s+KL(\s|$), NZ → ^TECH2\s+NZ\/EP(\s|$). The group is not called TECHn in every VW User version (older versions e.g. Tech_, TECH2_) – it is taken from the version of the robot.
  4. Column In programs shows how many commands of the programs of the robots (Folgen, UPs, macros) match – you see at once which applications the station really uses (0 = not used). The lines of the POT macro itself are not counted.
  5. The mode is preset: reload for the reload applications (... Nachladen), otherwise solo. reload: the time runs while the robot moves on; when the motion to the next point with the same command is shorter, the robot waits there only for the rest. before for processes before the point (VOR Prozess, e.g. MS Zuenden, KL Start/Bereit), after – the process ends after the robot leaves the point. The meaning of the modes is shown under the table.
  6. The ticked rows become rules Custom command with PrAct (output Prozess aktiv, default A4039). The suggestions are not ticked – check them and tick the rows. Rules entered by hand for the same commands (e.g. Wait at command SERVOZANGE 1200 ms) would count the process time twice – after the import the window lists them and removes the ticked ones. The assignment is remembered and suggested at the next import.
Commands that are not in the POT macro still need rules entered by hand – e.g. spot welding with the servo gun (SERVOZANGE ... Schweissen) or brushing (TECH4 Prozessgeraet BU ...) are not in Makro40. Applications that also act in POT (e.g. a gun that closes anyway) can be missing in the macro as well. The SPS does not react to the process times; PrAct is not part of the report.

Markers, flags and FB PSPS Simulation

The robot program is interpreted like on the controller: the inline forms of the VW standard (the text shown in the folds, not the KRL code generated inside them) and simple expert code outside the folds (see below). The commands of a point run in the order of the program: a WARTE BIS, an interlock (Makro20) or an FB PSPS holds the next commands of the point until it is fulfilled – e.g. A80 = EIN, WARTE BIS E80 & E76, A80 = AUS: the handshake output A80 stays EIN while the robot waits and goes AUS only after the wait. Commands after a UP call run after the UP.

Markers built from signals the simulation does not have (air, water, current of the gun, sensors of the tool – e.g. M95 Sicherheiten EZ1/SP1) get a fixed value in the signals file or with Force always EIN in the SmartPad.

Motion planner Simulation

With Real motion (motion planner) the robots move like the controller: PTP synchronized in the axes, LIN and CIRC along the path, with acceleration and approximation of the corners. Real time (1:1) sets the animation speed to 100 %.

The parameters adjust the estimate: program override, PTP acceleration time, path acceleration (from robot archive = DEF_ACC_CP of $config.dat), orientation velocity and approximation. Default values restores them.

Draw the real path draws the planned path instead of straight lines between the points.

Search (LIN SUCHEN): the robot moves with VB of the search fold and the last part before the point with the reduced velocity Vred – the longest case, the part at the end point of the search (plugin settings > Simulation: Search: distance with Vred, default 120 mm). A search longer than Search: longest time (default 12 s, VW Gantt) gives a warning in the console, e.g. search (LIN SUCHEN) to P5 takes 3.63 s.

Machine data of the selected robot writes the axis velocities read from the machine data to the console.

Motion times Simulation

The table Motion times collects the planned time, the progress, the number of points, the status and the start time of every program run per robot; click a header to sort. Export... saves a CSV file (opens in Excel) with the table and the time of every point (program, point, step such as UP81/P3, motion type, time from the previous point and from the start). Clear empties the table.

The motion times are estimates: the controller does not publish its exact motion profile, and the SPS of the station is a simplified model. Use them for comparing variants and finding the longest robot of the cell – see How realistic is the simulation?

How realistic the simulation is (simulation clock, robot controller, where the differences come from, comparing variants) – see Running, processor and accuracy.

Cycle time report and its hints Simulation

Times: station efficiency, the longest cycle and the times of every robot

After Run on all robots the button Report... of the Times tab saves a readable report (opens in the browser or the PDF viewer when Open a saved report (HTML, PDF) in the default program is on): which robot sets the cycle time of the station, who waits for which interlock zone and how long, which partner holds the zone between which points. Section 3. What to check contains hints for the programmer, e.g. move points with process time to a robot with reserve or release zone n (A(40+n) = EIN) right after the shared area.

Report - options

Before saving, the window Report - options asks what the report contains:

  • Screenshot of the station (3D view) at the beginning,
  • Gantt chart of one cycle – every robot with the average times of its points: motion, process (stop at a command), waiting for an interlock zone, WARTE BIS, WARTE ( EIN ) ZEIT (own colour, since 2026-10-21) and Warte auf Folgenstart; the red dashed line is the longest robot. A second chart can average the cycles from .. to (e.g. from cycle 2, without the start of the station),
  • PrAct (Prozess aktiv) in the Gantt chart – option: a green line under the robot while the output Prozess aktiv is EIN (rules with PrAct), also the part during the motion (before / after),
  • Save as: HTML (tooltips in the charts), PDF (A4 landscape, page numbers, the charts as images, a section heading never stays alone at the bottom of a page) and / or Excel – one sheet per table: Summary, Robots, Cycles (every cycle of every robot), Interlock waits, First cycle, Zone holds, Cycle steps (average time of every point: motion, process, interlock, WARTE BIS, WARTE ZEIT [s], Folgenstart) and Comparison; numbers are number cells. All files get the same name,
  • Compare with a previous run – every report saves the data of the run next to it (*.rcsrun.json). Select the file of an earlier run (e.g. before a change of the programs): the report gets the section Comparison with the previous run – cycle of the station, efficiency, for every robot the cycle, waiting, motion, stops and program timer, and the waiting for every interlock zone, with the difference (green = better, red = worse).

The report also lists the waiting for interlocks in the first cycle (who holds the zone and since which point) and warns when the simulation speed was not 100 % or was changed during the run – only at 100 % without changes the motion planner gives times close to the real robot. The table Robots (also the sheet Robots of the Excel file) has the column Tool (3D): the body on the flange used for the work zones and the 3D collision check – CAD model of the tool: name (JT model of the real tool), dummy tool (approximation) (sphere / box) or no tool; additional elements on the flange (e.g. tool changer) follow with +. The section 5. Assumptions of the simulation reminds that with a dummy tool the work zones and the 3D collision check are an approximation of the real tool. The API command robot gives the same as toolKind (cad / dummy / none) and toolText. The sections about the request races and the interlock priority of the run are described in Request races.

The texts of the hints and their limits are in an XML file, so they can be changed for another standard or another language without a new version of the plugin. The file is set in the row Report hints of the Times tab:

ControlFunction
file namethe hints file used by the next report (red = file not found, the report uses the built-in hints)
folder iconselects another hints file; the file is checked before it is used and stored in the settings
Editopens the hints file in the DReS editor
Installation fileback to <DReS folder>\template\RCS\report_hints.xml (the default)

The file is read at every report – save the file in the editor and click Report... again, no restart of DReS is needed. Section 5 of the report shows which file was used. Tip: copy the installation file to your own folder before changing it, an update of DReS overwrites the installation file.

Element / attributeMeaning
<Hint id="...">one hint; the id is fixed (list below), a hint missing in the file uses the built-in text
enabled="false"switches the text of the hint off (the rest of the box stays)
threshold="..."limit at which the hint appears (unit in the table below)
<Text lang="en"> / lang="de"text in the language of the plugin (Help → Language); a missing language uses the English text. HTML is allowed inside <![CDATA[ ... ]]>
{name}value filled in by the report, e.g. {robot}, {wait}; the names of every hint are in the comment above it in the file
idWhen the hint appearsthreshold (default)
bottleneckalways – the slowest robot sets the cycle time–
cycleSplitsplit of its cycle: motion, stops at commands, waiting, rest–
processStopsstops at commands (process time) of the slowest robot above the limit% of the cycle (30)
bottleneckWaitsthe slowest robot waits for interlocks above the limits per cycle (0.5)
robotWaitsa robot waits for interlock zones at least the limit – box with its zoness per cycle (0.5)
reservethe waiting robot is not the slowest one – it uses up its reserve–
zoneWaitone line per zone the robot waited for–
zonePartnerthe partner holding the zone: release earlier, request later–
noWaitingrobots waiting less than the limit; the same limit colours the waiting column of the robot tables per cycle (0.05)
The hints are rules of the simulator – they point to places to check, the decision stays with the programmer. Without the file, or with an error in it (message in the console), the report uses the built-in texts and limits above.

Request races Simulation

Two robots that request the same interlock zone within the time window (Plugin settings > Simulation, default 1 s) make a request race. In the simulation the robot that requests a few milliseconds earlier always wins; on the line the order is random, because the robots never run exactly like in the simulation. Then the other robot may get the zone first – the station runs another order, the cycle time changes, and a motion without interlock can meet the partner in a place the simulation never showed.

At the end of a station simulation the console writes a warning for every race: the zone, both robots with the points, the smallest time difference, how often it happened and which robot won. The same races are in the times report (Times > Report), in Check interlocks (code RACE), in the run data (requestRaces) and in every step of the Robustness test. With Window with the request races ... in the settings a window lists them at the end.

The simulation never changes the SPS program by itself. The console says it with the races: n request race(s): the SPS program is not changed - at the end of the simulation you can add protection blocks ('Interlock priority') or simulate both orders (API race_study). What you can do at the end is described in Request races: proposal and simulation of both orders.

With Keep the order of the robots at a request race during the run (on by default) the simulation keeps the order it found in every next cycle of the same run, while both requests come within the window. A robot that comes later than the window (slower, disturbed) lets the other go – the order changes like on the line and the console tells it. This is only a rule of the run: the SPS program is not changed. In the Robustness test a race found in one step keeps its order for all next steps of the test.

The times report (Times > Report) has the section Requests at the same moment (request races) with the window, both points, the winner and the smallest / largest difference, and the section Interlock priority in this run with all rules of the run (source SPS, plan, API, test or auto with the race it comes from; test and auto are rules of the run only, not blocks in the SPS program) and every use of a rule – an order change because a robot came later than the window is red.

Times report: Requests at the same moment (request races) – zone 1, 0001R05 won by 0.494 s, 0001R03 waited 8.4 s – and Interlock priority in this run with the SPS block (window 1.0 s)

What to do with a race:

Request races: proposal and simulation of both orders Simulation

A request race: two robots request the same interlock zone almost at the same moment – within the Request race of a zone - time window (Plugin settings > Simulation). On the line the order of the two robots is random. The simulation finds the races, but it never changes the SPS program by itself. You decide at the end what to do.

Window at the end (title Request race found): when a station simulation or a Robustness test ends with races, this window comes instead of Simulation finished. It shows the text of the end (cycles, time) and a table of the races:

Window Request race found at the end of a station simulation: three races (zones 4, 1 and 5), the robot that got the zone first in the simulation, the waiting robot and the smallest time difference; below the proposal, Cycles per run and the buttons Simulate both orders, Add protection blocks and Close. The SPS program is not changed.
ColumnMeaning
Zonethe interlock zone of the race
First in the simulationthe robot (and point) that got the zone first in this simulation
Secondthe robot (and point) that waited
Smallest difference [s]the smallest time between both requests in the run

Below the table: the field Cycles per run: (1..20, default 3) and the buttons:

Window after the simulation of both orders (title Simulation of both orders - result): the SPS program is as before. The table has one row per race:

ColumnMeaning
Zonethe zone of the race
A: order of the simulationresult of variant A: station x s, waiting y s, n collision risk(s)
B: robots swappedthe same for variant B
Keepchoice A: R1 first, B: R2 first or no block. The recommended variant is preselected: fewer collision risks, then the shorter station cycle

Add the chosen blocks puts the chosen Interlock priority blocks into the SPS program, each with a comment with the results of both variants; an older block of the same pair of robots in the zone is replaced. Close (SPS program unchanged) closes the window without a change. The console and the log write one line per race, e.g. Simulation of both orders: zone 1: A 0001R05 first - ...; B 0001R03 first - ...; recommended A.

Window Simulation of both orders - result: for zone 4 variant A (0001R02 first) gives a station cycle of 72.2 s and 104.6 s of waiting, variant B (0001R05 first) 82.4 s and 196.1 s, both with 4 collision risks – A is preselected in Keep. Add the chosen blocks puts the chosen order into the SPS program, Close (SPS program unchanged) changes nothing. The line above the table gives the path of the report.

API: command race_study (actions status, add_blocks, start, stop, apply).

Simulation file

Simulation → Save simulation... / Load simulation... store and load the options of the Simulation tab together with the cell (see also Save and load). Since 2026-10-16 the file also keeps Stop the simulation at a collision risk and all fields of the Live 3D collision check (element Options: stopAtCollisionRisk, live3d, live3dCell, live3dCapsule, live3dRange, live3dWarn, since 2026-10-25 live3dContact – a file without it uses 5 mm). The conditions of the manual synchronization (WARTE BIS, e.g. E80 & E76) are stored in the element SyncWaits; a file without this element leaves the field as it is (it is not cleared). The API command sps_program with file also reads the SPS program (element Sps) from such a file.

For a Fanuc robot the element ArchiveRobot keeps the path of the Fanuc archive, not of the translated archive in the cache; the translation is made again at every load.

Archive from a ZIP file (since 2026-10-21): when the archive of a robot was extracted from a ZIP file, the simulation file and the session keep the ZIP file too; when the extracted folder in the cache is gone (cache cleared), the ZIP is extracted again at the load. Robots of a Process Simulate study find their archive folder or ZIP file named like the robot next to the study (archive icon with a tooltip in the tree, see Insert robots at study positions). The API command robot answers archive and archiveZip.

Recent simulations (since 2026-10-18): Simulation → Recent simulations lists the last 15 loaded simulation files (also those loaded through the API), the newest first; only files that still exist are shown. A click loads the simulation like Load simulation..., without the file dialog. The menu is disabled while the simulation runs or when the list is empty. API command recent_files (reading, no license needed): answer {"ok":true,"simulations":[...],"studies":[...],"current":"<Simulation_File>"} – simulations = this list, studies = the recent studies / cells (File → Recent files), current = the simulation file loaded now. The AI agent finds a file named by the user in this list.

Tool model from a JT, glTF, STL or STEP file (since 2026-10-22, glTF / STL / STEP since 2026-10-25): a tool model mounted with the robot menu Tool model (JT / STEP / STL / glTF)... or the API tool_model is saved in the element Docked (attributes robot, tool, position and jtFile = path of the model file - the attribute keeps its name also for .gltf, .glb, .stl, .stp and .step, so older simulation files stay valid); the session saves it in attached[].file. At the load the model file is inserted again and the model is mounted on the flange with the saved position (a dummy tool of the robot is removed). Relative paths are resolved from the folder of the simulation file, so a moved simulation package finds its tool models; a model that cannot be mounted is listed in the Message Window with the reason.

Tool model formats in the Live 3D check. Tool models converted from the JT™ data format to glTF or STL give comparable results in the Live 3D collision check. The conversion does not change the accuracy of the calculation: the converted model has the same triangles as the most detailed level of the JT™ model, and the collision check and the work zones use exactly these triangles. Test: two welding guns (R1, R2) in one station, original JT™ models, glTF and STL, 100 / 200 / 400 % speed: the same three contacts (1–4 mm) were found in every run with every format. A borderline pass at 20–30 mm was reported as a proximity, in single runs as a contact – this depends on the moment of the check, not on the format; use a fixed check step of 10 ms for such places. Work zones from triangles: JT™ 14 s, glTF 9 s, STL 7 s.

FormatContactsBorderline proximityWork zones
JT™3 in all runs21–24 mm (once a contact of 4 mm)14 s
glTF3 in all runs25–30 mm (once a contact of 2 mm)9 s
STL3 in all runs22–30 mm7 s

Interlock priority blocks from request races: when the SPS program is saved with the simulation and Interlock priority blocks for request races were added at your choice (button Add protection blocks or Add the chosen blocks, or the API race_study) and are not confirmed yet, Save simulation asks about them and lists the blocks:

After the answer the question does not come again for these blocks. Without the SPS program in the file there is no question. API command save: "raceBlocks": "keep" (default) or "remove", no question; the answer gives raceBlocks (none = no such blocks, kept, removed) and raceBlocksCount. race_rules and race_study give pendingBlocks – the blocks still waiting for this decision.

JT models as glTF (automatic conversion)

Since 2026-10-25 the simulator converts the models in the JT™ data format that it needs by itself and loads the converted glTF 2.0 model (.glb, parts and colors) instead of the JT file – at the same place, with the same mounting on the flange and the same offsets from the study (the glTF model keeps the coordinate system of the JT model; test 2026-10-25: mounting Z 38 mm on the flange identical for JT and glTF). The conversion is made by the independent program modelconv (one welding gun with 0.5–0.8 million triangles takes about 1 s).

API: load, open, insert_study_robots and package_open take convert ("auto", "ask" = like auto without windows, "never"); the result is in status.modelConversion (converted, reused, failed, skipped, seconds, models); model_cache reads and sets the mode and the place and estimates the models to convert of a simulation or study file without converting (see API reference); for a study (.xml) next to estimate (tools on the robots) also estimateAll – all components of the study with a 3D model, as File → Open with all objects. open takes objects ("all" or a selection file .ini saved in Available objects).

Simulation package (*.rcsz)

File → Save simulation package (*.rcsz)... saves one ZIP file with everything needed to open the simulation on another computer: the simulation file, the SPS program and the settings in it, the converted tool models (.glb + .glb.json; a tool loaded as JT is converted now) and the data of the robots. All paths inside are relative; the manifest rcsz.json keeps the format version, the date, the DReS version, the list of files, the files of every robot and the source JT files only by their names (no paths of the customer).

Mounted elements. The robot menu Mounted elements lists the tool and the fixtures on the robot; each has Hide / Show (the model is not drawn; saved with the simulation and the package) and Remove from the robot (a model from a file is deleted from the scene, an element of the study stays hidden). A hidden model stays in the collision checks (3D, work zones, interlocks); only a removed one is no longer checked. The same model is never mounted twice on a robot (the same name, or a name that starts with the other name at an underscore): when loading a simulation, a package or a session, after Insert robots at study positions and with the robot menu Remove duplicate models only one is kept (the element of the study before a model from a file, a fixture before a tool). A dummy tool exists only for a robot without a 3D model of its tool; mounting a model removes the dummy, and a dummy in an older package or simulation is not loaded when the robot has a model. API: tool_info, tool_remove, tool_hide, tool_show, tool_model (replace).

File → Open simulation package..., File → Open, Load simulation... and the recent files accept .rcsz: the package is extracted to %LOCALAPPDATA%\DrAmaT\RCS\Packages\<name>_<key> (the same file again: no new extraction) and its simulation is loaded – the robots from the folder of the package, without the original archives. Example: the PSZ station with 5 robots and 2 welding guns as glTF (45 MB) gives a package of about 20 MB. API: package_save (file, includeRobotData, includeSource, dryRun) and package_open (file).

The package also contains the briefing file AGENTS.md of the station at the root of the ZIP (refreshed before saving when Simulation > Update AGENTS.md automatically is on; absent when the option is off and there is no file); opening the package reads it back. See AGENTS.md.

Plugin settings > Simulation

Tools → Settings..., tab Simulation:

Plugin settings, tab Simulation: Search for collision markers in macros, race time window, window at the end and the option Keep the order of the robots at a request race during the run
SettingMeaning
Output 'Prozess aktiv' (PrAct)output of the robot set EIN while a process runs (rules with PrAct, see Program rules); default A4039
Macros prepared in the backgroundmacros parsed in the background with the programs, default 20, 46, 47, 50, 57 – see Preparation in the background
Search for collision markers in macrosmacros with the collision markers (e.g. M8 = E41 & E43 & E45), numbers separated by ; or ,. The markers are replaced by the inputs E41..E56 when FB PSPS and WARTE BIS are checked (Check interlocks, collision matrix). The same setting as in Robot Collisions Analyzer; empty = every program
Search: distance with Vred / Search: longest timeLIN SUCHEN, default 120 mm / 12 s – see Motion planner
FB PSPS check during the motiondefault 100 ms, 0 = only before the motion – see FB PSPS during the motion
No stop on the process pathon by default – see FB PSPS during the motion and No stop on the process path
Deduce the direction of the travel track (axis 7) of a robot that has oneon by default. For Fanuc robots with an integrated travel track the direction comes from the controller position in SYMOTN.VA; when that gives no direction (E1 near 0, axis angles and stored position from different moments), from the controller configuration $SCR_GRP[1].$EXT_XYZ_MAP (1 = X, 2 = Y, 3 = Z, positive direction), and only when that is missing, from the robot type in the Process Simulate study (e.g. ..._7ACHSE_Y+). Every such case and every disagreement between controller position, controller configuration and study is written to the console as anomaly: .... Off: only a direction confirmed by the controller position is used, otherwise the robot is inserted not simulated. Takes effect when the robot is loaded again. API: settings_set with key Deduce_Rail_Direction (group RCS_Group) and value true / false
Request race of a zone - time windowtwo robots that request the same interlock zone within this time (simulation time, default 1 s, 0.1..5 s) are a request race – see Request races
Window with the request races at the end of a station simulationoff by default; the console always shows them
Keep the order of the robots at a request race during the runon by default: within a run the order of the simulation is kept in every next cycle while both requests come within the window; a robot later than the window lets the other go. The SPS program is not changed – protection blocks only on your choice, see Request races: proposal and simulation of both orders
Open a saved report (HTML, PDF) in the default programon by default: a report saved from the program opens in the default program of Windows (web browser, PDF viewer). Applies to the times report (Times > Report), the Robustness test report and the collision risk report. Off: the file is only saved, nothing opens – recommended when an AI agent or a script makes the reports. The API command report never opens a browser. API: report_open (see API reference)
Model converter (JT to glTF)path of modelconv.exe, an independent program (GNU GPL v3, source code on request) that converts files in the JT™ data format into glTF 2.0 with the parts and colors, and also into STEP and STL. Empty = automatic: <program folder>\RuntimeTools\modelconv\modelconv.exe – when the installer installed the converter (installer section modelconv), the path is set by itself. The folder button selects another file, Default clears the field (automatic). Next to it the state: found / not found. The simulator uses it to convert the JT models at the load. API: model_converter (see API reference)
JT models: use converted glTF modelsAuto (default) – missing glTF models are converted without asking; Ask – one window with the number of models, the size and the estimated time before converting; Never – the JT files are loaded directly. API commands work like Auto without windows. See JT models as glTF. API: model_cache convert
Save converted modelsNext to the JT file (default) or Common folder (empty = %LOCALAPPDATA%\DrAmaT\RCS\Models). API: model_cache mode ("nextToJt" | "folder"), folder
Processor cores for the robotssee Processor cores

Plugin settings > Collision report

Tools → Settings..., tab Collision report, one option:

Plugin settings, tab Collision report: Neighbouring points of the same place as one case
SettingMeaning
Neighbouring points of the same place as one case (e.g. UP48/P23-P25)on by default: when a robot meets the same partner at the same place in several neighbouring points of one program, the collision risk window and the saved reports (HTML / PDF, also of the Robustness test and of the API command collision_report) show them as one case, e.g. UP48/P23-P25 instead of three rows for P23, P24 and P25. Off: one row per point.

Command API

Every option of this tab can also be read and set by a script or an AI agent: run, fast_run, sim_options, sim_action (Pause / Resume, Continue, Check interlock map), live_check and collision_ignore; the settings of the request races with race_rules, the proposal and the simulation of both orders with race_study, the option Open a saved report ... with report_open, the model converter with model_converter, the conversion of the JT models with model_cache, the simulation package with package_save / package_open, the recent simulations with recent_files (load with load) – see Command API.

JT is a trademark of Siemens Industry Software Inc. Other trademarks belong to their respective owners.



« Programs and paths | Contents | Station PLC (SPS) and SmartPad »