-> Hier kostenlos registrieren
Hallo,
habe Verstdänisprobleme in Bezug auf Global definierte Variable, die unter anderem lokal in einem FB verwendet wird.
Ich habe ein Array welches ich in der Zukunft erweitern will. Dies will ich am Besten nur an einer Stelle im Programm machen. Dazu die Globale Konstante, die die obere Grenze des Array [0..i_max_Regler] definiert.
Globale Konstante deklariert:
VAR_GLOBAL CONSTANT
i_max_Regler:INT:=12; (*Größe Array of Temp_Regler_E/A*)
END_VAR
Diese Konstante definiert das Ende eines Array, im Moment zum Testen im PROGRAM Temperaturmessung deklariert.
PROGRAM Temperaturmessung
VAR
tre: ARRAY [0..i_max_Regler] OF Temp_Regler_E;
usw.
schnell2: Visu_Temp_Regler_Schnellzugriff
END_VAR
Im Programm Temperaturmessung gibt es den FB (schnell2: Visu_Temp_Regler_Schnellzugriff). In diesem Funktionbaustein wird die globale Konstante ebenfalls zu Festlegung der Array Größe verwendet.
FUNCTION_BLOCK Visu_Temp_Regler_Schnellzugriff
VAR_IN_OUT
TRE:Temp_Regler_E;
ar_TRE:ARRAY [0..i_max_Regler] OF TEMP_Regler_E;
END_VAR
VAR_EXTERNAL CONSTANT
i_max_Regler:INT:=12; (*Größe Array of Temp_Regler_E/A*)
END_VAR
Nun meine Frage: Ich habe festgestellt, das ich die globale Konstante nicht zwingend lokal deklarieren muss. Wenn ich diese komplett entferne, funktioniert die Festlegung des Array alleine über die Globale Deklarartion.
Im Fachbuch heißt es dazu: Auf ein Global deklarierte Variable kann von der POE lesend und schreibend zugegriffen werden. Hierzu muss die Variable in den anderen POEs unter VAR_EXTERNAL mit identischem Namen und identischem TYP angegeben werden.
Wenn ich diese lokale Deklaration VAR_EXTERNAL CONSTANT im Funktionsblock nicht angebe, taucht ja im Code des FB eine Variable auf, die erst einmal nicht deklariert ist. Das ist doch nicht gut.
Ich bin etwas irritiert, das ohne Bekanntgabe der Globalen Variable in der lokalen Deklartion des FB diese trotzdem abgearbeit wird.
Das heißt für mich: Ist eine Variable nicht LOKAL deklariert ist diese automatisch GLOBAL? Ich dachte in einem FB ist VAR_GLOBAL nicht zulässig?
Oder ist hier vom FB auszugehen, d.h. der FB kann keine globale Variable direkt bereitstellen aber trotzdem eine Globale direkt lesen?
Wie wird das am Besten und nach welchen Regeln gemacht.
Vielen Dank im Voraus.
Gruß König
habe Verstdänisprobleme in Bezug auf Global definierte Variable, die unter anderem lokal in einem FB verwendet wird.
Ich habe ein Array welches ich in der Zukunft erweitern will. Dies will ich am Besten nur an einer Stelle im Programm machen. Dazu die Globale Konstante, die die obere Grenze des Array [0..i_max_Regler] definiert.
Globale Konstante deklariert:
VAR_GLOBAL CONSTANT
i_max_Regler:INT:=12; (*Größe Array of Temp_Regler_E/A*)
END_VAR
Diese Konstante definiert das Ende eines Array, im Moment zum Testen im PROGRAM Temperaturmessung deklariert.
PROGRAM Temperaturmessung
VAR
tre: ARRAY [0..i_max_Regler] OF Temp_Regler_E;
usw.
schnell2: Visu_Temp_Regler_Schnellzugriff
END_VAR
Im Programm Temperaturmessung gibt es den FB (schnell2: Visu_Temp_Regler_Schnellzugriff). In diesem Funktionbaustein wird die globale Konstante ebenfalls zu Festlegung der Array Größe verwendet.
FUNCTION_BLOCK Visu_Temp_Regler_Schnellzugriff
VAR_IN_OUT
TRE:Temp_Regler_E;
ar_TRE:ARRAY [0..i_max_Regler] OF TEMP_Regler_E;
END_VAR
VAR_EXTERNAL CONSTANT
i_max_Regler:INT:=12; (*Größe Array of Temp_Regler_E/A*)
END_VAR
Nun meine Frage: Ich habe festgestellt, das ich die globale Konstante nicht zwingend lokal deklarieren muss. Wenn ich diese komplett entferne, funktioniert die Festlegung des Array alleine über die Globale Deklarartion.
Im Fachbuch heißt es dazu: Auf ein Global deklarierte Variable kann von der POE lesend und schreibend zugegriffen werden. Hierzu muss die Variable in den anderen POEs unter VAR_EXTERNAL mit identischem Namen und identischem TYP angegeben werden.
Wenn ich diese lokale Deklaration VAR_EXTERNAL CONSTANT im Funktionsblock nicht angebe, taucht ja im Code des FB eine Variable auf, die erst einmal nicht deklariert ist. Das ist doch nicht gut.
Ich bin etwas irritiert, das ohne Bekanntgabe der Globalen Variable in der lokalen Deklartion des FB diese trotzdem abgearbeit wird.
Das heißt für mich: Ist eine Variable nicht LOKAL deklariert ist diese automatisch GLOBAL? Ich dachte in einem FB ist VAR_GLOBAL nicht zulässig?
Oder ist hier vom FB auszugehen, d.h. der FB kann keine globale Variable direkt bereitstellen aber trotzdem eine Globale direkt lesen?
Wie wird das am Besten und nach welchen Regeln gemacht.
Vielen Dank im Voraus.
Gruß König