# Zähler programmieren



## googy (5 November 2008)

Kann mir vielleicht einer einen Beispiel geben , wie man einen Zähler so programmieren könnte, dass er einen Merker z.B. MW120
5 mal erhöht.

Bsp:
erter Durchlauf -> Merker 120.0
zweiter Durchlauf -> Merker 120.1

usw.


----------



## Larry Laffer (5 November 2008)

???
wollst du zählen oder schieben ?
Für Schieben lautet der Befehl dafür "SRW 1"
Flanken-Steuerung nicht vergessen ...

Gruß
LL


----------



## Steve81 (5 November 2008)

Willst du den den Wert des MW's erhöhen oder willst du ein Bit schieben oder willst du je nach Zählwert einen anderen Merker setzen oder bin ich zu blöd deine Frage zu verstehen? 

Edit: Da hats einer noch früher nicht verstanden.


----------



## vierlagig (5 November 2008)

vielleicht will er ja auch füllen ... 

http://sps-forum.de/showpost.php?p=160942&postcount=8


----------



## googy (5 November 2008)

Ich möchte, dass ein Zylinder 5 mal ausfährt.
Dazu brauche ich doch einen Zähler.

Kann ich eiene Merker erstellen, der bis 5 hochzählt?


----------



## vierlagig (5 November 2008)

googy schrieb:


> Kann ich eiene Merker erstellen, der bis 5 hochzählt?




```
*
      U     #xImpuls        //der zählimpuls
      FP    #xHelpFlag      //die flankenauswertung
      SPBN  res
      L     #iCounter       //z.b. ein merkerwort
      +     1
      T     #iCounter       //inkrementierter wert
res:  U     #xReset         //der resetimpuls
      SPBN  end
      L     0               //nullt
      T     #iCounter       //das z.b. merkerwort
end:  NOP   0
```

der einfachste zähler, der mir grad einfällt


----------



## Larry Laffer (5 November 2008)

vierlagig;164912... der einfachste zähler schrieb:
			
		

> Naja ... nicht so ganz. Es gibt da ja auch noch den S7-Zähler :
> 
> 
> 
> ...


----------



## googy (5 November 2008)

Irgenwie werden bei mir die meisten Zeichen rot dargestellt.
Woran ligt das?


----------



## vierlagig (5 November 2008)

sogar mit sternchen *ROFL*

ich habe bei meinem beispiel die lokale adressierung gewählt, da mir der abstand zwischen operanden kennzeichen und adresse nicht geläufig ist und es nur schnell im editor zusammen geschrieben habe 

@larry: ich glaub du hast recht, das ist bei diesem fall wohl angebrachter


----------



## googy (5 November 2008)

Versteht mich bitte nicht falsch aber ich bin ein Anfänger
und möchte die Funktionsweise eines Zählers anhand des Beispiels nachvollziehen.

Hier ist ein Screenshot.

Wie erstelle ich ein Programm, welches mir (siehe Anhang), nach dem klicken auf MB 110.0 dem den Merker 120 erhöht.(Bis 5)


----------



## OHGN (5 November 2008)

vierlagig schrieb:


> ...........
> @larry: ich glaub du hast recht, das ist bei diesem fall wohl angebrachter


*Larrys *Beispiel macht bei mir aber auch fast alles rot...ROFLMAO:


----------



## Larry Laffer (5 November 2008)

OHGN schrieb:


> *Larrys *Beispiel macht bei mir aber auch fast alles rot...ROFLMAO:


 
Du bist ja böse ... 
Das hätte ich aber von dir nicht gedacht ...


----------



## googy (5 November 2008)

Ist soweit alles richtig?

Wie bringe ich jetzt den Zähler dazu hochzuzählen?


----------



## vierlagig (5 November 2008)

googy schrieb:


> Wie erstelle ich ein Programm, welches mir (siehe Anhang), nach dem klicken auf MB 110.0 dem den Merker 120 erhöht.(Bis 5)




```
*
      U     M    110.0        //der zählimpuls
      FP    M    110.1        //die flankenauswertung
      SPBN  res
      L     MB   120          //z.b. ein merkerwort
      +     1
      T     MB   120          //inkrementierter wert
res:  U     M    110.2        //der resetimpuls
      SPBN  end
      L     0                 //nullt
      T     MB   120          //das z.b. merkerwort
end:  NOP   0
```


----------



## vierlagig (5 November 2008)

googy schrieb:


> Ist soweit alles richtig?
> 
> Wie bringe ich jetzt den Zähler dazu hochzuzählen?



