Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Zeitmessung einer Schleife mit Hilfe von Flankenauswertung

  1. #11
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Die Flankenauswertung wäre so aber korrekt.

    Womöglich geht das woanders baden. Poste doch mal Deinen Code.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  2. #12
    Registriert seit
    21.07.2008
    Beiträge
    1.066
    Danke
    51
    Erhielt 140 Danke für 136 Beiträge

    Standard

    Hmm da keiner etwas in die Richtung gesagt hat, bin ich mir nicht mehr so sicher ob mein Gedanke richtig ist.. aber wenn die Schleife abgearbeitet wird bleibt doch das Programm solange "stehen". Setzt du also einen Merker am Anfang der Schleife und setzt den Zurück am Ende der Schleife so wird er im Programm immer nur als "0" auftauchen.

    Es muss also in einem Zykluss zwei mal eine Zeit gestoppt werden. Dazu kann man dann keine Befehle verwenden die zwei Zyklen benötigen, also z.B. die Flankenauswertung.

    Wie wäre es denn mit alternativen wie "letzte Zykusszeit" aus dem OB1 auslesen und eine Zylusszeit ohne Schleife subrahieren?

    Man hat mir damals (tm) beigebracht, dass man Schleifen möglichst vermeiden soll.. und wenn dann müssen sie kurz sein und jeden zykluss durchlaufen werden. Deswegen finde ich den Gedanken schon merkwürdig eine Schleifenlaufzeit automatisch zu messen..

    Geht es allgemein um die Laufzeit, dann > Online > Baugruppenzustand > letzte Zyklusszeit > F5 F5 F5.. ist zwar nicht auf die ms genau.. aber wenn da plötzlich astronomische Werte stehen überlege ich mir schnell etwas anderes.

  3. #13
    MPH ist offline Benutzer
    Themenstarter
    Registriert seit
    18.09.2012
    Beiträge
    75
    Danke
    4
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von Deltal Beitrag anzeigen
    Hmm da keiner etwas in die Richtung gesagt hat, bin ich mir nicht mehr so sicher ob mein Gedanke richtig ist.. aber wenn die Schleife abgearbeitet wird bleibt doch das Programm solange "stehen". Setzt du also einen Merker am Anfang der Schleife und setzt den Zurück am Ende der Schleife so wird er im Programm immer nur als "0" auftauchen.

    Es muss also in einem Zykluss zwei mal eine Zeit gestoppt werden. Dazu kann man dann keine Befehle verwenden die zwei Zyklen benötigen, also z.B. die Flankenauswertung.

    Wie wäre es denn mit alternativen wie "letzte Zykusszeit" aus dem OB1 auslesen und eine Zylusszeit ohne Schleife subrahieren?

    Man hat mir damals (tm) beigebracht, dass man Schleifen möglichst vermeiden soll.. und wenn dann müssen sie kurz sein und jeden zykluss durchlaufen werden. Deswegen finde ich den Gedanken schon merkwürdig eine Schleifenlaufzeit automatisch zu messen..

    Geht es allgemein um die Laufzeit, dann > Online > Baugruppenzustand > letzte Zyklusszeit > F5 F5 F5.. ist zwar nicht auf die ms genau.. aber wenn da plötzlich astronomische Werte stehen überlege ich mir schnell etwas anderes.

    Das Problem was ich habe, ist das ich ein Programm schreiben soll, welches verschiedene SPS Systeme miteinander vergleichen kann. Sozusagen ein Benchmark Programm. Das klassische Benchmark ist ja die totale Auslastung der CPU mit Berechnungen von z.B. Primzahlen oder so. Das soll auch noch kommen. Ich soll jetzt aber noch andere Dinge finden um die Systeme zu vergleichen. Ich hab jetzt halt mal nach ein paar Anfängen gesucht, wo ich überhaupt was messen kann um etwas zu vergleichen. Dazu gehörte wie hier versucht einfach mal die Ausführungszeit einer Schleife zu messen.
    Ist ein sehr schwieriges Thema.

    Ich habe das jetzt mal so programmiert

    VAR_Output
    Dauer: TIME
    VAR_Static
    Zeit: Array [0..1] of TIME
    VAR_Temp
    i: INT
    j: INT


    #Zeit[0]:=TIME_TCK();
    //Schleife starten
    FOR #i:=0 TO 10000 BY 1 DO
    #j:=#j+1;
    END_FOR;
    #Zeit[1]:=TIME_TCK();


    #Dauer:=#Zeit[1]-#Zeit[0];

    Jetzt ist es so, dass der Wert "Dauer" immer von 1ms auf 2ms hin und her dopst.
    Es ist doch so, das die Schleife eigentlich in einem Zyklus abgearbeitet wird oder? Das heisst ja, die Schleife wird inerhalb eines Zykluses auf 10000 hochgezählt?!
    Mir wird jetzt aber von der CPU eine durschnittliche Zykluszeit von 0,3 ms angezeigt. Dann kann es doch nicht sein, das die Schleife 1-2ms andauert oder.
    Ist das einfach nur bullshit was ich hier mache oder habe ich nur einen Denkfehler? Ist es überhaupt möglich diese Zeit zu messen?
    Ausserdem hätte ich gerne am Schluss irgendwie einen Wert der dann fix ist. Mir ist schon lar, dass die Zeit immer wieder aktualisiert wird, weil der FB ja im OB1 zyklisch abgearbeitet wird. Aber wie kann ich mir diese Werte speichern um sozusagen aus 10 dieser Zeitwerte einen Mittelwert zu berechnen??

    Habt ihr vieleicht noch irgendwelche ideen oder ANsätze, wie ich ausagekräftige Werte vergleichen Kann für eine Art Benchmark?

    So jetzt hab ich euch ganz schön zugemüllt mit meinem Gejammer. Hoffe ihr könnt mir noch weiterhelfen

    Vielen Dank schonmal für die bisherigen Antworten. Echt super von euch

    Gruß

  4. #14
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Hallo,

    das Problem ist eher das du nur im ms Bereich messen kannst da der Datentyp Time die Werte nur als Ganzzahlige ms speichert.
    Du kannst ja nur deine Schleife im OB1 laufen lassen, dann kannst ja die Zykluszeit ablesen so wie du es eh schon gemacht hast.
    Ausserdem kannst du mit solchen "Benchmarks" sowieso keine Aussage über das System machen da ja die I/O Zugriffszeiten usw bei einer Steuerung auch interessant sind.

    godi

  5. #15
    Registriert seit
    11.05.2005
    Ort
    Baden-Württemberg
    Beiträge
    669
    Danke
    113
    Erhielt 153 Danke für 124 Beiträge

    Standard

    Zitat Zitat von MPH Beitrag anzeigen
    Das Problem was ich habe, ist das ich ein Programm schreiben soll, welches verschiedene SPS Systeme miteinander vergleichen kann. Sozusagen ein Benchmark Programm. Das klassische Benchmark ist ja die totale Auslastung der CPU mit Berechnungen von z.B. Primzahlen oder so. Das soll auch noch kommen. Ich soll jetzt aber noch andere Dinge finden um die Systeme zu vergleichen. Ich hab jetzt halt mal nach ein paar Anfängen gesucht, wo ich überhaupt was messen kann um etwas zu vergleichen. Dazu gehörte wie hier versucht einfach mal die Ausführungszeit einer Schleife zu messen.
    Ist ein sehr schwieriges Thema.

    Ich habe das jetzt mal so programmiert

    VAR_Output
    Dauer: TIME
    VAR_Static
    Zeit: Array [0..1] of TIME
    VAR_Temp
    i: INT
    j: INT


    #Zeit[0]:=TIME_TCK();
    //Schleife starten
    FOR #i:=0 TO 10000 BY 1 DO
    #j:=#j+1;
    END_FOR;
    #Zeit[1]:=TIME_TCK();


    #Dauer:=#Zeit[1]-#Zeit[0];

    Jetzt ist es so, dass der Wert "Dauer" immer von 1ms auf 2ms hin und her dopst.
    Es ist doch so, das die Schleife eigentlich in einem Zyklus abgearbeitet wird oder? Das heisst ja, die Schleife wird inerhalb eines Zykluses auf 10000 hochgezählt?!
    Mir wird jetzt aber von der CPU eine durschnittliche Zykluszeit von 0,3 ms angezeigt. Dann kann es doch nicht sein, das die Schleife 1-2ms andauert oder.
    Ist das einfach nur bullshit was ich hier mache oder habe ich nur einen Denkfehler? Ist es überhaupt möglich diese Zeit zu messen?
    Ausserdem hätte ich gerne am Schluss irgendwie einen Wert der dann fix ist. Mir ist schon lar, dass die Zeit immer wieder aktualisiert wird, weil der FB ja im OB1 zyklisch abgearbeitet wird. Aber wie kann ich mir diese Werte speichern um sozusagen aus 10 dieser Zeitwerte einen Mittelwert zu berechnen??

    Habt ihr vieleicht noch irgendwelche ideen oder ANsätze, wie ich ausagekräftige Werte vergleichen Kann für eine Art Benchmark?

    So jetzt hab ich euch ganz schön zugemüllt mit meinem Gejammer. Hoffe ihr könnt mir noch weiterhelfen

    Vielen Dank schonmal für die bisherigen Antworten. Echt super von euch

    Gruß
    Gib ihm halt mal mehr zu tun.
    Was erwartest du denn für Zykluszeiten wenn die CPU nur einmal bis 10000 hochaddieren muß?

    Nachtrag:
    Ich habe das mal ausprobiert mit ner 315-2PN/DP. In der Schleife habe ich eine Konstante 30000 mal in die Lokaldaten kopiert.
    Die Messung passt +-1ms mit der Onlinediagnose zusammen...

    Zeitmessung.jpg
    Geändert von SPSKILLER (19.09.2012 um 17:59 Uhr) Grund: Bild eingefügt
    "arbeite klug, nicht hart" - deutsches Sprichwort

  6. #16
    Registriert seit
    21.07.2008
    Beiträge
    1.066
    Danke
    51
    Erhielt 140 Danke für 136 Beiträge

    Standard

    Die Ausführungszeit von S7-Anweisungen ist dokumentiert.. dafür braucht man kein Benchmark schreiben.

  7. #17
    MPH ist offline Benutzer
    Themenstarter
    Registriert seit
    18.09.2012
    Beiträge
    75
    Danke
    4
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von godi Beitrag anzeigen
    Hallo,

    das Problem ist eher das du nur im ms Bereich messen kannst da der Datentyp Time die Werte nur als Ganzzahlige ms speichert.
    Du kannst ja nur deine Schleife im OB1 laufen lassen, dann kannst ja die Zykluszeit ablesen so wie du es eh schon gemacht hast.
    Ausserdem kannst du mit solchen "Benchmarks" sowieso keine Aussage über das System machen da ja die I/O Zugriffszeiten usw bei einer Steuerung auch interessant sind.

    godi
    Gibt es eine Möglichkeit genauer zu messen? Meinst du es wäre Sinvoll sich auf die Zugriffszeiten der I/os zu konzentrieren?

    Vielen Dank

    Zitat Zitat von SPSKILLER Beitrag anzeigen
    Gib ihm halt mal mehr zu tun.
    Was erwartest du denn für Zykluszeiten wenn die CPU nur einmal bis 10000 hochaddieren muß?

    Nachtrag:
    Ich habe das mal ausprobiert mit ner 315-2PN/DP. In der Schleife habe ich eine Konstante 30000 mal in die Lokaldaten kopiert.
    Die Messung passt +-1ms mit der Onlinediagnose zusammen...

    Zeitmessung.jpg
    Hi,
    danke das du es getestet hast. Ich erwarte bei meiner Schleife keine beonders großen Zykluszeiten. Ich verstehe nur nicht, wie die 1-2ms zustande kommen, wenn der Zyklus 0,3 ist. Dann müsste mir die Subtraktion doch eher 0 anzeigen statt 1ms oder?
    Sorry das ich nochmal so dumm nachfrage. Wie meinst du das in die Lokaldaten schreiben. Ich kenne mich wie gesagt nur gut in CodeSys aus. Wie schreibe ich den scheiß in die Lokaldaten? Sind nicht alle Variablen Lokal ausser die PLC Variablen?
    Ich weiss auch immer noch nicht wie ich die Werte speichern kann. Ich müsste doch diese messung von 1ms irgendwo ablegen können, dass sie nach jedem Schleifendurchlauf irgendwo fest steht.
    In CoDesys waren die Werte dann immer im Array gespeichert ohne sich wieder zu verändern und ich konnte sie dann weiterverarbeiten.

    Danke dir



    Zitat Zitat von Deltal Beitrag anzeigen
    Die Ausführungszeit von S7-Anweisungen ist dokumentiert.. dafür braucht man kein Benchmark schreiben.
    Ich weiss dass die Ausführungszeiten im Handbuch stehen. War halt ein kläglicher Versuch mal mit irgendetwas anzufangen.
    Meine AUfgabe lautet halt wie gesagt so ein Programm zu schreiben um zu testen welches SPS System unter welchen Voraussetzungen am schnellsten und stabilsten läuft.

    Hast du oder IHr Ideen, wie ich da besser rangehen könnte? Hab im Moment noch net so richtig Ahnung was ich so messen und vergleichen soll.....

    Vielen Dank weiterhin für eure zahlreichen Hilfen

    Gruß

  8. #18
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo,
    ich würde sagen, dass deine Vorgehensweise vom Code her korrekt ist.
    Du mußt hier aber auch noch berücksichtigen, dass der Baustein "Time_Tick" auch eine Laufzeit hat. Außerdem ist es schwierig in einem System etwas unter 1 ms zu messen wenn das Sstem nur auf ms auflösst und es das auch anscheinend nicht so genau nimmt.
    In der Messtechnik sagt man ja eigentlich, dass die Mess-Mimik immer um den Faktor 10 genauer sein soll als die Genauigkeit, die man erreichen möchte ... das passt ja hier nun nicht so ganz ...

    Gruß
    Larry

  9. #19
    Registriert seit
    21.07.2008
    Beiträge
    1.066
    Danke
    51
    Erhielt 140 Danke für 136 Beiträge

    Standard

    Meine AUfgabe lautet halt wie gesagt so ein Programm zu schreiben um zu testen welches SPS System unter welchen Voraussetzungen am schnellsten und stabilsten läuft.
    Wer denkt sich solche Aufgaben aus? Ehrlich.. die Entscheidung welche SPS ich nutze mache ich sicherlich nicht von "stabil" abhängig. (Kann man ehe nicht bewerten) Und wie hier schon geschrieben worden ist: schnell ist relativ und von ein paar dutzend Faktoren abhänig. Und zumindestens mit S-Komponenten wird man (fast) jedes technische Problem lösen können. (Eine 319 / 416 / WinAC kann schon ziemlich große Anlagen steuern).
    Viel wichtiger sind die fähigkeiten des Programieres. Der eine hat verstanden wie man S7 Programmiert und automatisiert locker eine große Fertigungsstraße, der andere klickt nur seine Schrittketten in Graph ab und wundert sich warum die CPU so schnell voll wird..

    Programmiere eine Schleife aus ein paar zehn(hundert?)tausend Gleitpunkt Optionen, stell den watchdog auf 100ms und schau wieviele Durchgänge die SPS schafft.. Den Wert kannste dann ausdrucken und dir (oder deinem Cheff) an die Wand hängen
    Geändert von Deltal (20.09.2012 um 14:56 Uhr)

  10. #20
    MPH ist offline Benutzer
    Themenstarter
    Registriert seit
    18.09.2012
    Beiträge
    75
    Danke
    4
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi Leute,

    weiterhin vielen Dank für die Anregungen und Hilfen.
    Ich hätte mal noch eine andere Frage. Gibt es die Möglichkeit die Zeit mit einem IEC Timer zu messen? Also anstatt des Aufrufs von SFC64????

    Vielen Dank

    Gruß

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 04.02.2012, 00:06
  2. Problem bei einer Such-Schleife
    Von Imker im Forum Simatic
    Antworten: 37
    Letzter Beitrag: 26.01.2012, 19:40
  3. Realisierung einer Schleife
    Von simon-brl im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 05.07.2011, 20:56
  4. Rücksetzen nach einer Pos. Flankenauswertung
    Von xxjuraxx im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 21.05.2010, 12:56
  5. Zeitmessung mit einer S7-300
    Von detlefh im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 31.10.2007, 16:49

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •