Zykluszeit S7-200

pinolino

Level-1
Beiträge
261
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe Fragen zur Zykluszeit einer S7-200 CPU. Wir haben zwei etwas abweichende Programme für eine Maschine und wollten gerne Auskunft über die Zykluszeit bekommen.

Nun habe ich in der Hilfe von MicroWin gelesen, dass es zum Auslesen der Zykluszeit drei unterschiedliche Sondermerker SMW22, SMW24, SMW26 gibt.

Fragen dazu:

1) Normalerweise ist doch die Zykluszeit eines erstellten Programms immer konstant - warum gibt es dann Sondermerker für die kürzeste und die längste Zykluszeit?

2) Angenommen ich möchte die Zykluszeit auslesen - wie kann ich dann z.B. das SMW24 auslesen?

Danke für die Hilfe!

pinolino
 
Hallo
1) Normalerweise ist doch die Zykluszeit eines erstellten Programms immer konstant - warum gibt es dann Sondermerker für die kürzeste und die längste Zykluszeit?
Die Zykluszeiten sind alles andere als konstant ! Das kommt ganz auf die im Programm festgelegten Verzweigungen an. Ein alle 25sec. bspw. einmal aufgerufenes Unterprogramm welches in einer Schleife mit 32.000 Durchläufen 32.000mal 255 Worte in einen Puffer 'fillt'braucht für den Zyklus dann ungefähr 2 -3 Sek. (und killt jedesmal den Watchdog sofern nicht schon in der Schleife zurückgesetzt).
Das muss folglich schon einigermassen passend zueinander programmiert werden.
SM, SMB,SMW oder SMD werden genauso wie Variablen ausgelesen, zudem wird die Zykluszeit in MicroWin unter Systeminformationen angezeigt:rolleyes:
Gruss
tobias
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo 'pinolino'

1) Normalerweise ist doch die Zykluszeit eines erstellten Programms immer konstant - warum gibt es dann Sondermerker für die kürzeste und die längste Zykluszeit?
Wenn in einem Programm viel mit "Bedingten Bausteinaufrufen" oder Programm-Bausteine vorzeitig mit "CRET-Anweisungen" beendet werden,
kann die Zykluszeit schwanken da ja nicht in jedem Zyklus der komplette Code abgearbeitet wird.

2) Angenommen ich möchte die Zykluszeit auslesen - wie kann ich dann z.B. das SMW24 auslesen?
Du must dazu im Micro-Win eine Variabeln-Tabelle hinzufügen in der du die gewünschten SMWs einträgst.
Dann kannst du den aktuellen Wert ONLINE auslesen.
Ich habe jetzt kein Micro-Win zur Verfügungung, aber ich denke die Integer-Werte geben die Zykluszeiten in 'ms' an.

Gruss
Guido
 
Zuletzt bearbeitet:
Danke für eure Antworten.

Wird denn unter den Systeminformationen die aktuelle Zykluszeit angezeigt - wird also jedesmal der aktuelle Wert nach einem Zyklusdurchlauf gespeichert?

Du must dazu im Micro-Win eine Variabeln-Tabelle hinzufügen in der du die gewünschten SMWs einträgst.
Dann kannst du den aktuellen Wert ONLINE auslesen.

Ist damit die Statustabelle gemeint?

Hier lässt sich ja nur "Mit Vorzeichen, Vorzeichenlos, Hexadezimal, Binär und ASCII" einstellen.

Danke!

pinolino
 
Danke für eure Antworten.

Wird denn unter den Systeminformationen die aktuelle Zykluszeit angezeigt - wird also jedesmal der aktuelle Wert nach einem Zyklusdurchlauf gespeichert?



Ist damit die Statustabelle gemeint?

Hier lässt sich ja nur "Mit Vorzeichen, Vorzeichenlos, Hexadezimal, Binär und ASCII" einstellen.

Danke!

pinolino

ja oder du hast ein TD

Hier noch die Beschreibung der SM

SMW22, SMW24 und SMW26 enthalten Informationen zur Zykluszeit. Sie können die letzte, die kürzeste und die längste Zykluszeit in Millisekundenn auslesen.

