Schleifen pogrammierung in MicroWin

tobl2002

Level-2
Beiträge
75
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.
Ich habe ein kleines Problem:
In dem Bild im Anhang seht ihr ein Netzwerk aus meinem S7-200 Programm.
Es geht darum einen Wert hochzuzählen, wenn ein Byte leer ist, dann soll geguckt werden ob das Byte+1 leer ist dann wieder den Wert + 1, außerdem wird vor jedem hochzählen noch ein wert verglichen (siehe Bild).
Mein Problem ist das dies sehr oft gemacht werden soll, was auch so funktioniert, leider ist der Speicherplatz der so benötigt wird viel zu viel.

Ich habe gesehen das es die möglichkeit gibt eine for next schleife bei microwin zu erstellen. leider weiß ich aber nicht so ganz wie. die hilfe ist auch nicht wirklich hilfreich...
Programm sollte auf jeden fall in FU sein. Danke für eure Hilfe.

Gruß
Tobl
 

Anhänge

  • Netzwerk.JPG
    Netzwerk.JPG
    28 KB · Aufrufe: 29
Im ersten Netzwerk der FOR-NEXT-Schleife richtest Du einen Zähler (INDX=INT) mittels des FOR-NEXT-Befehls ein, der die Anzahl der Schleifendurchläufe (=FINAL-INIT+1) angibt.
Den Zähler kannst Du innerhalb der Schleife verwenden, mußt aber nicht.
FINAL muß größer als INIT sein, rückwärtszählen geht also nicht. (Wenn sie gleich sind, hast Du genau einen Durchlauf; ist INIT größer wird die Schleife übersprungen.)
In den nächsten Netzwerken die zu wiederholenden Befehle.
Im Netzwerk nach den zur Schleife gehörenden Anweisungen wird ein NEXT programmiert.

Beim ersten Aufruf des FOR-NEXT Befehl erhält der Zähler den Wert von INIT.
Nach jedem Schleifendurchlauf wird beim NEXT-Befehl der Zähler solange um eins erhöht und die Schleife neu begonnen, wie der Zähler kleiner als FINAL ist. (Beim letzten Durchlauf ist der Zähler=FINAL.)

Normalerweise kann die Schleife nicht abgebrochen werden.
Wenn man den Zähler innerhalb der Schleife auf den FINAL-Wert setzt, kann aber ein erneuter Schleifenbeginn verhindert werden.
Ebenso kann man die Anzahl der Durchläufe künstlich erhöhen, wenn mann den Zähler auf einen kleineren Wert zurücksetzt.

Wie die FOR-NEXT-Schleife auf einen Sprung zu einem Netzwerk ausserhalb der Schleife reagiert, kann ich jetzt nicht sagen.
Auf jeden Fall halte ich dies aber für eine unsaubere Programmierung, die im Zweifel eher für Ärger sorgt.


Wenn ich das richtig sehe, hängt bei Dir aber der nächste Vergleich immer vom vorherigen Ergebnis ab. Da die FOR-NEXT-Schleife aber normalerweise stur z.B. 10 Mal durchlaufen wird, halte ich sie bei Dir eher für ungeeignet.
Du kannst auch am Start eine Sprungadresse setzen und am Ende der Schleife mit JMP dorthin zurückspringen, wenn das vorherige Ergebnis entsprechend war.
Den/die Adress-Pointer (DINT) mußt Du so oder so mittels ADD_DI-Befehl ändern, da der FOR-NEXT-Befehl nur einen INT-Wert hochzählt.
 

Anhänge

  • Schleife.rar
    7,3 KB · Aufrufe: 4
Zuletzt bearbeitet:
Zurück
Oben