Zeitüberwachung zwischen 2 Triggern

amantido

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

ich habe eine 315-2DP und muss mit dieser die Zeit zwischen 2 Triggern überwachen.
Im speziellen soll mir ein Ausgang für 10ms auf 1 gehen wenn innerhalb von 150ms 2 oder mehr Trigger kommen.
Hab mir den ganzen Morgen schon gedanken gemacht und komme nicht auf eine Lösung.

Im Voraus schonmal danke.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das wäre dann eine Frequenzmessung ...
Im einfachsten Fall machst du dir einen Timer, der 150 ms läuft.
Während der Timer gestartet ist aber nicht durchgelaufen ist zählst du die Impulse des Eingangs. Ist die Zeit abgelaufen wertest du das aus, löscht den Zähler, stoppst den Timer und gibst ggf. das Ergebnis aus. Danach startest du die nächste Messung ...
Das Ganze wäre vielleicht ganz schön als Schrittkette zu realisieren ...

Gruß
LL
 
Vorschlag

- Bilde mit jedem Trigger eine Flanke.
- Mit diesen Flanken auf ein gemeinsames Oder-Glied.
- Mit dem Ausgang des Oder-Glied liest du die Systemzeit aus.
- Systemzeit ablegen in "Zeit_Neu"
- Differenz ermitteln und auswerten zu "Zeit_Alt"
- "Zeit_Neu" nach "Zeit_Alt" schreiben

Gruß
Dieter
 
Also folgendermaßen ist das ganze:

Ich habe eine Lichtschranke als Trigger. Mit dieser geh ich auf einen Eingang der SPS und gleichzeitig auf ein Kamerasystem. Dieses Kamerasystem wiederum braucht 10-150ms um mir ein gut Signal zu senden. Bekomme ich dieses nicht betätige ich einen Auswerfer. Jetzt ist aber das Problem dass innerhalb dieser 150ms ein weiterer Trigger durch diese Lichtschranke ausgelöst wird (weil das nächste Teil da ist)
Und ich muss jetzt sozusagen dafür sorgen dass wenn 2 Trigger innerhalb von 150ms kommen, den Auswerfer für ca 200ms auf "Dauer Auswerfen" zu stellen.
Es darf innerhalb dieser 150ms einfach kein weiterer Trigger kommen deswegen werfe ich beide Teile raus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
U E #LS
FP M1.1
= M1.2
 
U M1.2
U T100
= #Zwei Impulse innerhalb 150ms
 
U M1.2
L S5T#150ms
SA T100

war das so gemeint?

EDIT2: EDIT1 wieder gelöscht :)
 
Zuletzt bearbeitet:
Das hatte ich auch schon probiert, hatte aber nicht funktioniert.
Kann leider momentan an der Anlage auch nichts probieren da sie die ganze Woche läuft.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... wie wäre es mit einer Schrittkette ?
Code:
U #Schritt_1  // warten auf Trigger
U #Trigger
S #Schritt_2
R #Schritt_1
 
U #Schritt_2  // warten auf Trigger geht
UN #Trigger
S #Schritt_3
R #Schritt_2
 
U #Schritt_3  // warten auf Auswertung der Kamera
U #Kamera_IO
S #Schritt_1
R #Schritt_3
 
U #Schritt_3
U #Kamera_NIO
S #Schritt_4
R #Schritt_3
 
U #Schritt_3  // weiterer Trigger vor Ende Auswertung
U #Trigger
S #Schritt_5
R #Schritt_3
 
U #Schritt_4
L s5t#50ms
SE T1
U T1
S #Schritt_1
R #Schritt_4
 
U #Schritt_5
L s5t#150ms
SE T2
U T2
S #Schritt_1
R #Schritt_5
 
U #Schritt_2 
O #Schritt_3
= #Out_Kamera
 
U #Schritt_4 
O #Schritt_5
= #Out_Auswerfer
... oder so ähnlich ...

Gruß
LL
 
Also folgendermaßen ist das ganze:

