Berechnung der Zykluszeit, aber wie?

Paul_007

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Weiss jemand von euch wie ich die Zykluszeit per Hand berechne? Ich möchte die Zykluszeit, die ich gemessen habe nachrechnen.

Hab auch schon in einem Siemens Ahndbuch bei Berechnung der Zykluszeit nachgesehen, da müssen auch noch ein CPU spezifischer Faktor, je nach dem welche CPU usw. mit reingerechnet werden.

Ich stelle mir das so vor: Ein Baustein, den ich gemessen habe hat beispielsweise bei einem Aufruf von 300 x eine Zykluszeit von 20ms. Wenn ich nun weiss, dass der Baustein aus 20 reinen Bitoperation besteht, müsste dies ja nachrechnen gehen oder? Die CPU 315 benötigt z.B. für eine Bitoperation 0,1 Mikrosekunden.

Ich hoffe ihr habt verstanden wie ich das meine, wenn nicht einfach schreiben.

Vielen Dank schonmal im voraus!

Gruss
Paul
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe mal was zusammen geschrieben! Ist das so richtig?

Ich habe 22 Bit Operationen Schleifendurchläufe: 300
bei CPU 315 pro Bit-Operationen 0,1μs
CPU 315 spezifischer Faktor = 1,10
--> 22* 0,1μs *1,10* 300 =0,726ms

Zykluszeit = 0,726ms + 0,4ms + 0,4ms + 0,5ms = 2,026ms

Berechnung der tatsächlichen Zykluszeit

2,026ms*100 / (100-40) = 3,376ms <--- ????kann das sein????

Denn gemessen habe ich mit der CPU bei 300 Schleifendurchgänge zwischen 17/26ms


ps: Ich habe noch 1 Digitaleeingabebaugruppe und 1 Digitaleausgabebaugruppe
vielleicht macht das ja auch noch was aus....hab aber nichts darüber gefunden!!!!
 
Zur Zykluszeit gehört ja auch noch das einlesen des PAE und schreiben des PAA usw. Das musst du auch noch dabeirechnen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast du auch noch Kommunikationslast durch HMI oder Profibus oder so?
Setze doch mal deinen Code hier rein, vielleicht passt deine Berechnung ja auch nicht
 
Den direkten Code darf ich leider nicht hier reinstellen, aber es sind sicher 22 Bitoperationen.

Also eine Kommunikationslast hab ich nicht dort.

Das mit den Bausteinaufrufen klingt logisch, nur woher bekomme ich die Bausteinaufrufzeiten? Ich habe einen OB1 indem ich die Zykluzeit messe und einen FB1 mit DB1 aufrufe und in dem FB1 ist mein zu messender Baustein mit 22 Bitoperationen.

Es geht mir nicht um eine super genaue Rechnung, ich will bzw. muss nur sehen, dass die durch die SPS gemessene Zykluszeit annähernd stimmt ab ca. 3ms und ca. 20ms sind halt ein riesen Unterschied.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
übrigens kommt es auch auf die sprache an - in KUP wirst du Bild- und Nulloperationen finden, die auch Zeit brauchen und auch öfter mal einen sprung, wo du ihn nicht vermutest ... also am besten die zykluszeit anhand von AWL berechnen
 

Anhänge

  • bildop.PNG
    bildop.PNG
    13 KB · Aufrufe: 35
Ich seh schon, dass ist gar nicht so einfach, weil doch sehr viele Faktoren mit einbezogen werden müssen.

Vielen Dank für eure zahlreichen Tipps!

Werd das ganze jetzt nochmal durchrechnen.
 
Ich seh schon, dass ist gar nicht so einfach, weil doch sehr viele Faktoren mit einbezogen werden müssen.

Vielen Dank für eure zahlreichen Tipps!

Werd das ganze jetzt nochmal durchrechnen.


Mit welcher Adressierungsart arbeiten die Bit-Operationen?

Die 300 reagieren allergisch auf indirekte Adressierung!
 
Und wofür? Das braucht in der Praxis kein Mensch.

manchmal sind theoretische betrachtungen notwendig, z.b. bei der einsatzplanung einer bestimmten CPU. außerdem ist es auch immer gut zu wissen, wo eine hohe zykluszeit begraben sein könnte.

insgesamt finde ich, macht das einlesen und arbeiten mit dem thema, das arbeiten in der praxis um einiges einfacher - man wundert sich weniger.

darüber hinaus gibt es auch immer theoretische betrachtungen, die zur erlangung eines bestimmten abschlusses angestrengt werden müssen - zwar nicht praxis aber praktisch, wenn man eine fundierte arbeit abliefern kann
 
Zuviel Werbung?
-> Hier kostenlos registrieren
manchmal sind theoretische betrachtungen notwendig, z.b. bei der einsatzplanung einer bestimmten CPU. außerdem ist es auch immer gut zu wissen, wo eine hohe zykluszeit begraben sein könnte.

