FB Aufruf in S7 SCL

Starter

Level-1
Beiträge
20
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
Ich möchte einen Funktionsbaustein(FB101) in einem weiteren FB(FB100) aufrufen und beim Aufruf sowohl Eingangs-, als auch Ausgangs- und Durchgangsparameter übergeben. Beide Funktionsbausteine sind in SCL geschrieben. Die Parameter habe ich mit Hilfe von Strukturen (STRUCT) sotiert, sodass ich nicht alle einzelnen Parameter übergeben muss. Die Übergabe der IN und OUT Parameter funktioniert auch schon bereits, obwohl ich auch mit denen zum Anfang Probleme hatte.

Nun wollte ich noch die INOUT Parameter implentieren. Beim kompelieren der SCL Quelle des FB 100 kommt es jedoch zu einem Fehler "Parameterübergabe nicht Korrekt".
Der Compiler scheint wohl die Strukturen nicht zu akzeptieren. Jedenfalls kommt es zu keinem Fehler bei der INOUT Parameterübergabe, wenn ich die Strukturen weg lasse.

Nun wollte ich mal im Forum fragen, ob vielleicht schon jemand bei der Übergabe von Strukturen in SCL Probleme gehabt hat. die beiden FBs (FB100 und FB 101) sind in 2 seperaten SCL Quellen implementiert. Ich compeliere immer zuerst den FB 101 und danach den FB 100.

Der Durchgangsparameterbereich des FB 101 sieht wie folgt aus:

//INOUT Variablen des FB101******************************************
VAR_IN_OUT
INOUTTouchPanel: STRUCT
Functions: STRUCT
Feedback: INT;
END_STRUCT;
END_STRUCT;
INOUTInverter: STRUCT
Functions: STRUCT
Feedback: INT;
END_STRUCT;
END_STRUCT;

END_VAR
//**********************************************************************
Diesen FB 101 möchte ich im FB 100 in SCL aufrufen. Der FB100 gibt die Durchgangsparmeter des FB101 direkt weiter ohne sie zu benutzen, daher verfügt der FB 100 über den gleichen Aufbau der Durchgangsparameter:

//INOUT Variablen des FB100******************************************
INOUTTouchPanel: STRUCT
Functions: STRUCT
Feedback: INT;
END_STRUCT;
END_STRUCT;
INOUTInverter: STRUCT
Functions: STRUCT
Feedback: INT;
END_STRUCT;
END_STRUCT;

END_VAR
//****************************************************************
Den Aufruf des FB 101 im FB 100 habe ich wie folgt implementiert:

//Aufruf FB 101 ******************************************************
FB101.DB101( Start:=P4, // IN
FromTouchPanel:=FromTouchpanel, //IN
INOUTTouchPanel:=INOUTTouchPanel, // INOUT
INOUTInverter:=INOUTInverter); //INOUT
ToTouchpanel:=DB101.ToTouchpanel; //OUT
ToInverter:=DB101.ToInverter; //OUT
P6:=DB101.End; //OUT
//*****************************************************************

Hat dazu vielleich jemand einen Tip, was da falsch läuft? Ist das von mir falsch implementiert, oder vielleicht doch ein Systemfehler im Compiler?

Update: Ich habe mal versucht den FB 101 im OB1 aufzurufen der in AWL geschrieben ist. Das hat ohne Probleme funktioniert.

Danke
Starter
 
Zuletzt bearbeitet:
Es ist nur mit Einschränkungen möglich, Parameter von Funktionen oder Funktionsbausteinen als Aktualparameter an aufgerufene Funktionen oder Funktionsbausteine weiter zu geben. Das ist unabhängig von KOP, FUP, AWL, SCL.
Sieh Dir mal die Online-Hilfe zum Thema 'Parameterübergabe bei Bausteinen' an, da ist beschrieben, was geht und was nicht, und es gibt Tips, was man dann tun kann.
Gruß
Erich
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich kann das jetzt nicht ausprobieren ... ggf. würde es aber funktionieren, wenn du anstatt des STRUCT-Parameters einen gleich definierten UDT auf die Schnittstelle legst.

Diese Deklaration ginge dann über "TYPE".

Gruß
Larry
 
Zusammengesetzte Datentypen können nicht als Durchgangsparameter durchgereicht werden, nur Ein- oder Ausgangsparameter. Über dieses Problem bin ich erst vor wenigen Tagen wieder mal gestolpert.
Gruß
Erich
 
Es ist nur mit Einschränkungen möglich, Parameter von Funktionen oder Funktionsbausteinen als Aktualparameter an aufgerufene Funktionen oder Funktionsbausteine weiter zu geben. Das ist unabhängig von KOP, FUP, AWL, SCL.
Sieh Dir mal die Online-Hilfe zum Thema 'Parameterübergabe bei Bausteinen' an, da ist beschrieben, was geht und was nicht, und es gibt Tips, was man dann tun kann.
Gruß
Erich

Danke für den Tip Erich. Kannst du mir bitte den Link zur Online-Hilfe schicken?

Besten Dank
Starter
 
Zurück
Oben