Sonstiges CTUD - Vorwärts-Rückwärtszähler

Peppino86

Level-2
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag @all,

ich bin neu hier und habe vor kurzem mit der Programmierung angefangen.
Habe jetzt auch einige Lehrgänge hinter mir und jetzt bin ich auf ein Problem gestoßen und komme nicht weiter.

Ich habe ein Programm geschrieben, wo ich einen Vorwärts-Rückwärtszähler benutze.
Er soll maximal bis 12 zählen. Ist dieser Wert erreicht erscheint eine Meldung. Das Programm funktioniert auch.

Mein Problem ist bekommt er jetzt ein weiteres Signal am CU-Eingang zählt er auf Wert 13. Dies soll aber nicht passieren, weil ich ja dann zweimal auf den Eingang CD drücken muss, damit er wieder auf 11 zum Beispiel springt.

Kann man dies einstellen das er ab 12 nicht mehr zählen daf ? Oder muss ich eventuell mit einem MOVE-Baustein arbeiten ???


Vielen Dank für eure Hilfe und auf eine gute Zusammenarbeit
 
Kein MOVE, sondern einen Vergleicher |CMP <I| vor den Zähleingang schalten, wo verglichen wird, ob der Zählerstand vom Zähler-Ausgang CV (DUAL) < 12 ist (in KOP) bzw. &-Verknüpfung des Vergleichers mit dem Zählsignal (in FUP). Dafür brauchst Du noch eine Hilfsvariable, wo der Zählerstand gespeichert wird (Merker-Wort oder DB-Wort).

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok werde ich gleich testen.

Mein Gedanke war nämlich ich nehme einen MOVE-Baustein. Dann wäre am EN ein Vergleicher der bei 12 sich aktiviert und egal wie meine Variable (z.B. MW oder DB) zählt, würde der MOVE Baustein immer den Wert 12 in die Variable verschieben. Dies funktioniert aber nicht.
 
Code:
IF bCU AND NOT sbCUZuvor THEN // vorwärts zählen
    bÜberlauf := Zähler >= 12 ;
    IF NOT bÜberlauf THEN 
        Zähler := Zähler + 1 ; 
        bUnterlauf := FALSE ; // optional
    END_IF ;    
END_IF ; 
IF bCD AND NOT sbCDZuvor THEN // rückwärts zählen
    bUnterlauf := Zähler <= -12 ; // Untergrenze war nicht spezifiziert!?
    IF NOT bUnterlauf THEN 
        Zähler := Zähler - 1 ; 
        bÜberlauf := FALSE ; // optional
    END_IF ;    
END_IF ;    
sbCUZuvor := bCU ; // sbCUZuvor: static 
sbCDZuvor := bCD ; // sbCDZuvor: static
 
Hab den ersten Vorschlag umgesetzt. Funktioniert perfekt. Vergleiche mit einem MW...am Eingang zum Vorwärtszählen. Sobald der Wert erreicht wurde, schaltet sich meine Bedingung ab und ich kann nicht mehr weiterzählen.

Danke
 
Zurück
Oben