Doppel-Instanz - 2 FB's - 1 DB

Larry Laffer

Super-Moderator , User des Jahres 2008-2009
Teammitglied
Beiträge
14.469
Reaktionspunkte
3.307
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe eine Mess-Anwendung, in der ich Werte für eine Kurve aufzeichne. Dafür habe ich einen FB, der im Zeit-OB (35) aufgerufen wird.
Des weiteren habe ich einen anderen FB, der die aufgezeichneten Daten auswertet.
Ich würde nun eigentlich gerne den selben DB für beide Anwendungen nehmen - läßt S7 aber nicht zu. Gib es eventuell doch einen Trick ?
Im Moment, löse ich das Problem mit kopieren, das gefällt mir aber dauerhaft nicht.
 
Du solltest nicht mit einem FB auf einen Instanz-DB eines anderen FB zugreifen. Dafür nimmt man Globaldatenbausteine.

Man kann zwar viel vergewaltigen, aber wenn du den FB mit dem InstanzDB änderst, ändert sich evt. auch dein Instanz-DB und dein Datenquerzugriff währe gefährlich..

pt
 
Die Problemstellung meiner Anwendung ist. dass ich sie ggf. auch mehrfach in einem Programm einsetzen möchte. Das schließt einen Global-DB aus, da ich dann den FB in verschiedenen Versionen erzeugen müßte (unpraktisch). Es ist ja auch nicht so, dass das was ich habe nicht funktioniert, ich möchte es halt eleganter haben, da auch andere in meiner Firma damit arbeiten können sollen ohne verstehen zu müssen, wie der/die Bausteine intern funktionieren ...
 
Dann verschiebe die Messwerte vom "STAT" in den "OUT" Bereich und weise beim Aufruf im OB an den OUT Parametern einen Global DB zu der die selbe STruktur hat - diesen kannst du dann deiner Auswertung zuweisen.

Um das selbe dann mit anderen Werten zu machen:

Rufe den selben FB noch mal auf und weise an den Ausgängen einen anderen Global-DB zu - diesen kannst du wieder auswerten usw.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Problemstellung meiner Anwendung ist. dass ich sie ggf. auch mehrfach in einem Programm einsetzen möchte. Das schließt einen Global-DB aus, da ich dann den FB in verschiedenen Versionen erzeugen müßte (unpraktisch). Es ist ja auch nicht so, dass das was ich habe nicht funktioniert, ich möchte es halt eleganter haben, da auch andere in meiner Firma damit arbeiten können sollen ohne verstehen zu müssen, wie der/die Bausteine intern funktionieren ...


Ohne meine Meinung zur oben beschriebener Structur breitzutreten,

du kannst einen Instanz-DB nicht zwei unterschiedlichen FB´s zuordenen. Sind denn die Structuren der beiden FB´s überhaupt gleich?
 
Die Problemstellung meiner Anwendung ist. dass ich sie ggf. auch mehrfach in einem Programm einsetzen möchte. Das schließt einen Global-DB aus, da ich dann den FB in verschiedenen Versionen erzeugen müßte (unpraktisch). Es ist ja auch nicht so, dass das was ich habe nicht funktioniert, ich möchte es halt eleganter haben, da auch andere in meiner Firma damit arbeiten können sollen ohne verstehen zu müssen, wie der/die Bausteine intern funktionieren ...

Du kannst doch einen FB mit Instanz-DB erzeugen, wenns denn sein muß und gibst dem FB noch einen DB für die Meßdaten als IN-Var mit. Die Meßdaten haben eigentlich ohnehin nichts im Instanz-DB verloren. Wenn du dann deinen Meß-FB aufrufst, kannst du ihm bei jedem Aufruf einen anderen Meß-DB mitgeben und diesen Meß-DB dann auch beliebig auswerten.
 
Also ich würde mit Multiinstanzen arbeiten.
Nimmst einen FB den du in deinem OB aufrufst. In dem FB legst du dann jeweils für die beiden anderen FB´s eine Instanz an. Die Daten die du an FB1 an FB2 übergeben willst deklarierst du im FB1 als IN_OUT
die liest du dann wieder in FB2 ein. Adressieren kannst du ja intern im Multiinstanz FB auch die IN_OUT´s aus anderen instanzen.
Hab da mal ein paar Bilder zum besseren Verständniss angefügt.
Hoffe das ich hier jetzt nicht total falsch liege
MfG
McMeta
 