Genau darum geht es mir bei der Berechnung...

Der Baustein der gemessen wir ist in SCL programmiert.
 
Der Baustein der gemessen wir ist in SCL programmiert.

das ist natürlich tricky, da kommste eigentlich nur sinnvoll voran, wenn du den baustein übersetzt, die quelle löschst (aus dem testprojekt, natürlich nicht von deinem rechner ;) ) und dir dann an hand des AWL-codes, der nun beim öffnen des bausteins erscheint eine zykluszeit herleitest
 
das ist natürlich tricky, da kommste eigentlich nur sinnvoll voran, wenn du den baustein übersetzt, die quelle löschst (aus dem testprojekt, natürlich nicht von deinem rechner ;) ) und dir dann an hand des AWL-codes, der nun beim öffnen des bausteins erscheint eine zykluszeit herleitest

Noch etwas mehr info bekommt man, wenn man den Baustein in eine MemoryCardDatei (*.wld) schiebt (nur den einen Baustein) und in daraus öffnet (dann muss man die Quelle nicht löschen).
Dann sieht man auch gleich, was so an Code generiert wird für Bausteinaufrufe und Parameterübergabe. (es wird dabei eine Fehlermeldung ausgegeben, kann man aber ignorieren).

Und mal schön auf die Adressierungsarten achten und mal ins Handbuch schauen, ist bei den kompilierenden CPUs echt heftig wie die Ausführungszeiten ansteigen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Noch etwas mehr info bekommt man, wenn man den Baustein in eine MemoryCardDatei (*.wld) schiebt (nur den einen Baustein) und in daraus öffnet (dann muss man die Quelle nicht löschen).
Dann sieht man auch gleich, was so an Code generiert wird für Bausteinaufrufe und Parameterübergabe. (es wird dabei eine Fehlermeldung ausgegeben, kann man aber ignorieren).

Und mal schön auf die Adressierungsarten achten und mal ins Handbuch schauen, ist bei den kompilierenden CPUs echt heftig wie die Ausführungszeiten ansteigen.

Wie wäre es, das Kompilat einfach direkt aus dem AWL-Editor zu öffnen? Geht auch.
Wenn ich wissen will, wie lange ein Baustein braucht, mache ich vor dem Aufruf ein sfc64, speichere das Ergebnis und nach dem fraglichen Baustein wieder und subtrahiere die Zeiten.
 
Wie wäre es, das Kompilat einfach direkt aus dem AWL-Editor zu öffnen? Geht auch.
Wenn ich wissen will, wie lange ein Baustein braucht, mache ich vor dem Aufruf ein sfc64, speichere das Ergebnis und nach dem fraglichen Baustein wieder und subtrahiere die Zeiten.

Bei Siemens hat der SFC64 im System 300 unterschiedliche Auflösungen:
die Alten (bei 313C vor 2.6.1) haben noch 10ms, erst die Neuen haben 1ms.

Aber selbst 1ms ist aus meiner Sicht nicht wirklich ausreichend zum Messen.

Speed7 CPUs haben unter anderem den SFB 7 mit dem man auf 1µs messen kann (Laufzeit des SFB 7 auch etwa 1 µs).

In den neueren CPUs (317, 315PN/DP, 319, Speed7) kommt man um die Messung eigentlich gar nicht herum, weil die Laufzeiten für einen Befehl nicht konstant sind (Caches, Optimierungen, Speicherzugriffe).
Selbst die Messung ist nicht trivial wegen der Cacheeffekte (die 317 ist da sehr beeindruckend, abhängig von der Schleifengröße schwankt die Befehlsausführungszeit um Faktor 3!)
 
... Laufzeiten für einen Befehl nicht konstant sind (Caches, Optimierungen, Speicherzugriffe).
Selbst die Messung ist nicht trivial wegen der Cacheeffekte (die 317 ist da sehr beeindruckend, abhängig von der Schleifengröße schwankt die Befehlsausführungszeit um Faktor 3!)

guter hinweis! mit solchen messungen kann man sich die laufzeit "schönrechnen". der code innerhalb einer schleife muss auf jeden fall lang genug sein, damit er nicht vollständig aus dem cache läuft! caches wirken sich vor allem bei den neuen Siemens CPUs (317, 319...) aus und natürlich bei allen IEC1131-Laufzeitsystemen, die auf Standard-Controllern mit Cache-Unterstützung laufen. Weiterhin sind PreFetch-Effekte zu beachten. Diese beeinflussen die Befehlslaufzeit z.b. nach Sprüngen bzw Bedingunen
Fazit: "Wer misst, misst Mist!" ...Wer an dieses Thema zu blauäugig ran geht, bekommt keine vernünftigen Ergebnisse...
 
Zurück
Oben