SCL: Daten Speichern/Verschieben

zloyduh

Level-1
Beiträge
226
Reaktionspunkte
2
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.ANZEIGEN:= FALSE;
END_FOR;
END_IF;


END_IF;
FL1:= SPEICHERN;

END_FUNCTION_BLOCK
 
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
 
Zurück
Oben