![]() |
Re: StringGrid mit Daten füllen und farblich Darstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Schade, als ich Dir eben geantwortet habe, hatte ich eine Blitzidee, von der ich dachte Sie lößt das Problem,
Leider nicht...
Delphi-Quellcode:
Im Anhang mal ein Screenshot, wo du sehen kannst, das der Counter der Datenbank sauber läuft, aber Datensätze (LfdNr) fehlen.
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var Daten : String; begin if Buffer = '' then begin ComPort1.ReadStr(Daten, Count); Buffer:=Buffer+Daten; Bufferverarbeitung; end; end; |
Re: StringGrid mit Daten füllen und farblich Darstellen
Hallo Jens,
bis Du sicher, dass die Daten alle sauber übertragen werden? Bis bald Chemiker |
Re: StringGrid mit Daten füllen und farblich Darstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, das bin ich,
Ich bin noch ein Stück weiter gekommen, das Problem, liegt im Zerstören der Globalen Var. DataMB256Plus
Delphi-Quellcode:
Setze ich diese Var. in der Procedure Bufferverarbeitung auf Leer, werden Datensätze zerstört,
DataMB256plus := '';
Setze ich diese Var. erst nach dem Eintrag in die Datenbank auf Leer, habe ich das Problem, das wenn eine Datensatz nicht richtig mit dem Wert 'Ereignis' anfängt, der Var. nie auf Leer gesetzt wird. Das Problem, liegt darin, das wenn Du dir mal den Datensatz anschaust, sieht man das nie ein saubere Anfang und ein sauberes Ende da ist, weil die Procedure
Delphi-Quellcode:
immer genau das ließt, was im Speicher ist.(Puffer der EMA).{Daten von COM-Schnittestelle lesen} procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer); Das heißt, das durch das Zerstören, je nach angefallenen Daten die Var. zerstört wird und somit noch nicht Übergeben Daten fehlen. Ich trage ja nur komplette Datensätze ein, um keinen Müll in der Datenbank zu haben. Von den Daten aus dem folgenden Screenshot werden somit der erste und letzte Datensatz getilt. Liegt aber nicht am Datensatz selber, sondern daran das ich ja die Var. leere, obwohl sie noch nicht geleer werden dürfte.. Ich weiß nur echt gerade nicht, wie ich das in den Griff bekommen soll. Am besten wäre, ich könnte schon beim einlesen nur jeweils einen Datensatzt aus dem Puffer der EMA holen. Weiß aber nicht wie oder ob es überhaupt geht. |
Re: StringGrid mit Daten füllen und farblich Darstellen
Hallo Jens,
ich weis ich stelle blöde Fragen, aber nur um das Problem einzugrenzen. Holst Du die Daten aus der EMA, oder werden sie von der EMA nachdem der Puffer in der EMA voll ist gesendet? Bis bald Chemiker |
Re: StringGrid mit Daten füllen und farblich Darstellen
Nein, ich hole die Daten, der Puffer ist ja auch immer unterschielich gefüllt. Ich hole die Daten ja über meine Komponente mit dem Ereignis
Delphi-Quellcode:
Ich weiß allerdings, leider nicht genau wann das in Kraft tritt. Aufjedenfall muss es so sein, das die Daten gehlt werden, weil die Datenmenge unterschiedlich ist.
{Daten von COM-Schnittestelle lesen}
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer); Daher auch die diverenzen bei den Fehlenden Datensätzen. Mal alle 5 mal alle 7 ist ja unterschiedlich. Hole ich aus dem Puffer der EMA 11 Datensätze, wovon der erste und der letzte nicht vollständig sind, werden 9 in die Datenbank eingetragen. Die andern beiden entfallen. |
Re: StringGrid mit Daten füllen und farblich Darstellen
Hallo Jens,
es muss gelingen eine Gemeinsamkeit zwischen den Datensätzen zu ermitteln. 1.) Bestehen die Datensätze immer aus der gleichen Anzahl Zeichen? 2.) Gibt es Zeichen (Zeichenreihenfolge) am Anfang des Datensatzes und am Ende? 3.) Gibt es eine gleichbleibende Zeitdifferenz zwischen den Datensätzen? Welche Komponente benutzt Du überhaupt? Bis bald Chemiker |
Re: StringGrid mit Daten füllen und farblich Darstellen
Ich nutzt die Komponente CPortLib (TComPort4Beta).
Ja ein Datensatz fängt immer mit 'Ereignis:' an und endet immer mit #13#10#13#10 Die einzelnen Zeilen der Datensätze sind nur mit #13#10 getrennt. Über diese Zeichen, nehme ich den Datensatz ja auch schon auseinander. Das Problem, was ja nur da ist, das die Schnittstelle nicht bei Ereignis anfängt und bei #13#10#13#10 aufhört. Es wird gelesen was gerade da ist. Beispiel: Ich lese 'atum:21.02.2009.................................. ...................... Ereignis.......................................... .......................................#13#10#13#1 0 Ereignis.......................................... .......................................#13#10#13#1 0 Ereignis.......................................... .......................................#13#10#13#1 0 Ereignis................................Extern' Daten werden verarbeitet Nächstes lesen 'Scharf........................................... ... Ereignis.......................................... .......................................#13#10#13#1 0 Ereignis.......................................... .......................................#13#10#13#1 0 Ereignis.......................................... .......................................#13#10#13#1 0 Ereignis................................ Man sieht, das erste 'Extern', gehört aber noch zum 'Scharf' vom neuen lesen. Das heißt es gehen keine Daten verloren, der Puffer wird nur nicht gleichmäßig ausgelesen. Und da ich ja keinen Müll (Unvollständigen Datensätze) in meiner Datenbank haben möchte, entfallen somit immer der erste und letzte (Unvollständige Datensatz) |
Re: StringGrid mit Daten füllen und farblich Darstellen
Hallo Jens,
es geht mir um folgendes, es muss ein Event gestartet werden wenn ein vollständiger Datensatz im Buffer vorhanden ist. Dieses Event muss den Datensatz abholen und den Buffer genau um diese Zeichen löschen. Wie groß ist der Buffer? Bis bald Chemiker |
Re: StringGrid mit Daten füllen und farblich Darstellen
Ja, so irgendwie, das Event, wäre kein Problem. Aber mir fehlen die Kenntnisse, wie ich das angehe. Wie lese ich aus der Variablen Buffer immer bis zum nächsten Datensatz, und wenn kein vollständiger mehr kommt, wieder den Puffer.
Ich denke mir das in etwa so...
Delphi-Quellcode:
Jetzt müsste ich aber die Var. Buffer so lange bearbeiten, bis keine Vollständiger Datensatz mehr da ist, diesen aber unvollständigen Datensatz Zwischenspeichern, danach die Var. Buffer leeren und neu einlesen. Durch die if-Abfrage beim einlesen, ist ja schonmal gewährleistet, das Buffer wirklich leer ist, bis neu gelesen wird.
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var Daten : String; Satz : String; begin if Buffer = '' then //Durch die Abfrage ob Buffer leer ist, wird erreicht, das nicht neu gelesen wird. begin ComPort1.ReadStr(Daten, Count); Buffer:=Buffer+Daten; Bufferverarbeitung; end: end; Nachdem, aber Buffer neu eingelesen worden ist, muss natürlich der dann unvollständige erste datensatz natürlich wieder dem Zwischenspeicher zugeführt werden, und als erstes abgearbeitet werden. Ich denke die Idee ist gut, aber es fehlt mir total an der Ausführung. :gruebel: Zitat:
|
Re: StringGrid mit Daten füllen und farblich Darstellen
Hallo Jens,
wie viel Byte passen in den Buffer, oder welcher Datentype ist Buffer. Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz