CPU Auslasten mit ST

MPH

Level-1
Beiträge
75
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute,

ich würde gern mit einem Programm in ST die CPU einer Soft SPS auslasten.
Ich habe schon ein paarmal was von Ackermannfunktion gelesen. Leider sind nur Beispiele in der Sprache C zu finden:


int Tackform::ack(int n, int m){ if (n == 0) { return (m + 1); } else if (m == 0) { return ack((n - 1), 1); } else { return ack(n - 1, (ack(n, (m - 1)))); }}
leider habe ich keinen Schimmer wie ich diese Funktion in ST ummodeln kann, da ich noch nicht soviel mit ST gearbeitet habe.
Ist das eine gute Möglichkeit eine Auslastung zu erreichen oder gibt es da bessere Wege?

Hat einer vieleicht eine Idee von euch und könnte mir helfen

Vielen Dank schonmal an alle die sich für mich die Mühe machen :p

Gruß
 
Int Tackform::ack(int n, int m)
{
if (n==0)
{
return (m+1);
}
else if (m==0)
{
return ack((n-1),1);
}
else
{
return ack(n-1,(ack(n,(m-1))));
}

Der Code war nicht gut zu lesen hoffe es ist jetzt besser.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Achtung: Wie groß ist bei Deiner Soft-SPS die mögliche Baustein-Schachtelungstiefe? Die ist üblicherweise seeeehr gering.
Rekursive Programme müssen unbedingt in der Aufruftiefe begrenzt werden oder zu einem iterativen Algorithmus umgeschrieben werden.

Was verstehst Du unter CPU "auslasten"? Tut's nicht auch eine Schleife mit 'zig Durchläufen?

Harald
 
Achtung: Wie groß ist bei Deiner Soft-SPS die mögliche Baustein-Schachtelungstiefe? Die ist üblicherweise seeeehr gering.
Rekursive Programme müssen unbedingt in der Aufruftiefe begrenzt werden oder zu einem iterativen Algorithmus umgeschrieben werden.

Was verstehst Du unter CPU "auslasten"? Tut's nicht auch eine Schleife mit 'zig Durchläufen?

Harald

Hi Harald

vielen Dank für deine Antwort. Ich muss leider sagen, dass ich nicht genau verstehe was du meinst :oops:
Wenn ich die Zahlen der Funktion für m und n selbst eingebe kann ich doch die Aufruftiefe damit begrenzen oder nicht?!

Wie bekomme ich denn raus wie groß die Baustein Schachtelungstiefe ist???

Von einem iterativen Algorithmus höre ich zum Ersten mal. Was genau ist das?

Also mit CPU Auslastung meine ich eigentlich genau das. Ich möchte die Soft SPS an ihre Grenzen bringen, dass sie voll ausgelastet ist. Um zu sehen wie oft das Programm noch abgearbeitet wird bis die Soft SPS den Geist aufgibt oder überlastet ist.
Ich hatte in diesem Zusammenhang halt viel von der Ackermannfunktion gelesen.

Muss mal probieren mit der Schleife. Die Schleife muss halt dann schon ellen groß sein.

Danke

Gruß
 
Ich möchte die Soft SPS an ihre Grenzen bringen, dass sie voll ausgelastet ist. Um zu sehen wie oft das Programm noch abgearbeitet wird bis die Soft SPS den Geist aufgibt oder überlastet ist.

Grundsätzlich sollte die SoftSPS ähnlich funktionieren wie eine reale S7 oder auch PLC-Sim:

um so größer Dein Programm, umso größer wird die Zykluszeit. Irgendwann schlägt dann die Zykluszeitüberwachung zu. Den Geist aufgeben sollte sie eigentlich nie und "überlastet" naja was versteht man darunter? Zykluszeit 6000ms ?

Ne SPS funktioniert n bissl anders wie nen normales PC-Programm...

Gruß.

PS: die CPU-Belastung (des Rechners) sollte sich eigentlich nicht großartig ändern, nur die Zykluszeit des (Soft)-SPS-Programms (OB1)...

PPS: was den Rechner belasten könnte, wären evtl. Dinge die zusätzlich ausserhalb der SPS-Runtime ablaufen, z.B. Kommunikation über Ethernet, Visu, Windows-Dienste, sonstige Windows-Programme...

PPPS:
CPU-Bearbeitungszeiten

für Bitoperationen, min.
0,004 µs; typ.
für Festpunktarithmetik, min.
0,003 µs; typ.
für Gleitpunktarithmetik, min.
0,004 µs; typ.
Referenzplattform
Pentium IV, 2,4 GHz

https://eb.automation.siemens.com/g...gTree&regionUrl=/de#topAnch&activetab=product&

 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Grundsätzlich sollte die SoftSPS ähnlich funktionieren wie eine reale S7 oder auch PLC-Sim:

um so größer Dein Programm, umso größer wird die Zykluszeit. Irgendwann schlägt dann die Zykluszeitüberwachung zu. Den Geist aufgeben sollte sie eigentlich nie und "überlastet" naja was versteht man darunter? Zykluszeit 6000ms ?

Ne SPS funktioniert n bissl anders wie nen normales PC-Programm...

Gruß.

PS: die CPU-Belastung (des Rechners) sollte sich eigentlich nicht großartig ändern, nur die Zykluszeit des (Soft)-SPS-Programms (OB1)...

PPS: was den Rechner belasten könnte, wären evtl. Dinge die zusätzlich ausserhalb der SPS-Runtime ablaufen, z.B. Kommunikation über Ethernet, Visu, Windows-Dienste, sonstige Windows-Programme...

PPPS:
CPU-Bearbeitungszeiten
für Bitoperationen, min.0,004 µs; typ.
für Festpunktarithmetik, min.0,003 µs; typ.
für Gleitpunktarithmetik, min.0,004 µs; typ.
ReferenzplattformPentium IV, 2,4 GHz
https://eb.automation.siemens.com/g...gTree&regionUrl=/de#topAnch&activetab=product&

Hi ducati

vielen Dank für diene Antwort.

Ja du hast vollkommen recht.
Ist halt leider meine wachsweiche Aufgabenstellung.
Die sprechen hier halt ständig von CPu Auslasten und Benchmark. Es ist aber halt so, dass man einen klassischen Benchmark- Überlasttest nicht mit einer SPS machen kann.
Das mit der Zykluszeit habe ich schon hinbekommen. Aber wie du ja auch gesagt hast macht dies der CPU nichts aus....!!!!!
Und wenn der Prozessor noch mehrere Kerne hat geht eh nichts mit überlasten, weil ein Kern komplett allein nur für die Soft SPS zur verfügung gestellt wird und der andere z.B. für die Windowsanwendungen.

Wenn ich aber jetzt z.B. anhand der Ruhezeiteinstellung, den WIndowsanwendungen keine Zeit lasse ist die CPu sehr schnell ausgelastet.

Gibt es die Möglichkeit durch einen SCL Code oder einer Anweisung die Mindestruhezeit im Anwenderprogramm auf 0 zu setzten???

Ne SPS funktioniert n bissl anders wie nen normales PC-Programm...

Arbeitet eine SPS überhaupt nicht mit einer Art STack??
Es muss doch auch Möglich sein den Speicher vollzuballern bis zum Anschlag oder nicht???????


Ist halt einfach n Scheiss Thema.

Sorry, dass ich euch damit nerve ;-)

