Step 7 Zeitstempel S7 auslesen.

Kehrer

Level-2
Beiträge
425
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich würde gerne Zeitstempel erzeugen wenn 2 Ereignisse kommen:
z.B. möchte ich die Zeit vom Drücken der Stopp-Taste bis zum Stillstand der Maschine messen.
Das Problem hatte ich schon mal (https://www.sps-forum.de/threads/cpu-e-a-taktzeiten-feststellen-ändern.116791/#post-942976)

nur hat das absolut mal gar nicht funktioniert
nun habe ich mir gedacht dass ich die Uhrzeit des Ereignisse als Zeitstempel ausgebe.
kann ich nicht über OB1 --> Temp --> OB1_Date_Time oder mit FC33/FC40 es als Zeitstempel ausgeben.

ich kann ja wie in NW1 es in eine DB schreiben.
aber wie könnte ich es machen, dass z.B. E13.4 um die Zeit gedrückt wurde auszulesen.

1733233293973.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
FC33/FC40 haben nichts mit Uhrzeit zu tun.
Die Uhrzeit auslesen kann man überall mit SFC1 READ_CLK, oder z.B. im OB1 OB1_DATE_TIME verwenden.
Relativ kurze Zeitabstände messen kann man auch mit SFC64 TIME_TCK oder OB1_PREV_CYCLE addieren.

Wie groß ist denn der Zeitabstand zwischen den 2 Ereignissen? Wie genau brauchst du die Zeitspannen? Könnte es sein, dass zwischen den Ereignissen die CPU auch mal ausgeschaltet ist?
 
Wie groß ist denn der Zeitabstand zwischen den 2 Ereignissen? Wie genau brauchst du die Zeitspannen? Könnte es sein, dass zwischen den Ereignissen die CPU auch mal ausgeschaltet ist?
Der zeitabstand ist max. 1s . Genauheit ca. 10ms, CPU wird nicht ausgeschaltet.
Ich möchte halt im Prinzip messen wie lange es dauert vom Stop-Knopf zu drücken bis die Maschine im Stillstand ist (heißt bei uns Kniehebel hinten)
darum dachte ich ich könnte die Uhrzeit vom StartKnopf (E13.4) abfragen und dann die Uhrzeit wenn z.B. M119.0 kommt und diese dann abziehen. Dann hätte ich theoretisch die Stoppzeit bis zum Stillstand.
1733235894859.png
 
Ok, du willst also die Dauer eines Signals mittels Zeitgliedern messen.

Vorschlag: benutze IEC Zeitglieder / geht aber so ähnlich auch mit s5-Zeitgliedern

dann so die Dauer eines Signals messen:
(Natürlich nur, wenn dein zu erwartendes Signal zwischen 1ms und T#24d20h31m23s647ms liegt.)
1733236346822.png
 
ein vorschlag.
ich habe hier nur lokale temp-variablen verwendet (ging schneller). du musst natürlich globale variablen verwenden.
ereignis stop start (taster) kopiert die aktuelle DateTime. (NW1)
ereignis stop ende (also anlage steht) kopiert die aktuelle DateTime (NW2)
differenz bilden (NW3).
1733238412976.png
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Da bietet sich ein Zeitglied oder TIME_TCK oder Addieren von OB1_PREV_CYCLE an.
Uhrzeit ist nicht zu empfehlen, die könnte während der Messung Sprünge vor/rück machen (Uhrzeitsync, Sommerzeit, jemand (ver)stellt die Uhr ...)
 
wie hoch ist die wahrscheinlichkeit das die systemzeit verändert wird? wenn man ntp aktiviert hat ehr etwas höher (kommt natürlich drauf an wie oft synchronisiert wird)
wenn man 1 mal pro Min synchronisiert sollte die abweichung sehr gering sein. wenn 1 mal am tag synchronisiert könnte die abweichung natürlich höher sein. ABER dann muss Start Stop und Ende Stop genau in das sync-intervall passen (stop start -> uhrzeitsync -> stop ende)

dein einwand ist grundsätzlich natürlich richtig.
 
Zuletzt bearbeitet:
Bei SPS merke: "sag niemals nie" und "es ist unwahrscheinlich" - alles was passieren kann mit einer Wahrscheinlichkeit > 0, das wird auch passieren, und früher als man denkt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier hat schon mal jemand, Götz Ingenieurbüro, eine Zeitmessung gebaut. Mit FB4 exakte Zeitmessung.

Zeitmessung (FB4)​



Beschreibung:

Der Baustein misst die Zeit zwischen der positiven Start- und Stopp Flanken der Eingänge. Die Zeitermittlung basiert auf der Differenzzeitermittlung der SPS Systemzeit. Das Zeitraster ist somit 1ms!. Die Genauigkeit der Zeitmessung übertrifft somit Messungen welche auf Timer-Basis programmiert sind.

Eingang:

Start (BOOL) Mit der steigenden Flanke an diesem Eingang wird der Zeitzähler gestartet.

Stopp (BOOL) Mit der steigenden Flanke an diesem Eingang wird der Zeitzähler gestoppt.

Ausgang:

Differenzzeit (DINT) Differenzeit in [ms] zwischen Start-Flanke und Stopp-Flanke.

Aktiv (BOOL) Zeigt an, dass eine Zeitmessung aktiv ist.





Für all diejenigen Programmierer, die einen SCL-Editor besitzen und den Baustein ändern möchten nachfolgend der Quelltext. Dieser kann über die Windows Zwischenablage herauskopiert werden und in ihrem SCL-Editor eingefügt werden. Zudem ist die Bausteinquelle in der downloadbaren Bibliothek unter Quellen enthalten.



Bibliothek Goetz Automation
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beschreibung:
Der Baustein misst die Zeit zwischen der positiven Start- und Stopp Flanken der Eingänge. Die Zeitermittlung basiert auf der Differenzzeitermittlung der SPS Systemzeit. Das Zeitraster ist somit 1ms!. Die Genauigkeit der Zeitmessung übertrifft somit Messungen welche auf Timer-Basis programmiert sind.

Nur weil das Zeitraster 1ms ist, heißt das nicht, dass die Genauigkeit 1ms ist. Du hast immer noch Jitter (ich liebe dieses Wort xD) drin, resultierend aus dem SPS-Zyklus, E/A-Verzögerung, anderen Programmteilen...
 
Nur weil das Zeitraster 1ms ist, heißt das nicht, dass die Genauigkeit 1ms ist. Du hast immer noch Jitter (ich liebe dieses Wort xD) drin, resultierend aus dem SPS-Zyklus, E/A-Verzögerung, anderen Programmteilen...
Naja, hier geht's um die Laufzeit einer Maschine. Wen interessiert da 1ms?
 
Zurück
Oben