Arrays im FB lesen

tomrey

Level-1
Beiträge
362
Reaktionspunkte
32
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi all,
mache erste Gehversuche mit arrays.
Habe arrays für Zustandsmeldungen von Rollos global definiert.
1. Meldungsnummern
2. Meldetexte

VAR_GLOBAL
aiRolloMeldNr : ARRAY [1..imax_rollomeld] OF INT;
iRolloMeldNrIndex : INT:=1;
asRolloMeldTxt : ARRAY [1..imax_rollomeld] OF STRING;
iRolloMeldTxtIndex : INT:=1;
END_VAR
VAR_GLOBAL CONSTANT
imax_rollomeld: INT :=17; (*Obergrenze der Arrays*)
END_VAR


Gefüllt werden sie beim Systemstart.
In einem PRG mache ich die Zuordnung.
ScreenShot003.jpg
Funktioniert bestens solange das als PRG läuft.
Wenn ich nun das Selbe als FB mit var_in der Meldungsnummer und var_out des Meldungstextes machen will, funktioniert keine Index-Zuordnung.
Was mache ich falsch/muss ich noch berücksichtigen?
 
Darf man davon ausgehen, dass du eine Instanz des FBs erstellt hast und diese auch ordentlich Parametriert aufrufst?
Zeig doch bitte mal wo und wie du die Instanz des FBs aufrufst.....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Master,
nein, davon kann man nicht ausgehen, vermutlich liegt da der Hund begraben aber wie gesagt: erste Gehversuche mit Arrays...
Den FB rufe ich aus anderen FBs je Rollo (mit Oscat BlindControl usw.) auf und übergebe nur die jeweilige Meldenummer.
Als Var_out erwarte ich den Meldungstext.
Arrays und Indices sind global definiert (s. Post).
Was muss ich noch parametrieren?
Danke für die Unterstützung!
Gruß
 
Ich glaube das Problem hier ist, dass du das Netzwerk nicht in einer Schleife abarbeitest....

Dein Netzwerk wird nur einmal je FB-Aufruf durchlaufen, d.h. iRolloMeldNrIndex wird immer nur um 1 hochgezählt bis zum nächsten Aufruf.
Der Nachfolgende FB-Aufruf fängt also nicht von vorne an dein Array zu durchlaufen, sondern da wo der vorrangegangene FB aufgehört hat.

Was du machen musst, ist also alles in eine Schleife zu packen, die den iRolloMeldNrIndex von 0 bis zum Max Wert durchläuft. So stellst du sicher dass jede FB-Instanz immer das ganze Array abarbeitet und nicht nur ein Feld je Aufruf.
Außerdem würd ich bei mehrfachen Instanzen immer ganz ganz Vorsichtig mit Globalen Variablen sein. Da kann schnell mal irgendwas undefiniertes bei rauskommen wenn 10mal pro Zyklus auf ein und die selbe Variable geschrieben wird.
 
Wow super, das ist wohl der Grund!
Jetzt muss ich nur noch rausfinden, wie man so eine Schleife mit CFC programmiert - kannst Du das?
Das Problem mit den globalen Variablen stellt sich mir (bisher) nicht, da diese von Programmen/FB's nur gelesen werden - schreiben tut nur die Visu.
Gruß
 
Zurück
Oben