Vielen Dank schonmal

Gruß
 
Naja, was heisst schiess Thema,
die Grenzen einer Soft-SPS zu erforschen ist doch schon interessant.

zwecks Speicher: Keine Ahnung wie weit dieser zu erweitern geht, aber an die PC Grenzen kommst Du bestimmt nicht. Zur Ruhezeiteinstellung, in SCL geht da meiner Ansich nach nix, aber das ist doch mal ein Punkt zum rumspielen...

Speicher



Arbeitsspeicher



  • integriert (für Programm)


4 Mbyte; einstellbar; abhängig von Non Paged Memory Pool

  • integriert (für Daten)


4 Mbyte; einstellbar; abhängig von Non Paged Memory Pool
Ladespeicher



  • integriert RAM, max.


8 Mbyte; einstellbar; abhängig von Non Paged Memory Pool
 
Naja, was heisst schiess Thema,
die Grenzen einer Soft-SPS zu erforschen ist doch schon interessant.

zwecks Speicher: Keine Ahnung wie weit dieser zu erweitern geht, aber an die PC Grenzen kommst Du bestimmt nicht. Zur Ruhezeiteinstellung, in SCL geht da meiner Ansich nach nix, aber das


Danke für deine Hilfe.
Ja interessant ist es schon. Aber sehr zeitaufwendig und diese läuft mir leider etwas davon....:icon_cry:

Ich würd gern mal versuchen den Arbeitspeicher vollzupacken.

Was sind den besonders Reccourcenfressende Anwendungen. Hat da jemand erfahrung??????

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würd gern mal versuchen den Arbeitspeicher vollzupacken.

Wenn Dein SPS-Programm mehr Arbeitsspeicher benötigt, als die Soft-SPS besitzt kommt beim Laden ne Fehlermeldung, mehr passiert da nicht. Voll krigst Du den mit vielen großen FBs und DBs. 4MB ist da schon ne Menge.

Gruß.
 
Wenn Dein SPS-Programm mehr Arbeitsspeicher benötigt, als die Soft-SPS besitzt kommt beim Laden ne Fehlermeldung, mehr passiert da nicht. Voll krigst Du den mit vielen großen FBs und DBs. 4MB ist da schon ne Menge.

Gruß.

Hi ducati

weiterhin vielen Dank für deine Hilfe.

Ja hast recht. Dann komm ich auf der Schiene auch nicht weiter.

Was wären denn noch gute Anwendungen, die sich für einen Benchmarkvergleich eignen würden. Ich tue mir da echt schwer.
Bis jetzt kann ich die Ausführungszeiten von verschiedenen Operationen messen um so einen Vergleich zu bekommen. Es muss doch aber
noch andere Sachen geben, die man für einen Performancetest einer Soft SPS testen kann oder?

Hast du oder Ihr vieleicht ein paar Ideen????

Danke schonmal

Gruß
 
Was wollt Ihr denn womit und warum vergleichen?

technische Daten stehn im Handbuch, zur Soft Sps und auch zur "normalen" SPS.

Was anderes als Ausführungszeiten fällt mir momentan auch nicht ein, das bestimmt ja quasi die "Geschwindigkeit" (Zykluszeit) deines Programms. Speicher begrenzt nur die max. Größe Deines Programms, hat als im eigentlichen Sinne nix mit Performance zu tun, sondern nur ob meine gewünschte Aufgabe mit dieser SPS realisierbar ist, oder ich eine größere (teurere) kaufen muss.

Ansonsten kann man sich noch sonstige Vergleichskriterien überlegen, vom Umgebungstemperaturbereich über technische Features und Anwenderfreundlichkeit bis hin zum Preis...

Gruß.
 


Hi ducati

also nochmal vielen vielen Dank für deine Hilfe.
Werde mir das mal reinziehen.

Das mit den Vergleichen ist halt meine Aufgabenstellung. Liegt halt an mir rauszufinden, was realistische Vergleichskriterien sind. Aber wie gesagt tue ich mir da schwer, weils halt auch nicht leicht ist!! ;-)

Dann muss ich halt mal weiter versuchen.

Ansonsten wie gesagt vielen Dank. Hast mir sehr geholfen.

Falls ich dann doch weiterhin verzweifeln sollte meld ich mich wieder :-D

Gruß
 
Bei einer SPS bedeutet Leistung doch, dass ich innerhalb eines isochronen Zyklus (sonst ist es keine harte Echtzeit) möglichst viele Aufgaben bearbeiten kann respektive für eine gegebene Menge von Aufgaben eine isochrone Bearbeitung weiterhin gegeben ist.

Ich würde sagen, dass folgendes Sinn macht: Du suchst dir eine Aufgabenstellung, die dir als Benchmark dient. Sagen wir mal irgendwas repräsentatives. Das setzt du in einer möglichst gleichen Art und Weise auf allen zu testenden Plattformen um. Andernfalls ist das ja wiederum nicht vergleichbar. Und dann führst du es aus und schaust, wie lange es dauert und welchen Jitter du dabei hast.

Du könntest zum Beispiel in 3 Schleifen jeweils 1000 Bitoperationen, 1000 Integer-Operationen und 1000 Gleitpunktoperationen durchführen. Danach noch ein paar Speicherbereiche umkopieren und noch andere Späße machen.
Das setzt du dann GLEICH für alle Plattformen um. Vergleichst du nur S7-Steuerungen ist das problemlos. Kannste theoretisch sogar SCL nehmen.

Willst du aber unterschiedliche Hersteller vergleichen macht es Sinn, das zu nehmen, was bei allen gleich arbeitet. Da wirst du dann bei AWL landen. Vergleichbar ist auch das aber nur bedingt, da nicht unbedingt jede Steuerung mit kompiliertem Code arbeitet. Zudem darfst du keine Herstellerspezifischen Funktionen nutzen.

Wie gesagt, für Vergleichbarkeit muss die Aufgabe gleich sein.

Und dann kannste Messungen anstellen. Bearbeitungszeit, Jitter, etc. Solltest übrigens auf den Einsatz echter I/O's verzichten....immerhin hast du dann noch Einflüsse durch verschiedene Feldbusse, verschiedene Aktualisierungszeiten und Eingangsfilter bei der Peripherie, Signallaufzeiten, etc.

Bei Step7 und OB1 heißt das: Wie groß ist meine Zykluszeit? Wie groß ist deren Schwankung? Was sind meine Grenzwerte für diese Zahlen? Wirklich isochron im Sinne von "quasi nicht vorhandener Jitter" ist der OB1 nämlich nicht ;-)
Bei Steuerungen, die grundsätzlich mit fester Zykluszeit arbeiten ist die Frage: Wie weit kann ich mit der Vorgabe der Task-Aktualisierungszeit runter gehen? Wie weit nutze ich die dann zur Verfügung stehende Prozessorzeit aus? Welchen Jitter habe ich in der Aufrufzeit?

Du kannst natürlich auch "Leistung" für deinen Anwendungsfall ander definieren. Zum Beispiel "Wie viele POUs kann ich Aufrufen" oder "Wie groß ist die max. Schachtelungstiefe" oder was auch immer. Hängt in erster Linie eben von der Fragestellung ab.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich vermute mal volgendes:

Studienarbeit an der Uni mit folgendem Thema: Wir haben hier eine Soft-SPS von Siemens, mach damit mal nen Benchmarktest. :roll:

Ein Vergleich macht aber nur zwischen mindestens 2 Systemen Sinn :oops:

Und auch das Aufstellen von Kriterien macht nur Sinn, wenn man ungefähr weiss, was man damit machen will. Also Vergleich Soft-SPS gegen reale SPS oder Vergleich Siemens gegen Schneider oder oder oder...

Und ausserdem gehören in einen guten Vergleich auch andere nicht technische Kriterien, wie Preis, Handhabbarkeit, Langlebigkeit, industrietauglichkeit usw.

Sonst vergleich ich da schnell Äpfel (Mathworks xPC Target) mit Birnen (Siemens Win AC RTX), und erhalte als Antwort: Siemens ist ja soooo viel langsamer. Obwohl beide System für komplett unterschiedliche Anwendungsfälle entwickelt wurden.

Gruß.
 
Zuletzt bearbeitet:
Willst du aber unterschiedliche Hersteller vergleichen macht es Sinn, das zu nehmen, was bei allen gleich arbeitet. Da wirst du dann bei AWL landen. Vergleichbar ist auch das aber nur bedingt, da nicht unbedingt jede Steuerung mit kompiliertem Code arbeitet. Zudem darfst du keine Herstellerspezifischen Funktionen nutzen.

