Arraywerte löschen

Johnson

Level-1
Beiträge
11
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,
Ich habe ein Histogramm programmiert, dass mV Werte anzeigt.
Dies hab ich mit einem ARRAY hinbekommen.
Nun will ich aber bei drücken eines Tasters das Histogramm wieder löschen, bzw. die Werte im Array löschen oder auf 0 setzen.
Ich habe bereits herausgefunden wie ich einen enzelnen Wert des Arrays mit 0 überschreiben kann, würde jedoch gerne den gesammten Array überschreiben, da ich sonst 200 zeilen Bräuchte.
Der Code sieht wie folgt aus:

PROGRAM Histogramm1PRG
VAR
Timer01: TON;
tMessZeit : TIME :=t#2s; (*Zeitabstand zwischen den messungen*)
arHistogrammWerteFortlaufend : ARRAY [0..maxHistogrammWerte] OF REAL; (*Array für die Anzeige im fortlaufendes Histogramm*)
iX : INT; (*Laufvariabel für FOR Schleiffe*)
iActualWert : REAL; (*zu Speichernder Wert*)
iZaehler : INT;
END_VAR
VAR CONSTANT
maxHistogrammWerte : WORD := 200; (*Anzaht Messwerte welche gespeichert werden*)
END_VAR

(*werte auf 0 setzen*)
IF x_allgemeinstart THEN
arHistogrammWerteFortlaufend[5]:=0;
END_IF

(*Timer zum Speichern der Messwerte*)
Timer01(
IN := (NOT Timer01.Q),
PT := tMessZeit );

(*Zuweisen des Messwetes*)
iACtualWert:= rmVgefiltert1VISU;


(*Wenn der Timer01 beim Anschluss Q eine 1 hat, wird der Messwert im Array geschoben.*)
IF Timer01.Q AND xkalibrierung_aktiv THEN
(*Schieben der Werte im Array*)
FOR iX :=0 TO maxHistogrammWerte-1 DO
arHistogrammWerteFortlaufend[iX]:=arHistogrammWerteFortlaufend[iX+1];
END_FOR
(*Speichern des aktuellen Messwertes*)
arHistogrammWerteFortlaufend[maxHistogrammWerte]:=rmVgefiltert1visu;
END_IF
 
Grüße,

lad dir mal die Oscat.lib, daraus den Baustein _ARRAY_INIT.
Da kannst du das ganze Array mit einem beliebigenWert beschreiben, in dienem Falle mit 0.

Jan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So eine einfache Aufgabe kann man auch ohne fremde Bibliotheken mit eigenem Gehirnschmalz lösen. ;)
Du kannst in einer Schleife jedem Arraywert 0 zuweisen:
Code:
IF FlankeDrueckenTaster THEN
  (*Löschen der Werte im Array*)
  FOR iX := 0 TO maxHistogrammWerte DO
    arHistogrammWerteFortlaufend[iX] := 0.0;
  END_FOR
END_IF


VAR CONSTANT
maxHistogrammWerte : WORD := 200; (*Anzaht Messwerte welche gespeichert werden*)
END_VAR
Hinweise:
* maxHistogrammWerte (200) ist bei Dir nicht die Anzahl der Array-Werte sondern der höchste Array-Index. Dein Array hat maxHistogrammWerte + 1 (201) Werte.
* maxHistogrammWerte sollte nicht als WORD sondern als INT deklariert werden, weil WORD genaugenommen kein Datentyp zum Rechnen ist, sondern eine Speicherplatzgröße.

Harald
 
Vielsn Dank euch beiden für die schnelle und kompetente Antwort.
Ich habe den Code verwendet und es hat perfekt funktioniert.
Grüsse Yannick
 
Zurück
Oben