Step 7 Array mehrmals als Parameter übergeben

xj900mb

Level-2
Beiträge
180
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
moin moin

Ich habe einen FB_1 mit einem Array im Instanz-DB unter stat deklariert

in diesem FB_1 wird ein FB_2 aufgerufen (als Multiinstanz) und der hat wieder dieses Array als IN_Out_Parameter <- diese Übergabe geht

in dem FB_2 wird ein FC aufgerufen den ich in SCL programmiert habe. in der SCL-Quelle ist das Array auch als IN_Out_Parameter deklariert <- diese Übergabe geht nicht

kann mir jemand sagen warum das nicht geht?
 
Zuletzt bearbeitet:
Weil Siemens festgelegt hat, daß nicht-elementare Datentypen nicht an Bausteine durchgereicht werden können.
Siehe Hilfe zu STEP7 > Index > Parameterübergabe bei Bausteinen

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ok, habe die hilfeseite gefunden und verstanden.
aber warum ist das so?


ich umgehe das Problem jetzt indem ich dem FC die Werte des Array (es sind zum Glück nur 20) EINZELN als IN_OUT übergebe, in dem FC füge ich sie in einem temporären Array wieder zusammen, und am Ende des Bausteins gehen die Werte aus dem temporären Array wieder an die einzelnen IN_OUT-Parameter
 
Zuletzt bearbeitet:
Nicht-elementare Variablen werden nicht als Wert sondern als POINTER übergeben und man kann in den Siemens-Programmiersprachen nicht formulieren, ob man den Pointer oder die Variable ansprechen will. Eine explizite Dereferenzierung ist nicht vorgesehen. Die Compiler verwenden bereits einige implizite/versteckte Dereferenzierungen.

Will man nicht-elementare Datentypen durchreichen, dann muß man selber den POINTER kopieren (was aber nur in AWL geht) oder die Variable auf eine zweite Variable umkopieren (am besten in eine eigene Lokalvariable TEMP/STAT) und die zweite Variable weiterreichen.
Oder man übergibt solche Daten als ANY-Pointer. Die ANY-Pointer muß man allerdings auch selber weiter-kopieren und wenn man auf den Speicherbereich zugreifen will, auf den der ANY zeigt, dann muß man selber den ANY zerlegen.

Dein kleines Array könntest Du in TEMP oder STAT umkopieren und die Kopie an den FC übergeben.

Harald
 
Zurück
Oben