Step 7 Verständnisproblem mit S5-Timer und VKE

Toki0604

Level-2
Beiträge
670
Reaktionspunkte
133
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen werte Profis :)
Ich habe ein Verständnisproblem mit einem AWL-Code. Ich habe mir schon alleine mit dem Titel schwer getan...
Bei dem Codeschnipsel geht es weniger darum welchen Sinn es hat oder ob es eine andere Möglichkeit gibt (Obwohl ich gerne dazu lerne ;-) ),
sondern vielmehr warum es nicht funktioniert...
Es ging um einen möglichst kurzen AWL-Code um einen Taktimpuls zu erzeugen.

UN T1
L S5T#500ms
SE T1 //wenn die Zeit abgelaufen ist sollte hier für einen Flankenimpuls das VKE1 erzeugt werden, und das kommt auch...(theoretisch)

ergänze ich den Code folgend:

UN T1
L S5T#500ms
SE T1
NOT
=M1.0

bekommt der Merker M1.0 den entsprechenden Flankenimpuls.
Ergänze ich wie folgt:

UN T1
L S5T#500ms
SE T1
ZV Z3

wird auch im entsprechenden Takt hochgezählt.
ABER bei dieser Variante funktioniert nichts:

UN T1
L S5T#500ms
SE T1
U T1
ZV Z3

Ich habe auch direkt im Anschluss an das SE einen bedingten Sprung gehangen, der funktioniert ebenso.
Warum funktioniert die einfache binäre Abfrage auf UND in diesem Moment nicht?


Gruß, Toki
 
Hallo Torsten,
ganz richtig erklären kann ich es dir (in diesem Fall) auch nicht.
Der Fehler ist, dass du den Timer an sich selbst festmachst und dieser im Grunde vom Zyklus unabhängig operiert.
Um es (sauber) in dem Griff zu bekommen verwendest du für die Rückkopplung einfach einen Merker (am Besten auch für den Counter). Das sähe dann z.B. so aus :
Code:
UN M100.0
L S5T#500ms
SE T1
U T1
= M 100.0

U M 100.0  // diese Anweisung ist möglicherweise in dieser Konstellation schon überflüssig ...
ZV Z3

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Erklärung ist very simpel:
Der Timer arbeitet so er denn mal gestartet wurde hart im Betriebssystem, und somit unabhängig vom Zyklus.

Bei deinem letzten nicht funktionierenden Beispiel müsste der Timer also vom Zyklus her betrachtet zwischen der Anweisung SE T1 bzw. dem folgenden U T1 ablaufen,
die Chance hierauf ist praktisch 0. Je länger dein Zyklus jetzt aber wird und je größer der Zeitabstand zwischen SE T1 bzw. U T1 steigt die Wahrscheinlichkeit wieder an.

Also zu Beginn der OB1 den Timer starten, und am Ende des OB1 den Timer abfragen, dazwischen ein möglichst zykluszeitfressendes Programm ...

Mfg
Manuel
 
Zuletzt bearbeitet:
Hallo Larry, Hallo Manuel,

Ich habe diverse mögliche Konstellationen getestet und festgestellt das die Zähler (wenn sie funktionieren) unterschiedliche Werte bekommen.
Was in diesem Falle zu eurer Theorie passen würde. Die Tatsache das der S5 Timer unabhängig zum SPS-Zyklus läuft !!
Jetzt muss ich mir nur noch im Klaren darüber sein welche Variante, unabhängig von der Zykluszeit, die Beste ist...

Im Grunde war der Ursprung des Gedankens, bzw. der Aufgabe, einen 4 Hz.-Takt zu erzeugen.
Oder besser gesagt irgendeinen Takt auf einen einzelnen Bit zu programmieren ohne das Taktmerkerbyte zu nutzen.
Es funktioniert so jetzt zwar, aber vielleicht habt ihr ja noch eine andere / bessere Variante für mich parat?!

Danke auf jden Fall erst Mal für eure Zeit und Gedanken !

Gruß, Torsten
 

Anhänge

  • 20141119_093001.jpg
    20141119_093001.jpg
    243,3 KB · Aufrufe: 36
ABER bei dieser Variante funktioniert nichts:

UN T1
L S5T#500ms
SE T1
U T1
ZV Z3
Ähhm bei der Variante gibts noch ein essentielles Problem im Signalfluss.... ;)

Annahme Timer ist die ersten 500ms gelaufen und geht auf T1 = True
dann siehts im Zyklus so aus

Code:
UN T1 (T1 ist true daher VKE = 0)
L S5T#500ms
SE T1 (T1 wird neu gestartet, T1 ist also wieder False)
U T1 (T1 ist hier also immer false)
ZV Z3 (Zähler kann nicht zählen)
Auch Larrys Variante mit dem Merker dazwischen wird daran nichts ändern.

Das hier geht zum Beispiel schon
Code:
U T1            //diese Variante müsste auch insofern korrekt sein das du jedes Timer-Ereignis mitbekommst.
ZV Z3

UN T1
L S5T#500ms
SE T1
 
Zuletzt bearbeitet:
Hallo Larry,

das war natürlich ohne tieferen Sinn :rolleyes:, ein Copy/Paste Fehler heute morgen nach der Nachtschicht...

Hallo Ronin,

ich werde deine Variante zusammen und im Vergleich mit den anderen Varianten heute Nacht mal an der Firma testen.
Hier habe ich derzeit nur PLCSIM zu Hause und kein Programm mit entsprechender Zykluszeitbelastung.
In der Simulation läuft die Variante synchron zu T1 und T4
Ich bin gespannt.

Gruß, Toki
 
Zur Erklärung der Zählerunterschiede:
In der Variante zwischen Z2/3 bzw. Z4 dürfte auch so ein Effekt sein.
Bei der Variante in der der Timer auf einen Merker gelegt wird, startet der Timer dann erst zwei Zyklen später wieder,
somit hast du pro Zählung einen Versatz jeweils in Höhe von 2x Zykluszeit (Was sich dann natürlich entsprechend addiert).

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auch Larrys Variante mit dem Merker dazwischen wird daran nichts ändern.
Doch, ich denk schon!
Denn der Merker steht nicht nur dazwischen sondern vor allem auch vor dem Start des Timers:
Code:
[COLOR=#ff8c00][B]UN M100.0[/B][/COLOR]
L S5T#500ms
SE T1
U T1
= M 100.0

U M 100.0  // diese Anweisung ist möglicherweise in dieser Konstellation schon überflüssig ...
ZV Z3
Und damit nimmt er das azyklische aus dem Timerablauf, was das eigentliche Problem darstellt.
;)
 
@hucki: Vollkommen richtig. Ich und meine Fischaugen haben natürlich die M100.0-Stelle, die du hervorgehoben hast, übersehen. :shock:

@Larry: War ja klar, wie konnte ich auch nur zweifeln... *sichselbstinsMesserstürzt*
 
Habe es getestet und festgestellt das der Unterschied an einer realen SPS mit 3ms Zykluszeit relativ gering ausfällt im Gegensatz
zu der Simulation im PLCSIM. Habe auch hier jetzt diverse Varianten miteinander verglichen.

Gruß, Torsten
 

Anhänge

  • 20141120_020058.jpg
    20141120_020058.jpg
    219,6 KB · Aufrufe: 17
  • 20141120_015631.jpg
    20141120_015631.jpg
    222,7 KB · Aufrufe: 17
Zurück
Oben