Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 4 von 4

Thema: Arraywerte löschen

  1. #1
    Registriert seit
    04.08.2016
    Beiträge
    11
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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
    Zitieren Zitieren Gelöst: Arraywerte löschen  

  2. "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

    Zitat Zitat von Johnson Beitrag anzeigen
    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"


  3. #2
    Registriert seit
    16.11.2007
    Beiträge
    179
    Danke
    11
    Erhielt 53 Danke für 39 Beiträge

    Standard

    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

  4. Folgender Benutzer sagt Danke zu Mr.Spok für den nützlichen Beitrag:

    Johnson (26.08.2016)

  5. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    10.796
    Danke
    885
    Erhielt 3.162 Danke für 2.562 Beiträge

    Standard

    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

    Zitat Zitat von Johnson Beitrag anzeigen
    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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #4
    Johnson ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.08.2016
    Beiträge
    11
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Vielsn Dank euch beiden für die schnelle und kompetente Antwort.
    Ich habe den Code verwendet und es hat perfekt funktioniert.
    Grüsse Yannick

Ähnliche Themen

  1. DB löschen
    Von misconduct im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 11.11.2016, 10:30
  2. UR Löschen
    Von sebiwars im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 21.03.2011, 18:10
  3. Benutzernamen löschen
    Von ssound1de im Forum HMI
    Antworten: 4
    Letzter Beitrag: 30.07.2010, 12:06
  4. DB löschen
    Von c.wehn im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 19.05.2010, 12:16
  5. Array löschen
    Von timod79 im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 25.03.2009, 18:38

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •