Zeit Messen?!

MikeJ

Level-1
Beiträge
80
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

wie kann ich denn eine einfache Zykluszeit-Messung realisieren (Maschinenzeit, nicht CPU-Zyklus)?!
Alle Timer-Funktionen laufen ja rückwärts und nicht vorwärts :confused:

PS: Die Suche hab ich natürlich benutzt - gibt aber keine Ergebnisse, wahrscheinlich bin ich der einzige der das nicht weiß :)


Viele Grüße
Mike
 
Hallo,

Voreingestellte Zeit - abgelaufene Zeit = deine Zeit

ähh. abgelaufene Zeit passt doch?
 
speichern des systemcounters am prozesseintritt
speichern des systemcounters am prozesaustritt

speicher austritt - speicher eintritt = zykluszeit prozess (und zumeißt auch maschine)
 
Ich zitiere mal die Siemens Hilfe von Step7:
Beschreibung

Mit der SFC 64 "TIME_TCK" (time tick) lesen Sie die Systemzeit der CPU. Die Systemzeit ist ein "Zeitzähler", der von 0 bis max. 2147483647 ms zählt. Bei einem Überlauf der Systemzeit wird wieder ab 0 gezählt. Das Zeitraster und die Genauigkeit der Systemzeit betragen bei S7-400 und bei der CPU 318 1 ms, bei allen anderen CPUs der S7-300 10 ms. Die Systemzeit wird nur von den Betriebszuständen der CPU beeinflußt.

Anwendung

Die Systemzeit können Sie zum Beispiel nutzen, um die Dauer von Vorgängen durch Differenzbildung der Ergebnisse von zwei SFC 64-Aufrufen zu messen.
 
Ich zitiere mal die Siemens Hilfe von Step7:

Zitat:
Beschreibung

Mit der SFC 64 "TIME_TCK" (time tick) lesen Sie die Systemzeit der CPU. Die Systemzeit ist ein "Zeitzähler", der von 0 bis max. 2147483647 ms zählt. Bei einem Überlauf der Systemzeit wird wieder ab 0 gezählt. Das Zeitraster und die Genauigkeit der Systemzeit betragen bei S7-400 und bei der CPU 318 1 ms, bei allen anderen CPUs der S7-300 10 ms. Die Systemzeit wird nur von den Betriebszuständen der CPU beeinflußt.

Anwendung

Die Systemzeit können Sie zum Beispiel nutzen, um die Dauer von Vorgängen durch Differenzbildung der Ergebnisse von zwei SFC 64-Aufrufen zu messen.



Ab Firmware 2.6.1 bei den 300er ist das so:

SFC 64 "TIME_TCK" mit 1 ms Granularität *
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

wie kann ich denn eine einfache Zykluszeit-Messung realisieren (Maschinenzeit, nicht CPU-Zyklus)?!

Da hier explizit nach einer einfachen Methode gesucht wird... denke ich das ales mit SFC64 etc. wohl ein wenig oversize is...

Die einfachste Möglichkeit m.E.:
Einfach ein Signal suchen welches einmal pro Maschinenzyklus aufgerufen wird, mit diesem die Zykluszeitmessung starten...
Mit hilfe eines Taktmerkers (vorzugsweise 1 sec) dann ein Datenwort hochzählen...
Am ende des Maschinenzyklus den Inhalt dieses Datenwortes in ein anderes Datenwort umspeichern und und das Datenwort zum zählen wieder auf Null setzen usw. usw.

Gruß ukofumo
 
Na dann muß ich mal fragen, wie lange dauert der Maschinenzyklus durchschnittlich? Wie genau soll die Zeitmessung sein?
 
@Manfred:
das sehe ich genauso wie du ...

@ukofumo:
wenn dir die Lösung mit der Systemzeit zu oversized ist, dann wäre tatsächlich der Vorschlag von Manfred nicht nur die sainnvollste sondern auch die praktikabelste Lösung - ich arbeite dabei nämlich nicht mit einer Annahme sondern mit dem, was wirklich ist (innerhalb der Genauigkeit der SPS-Zykluszeit-Angabe).

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi zusammen,

ich hatte eigentlich Hoffnung, dass es so was einfaches wie die Timer gibt mit "vorwärts-zählen" :)

Da dem nicht so ist, und ich wegen eines Timers heute (Freitag) keinen Aufstand mehr betreiben will, habe ich mich für die Methode von "verpolt" entschieden. - Ist zwar nicht schön bzw genau, aber wenn man dann noch passend abrundet schafft man sogar die vorgegebene Taktzeit :)


