TIA Der instanz-Datenbaustein passt nicht zum aufgerufenen FB

HotProductionS

Level-1
Beiträge
6
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bin an einem TIA-Projekt (V13) und erhalte oben genannte Fehlermeldung.

Ich fange mal vorne an.

Ich habe einen Pumpensteuerbaustein erstellt, den ich für jede Pumpe benutzen möchte: '!FB_Pumpe[FB1]'

Nun habe ich für jede Pumpe einen eigenen FB ('Pumpe1[FB21]', 'Pumpe2[FB37]', usw.) in dem ich meinen '!FB_Pumpe[FB1]' verwende und entsprechend beschalte.
Jeder mit Instanz-Datenbaustein 'Pumpe1_iDB[DB45]', 'Pumpe2_iDB[DB63]', usw.

Nun habe ich einen FC 'Pumpen[FC3]' in dem die Programmaufrufe mache:
CALL "Pumpe1", "Pumpe1_iDB"

Der hintere Teil wird rot dargestellt und die Meldung 'Der Instanz-Datenbaustein passt nicht zum aufgerufenen FB' wird eingeblendet.
Wenn ich den hinteren Teil weglasse, erscheint ein Fenster 'Aufrufoptionen' Datenbaustein (Einzel-Instanz) und der Name 'Pumpe1_DB' wird vorgeschlagen.

So weit so gut. Somit hätte ich dann allerdings pro Aggregat 3 Einträge im Baum!

Andersrum kann ich diesen erstellten DB natürlich nicht als 'Gedächtnis' für meinen Pumpensteuer-FB benutzen.

Was mache ich falsch? :confused::confused::confused:

Vielen Dank im Voraus!
 
Wenn ich das jetzt alles richtig verstanden habe, solltest du einfach mal die IDB´s löschen. Anschließend Rechtsklick auf "Programmbausteine" und Software komplett übersetzen anwählen.

Eine weitere Abhilfe ist den IDB zu öffnen und einmal im DB eine Variable mit rechtsklick anklicken und wählen Instanz ändern oder updaten. (sowas ähnliches steht da)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle Antwort!

Versuch 1: Leider keine Änderung.
Versuch 2: Rechtsklick innerhald des IDB ist bis auf 'Kopieren' alles ausgegraut, auch 'Schnittstelle aktualisieren'

Rechtsklick auf meinen FB -> Instanz ändern... dort kann ich dann aber nur aus den IDBs auswählen.

Etwas übersichtlicher wird es im Projektbaum, wenn ich meine Steuerbausteine als Multiinstanz (an Stelle der IDBs) verwende.
Dann sind es pro Aggregat nur der FB und der DB.
 
Wieso hat der FB21 den Instanz DB vom FB1 Aufruf?

Der Brauch doch einen eigenen oder ?!


Gesendet von iPhone mit Tapatalk
 
Servus, ich persönlich würde die Pumpen in einem Funktionsbaustein zusammenfassen und dort die Aufrufe über eine Multinstanz machen. Kommt natürlich auch auf deinen Umfang darauf an. Ansonsten fällt mir da noch die Schnittstelle aktualisieren und das komplette Übersetzen ein.[emoji4]

Gesendet von meinem SM-G950F mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe einen Pumpensteuerbaustein erstellt, den ich für jede Pumpe benutzen möchte: '!FB_Pumpe[FB1]'

Nun habe ich für jede Pumpe einen eigenen FB ('Pumpe1[FB21]', 'Pumpe2[FB37]', usw.) in dem ich meinen '!FB_Pumpe[FB1]' verwende und entsprechend beschalte.
Jeder mit Instanz-Datenbaustein 'Pumpe1_iDB[DB45]', 'Pumpe2_iDB[DB63]', usw.

Nun habe ich einen FC 'Pumpen[FC3]' in dem die Programmaufrufe mache:
CALL "Pumpe1", "Pumpe1_iDB"
Moin!
Von welchem FB ist denn deine Instanz "Pumpe1_iDB" abgeleitet? Vom FB_Pumpe[FB1] oder vom FB_Pumpe1[FB37]? Ich denke hier ist der Fehler.
Wenn du im FB_Pumpe1 deinen FB Pumpe callst und dafür einen eigenen IDB erzeugst, dann kannst du den nicht auch noch am FB_Pumpe1 als Instanz übergeben - dieser bräuchte dann eine eigene Instanz.
Besser wäre im FB_Pumpe1 eine Static-Variable vom Typ FB_Pumpe anzulegen (Multi-Instanz). Anstelle eines eigenen IDBs wird die neue Static dein Datenspeicher.
Und dann könnte man, wie meine Vorredner schon meinen, auch lieber einen FB_PUMPEN machen, indem man dann alle Pumpen vom Typ FB_Pumpe als solche Multi-Instanzen callt.
 
Guten Morgen!
Erstmal vielen Dank für die Hilfe!

Moin!
Von welchem FB ist denn deine Instanz "Pumpe1_iDB" abgeleitet? Vom FB_Pumpe[FB1] oder vom FB_Pumpe1[FB37]? Ich denke hier ist der Fehler.

Die Instanz "Pumpe1_iDB" ist von dem FB_Pumpe1[FB37] abgeleitet.

Wenn du im FB_Pumpe1 deinen FB Pumpe callst und dafür einen eigenen IDB erzeugst, dann kannst du den nicht auch noch am FB_Pumpe1 als Instanz übergeben - dieser bräuchte dann eine eigene Instanz.

So äußert es sich ja auch. Nä¤mlich, dass ich dann je Pumpe die 3 Einträge im Baum habe:
1. FB_Pumpe1[FB37] (der FB für die Pumpe 1, in dem ich den '!FB_Pumpe[FB1]' benutze)
2. Pumpe1_iDB[DB45] (Instanzdatenbaustein zu dem benutzten '!FB_Pumpe[FB1]')
3. Pumpe1_DB (der DB zu dem FB_Pumpe1[FB37])

Besser wäre im FB_Pumpe1 eine Static-Variable vom Typ FB_Pumpe anzulegen (Multi-Instanz). Anstelle eines eigenen IDBs wird die neue Static dein Datenspeicher.

Ich denke, so werde ich das machen.

Und dann könnte man, wie meine Vorredner schon meinen, auch lieber einen FB_PUMPEN machen, indem man dann alle Pumpen vom Typ FB_Pumpe als solche Multi-Instanzen callt.

Nur EINEN FB_Pumpen zu benutzen würde ich gerne umgehen, da ich zig Pumpen habe und aus Gründen der Übersichtlichkeit pro Pumpe alles andere (wie Meldungen Motorschutz usw.) zusammenfassen würde. Sprich alles was auch diese eine Pumpe betrifft.
 
Zuletzt bearbeitet:
Nur EINEN FB_Pumpen zu benutzen würde ich gerne umgehen, da ich zig Pumpen habe und aus Gründen der Übersichtlichkeit pro Pumpe alles andere (wie Meldungen Motorschutz usw.) zusammenfassen würde. Sprich alles was auch diese eine Pumpe betrifft.

Ja da gibt es sicher Gründe die dafür und/oder dagegen sprechen. Dafür müsste man schon die gesamte Softwarestruktur deines Programms kennen.
Dann mal viel Erfolg!
 
Zurück
Oben