-> 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:
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