Debuggen
Um Fehler innerhalb eines mit MATLAB®/Simulink® erstellten TcCOM-Moduls zu finden bzw. das Verhalten des Moduls in der Gesamtarchitektur des TwinCAT-Projekts zu analysieren, stehen unterschiedliche Wege zur Verfügung.
Debuggen im Blockdiagramm
Wurde bei der Generierung des TcCOM-Moduls das Blockdiagramm exportiert, kann dieses in der TwinCAT-Entwicklungsumgebung angezeigt und unter anderem zum Debuggen innerhalb der entsprechenden Modulinstanz verwendet werden. Dazu nutzt das Blockdiagramm den Microsoft Visual Studio Debugger, der über den TwinCAT Debugger-Port mit der TwinCAT-Laufzeit verbunden werden kann. Das Verbinden (Attachen) des Debuggers erfolgt wie im C++-Bereich unter Debuggen beschrieben.
Voraussetzungen für das Debuggen innerhalb des Blockdiagramms sind:
- Der C/C++-Quellcode des TcCOM-Moduls muss auf dem Engineering-System vorhanden sein und vom Visual Studio-Debugger gefunden werden können. Idealerweise sollte das Debuggen daher auf dem System stattfinden, auf dem auch die Codegenerierung ausgeführt wurde. Wurde das Modul auf einem anderen System erstellt, kann der zugehörige C/C++-Quellcode i.d.R. durch Einbindung des Visual Studio Projektes in den C++ Bereich von TwinCAT bekannt gemacht werden. Die Datei <ModelName>.vcxproj liegt im build-Verzeichnis, siehe Welche Dateien werden automatisch bei der Codegenerierung und dem Publish erstellt?
- Das Modul muss mit der Konfiguration Debug erstellt worden sein. Beim Publish direkt im Anschluss an die Codegenerierung, muss im Bereich Publish-Mechanismus unter publish configuration die Einstellung Debug ausgewählt werden. Beim publish des Moduls aus dem C++ Bereich in TwinCAT muss der Debugger im C++ Knoten der Solution freigegeben sein, siehe Dokumentation C/C++ - Debuggen.
- Bei der Codegenerierung müssen in den Coder-Einstellungen unter Tc Advanced die Optionen Export block diagram und Export block diagram debug information aktiviert sein.
- Im TwinCAT-Projekt muss der Debugger-Port aktiviert sein, wie unter TwinCAT 3 C++ Enable C++ debugger beschrieben.
Setzen von Breakpoints im Blockdiagramm
- 1. Nach dem Verbinden (Attachen) des Debuggers mit der TwinCAT-Laufzeit, werden die möglichen Breakpoints im Blockdiagramm den Blöcken zugeordnet und als Punkte dargestellt. Durch Anklicken des gewünschten Breakpoints kann dieser aktiviert werden, um die Ausführung der Modulinstanz bei der nächsten Abarbeitung des zugehörigen Blocks zu stoppen. Die Farbe des Punktes gibt Auskunft über den aktuellen Zustand des Breakpoints:
- Grau: Breakpoint inaktiv
- Rot: Breakpoint aktiv. Bei der nächsten Abarbeitung dieses Blocks wird der Programmablauf angehalten
- Gelber Punkt in der Mitte: Breakpoint Hit. Die Programmabarbeitung ist im Augenblick an dieser Stelle angehalten
- Blauer Punkt in der Mitte: Breakpoint Hit (wie gelb), allerdings in einer anderen Instanz des Moduls.
- 2. Im Tool-Tip des Breakpoints findet man zusätzliche Informationen, wie z. B. den zugehörigen C++-Code-Abschnitt:
Breakpoints werden nicht immer einem einzelnen Block zugeordnet. Im zugrundeliegenden C++-Code sind häufig Funktionalitäten mehrerer Blöcke in einem Codeabschnitt oder sogar einer Zeile zusammengefasst. Weil sich daher oft mehrere Blöcke den gleichen Breakpoint teilen, ändert sich bei der Aktivierung eines Breakpoints im Blockdiagramm häufig auch die Darstellung der Punkte an anderen Blöcken. |
Auswertung von Exceptions
Treten während der Abarbeitung eines TcCOM-Modules Exceptions, wie z.B. eine Division durch Null, auf, so kann die Stelle an der diese Exception versursacht wurde im Blockdiagramm dargestellt werden. Dazu muss das TcCOM-Modul die oben genannten Voraussetzungen erfüllen und der C++-Debugger muss im TwinCAT-Projekt aktiviert sein (TwinCAT 3 C++ Enable C++ debugger). Nachdem der Debugger verbunden (attached) wurde, was vor aber auch noch nach dem Auftreten der Exception erfolgen kann, wird der verursachende Block im Blockdiagramm hervorgehoben, sofern die verursachende Codezeile einem Block zugeordnet werden kann. Der Name des Blockes wird rot dargestellt und der Block selbst wird fett markiert.
Manuelle Auswertung von Exceptions ohne Quellcode
Auch wenn auf dem Engineering-System nicht der Source Code des Modules verfügbar ist oder der C++-Debugger nicht aktiviert wurde, kann man nach Auftreten einer Exception die Fehlerstelle im Blockschaltbild hervorheben.
Typischerweise wird beim Auftreten eines Fehlers immer eine Fehlermeldung generiert, in der die Quellcode-Datei sowie die Zeile im Quellcode angegeben ist. Über diese Information lässt sich eine Exception in vielen Fällen einem Block des Blockschaltbildes zuordnen. Dazu kann man wie folgt vorgehen:
- Voraussetzung für das Hervorheben der Fehlerstelle innerhalb des Blockdiagramms ist, dass die Debuginformationen erzeugt wurden (Option Export block diagram debug information in den Coder-Einstellungen unter Tc Advanced).
- 3. Aus dem Kontext-Menü des Blockschaltbildes ist der Eintrag Provide exception data zu wählen:
- 4. In dem sich öffnenden Dialog sind die in der Fehlermeldung bereitgestellte Quellcode-Datei und Zeilennummer einzutragen:
- 5. Der Name des Blockes, welchem die Zeilennummer zugeordnet ist, wird rot dargestellt und der Block selbst wird fett markiert: