Step 7 Frage zu Flanke

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

habe eine Frage zu Flanken…


Wenn M10.0 TRUE und der Eingang E0.0 eingeschaltet wird, dann soll über eine positive Flanke ein Start-Impuls für einen Motor gebildet werden.


FB3: Start-Impuls

Code:
U     M     10.0
U     E      0.0
FP    #m1
=     #StartMotor


Dieser Start-Impuls soll dann in einem anderen FB einen Motor starten.

FB4: Motor Start

Code:
U     #StartMotor
S     A      0.0


Aufruf im OB1:

Code:
CALL  FB3, DB3
StartMotor:=M100.0
 
CALL  FB4, DB4
StartMotor:=M100.0


Meine Frage:

Habe es mit PLCSIM getestet und da klappt das.

Aber funktioniert das wirklich immer, dass sich die SPS eine gebildete Flanke bis in einen anderen Baustein merkt?


Lieben Dank…
 
Aber funktioniert das wirklich immer, dass sich die SPS eine gebildete Flanke bis in einen anderen Baustein merkt?
Im Grundsatz ja. Flanke bedeutet Signal für einen SPS-Zyklus. Ob sich die SPS das Signal bis in einen anderen Baustein merken kann
liegt an dir. Wenn du die Flankenauswertung (hier #Start_Motor) in eine Temp Variable schreibst dann nicht unbedingt...
Du solltest auf jeden Fall eine globale Variable benutzen.
Lies dir mal die Erklärung zur Flanke in der Hilfe durch.

Gruß, Toki
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ob sich die SPS das Signal bis in einen anderen Baustein merken kann
liegt an dir. Wenn du die Flankenauswertung (hier #Start_Motor) in eine Temp Variable schreibst dann nicht unbedingt...
Du solltest auf jeden Fall eine globale Variable benutzen.
Gruß, Toki

Ok, danke schon mal Toki...

1)
Ich habe #StartMotor als OUT-Variable und #m1 als STAT-Variable deklariert; das passt doch, oder?

2)
Für die "Schnittstelle" zwischen beiden FB's habe ich einen Merker M100.0 aus der Symboltabelle bestimmt; könnte man das auch "eleganter" machen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber funktioniert das wirklich immer, dass sich die SPS eine gebildete Flanke bis in einen anderen Baustein merkt?

Warum sollte es denn nicht funktionieren?
Das Ergebnis der Flankenauswertung wird vom ersten FB in einen Merker und der 2te FB liest den Merker dann wieder....
Also warum nicht.

Und zur Frage ob das auch immer funktioniert....
SPSn sind im generellen zyklisch orientierte Lebewesen, die machen meistens in jedem Zyklus das selbe. :-D
 
Als was hast du "m1" angelegt?
und #m1 als STAT-Variable deklariert
denke die Frage hat sich schon geklärt ;)

Ob man das "eleganter" machen kann?? Denke das ist vollkommen OK!
Wenn du den Flankenimpuls über deine Out-Variable in den Merker M100.0 ausgibst und dieser sonst nirgends im Programm schreibend bearbeitet wird,
dann ist dieser bis zur nächsten Abarbeitung der Flankenauswertung gesetzt. Also genau so wie du es brauchst um diesen Merker als
Schnittstelle zwischen deinen FB´s zu nutzen...

Gruß, Torsten
 
SPSn sind im generellen zyklisch orientierte Lebewesen, die machen meistens in jedem Zyklus das selbe.
Jemand hier im Forum hat in der Signatur stehen: in der CPU steht nichts was nicht zuvor in deinem Verstand gestanden hat...
Deshalb muss ich korrigieren:
SPSn sind eigentlich dumm und ohne Eigenleben, die machen den Fehler (den du eventuell programmiert hast) jeden Zyklus wieder :) ...

Nur so als neunmalkluge Randbemerkung ;-)

Gruß, Torsten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du den Flankenimpuls über deine Out-Variable in den Merker M100.0 ausgibst und dieser sonst nirgends im Programm schreibend bearbeitet wird,
dann ist dieser bis zur nächsten Abarbeitung der Flankenauswertung gesetzt.
Gruß, Torsten

Prima, ich danke euch!

Dieser Merker M100.0 ist doch im Grunde immer nur für einen Zyklus gesetzt, oder?
 
