Step 7 FC (KOP): Temporäre Variablen initialisieren

K

Kallemann

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Ich habe hier eine FC, in der eine temporäre Variable vom Typ Boolean deklariert ist. Von Zeit zu Zeit nimmt diese Variable beim Aufruf der Funktion den zufälligen Wert "True" an, was nicht passieren darf. Momentan behelfe ich mir damit, die Variable im ersten Netzwerk zurückzusetzen, wenn sie den Wert "True" hat, ich denke aber, dass das so nicht wirklich "richtig" ist. Ich verwende meistens SCL, da wär's einfach. Aber KOP:confused:

Wie initialisiert man eigentlich temporäre Variablen in einer mit KOP geschriebenen FC?

Vielen Dank für Eure Hilfe. VG, Carsten.
 
Hallo,
du mußt einfach nur dafür sorgen, dass sie vor der ersten Verwendung definiert zugewiesen wird / worden ist.
Das kann auch ein Rücksetzen im ersten Netzwerk sein - besser wäre aber ein zuweisen (also das, was in AWL dem = entspricht).
So, wie du es beschreibst, würde ich sagen, dass mit der Variablen in dem FC nicht korrekt umgegangen wird ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Irgendwo in der Siemens-Hilfe habe ich gelesen, dass temporäre Variablen immer initialisiert werden sollen, weil sie durchaus zufällige Werte annehmen können. Ich bin sicher, dass ich korrekt mit der Variablen in der FC umgehe.

besser wäre aber ein zuweisen (also das, was in AWL dem = entspricht).

Ja, aber wie?

VG Carsten
 
In dem die Zuweisung wirklich in jedem Zyklus erfolgt.
Wenn diese z.B. innerhalb eines IF..Then-Konstrukt steht, ist das in der Regel nicht gegeben. Das entspreche eher dem Setzen/Rücksetzen.
PS: Du verwendest ja KOP statt SCL. Ich dachte anders herum.
Dann ist es noch einfacher: Das entsprechende Netzwerk mit der Zuweisung (=) abschließen und das Netzwerk nicht überspringen.


Wäre es eventuell möglich, den Code des FCs (als AWL-Text) zu posten? Dann ist es einfacher, konkret zu helfen.
 
Zuletzt bearbeitet:
Oh mei ... wenn du mit den Temp-Var richtig umgehen würdest, so würde das was vielleicht zufällig von irgendwo drinnen steht schlicht irrelevant sein,
weil korrekt umgehen ganz einfach nichts anderes heißt, wie IMMER (bei Verwendung der VAR) zuerst schreiben und danach lesen ... folglich ist auch vollkommen egal was vor dem Schreiben von irgendwo her vielleicht zufällig für Werte anliegen.
Das ist in SCL übrigens präzise die selbe Problematik (ganz im Gegenteil durch die üblichen IF Then Konstruckte ist es eigentlich sogar noch einfacher "Fehler" zu machen).

xMyTemp ist eine Bool-Var.

U xMyTemp
UN xMyTemp
= xMyTemp //ist jetzt immer LOW

O xMyTemp
ON xMyTemp
= xMyTemp //ist jetzt immher HIGH

Jetzt einfach auf KOP umschalten und et voila.

Mfg
Manuel
 
Es stellt sich jedesmal wieder als Fehler heraus in diesem Forum Fragen zu stellen.
Das würde ich jetzt ebenfalls ganz simpel mit "Kommt auf die Frage an" beantworten.

Für dein beschriebenes Verhalten gibt es genau 3 Möglichkeiten, wobei du 2 davon vollständig selbst in der Hand hast, und bei einer hast du mit AWL rumgespielt und die Warnung ignoriert.

1. Lesen vor Schreiben
2. Nur Lesen, ohne Schreiben im konkreten Zyklus
Streng genommen ist also 1/2 eigentlich das gleiche.
3. In der AWL-Ansicht Temp-Var hinzufügen (deklarieren), obwohl KOP bzw. FUP bereits Temp-Var (Absolut) bei Bausteinaufrufen verwendet.

Initialisieren in des Wortes eigentlichem Sinn ist nicht notwendig.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es stellt sich jedesmal wieder als Fehler heraus in diesem Forum Fragen zu stellen.

Das mußt du mir bitte einmal genauer erklären ...
Ich kann beim besten Willen an den gegebenen Antworten nichts ehrenrühriges erkennen - im Gegenteil : sie bezogen sich exakt auf deine Problemstellung.
Du hast natürlich in einem Recht - du solltest hier im Forum keine Fragen stellen, wenn du die Antworten und die daraus resultierenden Vorschläge dann sowieso nicht hören willst ...

Gruß
Larry
 
Zurück
Oben