Hmm, wenn mann nur z.B die CPU-Leistung vergleichen will...

Wenn aber ein Hersteller bestimmte Systemfunktionen anbietet, welche die Abarbeitung bestimmter Aufgaben beschleunigt, dann wäre es zumindest eine Überlegung wert, diese in den Vergleich einzubeziehen...

Ein Vergleich macht meiner Meinung nach nur bei einer konkreten Aufgabe Sinn: z.B. Ich möchte eine bestimmte Anlagengröße steuern, von Siemens benötige ich dafür SPS S7-xxx. Kann ich auch von Schneider SPS yyy nehmen? Bei gleicher Leistungsfähigkeit aber geringerem Preis? oder sowas...

Gruß.
 
Hmm, wenn mann nur z.B die CPU-Leistung vergleichen will...
Wenn aber ein Hersteller bestimmte Systemfunktionen anbietet, welche die Abarbeitung bestimmter Aufgaben beschleunigt, dann wäre es zumindest eine Überlegung wert, diese in den Vergleich einzubeziehen...

Ein Vergleich macht meiner Meinung nach nur bei einer konkreten Aufgabe Sinn: z.B. Ich möchte eine bestimmte Anlagengröße steuern, von Siemens benötige ich dafür SPS S7-xxx. Kann ich auch von Schneider SPS yyy nehmen? Bei gleicher Leistungsfähigkeit aber geringerem Preis? oder sowas...
Gruß.

Das kommt eben darauf an, welche Messlatte man anlegt. Ich würde z.b. immer eine IEC-konforme programmierung zu Grunde legen, damit der Vergleich einer Leistungsfähigkeit wirklich tragbar ist. Eben, um nicht Äpfel mit Birnen zu vergleichen.

Dennoch ist eine bereits getätigte Aussage korrekt: Erstmal sollte definiert werden WAS man Vergleichen will und WELCHE Kriterien hier über "besser" oder "schlechter" entscheiden sollen.

Maximal mögliche TCP/IP-Verbindungen wären ja auch ne Größe, die man vergleichen kann ;-)
 
Zuletzt bearbeitet:
Bei einer SPS bedeutet Leistung doch, dass ich innerhalb eines isochronen Zyklus (sonst ist es keine harte Echtzeit) möglichst viele Aufgaben bearbeiten kann respektive für eine gegebene Menge von Aufgaben eine isochrone Bearbeitung weiterhin gegeben ist.

Ich würde sagen, dass folgendes Sinn macht: Du suchst dir eine Aufgabenstellung, die dir als Benchmark dient. Sagen wir mal irgendwas repräsentatives. Das setzt du in einer möglichst gleichen Art und Weise auf allen zu testenden Plattformen um. Andernfalls ist das ja wiederum nicht vergleichbar. Und dann führst du es aus und schaust, wie lange es dauert und welchen Jitter du dabei hast.

Du könntest zum Beispiel in 3 Schleifen jeweils 1000 Bitoperationen, 1000 Integer-Operationen und 1000 Gleitpunktoperationen durchführen. Danach noch ein paar Speicherbereiche umkopieren und noch andere Späße machen.
Das setzt du dann GLEICH für alle Plattformen um. Vergleichst du nur S7-Steuerungen ist das problemlos. Kannste theoretisch sogar SCL nehmen.

Willst du aber unterschiedliche Hersteller vergleichen macht es Sinn, das zu nehmen, was bei allen gleich arbeitet. Da wirst du dann bei AWL landen. Vergleichbar ist auch das aber nur bedingt, da nicht unbedingt jede Steuerung mit kompiliertem Code arbeitet. Zudem darfst du keine Herstellerspezifischen Funktionen nutzen.

Wie gesagt, für Vergleichbarkeit muss die Aufgabe gleich sein.

Und dann kannste Messungen anstellen. Bearbeitungszeit, Jitter, etc. Solltest übrigens auf den Einsatz echter I/O's verzichten....immerhin hast du dann noch Einflüsse durch verschiedene Feldbusse, verschiedene Aktualisierungszeiten und Eingangsfilter bei der Peripherie, Signallaufzeiten, etc.

