Eine Simulation mit 100 % zeigt eine Reihenfolge der Roboter – die, die an der Anlage meistens vorkommt. Eine Bewegung ohne Verriegelung in einem mit einem anderen Roboter gemeinsamen Bereich ist dann oft nur wegen dieser Reihenfolge sicher. An der Anlage ändert sich die Reihenfolge: ein Roboter bleibt mit einem Fehler am Schweißpunkt stehen, ein Bauteilsensor kommt nicht, ein Roboter fährt alle n Takte zum Kappenfräsen, ein Roboter fährt langsamer. Der Reiter Robustness test (nach Simulation) führt eine Reihe von Simulationen der Station mit solchen Änderungen aus – aus einem Plan oder einem Zufallsgenerator, eine Stunde lang oder über Nacht – und schreibt in einen Bericht: Kollisionsgefahren, Berührungen der 3D-Modelle, Verklemmungen, Wartketten und ob die Station zur Taktzeit zurückkehrt.
Inhalt: 1. Vor dem Test · Wie die Roboter fahren · 2. Der Reiter und seine Optionen · Arbeitsbereiche oder 3D-Berührungen · 3. Plandatei · 4. Test ausführen · 5. Ergebnisse lesen · 6. Bericht · 7. Befehls-API
1. Vor dem Test
- Station laden und das Programm des Reiters Simulation wählen (z. B. Folge 81). Der Test verwendet das Programm, das SPS-Programm und die Optionen des Reiters Simulation.
- SPS-Programm (Reiter SPS): die Roboter werden wie an der Anlage gestartet (Folgenstart, Warten auf die Station). Ein mit seinem SPS-Teil gespeicherter Plan bringt das SPS-Programm beim Laden zurück.
- Arbeitsbereiche (Reiter Arbeitsbereiche) der Programme der Folge: ohne sie sieht der Test die gemeinsamen Bereiche nicht – Langsam in den Bereichen und der Verzögerungstest wirken nicht, und es wird keine Kollisionsgefahr aus den Bereichen gefunden. Würfel sind schnell, Dreiecke der 3D-Modelle folgen der echten Form der Roboter (weniger Fälle am Rand eines Bereichs).
- Optional Live-3D-Kollisionsprüfung auf dem Reiter Simulation: die 3D-Modelle der Roboter und Werkzeuge werden während des ganzen Tests geprüft (langsamer, am besten mit der Geschwindigkeit 100 %). Sie wirkt ab dem Start jeder Simulation – während des ganzen Tests eingeschaltet lassen.
Wie die Roboter im Test fahren
- Alle Roboter fahren dieselbe Folge – das Programm des Reiters Simulation, mit dem SPS-Programm die Folge des Stationsblocks jedes Roboters. Jeder Schritt ist ein Lauf auf allen Robotern mit N+1 SPS-Durchläufen (ein Startdurchlauf und N gemessene Takte).
- Die Schritte ändern nur das Timing: Geschwindigkeit eines Roboters, Halte in Punkten, langsame Bewegung in den gemeinsamen Bereichen, Startversatz, Serviceprogramme alle N Takte. So treten andere Reihenfolgen der Bewegungen derselben Folge auf als in der Simulation mit 100 %.
- UP-Aufrufe wie auf dem Reiter Simulation (UP calls, Program rules): ein ausgeschlossenes UP (z. B. Kappenfräsen) läuft nicht; ein Serviceprogramm der Tabelle Serviceprogramme läuft alle N Takte, auch wenn es ausgeschlossen ist. Mit Alle UP-Aufrufe läuft jedes UP der Folge in jedem Takt, und die Regeln Exclude UP werden während des Tests ignoriert (die Einstellungen des Reiters Simulation bleiben) – für die Kollisionsmatrix kann jedes UP laufen.
- Der Verzögerungstest (MISSING) nimmt jede Bewegung ohne Verriegelung aus dem Lauf (mit Alle UP-Aufrufe auch aus den UPs) und jeden Partner im gemeinsamen Bereich und verzögert den Partner oder den Roboter selbst – eine systematische Prüfung der Kombinationen der Bewegungen der Folge statt zufälliger.
- Die Arbeitsbereiche (gemeinsame Bereiche, rot / gelb) kommen aus allen Bewegungen der Folge und aller ihrer UPs, unabhängig von der Reihenfolge (Wie die Roboter in der Simulation fahren).
2. Der Reiter und seine Optionen
Plan – woher die Schritte kommen. Ein Schritt ist eine Simulation der Station mit einer Anzahl von Takten und seinen Einstellungen.
| Feld | Wirkung |
|---|---|
| Plandatei (JSON / XML), ..., Laden | die Schritte der Datei (Liste darunter); beim Laden fragt das Programm, welche Teile geladen werden (Serviceprogramme, Halte, SPS-Programm, Programm des Reiters Simulation) |
| Beispielplan... | schreibt einen Plan mit allen Optionen und lädt ihn |
| Plan speichern... | speichert den Plan mit allen Einstellungen des Reiters; fragt, welche Teile gespeichert werden (auch das SPS-Programm) |
| Zufallsgenerator | Schritte ohne Datei, einer nach dem anderen bis zum Ende des Tests: |
| Takte pro Schritt (min, max) | zufällige Anzahl Takte jedes Schritts |
| Override (min, max) | zufälliger Override der Roboter in jedem Takt – nur ihre Bewegungen sind langsamer, Prozesszeiten (Schweißen, WARTE BIS) bleiben, die Stationsuhr läuft weiter |
| Roboter | Roboter mit dem zufälligen Override (leer = alle), z. B. R04, R06 |
| Startversatz 0.. | jeder Roboter wartet nach Folgenstart eine zufällige Zeit – eine andere Reihenfolge der Roboter in den gemeinsamen Bereichen |
| Halt in einem zufälligen Punkt pro Takt / Dauer | Wahrscheinlichkeit pro Takt, dass ein Roboter in einem zufälligen Punkt seines Programms für eine zufällige Zeit (min, max) stehen bleibt; nie in HOME, höchstens ein Halt pro Takt der Station |
| Startwert | derselbe Startwert wiederholt denselben Test; zufällig = neuer Startwert (im Bericht) |
| Langsam in den Bereichen ... mit x %, in allen gemeinsamen Bereichen (gelb und rot) / nur in den roten Bereichen | in jedem Schritt fährt ein Roboter (der Reihe nach) mit x % nur bei den Bewegungen in mit anderen Robotern gemeinsame Bereiche, der Rest seines Programms und die anderen Roboter mit 100 % (der zufällige Override wird nicht verwendet). Gelb (mit Verriegelung): der langsame Roboter hält die Verriegelung länger – der Partner muss warten (Wartketten, Blockieren). Rot (ohne Verriegelung): der Partner fährt ein, während der langsame Roboter noch dort ist – eine Kollisionsgefahr, wenn nur die Reihenfolge der Roboter die Bewegung schützt. Das SmartPad des Roboters zeigt jetzt x % (gemeinsamer Bereich). |
Serviceprogramme – Serviceprogramme suchen listet die UP-Aufrufe der Folge jedes Roboters (UPn = Bedingung, UPn = EIN mit Flags, REPEAT UPn; bedingte Aufrufe und REPEAT sind markiert – typische Serviceprogramme wie Kappenfräsen). Alle N Takte: das UP läuft nur in jedem N-ten Takt der Station (1 = jeder Takt wie im Programm, 0 = nie). Der Basislauf läuft ohne sie.
Halte in Punkten – Hinzufügen einer Zeile: Roboter, Programm (Folge oder UP), Punktnummer wie im Programm, Haltezeit, alle N Takte. Der Roboter bleibt direkt nach dem Erreichen des Punkts stehen – wie ein Fehler am Schweißpunkt oder ein Bauteilsensor, der nicht kommt. Gilt in allen Schritten, nicht im Basislauf.
Optionen
| Feld | Wirkung |
|---|---|
| Kollisionswarnungen ignorieren | die Simulation hält bei einer Kollisionsgefahr nicht an, alles geht in den Bericht (Test ohne Aufsicht); die 3D-Ansicht wird beim ersten Fund als Bild gespeichert |
| Test bei der ersten Kollisionsgefahr beenden | der Test endet beim ersten Fall |
| Nur Berührungen der 3D-Modelle | die Live-3D-Kollisionsprüfung wird beim Start eingeschaltet; nur echte Berührungen und Annäherungen der 3D-Modelle gehen in den Bericht, die Gefahren aus den Arbeitsbereichen werden übersprungen – kein vollständiger Test, siehe Arbeitsbereiche oder 3D-Berührungen |
| Alle UP-Aufrufe | jedes UP der Folge in jedem Takt, die Regeln Exclude UP während des Tests ignoriert (Einstellungen des Reiters Simulation bleiben) |
| Von vorne wiederholen | der Plan erneut, bis zum Stopp oder einem Limit |
| Zuerst Basislauf ... Takte | zuerst alle Roboter 100 % ohne Störungen – Referenztaktzeit für die Rückkehr zur Synchronisation; hier gefundene Fälle treten auch ohne Störung auf |
| Zeitlimit, Max. Takte | Ende des Tests (kein Limit = bis zum Stopp) |
| Toleranz Rückkehr | ein Takt ist wieder synchron, wenn der Stationstakt höchstens Basislauf + diese Toleranz ist |
| Geschwindigkeit | Simulationsgeschwindigkeit während des Tests (400 % = am schnellsten; die Zeiten sind Simulationszeiten). Die Live-3D-Prüfung mit festem Schritt (Standard 20 ms, Live-3D-Kollisionsprüfung) gibt bei jeder Geschwindigkeit dasselbe Ergebnis – 400 % macht den Test nur kürzer; das Protokoll zeigt für jeden Lauf die größte Bewegung eines Modells zwischen zwei Prüfungen nahe am Partner. |
| Bericht automatisch speichern in | Ordner des Berichts und der Fortschrittsdatei |
| Start um | Start zu einer Uhrzeit, z. B. in der Nacht |
| Verzögerungstest (MISSING) ... der Partner wartet [s] | statt der Schritte: nach dem Basislauf hält für jede Bewegung ohne Verriegelung in einen mit einem Partner gemeinsamen Bereich der Partner in seinem Punkt des gemeinsamen Bereichs (dem nächsten zur Bewegung) nacheinander die angegebenen Zeiten, bis eine Kollisionsgefahr auftritt. Ergebnis pro Bewegung: die kürzeste Verzögerung mit Kollision – bis dahin schützt die Reihenfolge der Roboter sie – oder keine bis x s. Langer Test (über Nacht). |
| Wer wartet | der Partner wartet in seinem Punkt des gemeinsamen Bereichs – der Partner ist noch im Bereich, wenn der Roboter kommt; der Roboter wartet vor der Bewegung (fährt später ein) – der Roboter hält im Punkt vor der Bewegung ohne Verriegelung, der Partner kann schon im Bereich sein; beides, nacheinander. |
| Verfeinerung [s] | nach der ersten Verzögerung mit Kollision: Halbierung zwischen der letzten Verzögerung ohne Kollision und dieser, bis der Unterschied höchstens dieser Wert ist – die kürzeste Verzögerung genauer (mehr Simulationen); keine Verfeinerung = nur die Verzögerungen der Liste |
Arbeitsbereiche oder 3D-Berührungen – was findet welche Prüfung?
Der Test prüft zwei verschiedene Dinge. Keine der beiden Prüfungen enthält die andere – ein vollständiger Test nutzt beide (Option Nur Berührungen der 3D-Modelle aus).
- Arbeitsbereiche (Kollisionsgefahr ohne Verriegelung, MISSING): ein Roboter fährt ohne Verriegelung in einen mit einem Partner gemeinsamen Bereich, während der Partner zur selben Zeit in diesem Bereich ist. Die 3D-Modelle müssen sich in diesem Lauf nicht berühren – z. B. verlässt ein Roboter den Bereich gerade, während der andere einfährt, einen halben Meter voneinander entfernt. Heute schützt die Reihenfolge der Roboter die Bewegung; kommt einer von ihnen später (Halt an einem Schweißpunkt, fehlendes Teil, anderer Override), kollidiert dasselbe Paar. Die fehlende Verriegelung würde die Bewegung immer schützen – ohne sie hängt die Sicherheit nur vom Zeitablauf ab.
- Berührungen der 3D-Modelle (Live 3D): die Modelle der Roboter und Werkzeuge berühren sich wirklich (oder kommen näher als der Sicherheitsabstand) – aber nur im Zeitablauf dieses Laufs. Eine Bewegung ohne Verriegelung, die in diesem Lauf zu keiner Berührung führt, bleibt unsichtbar. Dafür findet die 3D-Prüfung auch Berührungen, die die Arbeitsbereiche nicht als Fehler zeigen: beide Roboter halten ihre Verriegelungen und berühren sich trotzdem (Verriegelungsbereich zu klein, zu früh freigegeben oder zu spät angefordert), oder die Arbeitsbereiche zeigen dort keinen gemeinsamen Bereich (Näherung eines Werkzeugs oder der Bereiche).
| Situation | Arbeitsbereiche (MISSING) | 3D-Berührungen |
|---|---|---|
| keine Verriegelung, keine Berührung in diesem Lauf (sicher nur durch die Reihenfolge der Roboter) | ✔ | – |
| keine Verriegelung, Berührung in diesem Lauf | ✔ | ✔ |
| beide Roboter mit Verriegelung, die Modelle berühren sich trotzdem | – | ✔ |
| außerhalb der gemeinsamen Bereiche (Näherung eines Werkzeugs oder der Bereiche) | – | ✔ |
Beispiel aus einem Test einer Station mit fünf Robotern: 57 Fälle, davon 26 Berührungen der 3D-Modelle – die übrigen 31 waren Bewegungen ohne Verriegelung ohne Berührung in diesen Läufen. Mit Nur Berührungen der 3D-Modelle würden diese 31 Fälle im Bericht fehlen. Die Spalte Ursache des Berichts und des Fensters zeigt, welche der Situationen ein Fall ist.
Wann nur die 3D-Berührungen? Wenn die Bewegungen ohne Verriegelung bekannt sind (z. B. aus Check interlocks) und nur die gesucht werden, die wirklich in einer Berührung enden. Der Verzögerungstest (MISSING) geht einen Schritt weiter: er verschiebt den Zeitablauf der Roboter gezielt und zeigt für jede Bewegung ohne Verriegelung, ab welcher Verzögerung die Roboter kollidieren.

