TIA Counter mit Schaltschwellen

Florian St

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wie kann ein Zähler mit verschieden Schaltschwellen am besten realisiert werden (FUP).
Zum Beispiel soll ein je ein Ausgang von 0-20, 21-40 und 41-60 Sekunden eingeschaltet werden, die zwei anderen müssen ausgeschaltet sein.
Nach 60 sec. soll der Ablauf neu gestartet werden.

Vielen Dank in voraus.
Gruß Flo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Florian St,

erst einmal herzlich willkommen im Forum!

Das hört sich stark nach Haus- bzw. Übungsaufgabe an!?

Gibt es weitere Vorgaben? Ich würde ein Integer inkrementieren und den Zahlenwert mit meinen Grenzwerten vergleichen.

Hinweis am Rande:
0-20 ==> 21 s
Soll das so?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Welche Software willst / musst du denn benutzen.
Stell doch hier mal einen Screenshot von deinem Programm rein und sag es wo es hängt bzw. wo du nicht weiter kommst.
Hier werden dir sehr viele User gerne helfen aber nicht deine komplette Hausaufgabe machen.
 
Danke für die raschen Antworten.
Es handelt sich tatsächlich um eine Übungsaufgabe, jedoch im Selbststudium und nicht an einer Schule etc.
Programmiert wird im TIA Portal.

Den Takt hole ich mir über ein Taktmerkerbit (1Hz).
In weiterer folge soll der Zähler von Sekunde 0-20 Ausgang 1 auf "Ein" setzten. Ausgang 2 und 3 sind "Aus".
von Sekunde 21-40 ist A1-0 / A2-1 / A3-0
von Sekunde 41-60 ist A1-0 / A2-0 / A3-1
Nach Ablauf dieser Folge --> Reset und Start von vorne.

Aus meiner Azubizeit (schon etwas länger her ;)) habe ich noch im Hinterkopf, dass sich dies wohl mit Zählern realisieren lässt.
Jedoch fehlt mir zur Zeit jeder Ansatz.

Vielen Dank
 
Wenn du mit Zählern arbeiten möchtest, könntest du über den Takt-Eingang einen Zähler hochzählen lassen. Runterzählen wirst du nicht brauchen. Den Zählwert kannst du dann mit deinen Schwellwerten vergleichen und über das Ergebnis deine Ausgänge ansteuern. Du müsstest dir noch Gedanken darüber machen, wann du deinen Zähler zurücksetzen möchtest.

Was du auch noch bedenken solltest: In einer Minute sind "Sekunde 0" und "Sekunde 60" de facto identisch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aus meiner Azubizeit (schon etwas länger her ;)) habe ich noch im Hinterkopf, dass sich dies wohl mit Zählern realisieren lässt.
Jedoch fehlt mir zur Zeit jeder Ansatz.
Ob du einfach nen Zählwert inkrementierst oder nen Zähler nimmst, macht den Kohl nicht fett.
Die beiden Netzwerke in dem folgenden Screenshot machen im Prinzip das gleiche:
1724667176034.png

In FUP würde ich tatsächlich aufgrund der Übersichtlichkeit zur Umsetzung mit Zähler tendieren.

Das Setzen der Ausgänge könntest du beispielsweise mit Vergleichern erledigen.
Weitere Infos dazu findest du in der F1-Hilfe.
 
Moin Florian St,

entgegen meiner sonstigen Gewohnheit habe ich hier doch einmal eine Lösung für Dich.

Da sind ein paar Ideen eingeflossen, die eine Parametrierung erleichtern. Die deklarierten Konstanten geben die Sekunden an, zu denen die jeweiligen Lampen ein- bzw. ausgeschaltet werden sollen. Die Bereiche sollten nicht überlappend gewählt werden, da sonst die Berechnung der Gesamtdauer falsch ist. Warum kannst Du Dir ja mal überlegen. Hier gibt es auch noch Optimierungsmöglichkeiten.
Die ganze Programmierung ist in einem zyklischen OB erstellt worden, die im 1.000.000 Mikrosekundentakt; als 1s-Takt aufgerufen wird. Dadurch entfällt das bedingte inkrementieren durch einen Taktmerker.
Herzstück ist die Moduloberechnung. In diesem Fall wird in einer Schleife 0-60 inkrementiert. Danach startet die Schleife wieder bei 0. Dann braucht man auch keinen Zähler zurücksetzen. Dies geschieht durch die Moduloberechnung automatisch.