beobachte das MB121  ... klingt komisch, is aber so


----------



## googy (5 November 2008)

vierlagig schrieb:


> ```
> *
> U     M    110.0        //der zählimpuls
> FP    M    110.1        //die flankenauswertung
> ...


 
Könntest du einen Screenshot von den Zähler posten.
Ich kann die Darstellung nicht ändern.

Weitere Frage: Bei dem Zählen, den ich erstellt habe. Warum wird dort der Merker 121 verändert?
Er taucht doch im Zähler nicht auf


----------



## vierlagig (5 November 2008)

googy schrieb:


> Könntest du einen Screenshot von den Zähler posten.
> Ich kann die Darstellung nicht ändern.



nein, da nur im editor geproggt
da fehlen paar noppen um es in K*U*P darstellen zu können



googy schrieb:


> Weitere Frage: Bei dem Zählen, den ich erstellt habe. Warum wird dort der Merker 121 verändert?
> Er taucht doch im Zähler nicht auf



wohl taucht er auf! das MW120 besteht aus MB 120 und MB 121 und da siemens mit little endian arbeitet steht das LSB im zweiten byte


----------



## Gerhard K (5 November 2008)

@vl 
du schreibst googy was in awl hin,obwohl er probleme hat einen zähler zum laufen zu bringen.gib ihm zeit sich einzugewöhnen.


----------



## vierlagig (5 November 2008)

Gerhard K schrieb:


> @vl
> du schreibst googy was in awl hin,obwohl er probleme hat einen zähler zum laufen zu bringen.gib ihm zeit sich einzugewöhnen.



guckst du seinen screenshot, siehste, hat er zähler in fup schon selberst gefunden 

UND: AWL ist kein hexenwerk!


----------



## OHGN (5 November 2008)

Und wech isser....
Ob er's denn nun verstanden hat??


----------



## googy (5 November 2008)

Ich bin noch nicht weg.
Ich versuche es gerade zu verstehen.


----------



## googy (5 November 2008)

Ist es jetzt so weit in Ordnung(Anhang)?
Ich glaube da fehlt noch was. 
Was muss ich bei "zw" (Zählwert) eingeben?


----------



## OHGN (5 November 2008)

Also so wie in Deinem Screenshot wird Dein Zähler funktionieren.
Beobachte im PLCSIM aber statt des M*B*120 mal das M*W*120 und Du wirst sehen: Bei jedem 0-->1 Übergang des M110.0 wird eins hochgezählt...
.


----------



## vierlagig (5 November 2008)

googy schrieb:


> Was muss ich bei "zw" (Zählwert) eingeben?



da kannste z.b. deine 5 eingeben mit C#5 war das glaub ich in FUP ... dann schaltet der ausgang Q beim wert fünf auf true


----------



## OHGN (5 November 2008)

googy schrieb:


> Ist es jetzt so weit in Ordnung(Anhang)?
> Ich glaube da fehlt noch was.
> Was muss ich bei "zw" (Zählwert) eingeben?


Hast Du Dir übrigens schon mal die Step7- Onlinehilfe zu diesem Zähler angesehen? (Markieren und F1 drücken...)


----------



## googy (5 November 2008)

OHGN schrieb:


> Also so wie in Deinem Screenshot wird Dein Zähler funktionieren.
> Beobachte im PLCSIM aber statt des M*B*120 mal das M*W*120 und Du wirst sehen: Bei jedem 0-->1 Übergang des M110.0 wird eins hochgezählt...
> .


 
Ich kann den Objektbaustein nicht abspeichern, weil da noch Fragezeichen sind. Beim Klicken auf speichern kommt folgende Fehlermeldung:[Ein oder mehrere Operanden sind nicht beschriftet]


----------



## OHGN (5 November 2008)

vierlagig schrieb:


> da kannste z.b. deine 5 eingeben mit C#5 war das glaub ich in FUP ... dann schaltet der ausgang Q beim wert fünf auf true





> Eine Signalzustandsabfrage nach "1" an Ausgang Q ergibt "1", wenn der Zählwert größer als "0" ist. Die Abfrage ergibt "0", wenn der Zählwert gleich "0" ist.


Mit dem am Eingang ZW anliegendem Wert wird der Zähler bei einem Signalwechsel von 0 auf 1 am Eingang S vorbelegt.


----------



## googy (5 November 2008)

Ahh. OK jetzt funktioniert es. 
Beim klicken auf MB 110.0 wird MW120 und um 1 erhöht.


----------



## vierlagig (5 November 2008)

OHGN schrieb:


> Mit dem am Eingang ZW anliegendem Wert wird der Zähler bei einem Signalwechsel von 0 auf 1 am Eingang S vorbelegt.



sorry, ein s7-200 ausrutscher meinerseits


----------



## googy (5 November 2008)

Eine Frage hätte ich da noch.

Wenn der Zähler (MW120) den Wert 9 überschreitet, springt er automatisch auf 16. 
Warum


----------



## vierlagig (5 November 2008)

googy schrieb:


> Eine Frage hätte ich da noch.
> 
> Wenn der Zähler (MW120) den Wert 9 überschreitet, springt er automatisch auf 16.
> Warum



häng mal dein MW120 an DUAL und nicht DEZ 

DEZ machts dir BCD-codiert
DUAL als dezimalzahl

großes S idiotie halt


----------



## OHGN (5 November 2008)

Schreib dein MW120  an den Zählerausgang "DUAL".
Der Augang "DEZ" ist BCD-Codiert.
.


----------



## googy (5 November 2008)

Danke!

Weitere Frage: Wo ist der Unterschied zwischen *M*110.0 und *MW*120 (M und MW)?
Warum darf ich bei "ZV" kein MW verwenden und bei DUAL kein M?


----------



## Gerhard K (5 November 2008)

M100.0 ist ein bit-->Merker
MB-->Merkerbyte--> 8bit
MW -->Merkerwort -->2Byte-->16bit
MD-->Merkerdoppelwort--->4byte-->32bit
such mal nach Datentypen


----------



## vierlagig (5 November 2008)

na? wer machts? der dumme 4L wieder ... na gut ...

also:

der speicherbereich einer steuerung ist zusammenhängend, überlappend und einzeln ansprechbar. wir bleiben mal bei merkern, das ganze ist für E/As genauso anwendbar...

mit M3.0 adressierst du ein *BIT* welches die signal zustände true und false also 1 und 0 kennt
8 *BIT* ergeben ein *BYTE* ... M3.0 ist bestandteil des MB3, damit kannst du 2^8 verschiedene zustände speichern ... also 256, höchster wert ist 255 wegen 0
2 *BYTE* ergeben ein *WORT* ... MB3 ist bestandteil des MW2 aber eben auch des MW3 ... hier ist sauberes handling notwendig, am besten nur mit durch zwei teilbaren zahlen adressieren ...
2 *WORT* ergeben ein *DOPPELWORT* ... MW2 ist bestanteil des MD0, aber auch von MD1 (nicht gut), MD2 (vertretbar), MD3 (nicht gut und da ist nur ein teil des MW2, nämlich nur MB3 drinnen)

verstehste?

in BITs kann man zwei zustände speichern
mit BYTES hat man in der arithmetik eher selten zu tun, das sind dann schon recht spezielle anwendungsfälle
WORT benutzt man für INT zahlen
DWORT können DINT und REAL zahlen speichern

[edit] doch nicht, der gerhard macht den vortänzer ... auch schön [/edit]


----------



## Gerhard K (5 November 2008)

wollte dich nur entlasten.aber schön wie ausführlich du das machst.
ich bin minimalist und hab nur das wirklich notwendigste geschrieben


----------



## vierlagig (5 November 2008)

Gerhard K schrieb:


> wollte dich nur entlasten.aber schön wie ausführlich du das machst.



fehlt halt noch das mit dem little endian .. aber ich denke, das hat er erst schon verstanden


----------



## Gerhard K (5 November 2008)

und was ist mit den nippel,die hättest du auch noch einbinden können ist mir gerade aufgefallen


----------



## googy (5 November 2008)

OK! Soweit klar 

Ich hätte da noch eine Frage.
Ich habe gerade versucht den Zähler so einzustellen(Anhang), dass er beim erreichen von Wert 5 den Ausgang Q setzt.

Das tut er aber nicht. Der Ausgang wird gleich bei der ersten Wertäderung von MB110 gesetzt.


----------



## vierlagig (5 November 2008)

Gerhard K schrieb:


> und was ist mit den nippel,die hättest du auch noch einbinden können ist mir gerade aufgefallen



du meinst nibble? die 4bits? die werden ja erst interessant wenn man hexadezimal zahlenwerte zuweisen oder interpretieren möchte ... als datentyp in einer S7-steuerung haben sie keine bedeutung


----------



## Gerhard K (5 November 2008)

mit m110.1 setzt du den zählwert.hast das wahrscheinlich nicht gemacht denke ich mal


----------



## Gerhard K (5 November 2008)

@vl
ich weiß das es nibble heißt,aber...


----------



## vierlagig (5 November 2008)

googy schrieb:


> Ich habe gerade versucht den Zähler so einzustellen(Anhang), dass er beim erreichen von Wert 5 den Ausgang Q setzt.



das war erst mein bescheidener S7-200-gedankenfehler ... man kann halt doch nicht alle steuerungen ohne zugriff auf die software im kopp haben ...

wenn du den wert abfragen willst, mach es wie von larry vorgeschlagen, mit einem vergleicher ... da kannst du dann auch gern dein MW benutzen


----------



## googy (5 November 2008)

Gerhard K schrieb:


> mit m110.1 setzt du den zählwert.hast das wahrscheinlich nicht gemacht denke ich mal


 
Das Problem ist, dass der Ausgang A4.0 erst beim Erreichen von Wert 5 gesetzt werden soll und nicht vorher.
Das tut er aber nicht.


----------



## Gerhard K (5 November 2008)

oh sorry denkfehler von mir.
wie vl geschrieben hat mach´s über einen vergleicher


----------



## googy (5 November 2008)

OHGN schrieb:


> Hast Du Dir übrigens schon mal die Step7- Onlinehilfe zu diesem Zähler angesehen? (Markieren und F1 drücken...)


 
Habe mir gerade die Hilfe angeguckt und da steht, dass der Ausgang Q 1 so lange gesetzt ist, bis der Wert des Zählers ungleich null ist.
Daher klapt es also nicht...

Was komisch ist, auch wenn der Zähler auf 0 gesetzt wird, bleibt sein Augang Q auf 1 gesetzt. Warum?


----------



## vierlagig (5 November 2008)

googy schrieb:


> Was komisch ist, auch wenn der Zähler auf 0 gesetzt wird, bleibt sein Augang Q auf 1 gesetzt. Warum?



setzt du den zähler, also Z1 auf null oder dein MW120?


----------



## googy (5 November 2008)

vierlagig schrieb:


> setzt du den zähler, also Z1 auf null oder dein MW120?


 
Habe das Problem gelöst. Hatte bei dem Ausgang des Zählers fälschlicherweise einen Setzen-Baustein verwendet. Habe diesen gegen Zuweisungs-Baustein ausgetauscht uns schon funktioniert es.

Könntest du mir einen Tip geben bei welchem Eingang ich die Vergleicher-Bausteine einfügen soll, damit der Ausgand erst bei 5 gesetzt wird?


----------



## vierlagig (5 November 2008)

googy schrieb:


> Könntest du mir einen Tip geben bei welchem Eingang ich die Vergleicher-Bausteine einfügen soll, damit der Ausgand erst bei 5 gesetzt wird?



 ...wat?


```
*
      +----------+
      | CMP_I <= |