3. Plandatei (JSON oder XML)
Die Roboter werden mit einem Teil ihres Namens angegeben (R04, 0001R04). Jeder Schlüssel ist optional.
{
"seed": 3, "repeat": false, "ignoreCollisions": true, "stopOnCollision": false,
"baseline": true, "baselineCycles": 1,
"speed": 100, "timeLimitMin": 0, "maxCycles": 0, "recoveryTolerance": 5,
"report": "D:/tests/psz",
"startAt": "2026-10-16T22:00:00",
"steps": [
{ "name": "R06 5 % in den gemeinsamen Bereichen", "cycles": 1,
"zoneSlow": { "override": 5, "robots": ["R06"], "areas": "shared" } },
{ "name": "R06 haelt 30 s in UP42/P49", "cycles": 1,
"holdAt": [ { "robot": "R06", "point": "UP42/P49", "sec": 30, "everyCycle": 1 } ] },
{ "name": "R04 50 %", "cycles": 2, "override": { "R04": 50 } },
{ "name": "Zufall", "cycles": 4, "random": { "override": [20, 100], "robots": ["R01", "R04"] },
"startJitter": 3, "pause": { "prob": 0.2, "sec": [2, 8], "robots": ["R03"] } }
],
"services": [ { "robot": "R06", "up": 101, "everyCycle": 10 } ],
"stops": [ { "robot": "R06", "point": "UP42/P29", "sec": 20, "everyCycle": 5 } ]
}
Dasselbe in XML:
<RobustTest seed="3" baseline="true" baselineCycles="1" speed="100" report="D:/tests/psz">
<Step name="R06 langsam" cycles="1"><ZoneSlow override="5" robots="R06" areas="shared"/></Step>
<Step name="R06 haelt" cycles="1"><HoldAt robot="R06" point="UP42/P49" sec="30" everyCycle="1"/></Step>
<Step name="R04 50 %" cycles="2"><Override robot="R04" percent="50"/></Step>
<Step name="Zufall" cycles="4"><Random min="20" max="100" robots="R01,R04"/>
<StartJitter sec="3"/><Pause prob="0.2" min="2" max="8" robots="R03"/></Step>
<ServiceUp robot="R06" up="101" everyCycle="10"/>
<Stop robot="R06" point="UP42/P29" sec="20" everyCycle="5"/>
</RobustTest>
| Schlüssel | Bedeutung |
|---|---|
| seed | Startwert der Zufallswerte; 0 = neuer Startwert (im Bericht) |
| repeat | Plan erneut von vorne bis zum Stopp oder einem Limit |
| ignoreCollisions | true: kein Halt bei einer Kollisionsgefahr, alles in den Bericht |
| stopOnCollision | der Test endet bei der ersten Kollisionsgefahr |
| baseline, baselineCycles | zuerst Basislauf 100 % ohne Störungen |
| speed | Simulationsgeschwindigkeit während des Tests (1..400 %) |
| timeLimitMin, maxCycles | Ende des Tests (0 = kein Limit) |
| recoveryTolerance | wieder synchron: Stationstakt höchstens Basislauf + diese Toleranz [%] |
| report | Ordner des Berichts und der Fortschrittsdatei |
| startAt | Startzeit (ISO-Datum und -Uhrzeit) |
| steps[].name, cycles | Name in der Liste und im Bericht, Takte des Schritts |
| steps[].override | Roboter → Override [%] während des ganzen Schritts; die anderen Roboter 100 % |
| steps[].random | Override [min, max] in jedem Takt, für alle Roboter oder robots |
| steps[].startJitter | Startversatz 0..x s nach Folgenstart |
| steps[].pause | Halt in einem zufälligen Punkt: prob (0..1 pro Takt und Roboter), sec [min, max], robots (leer = alle); nie in HOME, höchstens einer pro Takt |
| steps[].zoneSlow | override [%] der robots nur bei den Bewegungen in gemeinsame Bereiche; areas: "shared" (gelb und rot, Standard) oder "red" (nur ohne Verriegelung) |
| steps[].holdAt | Halte in Punkten während des Schritts: robot, point ("UP42/P49" in einem UP, "P12" in der Folge), sec, everyCycle |
| services | Serviceprogramme: robot, up (Nummer), everyCycle (1 = wie im Programm, 0 = nie) |
| stops | Halte in Punkten in allen Schritten (wie holdAt) |
| missingTest | Verzögerungstest statt der Schritte: delays [s] nacheinander, cycles pro Versuch, who: "partner" (Standard), "robot" oder "both", refine [s] (0 = keine Halbierung) |
| only3d | nur Berührungen und Annäherungen der 3D-Modelle in den Bericht (Live 3D eingeschaltet) |
| allUps | jedes UP der Folge in jedem Takt, Exclude UP während des Tests ignoriert |
| steps[].raceOrder | Vorrang während des Schritts (Variante B eines Wettlaufs): [{"zone": 4, "first": "R06", "second": "R03", "mode": "order"}] – wie der SPS-Baustein Interlock priority; second leer = jeder Partner, mode "order" = Reihenfolge in jedem Zyklus (für Variante B: der Roboter first ist immer zuerst, auch wenn er wegen anderer Bereiche verspätet ist), "window" mit "window": 2 = Vorrang in einem Zeitfenster (der zweite Roboter wartet höchstens das Fenster ab seiner eigenen Anforderung, dann ändert sich die Reihenfolge – nur für fast gleichzeitige Anforderungen); eine Regel für einen Bereich ersetzt während des Schritts die SPS-Bausteine dieses Bereichs; nicht im Basislauf. Das Ergebnis des Schritts hat requestRaces, raceOrder, raceRules (alle Regeln des Schritts: SPS, Plan, API, auto), raceRuleLog und raceAutoRules (Reihenfolge beim Wettlauf beibehalten, Interlock priority: die im Basislauf eingefügten Bausteine halten die Reihenfolge in den nächsten Schritten). Ergebnisse der Variante B an einer realen Station: siehe Wettläufe und Variante B |
| generator | statt der Schritte: zufällige Schritte mit cyclesMin, cyclesMax und den Schlüsseln eines Schritts (random, startJitter, pause, zoneSlow); mit zoneSlow ist ein Roboter nach dem anderen langsam, die anderen 100 % |
4. Test ausführen
- Test starten – oder zu einer Uhrzeit (Start um).
- Pause hält die Stationsuhr an (alle Roboter), der Test läuft mit derselben Schaltfläche weiter.
- Stopp beendet den Test, der Bericht wird mit den bis dahin fertigen Takten geschrieben.
- Gespeicherten Test fortsetzen... – nach jedem Schritt wird der Fortschritt im Berichtsordner gespeichert (rcs_robust_progress.json); ein gestoppter oder unterbrochener Test läuft ab dem nächsten Schritt weiter.
- Kollisionsgefahren... – die bisher gefundenen Fälle (Ignorieren, Roboter in die Punkte, Programme im Editor).
- Bericht schreibt den Bericht des bisherigen Tests und öffnet ihn (wenn Gespeicherten Bericht (HTML, PDF) im Standardprogramm öffnen in den Plugin-Einstellungen eingeschaltet ist).