Anhänge

  • Bilder.zip
    104,5 KB · Aufrufe: 26
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry, komme aus Stress-Gründen erst heute dazu meine Anfrage noch einmal durchzulesen ...

an McMeta:
Ich fand deinen Ansatz sehr interessant. Wenn ich das allerdings richtig gesehen habe, dann wird der FB1 aus dem OB35 aufgerufen. Das wäre fatal für die Auswertung - Das Durchlaufen der Messwert-Tabelle zur Glättung der Daten und zum Auslesen der Grenzwerte etc. treibt die Zykluszeit bei einer CPU315 mal eben auf 800 ms hoch. Allerdings erfolgt die Auswertung erst nach der Messung.
Hast du vielleicht noch eine Idee ?

Auf jeden Fall erstmal Danke für die zugesandten Tipps ...
 
Du kannst in dem FB den Instanz-DB auslesen. Die DB-Nr. übergibst du an den FB im OB1. Dort schlägst du dann den DB auf und greifst auf die Structur zu.

DINO
AUF DB

währen da die Schlagwörter

Gruß, pt
 
Hallo,

du solltest in jedem Fall beide FBs im gleichen Zyklus laufen lassen, da sonst dein FB im OB1 während des Auslesens vom OB35 unterbrochen werden könnte.
-> FB im OB35 liest neue Daten ein, FB im OB1 wertet alte und neue Daten aus...

Gruß Micha
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

du solltest in jedem Fall beide FBs im gleichen Zyklus laufen lassen, da sonst dein FB im OB1 während des Auslesens vom OB35 unterbrochen werden könnte.
-> FB im OB35 liest neue Daten ein, FB im OB1 wertet alte und neue Daten aus...

Gruß Micha


Das könnte man mit einem Busy-Bit regeln.

Gruß, pt
 
Hallo,
ich bin jetzt an dem Punkt, der 2 FB's. Der eine sammelt die Daten ein, der andere wertet sie aus. Benutzen tue ich für die Auswertung den Instanz-DB des Aufzeichnungs-DB's. Die Busy-Bit-Verriegelung gibt es im Prinzip schon. Wie ich bereits erwähnt habe geht das Eine nur dann, wenn der Andere es erlaubt ...
Beide FB's sind in SCL geschrieben. Ist in Step7 zu unübersichtlich. Mein ursprünglicher Ansatz war, das die beiden sich auch nach einer Software-Anpassung ziemlich selbstständig aufeinander einstellen. Das klappt nun nicht - Schwamm drüber.

So nebenher übrigens : weiß jemand eine gute SCL-Beschreibung ?
Die von Siemens mitgelieferte läßt mehr Fragen offen als sie beantwortet ...

Bis dahin
Gruß Ralf
 
schöner Schwachsinn... schneller auswerten als einlesen :confused:

Sorry, aber macht für mich erst mal keinen Sinn. Zumindest fällt mir zum Beispiel von Larry kein Grund für den Mehraufwand ein.

Gruß Micha
 
Ja, ich zeichne Werte-Tabellen auf (hauptsächlich Kraft-Kurven). Hier werden meisstens 2 Sek. benötigt, die ich normalerweise im 10 oder 20 ms Takt aufrastere ... Entsprechend viele Werte kommen dann dabei heraus.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ok, verstanden. Hab ich wohl bis jetzt überlesen. Sorry.
Dann brauchst natürlich ein "Daten-komplett" Bit...
Dann spielen auch die unterschiedlichen OBs keine Rolle.
Musst natürlich sicher stellen, dass du während der Auswertungs-FB läuft keine neuen Daten aufzeichnest...
 
kein Problem

Es gibt für das Aufzeichnen eine Freigabe. Nur solange wird aufgezeichnet - oder die Grenze des Array's ist erreicht, dann gibt es die Meldung "Liste voll". In jedem Fall steht am Kopf der Tabelle die Anzahl der real erfassten Einträge.
 
Zurück
Oben