Dieser Merker M100.0 ist doch im Grunde immer nur für einen Zyklus gesetzt, oder?
Sofern, wie von Ronin geschrieben, der FB zyklisch aufgerufen wird ja.
Aber beachte das das nicht die Zeitspanne vom OB1 Zyklus Anfang bis Ende ist,
sondern von Flankenauswertung bis Flankenauswertung. Die Zeitspanne mag der jeweiligen Zykluszeit entsprechen, doch Anfang und Ende dieser Zeitspanne ist anders.

Gruß, Toki
 
Zuviel Werbung?
-> Hier kostenlos registrieren
sofern du den FB3 in jedem Zyklus aufrufst, ja.

... aber warum denn das? Der Merker wird doch nur durch einen Flankenwechsel von 0 --> 1 gesetzt. :confused:

In diesem Merker ist ja quasi das Ergebnis der Flankenauswertung gespeichert. Wurde nun ein Flankenwechsel registriert, so ist dieser Merker für einen Zyklus (solange die Flanke gültig ist) lang TRUE.

Was hat das dann mit dem Aufruf vom FB zu tun?
 
Was hat das dann mit dem Aufruf vom FB zu tun?

Wenn du den FB3 azyklisch aufrufst wird auch die Flankenauswertung bzw. der Schreibzugriff auf deinen Merker azyklisch, der Merker wäre
dann länger als einen SPS-Zyklus auf 1.

spirit schrieb:
Dieser Merker M100.0 ist doch im Grunde immer nur für einen Zyklus gesetzt, oder?
....war schließlich deine Frage... Antwort:
Genau für einen FB-Zyklus: JA
Genau für einen SPS-Zyklus: Nicht zwingend... :cool:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute, ich habe ein Problem mit meiner Falnkenauswertung und hoffe jemand von euch kann mir vlt einen Tipp geben was falsch ist bzw was ändern müsste damit es läuft. Ich hab jetzt schon alles mögliche probiert, leider funktioniert es immer noch nicht....

hier meine Fotos zum Problem....

Das Hauptproblem macht irgendwie die negative Flankenauswertung.
 

Anhänge

  • Flankenauswertung.jpg
    Flankenauswertung.jpg
    93,3 KB · Aufrufe: 28
  • Flankenauswertung mit Operand Setzen.jpg
    Flankenauswertung mit Operand Setzen.jpg
    111,8 KB · Aufrufe: 23
Abgesehen, dass der Programmierstil zu diskutieren ist.:rolleyes:
Sind deine Variablen als statisch in einem FB deklariert, sonst wird das nix.
Aber lesen des Handbuches hilft auch in diesem Fall.


bike
 
Was meinst du mit Programmierstil zu diskutiert? ;)
Ich habe kein Handbuch, hab aber eben online mal geschaut und hab da ein älteres gefunden aber nicht den Abschnitt wo die Flankenauswertung erläutert wird. Hab bisher meistens mit der normalen Hilfe gearbeitet.
Ich versteh nur nicht warum die negative Flanke auch auf True schaltet wenn die Variable von 0 auf 1 wechselt (Sollte ja eig bei 1 auf 0 erst passieren)

Bei der Bitverknüpfung "P=" kann ich mir ja am Eingang eine Logik (Startbedingungen) die in Grundstellung False ist und wenn z.B. S1 geschaltet wird auf True geht. Unter dem Baustein "P=" steht ja der Merker für den vorherigen Zustand. Wenn eine positive Flanke der Logik (S1 hat geschaltet) erfolgt, wird ja der Operand der über "P=" steht gesetzt.
Ist das so richtig??
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Merker?
Durch das "#" wird doch angezeigt, dass du lokal Variablen verwendest.
Daher die Frage nach statisch oder nicht.
Du musst dir in einem FB die Variablen als statisch definieren und dann merkt sich die auch welchen Zustand sie zuletzt hatte.



bike
 
Ich hab das ganze in einem FB mit eigenem DB laufen und hab die Flankenmerker in Bereich static deklariert. Muss ich meine Variable erst dem Flankenmerker zuweisen?
Meine Variable hol ich aus dem Globalen DB und die werden über Input meines Bausteines eingelesen.

LG
 
Nachdem ich nicht verstanden habe was du wirklich willst, kann ich nicht schreiben was du tun oder lassen sollst.
Du kannst sicher sein, dass Flanken funktionieren, wenn du FLM statisch deklariert hast und nach dem Anlegen den IDB neu erstellst.
Welche CPU hast du denn? Das schaut so irgendwie nach 1200er aus....


bike
 
Zurück
Oben