Code debuggen: Breakpoints
Hinweis
Dieses Thema bezieht sich nur auf die (nicht-sicherheitsbezogene) Standard-Steuerung. Die entsprechenden Schritte für die sicherheitsbezogene SPS finden Sie im Hilfekapitel "Sicherheitsbezogene SPS-Inbetriebnahme: Von Kompilieren bis Debuggen ![]() ×‣ Verbinden contra Monitoring-Modus contra Debug-Modus ×‣ Sicherheitsbezogene Applikation aus dem Sicherheitscockpit steuern ×‣ Steuerungsdiagnose aus dem Cockpit der sicherheitsbezogenen SPS ×‣ Sicherheitssteuerung überwachen/debuggen ×‣ Monitoring-Modus: Online-Werte anzeigen ×‣ Debuggen von sicherheitsbezogenem Code: Forcen/Überschreiben ×‣ WATCH-Fenster: Sicherheitsbezogene Applikation überwachen/debuggen ×‣ Simulation der sicherheitsbezogenen SPS ×". |
Allgemeine Informationen und Voraussetzungen
Zu Ihrer Unterstützung beim Funktionstest stellen die Code-Editoren im Debug-Modus mehrere Debug-Funktionen zur Verfügung. Sie können beispielsweise Breakpoints setzen, um die Projektausführung an einer bestimmten Codestelle anzuhalten. Wird ein Breakpoint erreicht, hält das laufende Projekt an dieser Stelle, an der sich Breakpoint befindet und der Steuerungsstatus wechselt in den Zustand "Angehalten" (dies wird am Steuerungssymbol in der ANLAGE angezeigt).
Sie können dann die aktuellen Werte der Variablen oder Funktions-/Funktionsbaustein-Formalparameter untersuchen.
Voraussetzungen für die Verwendung von Breakpoints:- Das Setzen von Breakpoints ist nur möglich, wenn PLCnext Engineer an den Applikationsprozess angehängt ist, d.h. sich im Debug-Modus befindet.
- Nur wenn die Verwendung von Breakpoints im Cockpit aktiviert wurde, hält die Steuerung an einem Breakpoint an.
Dazu muss die Schaltfläche 'Alle BPs aktivieren/deaktivieren' gedrückt sein. Andernfalls wird keiner der gesetzten Breakpoints aktiviert, unabhängig von den Befehlen, die Sie in Online-Arbeitsblättern oder im BREAKPOINTS-Fenster ausführen.Hinweis
Solange die Verwendung von Breakpoints im Cockpit nicht aktiviert ist, werden diese im Code und im BREAKPOINTS-Fenster mit dem Symbolangezeigt.
- Breakpoints können nicht gesetzt werden, wenn...
- der Quellcode nach dem Setzen eines Breakpoints verändert wurde.
- das Arbeitsblatt, das das Objekt enthält, an dem Sie einen Breakpoint setzen möchten, deaktiviert (vom Build-Prozess ausgeschlossen) ist. Details erfahren Sie im Thema "Code-Arbeitsblätter vom Build ausschließen".
Wird ein Breakpoint erreicht, kann die Projektausführung mit dem Befehl 'Fortfahren' im CALL STACKS-Fenster oder im BREAKPOINTS-Fenster fortgesetzt werden (beide Fenster sind im Cross-Funktionen-Bereich im unteren Bildschirmbereich zu finden) oder Sie können das Projekt mit Hilfe der Stepping-Funktionen Schritt für Schritt ausführen. Die Befehle (Fortfahren und Stepping) im CALL STACKS-Fenster und im BREAKPOINTS-Fenster sind im Abschnitt "Debuggen mit gesetzten Breakpoints" unten beschrieben.
Die Handhabung der Breakpoints (Setzen, Entfernen, Umschalten) erfolgt entweder im Online-Code-Arbeitsblatt oder im BREAKPOINTS-Fenster. Das BREAKPOINTS-Fenster listet alle Breakpoints auf und bietet eine Symbolleiste und ein Kontextmenü zum Umschalten, Deaktivieren und Entfernen von Breakpoints. Außerdem kann von dort direkt in ein Code-Arbeitsblatt gesprungen werden, in dem ein Breakpoint gesetzt ist (siehe Tabelle unten).
Falls das CALL STACKS-Fenster oder das BREAKPOINTS-Fenster im Cross-Funktionen-Bereich (im unteren Bildschirmbereich) ausgeblendet ist, können Sie das jeweilige Fenster durch Klicken auf die entsprechende Schaltfläche anzeigen:
![]() | BREAKPOINTS-Fenster |
![]() | CALL STACKS-Fenster |
Hinweis
Breakpoints werden deaktiviert, aber nicht entfernt, wenn PLCnext Engineer vom Applikationsprozess getrennt wird (Umschalten vom Debug-Modus zurück in den Programmiermodus) oder Sie PLCnext Engineer beenden. Sie müssen wie unten beschrieben manuell entfernt werden. |
WARNUNG
|
Unbeabsichtigter Betriebszustand des Geräts
|
Befehle zum Setzen, Umschalten und Deaktivieren von Breakpoints
Befehle in Code-Arbeitsblättern (im Debug-Modus)
- Grafischer Code: Befehle stehen als Direktschaltflächen und im Kontextmenü zur Verfügung, falls eine Variable oder ein Formalparameter einer Funktion bzw. eines Funktionsbausteins ausgewählt ist.
- Texteditor: In der Editor-Symbolleiste stehen Schaltflächen zur Verfügung, falls sich der Cursor in einer Codezeile befindet.
Hinweis
Alternativ dazu können Sie in textuellem Code auch mit der linken Maustaste in die schmale Spalte links vom Zeilenanfang klicken, um einen Breakpoint zu setzen bzw. umzuschalten.
Schaltfläche | Befehl | Tastenkombination | Beschreibung |
---|---|---|---|
![]() | Breakpoint umschalten | <Strg> + <Alt> + <F9> | Setzt oder entfernt einen Breakpoint an der gewählten Codestelle oder -zeile.Falls an der gewählten Stelle/Codezeile bereits ein Breakpoint existiert, wird dieser durch den Befehl entfernt. |
![]() | Breakpoint aktivieren/deaktivieren | <Strg> + <Alt> + <F10> | Aktiviert oder deaktiviert einen bestehenden Breakpoint. Der Breakpoint-Status (aktiviert oder deaktiviert) wird durch ein entsprechendes Symbol angezeigt (siehe Abschnitt "Breakpoint-Status und Symbole" unten). |
Befehle im BREAKPOINTS-Fenster
Wie gewohnt, ist im BREAKPOINTS-Fenster auch die Mehrfachauswahl von Einträgen möglich. Halten Sie zum Beispiel die <Strg>-Taste gedrückt, während Sie auf die gewünschten Zeilen klicken.
Schaltfläche | Kontextmenü | Beschreibung |
---|---|---|
![]() ![]() ![]() ![]() | Debug-Befehle, die auch im CALL STACKS-Fenster verfügbar sind. Weitere Informationen finden Sie im Abschnitt "CALL STACKS/BREAKPOINTS-Fenster: Debuggen mit gesetzten Breakpoints". | |
![]() | <Strg> + <Umschalt> + <F5> | Befehl: WeiterSetzt die Programmausführung fort, bis der nächste gesetzte Breakpoint erreicht ist.Der Befehl steht auch im CALL STACKS-Fenster zur Verfügung. |
![]() | <F11> | Befehl: Einen Einzelschritt ausführenDie Programmausführung wird in der nächsten Zeile oder mit dem nächsten Objekt fortgesetzt und dann an dieser Codestelle angehalten. Erreicht das Programm den Aufruf eines Anwender-FB, so wird der Code dieser POE im Debug-Modus geöffnet und schrittweise abgearbeitet. (Dieses Verhalten gilt für Anwender-FBs, die im aktuellen Projekt definiert sind, sowie für FBs aus referenzierten Anwender-Bibliotheken.)Der Befehl steht auch im CALL STACKS-Fenster zur Verfügung. |
![]() | <Strg> + <F11> | Befehl: Einen Prozedurschritt ausführenDie Programmausführung wird in der nächsten Zeile oder mit dem nächsten Objekt fortgesetzt und dann an dieser Codestelle angehalten. Erreicht das Programm den Aufruf eines Anwender-FB, so wird der FB übersprungen und stattdessen die nächste Zeile bzw. das nächste Objekt markiert.Der Befehl steht auch im CALL STACKS-Fenster zur Verfügung. |
![]() | <Umschalt> + <F11> | Befehl: Den Code bis zum Rücksprung ausführenDieser Befehl ist bei der schrittweisen Abarbeitung anwenderdefinierter FB-POEs relevant. Durch den Befehl wird der FB-Code verlassen und zur aufrufenden POE zurückgekehrt.Der Befehl steht auch im CALL STACKS-Fenster zur Verfügung. |
![]() | Breakpoint aktivieren | Aktiviert den/die im Fenster ausgewählten Breakpoint(s). Der Status schaltet im Fenster auf 'Aktiv' und das Symbol im Code wechselt auf![]() |
![]() | Alle Breakpoints aktivieren | Aktiviert alle Breakpoints im Fenster. Der Status schaltet im Fenster auf 'Aktiv' und das Symbol im Code wechselt auf![]() |
![]() | Breakpoint deaktivieren | Deaktiviert den/die im Fenster ausgewählten Breakpoint(s). Der Status schaltet im Fenster auf 'Inaktiv' und das Symbol im Code wechselt auf![]() |
![]() | Alle Breakpoints deaktivieren | Deaktiviert alle Breakpoints im Fenster. Der Status schaltet im Fenster auf 'Inaktiv' und das Symbol im Code wechselt auf![]() |
![]() | Breakpoint entfernen | Entfernt den/die im Fenster ausgewählten Breakpoint(s). |
![]() | Alle Breakpoints entfernen | Entfernt alle Breakpoints im Fenster. |
![]() | Zu Code wechseln | Öffnet das Code-Arbeitsblatt, in dem der Breakpoint gesetzt ist und markiert ihn. Falls das Arbeitsblatt noch nicht im Debug-Modus ist, wird die entsprechende Instanz automatisch geöffnet. |
Breakpoint-Status und -Symbole
Der aktuelle Status eines Breakpoints wird an dem Element, für das ein Breakpoint gesetzt wurde, durch folgende Symbole gekennzeichnet:
Der Status ist auch im BREAKPOINTS-Fenster sichtbar.
Symbol im Code | Symbol im BP-Fenster | Breakpoint-Status | Beschreibung |
---|---|---|---|
![]() | ![]() | Aktiviert | Breakpoint ist aktiviert. Aktiviert bedeutet, die Projektausführung wird an diesem Breakpoint angehalten. |
![]() | ![]() | Deaktiviert | Breakpoint ist deaktiviert. Der Breakpoint ist zwar im Code-Arbeitsblatt gesetzt, wird aber ignoriert, wenn er während der Projektausführung erreicht wird. |
![]() | ![]() | Erreicht | Breakpoint erreicht. Die Projektausführung wurde am Breakpoint angehalten. Die Codestelle wird im CALL STACKS-Fenster angezeigt. Mit Hilfe der Schrittfunktionen (Stepping) kann das Code-Arbeitsblatt schrittweise abgearbeitet werden (siehe Abschnitt "Debuggen mit gesetzten Breakpoints" unten). |
![]() | ![]() | Inaktiv aktiviert | Der Breakpoint ist aktiviert, kann aber nicht erreicht werden, da die Verwendung von Breakpoints im Cockpit deaktiviert ist. Aktivieren Sie die Verwendung aller Breakpoints (siehe Abschnitt 'Voraussetzungen" oben). |
![]() | ![]() | Inaktiv deaktiviert | Der Breakpoint ist deaktiviert und die Verwendung von Breakpoints ist im Cockpit deaktiviert. (Siehe Abschnitt "Voraussetzungen" oben.) |
- | ![]() | Ungebunden | Der Breakpoint kann nicht mehr erreicht werden, da die Kommunikationsverbindung zwischen PLCnext Engineer und der Steuerung unterbrochen ist (offline) und keine Debug-Befehle/Online-Werte mehr übertragen werden können. Ungebundene Breakpoints werden nur im BREAKPOINTS-Fenster angezeigt. Im Code ist keine Online-Anzeige möglich, solange die Steuerung offline ist. |
Setzen von Breakpoints
Hinweis
Um anwenderdefinierte Funktionen/Methoden debuggen zu können und/oder Execution Values (tatsächliche Werte an der Codestelle) in Online-Arbeitsblättern anzeigen zu können, müssen Sie im Steuerungs-Cockpit die entsprechende erweiterte Debug-Funktion auswählen. Lesen Sie hierzu die Abschnitte "Erweitertes Debuggen: Execution Values vs. "normale" Online-Werte" und "Erweitertes Debuggen anwenderdefinierter Funktionen, Methoden und AS-Aktionen/Transitionen". |
Setzen Sie einen Breakpoint an einem Element wie folgt:
- Doppelklicken Sie in der ANLAGE auf den Knoten der Steuerung und öffnen Sie den 'Cockpit'-Editor. Falls die Verwendung von Breakpoints im Cockpit noch nicht freigegeben ist, klicken Sie auf die nachfolgend gezeigte Schaltfläche und bestätigen die anschließende Sicherheitsabfrage mit 'Ja'. Wenn die Schaltfläche gedrückt ist, sind Breakpoints freigegeben und können beim Debuggen aktiv werden.
- Aktivieren Sie den Debug-Modus, indem Sie PLCnext Engineer an den laufenden Applikationsprozess anhängen.Wählen Sie die POE-Instanz, in der Sie einen Breakpoint setzen möchten ('In den Instanzeditor wechseln' oder Doppelklick auf das Instanzsymbol in der ANLAGE) und öffnen Sie das gewünschte Arbeitsblatt.
-
Im grafischen Code: Linksklicken Sie auf den Namen des Objekts, für das Sie einen Breakpoint setzen möchten und klicken Sie anschließend auf die Schaltfläche 'Breakpoint umschalten' (entweder in der Editor-Symbolleiste oder in der Direktsymbolleiste des Objekts), um den Breakpoint an dieser Stelle einzufügen.Alternativ dazu können Sie auch den Kontextmenübefehl 'Breakpoint umschalten' des Objekts wählen oder <Strg> + <Alt> + <F9> drücken.
Im textuellen Code: Linksklicken Sie in die schmale Spalte links vom Anfang der Zeile, in der Sie den Breakpoint setzen möchten.
Alternativ dazu können Sie auch in die Codezeile linksklicken und in der Symbolleiste des Editors die Befehlsschaltfläche 'Breakpoint umschalten' wählen oder <Strg> + <Alt> + <F9> drücken.Der Breakpoint wird im Code-Arbeitsblatt durch folgendes Symbol gekennzeichnet:
Der Breakpoint wird auch im BREAKPOINTS-Fenster aufgelistet. Hier stehen Befehle zur Verfügung, um ihn zu deaktivieren oder entfernen.
Hinweis
Wenn Sie einen Breakpoint setzen, während das Projekt ausgeführt wird, kann die Ausführung direkt an dieser Stelle angehalten werden. - Wenn das Programm an einem Breakpoint angehalten wurde, erscheint das folgende Symbol an der Einfügestelle:
In textuellem Code bekommt die betreffende Variable einen gelben Hintergrund:
Die Codestelle wird im CALL STACKS-Fenster angezeigt (mit
markiert) und ihr Status im BREAKPOINTS-Fenster schaltet auf 'Erreicht' (
).Nun können Sie den Code schrittweise abarbeiten (mit den Stepping-Befehlen im CALL STACKS oder BREAKPOINTS-Fenster) oder die Ausführung bis zum nächsten Breakpoint fortsetzen. Lesen Sie hierzu den folgenden Abschnitt "CALL STACKS/BREAKPOINTS-Fenster".
CALL STACKS/BREAKPOINTS-Fenster: Debuggen mit gesetzten Breakpoints
Wenn die Projektausführung an einem gesetzten Breakpoint angehalten wird (sichtbar durch das Symbol
Im CALL STACKS-Fenster und im BREAKPOINTS-Fenster stehen Befehle zur Verfügung, um die Ausführung bis zum nächsten Breakpoint fortzusetzen oder eine der drei Schrittfunktionen (Stepping) auszuführen.
Mit den Schrittfunktionen lässt sich das Projekt Schritt für Schritt abarbeiten, um so die Applikation in kontrollierter Weise auszuführen. Drücken Sie dazu im CALL STACKS/BREAKPOINTS-Fenster wiederholt auf die jeweilige Schritt-Schaltfläche oder die zugehörige Tastenkombination.
Beim Stepping wird die aktuelle Schrittposition im Code durch das Symbol gekennzeichnet, bevor die nächste Operation ausgeführt werden kann.
Symbol | Tastenkombination | Beschreibung | |
---|---|---|---|
![]() | <Strg> + <Umschalt> + <F5> | Befehl: WeiterSetzt die Programmausführung fort, bis der nächste gesetzte Breakpoint erreicht ist. | |
![]() | <F11> | Befehl: Einen Einzelschritt ausführenDie Programmausführung wird in der nächsten Zeile oder mit dem nächsten Objekt fortgesetzt und dann an dieser Codestelle angehalten. Erreicht das Programm den Aufruf eines Anwender-FB, so wird der Code dieser POE im Debug-Modus geöffnet und schrittweise abgearbeitet. (Dieses Verhalten gilt für Anwender-FBs, die im aktuellen Projekt definiert sind, sowie für FBs aus referenzierten Anwender-Bibliotheken.) |
|
![]() | <Strg> + <F11> | Befehl: Einen Prozedurschritt ausführenDie Programmausführung wird in der nächsten Zeile oder mit dem nächsten Objekt fortgesetzt und dann an dieser Codestelle angehalten. Erreicht das Programm den Aufruf eines Anwender-FB, so wird der FB übersprungen und stattdessen die nächste Zeile bzw. das nächste Objekt markiert. |
|
![]() | <Umschalt> + <F11> | Befehl: Den Code bis zum Rücksprung ausführenDieser Befehl ist bei der schrittweisen Abarbeitung anwenderdefinierter FB-POEs relevant. Der FB-Code wird verlassen und zur aufrufenden POE zurückgekehrt. | |
![]() | <Strg> + <Alt> + <F3> | Ein Heißstart wird nicht von allen Steuerungstypen unterstützt.Führt einen Heißstart der Steuerung aus. Während eines Heißstarts werden keine Daten initialisiert. Stattdessen wird das Programm mit den aktuellen Variablenwerten fortgesetzt.Nach Ausführung des Befehls, hängt sich PLCnext Engineer automatisch an den laufenden Prozess auf der Steuerung an und schaltet in den Debug-Modus.Der Befehl ist nur verfügbar, wenn PLCnext Engineer mit der Steuerung verbunden und die Steuerung gestoppt ist. Es ist nicht notwendig, in den Debug-Modus zu schalten.
|
|
![]() | <Strg> + <Alt> + <F4> | Ein Warmstart wird nicht von allen Steuerungstypen unterstützt.Führt einen Warmstart der Steuerung aus. Während eines Warmstarts werden nur nicht-remanente Daten initialisiert.Nach Ausführung des Befehls, hängt sich PLCnext Engineer automatisch an den laufenden Prozess auf der Steuerung an und schaltet in den Debug-Modus.Der Befehl ist nur verfügbar, wenn PLCnext Engineer mit der Steuerung verbunden und die Steuerung gestoppt ist. Es ist nicht notwendig, in den Debug-Modus zu schalten.
|
|
![]() | <Strg> + <Alt> + <F5> | Führt einen Kaltstart der Steuerung aus. Während eines Kaltstarts werden alle Daten initialisiert.Nach Ausführung des Befehls, hängt sich PLCnext Engineer automatisch an den laufenden Prozess auf der Steuerung an und schaltet in den Debug-Modus.Der Befehl ist nur verfügbar, wenn PLCnext Engineer mit der Steuerung verbunden und die Steuerung gestoppt ist. Es ist nicht notwendig, in den Debug-Modus zu schalten. |
Breakpoints entfernen
Breakpoints können im Code oder im BREAKPOINTS-Fenster entfernt werden.
- Code: Um einen einzelnen Breakpoint zu entfernen, linksklicken Sie auf das betreffende Objekt bzw. in die Codezeile und wählen den Befehl 'Breakpoint umschalten':
- BREAKPOINTS-Fenster: Um einen oder mehrere einzelne Breakpoints zu entfernen, wählen Sie die jeweiligen Zeilen im BREAKPOINTS-Fenster (Mehrfachauswahl wie üblich) und den Befehl 'Breakpoint entfernen' aus dem Kontextmenü oder der Symbolleiste:
- BREAKPOINTS-Fenster: Um alle Breakpoints auf einmal zu löschen, wählen Sie den Befehl 'Alle Breakpoints entfernen' aus dem Kontextmenü oder der Symbolleiste:
Setzen Sie anschließend die Applikation fort, indem Sie im CALL STACKS- oder BREAKPOINTS-Fenster auf 'Ausführung fortsetzen' klicken: