Schönen Sonntag euch allen :)
Ich bin mir nicht ganz sicher ob ich hier wohl im Richtigen Forum
unterwegs bin, aber versuchen kann man es ja mal.
Für eine Wissenschaftliche Arbeit welche sich hauptsächlich mit
SPS-System befasst möchte ich die Zykluszeit einer Beckhoff-SPS bzw.
eines Industrie-PC's der FA. Beckhoff messen.
Die herangehensweise ist eher einfach gehalten:
Am Eingang X, wird ein Taster angebaut und mit dem Oszi verkabelt.
In der SPS soll nachdem am Eingang X ein Signal angekommen ist, der
Ausgang Y den Wert 1 bekommen, welcher ebenfalls mit dem Oszi verbunden
ist!
Das kann ich dann so 5-10x wiederholen und ich habe mal einen ungefähren
Mittel-Richtwert von der gesammten Zykluszeit T.
Nun zu meiner eigneltichen Frage :D
Um einen vergleichbaren wert zu bekommen, möchte ich ein "Groß-Programm"
entwickeln und die SPS mal ganz schön überfordern was die Zykluszeit
betrifft.
Hat jemand von euch vllt eine Idee, oder schon einen vergleichbaren
versuch gestartet um sowas zu realisieren?
Soll ich einfach x-beliebig viele WHILE und IF Schleifen reinschreiben
bis der Baustein "voll" ist?
LG Paul
Programmier doch eine 'Forkbomb', also einen Funktionsbaustein der sich
selbst zweimal aufruft. Mit wenig Code bringst Du den Rechner ziemlich
schnell an seine Grenze.
Prinzipiell wäre das ja genau das gewünschte Ziel...nur ist doch dan das
Problem, dass es kein Ende gibt und ich keinen Ausgang mehr setzten kann
da der Rechner schlicht weg abstürtzt.
Oder kann ich sowas wie einen Überlastungsbaustein kreieren der mir bei
Absturz einen Ausgang setzten kann?
LG und danke für die schnelle Antwort
Wenn die Steuerung mit CoDeSys (TwinCat) programmiert wird, sollte es in
der Taskkonfiguration auch eine direkte Anzeige der Taskauslastung
geben.
Um die Tasks auszulasten reicht auch eine einfache For - Schleife die
einfach nichts tut
Außerdem sollte die Antwortzeit sich auch mit erhöhter Auslastung nicht
veränndern. - Zumindest mit halbwegs funktionierendem terministischem
Betriebssystem.
Blub schrieb:> Zumindest mit halbwegs funktionierendem terministischem
ich kenne zwar das Beckhoff-System nicht. Aber für Deine Forderung
sollte man eine Warteschleife anhängen, die die Zykluszeit auf x erhöht,
wobei x so groß sein muß, das es niemals überschritten wird. Von sich
aus hat eine SPS eine Überwachung, die bei viel zu langer Zykluszeit die
Ausgänge in fail-safe schaltet. Eine exakte Antwortzeit des Systems ist
nicht möglich, da nach Betätigen des Eingangs mindestens auf die
System-Abfrage des Einganges (Prozeßabbild) gewartet werden muß, und das
bei nichtsynchronem Zyklus. Antwortzeit ist also > 1* und < 2*
Zykluszeit und muß schneller sein als worst-case des Prozesses.
Die Zykluszeit kannst du dir einfach im Task im TwinCAT PLC Control
einstellen. Die aktuelle Auslastung siehst du im Systemmanager. Wird die
Zykluszeit überschritte, werden meines Wissens einfach Zyklen
ausgelassen und wenn es zu viel ist, dann kannst du ins Stop jagen.
Falls du Freerunning Tasks verwendest siehst du die Zeit auch im
Systemmanager und du kannst sie auch mit einem Baustein (ich Glaube aus
der System.lib) abfragen.
Alles weitere an Verhalten, findet man in der Hilfe und somit kannst du
dir den Versuch sparen.
Christian_RX7
Paul G. schrieb:> die SPS mal ganz schön überfordern was die Zykluszeit betrifft.
Lass die SPS einfach ein 100kHz Signal abtasten, die Flanken erkennen
und zählen. Du wirst dann sehen, dass die ohne besondere Funktionsblöcke
recht schnell überfordert ist..
Danke schonmal für die ganzen "kreativen" Einfälle!
Das mit den Flanken Zählen ist doch ein schönes Beispiel :D
Aber die ganzen Ideen führen doch etwas an mein eingentliches Ziel
vorbei -.-
Ziel ist es durch ein Aufwendiges Programm mithilfe eines Tastendruckes
am Eingang X einen Ausgang Y rauszuschreiben.
Überlegung dabei ist, das ein längeres Programm die Zykluszeit
verlängert und der Ausgang später gesetzt wird.
Als Referenz soll eine 4 Zeilige IF-Anweisung generiert werden.
Es soll allerdings NICHT die SPS bzw. das System zum Abschturz gebracht
werden.
Was wäre die einfachste und eleganteste Methode dies zu realisieren, in
form einer geketteten IF, CASE, WHILE oder einer UND Anweisung?
Der Hintergrundgedanke ist ja, dass mit jeder weiteren Programmzeile die
Zykluszeit beeinflusst wird. Genau dieser Vorgang soll mit einen
Osziloskop aufgezeichnet und protokolliert werden!
LG Paul
Die Laufzeit eines SPS-Programms ist proportional zur Menge des
ausgeführten Programmcodes, d. h. du musst ein sehr langes Programm
schreiben.
Achtung: In der Regel gibt es eine "schnelle" Task und eine "normale"
Task. Das Handbuch gibt dazu die notwendigen Auskünfte.
Christian Kreuzer schrieb:> werden meines Wissens einfach Zyklen> ausgelassen
Exakt.
> und wenn es zu viel ist, dann kannst du ins Stop jagen.
Ja, das dauert aber ganz schön.
> Alles weitere an Verhalten, findet man in der Hilfe und somit kannst du> dir den Versuch sparen.
Richtig. Der Versuch ist total für den Popes. Offensichtlich ist dem
Ursprungsposter die Funktion einer SPS völlig unbekannt.
Paul G. schrieb:> Überlegung dabei ist, das ein längeres Programm die Zykluszeit> verlängert und der Ausgang später gesetzt wird.
Erstmal Grundlagen lernen und Dokumentation des Systems lesen. Eine SPS
macht in jedem Zyklus in etwa:
1.) Alle Eingänge lesen und ins Prozessabbild übernehmen
2.) Benutzer-Programm ausführen
3.) Aus dem Prozessabbild alle Ausgänge schreiben.
Und diese drei Dinge werden ständig wiederholt, in einem festen
Raster, dass Du definierst. Und dieses Raster heißt, oh Wunder,
Zykluszeit.
D.h. solange das Benutzer-Programm die konfigurierte Zykluszeit nicht
überschreitet, hast Du exakt eine Zykluszeit Verzögerung zwischen Input
und Output.
Typische, "klassische" Zykluszeiten sind z.B. 20ms oder 10ms. Mit einer
Beckhoff und EtherCat kannst Du aber auch ganz entspannt 1ms machen.
Alles total simpel, und darüber hinaus in der System-Dokumentation
beschrieben.
Danke mr. spsler für deine oberschlauen zurechtweisungen o.O
Scheinbar hast du den Sinn und Zweck nicht verstanden!
Wenn Das Anwender Programm schneller Ist, wird die SPS logischer weise
auch schneller Fertig!
Wenn man die SPS allerdings überfordert dan dauert die ganze Baustelle
eben länger.
Und irgendwelche hirnrissigen zahlen ins System Reindrümmern wie ein
Idiot kann jeder hirni nur das ganze mal auszumessen und mal nachzusehen
ob das auch wirklich stimmt haste wohl nicht bedenkt bzw. mal gedanken
gemacht!
Und genau das möchte ich mal nachsehen und mal aufzeichnen.
Wie dem auch sei, danke für eure Informationen und eure Vorschläge.
LG
Paul G. schrieb:> Wenn Das Anwender Programm schneller Ist, wird die SPS logischer weise> auch schneller Fertig!> Wenn man die SPS allerdings überfordert dan dauert die ganze Baustelle> eben länger.
Nein.
Auf einer SPS sind die Timeslots terministisch. Die Timeslots für
lesen der Eingänge und das schreiben der Ausgänge passiert zu genau
deffinierten Zeitpunkten.
Wie lange dabei der einzelne Task benötigt ist egal, solange die max.
Zykluszeit nicht überschritten wird.
Paul G. schrieb:> Am Eingang X, wird ein Taster angebaut und mit dem Oszi verkabelt.> In der SPS soll nachdem am Eingang X ein Signal angekommen ist, der> Ausgang Y den Wert 1 bekommen, welcher ebenfalls mit dem Oszi verbunden> ist!>> Das kann ich dann so 5-10x wiederholen und ich habe mal einen ungefähren> Mittel-Richtwert von der gesammten Zykluszeit T.Paul G. schrieb:> Was wäre die einfachste und eleganteste Methode dies zu realisieren, in> form einer geketteten IF, CASE, WHILE oder einer UND Anweisung?> Der Hintergrundgedanke ist ja, dass mit jeder weiteren Programmzeile die> Zykluszeit beeinflusst wird. Genau dieser Vorgang soll mit einen> Osziloskop aufgezeichnet und protokolliert werden!Paul G. schrieb:> Scheinbar hast du den Sinn und Zweck nicht verstanden!> Wenn Das Anwender Programm schneller Ist, wird die SPS logischer weise> auch schneller Fertig!
Dein Problem ist, Dein mentales Modell einer SPS, speziell Beckhoff, ist
komplett falsch.
Es fängt schon mit dem Taster am Eingang an, der asynchron zur
Zykluszeit arbeitet. Es geht weiter mit der Vorstellung einer "variablen
Zykluszeit". Zusätzlich scheinst Du zu glauben, wenn eine Änderung am
Eingang auftritt, das Anwendungsprogramm angeschmissen wird und sofort
nach Beendigung dessen der Ausgang aktualisiert wird.
Du bist ziemlich auf dem Holzweg und dazu absolut Beratungsresistent.
Aber mach mal. Bitte Deine Ergebnisse inkl. Versuchsaufbau hier posten.
Der Versuch wird nur bedingt funktionieren, weil die Aktualisierung der
Ein- und Ausgänge auch im konstanten Raster passiert. Wenn deine
Zykluszeit auf 1 ms steht, werden die I/Os auch nur im 1 ms Raster
aktualisiert, egal ob das Programm 0,1 ms oder 0,5 ms braucht.
Beim Aktualisieren werden die Eingänge ins neue Prozessabbild kopiert
und die Ausgangszustände aus dem Prozessabbild vom letzten Zyklus in die
Hardware geschrieben, gleichzeitig.
Das ist zumindest per default so.
Ob man das umstellen kann, dass die Ausgänge sofort nach Ende des
Programms geschrieben werden, weiß ich allerdings nicht.
Dazu müsstest du dir die Hilfe durchlesen.
Bei einem älteren BC ist das anders, der macht sein K-Bus Update wenn
die SPS fertig ist. Die Zeit ist dann wirklich abhängig von der
Zykluszeit der SPS. Bei neueren BCs wird aber wieder mit konstanter
Zykluszeit gearbeitet. Näheren dazu auch in der Hilfe.
Nur so als Idee, Du kannst einen Baustein erstellen, der eine Anzahl von
100ns-Ticks abwartet. Mit GETCPUCOUNTER kannst du beim Aufruf des
Bausteins die aktuelle Anzahl (64 Bit) auslesen, als Startwert
festhalten und in einer REPEAT Schleife GETCPUCOUNTER aufrufen bis die
gewünschte 64 Bit Differenz zum Startwert erreicht ist. So hättest du
eine zeitgesteuerte CPU-Last.
Bei mehreren PLC-Tasken musst du überlegen in welcher Task und wie oft
der Baustein aufgerufen werden soll, je nachdem, was du untersuchen
willst.
Punkt schrieb:> Auf einer SPS sind die Timeslots terministisch. Die Timeslots für lesen> der Eingänge und das schreiben der Ausgänge passiert zu genau> deffinierten Zeitpunkten.
Ich kenne das anders: es wird am Anfang ein Prozessabbild der Eingänge
eingeslesen, dann wird damit gearbeitet und anschließend das
Prozessabbild der Ausgänge ausgegeben. Nach so einem Durchlauf geht es
wieder von vorne los.
Die Dauer eines Durchlauf ist variabel, sie nennt sich Zykluszeit und
sie darf nicht zu lang werden, um eine Reaktion in "Echtzeit" zu
gewährleisten.
Ob dabei die Eingänge direkt von den EA-Klemmen oder nur von im Speicher
gepufferten Eingangssignalen kommen, ist für die Zykluszeit irreleant.
Das selbe gilt für die Ausgänge: wie die ausgangssignale letztlich auf
Klemmen kommen, das steht auf einem anderen Blatt. Diese zusätzlichen
Zeiten bringen einfach mehr Latency, dann man muss schlimmstenfalls noch
zwie komplette IO-Zyklen zusätzlich rechnen, um eine Auswirkung von
einem Eingang auf einen Ausgang zu sehen. Beim Messen von
Reaktionszeiten äussert sich das in zusätzlichem Jitter...
Lothar Miller schrieb:> Ich kenne das anders: es wird am Anfang ein Prozessabbild der Eingänge> eingeslesen, dann wird damit gearbeitet und anschließend das> Prozessabbild der Ausgänge ausgegeben. Nach so einem Durchlauf geht es> wieder von vorne los.> Die Dauer eines Durchlauf ist variabel, sie nennt sich Zykluszeit
so kenne ich das auch...für meine S7 lässt sich die Zykluszeit in Step7
ja auch direkt anzeigen, da gibt man nur eine erlaubte Höchstdauer an...
Keine Ahnung wie das bei Siemens ist, bei Beckhoff wird die Cycle-time
fest eingestellt. Und auch die Kommunikation über den Bus läuft immer
gleich, egal ob man weitere 20 Teilnehmer eingefügt hat oder nicht.
Das kann man alles schön in der System-Doku nachlesen:
http://infosys.beckhoff.com/content/1031/ethercatsystem/html/bt_ethercatsystem_title.htm?id=6857
Mit freundlichen Grüßen
Thorsten Ostermann
Paul G. schrieb:> Für eine Wissenschaftliche Arbeit welche sich hauptsächlich mit> SPS-System befasst möchte ich die Zykluszeit einer Beckhoff-SPS bzw.> eines Industrie-PC's der FA. Beckhoff messen.
Ist das jetzt ein Trollversuch? Wer nicht mal die Grundlagen einer
deterministischen Steuerung kennt will eine wissenschaftliche Arbeit
verfassen?
Das die Zykluszeit festgelegt wird wurde dir ja schon erklärt. Das die
SPS bei Überlastung auf Störung geht (wenn Sie was taugt) ist wohl auch
einem "Wissenschaftler" einsichtig.
Eine fachfremde Arbeit ... zb bei den Forstwarten, Medizinern,
Philosophen, .. kann man damit immer brillieren. Auch wenn's fuer die
Tonne ist.
Ich seh's auch so : ein Troll.
Thorsten Ostermann schrieb:> Das kann man alles schön in der System-Doku nachlesen:
Der Link taugt dafür aber nichts, denn der führt ja nur zu irgenwelchen
EtherCAT Klemmen. Und die haben an sich keine Zeit, ein EA-Zyklus wird
dort ja vom EtherCAT Master ausgelöst.
Dort findet sich dann schon mehr:
http://infosys.beckhoff.com/index.php?content=../content/1031/bc9xx0/html/bt_bc9xx0_techndataplc.htm&id=
Dort steht:
SPS-Zykluszeit ca. 0,85 ms für 1000 AWL-Befehle (ohne E/A-Zyklus)
Also gibt es eine Zykluszeit für xxx Befehle und dazu kommt die EA-Zeit.
Also alles alter Kaffee...
Die ganze Fragestellung ist schon idiotisch. Wie kann man eine SPS
ausserhalb der Spezifikationen betreiben. Aehnlich wie :
-Wie lange kann ich einen Verbrenner an der maximalen Drehzahl laufen
lassen?
-Wie lange kann ich aus einem Netzteil die maximale Leistung ziehen?
Wenn die SPS zu langsam ist nimmt man eben die naechst Groessere.
Tsss..
Hallo Lothar,
> Dort findet sich dann schon mehr:> http://infosys.beckhoff.com/index.php?content=../content/1031/bc9xx0/html/bt_bc9xx0_techndataplc.htm&id=> Dort steht:> SPS-Zykluszeit ca. 0,85 ms für 1000 AWL-Befehle (ohne E/A-Zyklus)>> Also gibt es eine Zykluszeit für xxx Befehle und dazu kommt die EA-Zeit.> Also alles alter Kaffee...
Jain. E/A ist eben ein eigener Zyklus mit festgelegtem Timing. Egal wie
lange in der PLC-Task gerechnet wird.
Mit freundlichen Grüßen
Thorsten Ostermann
Thorsten Ostermann schrieb:> Jain. E/A ist eben ein eigener Zyklus mit festgelegtem Timing. Egal wie> lange in der PLC-Task gerechnet wird.
Klar, genau das meine ich ja: wenn die SPS z.B. 15ms für einen Zyklus
braucht, dann bringt es vordergründig nichts, wenn ich den EA-Zyklus auf
1ms setze. Tatsächlich bringt es aber schon was, weil dann das Ergebnis
mit möglichst aktuellen Eingangsdaten berechnet und schnellstmöglich an
die ausgänge gegeben wird.
Am schnellsten wäre es aber immer noch, wenn nach dem SPS Durchlauf die
Ausgänge direkt auf die EA geschrieben und gleichzeitig die Eingänge
eingelesen würden...
Bei der SPS geht es aber nicht darum, was am schnellsten wäre, sondern
darum, dass das Ergebnis zeitlich vorhersagbar (deterministisch) ist.
Also nicht von der CPU-Last abhängt.
Mit freundlichen Grüßen
Thorsten Ostermann
Nun, ok habe jetzt diese Woche mal die Messungen vollbracht und habe
dabei ein Interessantes Ergebniss festgestellt:
Bei der Taskkonfiguration wurd die Zykluszeit auf 1ms runterreduziert
und dann am Eingang sowie am Ausgang das Signal abgegriffen mit dem Oszi
und die Zeit gemessen.
Nach mehreren Messungen und notierungen wurde immer eine zeit gemessen
die deutlich über den 1ms war. Im durchschnitt war es 4ms.
Bei einer Einstellung von 200ms Zykluszeit, war das Ergebnis doch
deutlciher und bin dabei auch im durchschnitt so auf die 200ms
gekommen....
LG Paul
Nein.. Doch!.. Ohh!
Warum das so ist, kannst du alles in den Handbüchern nachlesen, dort
gibt es genug technische Daten welche Verzögerungszeiten auf den E/A
Modulen zu erwarten sind.
Ein wirklich interessantes Thema wäre eher: wie aktualisiert das
Betriebssystem die E/As, welchen Einfluss hat hier das Zyklische
Programm und die Interrupts.
Aber kannst du sicherlich nicht analysieren.. vor allem weil ein Anruf
beim Hersteller die wahrscheinlich das Ergebnis vorwegnehmen wird.
Ohne wissenschaftlichen Hintergrund das ganze..
Paul G. schrieb:> Nun, ok habe jetzt diese Woche mal die Messungen vollbracht und habe> dabei ein Interessantes Ergebniss festgestellt:
[...]
> Nach mehreren Messungen und notierungen wurde immer eine zeit gemessen> die deutlich über den 1ms war. Im durchschnitt war es 4ms.
Und was ist da jetzt Interessant?
Schon mal an die Filterzeit der Eingangs-Karten gedacht? Die ist bei den
Feld-Wald-Wiesen-Karten (EL1008 etc.) 3ms typisch...