Symbolischer Name
S7-200 SM-Adresse Anwenderprogramme lesen SMW22-SMW26: Zykluszeitdaten
Letzter_Zyklus SMW22 Dieses Wort speichert die Zykluszeit des letzten Zyklus.
Min_Zyklus SMW24 Dieses Wort speichert die kürzeste Zykluszeit seit Beginn des Betriebszustands RUN.
Max_Zyklus SMW26 Dieses Wort speichert die längste Zykluszeit seit Beginn des Betriebszustands RUN.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
die 'aktuelle' Zykluszeit gibts in der Sys-Info nicht. Es ist die Zeit des Zyklusses nach Aufrufen, bzw. nach 'Zykluszeit zurücksetzen' (interessehalber mal gestoppt) die Zeit des übernächsten Zyklus' nach Übertragung des Datagrams.
Um die Zeit eines ganz bestimmten Zyklus zu 'catchen' muss man etwa folgendermassen vorgehen.
Bei Durchlauf eines bestimmten Unterprogramms (also einer Stelle an der die Verzweigung vorliegt) den Merker m_catch (oder jede andere Variante) setzen, und wenn m_catch ==1 dann am Ende des Zyklus als letzten Befehl mov SMW 22 nach VWxxxx. In VWxxx steht dann die Zeit. Merker m_catch muss dazu natürlich an jedem Zyklusanfang resettet werden und es muss verriegelt sein das m_catch wirklich nur einmal aktiviert wird.
Im Übrigen ist es so, dass es zwei 'Zykluszeiten gibt - je nachdem welche Definition man zugrunde legt :D
Einmal ist es die Zeit der Abarbeitung der eigenen Anweisungen vom ersten bis zum e.g. letzten Netzwerk.
Oder es ist die Zeit vom ersten Netzwerk des vorherigen Zyklus bis ins erste Netzwerk des aktuellen Zyklus.
Zwischen den Zyklen liegt noch die Zeit welche das Betriebssystem verbrät (und in welcher Hintergrundaktivitäten wie Kommunikation abgearbeitet werden. Es kommt also auf die Auswahl der genauen Start- und Stoppunkte an um auch tatsächlich die für die eigenen Interessen relevante Zeitspanne zu erfahren.
Ich hatte es gerade mal durchgenüdelt weil beim 'umtopfen' eines auf einer 224XP gebauten Programms auf eine 226 die angezeigten Zykluszeiten von 2-5ms auf plötzlich vereinzelte unerklärliche 56-75ms hochschnellten. Das lag an der Buseinbindung der 226, war also reine Hintergrundszeit. Die Abarbeitung des Listings hingegen lief in Etwa auf beiden CPU's gleich_langsam (oder schnell) :rolleyes:
 
Danke für die ausführlichen Erklärungen.

Aber irgedwie habe ich noch immer Probleme damit. Wir haben wie gesagt zwei Programme für eine Maschine. So, und nun möchten wir wissen, welches Programm schneller arbeitet.

Dazu wäre es eben interessant zu wissen, wie lange die SPS (Zykluszeit) benötigt, um das Netzwerk 1 bis zum letzten Netzwerk zu bearbeiten.

Wie kann so etwas realisiert werden?

@tobias:

Könnte ich dazu so, wie von dir beschrieben, vorgehen?

Also in Netzwerk 1 z.B. einen Merker M10.0 setzen und im letzten Netzwerk (wenn M10.0 noch gesetzt ist) das SMW22 nach VWxxxx übertragen. Ebenfalls dann halt im letzen Netzwerk M10.0 wieder zurücksetzen.

Bekomme ich dann die von mir gewünschte Angabe über die Zeit eines Zyklusses?

pinolino
 
Hallo
die Messequenz 'dareinzubasteln' ist schon nicht unbedingt easy und sollte auch der eigenen Notwendigkeiten entsprechen. Damit das Sinn ergibt benötigt es wie jede Messung einen definierten (gewünschten) Startpunkt und sowas wie das Signal 'Ende der Messung'.
Ausserdem bedarf es erstmal einer vergleichbaren Grundlage um die Messungen dann in Relation setzen zu können.
Bei mir waren es im Programmdurchlauf zum Bsp. um die 200 Zyklen pro Sekunde wenn es gut lief und knappe 50 alls es plötzlich irgendwo hakte. Dazu muss man die sekündlichen Zyklen aber erstmal zählen, zudem in unterschiedlichen 'Belastungsstadien', auch um zu wissen was die CPU bringen würde wenn bestenfalls nur die zwei Anweisungen die zum Zählen notwendig sind darauf rotieren.
Alles andere hängt dann von Notwendigkeit, Lust und Laune ab. Die Differenzen sind riesig zumal wie gesagt ein Grossteil der 'rechenzeit' sowieso zwischen den Zyklen liegen kann. Da kann das Programm noch so geschliffen kurz sein - je nach Konfiguration und Zusatzbaugruppen fallen schonmal anscheinend bis zu 50% dem Betriebssystem 'zum Opfer'. Wobei dieses dann natürlich, und evtl. ebenso dem Programm dienlich, auch was macht.
Um mehrere zusammenhängende Zyklen vergleichend auszuwerten (obs günstiger wäre wenn es so oder eben anders liefe) bleibt letztendlich sowieso nur meinetwegen 100 zusammenhängende Zyklen aufzuzeichnen indem die Zeiten indirekt adressiert im Puffer abgelegt werden. Bloss denn läuft zusätzlich das Messprogramm in schon messbarer Grösse mit und das Ganze ist auch nur noch relativ auszuwerten. :rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit anderen Worten heißt das dann, dass die Zykluszeit eines geschriebenen Programms nicht ohne weiteres erfassbar ist, oder?

Es wurde bereits geschrieben, dass die Zykluszeit in der Systeminformation die Zeit des Zyklusses nach Übertragung des Datagrams darstellt.

Was bedeutet das nun genau - welche Zeit messe ich hier dann genau und vor allem, kann ich so die Zeiten zweier Programme miteinander vergleichen?

Danke

pinolino
 
Zurück
Oben