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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Array löschen

  1. #1
    Registriert seit
    04.02.2009
    Beiträge
    26
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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[i]:=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
    Zitieren Zitieren Array löschen  

  2. #2
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    Code:
    zaehl: int;
     
    FOR zaehl := 0 TO 500 BY 1 DO
        TVar[zaehl] := 0;
    END_FOR
    A programmer is just a tool which converts caffeine into code.

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Statt i := 0

    Code:
    FOR i:= 0 TO 500 DO
       TVar[i]:=0;     
    END_FOR;
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  4. #4
    timod79 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.02.2009
    Beiträge
    26
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Danke das hab ich auch schon versucht, dann springt mein Wert auf 500 und zählt von da an weiter.

  5. #5
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    Dann setze nach dem Löschen des Arrays i wieder auf 0!
    A programmer is just a tool which converts caffeine into code.

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Zitat Zitat von Cerberus Beitrag anzeigen
    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
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  7. #7
    timod79 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.02.2009
    Beiträge
    26
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Super Danke hab es hin bekommen.

  8. #8
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Lächeln

    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.
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Noch einfacher  

  9. #9
    Registriert seit
    27.06.2017
    Beiträge
    58
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    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;

  10. #10
    Registriert seit
    10.08.2012
    Beiträge
    245
    Danke
    0
    Erhielt 70 Danke für 66 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Klar geht das.
    Alternative: Memset(ADR(Array), 0, sizeof(array)); -> siehe Doku fuer naehere Infos.

  11. Folgender Benutzer sagt Danke zu Guga für den nützlichen Beitrag:

    seehma (14.11.2017)

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 21.12.2016, 17:03
  2. UR Löschen
    Von sebiwars im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 21.03.2011, 18:10
  3. Array an FC übergeben und löschen (SCL)
    Von Isha im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 22.04.2010, 10:23
  4. S7 300 löschen
    Von elrob im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 23.03.2009, 09:42
  5. Bool-Array in Byte-Array
    Von Techniker im Forum Sonstige Steuerungen
    Antworten: 10
    Letzter Beitrag: 13.01.2006, 19:12

Lesezeichen

Berechtigungen

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