-> Hier kostenlos registrieren
Hallo zusammen,
leidiges Thema, ja ich weiß. - Aber da ich gerade dazu "gezwungen" bin bei meinem Programm etwas Speicheroptimierung zu betreiben habe ich mir einen meiner
Funktionsbausteine mal vorgenommen und als FC erstellt. - Grundsätzlich meine ich den Unterschied zwischen FB und FC zu kennen und war deshalb auch der
Meinung ich sollte meinen Code als FB erstellen.
Folgenden Code habe ich nun als Funktion FC für eine S7-1214C erstellt und er funktioniert auch scheinbar korrekt wenn ich ihn mehrfach aufrufe:
Die Frage die ich mir nun stelle ist: Funktioniert der Code sicher immer als Funktion, oder wäre es besser weiter einen FB zu verwenden?
Prinzipiell hätte ich einen FB bevorzugt, da ich der Annahme bin das das sicherer ist, aber so langsam geht mir der Arbeitsspeicher aus,
da ich die Funktion mehrmals aufrufen muss und jede Instanz 1040 Byte Speicher belegt.
Gruß smartie
leidiges Thema, ja ich weiß. - Aber da ich gerade dazu "gezwungen" bin bei meinem Programm etwas Speicheroptimierung zu betreiben habe ich mir einen meiner
Funktionsbausteine mal vorgenommen und als FC erstellt. - Grundsätzlich meine ich den Unterschied zwischen FB und FC zu kennen und war deshalb auch der
Meinung ich sollte meinen Code als FB erstellen.
Folgenden Code habe ich nun als Funktion FC für eine S7-1214C erstellt und er funktioniert auch scheinbar korrekt wenn ich ihn mehrfach aufrufe:
Code:
FUNCTION "FC_1001 - Array_Char_Suche" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Daten_Array : Array [1 .. 1024] of Char;
Start : Bool;
Versatz : Int;
Zeichen : Byte;
END_VAR
VAR_OUTPUT
Position : Int;
Fertig : Bool;
END_VAR
VAR_TEMP
Zaehler_Max : Int;
Array_Max : Int;
Daten_Array_Index : Int;
END_VAR
BEGIN
// ARRAY_DURCHSUCHEN
// Die Funktion 'ARRAY_DURCHSUCHEN' durchsucht ein Array mit einer festen Länge von 1024 Byte
// nach dem am Eingang 'Zeichen' definierten Zeichen.
// Dabei kann über den Eingang 'Versatz' der Beginn der Suche im Array bestimmt werden. Wird
// als Versatz 0 eingestellt, beginnt die Suche mit dem ersten Zeichen des Array.
#Array_Max := 1024;
IF #Start = TRUE THEN GOTO Sprungmarke_1;
Sprungmarke_1:
#Position := -1;
#Fertig := FALSE;
#Zaehler_Max := #Array_Max - #Versatz;
GOTO Sprungmarke_2;
Sprungmarke_2:
FOR #Daten_Array_Index := #Versatz + 1 TO #Zaehler_Max DO
IF #Daten_Array[#Daten_Array_Index] = #Zeichen THEN
#Position := #Daten_Array_Index;
EXIT;
END_IF;
END_FOR;
#Fertig := TRUE;
ELSE;
#Fertig := FALSE;
END_IF;
END_FUNCTION
Die Frage die ich mir nun stelle ist: Funktioniert der Code sicher immer als Funktion, oder wäre es besser weiter einen FB zu verwenden?
Prinzipiell hätte ich einen FB bevorzugt, da ich der Annahme bin das das sicherer ist, aber so langsam geht mir der Arbeitsspeicher aus,
da ich die Funktion mehrmals aufrufen muss und jede Instanz 1040 Byte Speicher belegt.
Gruß smartie