Ich hätte die beiden vorderen Lichtschranken zum detektieren genommen, welches Datenwort ich in den Zähler lade.
Ich ahne, dass ich noch irgendeine einfache Lösung übersehen habe. Aber Deine Lösung habe ich nicht wirklich verstanden.
Andererseits, warum zerbrechen wir uns überkopf das Haupt, neee, überhaupt den Kopf darüber?
Der TE hat uns doch versichert, dass entweder der eine Sensor meldet, wenn sich ein kleines Paket vorbeischleicht oder der andere, wenn es ein grosses Paket ist? Möge
@deltarrr uns noch darüber aufklären, wie seine gross/klein-Unterscheidung funktioniert ... schliesslich wollen wir auch noch etwas dazulernen.
Nur, weil ich von dieser klaren Trennung der SignalBedeutungen nicht wirklich überzeugt war, habe ich mir meine flach/hoch-Variante mit 3 LS ausgedacht.
Und meine Variante finde ich software-seitig verblüffend "unaufwändig" im Vergleich zum hardware-seitigen Mehraufwand.
Die Reduzierung auf die Auswertung nur noch einer Flanke und durch möglichst frühzeitiges Springen zum Ende, wenn keine Flanke auszuwerten ist, konnte der Aufwand klein gehalten werden.
Beim selbstgebastelten genügt eine #temp-variable da detektieren, lade DW in temp_Variable addiere 1 dazu und speichere in DW ein Durchlauf sind.
Zweifellos.
Beim S7 Zähler ... Hier komme ich aber nicht mehr mit einer #temp_Variable aus, da es mehrere Durchläufe sind. Also Statisch oder Global.
Hmmm, wer braucht "mehrere Durchläufe" (= Zyklen?), um einen S7-Zähler ...
1. zu laden und anschliessend
2. um 1 hochzuzählen und dann noch
3. auszulesen?
Code:
...
CLR // VKE = 0
S Z1 // ... in "UniversalZähler" ... <===<<< "Vorbereitung" der pos. Flanke für's Setzen
ZV Z1 // <===<<< "Vorbereitung" der pos. Flanke für's VorwärtsZählen
SET // VKE = 1
S Z1 // ... vorbesetzen und ... <===<<< hier die pos. Flanke für's Setzen und danach erst
ZV Z1 // ... um 1 weiterzählen und ... <===<<< hier die pos. Flanke für's VorwärtsZählen
LC Z1 // ... im BCD-Code auslesen und ... <===<<< das Auslesen des BCD-Code
...
Habe ich zwar nicht getestet, vertaue aber blind darauf, dass es so in 1 Zyklus funktoniert.
Schliesslich ist ja wichtig, dass die Flanken kommen (in der richtigen Reihenfolge) und nicht, in welchen zeitlichen Abständen.
Dem Zähler sollte egal sein, ob in einem einzigen Zyklus oder auf mehrere verteilt.
Zugegeben, für einen solchen Missbrauch bzw. eine solch "unkonventionelle" Nutzung wurden die Zähler nicht erfunden ... aber, was soll's?
Ich stelle mir vor, dass genau dies der eigentliche "KnackPunkt" der Aufgabe ist, der anhand dieses Beispiels "eingetrichtert" werden soll.