Viele Grüße
Mike


PS: die Sache mit den SFC´s werde ich mir mal in Ruhe ansehen...
 
Hi zusammen,

ich hatte eigentlich Hoffnung, dass es so was einfaches wie die Timer gibt mit "vorwärts-zählen" :)

Da dem nicht so ist, und ich wegen eines Timers heute (Freitag) keinen Aufstand mehr betreiben will, habe ich mich für die Methode von "verpolt" entschieden. - Ist zwar nicht schön bzw genau, aber wenn man dann noch passend abrundet schafft man sogar die vorgegebene Taktzeit :)


Viele Grüße
Mike


PS: die Sache mit den SFC´s werde ich mir mal in Ruhe ansehen...
 
ich hatte eigentlich Hoffnung, dass es so was einfaches wie die Timer gibt mit "vorwärts-zählen" :)

Wie wäre es dann mit dem IEC-Timer SFB4 (TON).
Der zählt vorwärts und die abgelaufene Zeit wird auch ausgegeben.
Wie genau muss es denn sein?
Wie groß sind deine Taktzeiten?
Millisekunden? Sekunden? Minuten? Stunden?....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich zitiere mal die Siemens Hilfe von Step7:
So, ich hab dieses Zitat auch gelesen :) auch bei Siemens, aber ich verstehe nicht so ganz wie ich diesen SFC verwenden kann.

Ich hab ja schließlich nur den Eingang EN und als Ausgänge RET_VAL und EN0

Wie bekomme ich jetzt meine Zeit aus dem Baustein. Wie setzt ich die Zeit wieder zurück? Das hab ich bei dem SFC noch nicht verstanden :confused:
 
Also wenn ich das richtig verstehe hab ich an RET_VAR die Systemzeit die ständig hochzählt und ich muß dann über die Variable die dann an RET_VAR Anliegt meine berechnung vornehmen?
Weil ich da was gelesen hab das man Starten, Stoppen und neustarten kann.

Das hat mich etwas verwirrt
 
Code:
FUNCTION_BLOCK "FB_Timer"
TITLE =
//This block counts the time during <B_my_Input> is true.
//The feedback is written in <T_my_Time>.
//<B_Reset> clears <T_my_Time>.
//
//2010-06-07 XXX
VERSION : 0.1
 
VAR_INPUT
  B_my_Input : BOOL ; 
  B_Reset : BOOL ; 
END_VAR
VAR_OUTPUT
  T_my_Time : TIME ; 
END_VAR
VAR
  B_FM : ARRAY  [1 .. 16 ] OF BOOL ; 
  T_my_Time_Stat : TIME ; 
END_VAR
VAR_TEMP
  T_Sys_Time_Temp : TIME ; 
END_VAR
BEGIN
NETWORK
TITLE =
      CALL "TIME_TCK" (//Read the System Time
           RET_VAL                  := #T_Sys_Time_Temp);
      U     #B_my_Input; //New Count (One Shot) ???
      FP    #B_FM[1]; 
      SPBN  _101; 
      L     #T_Sys_Time_Temp; //Init my_Time_Stat
      T     #T_my_Time_Stat; 
_101: NOP   0; 
      U     #B_my_Input; //Count Time ???
      SPBN  _102; 
      L     #T_Sys_Time_Temp; 
      L     #T_my_Time_Stat; 
      -D    ; 
      T     #T_my_Time; 
_102: NOP   0; 
      U     #B_Reset; //Reset my_Time ???
      SPBN  _103; 
      L     0; 
      T     #T_my_Time; 
_103: NOP   0; 
END_FUNCTION_BLOCK

Vielleicht hilft dir das weiter.
 
Über Starten, Stoppen usw. konnte ich jetzt nichts lesen.

Betriebzustand Systemzeit ...
Anlauf ... wird ständig aktualisiert.
RUN
STOP ... wird angehalten und behält den aktuellen Wert.
Wiederanlauf
(nicht bei S7-300 und
bei S7-400H)
... läuft mit dem Wert weiter, der beim Übergang in STOP gespeichert wurde.
Neustart (Warmstart) ... wird gelöscht und beginnt wieder von "0" an zu laufen.
Kaltstart

Diese Zustände hab ich gemeint, Auf diese hab ich keinen Einfluss, oder?
 
Zurück
Oben