TIA SCL-Schleife erhöht kurzfristig die Zykluszeit

Zuviel Werbung?
-> Hier kostenlos registrieren
Inzwischen habe ich festgestellt, dass ich auch nach dem Laden des Programms ohne Schleifen (auskommentiert), eine anfängliche Zykluszeiterhöhung auf ~50ms habe.
Ich wollte schon danach gefragt haben und habe es mir dann verkniffen, weil ich glaubte, die Antwort darauf in #1 gefunden zu haben:

Der Kollege hat die Schleife eingespielt und sofort sprang die mittlere Zykluszeit von ~20ms auf ~50ms!
Dann hat er die Schleife herausgenommen und 60 Einzelaufrufe (in AWL) programmiert. Nach dem Einspielen ist dabei die Zykluszeit nicht angestiegen.
:confused: ;)
 
Das mit dem Ausgang hab ich mittlerweile verstanden^^. Danke für die nähere Ausführung warum Du den Versuch haben wolltest.

Eigentlich sind wir oben davon ausgegangen das es durch Aktivierung der Schleife geschieht, aber wenn es nur nach dem Laden des Programms auftritt, dann könnte das wohl auf das Laden selbst zurückzuführen sein, da das Laden ja auch eine Kommunikationslast darstellt, die je nach Größe der Änderungen nicht unerheblich sein kann. Da gab es in der Vergangenheit schon einige CPUs die in Stop gegangen sind durch das Laden selbst was wiederum durch FW-Updates manchmal korrigiert wurde.

Wenn die Zykluserhöhung durch Kommunikation reduziert würde, könnte man dem dann eventuell entgegenwirken?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

ich hab jetzt nicht alle Beiträge gelesen aber nur mal so grundsätzlich, eine Schleife im Programm erhöht doch immer die Zykluszeit. Ob diese Schleife in SCL oder AWL geschrieben wird ist egal.
Wenn man dagegen anstelle einer Schleife 60 mal das gleiche hinschreibt läuft es einfach durch...

Das Phänomen könnt ihr auch auf einer 300er mit AWL Code bauen...

Zumindest habe ich das schon ein paar mal ausprobiert und baue aus Prinzip keine schleifen in ein SPS Programm
 
Moin,

ich hab jetzt nicht alle Beiträge gelesen aber nur mal so grundsätzlich, eine Schleife im Programm erhöht doch immer die Zykluszeit. Ob diese Schleife in SCL oder AWL geschrieben wird ist egal.
Wenn man dagegen anstelle einer Schleife 60 mal das gleiche hinschreibt läuft es einfach durch...

Das Phänomen könnt ihr auch auf einer 300er mit AWL Code bauen...

Zumindest habe ich das schon ein paar mal ausprobiert und baue aus Prinzip keine schleifen in ein SPS Programm

Der unterschied einer Schleife wie "FOR x := 0 to 59" zu dem Code einfach 60 mal hinschreiben dürfte eigentlich nur die Lesbarkeit und der Aufwand sein. Die Zykluszeit müsste nahezu identisch sein (indexvariablenrechnung mal ausser acht gelassen.)

Es gibt eigentlich keinen Rechnerischen Grund auf Schleifen zu verzichten, erst recht nicht aus Prinzip.
 
Moin,

ich hab jetzt nicht alle Beiträge gelesen aber nur mal so grundsätzlich, eine Schleife im Programm erhöht doch immer die Zykluszeit. Ob diese Schleife in SCL oder AWL geschrieben wird ist egal.
Wenn man dagegen anstelle einer Schleife 60 mal das gleiche hinschreibt läuft es einfach durch...

Das Phänomen könnt ihr auch auf einer 300er mit AWL Code bauen...

Zumindest habe ich das schon ein paar mal ausprobiert und baue aus Prinzip keine schleifen in ein SPS Programm

Ich arbeite sehr viel mit Schleifen, daher habe ich das im Beitrag #30 mal probiert und eine Gegenüberstellung geschaffen.
Das Problem hier rührt aber nicht daher, da ich die Größe der Erhöhung nicht nachstellen kann bei der gleichen CPU und Familie.

Viel mehr, so ist es in den letzten Beiträgen erläutert worden, geschieht die Erhöhung wohl nur kurzzeitig nach dem Laden des Anwenderprogramms.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was habt ihr denn alle unter CPU-Eigenschaft "Kommunikationslast" eingestellt?
Default ist meisten 50%.
Ich habe auch schon CPUs gehabt, die nach laden von Änderungen in Zykluszeitüberschreitung gegangen sind (Großes Safety-Programm in Verbindung mit schwacher CPU).
Da hat 20% (und OB80...) ganz viel geholfen.
Das könnte hier auch die Auffälligkeit verringern.
 
Um das Thema Kommunikationslast genauer zu untersuchen könnte man mit dem RT_Info-Baustein im Mode 21 mal einen Versuch fahren und das Ergebnis tracen.
RT_Info.JPG
 
