Ich versuchs auch nochmal zu erklären.
Du hast deinen OB1, der wird zyklisch abgearbeitet, d.h. ist die SPS am Ende angekommen startet sie wieder oben. In diesem OB1 rufst du deinen Baustein auf.
Zu jedem gegebenen Zeitpunkt kann nur ein einziger Baustein abgearbeitet werden. D.h. eine SPS bearbeitet niemals 2 Bausteine gleichzeitig.
Man kann Bausteine logischerweise in einem anderen Baustein aufrufen, dann pausiert sie aber die abarbeitung des ersten Bausteins in dem der zweite Baustein aufgerufen wurde, bis der zweite Baustein beendet wurde.
Das ist so wie wenn du ein Buch liest. In einem ersten Buch wird auf Seite 22 gesagt, "Weiterführende Informationen finden sie in Buch 2". Dann schließt du Buch 1 und gehst zu Buch 2 über. Du liest nicht Buch 1 und 2 absolut gleichzeitig. Eine SPS arbeitet auch nicht so.
Also geht die SPS geht in deinen Baustein rein und wenn der Start sitzt, wird die For Schleife abgearbeitet.
Eine For Schleife in SCL wird folgendermaßen abgearbeitet:
SIe prüft, ob die Abschaltbedingung erfüllt ist. Ist er es nicht, bearbeitet sie die Anweisung in der Forschleife einmalig, bis sie zu dem befehl End_For kommt.
Dann zählt die SPS den Index um 1 hoch, und springt wieder an den Beginn der For Schleife.
Dann prüft sie, ob ihre Abschaltbedingung erfüllt ist ( das ist der TO- Wert). Ist er nicht erfüllt, wird die Schleife nochmals durchlaufen, bis die SPS am End_For ankommt, dann wird der Index erneut um 1 hochgezählt.
Das tut sie solange wie die Abschaltbedingung nicht erfüllt ist.
Während eine For Schleife abläuft, läuft in der SPS keine andere Bearbeitung ab. D.h. während du die For- Schleife abarbeitest und zählst 1-2-3 wird nichts anderes als die For Schleife abgearbeitet. Selbst Änderungen an den Eingängen der SPS werden zur Laufzeit der Schleife ignoriert. Du durchsuchst also ein Schieberegister das sich während der Bearbeitung der For Schleife niemals Ändern wird, in der Hoffnung dass sich in dem Register etwas ändern wird. Dem ganzen Code ist es, so wie du ihn geschrieben hast von vorne herein unmöglich, das von dir erwartete Ergebnis zu erreichen.
Änderungen in dem Schieberegister können nur woanderst in deinem Code passieren. Unter Umständen ja durch einen SPS Eingang. D.h. dein Code muss über seine Laufzeit also auch diesen Code ablaufen lassen. Das geht aber nicht mit einer For- Schleife, denn wie bereits beschrieben, die SPS macht sobald die For Schleife abgearbeitet wird, nichts anderes als die For- Schleife abzuarbeiten. Es wird parallel kein weiterer Code aufgerufen, durch den eine Änderung im Schieberegister möglich wäre und es werden keine Eingeänge abgefragt, durch die eine Änderung im Schieberegister möglich wäre.
Ich hoffe das war verständlich.