TIA SCL Laufzeitoptimierung

NBerger

Level-3
Beiträge
1.373
Reaktionspunkte
386
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo...
Steige gerade von AWL auf SCL um.
Unter AWL war es leicht, einen kurzen schnellen Code zu schreiben.
Mit SCL ist das alles anders.

Gibt es eine Doku in der steht wie man einen Laufzeitoptimierten Code hinbekommt, was man tun oder besser vermeiden sollte?
Habe bisher nichts in diese Richtung gefunden.

MfG
Norbert
 
Du hast Recht. SCL ist anders. Für so manchen Anwendungsfall sogar kürzer und schneller als AWL.

Um Deine Frage beantworten zu können, solltest Du sie etwas konkretisieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ne Doku ist mir nicht bekannt.

aber hier mal ein Beispiel

lang:
IF A>B THEN
C:=1;
ELSE
C:=0;
END_IF;

kurz:
C:=A>B;

Aber was der Compiler daraus macht und was besser lesbar ist, sind nochmal zwei andere Geschichten...

Prinzipiell versuche ich den Code immer so gut wie möglich lesbar/nachvollziehbar zu gestallten. Nur wenn es unbedingt notwendig ist (so gut wie nie) achte ich auf Laufzeitoptimierung. Meistens ist es wichtiger, dass ich/jemand den Code nach 3 Jahren noch versteht, als dass er 1ms/Zyklus schneller läuft...

Gruß.
 
Zuletzt bearbeitet:
@Ducati:
In dem Fall würde meines Wissens unterschiedliche langer Code entstehen - deine "kurzes Beispiel" sollte aber in etwa den Code ausspucken wie es auch in AWL aussehen würde.
Aber im Grundsatz richtig - man muss manchmal wissen, wie man es am Besten macht ...

Gruß
Larry
 
Der Quellcode soll ja nicht unnötig unübersichtlich werden.

Macht es z.B. Sinn bei implizierter Adressierung einen Offset vorher zu verrechnen?

#Tag1:= #Tag2(#cnt+17)
oder besser
#Tag3:= #cnt+17;
#Tag1:= #Tag2(#Tag3);

Gibts denn da keine Richtlinien um dem Compiler einen "anständigen" Code zu entlocken?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
reden wir von Classic? Bei 1500er, so wurde mir in Nürnberg gesagt, wird AWL und SCL direkt in Laufzeitcode umgesetzt, sodass SCL auf der 1500er ähnlich effizient laufen soll, wie AWL. Falls wir von Classic reden, wo SCL in AWL umgesetzt wird, da kann man sich Gedanken über das Compilat machen. Aber ich denke, das wird für die Zukunft (TIA) kein nutzbares Wissen sein.
 
Der Quellcode soll ja nicht unnötig unübersichtlich werden.

Macht es z.B. Sinn bei implizierter Adressierung einen Offset vorher zu verrechnen?

#Tag1:= #Tag2(#cnt+17)
oder besser
#Tag3:= #cnt+17;
#Tag1:= #Tag2(#Tag3);

Gibts denn da keine Richtlinien um dem Compiler einen "anständigen" Code zu entlocken?

Hmm, was genau verstehst Du unter "anständigem" Code? Mir ist prinzipiell egal, was der Compiler erzeugt, hab da auch nie reingeschaut.

Zu Deinem Beispiel, weiss zwar nicht genau, was Du machen willst, aber ich würds vermutlich mit Arrays machen...

Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mir gehts hier nicht um die Schreibweise einer bestimmten Zeile, sondern um den Umgang mit SCL generell.

Wenn man doch mit einfachen Mitteln unnötig langsamen speicherraubenden Code vermeiden kann sollte man dies doch tun oder?
Nun fange ich gerade mit SCL an und möchte mir nicht direkt was schlechtes angewöhnen, rein aus Unwissenheit.
Habe auch bei Siemens direkt nachgefragt, mal sehen was die so sagen...
 
Ohne zu wissen was Du normalerweise für Anlagen hast lehne ich mich jetzt mal aus dem Fenster. Solche Feinheiten normalerweise schon lange kein Thema mehr. Schreib den Code so, wie Du es kannst und wie Du ihn für leserlich hältst. Und in die Zukunft geblickt sprechen wir bei der 1500-er von einem Performanncegewinn um den Faktor 7. Aus meiner Sicht sind solche Überlegungen kaum noch sinnvoll.
 
Habe auch bei Siemens direkt nachgefragt, mal sehen was die so sagen...

na, da bin ich auch mal gespannt :D

Ansonsten kannst Du bei SCL nicht viel falsch machen. SCL ist kein C.
Die Hilfe von SCL ist ganz gut, wenn Du so ähnlich programmierst wie in den Beispielen, geht mal nicht viel schief.
generell musst du nur die SPS-spezifischen Sachen beachten, die Du bei AWL auch schon wissen musstest...

Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gibt es eine Doku in der steht wie man einen Laufzeitoptimierten Code hinbekommt, was man tun oder besser vermeiden sollte?

In der heutigen Zeit ist WARTUNGSFREUNDLICHER CODE viiiiiel wichtiger als "Laufzeitoptimierten Code".
Fehlersuche im "Laufzeitoptimierten Code" ist teurer als gleich eine 319 zu nehmen. Wer kaufmännisch
rechnen kann wird das einsehen.

Frank
 
Kleines Update ...

SIEMENS hat keine Doku o.ä. bezüglich Laufzeitbelastung durch SCL-Befehle...
Jedoch folgende Tipps:
- IF-THEN vermeiden wenn möglich
- Baustein-Attributen der SCL-Bausteine "Erweiterte Statusinformationen erstellen" deaktivieren
- Der Zugriff auf temporäre Variablen ist schneller

Nun ja ist ja mal ein Anfang...
 
if-then vermeiden ist ja schön und gut. Ne Anleitung, wie man es besser macht, wäre hilfreicher gewesen. Und die Benutzung von Temps beschleunigt nicht nur SCL-Code. Wird aber, denke ich, bei der 1500er keine Auswirkung mehr haben. Oder falls doch, betrachte ich die Temps trotzdem als inzwischen deprecated, weil nicht von der Visu aus erreichbar und es den Nachteil nicht mehr gibt, verlustbehaftet einen DB neu übertragen zu müssen, wenn man statt Temp Static deklariert.
 
Morgen erstmal...

Mal was grundsätzliches zu diesem Forum: Beleidigen lassen muss ich mich nicht und wer nichts fachliches zu sagen hat, sollte mal besser ruhig sein!

Dachte dies währe ein Forum indem sich Programmierer und Softwareentwickler sich austauschen können...

Persönlich habe ich mich die letzten Tage um SCL gekümmert und so einiges gelernt. Und Ihr?

Wer nichts ändert kann nichts verbessern und wer sich keine Gedanken macht lernt nichts neues.
Macht nur weiter so...
 
Zurück
Oben