Step 7 Block_DB in Multiinstanz

Gerri

Level-1
Beiträge
822
Reaktionspunkte
37
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe eine Multiinstanz.

zB MAIN_FB.
Darin gibt es nun 2 weitere FB´s (statische Variablen) - DATA_FB und SEND_FB.

In meinem Fall braucht SEND_FB Werte von dem Instanzdatenbaustein DATA_FB (Übergabewert als BLOCK_DB).

Da ich beide FB´s nun in der Multiinstanz MAIN_FB habe, gibt es keine eigenen INstanz - DB´s für die beiden.

Kann man das nun irgendwie hintricksen, anstelle eines Block_DB´s eben aus dem STAT Teil der lokalen Variablen der Multiinstanz den FB_SEND zu bestücken.

Wäre vorteilhaft um besser zu Kapseln.

mfg
Gerri
 
Hallo Gerri,
ich bin wieder nicht so ganz sicher, was du willst. Wie ich es verstanden habe :
Wenn du die Größe des Empfangsdatenbereichs kennst bzw. der Sendedatenbereich immer gleich groß ist dann kannst die auch mit in der Instanz des "Main_FB" anlegen - z.B. als Array_of_Byte oder als Struktur. Diesen Bereich wießt du nun einer Variablen vom Typ ANY zu und übergibst diese Variable (der ANY-Pointer) dem FB_Send (oder FB_Receive). Nun würde der FB-Send (z.B.) mit den Daten arbeiten. Ich meine mich zu erinnern, dass dieser Baustein (und auch der Andere) auch noch den Block_DB seperat angegeben haben wollen. An diese Information kommst du durch auflösen des ANY-Pointers (z.B. über eine AT-Sicht).

Gruß
Larry
 
... ich war irgendwie der Ansicht, dass du dich SCL bedienst ...
Ansonsten - einfach (wie schon geschrieben) den ANY-Pointer auflösen ... oder mit L DINO die I-DB-Nummer ermitteln ...

Gruß
Larry
 
ich wills mal mit SCL machen. Gibt es eine Möglichkeit in SCL lokale instanz automatisch mit den Schnittstellen ( IN/OUT) aufzurufen oder muß man das händisch eintippen?
Bin leider nur CodeSys Fit. Da gehts razfaz
 
@Gerri:
Du hast echt ein Talent, deine Frage so zu formulieren, dass sie (zumindestens für mich) nicht verständlich ist ...
Versuch es doch bitte noch einmal ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe einen SCL FB.
Zusätzlich einen AWL FB.

Der AWL FB wird im SCL FB im Teil VAR deklariert (Lokale instanz).
Dadurch ist der SCL FB eine Multiinstanz.
(Bitte korrigieren wenn ich mich irre).

Nun will ich diesen AWL FB ja auch beschalten.
In Codesys kklappt das mit F2 (Man wählt den lokalen FB aus und alle IN/OUT Parameter werden Syntaxkonform aufgelistet).

Über das Menü einfügen geht das auch bei SCL. Shortkey CTRL+J klappt nicht.
Und über das Menü kann man keine lokalen im Baustein deklarierten instanzen (der AWL FB) auswählen.

Gibt es eine Möglichkeit, dass schön und effizient auszuwählen oder muss man die ganze AWL FB struktur nun händisch abtippen?
 
... wenn du mit Step7 Classic (V5.5) arbeitest dann gibt es darin kein IntelliSense oder etwas Vergleichbares. Du mußt deine Variablen, deren Struktur und ggf. die Syntax schon kennen.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
zB MAIN_FB.
Darin gibt es nun 2 weitere FB´s (statische Variablen) - DATA_FB und SEND_FB.
In meinem Fall braucht SEND_FB Werte von dem Instanzdatenbaustein DATA_FB (Übergabewert als BLOCK_DB).

Kann man das nun irgendwie hintricksen, anstelle eines Block_DB´s eben aus dem STAT Teil der lokalen Variablen der Multiinstanz den FB_SEND zu bestücken.
Gerri schrieb:
Der AWL FB wird im SCL FB im Teil VAR deklariert (Lokale instanz).

Nun will ich diesen AWL FB ja auch beschalten.

Gibt es eine Möglichkeit, dass schön und effizient auszuwählen oder muss man die ganze AWL FB struktur nun händisch abtippen?
Ich versuch mal dein "Kauderwelsch" (nicht persönlich nehmen ;) ) zusammen zu fassen.

1.) Du hast einen FB "DATA_FB" und einen FB "SEND_FB"
2.) Beide FB weden im FB "MAIN_FB" aufgerufen und sind als Multiinstanz angelegt.
3.) In den Instanzdaten von DATA_FB liegt eine Struktur mit Daten
4.) Die Struktut liegt in Realität daher im Instanz-Datenbaustein von "MAIN_FB"
5.) Du möchtest diese Struktur jetzt auch im FB "SEND_FB" zur Verfügung haben.

Dein Problem ist als wie du das sauber (möglichst symbolisch) übergeben kannst. Habe ich das richtig?

Wenn ja, dann ist das eigentlich nicht so schwer, allerdings kenne ich's nur für AWL FUP.
 
Zuletzt bearbeitet:
@Ronin:
So,wie du, habe ich das auch verstanden (und beantwortet - ANY-Pointer halt ... 8))
Sehr schön läßt sich das mit dfem ANY in SCL umsetzen - da einfach nur den Datenbereich einer ANY-Variablen zuweisen - fertig.
Nun den ANY an den FB-Send übergeben ...

Gruß
Larry
 
Du kannst in SCL auf jede beliebige Variable eine AT-Sicht legen (bitte dazu einfach auch mal die SCL-Hilfe lesen bzw. nach dem Stichwort ANY & AT hier im Forum suchen).
Diese AT-Sicht interpretiert die Variable dann komplett neu - entsprechend des in der AT-Sicht vorgegebenen Aufbaus.
Auf diese Weise bist du dann in der Lage, den ANY-Pointer z.B. in der AT-Sicht als die Struktur zu behandeln, aus der er besteht.
IN SCL gibt es keinen Befehl um an den I-DB des FB dran zu kommen. Wenn du nun aber aus einer beliebigen Variablen einen ANY-Pointer bildest so beinhaltet dieser ja u.A. die Information des I-DB's.

Gruß
Larry
 
@Larry: Wenn er die Daten innerhalb von DATA_FB als Struct (oder noch besser als UDT) hat, dann kann er doch symbolisch diesen Struct z.b. an den IN/OUT des FB_SEND weiter reichen, oder?
Sollte in SCL doch auch gehen oder?

Wobei große Strukturen über IN/OUT eher schlecht sind.
Ich würde in dem Fall einen am FB_SEND einen IN-Parameter vom Typ ANY machen...
den Datenblock (aus der Instanz innerhalb von MAIN_FB) dann symbolisch an diesen IN schreiben...
innerhalb des FB_SEND dann den Pointer entgegennehmen...
und die Daten mittels BLCKMOVE ins TEMP übernehmen.
Erfordert allerdings mehr Arbeit...
 
Zurück
Oben