![]() |
Problem mit Async Pro
Hallo, ich habe folgendes Problem.
Wir haben eine Alarmanlage, die Ihre Logdaten (wer hat wann wo nen Alarm ausgelöst, Tür geöffnet etc) über die Serielle Schnittstelle an einen Drucker verschickt. Statt des Druckers möchte ich nun einen PC dort anschließen, die Daten einlesen und in einer Datenbank speichern. Dazu nutze ich die Komponente Async Pro.... Im Grunde funktioniert es auch ganz gut, d.h. es kommen Daten an, die auch ausgelesen werden können...... Bei vielen Daten schnellt aber die Systemauslastung nach oben und das Programm hängt sich auf. Hat jemand Erfahrung damit oder weiss sonst vielleicht woran das liegen könnte? das Event sieht etwa so bei mir aus :
Delphi-Quellcode:
Ich hatte schon vermutet, dass das Memo vielleicht nicht mit dem schreiben "hinterherkommt" ?
procedure TForm1.ApdComPortTriggerAvail(CP: TObject; Count: Word);
var i : integer; chr : char; begin for i := 1 to count do begin chr := ApdComPort.GetChar; memo.Text := memo.Text + chr; end; end; |
Re: Problem mit Async Pro
Hi!
Bei mir klappt der Empfang von der Com einwandfrei so:
Delphi-Quellcode:
Probleme mit der Geschwindigkeit hatte ich damit noch nie. Wie viele Zeichen kommen
procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var I : Word; C : Char; S : String; begin S := ''; for I := 1 to Count do begin C := ApdComPort1.GetChar; S := S + C; end; Memo1.SelText := (s); end; denn da über die Com an? Viele Grüße... |
Re: Problem mit Async Pro
hallo,
schonmal ne gute idee erst den string zusammenzufügen und erst dann ins memo zu schreiben. Wieviele Zeichen genau ankommen kann ich nicht sagen (hab ja nicht gezählt) :) es kommen aber auch viele unleserliche zeichen an, bis das memo etwa halb voll ist, dann steigt nur noch die Prozessorlast , bis 100%. |
Re: Problem mit Async Pro
hmm also ich mach das immer direkt war noch nie ein Problem
Delphi-Quellcode:
Ich nehme aber auch oft das AdTerminal dem kann man direkt selber sagen dass es einfach alles was über den AdComPort kommt dann anzeigen sollfor i := 0 to Count - 1 do begin memo1.Text := memo1.Text + com1.GetChar; end; |
Re: Problem mit Async Pro
@ perle
Hast du schonmal getestet die Zeichen temporär in eine Datei zu schreiben? Geht der Prozessor da genauso in die Knie? Viele Grüße.... |
Re: Problem mit Async Pro
Hallo,
1.) ist doch logisch, dass du diese Spitzen bekommst, wenn du mit getchar einliest. Bei jedem Zeichen wird die Prozedur aufgerufen. Kommen viele Zeichen wird die Prozedur oft aufgerufen. 2.) getchar funktioniert ab und zu nicht richtig. Steht bei sourceforge in der Fehlerliste! Nimm: port1.GetBlock(u,count); u ist der String in den du die Zeichen haben willst und count ist die Anzahl der Zeichen, die gelesen wurden. Funktioniert bei mir einwandfrei. Rainer |
Re: Problem mit Async Pro
danke, ich werde das gleich mal probieren
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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