mein Hauptproblem liegt dabei dass ich alle 10ms 16 Werte auf die Platte bringen muss.
Mußt du ja gar nicht wirklich. Was du tatsächlich mußt: 1600 Werte pro Sekunde zwischenspeichern, und das ein wenig länger als es dauern würde, die Daten auf Platte bzw. in
DB zu speichern. Schau mal, CD- und DVD-Brenner arbeiten ja auch nicht viel anders, obwohl hier der Schreibvorgang oft schneller ist als das "Zusammenkratzen" der zu schreibenden Daten (wenn z.B. die Quellplatte stark fragmentiert ist oder zusätzlich andere Prozesse auf die Quellplatte zugreifen): Da gibt es einen Puffer, der erst einmal bis zu einer gewissen Größe gefüllt wird, bevor er Schreibvorgang beginnt. Umgesetzt auf deine Bedürfnisse müßtest du dir einen Speicherpuffer – meinetwegen dein dynamisches Array, von dem du oben schreibst – bereitstellen, der sich ab einem gewissen Befüllungsstand selbst speichert, ob jetzt in Datei oder
DB soll erstmal zweitrangig sein. Um das Verschieben beim Ringpuffern zu vermeiden (BitBlt ist dennoch sauschnell), könntest du einen zweiten Speicherpuffer einsetzen, der sich mit dem ersten abwechselt: Hat der erste seinen Sollfüllstand erreicht, biegt er die Ausgabe auf den anderen Puffer um, speichert sich selbst und leert sich anschließend. Der zweite Puffer arbeitet ebenso. Das ganze in entsprechende Threads ausgelagert sollte der hohen Geschwindigkeitsanforderung genügen ... 1600 Werte pro Sekunde sind jetzt auch nicht die Welt.
Und nach 24 Stunden (12h währen auch akzeptabel) können die älltesten wieder weg.
Außer es ist in diesem Zeitraum ein Fehler aufgetreten, der noch genauer untersucht werden muß.
Da ich wenig Erfahrung mit sowas habe fällt mir keine Lösung ein mitder ich sowas erreichen kann,
und wenn möglich sollte dann der Teil den der Elektriker sehen will ein Array sein oder in ein Array umgewandelt werden können
damit ich es schnell in das Chart bringe.
Um mich nochmal zu vergewissern: Die 1600 Signale pro Sekunde sollen nicht im laufenden Betrieb abgenommen und gespeichert werden, sondern erst dann, wenn der Elektriker mit seiner Software an der Maschine ist, nachdem ein Fehler aufgetreten ist. Oder muß der Elektriker dann doch den Zeitraum während der Produktion, in dem der Fehler auftrat, überprüfen und analysieren können? Egal wie die Antwort ausfällt, mir ist der Zwang für die hohe Geschwindigkeit der Darstellung noch immer nicht so recht klar geworden: Wenn die Signale in Echtzeit während der Produktion dargestellt werden sollen, frage ich mich natürlich, zu welchem Zweck dies erfolgen soll. Es macht ja keinen Sinn, denn die Signale müssen ja in erster Linie für die spätere Auswertung gespeichert werden. Mit dem schnellen Wechsel der Signale kann ein Beobachter, der da ab und zu mal draufschaut, doch nicht wirklich was anfangen, oder? Eine neben der Speicherung erfolgende Anzeige würde die Speicherung mehr oder weniger verzögern oder gar die kontinuierliche Speicherung der Werte während der Produktion behindern. so daß die gespeicherten Werte nicht mehr vollständig wären.
Die 'Ausreißer' sieht eben nur der Bedienmann an der Anlage und schreibt dann die Uhrzeit auf (oder drückte eine Taste).
Der Maschinenbediener muß also die ganze Zeit unbeirrt auf den Bildschirm starren? Wäre es da nicht sinnvoller, Ausreißer – das sind dann vermutlich die Fehler – gleich mit zu protokollieren bzw. im Protokoll als Ausreißer zu kennzeichnen? Tabellenfelder wären dann ein Timestamp, die Nummer des Sensors, der gemessene Wert und ein Boolean, der Auskunft darüber gibt, ob der Wert irgend einen Maximalwert überschreitet. Und beim Protokollieren bzw. beim Analysieren des Signals kann man doch auch gleich einen akkustischen Warnton einbauen, der darüber informiert, daß ein Fehler aufgetreten ist. Dieses stundenlange hochkonzentrierte Starren auf den Bildschirm hält doch kein Mensch wirklich durch und ist daher fehleranfällig.
Sobald dann der Elektriker wieder an die Anlage kommt (kann je nach Umständen auch mal einen halben Tag dauern).
Dann soll der Teil in der Datenbank oder Array oder ... noch da sein damit er diesen Teil dann in der Chart ansehen kann.
Zumindest für den Elektriker spielt die Geschwindigkeit der Darstellung dann keine Rolle mehr, denn der muß die Daten nicht in Echtzeit ablaufen sehen, um den Fehler einkreisen zu können. Er muß sich lediglich in den Daten bewegen (scrollen) können.