Bei Step7 und OB1 heißt das: Wie groß ist meine Zykluszeit? Wie groß ist deren Schwankung? Was sind meine Grenzwerte für diese Zahlen? Wirklich isochron im Sinne von "quasi nicht vorhandener Jitter" ist der OB1 nämlich nicht ;-)
Bei Steuerungen, die grundsätzlich mit fester Zykluszeit arbeiten ist die Frage: Wie weit kann ich mit der Vorgabe der Task-Aktualisierungszeit runter gehen? Wie weit nutze ich die dann zur Verfügung stehende Prozessorzeit aus? Welchen Jitter habe ich in der Aufrufzeit?

Du kannst natürlich auch "Leistung" für deinen Anwendungsfall ander definieren. Zum Beispiel "Wie viele POUs kann ich Aufrufen" oder "Wie groß ist die max. Schachtelungstiefe" oder was auch immer. Hängt in erster Linie eben von der Fragestellung ab.

Hi Majestic,

vielen Dank für deine ausführliche Antwort.
Also ich habe ja bereits schon bischen was hinbekommen und mir auch im vorhinein gedanken gemacht.(nicht das ihr denkt ich sitze nur rum und warte bis ihr mir helft) ;-)
Ich komm nur einfach nicht weiter.......

Die Aufgaben, die ich dem System abverlange sind natürlich gleich sonst wäre ja, wie du auch gesagt hattest, ein Vergleich garnicht möglich.

In der Tat handelt es sich um eine Arbeit im Studium und die zu vergleichenden Komponenten sind SOFT- SPSen von verschiedenen Herstellern.

Die Aufgabe habe ich allerdings trotzdem in SCL geschrieben nicht in AWL, zum Einen weil es Vorgabe ist und zum Anderen besteht doch kein morz Unterschied zwischen ST und SCL?!
Siemens nennt es doch nur SCL. Klar gibt es Unterschiede und eigene Bausteine und Befehle in den verschiedenen Programmierumgebungen, aber wenn ich mich an IEC Bausteine halte funktionieren sie auch in allen Systemen.
In meinem bisherigen Programm messe ich die Ausführungszeiten für verschiedene Anwendungen, wie du auch erwähnt hast, messe ich hier 100000 Rechnungen, Typenumwandlungen usw.
Das war mir bis jetzt nur zu wenig und der Druck den ich habe , dass es für meine Arbeit nicht reicht, zerfrisst mich halt täglich. Deshalb habe ich noch nach anderen Ideen gefragt, weil ich mich vor lauter lesen teilweise in einem Fass ohne Boden bewege. (Gefühlt zumindest).

Was genau meinst du mit Speicherbereiche umkopieren?
Einfach einen Wert irgendwo anders hin oder bzw. reinkopieren???

Mit dem Jitter bin ich auch noch nicht ganz grün geworden. Wo genau tritt er den überall auf???
Meinst du damit nur die Schwankung zwischen den Zykluszeiten oder was meinst du genau?
Ich habe bisher nur was von Jitter gelesen bei der Übertragung zwischen SPS und dezentraler Peripherie!!!

Wie gesagt nochmal vielen vielen Dank an dich für die riesen Mühe.
Natürlich auch weiterhin an ducati ;-)

Gruß
 
Würde ich so nicht sagen. Es ist schon eine sinnvolle Frage, wie weit die Leistungsfähigkeit eines PC-basierten Systems über der einer Hardware-SPS liegt, insbesondere, wenn man die Preise mal begutachtet. Und zwar auch unter Berücksichtigung der zusätzlichen Vorteile und Möglichkeiten...jener, die über die pure Rechenleistung noch hinaus gehen.

Allerdings kann ich dem TE jetzt schon sagen, dass er mit der WinAC nicht sonderlich viel Spaß haben wird. Auf dem Soft-SPS-Markt gibt es deutlich bessere Alternativen. Gehört aber hier nicht rein ;-)
 
Zurück
Oben