Performance-fresser finden

mailmir

Level-1
Beiträge
75
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe bei einer Anlagensteuerung mit einem Beckhoff CX9020 und hier offensichtlich ein Performance-Problem, obwohl mir nicht bewusst ist das ich aufwändige Schleifen o.ä. integriert habe. Wie kann ich die Performance-Fresser finden? DANKE für einen kleinen Tip.

Gruß Norbert
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hoi,

ich beobachte das im SystemManager. Hier ist die Auslastung meiner SPS sehr hoch, teilweise über 90%
Was ich schon herausgefunden habe ist das ein Concat recht viel Performance zu brauchen scheint.

Ich erzeuge automatisch Alarm-EMails und hierfür setze ich mir die Mail mit mehreren Concat zusammen (Aus Anlage-Nummer, Zeitstempel usw.)
 
Hallo Norbert,

wenn du einige Hundert Mal die Funktion CONCAT verwendest, bringst du damit einen CX9020 sehr wahrscheinlich nie ins Schwitzen. ;)

Wenn du allerdings 10000 Meldungen hast, die mit CONCAT auch zusammengesetzt werden, wenn sie überhaupt nicht anstehen und zusätzlich eine Zykluszeit <1ms hast, dann wird es irgendwann eng. :rolleyes:

Welche Zykluszeit ist denn eingestellt?
Wird der Zeitstempel für jede Meldung neu gebildet, oder nur 1x im Zyklus global für das ganze Programm?
Laufen mehrere Task auf der Steuerung?
Hast du Sortier-Algorithmen im Programm?

System Funktionen wie CheckBounds können auch für eine höhere CPU-Auslastung sorgen. Das ist bei meinen Programmen aber noch nie auffällig stark (>10%) ins Gewicht gefallen.

Gruß
Chräshe
 
Also um eine CX9020 in die Knie zu zwingen gehört schon einiges dazu.

Eine Idee wäre noch mit GetSystemTime einen Zeitstempel ganz am Programmanfang zu nehmen und dann nach dem Aufruf der diversen FBs weitere.
Aus der Differenz müsste man ja dann erkennen können wo im Programm die Hänger sind.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hoi Chräshe,

DANKE für deine Info. Also zehntausend Meldungen sind es sicher nicht, aber ich habe gemerkt das die Auslastung um ca 6ms runter geht wenn ich die Zusammenstellung der Mail überspringe.

Als Zycluszeit habe ich 40ms, es laufen 2 Task nebeneinander (8ms / 40ms)

Sortierungen usw. habe ich nichts integriert und den Zeitstempel bilde ich ein Mal pro Zyclus und schreibe den auf eine globale Variable.

Für die Mails nutze ich ein globales Array (3-dimensional für Anlage, Alarmpriorität, Meldung - of String(350))

Die Systemfunktionen habe ich auch integriert, sollten aber nicht weiter ins Gewicht fallen, denk ich mal.

der normale Task braucht knapp 19ms, der schnelle 0.47ms
 
Hoi Chräshe,

DANKE für deine Info. Also zehntausend Meldungen sind es sicher nicht, aber ich habe gemerkt das die Auslastung um ca 6ms runter geht wenn ich die Zusammenstellung der Mail überspringe.

Als Zykluszeit habe ich 40ms, es laufen 2 Task nebeneinander (8ms / 40ms)

Sortierungen usw. habe ich nichts integriert und den Zeitstempel bilde ich ein Mal pro Zyclus und schreibe den auf eine globale Variable.

Für die Mails nutze ich ein globales Array (3-dimensional für Anlage, Alarmpriorität, Meldung - of String(350))

Die Systemfunktionen habe ich auch integriert, sollten aber nicht weiter ins Gewicht fallen, denk ich mal.

der normale Task braucht knapp 19ms, der schnelle 0.47ms

@MasterOhh
da der Zeitstempel nicht auf die ms genau sein muss reicht mir das einmal pro Zyklus. :)
 
Ich meine um herauszufinden, wo im Programm die meiste Rechenzeit verbraten wird, kannst du nach den FB Aufrufen weitere Zeitstempel erzeugen. Die Differenz zum Start-Stempel zeigt dir dann, wie lange die Abarbeitung der einzelnen Programmteile dauert. Somit kannst du evtl. deine Resourcenfresser eingrenzen.
 
Hallo Norbert,

Deine Alarm-E-Mails hatte ich als Text-Meldung im HMI interpretiert. Wenn ich es richtig verstehe, verschickst du aber tatsächlich E-Mails an andere Stationen!?
Das findet doch hoffentlich nicht zyklisch statt, weil z.B. das bBusy/bError eines Bausteins nicht richtig ausgewertet wird?

Welcher SMTP Server kommt zum Einsatz?
Wie groß ist eine E-Mail?
Wie oft wird eine E-Mail verschickt?

Für die Mails nutze ich ein globales Array (3-dimensional für Anlage, Alarmpriorität, Meldung - of String(350))

Das mit dem dreidimensionalen Array sieht komisch aus.
Wie ist das genau deklariert?
Du hast doch hoffentlich keinen String mit 350 Zeichen deklariert?
Das ist zwar möglich, jedoch funktionieren die String-Funktionen wie CONCAT dann nicht mehr. Diese sind nur für bis zu 255 Zeichen vorgesehen!

Gruß
Chräshe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hoi Chräshe,

SORRY für die späte Antwort, war "etwas" außer Gefecht gesetzt . . . .
:rolleyes:
ja, danke der Nachfrage. Funktioniert schon besser. Die Auslastung liegt nun, je nach OPC_UA-Kommunikation zwischen 65 und 73%
Allerdings gestaltet sich die Suche nach den Performance-Fressern immer noch sehr aufwändig. Ich glaube, ich muss mir da mal was
g'scheites überlegen, wenn ich wieder richtig fit bin und auch noch ein wenig Zeit hab, aber es kommt ja bald Weihnachten :)

Gruß Norbert
 
Zurück
Oben