Problem mit Timer und Zähler innerhalb eines FC

A

Anonymous

Guest
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,

ich stehe vor einem großen Problem.
Ich möchte in einem FC mit einem Taktgeber (SE-Timer) einen Zähler hochzählen lassen.
Funktioniert auch. Zumindest manchmal!
Ich bin deshalb schon kurz vorm Verzweifeln, vielleicht kann mir hier jemand weiterhelfen?


So sieht mein OB1 aus:
Code:
U     E      0.0
L     C#0
S     Z      1
CC    FC     1

BE

FC1 (diese Variante funktioniert!!!):
Code:
UN    T      1
ZV    Z      1

UN    T      1
L     S5T#10MS
SE    T      1

BE

FC1 (diese Variante funktioniert nicht!!!):
Code:
UN    T      1
L     S5T#10MS
SE    T      1

UN    T      1
ZV    Z      1

BE

Ich weiß einfach nicht mehr weiter! :cry:
Was ist am zweiten Code anders als am ersten??????

Für eure Hilfe wäre ich wirklich sehr sehr dankbar!

P.S. ich verwende den Simatic Manager V5.1 SP3 mit PLCSIM
 

Ralf

Well-known member
Beiträge
194
Punkte Reaktionen
50
Was willst Du erreichen,den Eingang entprellen? Der Zähler in Beispiel 2 sieht keine positive Flanke, muß er aber um zu zählen

Gruß

Ralf
 
OP
A

Anonymous

Guest
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,

danke erstmal für die schnelle Antwort.
Erreichen möchte ich damit eigentlich nichts bestimmtes!

Ich bin nur gerade am vorbereiten für meine Technikerprüfung und dabei stieß ich eben auf dieses Problem.

Könntest du mir vielleicht noch kurz erklären warum der Zähler im 2. Beispiel keine Flanke sieht? Wieso dann im ersten Beispiel?

Der Timer1 ist alle 10ms für einen Zyklus lang auf high.

Im 1. Beispiel wird ja der Zähler auch nur alle 10ms erhöht.
(also in abhängigkeit vom Timer)

Aber auch im 2. Beispiel ist doch der Timer1 alle 10ms auf 1, wiso dann das Prblem mit der fehlenden Flanke??

Sorry aber ich kapiers einfach nicht.
 

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
301
Claus schrieb:
FC1 (diese Variante funktioniert!!!):
Code:
UN    T      1                // Timer =0
ZV    Z      1                // dann zählen

UN    T      1                // Timer = 0
L     S5T#10MS  
SE    T      1                // Timer = 1

BE

FC1 (diese Variante funktioniert nicht!!!):
Code:
UN    T      1                     // Timer = 0
L     S5T#10MS
SE    T      1                     // Timer = 1

UN    T      1                    // Timer ist schon 1, deshalb nicht zählen
ZV    Z      1

BE

Ich
P.S. ich verwende den Simatic Manager V5.1 SP3 mit PLCSIM

Dann geh in den FC auf Online (Brille) und guck nach dem Status. Damit musst Du Dich zwangsläufig auseinandersetzen. Und wenn man das in Ruhe macht und sich nicht zu viele komplizierte Gedanken macht, ist es ganz ganz ehrlich simpel und logisch :wink: .


Probier das mit dem Status und meld Dich, wenn&s geklickert hat

Gruß pt
 
OP
A

Anonymous

Guest
Hallo,

das mit dem Status habe ich schon probiert.
Im Simulator habe ich das ganze dann auch Zyklusweise ausgeführt.

Daraus ersehe ich auch dass sich der Status in der Zeile UN T1 nicht verändert obwohl T1 doch alle 10ms eine high - low Flanke aufweist.
(Wiso wirkt sich der Status von T1 nicht in der Zeile UN T1 aus)

Also wenn doch T1 alle 10ms für eine Zyklus lang 1 ist, müsste doch dann im nächsten Zyklus (T1 wird ja wieder 0) gezählt werden, da ja T1 von 1 auf 0 geht.

Wo liegt mein Denkfehler?

[/list]
 
OP
A

Anonymous

Guest
Zuviel Werbung?
->Hier kostenlos registrieren
Ach eins fällt mir auch noch auf,

das VKE in der Zeile UN T1 ist immer 1, obwohl es in der Zeile SE T1 alle 10ms 0 wird.

Sorry für diese blöden Fragen, aber ich bin wirklich am Ende.

Das Ding macht mich wahnsinnig! :twisted:
 

Balou

Well-known member
Beiträge
221
Punkte Reaktionen
0
Moin,

ich ahb das auch mal probiert und hatte auch probleme damit

manchmal hats gefunzt und manchmal nicht

abhilfe habe ich erst gefunden nachdem ich das ganze so geschrieben hab:

UN M0.0
L S5T#10ms
SE T1

U T1
= M0.0


UN M0.0
ZV Z1

Scheinbar gibt es ein Problem wenn man die Zeit nur negiert und so ans Zeitglied schreit

MfG Balou
 

Martin Glarner

Well-known member
Beiträge
240
Punkte Reaktionen
25
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo zusammen
Die aktuelle Zeit eines S5-Timer wird vom System unabhängig, in der entsprechenden Zeitbasis 10ms, 100ms, 1s oder 10s, dekrementiert.
Dadurch kann die die Abfrage "U T1" irgendwan während einem Zyklus erfüllt sein.
Mit einem Merker, wie es Balou getestet hat, umgeht man dieses Problem.
 
OP
A

Anonymous

Guest
Hallo,

liegt das jetz daran dass die Timer unabhängig vom Zyklus ablaufen?
Aber setzt sich der SE-Timer irgendwo innerhalb des Zyklusses dann auch selbständig zurück?

Wiso funktioniert das 1. Beispiel von mir immer und das 2. nie???
 

Martin Glarner

Well-known member
Beiträge
240
Punkte Reaktionen
25
Hallo,
liegt das jetz daran dass die Timer unabhängig vom Zyklus ablaufen?
ja
Aber setzt sich der SE-Timer irgendwo innerhalb des Zyklusses dann auch selbständig zurück?
nein, der SE-Timer wird zurückgesetzt, wenn der Befehl "SE T1" mit VKE log.0 bearbeitet wird. Zweite Variante wäre noch "R T1"


Problem beim Beispiel 2:
Z1 soll vorwärts zählen, wenn die Zeit T1 nicht abgelaufen ist.
Da die Zeit sofort wieder gestartet wird, wenn die Zeit abgelaufen ist, ist nach dem Befehl "SE T1" die Zeit niemals abgelaufen.
Da der Befehl "ZV Z1" nur funktioniert, wenn zuvor dieser Befehl einmal mit VKE=log.0 bearbeitet wurde, wird hier nicht retour gezählt.
Die Parameter "ZV", "ZR" und "S" der S5-Zähler werden nur bei einem VKE-wechsel von 0 nach 1 ausgeführt. Die Flankenauswertung wird vom S5-Zähler intern durchgeführt. Beim Beispiel 2 funktioniert dies nicht.
 
Oben