Zeitmessung mit S7-300

L

L.T.

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo erstmal!!

Ich möchte mit der S7-300 (CPU steht noch nicht fest) Zeiten messen.
Es soll für einen Teststand die Aus- bzw. Einfahrdauer eines Zylinders ermittelt und gespeichert werden.
Wie läßt sich so etwas realisieren? Die "normlen" Timerbausteine zählen die Zeit ja leieder alle rückwärts runter und nicht hoch.
Die Zeit soll bis jetzt mit einer Auflösung von 100 ms gemessen werden, es kann jedoch nicht schaden wenn es auch genauer realisierbar wäre.

Vielen Dank für die Hilfe.

Gruß Lars
 
Du kannst die IEC-Timer SFB3-5 nehmen. Diese nutzen das TIME-Format, welches einem DINT-Wert entspricht. Bei dem TON weiss ich, dass er von 0 an hochzählt.

pt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
geht auch mit einem timer.

Code:
      L     S5T#9S  //als wort ist das dann 0900
      T     MW    10

      U     M      3.0
      L     MW    10
      SE    T      1

      L     900  //zeit
      L     T      1
      -I    
      T     MW    12

oder du benutzt die cpuzeit

Code:
      U     M      1.1  //pos. flanke start
      SPBNB _00f
      CALL  SFC    1
       RET_VAL:=#temp
       CDT    :=#zeit1
_00f: NOP   0

   U     M      1.2  //pos. flanke stop
      SPBNB _013
      CALL  SFC    1
       RET_VAL:=#temp
       CDT    :=#zeit2
_013: NOP   0

      CALL  FC    34  //iec. 
       DT1    :=#zeit2
       DT2    :=#zeit1
       RET_VAL:=MD14
      NOP   0
 
Hi,

musst mal prüfen, ob deine CPU in der Hardware-Konfiguration Echtzeit OBs zulässt.
Da kannst dann nen OB direkt minütlich, stündlich, täglich usw. aufrufen.

Dort schreibst dann einfach

SET //braucht man glaub net mal
S Mxxx.x

und dann brauchst blos noch den Bausteinanschluss, der den Merker auswertet als IN/OUT parametrieren, und den Merker am Bausteinende zurücksetzen.

Falls das mit ner 300er nicht geht, sorry.

:shock:
Micha
 
Hi,

also bei einer Auflösung von 100ms würde ich das Ganze über den Weckalarm machen.
Einfach darin eine DW hochzählen und danach den ZW auslesen *100ms (wenn der OB so eingestellt wurde) und du hast die Zeitdauer.
Ich denke einfacher gehts nimmer.

Gruß Centi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
HI,

du hast in den Lokaldaten vom OB 1 die Variable "#OB1_PREV_CYCLE". Damit bekommt man ziemlich genau die Zykluszeit des letzten Zyklus.
Diesen Lokalvariable im OB1 auf einen anderen Speicher legen (z.B. Merkerwort), um sie im ganzen Programm benutzen zu können..

Solange die Zeit-Bedingung erfüllt ist, eine Datendoppelwort ( z.B. im TOD Format) mit diesen Wert aufaddieren.


U Zeitbedingung
SPBN M001
L MW_OB1_PREV_CYCL
L MD_Zeitzelle
+ D
T MD_Zeitzelle
M001 NOP 0

Bernd
 
Hi,

mein Beitrag von oben hat in diesem Thread natürlich nichts zu suchen.
Ich wollte damit eigentlich eine Frage beantworten, wie man Ereignisse täglich, monatlich usw. auslösen kann.

Hatte wohl zu viele Fenster auf... sorry.

Schöne Grüße

Micha
 
Hi

wenn die Hardware noch nicht da ist nehme eine 312C,313C oder 314C mit den Digitalen I/O on Board. (schnelle Eingänge)

Würde dann den Start und Ende über einen Interrupt machen und
so die Zeit auswerten glaube das ist die genauste Möglichkeit weil es unabhänig von der Zykluszeit ist.

Ist aber nur eine Idee ob das klappt mußt Du selber testen.

netten Gruß an allehier im Forum

Christian Werner
 
Zurück
Oben