Timerproblem...

schnecke

Level-1
Beiträge
148
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

habe eigentlich ein einfaches Problem, das ich momentan nicht verstehen...

timer.jpg

Der Timer1 sollte doch alle 5 Sekunden für einen Zyklus den Status "1" annehmen, oder?

Dann müsste doch einmalig der Ausgang A3.0 gesetzt werden... das passiert aber nicht.

Was mache ich hier falsch?

Lieben Dank!
 
Eigentlich nicht.
Denn zum Starten des Timers braucht man eine Flanke und die hast du so nicht.

Wenn der Timer einmal zusätzlich z.B mit einem Merker angeschubst wurde kann es funktionieren


bike
 
Danke bike,

meinst du eine Flanke am Setzeingang des Timers?

Aber der Timer läuft ja ab und startet nach 5s wieder von vorne...

Jetzt hast du mich erwischt. ;-)
Habe leider kein S7 hier.
Aber ich kann mich erinnern, dass am S des Timers eine wechselnde Flanke sein muss.
Wenn der Timer immer wieder neu startet, komplett abläuft und der Ausgang nicht gesetzt wird, dann versteh ich das so nicht.
Ein Zähler am Ausgang des Timers würde zeigen ob wirklich der Timer abläuft


bike


P.S: Gegen später muss ich mir das einmal anschauen. Doch meine Erinnerung sagt, dass es so nicht so ganz funktionieren kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Timer1 sollte doch alle 5 Sekunden für einen Zyklus den Status "1" annehmen, oder?

Dann müsste doch einmalig der Ausgang A3.0 gesetzt werden... das passiert aber nicht.

Was mache ich hier falsch?
Hallo Schnecke, ;)
das habe ich auch schon öfter beobachtet, liegt daran das die Zeit Interrup gesteuert ist.
Abhilfe:
Bring mit der Zeit einen Merker und dieser Merker bringt den Ausgang somit ist der Ausgang auf jeden Fall 1.Zyklus High.
Den Merker auch gleichzeitig an das Startsignal des Timers legen, sonst kann sich die Zeit mal "aufhängen".
 
Genau richtig wie Paule sagt:

un m1.0
l s5t#5s
se t1
u t1
= m1.0

funktioniert einwandfrei und hängt sich auch nicht auf.


peter(R)
 
Genau.
Meiner Ansicht nach ist aber zu prüfen, ob ein Zyklus reicht bzw. um es ganz sauber zu bekommen würde ich mir überlegen einen weiteren Timer oder eben einen Taktgenerator zu nutzen.
Somit wäre dann die Signaldauer an M1.0 einstellbar. Damit besitzt dieses immer eine festgelegte Länge und ist nicht direkt von der Zykluszeit abhängig.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Lieben Dank für eure Hilfe!

Also, es gehen in der Tat beide Varianten:

- Mit der Zeit einen Merker bringen UND

- Beide NW tauschen


Meine Fragen dazu:

1) Was genau bedeutet, der Timer ist Interrupt gesteuert?

2) Warum geht das Ganze auch ohne Merker, wenn ich einfach das NW2 vor das NW1 setze? Hierzu hat Andy geschrieben --> zyklische Bearbeitung beachten! Wo liegt der Unterschied, ob der zu setzende Ausgang nun vor oder nach dem Timer angeordnet ist?

Danke...
 
Meine Fragen dazu:

1) Was genau bedeutet, der Timer ist Interrupt gesteuert?

2) Warum geht das Ganze auch ohne Merker, wenn ich einfach das NW2 vor das NW1 setze? Hierzu hat Andy geschrieben --> zyklische Bearbeitung beachten! Wo liegt der Unterschied, ob der zu setzende Ausgang nun vor oder nach dem Timer angeordnet ist?
Zu 1:
Das heißt sobald die Zeit abgelaufen ist, wird der Timer High, unabhängig wo sich das Programm gerade befindet.
Somit gleich zu 2:
Das zeigt sich genau an diesem Beispiel denn man sollte ja erwarten dass sich das Signal des Timers erst nach abgelaufener Zeit und bei der Bearbeitung des Timerbausteins passiert, wie z.B. bei einem R/S Glied.
Aber der Zustand des Timers hat sich schon vorher geändert und darum funktioniert es mit Andy's Lösung.
Ist aber mit Vorsicht zu genießen, vor allem wenn du dann den Timer noch ein weiteres mal mitten im Programm abfragst.
Da hatte ich schon die unglaublichsten Fehler die auch nur ganz sporadisch auftraten.
Darum mein Tipp:
Wird die Zeit weiter verwendet, dann auf einen Merker legen.
 
Das geschilderte Interrupt-Problem tritt allerdings nur bei den Impuls-Timern auf (also den Timern, die einen Impuls erzeugen oder verlängern oder ...). Beim Einschalt- oder Ausschalt-verzögerten Timer nicht.Dort kann der Timer sich durchaus, wie in dem Beispiel von Schnecke wieder selbst abwerfen, was er ja nach der Beischreibung von Schnecke auch tut. Der Ausgang steht hier dann allerdings wirklich nur einen Zyklus (= 10 ms ??) an und da habe ich so meine Zweifel, dass man das Aussen an der SPS sieht (bzw. ein externes Schaltglied wie ein Relais darauf reagiert). Das Programm kann natürlich trotzdem durchaus darauf reagieren ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Ausgang steht hier dann allerdings wirklich nur einen Zyklus (= 10 ms ??) an und da habe ich so meine Zweifel, dass man das Aussen an der SPS sieht (bzw. ein externes Schaltglied wie ein Relais darauf reagiert).

