TIA SCL FOR-Schleife funktioniert nicht

EMZ

Level-2
Beiträge
232
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
STATIC_VAR
zaehler int
FM bool


TEMP_VAR
FP bool
index int

_________________________________________________________

#FP := #takt AND NOT #FM;
#FM := #takt;




IF #FP THEN


FOR #index := 1 TO 5 BY +1 DO
#zaehler := #zaehler + #index;
END_FOR;


END_IF;


ich möchte das mein Zähler bis 5 hochzählt jedesmal wenn mein Flankenpuls ein true Signal hat.
Aber die Forschleife macht iwas willkürliches.
Beim Beobachten zählt der Index bei " FP = true" nicht +1 hoch.

Wo hab ich den Fehler ?


LG
EMZ
 
Das Hochzählen der Schleife bis (nur) 5 geht wahrscheinlich so schnell, dass Du es nicht wirklich beobachten kannst. Sieht dann eher aus wie ein Standbild eines Wertes davon. Vermutlich die 5 als letzter Wert. Abundzu vlt. mal ein Zwischenwert.

Und um das nochmal zu klären - bei jeder Flanke zählt die Schleife immer wieder von 1 bis 5 - jedesmal!
Soll dagegen bei einem Impuls nur um 1 erhöht werden (bis max. 5), ist die Verwendung von FOR an dieser Stelle falsch.
 
Entweder du machst

Zähler := Index

oder

zaehler := zaehler + 1...

Das was in deiner schleife steht macht keinen sinn

Gesendet von meinem ONE A2003 mit Tapatalk
 
eine SPS macht immer das, was du ihr einprogrammierst, niemals Irgendwas! ;-)

Bei Zähler + Index passiert bei der 1. Flanke:

(Zähler = 0)

Zähler = 0 + 1
Zähler = 1 + 2
Zähler = 3 + 3
Zähler = 6 + 4
Zähler = 10 + 5

(Zähler = 15)

Bei der 2. Flanke

(Zähler = 15)

Zähler = 15 + 1
Zähler = 16 + 2
Zähler = 18 + 3
Zähler = 21 + 4
Zähler = 25 + 5

(Zähler = 30)

Schätze, du siehtst immer nur den Endwert, das Hochzählen, kann dir die Entwicklungsumgebung nicht so schewll zeigen, wie es erfolgt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke euch,
Sehr hilfreiche Antworten.

Also heisst es dass der Index der Forschleife in einem Zyklus immer von Start - bis Endwert zählt (z.B. die schleife zählt von 1 bis 5 in paar millisekunden)
Das man die Forschleife flankengesteuert hochzählen lässt geht nicht bei der For oder ?
 
Du brauchst ja auch gar keine schleife...

If Puls then
Zaehler := zaehler + 1 ;
End_if

If zaehler >= 5 then
Xxxxxx....
Zaehler := 0;
End_if

So in der Art

Gesendet von meinem ONE A2003 mit Tapatalk
 
Also kann man das "hochzählen" des Indexes bei der Simulation nie beobachten oder ?

Ich hatte vor eine Fehlerschleife zu programmieren. (keine Praxisanwendung dient nur zur Übung)

Funktion:
1. Wenn ein Fehler da ist, soll die Schleife z.B. 5 Schleifendurchgänge machen.
2. Beim 3. Schleifendurchgang also index[3] möchte ich dann index[3] als Überprüfungswert verwenden. z.B. Wenn innerhalb des Zykluses bei index[3] irgendwas passiert ist, soll dann z.B. ein Automatisches Reset erfolgen nach Beendigung der For-Schleife

SO wie ich das verstanden habe, zählt der Index innerhalb eines Zykluses von 1 bis 5.

gibt es da jetzt nicht die Möglichkeit innerhalb des Zykluses z.B. den Indexwert 3 zu erkennen und weiterzuverarbeiten?

Und der
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In einer FOR-Schleife wird nur genau der Code der FOR-Schleife komplett abgearbeitet. Programmcode außerhalb/vor/nach der FOR-Schleife kann die einzelnen Schleifendurchläufe gar nicht erkennen. Während der FOR-Schleife wird nichts passieren, es sei denn, der Code wird genau während der Schleife durch einen Alarm unterbrochen - der Alarm kann allerdings nicht beeinflussen, in welchem Schleifendurchlauf er die Schleifenbearbeitung unterbricht.

Für das was Du vorhast mußt Du nochmal genau verinnerlichen wie eine SPS funktioniert. Für Warten auf Ereignisse von außen kann man keine Schleifen verwenden. Das ganze SPS-Programm ist bereits eine zyklische "Schleife". Es muß lediglich in jedem Programmdurchlauf mit einfachem IF..THEN nachgeschaut werden, ob das erwartete Ereignis eingetreten ist.

Harald
 
Ja, gibt es. Schlicht und einfach "EXIT".
Code:
If [I]Auslöseergebnis[/I] then 
Exit; 
END_IF;
springt bei eintreten aus der inneren For- Schleife raus.
Bei 2 verschachtelten Schleifen wird die übergeordnete immer noch abgearbeitet, sofern ich das noch korrekt innehabe.
 
Alles klar, danke euch vielmals.
Ich habe in einem Buch nach der For Schleife gelesen. Da steht leider nichts davon dass eine FOR Schleife vom Start bis Endwert die Schleife innerhalb einen Zyklus durcharbeitet.

Vielen Herzlichen Dank

EMZ
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja, in der Beziehung verhält sich ein SPS Programm wie ein PC Programm. Dort wird eine Schleife ja auch immer komplett abgearbeitet ehe es weitergeht. Bei einer while Schleife verhält es sich übrigens auch so.
Übrigens sollte man in SPS-Programmen nur Schleifen einsetzen, wenn man weiß was man tut.

Von irgendwas mit Internetzugang gesendet
 
Ich habe in einem Buch nach der For Schleife gelesen. Da steht leider nichts davon dass eine FOR Schleife vom Start bis Endwert die Schleife innerhalb einen Zyklus durcharbeitet.
Das hatten wir bereits vor 4 Jahren schon mal durchgekaut.
;)

Vlt. sollte ich daher einen alten Tipp von mir wiederholen:
... einen Baustein, den ich ihm vor langer Zeit auch mal haarklein erklärt habe, ...
@EMZ,

es wäre also sinnvoll, Dir nochmal Deine eigenen alten Threads, insbesondere den im Zitat verlinkten, anzusehen und durchzuarbeiten.
:ROFLMAO:
 
Zurück
Oben