Hinweis: für den Zählerwert und symbolisch für die Meldeleuchten bzw. Ausgänge habe ich einen DB verwendet.

1724669271011.png
1724669295594.png
1724669311761.png
 
Hallo,
wie kann ein Zähler mit verschieden Schaltschwellen am besten realisiert werden (FUP).
Zum Beispiel soll ein je ein Ausgang von 0-20, 21-40 und 41-60 Sekunden eingeschaltet werden, die zwei anderen müssen ausgeschaltet sein.
Nach 60 sec. soll der Ablauf neu gestartet werden.

Vielen Dank in voraus.
Gruß Flo

Die Sekundenangaben hatten mich verwirrt. Da, wie schon mehrfach thematisiert, die Anzahl der Sekunden von 0-60 61 Sekunden ergibt, hatte ich gedacht, "Nach 60 sec." bedeutet, dass NACH dem Ablauf eine Pause von 60 Sekunden eingehalten werden soll.

In Deinem Post #7 weist Du noch einmal auf die Zeitbereiche 0-20, 21-40 und 41-60 hin. Ich bin nicht ganz sicher, ob Du tatsächlich einen Unterschied in der Leuchtdauer von Lampe 1 (21s) zu den Lampen 2 und 3 (je 20s) haben möchtest?

wie @Januar ja schon schrieb, ist "Sekunde 0" und "Sekunde 60" identisch.

Also Du hast geschrieben:
Lampe 1 = 0-20 (das sind 21 Sekunden!)
Lampe 2 = 21-40 (20s)
Lampe 3 = 41-60 (20s)
Daraus ergibt sich eine Gesamtdauer von 61 Sekunden!

Allerdings gehe ich davon aus, dass Du implizit meinst, dass jede Lampe 20s lang eingeschaltet sein soll.
Bei 0 anzufangen ist erstmal richtig. Aber, um 20s Sekunden zu zählen, musst Du bei 19 aufhören!
00-19 -> 20s
20-39 -> 20s
40-59 -> 20s


ABER: ich kann mich natürlich total irren und Du meinst das, was Du geschrieben hast. Melde Dich dazu doch einmal.

VG
MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Allerdings gehe ich davon aus, dass Du implizit meinst, dass jede Lampe 20s lang eingeschaltet sein soll.
Bei 0 anzufangen ist erstmal richtig. Aber, um 20s Sekunden zu zählen, musst Du bei 19 aufhören!
00-19 -> 20s
20-39 -> 20s
40-59 -> 20s
Davon gehe ich auch aus, Mario, dass Flo es so meint.
Er wird sich mit zumehmender Praxis sicherlich noch mehr und mehr "ProgrammiererDenkweise" angewöhnen/antrainieren und in Zukunft schon die AufgabenStellungen so (um-)formulieren, dass sie strukturierter und präziser erscheinen.

Ich weiss, "fertige" Lösungen werden hier nicht gerne gesehen, sondern Hilfe zur SelbstHilfe bzw. Hilfe zum Verständnis.

Hier kommen 2 verschiedene (aber absichtlich gleichermassen sparsam kommentierte) LösungsWege als Anregungen.
Sie sind nicht als fertige Lösungen gedacht. Bitte GehirnSchmalz investieren und überlegen, wie sie funktionieren (sollen)!
Falls Unklarheiten bleiben sollten, dann bitte nachfragen!

Code:
// ---< Version 1 mit IF ... ELSEIF ... ELSE >---
cnt := ( cnt + 1 ) MOD 60 ; // Zähler inkrementieren und begrenzen auf 0..59 ;

IF cnt < 20 THEN           
    Phase1 := TRUE ;
    Phase2 := FALSE ;
    Phase3 := FALSE ;
ELSEIF cnt < 40 THEN       
    Phase1 := FALSE ;
    Phase2 := TRUE ;
    Phase3 := FALSE ;
ELSE                       
    Phase1 := FALSE ;
    Phase2 := FALSE ;
    Phase3 := TRUE ;
END_IF ;

// ---< Version 2 ohne IF >---
cnt := ( cnt + 1 ) MOD 60 ; // Zähler inkrementieren und begrenzen auf 0..59 ;

Phase1 := cnt < 20 ;
Phase3 := cnt >= 40 ;
Phase2 := NOT Phase1 AND NOT Phase3 ;
 
Zurück
Oben