Delphi-PRAXiS
Seite 7 von 11   « Erste     567 89     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi StringGrid mit Daten füllen und farblich Darstellen (https://www.delphipraxis.net/128425-stringgrid-mit-daten-fuellen-und-farblich-darstellen.html)

Jens Hartmann 27. Feb 2009 20:45

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Buffer ist vom Datentyp String

Delphi-Quellcode:
var
  Form1: TForm1;
  Buffer:String;
  Zeile :String;
  DataMB256plus : String;
wie die beiden anderen Globalen Var. auch

Jens Hartmann 27. Feb 2009 20:52

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Achso, der max. Datensatzgröße die aus dem Puffer gelesen werden kann, ist übrigens

1024 Byte

Chemiker 27. Feb 2009 21:40

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Hallo Jens,

Delphi-Quellcode:
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
was wird in Count angegeben?

Bis bald Chemiker

Jens Hartmann 27. Feb 2009 21:51

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Count, ist die aktuelle Länge vom momentan vorhandene Puffer der EMA

Wenn ich z.B. folgendes in die Procedure eintrage, frage ich nur ein Zeichen aus dem Puffer ab.

Delphi-Quellcode:
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
  Daten : String;
begin
  if Buffer = '' then
  begin
  ComPort1.ReadStr(Daten, 1); //So wird ein Zeichen gelesen
  Buffer:=Buffer+Daten;
  Bufferverarbeitung;
  end;
end;

Chemiker 27. Feb 2009 21:56

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Hallo Jens,

ich denke das Count der Buffer von der seriellen Schnittstelle ist. Welchen Wert stellst Du als Puffer für die seriellen Schnittstelle ein?

Bis bald Chemiker

Jens Hartmann 27. Feb 2009 22:05

Re: StringGrid mit Daten füllen und farblich Darstellen
 
In der Komponente ist einen größe von 1024 Byte eingestellt.

Die Var. Buffer ist Global und vom Typ String, und für die Übergabe der Verarbeitung da.

Puffer ist keine Var. mit Puffer bezeichne ich nur die momentan in der EMA vorhandenen Daten

Dieser Puffer wird beim einlesen von der COM Schnittstelle an die Var. Buffer übergeben.

In der Anweisung habe ich nur Count stehen, was auslößt, das immer der komplett vorhandene Puffer gelesen wird

Chemiker 27. Feb 2009 22:58

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Hallo Jens,

Zitat:

Zitat von Jens
In der Anweisung habe ich nur Count stehen, was auslößt, das immer der komplett vorhandene Puffer gelesen wird

Dieses Event wird ausgelöst, wenn im Puffer von der seriellen Schnittstelle 1024 Byte vorhanden sind, nicht von der EMA, woher soll das die serielle Schnittstelle wissen?

Bei der Datensatz-Verarbeitung hast Du wahrscheinlich immer nach 1024 Byte Schwierigkeiten, weil unter Umständen zum Schluss keine vollständiger Datensatz mehr vorhanden ist.

Das bedeutet Du kannst den Buffer nicht einfach löschen, weil schon ein halber Datensatz vorhanden ist und dieser halber Datensatz würde dann mit gelöscht.
Es muss also dieser halber Datensatz irgendwie zwischen gespeichert werden und beim Auslösen des Event vor dem neuen Buffer gesetzt werden.

Bis bald Chemiker

Jens Hartmann 28. Feb 2009 09:15

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Das ist Richtig, aber wenn der Datensatz immer 1024Byte groß ist, wie kann es dann sein das er unterschiedlich lang ist.

Im Anhang, habe ich mal 2 Datensätze abgezeichnet. Es ist z.B. auch so, das beim 1 Datensatz der Count 1024 ist.

Wie bekomme ich raus, durch was das Event
Delphi-Quellcode:
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
gestarte wird.

[EDIT] In einem anderen Thread, habe ich das hier gefunden..
Delphi-Quellcode:
Example (inside OnRxChar)

Code: markieren
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
  Str: String;
begin
  ComPort1.ReadStr(Str, Count);
  Label1.Caption := Str;
end;


Example (outside OnRxChar)
Delphi-Quellcode:
Code: markieren
var
  Str: String;
begin
  // set timeouts here or at design time
  ComPort1.ReadStr(Str, NumberOfBytes);
  Label1.Caption := Str;
end;

Sobald was an der Seriellen ankommt, wird die Caption gesetzt. Du brauchst also kein extra Button um es einzuschalten.

Jetzt musst DU nur noch einen Weg finden, bei klick auf einen Button, die Cation des Labels nicht mehr geändert werden kann.

Das müsste ja, bedeuten, wenn ich meine Ser. Schnittstelle schließe sobald ich den Buffer gelesen habe, und erste nach leerem Buffer wieder öffne, könnte es gehen.

Chemiker 28. Feb 2009 12:40

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Hallo Jens,

grade beim kleinen Buffer-Inhalt kann man sehr deutlich sehen, worauf ich hinaus will, am Anfang steht ‚ignis:…. .
Das was im Anhang ist, ist nicht der Datensatz, sondern der Buffer-Inhalt.

Das was Zwischen „Ereignis“ bis Ereignis steht ist das was Du brauchst und was einen Datensatz entspricht.

Zitat:

Zitat von Jens
Das müsste ja, bedeuten, wenn ich meine Ser. Schnittstelle schließe sobald ich den Buffer gelesen habe, und erste nach leerem Buffer wieder öffne, könnte es gehen.

Das wird wahrscheinlich nicht funktionieren, es sei denn, dass Dein Programm ein Befehl absetzt das es nicht bereit ist und zur EMA schickt.

Das sieht bisher für mich so aus, als wenn normalerweise die Events zu einem Drucker geschickt werden, dass ist auch der Grund warum Du mit einem Memo keine Schwierigkeiten hast (solange genügend Speicher für die Daten vorhanden ist).

Zu prüfen ist, ob es der EMA möglich ist die gesendeten Daten zu markieren, üblich ist das mit STX (#2) und ETX (#3). STX = Start Text ; ETX = End Text

Bis bald Chemiker

Jens Hartmann 28. Feb 2009 16:13

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich kann in der EMA auch die Funktion DataSafe aktivieren, allerdiings kann ich dann gar keiner Daten lesen.

Was allerdings, dann im Debugmodus zu sehen ist, das da wirklich irgendwas wie #2 und #3 erscheind.

Das Problem ist nur, da mein Programm ja flexible bleiben soll, wäre die Drucker Variante schon besser, weil ich mir da sicher bin, das alle unsere Systeme dies können, weil alle einen Druckerport haben.

Es gibt leider auch Systeme, da kann man am Drucker gar nichts programmieren, der ist vom Hersteller aus eingestellt und fertig


Das Interresante, ist ja auch, ist habe das Programm jetzt mal laufen lassen, ist normaler Betrieb, und die Daten werden nur in kleinen Mengen geliefert, Gibt es keine Problem. (Anhang Datensätze)

Das heißt, wenn ein normales Datenaufkommen vorhanden ist, werden alle Datensätze eingetragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 Uhr.
Seite 7 von 11   « Erste     567 89     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz