Hallo,
ich bin Anfänger in Delphi, ich programmiere eigentlich SPS-Automatisierungssysteme, habe aber immer Visualisierungen in Delphi erstellt.
Ich habe jetzt eine Aufgabe bekommen eine Art Plotter für eine Industrieanlage zu Programmieren.
Ich bekomme ca. alle 10-50ms von einer SPS-Steuerung 16 Real Werte.
Dies habe ich mittels einem Thread auch schon schön hinbekommen dass alle Signale ziemlich schnell in Delphi ankommen.
Ich soll jetzt mittels TeeChart einen Plotter erstellen der mir diese Werte extrem schnell für 24h aufzeichnet,
die alten werte werden dann verworfen.
Meine Rechnung:
16 Werte alle 10ms einen Eintrag währen 1600 Werte pro Sekunde.
Weiters währen dass dann in 24h 138.240.000 Werte.
Kling für mich ein wenig unmöglich dies schnell zu verarbeiten.
alle 50ms einen Eintrag ins Chart wären auch noch akzeptabel,
dabei währen es aber in 24h auch noch 27.648.000 Einträge.
Aber ich wollte es dann einmal probieren es vielleicht eine Stunde hinzubekommen.
Zuerst habe ich es mittels TeeChart (RealTimeCharting mit Series AfterAdd usw.) versucht,
aber erfolglos weil dies sehr schnell sehr langsam wird.
Dann habe ich versucht einen Array mit 1.000.000 Werten ins Chart zu laden,
dies funktionierte dann auch in unglaublich schneller Zeit.
Jedoch müsste ich den Array als Ringpuffer realisieren:
Delphi-Quellcode:
// Array als Ringpuffer (alten Wert löschen, alles nachschieben)
procedure Thread_Array.movedArray(var temparray: array of double);
var i: integer;
begin
for i := 0 to Length(temparray)-2 do temparray[i] := temparray[i+1];
end;
(vielen dank, diesen Code habe ich auch von hier
)
aber bei 1.000.000 Werte ist dies dann auch ziemlich langsam, obwohl ich dies in einem Thread ausführe.
Klingt für mich auch logisch weil 999.999 Werte zu verschieben sicher kein klax ist.
Hat jemand eine Idee wie diese Aufgabe zu realisiere währe, ich habe leider wenig Erfahrungen mit TeeChart.
Ich habe mich auch schon ein wenig mittels Queue beschäftigt, aber ich weiß nicht ob dies der richtige Ansatz ist.
Und Entschuldigung wenn ich einen kapitalen Denkfehler habe, aber ich habe bisher nur einfache Projekte gemacht.
Vielen dank im Vorraus.