Multiinzanzdaten in DB

Ninja2602

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

ich habe ein bestehendes Programm erweitert und habe nun das Problem das die ausgelesenen Daten nicht in den DB geschrieben werden.

Aber als erstes mal worum es sich handelt.
Ich habe in eine bestehende SPS-Programm ein zweites BHKW (Blockheizkraftwerk) eingebunden. Mein Vorgänger hat das Programm auch so schön aufgebaut das man ein BHKW Bauteil hat was immer wieder aufgerufen werden kann.
Nun habe ich in dem FB, wo auch schon das erste BHKW aufgerufen wird, das zweite BHKW per Multiinstanz aufgerufen. Habe die Adressen des zweiten BHKWs angelegt und es werden auch Daten ausgelesen (sind auch unterschiedlich zum ersten). Nun will ich die Daten in den gleichen DB schreiben wie schon das erste BHKW. Habe in dem besagten DB den zuständigen UDT aufgerufen und an die Multiinstanz die richtige Adresse aus dem DB angelegt. Leider steht im DB für das zweite BHKW überall 0.
Bei Bedarf kann ich versuchen die jeweiligen Programmausschnitte per Screenshot hochzuladen. Der PC ist leider nicht in meiner näheren Umgebung und ich habe nur bedingten Zugriff aus dem Büro.
 
... da ich nun absolut kein FUP-Mann bin ... kann ich das auch in AWL bekommen - ggf. vielleicht sogar als Quelle.

Haben deine beiden FB-Aufrufe unterschiedliche Instanz-DB's ?
 
Wenn ich Ninja richtig verstehe sind BEIDE BHKW-Bausteine im selben FB integriert.

Wäre aber sicher ein guter Test - was passiert mit den Daten bei unterschiedlichen Instanzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... das ist das Problem - man kann es so und so verstehen ...

Es sieht auch ein bißchen so aus als wenn der OUT in einen Bereich der Instanz zurückschreibt (da bin ich aber absolut nicht sicher).
Aber ich denke, dass man mit AWL da etwas mehr dazu sagen kann ...
 
Meine Theorie tendiert dahin das IN dem schönen BHKW-Baustein das eine oder andere Zeigerlein falsch zeigt. Wäre auch schön zu wissen WOHIN das Dingen die Daten schreibt...

Ist aber alles nur orakelt. Schaun mer mal was der TE noch dazu sagen kann...
 
AR2 Register

Hallo
ob in den FB's die AR-Register ( insbesondere das AR2 ) gesichert und wieder gesetzt werden kann man ja leider nicht erkennen ?
Ich habe da meine leidlichen Erfahrungen mit langem suchen, wenn man bei Multiinanzen da darauf nicht achtet. Vielleicht werden
auch Merker gesetzt, Timer oder Zaehler benutzt...... ist auch nicht gut.

Mit anderen Worten, ich vermute das Problem in den FB's. Lass uns mal in die FB schauen.
mit Gruß
Michi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
auf Wunsch ein Ausschnitt in AWL.
BHKW2_1.jpgBHKW2_2.jpgBHKW2_1.jpg

Den Test mit dem zweiten Instanzdatenbaustein würde ich gerne durchführen, allerdings stehe ich gerade auf dem Schlauch wie ich das realisiere.
Der jetztige Instanzdatenbaustein wird ja im OB1 generiert. Wie generiere ich denn einen zweiten, obwohl ich im OB1 weiterhin den FB nur einmal aufrufe?
 
Indem Du den FB einfach noch mal aufrufst mit 'nem neuen DB...

call FBxx, DBzzz

Und den zweiten Aufruf in deinem Jetzigen FB auskommentierst.

Ach ja, Larry L. und ich interessieren uns für den Code IM Baustein im AWL / Quelle NICHT den Aufruf der Schnittstelle...
Die sagt uns ja nicht was im Baustein so abgeht...
 
... allerdings stehe ich gerade auf dem Schlauch ...

Ich auch ...
Was ist BHKW2 - doch wohl kein FB ?
Du mußt schon etwas mehr Code springen lassen - damit komme ich so gar nicht klar.
Also meine Fragen :
- was ist BHKW2 für ein Baustein ?
- wo wird der aufgerufen ?
- von was wird im OB1 eine Instanz gebildet ?

und unterm Strich würde mich auch mittlerweile das Innenleben von BHKW2 interessieren - hier vor Allem was für Operanden verwendet werden und wo die deklariert sind (Global , TEMP , STAT) ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry, den Code wollte ich eigentlich schon mitgeteilt haben, wurde dann abgelenkt und habe es danach vergessen, also nun der Code. Habe Screenshots von Ausschnitten gemacht, aber das wiederholt sich dann für die anderen Variablen.
FB160_1.jpgFB160_2.jpgFB160_3.jpgFB160_4.jpgFB160_5.jpg
 
BHKW2 ist eine Multiinstanz (die einen FB aufruft).
BHKW2 wird in einem anderen FB aufgerufen.
FB12 --> CL_BHKW (Call BHKW)
FB160 --> BT_BHKW (Bauteil BHKW)

Im OB1 wird vom FB12 eine Instanz gebildet.
 
Hallo Ninja2602 ,

ich glaub, dass du im OB1 eine Multiinstanz nicht installieren kannst. Habe ich noch nicht geschaft.

