Positive Flanke erstellen -HILFE-

Zuviel Werbung?
-> Hier kostenlos registrieren
Dein Bild ist nicht korrekt.

Wie sieht denn die Lösung aus der "Lösung nach IEC"?

Bei Codesys habe ich die Aufgabe mit 2 UND gattern gelöst, bei Step 7 mit zwei Netzwerken.
Die IEC-konforme Lösung muss m.M.n. genau so aussehen, wie Du es selbst hier beschrieben hast:
Zwei unabhängige UND-Gatter.
Das erste macht die Prüfung der beiden Zustände. So wie Dein UND-Gatter auf dem Bild.
Das 2. hat nur einen! Eingang, mit dem der Zustand des Signals auf den Merker übertragen wird.
 
Code:
VAR_INPUT
xSignal : BOOL := FALSE;
END_VAR
VAR_OUTPUT
xOut : BOOL := FALSE;
END_VAR
VAR
xOldSignal : BOOL := FALSE;
END_VAR


// VARIANTE 1:
xOut := FALSE;
(* Pos Flanke *)
IF xSignal AND NOT xOldSignal THEN
   xOut := TRUE;
   ; (* Code der bei Flanke ausgeführt werden soll *)
END_IF;
xOldSignal := xSignal;


// VARIANTE 2:
(* Oder bei nur wirklich einem Signal geht das auch so *)
xOut := xSignal AND NOT xOldSignal;
xOldSignal := xSignal;
(* Das sollte man so auch einfach in FUP, KOP, usw. umsetzen können *)


(* Nur der Vollständigkeit halber: *)
(* Neg Flanke *)
IF NOT xSignal AND xOldSignal THEN
   ; (* Code der bei Flanke ausgeführt werden soll *)
END_IF;
xOldSignal := xSignal;

Steht ja nicht in der Aufgabe, dass es nicht ST sein darf - oder?
 
Zuletzt bearbeitet:
Hallo, 10 Jahre später noch immer die gleiche Aufgabe und genauso bescheiden vormuliert. Sie haben nicht aus der Formulierung gelernt xD

Meine Frage zu dem Thema um nochmal auf das RS-Glied, welches von Chipchap angesprochen wurde. Wird das nicht benötigt um ein "Flackern" der Schaltung zu verhindern? mit der Lösung wiederholt sich doch das Ein- bzw Ausschalten des Ausganges alle 4 Zyklen, oder täusche ich mich da?

MfG
Tobias
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tobias
Du könntest wenigstens erwähnen, auf welchen Beitrag oder welche Beiträge sich deine Anmerkungen und deine Frage beziehen. Oder erwartest du, daß irgendjemand nun alle 44 bisherigen Beiträge liest, um deine Frage zu verstehen?
 
Was ist denn dein Problem? Was möchtest du machen? Welche Steuerung hast du? Was hast du schon programmiert und was funktioniert davon nicht? Ich möchte mir hier jetzt auch nicht 44 Beiträge durchlesen um evtl. eine Vermutung zu haben was du meinst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
VAR_INPUT xSignal : BOOL := FALSE; END_VAR VAR_OUTPUT xOut : BOOL := FALSE; END_VAR VAR xOldSignal : BOOL := FALSE; END_VAR // VARIANTE 1: xOut := FALSE; (* Pos Flanke *) IF xSignal AND NOT xOldSignal THEN xOut := TRUE; ; (* Code der bei Flanke ausgeführt werden soll *) END_IF; xOldSignal := xSignal; // VARIANTE 2: (* Oder bei nur wirklich einem Signal geht das auch so *) xOut := xSignal AND NOT xOldSignal; xOldSignal := xSignal; (* Das sollte man so auch einfach in FUP, KOP, usw. umsetzen können *) (* Nur der Vollständigkeit halber: *) (* Neg Flanke *) IF NOT xSignal AND xOldSignal THEN ; (* Code der bei Flanke ausgeführt werden soll *) END_IF; xOldSignal := xSignal;
Es geht mir dabei z.B um diese Funktion, bzw allgemein eine Flanke zu erstellen ohne den vorgefertigten Baustein.
Alle antworten waren bis jetzt (ob als FUB oder Strukturierten Text) so aufgebaut, allerdings selbst wenn sie in 2 Netzwerken drinnen sind entsteht dabei doch in der 3. Wiederholung des Codes erneut ein positives Signal. Im Vergleich zur "fertigen Flanke" ist das doch ein Unterschied. Meine Frage dazu ist einfach, ob da nicht noch ein RS mit eingefügt werden muss, um das zu verhindern, oder ob diese Funktion irgendwie als Grundfunktion der Flanke impliziert wird.
 
