mein erstes "richtiges" SPS-Projekt (Schwimmbadsteuerng) nimmt langsam Gestalt an und im Gleichschritt damit wachsen die Echtzeitprobleme bei der WebVisualiserung.
Wenn's schnell geht, dauert der Aufbau einer einfachen Visu (<10 Elemente) ca. 2 sec und der einer komplexen Visu (75 Elemente) 4 sec. Das wäre für mich gerade noch akzeptabel, zumal wiederholte Aufrufe derselben Seite wesentlich schneller gehen. (Ich kann auch die Visu's noch etwas abspecken, wenn's wirklich sein muss.)
Meist aber dauert die Sache wesentlich länger (bis 20 sec wurden beobachtet). In der Zeit friert dann auch die sonst klaglos durchlaufende Zeitanzeige ein. Oft hängt sich die Visu dann aber komplett auf, mit einer Statusanzeige im Browser: "Neuer Download erkannt".
Auch habe ich keine Ahnung, warum es in seltenen Fällen so "schnell" geht, und dann (meist) wieder so langsam.
Nachdem mein Projekt ziemlich wild gewachsen ist (periodischer Aufruf von PC_PRG, wo alles drin ist bzw. von wo FBs unf PRGs definiert aufgerufen werden), habe ich diese Funktionen jetzt so zerlegt, dass jede von ihnen nur so oft aufgerufen wird wie nötig (mögliche Zeittakte sind nun 1/16, 1/4, 1, 5 und 60 sec). Die zyklische Schleife (welche derzeit mit ca. 300 Hz aufgerufen wird) verwende ich eigentlich nur noch, um den 16 Hz Takt zu erzeugen, aus dem wiederum alle langsameren Takte abgeleitet werden.
In den letzten Tagen habe ich in dieses Taktsystem sehr viel Arbeit investiert, indem ich damit den Rechenzeitbedarf gefühlt um Faktoren reduziert habe - aber die Web-Visu ist damit keinen Deut schneller geworden. Es sieht fast so aus, als würde jeder Zyklus, den ich "unten" mühsam freischaufle, irgendwo "in der Mitte" sinnlos verkonsumiert, bevor er der Web-Visu "oben" zugute kommen kann. Da kann ich dann freilich optimieren, bis ich schwarz werde...
In der Taskkonfiguration ist nichts eingetragen, da PLC_PRG; nach ein paar vergeblichen Versuchen in dieser Richtung habe ich alles wieder verworfen. Irgendwie fehlt mir der rote Faden und das Verständnis der Abläufe jenseits meiner eigenen Programme, um da gezielt und systematisch vorgehen zu können.
Mein LAN ist durchgängig Gigabit, bis auf die Wago-Komponenten, die nur 100 Mb/s können. Neben einem zentralen 24-Port Gb-Switch habe ich an der Steuerung noch einen zweiten Switch installiert (Wago 852-101), um von dort zukünftig noch einen Laptop-Anschluss abzweigen zu können. Auch bin ich meist der einzige Nutzer im LAN (deshalb mussten es ja auch unbedingt 24 Ports sein )
Wo muss ich ansetzen ?
P.S.: Die Suche im Forum habe ich interessiert bemüht, bin aber nicht recht fündig geworden.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Wühlmaus hat geschrieben:
Kann man die Zykluszeit eigentlich künstlich herabsetzen bzw. fest vorgeben ? (Ich bräuchte ja eigentlich nur 16 Hz oder so).
Au weia, Sch... wenn man doof ist. Irgendwie hatte ich die Task-Konfig. total missverstanden. Die dort für den zyklischen Betrieb vorgesehene Einstellung der Intervalldauer ist doch genau die Einstellung der Zyklusfrequenz, die ich so dringend suchte...
Die Intervalldauer habe ich jetzt auf 40 ms eingestellt, und siehe da, die Visu geht ab wie Schmidt's Katze (max. 1 sec für die komplexe Visu mit 75 Elementen). Kein Wunder, bei einer mittleren Cycle Time von 2 ms alle 40 ms bleibt genügend Luft für all die anderen namenlosen Ressourcenfresser ...
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Obwohl das eigentlich drängende Problem gelöst ist, hier noch eine Verständnisfrage zum Ablaufmodell des Wago 750-841.
Wenn ich im zyklischen Ablaufmodus arbeite, kann es (bei meiner derzeitigen SW-Struktur) passieren, dass einzelne solcher Zyklen länger dauern als die gewählte Zykluszeit. Mittlerweile bin ich auf 10 ms Zykluszeit zurückgefallen, und der PLC-Browser zeigt maximale Zykluszeiten von 38 ms an.
Was passiert in solchen Fällen ? Arbeitet PLC_PRG dann seinen (eigentlich viel zu langen) Zyklus stur ab und verschläft dann halt die 2 bis 3 nachfolgenden Zyklen ? Oder kommen alle 10 ms beinharte Interrupts, so dass sich PLC_PRG dann selbst unterbrechen und ergo wohl verhusten würde ?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ich habe auch das Problem, dass meine Visu öfter mal einfriert. Hab jetzt auch die Zykluszeit mal ausgelesen, sie beträgt im maximum 32ms... Aber leider finde ich keinen Punkt, wo ich die Zykluszeit festsetzen kann, damit die Visu (welche bisher seeeehr langsam war) Möglichkeit zum Arbeiten geben kann.
Kann mir da jemand helfen?
Gruß
Mikro1986
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Mikro1986 hat geschrieben:
Aber leider finde ich keinen Punkt, wo ich die Zykluszeit festsetzen kann, damit die Visu (welche bisher seeeehr langsam war) Möglichkeit zum Arbeiten geben kann.
Hallo, versuch's mal mit
Ressourcen>Taskkonfiguration
Dort sollte eine Task angelegt sein, die wiederum Dein Hauptprogramm PLC_PRG umfasst.
Die Task (nicht das Programm) anklicken und dann z.B. folgende Werte einstellen:
Task Priorität = 1
Typ = zylisch
Intervall = T#100ms (natürlich abhängig von Deinem Fall und seinen Zeitanforderungen)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hmmm, genau da hab ich ja auch schon gesucht, bei neuen Tasks ist das auch kein Problem. Aber so wie ich das verstanden habe, brauch eine keinen Task, da mein Startprogramm PLC_PRG heißt... Jedenfalls steht in meiner Taskkonfiguration nur:
Taskkonfiguration
----- System-Ereignisse
wird eben nicht der PLC_PRG aufgerufen.
un nu?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Da ich selbst noch am Lernen bin, alles weitere bitte mit Vorsicht genießen - wenn's falsch ist, möge mich bitte jemand korrigieren.
Wenn in der Task-Konfiguration gar nichts eingetragen ist, wird in der Tat PLC_PRG zyklisch abgearbeitet, und zwar hintereinander weg, und vermutlich ohne Pause dazwischen. Welcher Zeitanteil dann noch für die niederpriore Visu bleibt, kann ich nicht sagen.
Wenn du aber eine Zykluszeit eingibst, die länger ist als die "Cycletime (avg)", die der PLC-Browser für dein Program auswirft, dann schaffst du zwangsweise Freiräume für niederpriore Prozesse.
Um eine Zykluszeit vorgeben zu können, musst du - alles im ausgeloggten Zustand - in der Taskkonfiguration in den Baum links (wo auch die von dir genannten Systemereignisse aufgeführt sind) mit rechtem Mausklick auf "Taskkonfiguration" gehen und "Task anhängen" auswählen. Dann erscheint unterhalb von "Systemereignisse" ein Uhrensymbol mit Namen "Neue Task". Auf diese nochmal Rechtsklick und "Programmaufruf anhängen". Im rechten Feld den Button "..." drücken und Dein PLC_PRG auswählen, und zwar (vorzugsweise ?) "ohne Argumente". Dann zurück auf "neue Task". Jetzt kannst Du "Zyklisch" auswählen und die gewünschte Zykluszeit. Wenn das Feld Zykluszeit leer ist, kommt es zu der Wiederholung mit maximaler Frequenz, wie beschrieben. Ich vermute, dass es bei dir schon laufen sollte, wenn du 50ms eingibst.
Bei mir hat dieses Vorgehen genau den entscheidenden Unterschied gebracht (seit meinem Posting vom 06.02.10 läuft's völlig unproblematisch) - ich hoffe es hilft auch bei dir.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ich habe schon einige Visualisierungen mit der WebVisu erstellt und kann die Ausführungen von "Wühlmaus" bestätigen.
Weiter noch zur Info, die Webvisu läuft zwischen dem 12ten und 13ten Task und nimmt sich die Zeit die diese Tasks nicht benötigen (Bis hin zur angegebenen Zycluszeit) Einige Visuelemente benötigen allerdings EXTREM viel Zeit. Hier ist der einfache Button ein "Musterexemplar" Bei Zycluszeiten unter 500ms bleibt dieser schon mal gerne hängen, wenn man ihn als Taster einsetzt.
Noch eine Info zu der Fehlermeldung "Neuer Download erkannt" Diese kommt wenn nur die Software OHNE Visualisierung herüber geladen wird. Also zum Schluss immer die Software UND die Visu überspielen!
LG. Norbert
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
mein erstes "richtiges" SPS-Projekt (Schwimmbadsteuerng) nimmt langsam Gestalt an und im Gleichschritt damit wachsen die Echtzeitprobleme bei der WebVisualiserung.
Wenn's schnell geht, dauert der Aufbau einer einfachen Visu (<10 Elemente) ca. 2 sec und der einer komplexen Visu (75 Elemente) 4 sec. Das wäre für mich gerade noch akzeptabel, zumal wiederholte Aufrufe derselben Seite wesentlich schneller gehen. (Ich kann auch die Visu's noch etwas abspecken, wenn's wirklich sein muss.)
Meist aber dauert die Sache wesentlich länger (bis 20 sec wurden beobachtet). In der Zeit friert dann auch die sonst klaglos durchlaufende Zeitanzeige ein. Oft hängt sich die Visu dann aber komplett auf, mit einer Statusanzeige im Browser: "Neuer Download erkannt".
Auch habe ich keine Ahnung, warum es in seltenen Fällen so "schnell" geht, und dann (meist) wieder so langsam.
Nachdem mein Projekt ziemlich wild gewachsen ist (periodischer Aufruf von PC_PRG, wo alles drin ist bzw. von wo FBs unf PRGs definiert aufgerufen werden), habe ich diese Funktionen jetzt so zerlegt, dass jede von ihnen nur so oft aufgerufen wird wie nötig (mögliche Zeittakte sind nun 1/16, 1/4, 1, 5 und 60 sec). Die zyklische Schleife (welche derzeit mit ca. 300 Hz aufgerufen wird) verwende ich eigentlich nur noch, um den 16 Hz Takt zu erzeugen, aus dem wiederum alle langsameren Takte abgeleitet werden.
In den letzten Tagen habe ich in dieses Taktsystem sehr viel Arbeit investiert, indem ich damit den Rechenzeitbedarf gefühlt um Faktoren reduziert habe - aber die Web-Visu ist damit keinen Deut schneller geworden. Es sieht fast so aus, als würde jeder Zyklus, den ich "unten" mühsam freischaufle, irgendwo "in der Mitte" sinnlos verkonsumiert, bevor er der Web-Visu "oben" zugute kommen kann. Da kann ich dann freilich optimieren, bis ich schwarz werde...
In der Taskkonfiguration ist nichts eingetragen, da PLC_PRG; nach ein paar vergeblichen Versuchen in dieser Richtung habe ich alles wieder verworfen. Irgendwie fehlt mir der rote Faden und das Verständnis der Abläufe jenseits meiner eigenen Programme, um da gezielt und systematisch vorgehen zu können.
Mein LAN ist durchgängig Gigabit, bis auf die Wago-Komponenten, die nur 100 Mb/s können. Neben einem zentralen 24-Port Gb-Switch habe ich an der Steuerung noch einen zweiten Switch installiert (Wago 852-101), um von dort zukünftig noch einen Laptop-Anschluss abzweigen zu können. Auch bin ich meist der einzige Nutzer im LAN (deshalb mussten es ja auch unbedingt 24 Ports sein )
Wo muss ich ansetzen ?
P.S.: Die Suche im Forum habe ich interessiert bemüht, bin aber nicht recht fündig geworden.
Hi
Welche Zykluszeit hast du ?
http://www.magnia.de/index.php?option=c ... &Itemid=44 m
Au weia, Sch... wenn man doof ist. Irgendwie hatte ich die Task-Konfig. total missverstanden. Die dort für den zyklischen Betrieb vorgesehene Einstellung der Intervalldauer ist doch genau die Einstellung der Zyklusfrequenz, die ich so dringend suchte...
Die Intervalldauer habe ich jetzt auf 40 ms eingestellt, und siehe da, die Visu geht ab wie Schmidt's Katze (max. 1 sec für die komplexe Visu mit 75 Elementen). Kein Wunder, bei einer mittleren Cycle Time von 2 ms alle 40 ms bleibt genügend Luft für all die anderen namenlosen Ressourcenfresser ...
Obwohl das eigentlich drängende Problem gelöst ist, hier noch eine Verständnisfrage zum Ablaufmodell des Wago 750-841.
Wenn ich im zyklischen Ablaufmodus arbeite, kann es (bei meiner derzeitigen SW-Struktur) passieren, dass einzelne solcher Zyklen länger dauern als die gewählte Zykluszeit. Mittlerweile bin ich auf 10 ms Zykluszeit zurückgefallen, und der PLC-Browser zeigt maximale Zykluszeiten von 38 ms an.
Was passiert in solchen Fällen ? Arbeitet PLC_PRG dann seinen (eigentlich viel zu langen) Zyklus stur ab und verschläft dann halt die 2 bis 3 nachfolgenden Zyklen ? Oder kommen alle 10 ms beinharte Interrupts, so dass sich PLC_PRG dann selbst unterbrechen und ergo wohl verhusten würde ?
Hi,
ich habe auch das Problem, dass meine Visu öfter mal einfriert. Hab jetzt auch die Zykluszeit mal ausgelesen, sie beträgt im maximum 32ms... Aber leider finde ich keinen Punkt, wo ich die Zykluszeit festsetzen kann, damit die Visu (welche bisher seeeehr langsam war) Möglichkeit zum Arbeiten geben kann.
Kann mir da jemand helfen?
Gruß
Mikro1986
Hallo, versuch's mal mit
Dort sollte eine Task angelegt sein, die wiederum Dein Hauptprogramm PLC_PRG umfasst.
Die Task (nicht das Programm) anklicken und dann z.B. folgende Werte einstellen:
Task Priorität = 1
Typ = zylisch
Intervall = T#100ms (natürlich abhängig von Deinem Fall und seinen Zeitanforderungen)
Hmmm, genau da hab ich ja auch schon gesucht, bei neuen Tasks ist das auch kein Problem. Aber so wie ich das verstanden habe, brauch eine keinen Task, da mein Startprogramm PLC_PRG heißt... Jedenfalls steht in meiner Taskkonfiguration nur:
Taskkonfiguration
wird eben nicht der PLC_PRG aufgerufen.
un nu?
Da ich selbst noch am Lernen bin, alles weitere bitte mit Vorsicht genießen - wenn's falsch ist, möge mich bitte jemand korrigieren.
Wenn in der Task-Konfiguration gar nichts eingetragen ist, wird in der Tat PLC_PRG zyklisch abgearbeitet, und zwar hintereinander weg, und vermutlich ohne Pause dazwischen. Welcher Zeitanteil dann noch für die niederpriore Visu bleibt, kann ich nicht sagen.
Wenn du aber eine Zykluszeit eingibst, die länger ist als die "Cycletime (avg)", die der PLC-Browser für dein Program auswirft, dann schaffst du zwangsweise Freiräume für niederpriore Prozesse.
Um eine Zykluszeit vorgeben zu können, musst du - alles im ausgeloggten Zustand - in der Taskkonfiguration in den Baum links (wo auch die von dir genannten Systemereignisse aufgeführt sind) mit rechtem Mausklick auf "Taskkonfiguration" gehen und "Task anhängen" auswählen. Dann erscheint unterhalb von "Systemereignisse" ein Uhrensymbol mit Namen "Neue Task". Auf diese nochmal Rechtsklick und "Programmaufruf anhängen". Im rechten Feld den Button "..." drücken und Dein PLC_PRG auswählen, und zwar (vorzugsweise ?) "ohne Argumente". Dann zurück auf "neue Task". Jetzt kannst Du "Zyklisch" auswählen und die gewünschte Zykluszeit. Wenn das Feld Zykluszeit leer ist, kommt es zu der Wiederholung mit maximaler Frequenz, wie beschrieben. Ich vermute, dass es bei dir schon laufen sollte, wenn du 50ms eingibst.
Bei mir hat dieses Vorgehen genau den entscheidenden Unterschied gebracht (seit meinem Posting vom 06.02.10 läuft's völlig unproblematisch) - ich hoffe es hilft auch bei dir.
ich habe schon einige Visualisierungen mit der WebVisu erstellt und kann die Ausführungen von "Wühlmaus" bestätigen.
Weiter noch zur Info, die Webvisu läuft zwischen dem 12ten und 13ten Task und nimmt sich die Zeit die diese Tasks nicht benötigen (Bis hin zur angegebenen Zycluszeit) Einige Visuelemente benötigen allerdings EXTREM viel Zeit. Hier ist der einfache Button ein "Musterexemplar" Bei Zycluszeiten unter 500ms bleibt dieser schon mal gerne hängen, wenn man ihn als Taster einsetzt.
Noch eine Info zu der Fehlermeldung "Neuer Download erkannt" Diese kommt wenn nur die Software OHNE Visualisierung herüber geladen wird. Also zum Schluss immer die Software UND die Visu überspielen!
LG. Norbert
Danke für das Feedback und die Ergänzungen.