-> Hier kostenlos registrieren
Hallo liebe Sps´ler,
hab hier leider ein Problem in SCL.
Ich habe ein Array mit 10 Felder.
Gerne würde ich das Array in einem FB bei einer Pos_Flanke mit Werten nacheinander füllen lassen.
Also Flanke -> 1. Feld wird beschrieben.
nächste Flanke -> 1. Feld in 2. Feld. 1. Feld bekommt neuen Wert!
usw...Also einen Ringpuffer. Hierbei muss ich aber später alle Felder beobachten können.Aber das wollte ich dann noch später ausbauen.
Hier erstmal die Grundfunktion zum schieben der Felder im FB. :
FUNCTION_BLOCK FB1
VAR_INPUT
LS_Pos : BOOL;
END_VAR
VAR
Restrecke : ARRAY[1..10] OF REAL;
Packetlaenge : ARRAY[1..10] OF INT;
ctu : INT;
ctu_hm : INT;
i : INT;
input : REAL;
END_VAR
VAR_Output
out : INT;
END_VAR
BEGIN
IF (LS_POS) THEN //Bei Pos_Flanke wird Zähler bis zum Wert 10 erhöht
ctu := ctu + 1;
END_IF;
IF (CTU > 10) THEN //Zähler wird resettet
ctu := 1;
END_IF;
IF ctu <> (ctu_hm) THEN
For i:= 1 to 9 BY 1 do
Restrecke[i+1] := Restrecke;
END_FOR;
Restrecke[1] := input;
ctu_hm := ctu;
END_IF;
END_FUNCTION_BLOCK
Der Fehler liegt natürlich in der schleife da immer alle Felder gleichzeitig überschrieben werden. Denke muss noch irgendwie die Länge des Arrays mit in der Kopfzeile der Forschleife mitreinbekommen.
For i:= (1+-n) to (9+-n) BY 1(x) do....
Wäre über eure Hilfe sehr dankbar!!!! :-D
hab hier leider ein Problem in SCL.
Ich habe ein Array mit 10 Felder.
Gerne würde ich das Array in einem FB bei einer Pos_Flanke mit Werten nacheinander füllen lassen.
Also Flanke -> 1. Feld wird beschrieben.
nächste Flanke -> 1. Feld in 2. Feld. 1. Feld bekommt neuen Wert!
usw...Also einen Ringpuffer. Hierbei muss ich aber später alle Felder beobachten können.Aber das wollte ich dann noch später ausbauen.
Hier erstmal die Grundfunktion zum schieben der Felder im FB. :
FUNCTION_BLOCK FB1
VAR_INPUT
LS_Pos : BOOL;
END_VAR
VAR
Restrecke : ARRAY[1..10] OF REAL;
Packetlaenge : ARRAY[1..10] OF INT;
ctu : INT;
ctu_hm : INT;
i : INT;
input : REAL;
END_VAR
VAR_Output
out : INT;
END_VAR
BEGIN
IF (LS_POS) THEN //Bei Pos_Flanke wird Zähler bis zum Wert 10 erhöht
ctu := ctu + 1;
END_IF;
IF (CTU > 10) THEN //Zähler wird resettet
ctu := 1;
END_IF;
IF ctu <> (ctu_hm) THEN
For i:= 1 to 9 BY 1 do
Restrecke[i+1] := Restrecke;
END_FOR;
Restrecke[1] := input;
ctu_hm := ctu;
END_IF;
END_FUNCTION_BLOCK
Der Fehler liegt natürlich in der schleife da immer alle Felder gleichzeitig überschrieben werden. Denke muss noch irgendwie die Länge des Arrays mit in der Kopfzeile der Forschleife mitreinbekommen.
For i:= (1+-n) to (9+-n) BY 1(x) do....
Wäre über eure Hilfe sehr dankbar!!!! :-D