Also gleich nochmal:
Ich habe mir mal ausführlich deinen S5-Code angesehen und habe im positiven Sinne einige Anmerkungen zu machen.
1. Gleich der erste Befehl ist eine so genannte "Erstanweisung". In dieser ist es egal, ob du diese mit U(nd) oder O(der) beginnst. Erst die nächste Anweisung legt die Verknüpfung fest. Da es sich um eine ODER-Verknüpfung handelt, sollte man dann auch die Erstanweisung mit O(der) beginnen. Es ist übersichtlicher.
2. Eine Sprunganweisung hinterlässt in STEP5 im VKE immer eine 1. Eine sofort nachfolgende Sprunganweisung ist deshalb immer erfüllt und wird ausgeführt. Folge: Niemals 2 unmittelbar aufeinander folgende Sprunganweisungen programmieren. Und erst recht nicht, wenn das Sprungziel sowieso die nächste Programmzeile ist.
3. Der Sprungbefehl SPP hat es richtig in sich und verleitet schnell zu falschen Überlegungen. Er ist mehr gedacht beim abtesten von Rechenergebnissen, denn er prüft das Ergebnis auf positiv. Bei einer Vergleichsfunktion prüft dieser Sprungbefehl, ob der Inhalt von Akku2 größer ist als der Inhalt von Akku1. Ergebnis: Die Funktion deines Programmes erschließt sich erst bei sehr genauer Analyse. Es geht, glaube ich, auch sehr viel einfacher.
4. Die Hinweise hier im Forum bezüglich der absoluten Adressen in deinem FB sind richtig. Wie sie dir dargestellt werden, halte ich aber nicht sehr hilfreich für dich.
Deshalb: FB's sollte man immer voll parametrierbar machen. D.h. im Inneren sollten keine Absolutoperanden vorkommen. Stellt sich nun im Laufe der Zeit heraus, dass noch Formaloperanden eingefügt werden müssen, dann kann man das am einfachsten tun, indem man den Baustein noch einmal komplett neu eintippt. Das vermeidet auf jeden Fall nachträgliche (immer negative) Überraschungen. Warum das so ist, würde jetzt hier zu weit führen.
5. Ich gehe mal davon aus, dass dein Baustein im LOW-Wort bis 10000 zählt und danach das HIGH-Wort um 1 erhöht, gleichzeitig das LOW-Wort wieder löscht (Zählumfang damit 100.000.000). Betätigt man E0.1 ODER E0.6 (Löschtasten) sollen LOW- und HIGH-Wort gelöscht werden. (Das ist bei deinem Code aber nicht so, da zählt das HIGH-Wort mit hoher Geschindigkeit vorwärts!).
6. Nachfolgend ein Codevorschlag, der nach meiner Meinung übersichtlicher ist (und trotzdem funktioniert) Schau ihn dir mal in Ruhe an.
Code:
[FONT=Times New Roman]:U = EIN pos.Flanke bilden fuer EIN[/FONT]
[FONT=Times New Roman]:UN = MERK MERK ist der Flankenmerker[/FONT]
[FONT=Times New Roman]:= = FLAN FLAN ist der Zykluswischer[/FONT]
[FONT=Times New Roman]:U = FLAN[/FONT]
[FONT=Times New Roman]:S = MERK[/FONT]
[FONT=Times New Roman]:UN = EIN[/FONT]
[FONT=Times New Roman]:RB = MERK[/FONT]
[FONT=Times New Roman]:[/FONT]
[FONT=Times New Roman]:UN = FLAN Falls keine Flanke,[/FONT]
[FONT=Times New Roman]:SPB = M001 <-- dann springe nach M001[/FONT]
[FONT=Times New Roman]:[/FONT]
[FONT=Times New Roman]:L KF +1 Zu LOW 1 addieren[/FONT]
[FONT=Times New Roman]:L = LOW[/FONT]
[FONT=Times New Roman]:+F[/FONT]
[FONT=Times New Roman]:T = LOW[/FONT]
[FONT=Times New Roman]:[/FONT]
[FONT=Times New Roman]:L = LOW Ist LOW kleiner als 10000[/FONT]
[FONT=Times New Roman]:L KF +10[/FONT]
[FONT=Times New Roman]:<F[/FONT]
[FONT=Times New Roman]:SPB = M001 <-- ja, dann springe nach M001[/FONT]
[FONT=Times New Roman]:[/FONT]
[FONT=Times New Roman]:L KF +0 sonst loesche LOW[/FONT]
[FONT=Times New Roman]:T = LOW[/FONT]
[FONT=Times New Roman]:L KF +1 und addiere zu HiGH 1[/FONT]
[FONT=Times New Roman]:L = HIGH[/FONT]
[FONT=Times New Roman]:+F[/FONT]
[FONT=Times New Roman]:T = HIGH[/FONT]
[FONT=Times New Roman]:[/FONT]
[FONT=Times New Roman]:L = HIGH Ist HIGH kleiner als 10000[/FONT]
[FONT=Times New Roman]:L KF +10[/FONT]
[FONT=Times New Roman]:<F[/FONT]
[FONT=Times New Roman]:SPB = M001 <-- ja, dann springe nach M001[/FONT]
[FONT=Times New Roman]:[/FONT]
[FONT=Times New Roman]:L KF +0 sonst loesche HIGH[/FONT]
[FONT=Times New Roman]:T = HIGH[/FONT]
[FONT=Times New Roman]:[/FONT]
[FONT=Times New Roman]M001 :UN E 0.1 E0.1 UND E0.6 = 0 ?[/FONT]
[FONT=Times New Roman]:UN E 0.6[/FONT]
[FONT=Times New Roman]:SPB = ENDE <-- dann beende das Programm[/FONT]
[FONT=Times New Roman]:[/FONT]
[FONT=Times New Roman]:L KF +0 sonst loesche LOW und HIGH[/FONT]
[FONT=Times New Roman]:T = LOW[/FONT]
[FONT=Times New Roman]:T = HIGH[/FONT]
[FONT=Times New Roman]ENDE :BE[/FONT]
Falls noch Fragen sind, bitte melden.
Ansonsten mfG eNDe