Instanz_FB mehrmals aufrufen mit verschiedenen DB-Daten

Beidel

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

ich habe folgendes Problem. Ich möchte eine Funktion die in einem Instanz_FB programmiert ist mehrmals aufrufen aber mit unterschiedlichen Ein- und Ausgangsdaten.

Ich möchte eine Funktion in einem Programm mehrmals aufrufen. Dass ich dafür mehrere Instanz-DB benötige ist mir bekannt. Ist auch kein Problem. Jedoch möchte ich gewisse "gleiche" Daten die in verschiedenen DB's zu finden sind in diesem Baustein aufrufen. Der erste Funktionsablauf mit Daten aus DB20. Der zweite durchlauf mit den Daten aus DB21. Den dritten durchlauf mit Daten aus DB22.

Kann ich als IN-Variable eine DB-Nr. übergeben und diesen dann im Instanz_FB öffnen und dann nur noch mit den Befehlen DBX0.0 oder DBW 0 oder DBD 0 arbeiten? Oder muss ich die Daten die in den verschiedenen DB's steht als IN und OUT und INOUT Variable dem FB übergeben? (Dies wäre aber unglücklich ;-))

Ich hoffe dieses Problem hat hier jemand verstanden und kann mir dafür auch eine Lösung nennen.

Danke
Gruß Beidel
 
Sicher, übergib die Bausteinnummer an den FB,
mit AUF DB vw öffnen.

Du kannst dann nur noch mit den Daten DBX y.z, DBW f oder DBD g (usw) arbeiten, korrekt.

Aber vielleicht weiss ja jemand mehr.....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe da ne kleinigkeit vergessen zu erwähnen. Ich habe das mal versucht aber irgendwie hat das nicht funktioniert. Kann es sein dass wenn ich in einem Instanz_FB einen Baustein öffnen mit AUF DB XX dass das Programm in konflikt kommt mit dem dazugehörigen Instanz_DB oder habe ich da nur ein Fehler gemacht?

Hat diese Geschichte schonmal jemand angewendet oder ebenfalls versucht und ist gescheitert?

Danke
 
Du kannst eine IN Variable mit dem Datentyp Block_DB oder INT anlegen.

Code:
INPUT: My_DB / Block_DB

Auf My_DB //Ladet den DB in DB Register 1

L DBW2

L DBX0.0

....

oder

Code:
INPUT: DB_Nr / INT

Auf DB[DB_Nr] //Ladet den DB speicherindirekt in DB Register 1

L DBW2

L DBX0.0

....

Grüße Pico
 
Ich habe da ne kleinigkeit vergessen zu erwähnen. Ich habe das mal versucht aber irgendwie hat das nicht funktioniert. Kann es sein dass wenn ich in einem Instanz_FB einen Baustein öffnen mit AUF DB XX dass das Programm in konflikt kommt mit dem dazugehörigen Instanz_DB oder habe ich da nur ein Fehler gemacht?

Hat diese Geschichte schonmal jemand angewendet oder ebenfalls versucht und ist gescheitert?

Danke

Nicht bekannt, dass es da zu einem Problem kommt.
Auf den IDB greift man ja im Regelfall über die IN/OUT-Symbolik zu.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jo, auf den IDB zugreifen im Regelfall symbolisch und im Notfall mit DIX/DIB/DIW/DID.
In FB sollte man aber "AUF DI...", TDB und Verändern des AR2 tunlichst unterlassen. (Es sei denn, man weiß genau was man tut.)

Harald
 
Übergib´die DB-Nr. (21, 22, oder 23) an deinen FB, bilde einen Pointer und hol´ dir im FB als
erstes die erforderlichen Daten da heraus mit BLOCKMOVE und leg´sie in einen festen
Bereich (Array, Struct...) des jeweiligen IDB´s ab.
Nun brauchst du innerhalb des jeweiligen FB´s nur noch mit seinem IDB arbeiten, ohne einen
anderen DB zu öffnen.

Dies Prinzip mache ich so z.B. bei Antriebsbausteinen:
Anfangs-Adresse des Antriebs an FB übergeben ---> wäre deine DB-Nr.
als erstes damit das Statuswort lesen und im IDB speichern (SFC14/15) ---> das wäre das Kopieren von DB 21, 22, 23 in den IDB
dann bearbeiten usw. ---> das, was du in deinem FB brauchst
zum Schluss wieder an das Steuerwort zurück schreiben (wieder SFC14/15) ---> bei dir wohl nicht notwendig
 
Zurück
Oben