Step 7 Funktionbaustein mit verschiedenen Eingängen mehrfach aufrufen

Pfanner_ice

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich werde gerade in eine neue Firma eingelernt und muss anfangs einige Übungsbeispiele lösen.
Ich habe etwas Erfahrung mit C++/Java/Webprogrammierung allerdings macht mir AWL noch etwas Probleme.

Die Problemstellung ist folgende: Ich habe drei Taster und 3 Lampen, Taster 1 soll Lampe 1 an und ausschalten, Taster 2 Lampe 2 usw..

Jetzt habe ich einen Funktionsbaustein im Simatic Manager erstellt und im Baustein selber eine Input "Variable" erstellt und eine für den Output die ich Eingang und Ausgang genannt habe.
Das Programm sieht wie folgt aus:


U #Eingang
= "mMerkerE1"
U "mMerkerE1"
FP "mFlankenEin"
U "mFlankenEin"
X #Ausgang
= #Ausgang


Wir verwenden in der Firma für alle Eingänge Merker.

Nun zu meinen Fragen:
Ich habe in der Variablentabelle die drei Eingänge und Ausgänge erstellt. Wie rufe ich die Funktion nun auf und "übergebe" ihr die Ein bzw. Ausgänge wie bei einem Funktionsaufruf mit verschiedenen Parametern in Java z.b.

Brauche ich für dieses Beispiel 3 DBs oder reicht 1er? Wie muss der DB ausschauen, ich bekomme imomment den Fehler "Baustein-Datentyp für Instanz-DB in Datenbasis paßt nicht zum aufgerufenen FB" ich rufe den FB so auf: call fb1, db1

Zu guter Letzt: Ich nehme an für die Merker muss ich nicht extra 3 verschiedene Variablen erstellen oder liege ich in der Annahme falsch?

Vielen Dank!

MfG
Reich David
 
call FB1, db1 passt. solange DB1 noch nicht existiert oder vom typ des FB1 ist.
Jeder FB braucht seinen eigenen DB oder muss einen eigenen instanzspeicher im Aufrufenden FB haben (im STAT vom typ des FBs).

in FBs die mehrfach aufgerufen werden sollen, darf es keine Merker geben (keine Globalen Variablen). Die mMerker_E1 z.B. musst du im Stat bereich oder im Temp des bausteins deklarieren.
"" um eine Variable deutet auf eine Globale variable hin. Schnittstellenvariablen haben immer ein # vor dem Namen. Schnittstelle ist In Out IN/OUT stat, temp und Constant.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn sich der FB Zustände in globalen Variablen merkt (wie Dein Flankenmerker) dann kann man den FB nicht für verschiedene unabhängige Lampen verwenden, egal ob mit 3 verschiedenen Instanz-DB (IDB) aufgerufen oder alle 3 Aufrufe mit dem selben IDB.
Du müsstest das Programm Deines FB so ändern:
Code:
U  #Eingang          //INPUT, BOOL
FP #stat_FlankenEin  //STAT, BOOL
X  #Ausgang          //IN_OUT, BOOL
=  #Ausgang
und dann je Lampe mit einer anderen Instanz aufrufen, damit jede Lampe seine eigenen Variablen (eigenes unabhängiges Merkvermögen) hat. Das kann jeweils ein anderer IDB sein (CALL FB1, DB1 / CALL FB1, DB2 / ...), oder Du legst die Instanzen als Multiinstanz in den STAT-Bereich eines "Mutter"-FB und rufst dann in dem Mutter-FB so auf: CALL #Instanz_1 / CALL #Instanz_2 / ...

Harald
 
Vielen Dank, hat mir schonmal sehr weitergeholfen. Ich Idiot habe die ganze Zeit versucht einen Globalen DB als Datenbaustein aufzurufen :rolleyes:..

Danke für das mit den Globalen Variablen wäre nie drauf gekommen ohne deine Hilfe. Nun ja ist ja bis jetzt auch nur mein 2ter Tag im neuen Job.

Nochmals vielen Dank.
 
Zurück
Oben