Verwendung von BOOL

Lipperlandstern

Level-3
Beiträge
6.005
Reaktionspunkte
1.726
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.

Ich habe den Baustein FC10 zur Laufzeitüberwachung (siehe Anhang)

Trage ich bei LS (Ausgang des Bausteins) einen Merker ein geht das wunderbar, auch mit einer Lokalvariable gibt es kein Problem.
Nur wenn ich ein BOOL nach DB101.DBX16.0 klappt es nicht. Schreibe ich ein Anfang des Bausteins ein OPN DB101 und schreibe dann an den LS ein DBX16.0 funktioniert es wieder........

Hat jemand ne Idee ?????

Anzumerken ist das der Ausgang LS gesetzt wird.
 

Anhänge

  • fc10.jpg
    fc10.jpg
    29,5 KB · Aufrufe: 49
Hallo!

Was funktioniert nicht?
Wird das Datenbausteinbit nicht gesetzt oder lässt sich das DBx.DBXy nicht anschreiben an dein Baustein?

Poste mal den Bausteinaufruf in AWL mit dem Datenbausteinbit (wenn es sich anschreiben lässt)

godi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ach so.... Das Bit zB DB101.DBX16.0 bleibt durch den FC10 gesetzt obwohl die Setzbedingenungen nicht mehr da sind und das Bit zurückgesetzt wurde.


Dieses "Phenomen" tritt bei Merkern nicht auf.
 
Problem

nicht zyklische Zuweisungen (dazu gehört auch S/R) in Bausteinen auf OUT bringen meist Probleme. Besser man nimmt für sowas IN_OUT oder macht es anders.

André
 
Siehe dazu die folgende Siemens-FAQ:

Warum liefert eine Funktion bei den OUT-Parametern sporadisch falsche Rückgabewerte und was ist bei der Parametrierung der Ein- und Ausgangsparameter zu beachten?

2. Versorgung der elementaren Ein- und Ausgangsparameter

Bei der Versorgung von elementaren Formalparametern (z.B. die Datentypen BOOL, BYTE, WORD oder DWORD) der Schnittstelle einer Funktion sind zwei Fälle zu unterscheiden.
  1. Der elementare Formalparameter wird mit einem Merker, einem Ein- oder Ausgang aus dem Prozessabbild oder aus dem Lokaldatenstack (L-Stack) des aufrufenden Bausteines versorgt.
    In diesem Fall arbeitet der Code der Funktion mit einem bereichsübergreifenden Zeiger direkt(!) auf diesen elementaren Aktualparametern (z.B. P#E0.0, P#M0.0).
  2. Der elementare Formalparameter wird mit einer Konstanten oder einem Datenbausteinelement versorgt.
    In diesem Fall wird der Wert des Aktualparameters vor dem Aufruf der Funktion in den L-Stack des aufrufenden Bausteines kopiert. Der Code der Funktion arbeitet dann mit einem bereichsübergreifenden Zeiger auf diesen Lokaldatenbereich des aufrufenden Bausteines.
    Beachten Sie bitte, dass bei Ausgangsparametern keine Initialisierung erfolgt und die Eingangsparameter nicht gelöscht werden. Deshalb ist in diesem Fall darauf zu achten, dass Eingänge nur gelesen und Ausgänge in jedem Zyklus geschrieben werden. Bei Befehlen wie "S" oder "R" wird das Signal nur abhängig vom VKE geschrieben. Deshalb sollten Sie diese Befehle durch die Zuweisung "=" ersetzen oder die Werte vor der Abfrage initialisieren.
    Wenn Sie das Beschreiben der Werte nicht in jedem Zyklus sicherstellen können, sollten Sie einen IN/OUT- Parameter verwenden.
Abhilfe:
  • Wenn bei einem FC eine OUTPUT-Variable beim Aufruf mit einer DB-Adresse versorgt und diese OUTPUT-Variable im FC anschließend mittels Setz- bzw. Rücksetz-Befehl in einen definierten Zustand gesetzt werden soll, so führt der Aufruf dazu, dass der S- bzw. R-Befehl sich wie ein =-Befehl auswirkt. Die Ursache hierfür liegt darin, dass die beim FC-Aufruf mit DB-Adressen versorgten OUTPUT-Variablen beim Aufruf über den L-Stack versorgt werden. Sollte nun die Bedingung für den R- bzw. S-Befehl nicht mehr erfüllt sein, wird die OUTPUT-Variable nicht mehr beschrieben. Somit wird die DB-Zelle mit einem zufällig in dieser Lokal-Stack-Adresse stehenden Wert versorgt. In diesem Fall empfehlen wir Ihnen als Abhilfe die OUTPUT-Variable durch eine IN/OUT-Variable zu ersetzten. Dadurch wird die Lokal-Stack-Adresse vor dem Aufruf durch den Inhalt der DB-Adresse definiert vorbelegt.
  • Das Verhalten kann auch auftreten, wenn der FC mehrfach aufgerufen wird und/oder DB-Variablen als Aktualwerte benutzt werden. Beachten Sie dabei bitte die Hinweise aus der STEP 7-Onlinehilfe "Vermeiden von Fehlern beim Aufruf von Bausteinen". Die OUT-Parameter in einem FC müssen bei jedem Bausteinaufruf im Zyklus beschrieben werden.
Gruß Kai
 
Zurück
Oben