Step 7 FC variabel Aufrufen in SCL

hartmann08

Level-2
Beiträge
30
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi zusammen

Ich bräuchte eure Expertise in Sachen S7 300 SCL.

Ich würde gerne in einem Vorhandenen SCL FB einen FC variabel aufrufen. Vergleichbar mit dem AWL UC Befehl.
Hintergrund ist dieser Aufzurufende FC hat immer dieselbe Schnittstelle aber jedes mal eine andere Logik.
Deshalb würde ich gerne je nach Anforderung einen anderen FC aufrufen .

L #Nummer //Input-Var
T #Nummer_Temp //Temp-Var Word
UC FC [ #Nummer_Temp]

Ist das in SCL möglich ? Bekomme ich dann auch die Übergabewerte ? OUT etc ?


Ich hoffe ich habe mich verständlich ausgedrückt.

grüsse steph
 
Zuviel Werbung?
-> Hier kostenlos registrieren
SCL Baustein:
IN_VAR
MyNumber : INT; (Wert=1719)
END_VAR

"Test_UC_AWL"(#MyNummer);



Wie würde es jetzt hier weitergehen ? Wenn ich angenommen jetzt den FC1719 aufrufe und in diesem eine bestimmte Logik habe die den OUT ansteuert?

Der FC1719 hätte 5 OUT Signale
 
Zuletzt bearbeitet:
Den Test_UC_AWL würdest Du jetzt in AWL schreiben, so wie Du das oben beschrieben hast.
Rückgabewert mußt Du dann vom aufgerufenen FC an den Test_UC_AWL geben und von dort an das aufrufende Programm durchreichen.

Ich würde vermutlich eher auf eine CASE-Anweisung gehen und das explizit programmieren. Wie viele verschiedene FCs gibt es denn?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hintergrund ist dieser Aufzurufende FC hat immer dieselbe Schnittstelle aber jedes mal eine andere Logik.
Und wie wäre es, EINEN FC zu schreiben und dem über einen "Modus"-Eingang intern nur die Logik umzuschalten? Oder ist die aufwendig programmiert, so daß das auch wieder unübersichtlich wird.

Nachteil bei Deiner Lösung: Die FCs müssen immer diese Nummern haben.
 
Daran hatte ich auch gedacht nur sind es später ca 10-15 FCs das würde den Case etwas unübersichtlich gestalten
eigentlich nicht, Du hast ja nur in einem Case den FC-Aufruf und die Zuweisung des Rückgabewertes:

Code:
CASE fc_Nb OF
    1:    #return := FC1(#Aufrufparameter);
    2:    #return := FC2(#Aufrufparameter);
    3:    #return := FC3(#Aufrufparameter);
END_CASE;
 
Zurück
Oben