Das Protokoll unter den Schaltflächen und die Konsole zeigen jeden Schritt: Overrides, Störungen, Taktzeiten, Kollisionsgefahren.
Neben den Schaltflächen: Rest: x min – Ende etwa hh:mm – mittlere Zeit der fertigen Schritte (oder Takte im laufenden Schritt) mal die restlichen Schritte; im Verzögerungstest die restlichen Versuche der Bewegungen; mit einem Zeitlimit höchstens bis zum Limit. Vor dem Ende des ersten Schritts: wird nach dem ersten Schritt geschätzt; ein Plan ohne Ende (Wiederholen, Zufallsgenerator ohne Limit): unbekannt. Dasselbe in der Statuszeile des Plugins und in der API (remainingMinutes, estimatedEnd).
Test unterbrechen und fortsetzen
- Stopp (oder DReS schließen, oder der Rechner geht aus) – der Bericht der bis dahin fertigen Takte wird geschrieben.
- Später: dieselbe Station laden, denselben Berichtsordner auf dem Reiter lassen (Feld Bericht automatisch speichern in) und Gespeicherten Test fortsetzen... drücken (API: robust_test {"action": "resume"}).
- Der Test nimmt Plan und Optionen aus der Fortschrittsdatei (nicht vom Reiter), macht mit dem nächsten Schritt weiter und zählt Zeit, Takte und Kollisionsgefahren weiter. Die Zufallswerte laufen mit demselben Startwert weiter.
- Verzögerungstest (MISSING): die Liste der Bewegungen ohne Verriegelung, die erreichte Verzögerung jeder Bewegung und die Halbierung werden gespeichert – der Test macht bei derselben Bewegung mit derselben Verzögerung weiter, statt mit der ersten zu beginnen.
Gespeichert wird nach jedem Schritt – ein in der Mitte unterbrochener Schritt wird wiederholt. Das geschätzte Ende in der Statuszeile rechnet ab dem fortgesetzten Stand.
5. Ergebnisse lesen
Welche Testart an einer realen Station welche Kollisionen findet (fester Plan, Zufallsgenerator, Plan eines KI-Agenten, Verzögerungstest): Vergleich der Testarten.
| Art | Bedeutung |
|---|---|
| Kollisionsgefahr (Arbeitsbereiche) | ein Roboter fährt ohne Verriegelung zu einem Punkt in einem mit einem Partner gemeinsamen Bereich, und der Partner ist zur selben Zeit in diesem Bereich. Der Bereich ist das Volumen der ganzen Bewegung (Arm und Werkzeug) – eine Gefahr: hier schützt nur die Reihenfolge der Roboter die Bewegung. Es ist keine Berührung der Modelle. |
| Kollision (3D-Modelle), Punkt mit 3D | Live-3D-Kollisionsprüfung: die Oberflächen der 3D-Modelle zweier Roboter teilen zur selben Zeit eine Zelle – die Modelle berühren sich wirklich (Genauigkeit etwa die Zellengröße). Mit einem Dummy-Werkzeug (Kugel und Körper vom Flansch zum TCP) ist das Werkzeug eine Näherung. |
| Annäherung, 3D x mm | Live 3D: keine Berührung, aber näher als der Sicherheitsabstand (Warnung unter). |
- Ein Fall nur in einem Schritt mit Störung, nicht im Basislauf: die Bewegung ist nur durch die Reihenfolge der Roboter geschützt. Eine echte Gefahr, wenn diese Störung an der Anlage vorkommen kann (ein Roboter bleibt in einem Punkt stehen, ein Bauteilsensor, ein Serviceprogramm). Lösung: eine Verriegelung (Anforderung vor der Einfahrt in den Bereich, Freigabe nach der Ausfahrt).
- Ein Fall schon im Basislauf, der an der Anlage nicht vorkommt: höchstwahrscheinlich die Näherung eines Dummy-Werkzeugs oder des Arbeitsbereichs – die Teile in der nächsten Annäherung der Live-3D-Prüfung prüfen (dummy tool, dummy body flange-TCP) und die 3D-Modelle der echten Werkzeuge laden.
- Langsam in den Bereichen ist eine künstliche Störung (an der Anlage gilt der Override für das ganze Programm eines Roboters); ein damit gefundener Fall zeigt, wo die Reihenfolge eine Bewegung schützt – vor einer Programmänderung mit einem Halt im Punkt (Halte in Punkten) bestätigen.
6. Bericht
HTML, PDF und JSON mit dem Datum im Namen (rcs_robust_yyyyMMdd_HHmm) im Berichtsordner. Der gespeicherte Bericht öffnet sich im Standardprogramm nur, wenn die Option Gespeicherten Bericht (HTML, PDF) im Standardprogramm öffnen eingeschaltet ist (Plugin-Einstellungen > Simulation, Standard: ein; API report_open) – ausschalten, wenn ein KI-Agent oder ein Skript den Test fährt. Inhalt:
- Zusammenfassung: Basislauf, minimaler / maximaler Stationstakt, Anzahl Kollisionsgefahren, Läufe mit Fehler (Verklemmung), gleichzeitige Anforderungen (RACE) und Wartketten;
- Diagramm des Stationstakts pro Takt über den ganzen Test – rot: Takte mit Störung, grüne Linie: Basislauf;
- Tabelle der Schritte: Overrides, Störungen (Roboter, Art, Sekunden, Takt), Taktzeiten, Warten, Rückkehr zur Taktzeit, neue Kollisionsgefahren, Fehler;
- Kollisionsgefahren aller Schritte, jeder Fall als ein Block: Roboter ohne Verriegelung und Punkt, Partner und Punkt, wie oft und in wie vielen Schritten, Geschwindigkeiten der Roboter und Achsen beim ersten Fund, zwei Bilder nebeneinander: die Ansicht der Simulation und eine Ansicht von oben mit dem Ort der Kollision in einem roten Kreis (3D-Berührung: der Berührungspunkt, Gefahr aus den Arbeitsbereichen: zwischen den TCPs beider Werkzeuge); nach den Bildern kehrt die Kamera zur Ansicht der Simulation zurück;
- Berührungen der 3D-Modelle: eigener Abschnitt mit den sich berührenden Teilen (Arm, Werkzeug, Dummy-Werkzeug) und dem Abstand;
- Verzögerungstest (MISSING): kürzeste Verzögerung mit Kollision pro Bewegung;
- Protokoll des Tests.

