Array löschen

timod79

Level-1
Beiträge
26
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ich nehme alle 10 ms ein Messwert auf, diesen speicher ich dann in einem Array mit 500 Stellen.Meine Messwerte lasse ich mir später auf meinem Rechner als Kurve anzeigen.Jetzt mein Problem ich habe mal 300 und mal nur 200 Messwerte.Wie kann ich mein Array komplett auf Null zurücksetzen?Wenn ich nur an den Anfang springe nimmt er zwar meine 200 Werte neu auf, hat aber noch die Alten bis 300 Gespeichert.

(*Array alle 10 ms mit Messwerten des Durchflusses füllen*)
Timer1 (IN:=SP1.Q1 AND NOT Timer2.Q,PT:=T#5ms);
Timer2 (IN:=NOT Timer1.Q,PT:=T#5ms);
ft1 (CLK:=Timer1.Q);
IF ft1.Q THEN
TVar:=Durchfluss;
i:=i+1;
END_IF


(*Array wieder auf null Punkt setzen*)
ft2(CLK:=Digitalausgang_2);
SP2(SET:=ft2.Q);
SP2(RESET1:=Timer3.Q);
Timer3(IN:=SP2.Q1,PT:=T#500ms);
IF Timer3.Q THEN
i:=0;
END_IF
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann setze nach dem Löschen des Arrays i wieder auf 0!

Code:
(*Array wieder auf null Punkt setzen*)
ft2(CLK:=Digitalausgang_2);
SP2(SET:=ft2.Q);
SP2(RESET1:=Timer3.Q);
Timer3(IN:=SP2.Q1,PT:=T#500ms);
IF Timer3.Q THEN

FOR i:= 0 TO 500 DO
   TVar[i]:=0;     
END_FOR;

i:=0;

END_IF
 
Noch einfacher

Noch einfacher, Du weisst, wo Dein letzter erfasster Wert lag, zähle von dort jeden Index runter bis 1 und setze den Wert[index] := 0;

WHILE ( iIndex <> 0) DO
Wert[iIndex] := 0;
iIndex := iIndex -1;
END_WHILE
Wert[iIndex] := neuerWert;


Hinweis an die Performance Freaks:
WHILE Constructe sind in der Regel schneller als FOR ...
Tests auf Null sind ebenfalls immer schneller als auf andere Zahlen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
um kein neues Thema zu eröffnen wollte ich mal nachfragen ob es evtl. auch eine schnellere art gibt das array zu löschen als das vorhandene Array mit einem leeren zu überschreiben.
Als beispiel
Array:=Array_empty;
 
Klar geht das.
Alternative: Memset(ADR(Array), 0, sizeof(array)); -> siehe Doku fuer naehere Infos.

Die Memset Methode hat einen wesentlichen Vorteil: Wenn die Struktur erweitert wird, wird die neue Variable automatisch mitgenommen, hingegen bei der Schleife muss man das immer nachziehen.

Klar, Memset ist ein wenig schneller, aber nur unwesentlich.
Man spart sich hier nur das Umladen der Countervariable in der FOR Schleife.
Der Compiler optimiert das schon recht gut...

Ein Problem gibts mit Memset, wenn man das über einen Baustein drüberlaufen lässt und diesen nachher aufruft --> Exception. ;)

Sg seehma
 
Zurück
Oben