Profiling durch Code-Instrumentierung
Wichtig
Der implizit hinzugefügte IEC-Code für eine Profiler-Messmethode, sowie die Haltepunkte bei Bausteinen in der Überwachungsliste bewirken eine Veränderung und Verlangsamung des ausgewerteten Programms!
Wenn eine Profiling- oder die Codeabdeckungsmessung aktiv ist, ist kein Online-Change möglich. Außerdem stehen einige Onlinefunktionalitäten nicht zur Verfügung, wie beispielsweise „Ablaufkontrolle“ und „Haltepunkte“. Für die Überwachungsliste gibt es diesbezüglich keine Einschränkungen.
Das Ein- und Ausschalten einer Profiler-Messmethode oder das Ändern von Einstellungen im Profiler-Editor erzwingt jeweils einen Download. Ein Online-Change ist dann nicht mehr möglich. Für die Überwachungsliste gibt es diesbezüglich keine Einschränkungen.
Tipp
Die Aufzeichnung und die Verarbeitung der Messwerte findet auf der Steuerung statt und kann daher (im Gegensatz zu den anderen Messmethoden) auch ohne Verbindung des Entwicklungssystems mit der Steuerung erfolgen.
Bei dieser Profiling-Methode baut CODESYS Profiler bei jeder Funktion des Programms zusätzlichen Code in den Funktionseintritt und – austritt ein. Die Laufzeiten eines kompletten Taskzyklus werden gemessen und gespeichert.
Die Methode ist dafür geeignet, einzelne Ausreißer in den Tasklaufzeiten aufzuspüren. Wählen Sie dazu am Besten den Aufzeichnungsmodus Längsten Zyklus aufzeichnen.
Wenn das gesamte Projekt instrumentiert wird, kann das sehr großen Einfluss auf die Tasklaufzeiten und den Speicherverbrauch haben. Wählen Sie deshalb soweit möglich nur einen Teil der Applikationsbausteine zur Instrumentierung aus. Eine zu empfehlende Taktik ist folgende: Wählen Sie zunächst nur Bausteine aus, die direkt von der Task aufgerufen werden. Ermitteln Sie für diese Bausteine die „Hot Spots“ der Laufzeit und wählen Sie davon ausgehend wiederum die aufgerufenen Bausteine zur Messung aus.
Wichtig
Ein nicht zur Messung ausgewählter Baustein erscheint weder in der Liste der Messungen, noch im Aufrufbaum oder in der Rückverfolgungsansicht. Es kann somit sein, dass ein Aufrufbaum „Baustein1 -> Baustein3“ angezeigt wird, obwohl es keinen direkten Aufruf von Baustein3 durch Baustein1 gibt. Ursache: Zwischen Baustein1 und Baustein3 liegen Aufrufe von nicht für die Messung ausgewählten Bausteinen.
Die in der Messung ausgegebene „eigene Zeit“ für einen Baustein kann auch Zeiten von aufgerufenen Bausteinen enthalten, die nicht zur Messung ausgewählt sind.
Aktivieren und Durchführen des Profilings mit Hilfe von Instrumentierung
Voraussetzung:
Ein CODESYS-Projekt mit einer Applikation aus verschiedenen Bausteinen ist im Offlinebetrieb geöffnet.
Sie haben eine Task definiert, die den Aufruf der Bausteine steuert.
Die Applikation ist die aktive Applikation und fehlerfrei übersetzt.
Eine Verbindung zur Standardsteuerung ist in den Kommunikationseinstellungen konfiguriert und die Steuerung läuft.
Um das Profiling programmatisch aktiveren und deaktivieren zu können, definieren Sie in der Applikation eine boolsche Variable. (Dies ist optional für das hier beschriebene Beispiel, die Aktivierung kann grundsätzlich auch über einen Menübefehl erfolgen.)
Fügen Sie im Gerätebaum unterhalb der Applikation mit dem Befehl Objekt hinzufügen ein Objekt Profiler hinzu.
Doppelklicken Sie auf das Objekt.
Der Editor für das Objekt öffnet sich. Registerkarte
Einstellungen ist im Vordergrund.
Wählen Sie als Methode die Option Instrumentierung. Wählen Sie die Task aus, für deren Bausteinaufrufe Sie Zeitmessungen durchführen möchten.
Wählen Sie unter Aufzeichnung die Task, die die zu messenden Bausteine steuert.
Klicken Sie bei Bedingung auf die Schaltfläche
und wählen Sie die boolesche Variable aus Ihrer Applikation aus, über die Sie die Werteaufzeichnung aus- und einschalten möchten. Hinweis: Die Verwendung einer solchen Variablen ist optional. Wenn Sie das Feld leer lassen, wird jeder Zyklus aufgezeichnet.
Stellen Sie in Instrumentierungsparameter den Aufzeichnungsmodus ein, hier zum Beispiel: Nächsten Zyklus aufzeichnen. Belassen Sie als benötigte Puffergröße (maximale Anzahl der Bausteinaufrufe, die pro Taskzyklus aufgezeichnet werden) die Voreinstellung 10000.
Wählen Sie bei Darstellung der Momentaufnahme das Zeitformat für die Darstellung der Aufzeichnungen.
Setzen Sie in der Bausteinauswahl Häkchen für die Bausteine, die gemessen werden sollen. Hinweis: Alternativ könnten Sie auch die „Gesamte Applikation instrumentieren“, was neben allen Bausteinen des Projekts auch die Bausteine der eingebundenen Bibliotheken einschließen würde.
Laden Sie die Applikation auf die Steuerung: Befehl
.In der Statuszeile von CODESYS erscheint die Anzeige
.
Starten Sie die Applikation: Befehl
.Das Projekt läuft, Sie sehen in den üblichen Monitoring-Ansichten die aktuellen Variablenwerte.
Wenn Sie eine boolsche Variable als Bedingung für das Starten des Profilings konfiguriert haben, setzen Sie diese Variable nun auf
TRUE
.Hintergrundinformation zur Aufzeichnung: Da Sie in diesem Beispiel hier die Option Nächsten Zyklus aufzeichnen gewählt haben, wird beim Starten der Applikation und des Profilings der erste Zyklus und kein weiterer aufgezeichnet. Eine weitere Messung erfolgt erst dann, wenn eine Aufzeichnung von der Steuerung hochgeladen wird. Dieses Hochladen erfolgt entweder durch das erstmalige Öffnen der Registerkarte Online, oder durch Betätigen der Schaltfläche Diese Momentaufnahme aktualisieren). Zur Alternativoption Längsten Zyklus aufzeichnen sehen Sie im Referenzteil der Hilfe: Registerkarte ‚Einstellungen‘.
Sehen Sie sich nun die Messergebnisse an. Öffnen Sie dazu den Editor des Profiler-Objekts und dessen Registerkarte Online.
Die Registerkarte
Online bietet vier Unterregisterkarten, die über die Reiter links ausgewählt werden können. Zusätzlich sehen Sie ein Feld mit Schaltflächen und Einstellungen für das aktuell laufende Profiling. Für weitere Informationen siehe: Registerkarte ‚Online‘
Wählen Sie auf der Registerkarte Online die Unterregisterkarte Aufrufbaum.
Sie sehen die Hierarchie aller Aufrufe, die von der im Dialog Einstellungen eingetragenen Task ausgingen.
Selektieren Sie einen der Aufrufe und wählen Sie aus dem Kontextmenü den Befehl Eigenschaften
Der Dialog Eigenschaften für den aufgerufenen Baustein öffnet sich mit zusätzlichen Informationen wie Own Time und Standardabweichung.