Die Aufgabe lautet:

Mit einem Programm soll erkannt werden, ob ein Eingangssignal EIN eine positive Flanke aufweist. Das Programm "Positive Flanke" soll auf eine solche Flanke am Eingang mit einem Impuls am Ausgang reagieren, der eine Zykluszeit andauert.Der R_TRIG Baustei darf man nicht verwenden, sondern nur nachbauen.

Die Aufgabe kann mit folgender Logik gelöst werden:

Im 1. Netzwerk wird er Ausgang AUS dann gleich 1, wenn der Eingang EIN=1 ist und im Rechenzyklus zuvor 0 war (EIN_ALT = 0). Den Wert des Eingangs im Zyklus zuvor rhält man z.B.: dadurch das man im 2. Netzwerkden Eingang EIN mit sich selbst UND_Verknüpft. Das Ergebnis dieser UND-Verknüpfung weist man an der Variablen EIN-ALT zu.
Dadurch wird am Ende eines jeden Rechenzyklus der Eingangswert EIN abgespeichert, um im nöchsten Rechenzyklus als EIN_ALT zur Verarbeitung zur Verfügung zu stehen.
Am Ende geht es noch immer um diese Aufgabe.
 
Die Aufgabe lautet:

Mit einem Programm soll erkannt werden, ob ein Eingangssignal EIN eine positive Flanke aufweist. Das Programm "Positive Flanke" soll auf eine solche Flanke am Eingang mit einem Impuls am Ausgang reagieren, der eine Zykluszeit andauert.Der R_TRIG Baustei darf man nicht verwenden, sondern nur nachbauen.

Die Aufgabe kann mit folgender Logik gelöst werden:

Im 1. Netzwerk wird er Ausgang AUS dann gleich 1, wenn der Eingang EIN=1 ist und im Rechenzyklus zuvor 0 war (EIN_ALT = 0). Den Wert des Eingangs im Zyklus zuvor rhält man z.B.: dadurch das man im 2. Netzwerkden Eingang EIN mit sich selbst UND_Verknüpft. Das Ergebnis dieser UND-Verknüpfung weist man an der Variablen EIN-ALT zu.
Dadurch wird am Ende eines jeden Rechenzyklus der Eingangswert EIN abgespeichert, um im nöchsten Rechenzyklus als EIN_ALT zur Verarbeitung zur Verfügung zu stehen.
Am Ende geht es noch immer um diese Aufgabe.
Zurück zum Urschleim oder Programmieren in der Krabbelkiste:
Eine positive Flanke ist, wenn ein Signal jetzt 1-Zustand (TRUE) hat und vorher 0-Zustand (FALSE) hatte.

Die Aufgabenbeschreibung 1:1 in KOP umgesetzt würde diesen Programmcode ergeben:
Code:
NW 1: positive Flankenerkennung

   EIN     EIN_ALT     AUS
---| |-------|/|-------( )


NW 2: Zustand für nächsten Zyklus merken

   EIN               EIN_ALT
---| |-----------------( )
Die Aufgabenbeschreibung klingt wie eine umständliche Beschreibung des Programmcodes in FUP. Für die FUP-Ansicht braucht man einfach nur die Ansicht von KOP nach FUP umschalten.

PS: Dafür braucht man ganz offensichtlich keinerlei RS oder ähnliches. RS wird bei chipchap auch nirgends erwähnt.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, ich wusste schon was eine Flanke ist, ich habe aber irgendwie dauerhaft den Denkfehler drin gehabt, dass im 2. Netzwerk EIN_ALT durch den Ausgang von Netzwerk ein bestimmt wird....
Ich weiß nicht wie ich auf so eine Idee gekommen bin, aber vielen Dank nochmal für die idiotensichere Erklärung.
Normalerweise programmiere ich bisher nur in Logo-Soft und dadurch, dass ich da die Bauteile hatte, musste ich noch nicht darüber nachdenken, wie ich sie erstzen kann.

Schönen Abend noch und nochmal vielen Dank.
 
Bitteschön.

Auch wenn man in div. Programmiersystemen fertige Anweisungen für Flankenerkennung hat, so schadet es nicht, wenn man einmal die zugrundeliegende Funktionsweise begriffen hat. Da weiß man dann z.B. dass und warum so eine Flankenerkennungs-Anweisung eine Speicherstelle zum Merken des Zustands "vorher" braucht.
 
Zurück
Oben