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

Ergebnis 1 bis 2 von 2

Thema: SCL: Daten Speichern/Verschieben

  1. #1
    Registriert seit
    11.12.2008
    Beiträge
    226
    Danke
    92
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,
    habe Folgendes vor:
    Möchte die Schnittleistung einer Maschine dokumentieren, dafür werden z. B. die letzten 5 Einträge gespeichert.
    Dabei soll der zuletzt Gespeicherte immer oben stehen und die anderen nach unten verschoben werden. Nach Erreichen des max. Eintrages soll der Speicher geleert werden.

    Wie kann ich das so umsetzen, dass der zuletzt gespeicherte Wert immer oben ist, d. h. der alte Wert auf platz 2 geschoben wird u.s.w.


    Kann mir jemand dabei helfen??


    SCL Programm:

    FUNCTION_BLOCK FB_DATEN
    CONST
    maxW:= 5;
    minW:= 1;
    END_CONST

    VAR_INPUT
    SPEICHERN: BOOL;
    SCHN_LEISTUNG: REAL;
    END_VAR

    VAR
    i: INT;
    SFC_Fehler: INT;
    CPU_Zeit: DT;
    my_index: INT;
    FL1: BOOL;
    SAEGE_SP: ARRAY [1..maxW] OF UDT_SCHNITT;
    END_VAR


    BEGIN
    // Kontrolle ob Wert kleiner Minimum ist. Wenn ja setze Minimum
    IF my_index < MinW THEN my_index:= MinW; END_IF;
    // Kontrolle ob Wert grösser Maximum ist. Wenn ja setze Maximum
    IF my_index > MaxW THEN my_index:= MaxW; END_IF;
    // CPU Uhrzeit Auslesen
    SFC_Fehler := READ_CLK(CDT := CPU_Zeit);


    IF SPEICHERN AND NOT FL1 THEN
    SAEGE_SP[my_index].DATUM_UHRZEIT:= CPU_Zeit;
    SAEGE_SP[my_index].SCHNITTLEISTUNG:= SCHN_LEISTUNG;
    SAEGE_SP[my_index].ANZEIGEN:= TRUE;
    my_index := my_index+1;

    IF my_index > maxW THEN
    my_index:= 1;
    FOR i:=minW TO maxW DO
    SAEGE_SP[i].ANZEIGEN:= FALSE;
    END_FOR;
    END_IF;


    END_IF;
    FL1:= SPEICHERN;

    END_FUNCTION_BLOCK
    Zitieren Zitieren SCL: Daten Speichern/Verschieben  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.788
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    wenn ich es richtig verstanden habe dann geht es doch wohl um das Aufschieben "nach hinten" ?
    Das würde ich dann in etwa so machen :
    Code:
    IF SPEICHERN AND NOT FL1 THEN
       // erst Aufrücken des Speichers
       for i := maxW-1 to 1 by -1 do
          SAEGE_SP[i+1] := SAEGE_SP[i] ; 
       end_for ;
     
       // nun neue Daten eintragen 
       SAEGE_SP[1].DATUM_UHRZEIT:= CPU_Zeit; 
       SAEGE_SP[1].SCHNITTLEISTUNG:= SCHN_LEISTUNG;
       SAEGE_SP1[].ANZEIGEN:= TRUE;
    END_IF; 
    FL1:= SPEICHERN;
    Gruß
    Larry

  3. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    zloyduh (08.08.2011)

Ähnliche Themen

  1. Daten verschieben
    Von GerhardPtl im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 07.10.2011, 16:47
  2. Antworten: 5
    Letzter Beitrag: 21.03.2011, 18:32
  3. INT Werte speichern bzw. verschieben
    Von steppenwolf im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 09.03.2008, 18:35
  4. Daten verschieben
    Von puehri im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 17.07.2006, 19:22
  5. Daten speichern
    Von Sascha77 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 11.03.2004, 06:33

Lesezeichen

Berechtigungen

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