# Vergleich AWl <--> SCL



## nobug (11 März 2008)

Hallo!

Der SCL-Compiler übersetzt ja das Programm nach AWL. Mich würde dabei interessieren, wie "effizient" der Compiler dabei im Vergleich zum "optimalen" AWL-Programm arbeitet.

Besonders wichtig wäre dabei ein Vergleich im Bezug auf Speicherbedarf und Ausführungsgeschwindigkeit.

Das ist natürlich auch vom Einzelfall abhängig. Trotzdem sollten allgemeine Aussagen (mit Zahlenwerten) möglich sein.


Vielen Dank für die Antworten!


----------



## Ralle (11 März 2008)

Zahlen wird dir keiner nennen können, der einfachste Weg ist, ein SCL-Programm zu schreiben, dieses zu übersetzen, und dann den FC umzukopieren. Danach kann man sich den Code in "AWL" ansehen, wobei der SCL-Compiler auch ein paar Sonderbefehle kennt. Die Sachen die ich mir bisher angesehen habe, ware nicht so schlecht, wobei man per Hand in AWL fast immer etwas effektiver programmieren kann. Allerdings liegt die Betonung auf "ETWAS"!


----------



## zotos (11 März 2008)

Der Sinn dieser Frage leuchtet mir nicht ein.

Ein Hochsprachen Compiler liefert im vergleich zum "optimalen" Assembler Code immer etwas, was mehr Resourcen braucht. Das ist mit dem SCL Compiler der AWL Produziert auch nicht anders. 

Die Erkenntnis ist jetzt nichts neues und wenn es Relevant wäre würde man auch im PC Bereich weiterhin Assembler und kein C++/Delphi/VB und Co nutzen.

Der Performance Vorteil von Assembler wäre ja bei Großen Projekten am größten. Komisch nur das alle Großen Projekte immer Komfortablere Hochsprachen verlangen.

Mir ist es wichtiger das ich einen Ablauf an der Maschine möglicht leicht beschreiben kann und nicht das irgendeine krüppel CPU das noch mit ach und krach abarbeiten kann.


----------



## kiestumpe (11 März 2008)

Eine interessante Diskussion findest du hierzu in:

http://www.automation.siemens.com/WW/forum/guests/PostShow.aspx?language=de&PostID=63997


Unter anderem steht hier:
-------------------------------------------------------------
Und dann das Märchen von der Laufzeit:
Man kann SCL natürlich so programmieren, dass es unendlich Laufzeit schluckt. Wenn man zum Beispiel Elemente einer UDT in einem Array von diesen UDT in jeder Zeile immer wieder neu über einen variablen Index adressiert, dann braucht das Laufzeit ohne Ende. Wenn man aber die UDT am Anfang variabel indiziert in eine var_temp kopiert, mit dieser arbeitet und sie am Schluss wieder zurückkopiert, ist das Programm fast weg (verstanden? ;-)

Überhaupt hat die Architektur der Software einen wesentlich größeren Einfluss auf die Laufzeit wie die Programmiersprache. Bei meinem letzten Projekt hatte ich einen 5 ms Takt zu erfüllen. Das klingt jetzt nicht nach schnell, aber die Rechenleistung, die dahinter steckte, war die einer C7-635.

---------------------------------------------------------------------

Wenn dir das nicht genügt, kannst du ja mal ein paar Konstrukte If/then, 
Schleifen, in beiden Sprachen umsetzen.
Wenn du's dann 1000mal pro Zyklus auffrufst, kannst du den Unterschied womöglich sogar messen.
Beachte aber dabei auch die Compilereinsellungen von SCL (Debug-Info etc)

Bericht uns dann, was du herausgefunden hast.


----------



## Ralle (11 März 2008)

kiestumpe schrieb:


> Eine interessante Diskussion findest du hierzu in:
> 
> http://www.automation.siemens.com/WW/forum/guests/PostShow.aspx?language=de&PostID=63997
> 
> ...



Tja, so ist das, immer die gleiche Diskussion und alle sind die Helden !
Aber wie die Siemens-Beitrag auch zeigt, man kann auch mit SCL so richtig schön Scheiße programmieren, deshalb schaden zumindest AWL-Kenntnisse nicht, um zu wissen, wie man SCL dann optimal einsetzen kann, bzw. was man besser nicht machen sollte.


----------



## Larry Laffer (11 März 2008)

Ralle schrieb:


> zu wissen, wie man SCL dann optimal einsetzen kann, bzw. was man besser nicht machen sollte.


 
Ich glaube, das dieser Passus der springende Punkt bei der Geschichte überhaupt ist.
Es gibt Aufgaben, die sind mit SCL einfach schöner (eleganter) und vor allem übersichtlicher zu machen. Bei anderen Aufgaben hat man keinen wirklichen Vorteil bzw, Code-technisch (und damit auch Zykluszeit) einen Nachteil.

Gruß
LL


----------



## hugo (11 März 2008)

nun ich kann hier nicht für siemens sprechen kenne ich nicht, aber unter codesys ist es definitiv anders:

st (so heist dort scl) wird nicht in awl übersetzt, sondern in einem zwischencode, in den auch awl übersetzt wird.
beide awl und st haben den gleichen zwischencode.

aus diesem grund sind komplexere structuren wie z.b. eine for schleife in st schneller als in awl, den um z.b. eine variable zu incrementieren muss sie in den accu usw. usw.
der compiler übersetzt den awl und den st code und ist bei komplexeren strukturen sogar schneller als in awl wo es diese strukturen nicht gibt
ein trugschluß ist zu glauben das awl maschinencode (assembler) wäre das ist weit gefehlt und wird genauso übersetzt.

codesys bietet einen button der st in awl übersetzt und ich muss feststellen das ich es kaum effizienter schaffen würde.

habe ein paar codestücke von st in awl übersetzt und dann per hand optimiert, in den meisten fällen lief  der st code ein bisschen schneller als der von hand optimierte awl code.

wie gesagt das ganze gilt aber für codesys und ich kann nichts zu siemens sagen


----------