Wenn die Speicherzelle gesetzt wird bleibt die doch ein, oder liege ich falsch? :confused:
Sollte vielleicht doch mal aufstehen, stehe vermutlich auf der Leitung.


bike
 
Der Timer1 sollte doch alle 5 Sekunden für einen Zyklus den Status "1" annehmen, oder?

@Bike:
Ich kann selbst bei maximaler Vergrößerung der von Schnecke eingefügten Grafik nicht erkennen, wie der Ausgang angebunden ist.
Um aer die oben genannte Funktion erfüllen zu können müßte es das sein, was man in AWL als "= A3.0" schreiben würden. Darauf zielte meine Beschreibung. Ein "S A3.0" würde den Ausgang natürlich setzen - und der bleibt dann erstmal "=1" ...

Gruß
Larry
 
Hi Larry

Leider liegst Du falsch glaube ich.
Sonst müsste das Prögrämmchen:

un T1
l s5t#2s
se t1

un t1
spb n1
l mw2
l 1
+i
t mw2
n1: nop 0

... den MW 2 im 2 sekundentakt hochzählen.
Tut es aber nicht.

un m0.0
l s5t#2s
se t1
u t1
= m0.0

un m0.0
spb n1
l mw2
l 1
+i
t mw2
n1: nop 0

... funktioniert aber. Man muss also den Timer über den Merker
in den normalen Zyklus überführen.

peter(R)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Bike:
Ich kann selbst bei maximaler Vergrößerung der von Schnecke eingefügten Grafik nicht erkennen, wie der Ausgang angebunden ist.
Um aer die oben genannte Funktion erfüllen zu können müßte es das sein, was man in AWL als "= A3.0" schreiben würden. Darauf zielte meine Beschreibung. Ein "S A3.0" würde den Ausgang natürlich setzen - und der bleibt dann erstmal "=1" ...

Gruß
Larry

Also ich sehe S A3.0
Aber ich denke wenn mehr Informationen nötig sind wird auch Input kommen.
Denn was der Code tun soll verstehe ich nicht.


bike
 
Ich gehe mal davon aus, dass das ein Versuchsprogrämmchen ist um zu sehen, ob der Zyklusimpuls kommt oder nicht ( zumindest einmal )
mehr steckt wohl nicht dahinter.

peter(R)
 
Hallo Peter,

ich hatte deinen Beitrag in dem anderen Thread (auf den du dich hier beziehst) auch gelesen.
Zur Vervollständigung :
Code:
un T1
l s5t#2s
se t1

un t1
spb n1
l mw2
l 1
+i
t mw2
n1: nop 0
der dargestellte Code tut nicht was er soll - aber wenn man die Sequenz umdreht ...
Code:
un t1
spb n1
l mw2
l 1
+i
t mw2
n1: nop 0

un T1
l s5t#2s
se t1
... dann geht es auf einmal doch ...

Aber du (und auch die Anderen) hast natürlich Recht - mit einem Merker hinter dem Timer ist selbstverständlich sauberer ... ;)

Gruß
Larry
 
Wobei ich gestehen muss, dass mir nicht klar ist warum die "umgedrehte" Version funktioniert :confused::confused:

... da ja der Timer nicht in sich selbst funktioniert und im Falle des SE ja auch nicht wirklich einen Interrupt auslößt ist das Verhalten mir auch ein Rätsel, da ich ja auch im S7-Programm nicht wirklich mit einem Timer sondern eigentlich ja mit einer Speicheradresse (einer Variablen, wie auch ein Merker eine ist) arbeite.

Gruß
Larry
 
Hm, das Ganze wird glaube ich jetzt etwas kompliziert für mich…

Wenn ich euch nun richtig verstanden habe, dann sollte ein Timer (z.B. TON) niemals so

U T1
S A3.0

sondern so

U M1.0
S A3.0

abgefragt werden.


Der Merker M1.0 wird dabei vom Timer T1 gesetzt.

Habe ich das so richtig verstanden, dass man einem Timerausgang immer einen Merker zuweisen sollte, der dann z.B. einen Ausgang setzt?

Denn im Grunde würde es ja auch gehen, nur den Ausgang Q des Timers abzufragen und damit beispielsweise einen Ausgang zu setzen…


Warum nun die umgedrehte Variante funktioniert und die andere nicht, ist mir noch immer nicht klar. :confused:

Wenn die Zeit abgelaufen ist, so wird doch der Timerausgang Q (so wie alle Zustandsänderungen an Ein- u. Ausgängen) in das Prozessabbild der Ausgänge geschrieben. Und dann kann doch im Grunde "Q" (auch ohne einen Hilfsmerker) etwas im Programm setzen oder rücksetzen.

Achja, es handelt sich hierbei nur um ein Versuchsprogramm - das mir die Logik erklären sollte!

Sorry für die doofen Fragen…
 
Zuletzt bearbeitet:
Zurück
Oben