FC parametrieren Step7

OKL

Level-1
Beiträge
143
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Gemeinde.

Ich habe einen FC erstellt, der als Übergabeparameter die Türnummer Byte (welche Tür geöffnet/geschlossen wurde), dann Auf bool (ob Tür auf) und ZU bool (ob Tür geschlossen wurde)

Ein anderer FC ruft diesen auf. Hier ein Screenshot:

03.jpg


Mein Problem ist, wie bekomme ich die negative Flanke zum EN, dass auch die beachtet wird? Oder wie könnte ich es besser realisieren? Der FC muss nur wissen, welche Tür gerade geöffnet/geschlossen wurde. Er schreibt das in einen DB mit. Durch eine Umstrukturierung (habe vorher den FC auch für die Negative Flanke separat aufgerufen) wollte ich das Ganze vereinfachen.

Danke für euren Rat.

MfG

Olaf
 
Warum übergibst du nicht alles dem FC und machst die Flankenerkennung im FC oder gleich in einem FB
da kannst du dir für die Flankenmerker STAT-Variablen deklarieren.
Diesen Baustein kannst du dann für jede Tür verwenden.
 
Hallo crash,

ich schnuppere erst seit paar Wochen in die Materie. Daher dachte ich, dass ein FC sich das nicht merken kann, wenn dann irgend wo noch eine andere Tür aufgeht und die eine noch nicht geschlossen ist. Mit FBs habe ich mich noch nicht beschäftigt, daher der Versuch mit einem FC.

Gibt es irgendwo im Netz vielleicht ein Beispiel, wo ein Ähnliches Szenario realisiert wurde?

Du meinst also, ich sollte (wenn ich mit FC weitermache) dem FC ohne Flanke das Signal der geöffneten Tür übergeben. Im FC selber könnte ich ja dann die Flanke auswerten. Aber was ist, wenn eine andere Tür den FC noch aufruft? Wie kann ich das abfangen?

Ein freundlicher Gruß für die nette Hilfe
 
Wenn du nur die Verbindungslinie herstellen willst dann geht das so nicht.
(P) und (N) parallel will Step7 so nicht.
Dann musst du (P) und (N) gegen POS und NEG austauschen dann gehts.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo crash,

ich schnuppere erst seit paar Wochen in die Materie. Daher dachte ich, dass ein FC sich das nicht merken kann, wenn dann irgend wo noch eine andere Tür aufgeht und die eine noch nicht geschlossen ist. Mit FBs habe ich mich noch nicht beschäftigt, daher der Versuch mit einem FC.

Wenn du die Flankenerkennung im FC machst musst du die Flankenmerker über die Schnittstelle (IN/OUT) übergeben
da der FC wie du richtig bemerkt hast sich nix merken kann.
Daher ja mein Vorschlag einen FB zu nehmen da der ja ein Gedächtnis hat --> den Instanz-Datenbaustein.
 
Danke Crash und Lipperlandstern.

Ich habe mich eben für einen FB entschieden.

Die Netzwerke habe ich vom FC reinkopiert. Als IN-Parameter die Tür-Nummer eingetragen und intern (TEMP) die Bool-Variablen Door_auf und Door_zu.

Jetzt geht die Tür auf. Der FB bekommt am Eingang EN ein Signal. Wie kann ich dieses abfangen und zu den door_auf und door_zu zuordnen? (Flanken)

Der FB legt für jeden offenen Vorgang einen Instanzdatenbaustein an? Wenn die Tür wieder zu und kein Signal mehr, wird dieser wieder entfernt?

Mit Lektüre für Step7 sieht es auch etwas schlecht aus. Bei Google findet man zwar ab und zu etwas, aber oft nicht das, was man gerade braucht.

Thanks
 
Ups

Gehe ich Recht in der Annahme, dass die Instanzdbs mti der Nummer des FBs beginnen? Habe ja schon einen DB1, daher entschied ich mich, den FB in FB100 umzubenennen. Dann können die Instanzdbs 101, 102.. sein

Schwere Geburt
 
Ups

Gehe ich Recht in der Annahme, dass die Instanzdbs mti der Nummer des FBs beginnen? Habe ja schon einen DB1, daher entschied ich mich, den FB in FB100 umzubenennen. Dann können die Instanzdbs 101, 102.. sein

Schwere Geburt

Das ist eigentlich egal.

Gruss Daniel
 
Code:
//Tür auf
      U     #Tuerschalter
      FP    #Flankenmerker_auf
      S     #door_auf
      R     #door_zu