Ich mache das so:
1) man nehme sich einen FBxx geben dem ein DB-Instanz so wie gehabt.
2) man nimmt sich einen weiteren FByy und baut da seine Funktionalität ein
3) und definiert in der Stat-Schnittstelle des FBxx den FByy als Datentyp FByy
und gibt ihm einen Namen z.B. zz_1 , und wieder holt das ....zz_2 x-Mal usw.
4) jetzt ruft man im FBxx call zz_1 usw. ohne eigenen DB-Instanz auf und wiederholt das
Die Schnittstelle der einzelen FByy wird in den DB-Instanz des FBxx eingebaut.

Vorteil: die jeweilige Funktionalität ist nur an einem Ort definiert und brauch auch nur da getestet oder
verändert werden.
Nachteil: die Fehlersuche ist etwas schwieriger

Als Beispiel habe ich mal ein Screen-Bild angehängt. Und hoffe, dass das etwas erklären kann.
Wenn nicht noch mal melden.

Mit Gruß
Michi
multiinstanz.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich werde das morgen früh sofort testen.
Allerdings ist doch der Sinn einer Multiinstanz das ich einen Baustein mehrmals aufrufen kann um mit diesem zu arbeiten. Bei mir geht das ja anscheinend nicht wirklich so, da ein Teil der Daten falsch ist.
Wenn ich mir meine Daten in der VAT anschaue, habe ich die richtigen Daten und im DB nur teilweise.
 
Ich fürchte Dir ist der Begriff "Multiinstanz" noch nicht hanz klar.

Möglichkeit 1:
Einen FC mehrfach aufrufen und die Schnittstelle mit unterschiedlichen Variablen beschalten. Es wird also der gleiche Baustein mehrfach verwendet.

Möglichkeit 2:
Einen FB mehrfach aufrufen wie den FC oben. Damit kann man lokal etwas speichern, muss jedoch bei jedem Aufruf einen Instanz-DB (als Speicherplatz) angeben.

Möglichkeit 3: (wie von michi beschrieben)
Du machst den Aufruf als Multiinstanz. Bedingung: Die Aufrufe müssen wie erwähnt in einem FB erfolgen. Als Instanz-DB muss nur für den FB mit den Aufrufen darin ein einziger DB vergeben werden.

Bei allen 3 Möglichkeiten dürfen natürlich unter keinen Umständen globale Variablen in den mehrfach verwendeten Bausteinen benutzt werden.
 
Guten Morgen,
danke nochmal für die Erklärung.
Ich habe Möglichkeit 1 und 2 vermischt.
Ich programmiere erst seit einem halben Jahr wieder und die Theorie ist ein bisschen länger her.
Aber ich lerne gerne immer wieder dazu bzw. erfrische gerne meine Wissen!

Bevor ich meine Änderung dann aufspiele frag ich lieber nochmal nach, damit ich nicht totales Chaos verursache.

Ich habe jetzt den FB 160 (BT_BHKW) nochmal erstellt (FB161) und rufe diesen als Multiinstanz im FB12 auf.
Werden die Daten denn jetzt bei nur einem Instanz-DB richtig übergeben?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ninja,

ich weiß ja nicht, wie es den Anderen so geht - ich kann dir diese Frage mit den aktuellen Info's nicht beantworten.

Ich denke zwar, dass Michi es gut beschrieben hat, aber es ist scheinbar doch nicht so bei dir angekommen.
Um eine Multi-Instanz von einem FB in einem anderen FB zu bilden mußt du den nicht unter einen anderen namen (also kopierte Version) nochmals aufrufen. Du deklarierst ihn nur einfach mit 2 verschiedenen Aufruf-Namen im Stat-Bereich des aufrufenden FB ("mein_erster_FB" vom Typ FB160 und "mein_zweiter_FB" vom Typ FB160).
Zu dem externen Beschalten etwas zu sagen ist m.E. ohne Kennntnis dessen, was da passieren soll, ein wenig "problematisch" ...

Gruß
Larry
 
Moin,
das mit den verschiedenen Namen habe ich gemacht.
Es werden ja auch Daten ausgelesen, allerdings habe ich ca. 5 Daten die absolut keinen Sinn machen.
Wenn ich mir diese Daten in der VAT anschaue bekomme ich anständige Werte nur im DB stehen andere Daten.
Das ist eigentlich mein Problem.
Ich dachte das ich das dann mit einem zweiten Instanzdatenbaustein beheben kann, da eventuell Datenüberschneidungen entstehen oder so!?
 
Ich beschreibe nochmal was ich gemacht habe und was zuvor schon da war.

Ich möchte das Programm erweitern um ein zweites, baugleiches, BHKW auszulesen.
Vorhanden sind ein FB160 (BT_BHKW) und ein FB12 (CL_BHKW).
Der FB160 wird im FB12 als Multiinstanz aufgerufen.
Zum FB12 gehört der Instanzdatenbaustein DB212. Die Daten werden in den DB3 geschrieben, dort wird ein UDT3 aufegrufen.
Der FB12 wird im OB1 aufgerufen!

Nun habe ich das zweite BHKW eingepflegt.
Im FB12 unter den STAT-Variablen ein BHKW2 (FB160) gebildet. Dieses als Multiinstanz aufgerufen.
Im DB3 habe ich das zweite BHKW eingepflegt. Auch hier habe ich dafür den UDT3 aufgerufen.
Wenn ich mir nun die Daten anschaue die ausgelesen werde, habe ich bei vier oder fünf Variablen einen Unterschied
zwischen den Werten im DB3 und in der VAT. Die Werte die ich in der VAT sehe sind i. O., die die im DB3 angezeigt werden
sind absolut unlogisch.

Nun frage ich mich warum diese Werte im DB3 falsch sind und woran das liegen kann!
 
Zurück
Oben