Performance Funktion vs. Funktionsblock, Codesys 2.3

corcken

Member
Beiträge
18
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Ich habe mich mit meinem Kollegen gefragt wie groß wohl der Unterschied in der Performance zwischen einem Funktionsblock und einer Funktion ist. Für den Funktionsblock wird ja eine Instanz angelegt und da haben wir uns gefragt, ob das insgesamt mehr Zykluszeit frisst als wenn man einen Block als Funktion schreibt.

Die Speicherfähigkeit von lokalen Variablen über einen Zyklus hinaus benötigen wir nicht.
Die Einschränkung bei der Funktion, neben dem Speicher, ist dass der Block nur einen Ausgang hat. Wir benötigen in unserem Fall mehr als einen Ausgang. Es stehen uns Globale Strukturen (als Arrays) zur Verfügung, in die wir direkt schreiben können. Bei einem Funktionsblock würden wir spätestens nach dem Ausgang in die globale Strucktur schreiben. Bei einer Funktion müssten wir das dann bereits in der Funktion machen.
Das würde dann so aussehen: M_Motor[Nummer].Endlage_Links:=Endlage_Links;

Würde eine Funktion hier weniger Zeit benötigen, oder tut sich das nichts?
Der Nachteil, dass eine Funktion nicht online zu betrachten ist, vernachlässigen wir hier. Der Code ist ziemlich simpel ist und alle relevanten Variablen sind global einsehbar sind.
Mir ist auch bewußt, das nicht jeder es mag wenn Variablen nicht über die Schnittstelle geführt werden. Das wird von uns in der Regel auch so gemacht. In diesem Fall würde es die Übersichtlichkeit aber einschränken (Ich hoffe ich werde hier nicht deswegen gesteinigt ;-) ).
 

JSEngineering

Well-known member
Beiträge
1.139
Punkte Reaktionen
291
Bei einem Funktionsblock würden wir spätestens nach dem Ausgang in die globale Strucktur schreiben. Bei einer Funktion müssten wir das dann bereits in der Funktion machen.
Das würde dann so aussehen: M_Motor[Nummer].Endlage_Links:=Endlage_Links;
Könnt Ihr nicht den UDT als Rückgabewert angeben?

M_Motor[Nummer] := MeineFunktion(...);

Dann brauchst Du nur in der Funktion schreiben

MeineFunktion.Endlage_Links := ...
 
OP
C

corcken

Member
Beiträge
18
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Dann wäre ich aber auf einen Rückgabewert festgelegt und müsste unterschiedliche Funktionen für unterschiedliche Rückgabewerte erstellen. Nur durch das globale Schreiben in der Funktion könnte ich mehr als ein Ergebnis aus der Funktion bekommen.
Mir geht es aber insbesondere darum, ob eine Funktion weniger Zeit in der Abarbeitung benötigt als ein Funktionsblock?
Vielleicht weil sie keine Instanz anlegt und deshalb weniger Overhead hat.
 

jensemann

Well-known member
Beiträge
141
Punkte Reaktionen
25
Wenn der Code ziemlich simpel ist, wie du schreibst, kann es auch nicht allzuviel Code sein. Dann bin ich mir sicher, dass sich das nicht messbar auf die Performanz auswirkt.
Und man kann auch eine komplexe Struktur durch eine Funktion beschreiben lassen wie z.B. ein Array of MotorStruct
 
Oben