// Tür zu
      U     #Tuerschalter
      FN    #Flankenmerker_zu
      S     #door_zu
      R     #door_auf
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab mal ne AWL-Quelle davon erstellt.
Unter Quellen eine neue AWL-Quelle einfügen.
Dann den Code unten in die AWL-Quelle einfügen und speichern und dann übersetzen,
dann wird der FC1 erstellt.

Code:
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1


VAR_INPUT
  Tuerschalter : BOOL ;    
END_VAR
VAR_IN_OUT
  door_auf : BOOL ;    
  door_zu : BOOL ;    
  Flankenmerker_auf : BOOL ;    
  Flankenmerker_zu : BOOL ;    
END_VAR
BEGIN
NETWORK
TITLE =

//Tür auf
      U     #Tuerschalter; 
      FP    #Flankenmerker_auf; 
      S     #door_auf; 
      R     #door_zu; 


// Tür zu
      U     #Tuerschalter; 
      FN    #Flankenmerker_zu; 
      S     #door_zu; 
      R     #door_auf; 

END_FUNCTION
 
Sorry

Hallo crash,

danke für dein Beispiel.

Ich arbeite gerade an der Lösung mit FB100. Dachte, das wäre die eleganteste Lösung?

Ich rufe nachdem die Tür aufgeht den FB100 auf. Übergabeparameter Tür. Interne Temp-Variablen Door_auf und Door_zu

Tür ist offen - und bei Aufruf erhält jede Tür einen eigenen DB.

SPS ging zwischenzeitlich mal in STOP, habs aber wieder hinbekommen.

Jetzt müsste ich aber im FB in jedem Netzwerk nicht direkt auf die Bauelemente gehen sonder immer den Flankenmerker benutzen? Sonst wird das ja immer ausgeführt...

Danke und sorry. ... habe die Gedächtnis-Idee gut gefunden.

Und Danke dalbi. - werde das aber der Übersichtlichket halber doch so machen - FB 100 und DB 101 für Tür 1...

Mein Problem ist, dass ich intern im FB erkennen muss, wann das Signal kommt und wann es wieder geht (Eingang EN) Dies muss ich intern beachten, da beim Kommen zwei Vorgänge gestartet werden und beim Gehen nur einer. Quasi eine Flankenerkennung und dann nur die einmalige Ausführung...

Danke für eure Hilfe
 
Zuletzt bearbeitet:
Hy OKL!!
Bitte für Flankenmerker im FB immer nur STATISCHE Variablen verwenden.
Solltest du dafür TEMP. Variablen verwenden, wird das zu unangenehmen Fehlern führen.
LG Gerhard
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Gerhard,

danke für den Tipp.

Ich suche noch krampfhaft nach einer Möglichkeit, vom Eingang EN des FBs (vom Eingangssignal) die positive Flanke und wenn das Signal wieder geht (die Tür wieder geschlossen ist) die negative Flanke herauszufinden.

im FC gibt es quasi einen Schließer. Wird dieser geöffnet, gelangt das Signal zum FB. Dort möchte ich über diesen Werte in einen DB eintragen. Wenn das Signal wieder geht, ebenfalls (Tür zu...)

Danke für Hinweise...
 
Zuletzt bearbeitet:
meinst du in etwa so?
Code:
U #sigEN
FP #flankepos1
S #türoffen
R #türzu
 
U #sigEN
FN #flankeneg1
S #türzu
R #türoffen

sehe gerade, dass crash das ja schon geschrieben hat :oops:
 
Zuletzt bearbeitet:
Hallo,

yep. Nur habe ich das sigEN nicht. Ich dachte, ich bekomme das auch heraus, sobald der FB im Eingang EN des FBs (der hat ja immer EN und ENO) das Signal anliegt. Ich möchte quasi dann in den DB schreiben... Tür X geöffnet und wenn das Signal wieder geht - Tür X geschlossen.

Geht das überhaupt?
 
Ich würde den FB nicht bedingt aufrufen sondern immer
und im FB dann die Flankenerkennung machen und entsprechend reagieren.
Wenn du im FB irgendwelche Bits setzt, dann werden die nicht zurückgesetzt wenn du den FB nicht mehr aufrufst, sondern behalten ihren Zustand.
Deinem FB übergibst du den Türkontakt als IN-Var.
Die Flankenmerker deklarierst du als STAT-Var.
 
Das ist schlecht...

Ich habe quasi 10 Türen. Öffnet sich eine oder mehrere, soll z. B. ein FB aufgerufen werden, der dann etwas in einen DB schreibt. Tür wieder zu, dann ebenalls.

Wie könnte ich das dann realisieren?

Hab momentan keine Idee. Dachte, dass der FB das kann... (Flankenerkennugn am Eingang)
 
Zurück
Oben