Der Abschnitt Wettläufe und Interlock priority des Berichts zeigt für jeden Schritt die Wettläufe (Bereich, beide Roboter mit den Punkten, wie oft, kleinster Zeitabstand, Gewinner), die Regeln des Schritts (SPS-Bausteine Interlock priority, raceOrder, API, auto – beim Wettlauf beibehaltene Reihenfolge) und jede Anwendung einer Regel; eine rote Zeile bedeutet, dass ein Roboter später als das Fenster war und sich die Reihenfolge der Roboter in diesem Schritt geändert hat (nicht zufällig, sondern durch die Störung). Über der Tabelle: Anzahl der Wettläufe, der beim Wettlauf hinzugefügten Regeln und der Reihenfolgeänderungen. Ergebnisse: siehe Wettläufe und Variante B.
Der Zeitenbericht eines einzelnen Laufs (Times > Report) enthält dieselben Angaben in zwei Abschnitten, Anforderungen im selben Moment (Wettläufe) und Interlock priority in diesem Lauf:

7. Befehls-API
{"cmd": "robust_test", "action": "load", "file": "..."} (Teile: services, stops, sps, program – true / false), "save", "find_services", "start", "pause", "continue", "stop", "resume" (gespeicherten Test fortsetzen), "status" (active, finished, Schritt, Takte, Kollisionsgefahren, Minuten, Bericht), "risks" (Fälle mit Roboter, Punkt, Partner, Anzahl, erste Zeit und Schritt), "report" (auch "progress": "<Ordner>" – Bericht eines gespeicherten Tests). Live 3D: {"cmd": "live_check", "on": true, "cell": 20, "capsule": 60, "range": 200, "warn": 50} – die Antwort enthält die nächste Annäherung jedes Paares (closest). Arbeitsbereiche: {"cmd": "zones", "programs": ["folge81"], "mode": "triangles"}. Der Test ist zu Ende, wenn status.active false ist. Siehe Befehls-API.