Step 7 Setzen von bool´schen Ausgangsparametern bei FC´s

HelmiMUC

Level-1
Beiträge
95
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich verstehe momentan nicht, warum folgendes Konstrukt funktioniert:

Ich habe einen FC und setze in diesem einen bool´schen Ausgangsparameter.
Und dieser bleibt gesetzt. Aber nur warum? - Ich sehe die Outs wie Temp-Variablen
an. Die also am Ende des Bausteins ihren Zustand wieder "verlieren".

Anbei mal ein Beispiel

Bild002.jpg
 
Ich sehe die Outs wie Temp-Variablen
an. Die also am Ende des Bausteins ihren Zustand wieder "verlieren".
Ja, genau.
Und genau wie bei den Temps ist ihr Zustand ohne Zuweisung undefiniert und kann damit eben auch 1 sein.

Und Setzen/Rücksetzen ist nun mal keine Zuweisung, da der Aufruf nur bedingt stattfindet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich verstehe momentan nicht, warum folgendes Konstrukt funktioniert:

Ich habe einen FC und setze in diesem einen bool´schen Ausgangsparameter.
Und dieser bleibt gesetzt. Aber nur warum? - Ich sehe die Outs wie Temp-Variablen
an. Die also am Ende des Bausteins ihren Zustand wieder "verlieren".

Anbei mal ein Beispiel

Anhang anzeigen 21249

Der Ausgang (A100.0) den du gesetzt hast, ist aber Global
und bleibt gesetzt bist du ihn wieder zurücksetzt. Was du in
deiner Online Ansicht des FC18 siehst, ist der Zustand mit dem
angelegten Variablen E100.0; E100.1 und A100.0 (wenn du den
Baustein nur einmal im Programm verwendest)
 
Der Ausgang (A100.0) den du gesetzt hast, ist aber Global
und bleibt gesetzt bist du ihn wieder zurücksetzt. Was du in
deiner Online Ansicht des FC18 siehst, ist der Zustand mit dem
angelegten Variablen E100.0; E100.1 und A100.0 (wenn du den
Baustein nur einmal im Programm verwendest)

Danke für die Erklärung!

Ich habe nun mal an den OUT-Parameter des FC´s eine Temp-Variable des aufrufenden
Bausteins gehängt und im nächsten Netzwerk die Temp-Variable auf den Ausgang gesetzt.

Das Verhalten ist das gleiche - aber warum funktionierts auch mit der Temp-Variablen?
(auch ohne dem Beschreiben des Ausgangs durch die Temp-Variable funktionierts)
 
Das kann mit Temponären Variablen funktionieren, wenn dieser
Speicherbereich im Programm an anderer Stelle nicht noch einmal
verwendet wird bzw überschrieben wird. Der Temponäre Speicherbereich
wird geteilt, mal verwendet der Baustein ihn mal ein anderer.
Deshalb solltest du den temporären Speicherbereich nur innerhalb eines
Bausteins verwenden, über Bausteingrenzen kann muß er aber nicht stabil
sein.
 
also sollte man auf das Setzen von Ausgängen verzichten, da es nicht sicher ist, dass der Speicherbereich immer der Gleiche ist?
Nö, sondern man sollte an dieser Stelle nicht OUT sondern IN/OUT verwenden. So bekommt der Ausgang beim Aufruf des Bausteins einen definierten Zustand (meist den aus dem letzten Zyklus).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du solltest beim setzen bzw. zuweisen von Temponären Variablen vorsichtig sein,
weil an andrer stelle in einen langen Programm ein andrer Baustein auf diesen
Speicherbereich zugreifen kann.

Bei deinen FC ist es ja so das du den lokalen IN, OUT und INOUT Variablen zuweist,
die dann in deinen fall ja sogar globale Variablen sind.

Um es zu verstehen Rufe doch deinen FC zweimal auf mit unterschiedlichen globalen
Variablen auf und beobachte ihn.
 
Der Out des FC funktioniert und bleibt gesetzt, weil "außen" beim Bausteinaufruf als Aktualoperand ein Ausgang (A100.0) angeschaltet ist.
Hilfe zu AWL > Parameterübergabe schrieb:
Wenn Merker, Eingänge, Ausgänge, Peripherieeingänge oder Peripherieausgänge als Aktualoperanden an einer Funktion verwendet werden, werden diese anders behandelt als die anderen Operanden. Die Aktualisierung erfolgt hier nicht über den L-Stack, sondern direkt.
Der aufgerufene Baustein kann aber nicht erkennen, ob der Aktualparameter eine Variable aus diesen speziellen Speicherbereichen ist oder ein DBXa.b oder ein La.b, daher sollte man immer so programmieren, als ob es diese Siemens-Ausnahmeregel nicht gäbe.
Hilfe zu AWL > Parameterübergabe schrieb:
Warnung

Sorgen Sie bei der Programmierung des aufgerufenen Bausteins dafür, daß die als OUTPUT deklarierten Parameter auch beschrieben werden. Sonst sind die ausgegebenen Werte zufällig! Bei Funktionsbausteinen bekommt man den vom letzen Aufruf gemerkten Wert aus dem Instanz-DB, bei Funktionen den zufällig auf dem L-Stack liegenden Wert.

Soll ein Übergabeparameter Informationen in den FC bringen dann muß das ein IN-Parameter sein.
Soll er Informationen aus dem FC bringen, dann muß das ein OUT-Parameter sein.
Soll er zunächst Informationen in den FC bringen (das Wissen des aktuellen Zustands) und anschließend den eventuell veränderten Zustand aus dem FC speichern, dann muß das logischerweise ein IN_OUT-Parameter sein.

Harald
 

Anhänge

  • Hilfe_AWL_Parameterübergabe.JPG
    Hilfe_AWL_Parameterübergabe.JPG
    123,3 KB · Aufrufe: 72
Zurück
Oben