Step 7 S7 Zählerzustand über Vergleicher in andere Zähler umrangieren

Koecher

Level-1
Beiträge
8
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus zusammen,

ich habe ein kleines Problem bei folgendem Vorhaben.
- Eine Sonde (E#) soll immer wenn sie bedeckt wird, verundet mit einem Impulsmerker (M1.5 -1s) einen Zähler (Z0) mit dem Zählwert +1 hochlaufen lassen.
- Wenn die Sonde nun wieder frei wird, soll der Zähler über Vergleicher ausgewertet werden und den jeweils passenden Bereichszähler +1 vorwärtszählen lassen. (Z1 - Z6)
- Nachdem ein Bereichszähler vorwärts gezählt hat, soll der Aktual Zähler (Z0) rückgesetzt werden, damit das Spiel wieder von vorne beginnen kann.

Ansich eine einfache programmierung dachte ich, nur wurden meine Zähler heute Nacht nicht wirklich sinnvoll damit angesteuert.
Vielleicht habt ihr ja eine Idee.

NW 1 : (FUP)

Zählerbeschaltung Z0 :

U E#
U M1.5
ZV
S (VKE 1 Merker)
C#0


NW 2 : (AWL)

UN Z0
SPB 1
U Z0
L Z0
L 10
==I
SPB 2
U Z0
L Z0
L 11
==I
SPB 3
.
.
u.s.w.


.
.
.
2: U E#
ZV Z 1
R Z0
3: U E#
ZV Z 2
R Z0
.
.
u.s.w
1: nop 0



In dieser Fassung werden scheinbar alle Zähler unterschiedlich oft angesprochen und das Ergebnis ist somit nicht genau auswertbar.

Grüße
Köcher
 
Code:
U Z0
L Z0
L 10
==I

was soll das machen?

kannst Du bitte das reale Programm posten, dieses Geschreibsel lässt viele Fragen offen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Zähler Z0 wird ja faktisch 1, wenn er einen Wert hochzählt
Dann soll er seinen Wert mit 10 vergleichen.
Ist er gleich der 10, soll er die jeweilige Sprungmarke anspringen.
Wird die Sonde dann wieder belegt, soll er den Bereichmerkerzähler in den er gesprungen ist +1 hochsetzen.
 
Was wäre anders, wenn Du nicht

U Z0

schreibst?

Wenn der Inhalt des Z zehn ist , ist die Abfrage "1".
Jedoch hast Du es nicht mal verundet.... kannst Du bitte das Original posten.
 
@Koecher:

Die Simatic-Zähler brauchen eine postive Flanke am ZV-Eingang um zählen zu können.
Anstelle der Springerei ist es besser mit zwischenvariablen zu arbeiten um dann die Zähler punktgenau mit TRUE bzw. FALSE-Signalen zu versorgen.

Ach ja - bei 999 ist bei den Zs schluss.
 
Wenn ich ohne U Z0 schreibe, laufen alle Zähler gleichmässig hoch, da alle Sprungmarken angetriggert werden. Das irritierte mich gestern ja.
Den Programmabschnitt musste ich gestern wieder rauslöschen, da mir das S7 abgeschmiert ist.
Komme auch erst wieder heute gegen 22 Uhr wieder an meine Programmierrechner auf Arbeit,
wollte daher mal einige Ideen sammeln bis dahin.

Im Grunde soll es ja nur eine Auswertung des Sondensignals über ein paar Tage sein.
Also sprich, wieviele sekunden X steht die Sonde am häufigsten an.
 
@dts. daher habe ich einen Blinkmerker mit 1s am Zähleingang verundet. der Z0 zählt sauber hoch.

@ marlob. - die bereichzähler sollen die Sekunden darstellen in den die Sonde dagewesen ist.
Also beispielsweise Z1 = 1s / Z2 = 2s u.s.w.
Einfach eine Sortierung des Ergebnisses
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@dts. daher habe ich einen Blinkmerker mit 1s am Zähleingang verundet. der Z0 zählt sauber hoch.

@ marlob. - die bereichzähler sollen die Sekunden darstellen in den die Sonde dagewesen ist.
Also beispielsweise Z1 = 1s / Z2 = 2s u.s.w.
Einfach eine Sortierung des Ergebnisses

Und warum vergleichst Du dann auf 10, 11, usw?
Kannst Du bitte so nett sein, Deine Aufgabenstellung mit kurzen und einfachen Sätzen nochmals zu beschreiben.
Was hast Du für Eingänge?
Was soll am Ausgang (den Ausgängen) herauskommen?
 
Stimmt ich gebe zu das die 10, 11 usw. Eher irritieren. Also nochmal ganz einfach.

Ich habe nur ein Signal von einer Sonde (Eingang1). Nach 10 Sekunden "1 Signal" stellt die Materialzufuhr ab. Da die Abzugsbänder allerdings weiter Material fördern, wird die Sonde wieder recht schnell frei und somit kann die Anlage wieder gestartet werden.
Dies geschieht in 10s + x-Sekunden.

Diese x-Sekunden sind immer unterschiedlich. Sie belaufen sich auf 1 bis 10 Sekunden.

Ich möchte nun knapp zwei Wochen das Programm auswerten lassen, wie häufig die Sonde x-Sekunden lang da war.

Das Ergebnis möchte ich an Zählern ablesen können.

Z1 (1s) bis z10 (10s)

Ich hoffe das war besser erklärt, sorry
 
Symbol Tabelle ^^ :

E1.0 = Sonde "1 Signal"

M1.5 = Impulsmerker 1s

Z0 = Zähler 0 : Aktualzähler
Z1 = Zähler 1 : Zähler für x = 1s
Z2 = Zähler 2 : Zähler für x = 2s
Usw.
Z10 = Zähler 10 : Zähler für x = 10s
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also, in 10 Minuten reingeklopft....
Die Werte stehen in einem DB10 von DBW0 (=Z1s) bis DBW18 (=Z10s).

EDIT: Fehler korrigiert
 

Anhänge

  • Zähler.PNG
    Zähler.PNG
    10,3 KB · Aufrufe: 26
Zuletzt bearbeitet:
Wieso, die Zähler sind wortweise, steht eh oben DBW0 bis DBW18

Das L Z0 nach dem LAR1 kann man löschen, das ist sinnlos.
 
Zuletzt bearbeitet:
Also, in 10 Minuten reingeklopft....
Die Werte stehen in einem DB10 von DBW0 (=Z1s) bis DBW18 (=Z10s).

EDIT: Fehler korrigiert

Wenn man versteht was man tut, ist das sicherlich in 10 min getan.
Solche Lösungen liegen definitiv fernab meiner Programmierkunst. ;)


Ich werd mir nachher mal einen neuen DB kreieren, dass reinschreiben und ihn dann im OB1 aufrufen.
Sofern meine Anlage nicht crashed, bin ich gespannt ob es auch funktioniert :)

Ich sage schonmal danke.
 
Zuletzt bearbeitet:
Zurück
Oben