Ich habe eine Lichtschranke als Trigger. Mit dieser geh ich auf einen Eingang der SPS und gleichzeitig auf ein Kamerasystem. Dieses Kamerasystem wiederum braucht 10-150ms um mir ein gut Signal zu senden. Bekomme ich dieses nicht betätige ich einen Auswerfer. Jetzt ist aber das Problem dass innerhalb dieser 150ms ein weiterer Trigger durch diese Lichtschranke ausgelöst wird (weil das nächste Teil da ist)
Und ich muss jetzt sozusagen dafür sorgen dass wenn 2 Trigger innerhalb von 150ms kommen, den Auswerfer für ca 200ms auf "Dauer Auswerfen" zu stellen.
Es darf innerhalb dieser 150ms einfach kein weiterer Trigger kommen deswegen werfe ich beide Teile raus

Hi,
maßgebend ist dein Trigger. (was passiert eigntl. wenn die Lichtschranke flakkert? haste da schon etwas?). Ich gehe davon aus, du hast nur Zeit, keine Encodersignale.
Timer startet mit dem Trigger und läuft bis 150ms. (wenn der Timer vor dem Trigger 0 war! also nicht gestartet war)
Wenn der Timer noch nicht abgelaufen ist und ein weiterer Trigger kommt, dann Auswurf betätigen (200ms) und den Timer neustarten.
Timer abgelaufen -> Gutsignal überprüfen.
Kein Gutsignal-> Auswurf <200ms

wie wäre das?

Gruß
com
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@COM. "Wenn der Timer noch nicht abgelaufen ist und ein weiterer Trigger kommt, dann Auswurf betätigen (200ms) und den Timer neustarten."

Ja, das Programm dazu (nicht getestet) steht da schon oben...
Er weiss aber nicht warum es nicht funzt....
Die LS entprellen selber ganz gut... daran liegt es imho nicht.

Tja....
 
Code:
U E #LS
FP M1.1
= M1.2
 
U M1.2
U T100
= #Zwei Impulse innerhalb 150ms
[COLOR=red]U #Zwei Impulse innerhalb 150ms[/COLOR]
[COLOR=red]L S5T#200ms[/COLOR]
[COLOR=red]SV T101[/COLOR]
[COLOR=red]= T101[/COLOR]
[COLOR=red]= #Auswerfer[/COLOR]
 
U M1.2
L S5T#150ms
SA T100
[COLOR=red][B]U E Kamera gut Signal[/B][/COLOR]
[COLOR=red][B]R T100[/B][/COLOR]
Hallo Amantido,
ich meine auch dass die Lösung von Borromeus funktionieren müsste, wenn Du noch Dein Kamerasignal mit einbringst.
Die letzten zwei Anweisungen sind das wichtige. :D
 
damals hab ich noch mit S5Timern programmiert *koppschüddel*

Code:
*
FUNCTION "DOUBLE_TRIGGER" : VOID
TITLE =double trigger
//for set xOut the xTrigger must have switched twice in the time tTime
//Date: 15.12.2006
AUTHOR : '4lagig'
FAMILY : BoolGF
VERSION : 0.1


VAR_INPUT
  xTrigger : BOOL ;    
  xReset : BOOL ;    
  fTimer : TIMER ;    
  tTime : S5TIME ;    
END_VAR
VAR_OUTPUT
  xOut : BOOL ;    
END_VAR
VAR_IN_OUT
  xHelpFlag : BOOL ;    
END_VAR
VAR_TEMP
  xTemp : BOOL ;    
END_VAR
BEGIN
NETWORK
TITLE =
//the first trigger takes effect in the last three lines
//the second trigger set the xOut
      U     #xTrigger; // check
      FP    #xHelpFlag; // for positive
      =     #xTemp; // flank

      U     #xTemp; // if flank
      U     #fTimer; // and fTimer on
      S     #xOut; // then set xOut
      U     #xReset; // if xReset
      R     #xOut; // then reset xOut

      U     #xTemp; // if flank
      L     #tTime; // then start
      SA    #fTimer; // the off delay
END_FUNCTION
 
Zurück
Oben