FB mit Array versorgen

thomasgull

Level-2
Beiträge
166
Reaktionspunkte
3
Hallo zusammen.
Ich probiere gerade ein FB mit einem Arry zu versorgen.

Der FB ist in SCL Programmiert und hat ein Array von 0..10 of Struct mit 2 Int werten.

Nun der DB ist ebenso aufgebaut.

nun die Frage wie versorge ich den FB?



Call FB900,db900
iIndex: =MW10
iSortieraten:=???
oZahl1:= logisch
oZahl2:= Logisch


Adresse Name Typ Anfangswert Kommentar
0.0 STRUCT
+0.0 zahlen ARRAY[0..10]
*0.0 STRUCT
+0.0 Zahl1 INT 0
+2.0 Zahl2 INT 0
=4.0 END_STRUCT
=44.0 END_STRUCT


grüsse Thomas
 
DbName.ArrayName

Das ist dann quasi ein Pointer mit absoluten Adressen geht es nicht.
 
Irgendwie mache ich was Falsch

das Array ist jedoch eine Struct und er meldet
Zahlen ist kein Symbol von DB oder Zahl1 ist kein Symbol von DB

thomas
 
Hallo Thomas,

wenn du den Code postest, der nicht funktioniert, dann kann man dir eher weiterhelfen.
Sonst kann man nur raten.

Wenn der DB im Offline-Bausteinordner vorhanden ist und Schnittstelle und DB-Array gleich deklariert wurden, dann funktioniert Zotos Vorschlag auch.

Code:
Call FB900,db900
iIndex: =MW10
iSortieraten:="DeineDB".zahlen    // nicht "DeinDB".zahlen[0] => eckige Klammer weglassen
oZahl1:= logisch
oZahl2:= Logisch
Gruß puzzlefreak
 
das ist der SCL
Code:

FUNCTION_BLOCK FB900

DB Struktur


DB Zahlen

Adresse Name Typ Anfangswert Kommentar
0.0 STRUCT
+0.0 zahlen ARRAY[0..10]
*0.0 STRUCT
+0.0 Zahl1 INT 0
+2.0 Zahl2 INT 0
=4.0 END_STRUCT
=44.0 END_STRUCT





VAR_TEMP
tIndex:INT;
END_VAR

VAR
sZahl1:INT;
sZahl2:INT;
END_VAR

VAR_INPUT
iIndex:INT;

iSortierdaten:ARRAY [0..10]OF STRUCT
Zahl1:INT;
Zahl2:INT;
END_STRUCT;
END_VAR

VAR_OUTPUT
oZahl1:INT;
oZahl2:INT;
END_VAR



tIndex:=iIndex;

sZahl1:=iSortierdaten[tIndex].Zahl1;// Auf eine Struktur in einem DB kann direkt zugegriffen werden.
sZahl2:=iSortierdaten[tindex].Zahl2;

oZahl1:=sZahl1;
oZahl2:=sZahl2;



END_FUNCTION_BLOCK

ist das gerüst für einen Test.

"heute ist wohl nicht mein Tag"
 
Ok jetz gehts , Projekt zu und nochmal auf.

Danke allen.

Gehe wohl lieber Eis essen.

sorry für die Unruhe
 
Bei großen Arrays ist es vom Speicherplatz her gesehen besser, diesen Parameter im Bereich "IN_OUT" anzulegen, da dann nur ein Zeiger auf das erste Arrayelement und keine Kopie des gesamten Array übergeben wird.

Nachteil ist aber dass das Array nicht mehr read-only ist.
 
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…