MW120 +          |    A 0.0
      |          |   +-----+
    5 +          +---+  =  |
      |          |   +-----+
      +----------+
```

macht, dass dein augang eins ist solange, der wert <= 5 ist

bei der bezeichnung CMP_I <= bin ich mir absolut nicht sicher,aber du wirst den richtigen finden


----------



## googy (5 November 2008)

Erstmal danke. An welcher Stelle(Zähler) soll ich den Compare-Baustein einfügen?


----------



## vierlagig (5 November 2008)

netzwerk 2 z.b.


----------



## googy (5 November 2008)

vierlagig schrieb:


> netzwerk 2 z.b.


 
Irgenwie kriege ich das nicht hin.

Könntest du mal einen Blick drauf werfen?


----------



## vierlagig (5 November 2008)

nich setzen, wenn du nirgends rücksetzt


----------



## googy (5 November 2008)

vierlagig schrieb:


> nich setzen, wenn du nirgends rücksetzt


 
Danke, es hat geklappt!


----------



## Gerhard K (5 November 2008)

ausserdem verwendest du einen vergleicher <
du solltest einen >= verwenden,sonst setzt du den ausgang wieder sofort und bei 5 erlischt er.



> nich setzen, wenn du nirgends rücksetzt


 
nicht vergessen


----------



## Gerhard K (5 November 2008)

hab gerade gesehen das es so gewünscht ist.erst nach 5 mal zählen soll der ausgang false sein


----------



## googy (5 November 2008)

Gerhard K schrieb:


> hab gerade gesehen das es so gewünscht ist.erst nach 5 mal zählen soll der ausgang false sein


 
Das Programm(Anhang) habe ich dann noch ein wenig überarbeitet.
Ab 5 wird der Ausgang 0.0 gesetzt. Ab 10 wird der Ausgang 0.0 zurückgesetzt.


----------



## vierlagig (5 November 2008)

hehe ... können wir dich jetzt schon langsam alleine laufen lassen oder streckst du noch die arme nach obenund willst gehalten werden? *ROFL*


----------



## googy (5 November 2008)

Kann man das auch so machen, dass der Zähler automatisch bis 5 zählt und die Werte dabei langsam anzezeigt werden?

ZB: *1* dann nach einer Sekunde *2* usw bis *5*


----------



## vierlagig (5 November 2008)

googy schrieb:


> Kann man das auch so machen, dass der Zähler automatisch bis 5 zählt und die Werte dabei langsam anzezeigt werden?
> 
> ZB: *1* dann nach einer Sekunde *2* usw bis *5*



ok, können wir nich ... öhm ... *TAKTMERKERBYTE*


----------



## Gerhard K (5 November 2008)

generier einen takt von 1 sekunde und hänge ihn an ZV.schon zählt er alle sekunden 1 hoch.
noch werden wir die händchen halten müssen VL
@vl
wrast schon wieder mal schneller


----------



## vierlagig (5 November 2008)

das schöne ist, dass hatten wir erst gestern nacht und ich freu mich schon auf die auswüchse des ganzen


----------



## Gerhard K (5 November 2008)

naja was sollten wir sonst die ganze nacht machen.
neustart


----------



## vierlagig (5 November 2008)

Gerhard K schrieb:


> neustart



kein alkohol ist auch keine lösung (die toten hosen)

bzw.

nichts ist so schön auf der welt, wie betrunken traurige musik zu hören (tomte)


----------



## Steve81 (5 November 2008)

Ihr redet doch nicht etwa davon?


----------



## Gerhard K (5 November 2008)

blitzgneißer (toni polster)
*ACK*


----------



## vierlagig (5 November 2008)

Steve81 schrieb:


> Ihr redet doch nicht etwa davon?



ob uns bester micha das schon implementiert hat?


----------



## googy (5 November 2008)

Ich habe einen Taktgeber gefunden und stur in das Programm eingefügt.
Das ganze funktioniert auch.
Leider verstehe ich die Funktionsweise des Taktgebers nicht ganz.

Kann mir einer die Funktionsweise des benutzten Taktgebers(Anhang) erklären?


----------



## Gerhard K (5 November 2008)

cpu taktmerker war eigentlich gemeint.
du mußt keinen globalen timer verwenden.
im hardwaremanager cpu-->eigenschaften->taktmerker->häckchen und entweder die 0(MB0) drinnenlassen oder irgendein gewünschtes byte auswählen.

du brauchst dann für sekundentakt den Merker M x.5.
sonst muß das wieder vl schreiben


----------



## vierlagig (5 November 2008)

googy schrieb:


> Kann mir einer die Funktionsweise des benutzten Taktgebers(Anhang) erklären?



da gerhard sich weigert, mach ich halt mal wieder die erklärung:

du hast da einen timer, der läuft hoch, wenn der timer nicht durchgeschalten hat und das macht der ne ganze sekunde lang, bis er halt einschaltet, juche, dann wird er automatisch zurückgesetzt und schaltet wieder ein nach, genau, richtig, einer sekunde ... das, mein kleiner freund ist leider kein takt, sondern nur ein impulsgeber: 1s false - 1zyklus true - 1s false - 1zyklus true ... taktgeber geht anders, hat mindestens gleiches puls-pause-verhältnis, im idealsten fall aber ein variables


----------



## awe_wolfsburg (27 Juli 2010)

Hallo..

Ich mache jeztzt eine Frequenzmessung mittels FM350-1. Ich habe schon die Pulses von Geber bekommen und habe ich auch die Frequenz berechnet. 

Ich mache für jede Sekunde eine Zähler. Diese Zähler zählt bis zum 100.Zähler und danach reset. Fangt die Zähler wieder von 1 an. 

Um ein frequenz zu messen. Frequenz= [Impulses/(1s*Zähler)]
Im mein program:
Impulses= DB1.DBD 34
Zähler = MW 76
Frequnez = MD 78

Mein Problem ist, mein Zähler reset nach dem 100 Zähler bzw 100 Sekunde, aber mein Impulses zählt weiter. Ich muss mein Impulses auch nach dem 100 Zähler bzw 100 Sekunde reset, um eine richtige Frequenz zu berechnet. Aber habe ich kein Idee das zu machen. Hilft mir, ich bin bin neue Benutzer im SPS.


----------

