# Zeitfresser finden



## mailmir (13 Februar 2022)

Hallo zusammen,
Ich bin bei der Optimierung meiner Beckhoff-Software auf der Suche nach "Zeitfressern"
Mein Musterprojekt hat (ohne Klemmenkommunikation) derzeit gut 4 ms (Lüftung und Heizung)
Kennt jemand eine Möglichkeit für die einzelnen Programmteile eine "Zeitmessung" zu integrieren um weitere Optimierungen vorzunehmen?

DANKE für eure Rückmeldung und schöne Sonntag noch.


----------



## Heinileini (13 Februar 2022)

mailmir schrieb:


> Ich bin bei der Optimierung meiner Beckhoff-Software auf der Suche nach "Zeitfressern"


 Bei der Optimierung *Deiner* Software?
Wie willst Du denn reagieren, wenn Du einen Zeitfresser identifiziert hast? Genauer hingucken, ob der Programmierer (Du!) geschlampt hat?
Irgendwie hat man doch beim Programmieren ein Gefühl dafür, wo sich die Zeitfresser befinden.

Wenn Du bei der Optimierung einer Software, die Du (noch) nicht gut kennst, auf die Idee kämst, eine ZeitfresserSuchFunktion zu implementieren, könnte ich Dir noch so einigermassen folgen.
Was machst Du denn in Deiner Software und in welcher Sprache programmierst Du?
ProgrammSchleifen stehen sicherlich ganz oben auf der Liste der ZeitfressVerdächtigen. Verwendest Du ProgrammSchleifen?
Hast Du damit zu kämpfen, dass die ZyklusZeit "sporadisch" in die Höhe geht - oder regelmässig in jedem Zyklus zu hoch liegt?
Verwendest Du häufig "vorgefertigte" FCs/FBs, bei denen Du nicht sehen/abschätzen kannst, was intern abläuft?
Könnte es sein, dass einige davon als "eierlegende Wollmilchsau" konzipiert sind und Du nur ein Minimum der Möglichkeiten nutzt, will sagen, dass Du unnötig viel Ballast mitschleppst?

Wenn die Zeiten, die Du messen willst, sehr klein sind, wäre es naheliegend, die zu testende BefehlsFolge in einer Schleife zig-mal zu wiederholen. Aber bei einem zyklischen Programm dürfte dieses Verfahren wohl eher ungeeignet sein bzw. zu unerwünschten Folgen bei der Funktionalität des Codes führen.


----------



## escride1 (13 Februar 2022)

Ich könnte mir vorstellen das Du Baustein für Baustein überprüfst. Vor dem Baustein einmal die Zeit aufnehmen, nach dem Baustein die Zeit 
aufnehmen und die Differenz ausrechnen. Dann weißt Du wie lange dieser eine Baustein gebraucht hat.
So mache ich es in einigen S7-Steuerungen, jeweils mit verschiedenen Mitteln.
Aber da Du die Beckhoff programmiert hast wirst Du sicherlich den Weg bzw. die Anweisungen wissen die Du dafür nutzen kannst.


----------



## mailmir (13 Februar 2022)

Hoi Heinileini (interessanter Name)

ja, bei der Optimierung MEINER Software. Es geht doch immer besser, oder? Und ich lerne gerne dazu wie ich mich selbst verbessern kann   

Zu deinen Fragen:
  diese kann ich (pauschal, mehr oder weniger) alle mit "Ja" beantworten. 

Es handelt sich um Applikationssoftware für Beckhoff-SPS. Hier bin ich eher ein Feind der "Eierlegenden Wollmilchsau" **hahaha**
Es geht also nicht darum das ich derzeit ein akutes Zeitproblem habe, es geht um's lernen und selbst verbessern.


----------



## Mrtain (13 Februar 2022)

4ms = Zykluszeit ?


----------



## Heinileini (13 Februar 2022)

Heinileini schrieb:


> - Was machst Du denn in Deiner Software und in welcher Sprache programmierst Du?
> - Verwendest Du ProgrammSchleifen?
> - Hast Du damit zu kämpfen, dass die ZyklusZeit "sporadisch" in die Höhe geht - oder regelmässig in jedem Zyklus zu hoch liegt?
> - Verwendest Du häufig "vorgefertigte" FCs/FBs, bei denen Du nicht sehen/abschätzen kannst, was intern abläuft?
> - Könnte es sein, dass einige davon als "eierlegende Wollmilchsau" konzipiert sind und Du nur ein Minimum der Möglichkeiten nutzt, will sagen, dass Du unnötig viel Ballast mitschleppst?





mailmir schrieb:


> Zu deinen Fragen:
> diese kann ich (pauschal, mehr oder weniger) alle mit "*Ja*" beantworten.


 Ach so.


----------



## Mrtain (13 Februar 2022)

Heinileini schrieb:


> Ach so.


Ein Fall für die Glaskugel


----------



## mailmir (13 Februar 2022)

Hoi Martain,

warum Glaskugel?