Zumindest habe ich das schon ein paar mal ausprobiert und baue aus Prinzip keine schleifen in ein SPS Programm
Ich war einmal gezwungen, auf eine SPS-ProgrammSchleife zu verzichten. Die SPS hatte einen - freundlich ausgedrückt - "rudimentären" BefehlsSatz.
Dass ich die gewünschte Funktionalität überhaupt umsetzen konnte, wäre fast an dem ebenso minimalistischen SpeicherPlatz für das SPS-Programm gescheitert.
Aus Prinzip habe ich dann abgelehnt, weitere Quälereien auf dieser SPS auch nur anzudenken. Es war die SPS der Sinumerik 810M. GA weiss ich nicht mehr, jedenfalls eine gefühlt pränatale BetaVersion.

Aus Prinzip keine Schleifen im SPS-Programm ... kann ich nicht nachvollziehen.
Wenn man weiss, was man tut, EndlosSchleifen vermeidet und die Auswirkungen auf die ZyklusZeit im Griff hat - warum nicht?
 
Moin Howard,

Um das Thema Kommunikationslast genauer zu untersuchen könnte man mit dem RT_Info-Baustein im Mode 21 mal einen Versuch fahren und das Ergebnis tracen.
Anhang anzeigen 48862

Hier das Ergebnis:

RT_INFO_20_21.jpg

Die erste Auffälligkeit, die man sieht, (0.333) ist ein Stop->Start der CPU.
Die zweite Auffälligkeit, die man sieht, (0.9) ist das Laden eines geänderten Programms.

rote Aufzeichnung: RT_INFO mit Mode 20
blaue Aufzeichnung: RT_Info mit Mode 21


VG

Mario
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Grundsätzlich kann man auf Schleifen immer komplett umgehen. Es ist nur nicht sehr sinnvoll und natürlich brauchts wenn man was zig mal ausschreibt auch erheblich mehr Speicher.
Kann ich so nicht stehen lassen. Ein Byte im array mit Größe 1000 suchen? Das wird dann ehr eine Diskussion zum Wort "Grundsätzlich".
Richtig blöd wird es wenn etwas dynamisch verschoben wird: wenn i=start to End berechnet wird. Dann ist eine Scheife toll + elegant.
Das ausprogrammieren und vor jeder Möglichkeit ein IF zu machen ist irgendwann auch an der Grenze der Machbarkeit.
Schon bei S5 waren manche Sachen ohne B und SPB kaum möglich. Und man hat es ja nur gemacht wenn es nicht anders ging. Schön war es ja nicht ....
 
Also arbeitet die CPU dort wirklich über einen längeren Zeitraum am Maximum der erlaubten Kommunikationslast. Also bist du selber Schuld - lade halt nicht so oft so viel Software :ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann ich so nicht stehen lassen. Ein Byte im array mit Größe 1000 suchen? Das wird dann ehr eine Diskussion zum Wort "Grundsätzlich".

Ich wollte damit ja auch nur klarstellen, das eine Schleife an sich nichts anders macht als der ausgeschriebene Code. Man erkauft sich mit ausgeschriebenem Code keine Zykluszeit und leserlicher wirds auch nicht. Geschweigedenn wird die Sache Sicherer, denn je mehr Code umso eher vertippt man sich auch.

Also um mit dir einige zu gehen. Auf Schleifen verzichten kann man bei einfachen wirklich übersichtlichen Dingen. Sobalds komplexer wird, wird man um Schleifen nicht mehr herumkommen. Wenn man dann auch noch irgendwelche Treiber baut wirds ohne Schleifen unsagbar umständlich.
 
Moin Howard,

Also arbeitet die CPU dort wirklich über einen längeren Zeitraum am Maximum der erlaubten Kommunikationslast. Also bist du selber Schuld - lade halt nicht so oft so viel Software :ROFLMAO:

Trotzdem kommt die Belastung der Kommunikation ja wohl nicht vom Laden der Software?! Denn die Erhöhung der Zykluszeit ist ja bis zu 8s NACH dem Laden feststellbar...

VG

Mario
 
Trotzdem kommt die Belastung der Kommunikation ja wohl nicht vom Laden der Software?! Denn die Erhöhung der Zykluszeit ist ja bis zu 8s NACH dem Laden feststellbar...
Vom Laden und von alle dem, was das BetriebsSystem noch so treibt und tut, bevor es von der alten Version des Bausteins auf die 8 s zuvor geladene, neue Version umschaltet.
Vermutlich.
Deshalb auch Haralds Hinweis mit dem Setzen des Ausgangs, damit man auch sehen kann, ob es tatsächlich so abläuft.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vom Laden und von alle dem, was das BetriebsSystem noch so treibt und tut, bevor es von der alten Version des Bausteins auf die 8 s zuvor geladene, neue Version umschaltet.
Vermutlich.
Deshalb auch Haralds Hinweis mit dem Setzen des Ausgangs, damit man auch sehen kann, ob es tatsächlich so abläuft.
sehe ich genauso - ist halt mittlerweile mehr PC als SPS
 
Moin,

hier noch ein Trace:

ZykluszeitRBGladen.PNG

- Blaue Kurve: Ausgabe RT_INFO im Modus 21
- Grüne Kurve: Aktuelle Zykluszeit (Systemvariable des OB1)
- Bit "TEST" - Q1000.0


Also der Ausgang geht nicht erst nach der Zykluszeiterhöhung auf TRUE, sondern schon nach dem Ende des Ladens - unabhängig davon, was die CPU ggf. noch macht.


Sooo viel Software ist nun auch wieder nicht drin:

RBGSpeicher.PNG

VG

Mario
 
Zuletzt bearbeitet:
Zurück
Oben