Step 7 Signalisierung von Störmeldungen

Tyson92

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

ich versuche gerade folgende Aufgabe umzusetzen.
111.JPG
222.JPG

Mein Code sieht aktuelle so aus:
Code:
FUNCTION FC2: WORD


VAR_INPUT
    XBit8_Stoerung: BOOL;
    XBit9_Quittieren: BOOL;
END_VAR


// Meldespeicher
IF XBit9_Quittieren = 1 THEN XBit10_Meldespeicher :=0; END_IF;
IF XBit8_Stoerung = 1 AND XBit11_Flankenmerker = 0 THEN XBit10_Meldespeicher :=1; END_IF;


// Anzeige
XBit0_Leuchtmelder := (XBit10_Meldespeicher AND XBit12_Blinktakt)OR(NOT XBit10_Meldespeicher AND XBit8_Stoerung);


FC2:= XBit0_Leuchtmelder; 


END_FUNCTION

Die Symboltabelle so:
333.JPG

Ich scheitere aktuell an der Umsetzung des Taktes, vielleicht auch an der Aufgabenstellung. Sollte man den FC irgendwie taktweise aufrufen oder ist die Umsetzung im FC besser/richtiger?

Grüße
 
Moin,
den Taktmerker kannst du direkt in der CPU einschalten und auf ein Merkerbyte legen. Wenn das nicht gewünscht ist, musst du 2 Timer miteinander toggeln lassen.

Den FC taktweise aufrufen, wird nicht sauber funktionieren: denn wenn der FC nicht abgearbeitet wird, wirst du die Störung auch nicht erfassen können.


LG Dirk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Antwort.
Das hat nun geklappt. Jetzt ist im OB1 an der Eingangsvariable "XBit12_Blinktakt" der "M50.2" (als Taktmerker) angeschlossen.

Leider hänge ich immer noch an der Umsetzung der Aufgabe.
Die Funktion wird immer wieder zyklisch abgearbeitet durch den Aufruf in OB1.
Beim Testen setze ich das Störungsbit auf 1 und das Leuchtmelderbit ist nur einmal kurz an und es blinkt nichts im Takt.

Ich verstehe aktuell nicht wo mein grundlegender Fehler ist, vielleicht kann mir jemand weiter helfen.

Grüße
 
Was passiert denn mit der Variable "XBit11_Flankenmerker"? Die wird auf 0 abgefragt, aber im Code von dir wird darauf nicht geschrieben.
Da fehlt das Nachbilden der Flankenerkennung (P in FUP), aber wenn das Bit "XBit11_Flankenmerker" immer auf Null ist, dann sollte es eigentlich blinken.

Blinkt denn das Merkerbit für den Blinktakt wenn du dir dieses z.B. in einer Variablentabelle anzeigen lässt?
 
Eigentlich dachte ich bis jetzt die Flankenauswertung ist mit der folgenden Code-Zeile umgesetzt.
Code:
[COLOR=#333333][FONT=Courier]IF XBit8_Stoerung = 1 AND XBit11_Flankenmerker = 0 THEN XBit10_Meldespeicher :=1; END_IF;[/FONT][/COLOR]
Wie kann ich hier die Flanke nachbilden? Ich werde aktuell aus den über die Suchfunktion gefundenen Beiträgen zu der Flankenauswertung nicht schlau.

Das Merkerbit M50.2 blinkt und wird an XBit12_Blinktakt im OB1 übergeben, XBit12 blinkt nicht.

Aufruf in OB1


999999.JPG
Aktueller Code
Code:
FUNCTION FC2: WORD

VAR_INPUT
    XBit8_Stoerung: BOOL;
    XBit9_Quittieren: BOOL;
    XBit12_Blinktakt: BOOL;
END_VAR

// Meldespeicher
IF XBit9_Quittieren = 1 THEN XBit10_Meldespeicher :=0; END_IF;
IF XBit8_Stoerung = 1 AND XBit11_Flankenmerker = 0 THEN XBit10_Meldespeicher :=1; END_IF;

// Anzeige
XBit0_Leuchtmelder := (XBit10_Meldespeicher AND XBit12_Blinktakt)OR(NOT XBit10_Meldespeicher AND XBit8_Stoerung);

FC2:= XBit0_Leuchtmelder; 

END_FUNCTION
 
Zurück
Oben