Step 7 Zähler im Neztwerk merfach zählen lassen

Shitmaster

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gemeinde,

ich würde gerne einen Zähler mehrmals hintereinander vorwärts zählen lassen.
Das Netzwerk hierfür sieht so aus:

U db1353.dbx4.1
ZV Z1
U db1353.dbx4.2
ZV Z1
U db1353.dbx4.3
ZV Z1

Die Datenbits kommen meistens gleichzeitig und sind als Flanke programmiert. Warum Zählt der Zähler nur bis 1 wenn er doch eigentlich bei 3 stehen sollte.
Habe auch schon alle Datenbits testweise durch ein und den selben Merker ersetzt und manuell gesetzt. Bringt jedoch auch nichts.

Der Zähler wird im nachfolgenden Netzwerk nur per Blinktakt wieder zurückgesetzt, und sonst nicht mehr verwendet.

Was mache ich hier falsch?
 
Kommen alle 3 Signale in einem Zyklus ? Ein Flankenmerken ist einen Zyklus auf HIGH. Also kann es so nicht gehen. Nimm 3 Zähler und addiere sie
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und warum hilft es dann nichts wenn ich es auf mehrere Netzwerke aufteile?
Weil Du immer die selbe Instanz des Zählers aufrufst und dessen Eingang war evtl. noch vom vorherigen Aufruf TRUE, daher hat der Baustein keine steigende Flanke und kann nichts zählen.
Wenn Du wirklich nur einen Zähler für mehrere Signale nutzen möchtest, müsstest Du zwischen den Aufrufen noch weitere Aufrufe einfügen bei denen der Eingang dann FALSE ist.
Bin jetzt leider Siemens Laie, aber vermutlich so:
Code:
[LEFT][LEFT][COLOR=#333333][FONT=Verdana][COLOR=#333333][FONT=Verdana]U    db1353.dbx4.1[/FONT][/COLOR]
[COLOR=#333333][FONT=Verdana]ZV  Z1[/FONT][/COLOR]
[COLOR=#333333][FONT=Verdana][LEFT][COLOR=#333333][COLOR=#333333][FONT=Tahoma][FONT=Verdana]U  FALSE[/FONT][/FONT][/COLOR][/COLOR]
[COLOR=#333333][COLOR=#333333][FONT=Tahoma][FONT=Verdana]ZV  Z1[/FONT][/FONT][/COLOR][/COLOR]
[/LEFT]
U    db1353.dbx4.2[/FONT][/COLOR]
[COLOR=#333333][FONT=Verdana]ZV  Z1[/FONT][/COLOR]
[COLOR=#333333][FONT=Verdana][LEFT][COLOR=#333333][COLOR=#333333][FONT=Tahoma][FONT=Verdana]U  FALSE[/FONT][/FONT][/COLOR][/COLOR]
[COLOR=#333333][COLOR=#333333][FONT=Tahoma][FONT=Verdana]ZV  Z1[/FONT][/FONT][/COLOR][/COLOR]
[/LEFT]
U    db1353.dbx4.3[/FONT][/COLOR]
[COLOR=#333333][FONT=Verdana]ZV  Z1[/FONT][/COLOR][/FONT][/COLOR]
[/LEFT]
[COLOR=#333333][COLOR=#333333][FONT=Tahoma][FONT=Verdana]U  FALSE[/FONT][/FONT][/COLOR][/COLOR]
[/LEFT]
[COLOR=#333333][LEFT][COLOR=#333333][FONT=Tahoma][FONT=Verdana]ZV  Z1[/FONT][/FONT][/COLOR][/LEFT]
[/COLOR]
 
Zuletzt bearbeitet:
Moin Shitmaster,

der Flankenwechsel wird für die Dauer eines Zyklus erkannt. In diesem einen Zyklus wird der gesamte Code (mit Ausnahmen, die hier aber nichts zu Sache tun) durchlaufen. D.h. JEDES Netzwerk kann nur den GLEICHEN Zustand des Flankenbits abfragen.
Innerhalb EINES Zyklus ist jedes Deiner Flankenbits TRUE. Für den Zählerbaustein sieht es so aus, dass es keine Signaländerung am Zähleingang gibt.

Kannst Du nicht einfach den Zählwert ändern? Also bei einer Flanke 3 dazuzählen. Oder gar keinen Zähler verwenden, sondern einen Wert inkrementieren. Mit den Flankenmerkern das Inkrementieren überspringen und wenn der jeweilige Flankenmerker TRUE ist, inkrementieren:
Code:
U #Fanke_1
SPBN M001

L #Wert
L 1
+I
T #Wert

M001: nop 0



U #Fanke_2
SPBN M002

L #Wert
L 1
+I
T #Wert

M002: nop 0



U #Fanke_3
SPBN M003

L #Wert
L 1
+I
T #Wert

M003: nop 0

VG

MFreiberger
 
Und warum hilft es dann nichts wenn ich es auf mehrere Netzwerke aufteile?
Der Zähler-Zähleingang muß einen Signalwechsel 0-1 und auch wieder 1-0 mitbekommen. Wenn man einen Zähler zweimal nacheinander mit dem selben Zustand am Zähleingang aufruft (egal ob in mehreren Zyklen oder im selben Zyklus), dann zählt er beim zweiten Mal nicht. Man muß dem Zähler zwischendurch einen Eingangszustand = 0 präsentieren, notfalls z.B. so:
Code:
U db1353.dbx4.1   //Zählsignal, darf nur 1 Zyklus lang 1 sein!
ZV Z1             //Aufruf mit Zählsignal
CLR               //VKE = 0
ZV Z1             //Aufruf mit Zähleingang = 0

U db1353.dbx4.2
ZV Z1
CLR
ZV Z1

U db1353.dbx4.3
ZV Z1
CLR
ZV Z1
Programmierst Du in FUP/KOP oder AWL?
In AWL ginge es auch so:
Code:
U db1353.dbx4.1
ZV Z1
FR Z1

U db1353.dbx4.2
ZV Z1
FR Z1

U db1353.dbx4.3
ZV Z1
FR Z1

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ggfs muss man dafür sorgen, dass keiner der drei ZählImpulse länger als 1 Zyklus ansteht, sonst werden sie mehrfach gezählt durch die "vorgetäuschten" Flanken.

Edit:
Sorry Harald, das hast Du schon im Kommentar Deines Code gesagt.
Aber doppelt hält eben besser - man kann es nicht oft genug betonen. ;)
 
Zuletzt bearbeitet:
Boa, vielen Danke für die schnelle Hilfe.
Habs hinbekommen.

Aber eine Frage hab ich noch:

Wenn ich es so mache funktioniert es einwandfrei:
U db1353.dbx4.1
ZV Z1
CLR
ZV Z1

U db1353.dbx4.2
ZV Z1
CLR
ZV Z1

U db1353.dbx4.3
ZV Z1
CLR
ZV Z1

Wenn ich es so realiesieren will,
Code:
U db1353.dbx4.1
ZV Z1
FR Z1

U db1353.dbx4.2
ZV Z1
FR Z1

U db1353.dbx4.3
ZV Z1
FR Z1
klappt es nur bedingt:|

Es werden dann immer nur zwei anstatt drei gezählt.

Ich habe es zum Test mal so aussehen lassen:
Code:
M1.0  
ZV Z1
FR Z1

M1.0
ZV Z1
FR Z1

M1.0
ZV Z1
FR Z1

M1.0 ist hierbei eine manuell generierte Flanke.


Aber warum wird das dritte mal nicht gezählt?
Der Zähler zählt immer zwei dazu, auch wenn ich die drei Programmzeilen noch ein paar mal einfüge.

Habe es dann noch mal so gestestet:
Code:
M1.0
ZV Z1             
CLR               
ZV Z1

M1.0
ZV Z1             
CLR               
ZV Z1

M1.0
ZV Z1             
CLR               
ZV Z1

M1.0
ZV Z1             
CLR               
ZV Z1
 
M1.0  
ZV Z1
FR Z1

M1.0
ZV Z1
FR Z1

M1.0
ZV Z1
FR Z1

M1.0
ZV Z1
FR Z1

Ergebniss: Der Zähler zählt sechs dazu, anstatt acht.

Warum?
Was übersehe ich jetzt wieder?
 
Weiss ich nicht, weil ich den Befehl FR nie gebraucht habe. Kann es sein, dass auch der FR nur auf Flanken reagiert? Aber dann müsste der Zähler ja eigentlich noch weniger zählen?
Ich bleibe bei meiner "Erkenntnis" aus S5-Zeiten ... der FR ist so überflüssig wie ein Kropf! ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
* Beim ersten Aufruf ZV erkennt der Zähler-Eingang eine steigende Flanke und zählt +1, und der FR erkennt auch eine steigende Flanke und setzt den Flankenmerker des Zähler-Eingangs zurück.
* Beim zweiten Aufruf ZV erkennt der Zähler-Eingang wegen dem FR vorher eine steigende Flanke (VKE = 1 und zurückgesetzter Flankenmerker = 0) und zählt +1, der FR erkennt aber keine steigende Flanke (VKE = 1 wie beim ersten FR und FR-Flankenmerker = 1) und setzt den Flankenmerker des Zähler-Eingangs nicht zurück.
* Beim dritten und jedem weiteren Aufruf ZV erkennt der Zähler-Eingang keine steigende Flanke (VKE = 1 wie die ZV vorher und Eingangs-Flankenmerker ebenfalls = 1) und zählt nicht, und der FR erkennt auch keine steigende Flanke (VKE = 1 und FR-Flankenmerker auch = 1).

Harald
 
Aaaahh
Wie logisch das doch dann auf einmal ist wenn man es verstanden hat....

Vielen Dank,
habt mir echt weiter geholfen
 
Zurück
Oben