Heinileini: Genauer hingucken, ob der Programmierer (Du!) geschlampt hat?  
Antwort: JA, nicht unbedingt geschlampt, aber besser machen könnte.

Heinileini: Verwendest Du ProgrammSchleifen?
Antwort: JA, ich verwende Programmschleifen für initialisierungen (einmalig beim Start)

Heinileini: Verwendest Du häufig "vorgefertigte" FCs/FBs, bei denen Du nicht sehen/abschätzen kannst, was intern abläuft?
Antwort: JA, Bibliotheken vom Hersteller (Beckhoff)

Heinileini: Was machst Du denn in Deiner Software und in welcher Sprache programmierst Du? 
Antwort: Applikation für eine Heizungs-/Lüftungssteuerung

Heinileini: . . . . Frage nach der Eierlegenden Wollmilchsau
Antwort: Nein

Martain: 4ms = Zycluszeit?
Antwort: Nein, die ist 20ms, 4 ms braucht die Applikation derzeit. Wenn dann noch die Kommunikation mit den Ein-/Ausgangsklemmen dazu kommt wird die Zeit natürlich höher sein.


----------



## Gleichrichter1 (14 Februar 2022)

Beckhoff hat doch eine *feste* Zyklusszeit, die du einstellen kannst. Je nach Programm und Rechnerleistung hast du dann eine höhere System- Auslastung.


----------



## StructuredTrash (14 Februar 2022)

Mit GetCPUCounter-FBs aus der Tc2_System-Lib kann man Zeiten für Programmabschnitte messen.


----------



## Guga (14 Februar 2022)

In der Utility-Bibliothek gibt es den "Profiler" Baustein. Eine Instanz musst du 2x, quasi als Klammer um den interesssanten Code herum aufrufen.
Du erhälst dann die Min/Max und Average Zeit des Codes zwischen den Aufrufen..

Irgendwann (ich warte da schon eine ganze Weile darauf und hoffe auf die 4026, also in ca 1/2 Jahr) soll es dann eine (kostenpflichtige) Function TE1210 geben die per Click mir diese Werte für alle Bausteine/Aufrufhierarchien oder so herausgeben soll. 

Guga


----------



## mailmir (14 Februar 2022)

Hoi, DANKE für eure Antworten, das werde ich mir am Wochenende mal anschauen und meiner SPS "auf den Zahn fühlen.   

@Guga 
Das klingt SEHR INTERESSANT


----------



## KLM (14 Februar 2022)

Deinen eigenen Code und darin enthaltene "Zeitfresser" oder Ressourcenfresser ganz allgemein kann man in der nativen CODESYS 3.5 durch Add-ons finden. Bei WAGO kann man die auch verwenden, bei Beckhoff kann ich es nicht beurteilen, aber einen Blick ist es sicherlich wert.
https://store.codesys.com/de/codesys-profiler.html
https://store.codesys.com/de/codesys-static-analysis.html


----------



## Guga (15 Februar 2022)

@KLM. Beckhoff nutzt zwar den CodeSys PLC-Anteil hat aber eine eigene Runtime. 
Also anders als mit Wago/Schneider Electric... die komplett 3S nutzen.
Das Profiler AddOn von 3S wird mit Beckhoff nicht funktionieren. Das Beckhoff Equivalent ist dann die TE1210.


----------



## oliver.tonn (15 Februar 2022)

Guga schrieb:


> @KLM. Beckhoff nutzt zwar den CodeSys PLC-Anteil hat aber eine eigene Runtime.
> Also anders als mit Wago/Schneider Electric... die komplett 3S nutzen.
> Das Profiler AddOn von 3S wird mit Beckhoff nicht funktionieren. Das Beckhoff Equivalent ist dann die TE1210.


Rein Interessehalber, hat Beckhoff wirklich eine komplett selbst Entwickelte Runtime oder haben die die Codesys Runtime angepasst?


----------



## mailmir (18 Februar 2022)

oliver.tonn schrieb:


> Rein Interessehalber, hat Beckhoff wirklich eine komplett selbst Entwickelte Runtime oder haben die die Codesys Runtime angepasst?


Beckhoff hat es komplett selbst entwickelt. TwinCat 3 war früher im VisualStudio implementiert. Jetzt kannst du auch die eigene Entwicklungsumgebung ohne VisualStudio installieren

@Zeitfresser
DANKE für alle Antworten. Es gibt viel zu tun / testen.


----------



## oliver.tonn (18 Februar 2022)

mailmir schrieb:


> Beckhoff hat es komplett selbst entwickelt. TwinCat 3 war früher im VisualStudio implementiert. Jetzt kannst du auch die eigene Entwicklungsumgebung ohne VisualStudio installieren


Es ist auch weiterhin in VS integriert, die XAE Shell ist die Visual Studio Shell, was beim Start auch zu lesen ist.
Die Runtime mag eine komplette Eigenentwicklung sein, was ja meine Frage war, aber bei der Entwicklungsumgebung ist noch einiges von 3S (Jetzt Codesys) dabei.


----------

