TIA Bausteinschnittstelle - CallByValue/CallByReference - Zykluszeit

Zuviel Werbung?
-> Hier kostenlos registrieren
Was willst Du mit Deinem einem Beispiel eigentlich beweisen?
Und was meinst Du mit dem "MC7-Code vergleichen"? Kann Dein SCL-Compiler direkt MC7-Code erzeugen ohne AWL-Umweg oder erzeugt es Code, den man mit AWL nicht erzeugen kann?

TIA-SCL habe ich gerade nicht greifbar. Vielleicht hat ja jemand Lust die selben Vergleiche für S7-1x00 zu machen.

denke nicht das Thomas einen eigenen SCL compiler hat. Aber ja, der Simatic Manger SCL Komplize kann MC7 Code erzeugen den man nicht im AWL Editor bearbeiten kann, weil es eben dafür keine AWL Anweisung gibt. z.b. kann der Compiler einen UC Bausteinaufruf mit Parametern machen. Dieser wird dann zwar in AWL dargestellt, kann jedoch so nicht aus dem AWL Editor übersetzt werden!

Und wenn man die Parameter byval übergibt, muss man ja nicht nur den Baustein innen betrachte, sondern auch den Aufruf außen, denn dieser wird ja durch den byval Aufruf größer und langsamer!
 
Hallo Ralle, das mit der Volltextsuche ist ein gutes Workaround. Es ist natürlich etwas umständlich und die Art der Verwendung wird nicht mit angezeigt aber besser als nichts. Ich werde diesen Änderungswusch bzw. Verbesserungsvorschlag zu den Querverweisen auch an anderer Stelle bei Siemens vortragen. Wenn es zu diesem Thema von vielen Stellen Reklamationen an Siemens gibt, wird sich hoffentlich mal was bewegen.
Gruß, COCO

In V15.1 soll hinsichtlich der Referenz anzeige soweit ich weiß was verbessert worden sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und wenn man die Parameter byval übergibt, muss man ja nicht nur den Baustein innen betrachte, sondern auch den Aufruf außen, denn dieser wird ja durch den byval Aufruf größer und langsamer!
Das ist sonnenklar, doch anscheinend hat hier noch niemand fundierte Erfahrung was denn nun wirklich schneller ist bei S7-1x00:
- byVal: aufwendige langsamere Parameterversorgung beim Bausteinaufruf und dafür im Baustein 10 einfache schnellere Parameterzugriffe
oder
- byRef: einfache schnellere Parameterversorgung beim Bausteinaufruf und dafür im Baustein 10 aufwendigere langsamere Parameterzugriffe


TIA-SCL habe ich gerade nicht greifbar. Vielleicht hat ja jemand Lust die selben Vergleiche für S7-1x00 zu machen.
Ich habe es mal gemacht.
Der TIA-SCL-Compiler (V13 SP1 Upd8 ) für S7-1x00 optimiert anscheinend gar nicht die Zugriffe auf Übergabeparameter, und es scheint direkt OpCodes oder Zwischencode für das Lesen aus ByRef-Übergabeparametern zu geben (bzw. für das Addieren von Variablen aus Übergabeparametern), es kommt immer die fast gleiche Codegröße raus, egal ob byRef- oder byVal-Übergabeparameter.
Jede SCL-Addition "+ #IntVariable" erzeugt Programmcode von 10 Byte Arbeitsspeicher, egal ob der Zugriff auf eine byRef- oder byVal-Übergabe-Variable oder eine Static-Variable erfolgt, und egal ob "optimierter" oder Standard-Bausteinzugriff eingestellt ist. Wenn die Variable in Temp liegt, dann werden 9 Byte Code erzeugt (nicht immer (*)). Die Größe des erzeugten Codes ist anscheinend nicht äquivalent zur Ausführungszeit.

Hier der Vergleich der Codegrößen TIA-SCL V13 SP1 Upd8 für S7-1500 und S7-1200, FB multinstanzfähig.
Code:
                             S7-1500      |     S7-1200
                        Arbeits- Ausführg-|Arbeits- Ausführg-
Beispiel                speicher   zeit   |speicher   zeit
                          Bytes           |  Bytes

ByRef SCL optimiert        103      ?          39      ?     Übergabe 1 Struct, Summe 3 INT aus dem Struct
ByRef SCL Standard         103      ?          39      ?

ByVal SCL optimiert        104      ?          40      ?     Übergabe 1 Struct, Summe 3 INT aus dem Struct
ByVal SCL Standard         103      ?          39      ?
ByVal AWL optimiert        114      ?           -
ByVal AWL Standard         114      ?           -

ByRef 9 SCL optimiert      163      ?          97      ?     Übergabe 9 Struct, Summe je ein INT aus jedem Struct
ByRef 9 SCL Standard       163      ?          97      ?
ByVal 9 SCL optimiert      164      ?         100      ?
ByVal 9 SCL Standard       164      ?         100      ?

leerer FB SCL optimiert     82                 18
leerer FB SCL Standard      82                 18
leerer FB AWL optimiert     82                  -
leerer FB AWL Standard      87                  -

leerer FB SCL S7-300        48 / 12 Bytes MC7
leerer FB AWL S7-300        38 /  2 Bytes MC7
Leider habe ich keine S7-1500 CPU zur Verfügung, vielleicht ermittelt mal jemand die Ausführungszeiten? (die Programm-Quellen im Anhang)


(*) Bei S7-1200-Bausteinen (aber nicht bei S7-1500) mit "optimiertem" Bausteinzugriff ignoriert der SCL-Compiler anscheinend "sinnlose" Anweisungen im Zusammenhang mit Temp-Variablen, z.B. Zuweisungen an Temp-Variablen und dann nie wieder lesen benötigen 0 Byte Code, addieren von nicht-initialisierten Temp-Variablen benötigen 0 Byte Code (keine Warnungen)

Harald
 

Anhänge

Zurück
Oben