Timer problem

S

spooki01

Guest
Zuviel Werbung?
->Hier kostenlos registrieren
Hi ich hab da ein kleines problem und zwar möchte ich einen Timer erstellen der anhält bei einem signal und bei einem zweiten wieder weiter läuft aber nur insgesamt 3 minuten Ich habe schon versucht über einen datenbaustein die zeiten dort abzulegen jedoch gelingt es mir nicht die restzeiten irgendwie zu erfassen.

Wäre nett wenn mir wer helfen könnte

Mfg Spooki01
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
Ich habe die Timer immer gehasst. Für so etwas würde ich Timer nur benutzen, um einen regelmäßigen Impuls zu erzeugen und diesen in einem Merker- oder Datenwort hochzählen.

U E 0.0 Starteingang
S M0.1 Timer läuft

U E0.1 Stoppeingang
R M 0.1 Timer stopp

UN M0.0 kein Sekundenimpuls
ON M0.1 Timer läuft nicht
SPB =KIMP dann nicht bearbeiten
L MW2
ADD kf+1
T MW2
LMW 2
L KF+180 180 sek=3 Min
>=F
R M0.1 Timer gestoppt wegen Max. Zeit
KIMP: NOP 0
 
OP
S

spooki01

Guest
Zuviel Werbung?
->Hier kostenlos registrieren
Dankeschön für deine schnelle antwort
Werd ich morgen mal ausprobieren allerdings muß ich die 3 min sicherlich noch änderbar machen also über ein OP7 aber das is ja nich mehr das problem
Nochmals danke
 
OP
A

Anonymous

Guest
Lösung mit der S7

Wenn du mit einer S7 arbeitest gibt es hierführ eine erheblich bessere möglichkeit.
In HW-Config aktiviert du für deine CPU das Taktmerkerbyte.
Das Taktmerkerbyte liefert Impulsfolgen von Frequenz
(Hz):0,5; 0,625; 1; 1,25; 2; 2,5; 5; 10 für die Bit's 7..0
des von dir angegebenen Bytes.
Hast du z.B. das MB50 als Taktmerkerbyte "verbraten" dann
erzeugst du hiermit so 8-verschiedene Trigger:
L MB50 // Taktmerker laden
L MB52 // Taktmerker bei letztem OB1 durchlauf
XOW // --> Triggerflags erzeugen
T MB51 // ... sichern der Flags für spätere Zeitmessungen

L MB50 // derzeitige Taktmerker für nächsten OB1 sichern
T MB52 // ...

Da ich hierbei immer ein xor verwende bekommst du bei jedem
Flankenwechsel eines Taktmerkerbit's eine "1" im zugeortneten Triggerbit.
Beispiel: dein SPS-Programm hat eine Zykluszeit von 10ms dann liefer M51.7 in jedem 5-OB1 Zyklus eine "1" sonst immer eine NULL

eine Zeitfunktion realisierst du jetzt so:

UN M51.7 // Trigger nicht gesetzt, Zeit noch nicht abgelaufen
ON #EnableUsertimer_0 // dein Timer soll nicht laufen
SPB nTrg // ...

L MB99 // Deine Zeitvarible hier ein Byte als geht das von
L 1 // (1..256)*50ms also Zeiten bis 12,8sec
-I
spm nTrg // Zeit war schon NULL, kein update

T MB99 // Zeit übernehmen
spp nTrg // noch kein Timeout

S #Timeout_0 // dein Timer_0 ist abgelaufen
//__________Timerbearbeitung ende______________________

nTrg: ... // da geht es mit deiner Anwendung weiter.

Wenn du länger Zeiten benötigst kannst du eine anderes Triggerflag
verwenden z.B. 51.0 für 1sec Auflösung oder statt mit 16-Bit oder 32-Bit
Variablen arbeiten.
:lol:

Die Zeit läuft jetzt so lange wie du dein Freigabe gesetzt läst.
Wenn du mehr Auflösung benötigst kannst du den SFC64 benutzen um die Systemzeit in 10ms oder 1ms der CPU auszulesen.

Viel Erfolg,

U.Klakow
 
Oben