Step 7 Zähler Vorwärts und MW1

Frozen19

Level-2
Beiträge
50
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich suche nach einer Erklärung über die Funktionsweise wie der Zähler auf das MW1 zählt.
Der BCD 8421 wird auf Merker 2.0 – 2.3 geschrieben warum ausgerechnet dieser Merker Bereich und nicht Beispielsweise Merker 1.0 – 1.3?

Zähler Vorwärts u MW1.png


lg
Frozen
 
Weil bei S7 die Daten im Big Endian in den Speicher geschrieben werden.
MW1 besteht aus MB1 und MB2, das High-Byte des Zählerstandes kommt zuerst - auf MB1, das Low-Byte kommt danach - auf MB2.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für deine Antwort Harald.

Eine Frage habe ich noch zur Schnittstellen Parametrierung des MW1. Ist als Out Variabel und Datentyp WORD richtig? Die Merker 2.0 – 2.4 als STAT Variabel Datentyp BOOL? (der Zähler soll bis 16 Zählen und dann, wenn Merker 2.4 kommt Reseten)

Vielen Dank

Frozen
 
(der Zähler soll bis 16 Zählen und dann, wenn Merker 2.4 kommt Reseten)
Das ist jetzt nicht ganz eindeutig formuliert. Willst Du wirklich daß vor dem Reset einen Zyklus lang der Zählerstand Z1 = 16 anstehen bleibt? Wenn man auf der rechten Seite des Zählers eine Variable anschließt und diese auf der linken Seite des Zählers auswertet, dann wirkt die Auswertung erst im nächsten Zyklus (Abarbeitungsreihenfolge! siehe mal die AWL-Ansicht).

Üblicherweise prüft man auf Zählerstand > max zulässiger Zählerstand und resettet sofort, damit das Programm nach dem Zähler-Netzwerk den unzulässigen bzw. zu hohen Zählerstand gar nicht mitbekommt.
Weiters würde ich nicht direkt das Bit M2.4 zum resetten nehmen (*), sondern einen Vergleicher, das ist universeller und besser lesbar. Da wirkt sich dann noch eine unangenehme Eigenart der Zähler aus, und zwar sind die Ausgänge DUAL und DEZ als WORD deklariert, >/< Vergleichen kann man aber keine WORDs und muß deshalb den Zählerstand erst noch auf ein INT umkopieren (MOVE). (Diese Typprüfung hat Siemens neuerdings mit den letzten Hotfixes für Step7 classic heimlich abgeschafft).

(*) das funktioniert nur bei 0..15 so einfach und man muß genau wissen wie ein Word im Speicher abgelegt wird. Das neue TIA wird solche Adress-überschneidenden absoluten Zugriffe auch anmeckern. Und wenn man den Zählerstand auf eine OUT-Variable legt, dann kommt man nicht mehr so einfach an das Bit .4 heran.

Noch ein Tip: lege besser keine Words auf ungerade Adressen, da holt man sich schnell unbeabsichtigte Adress-Überschneidungen, z.B. MW1 + MW2 überschneiden sich im MB2. MW0 + MW2 + MW4 dagegen sind OK.

Code:
    +--------+
    |  MOVE  |
...-|EN      |
    |     OUT|-#temp_INT    +-------+
 Z1-|IN      |              |   &   |              Z1
    |     ENO|--------------|       |          +--------+
    +--------+              |       |          | Z_VORW |
                            |       |     E0.1-|ZV      |
               +--------+   |       |          |        |
               | CMP >I |   |       |      ...-|S   DUAL|-MW2
               |        |   |       |          |        |
     #temp_INT-|IN1     |   |       |      ...-|ZW   DEZ|-...
               |        |   |       |          |        |
            16-|IN2     |---|       |----------|R      Q|-
               +--------+   +-------+          +--------+

Eine Frage habe ich noch zur Schnittstellen Parametrierung des MW1. Ist als Out Variabel und Datentyp WORD richtig? Die Merker 2.0 – 2.4 als STAT Variabel Datentyp BOOL?
Das klingt, als ob Du den Zähler in einem FB verwenden willst und den Zählerstand zurückgeben willst. Da würde ich eine OUT-Variable als INT deklarieren und nach dem Zähler-Netzwerk den Zählerstand mit MOVE auf die OUT-Variable geben. Die Merker/Bits 2.0 - 2.4 brauchst Du nicht.

Vorsicht: falls Du vorhast, den FB mehrfach aufzurufen, dann dürfen darin keine absoluten Adressen wie Z1, MW1 und E0.1 verwendet werden. Diese Operanden müssen auf die Bausteinschnittstelle oder STAT gelegt werden, damit sich die FB-Aufrufe nicht gegenseitig beeinflussen/stören.

Harald
 
Zurück
Oben