AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Verwendung der Komponente: Timer

Ein Thema von rulix · begonnen am 25. Okt 2009 · letzter Beitrag vom 25. Okt 2009
Antwort Antwort
rulix

Registriert seit: 18. Sep 2008
Ort: Wien
7 Beiträge
 
Turbo Delphi für Win32
 
#1

Verwendung der Komponente: Timer

  Alt 25. Okt 2009, 10:40
Ich verstehe nicht, warum das lesen und darstellen von Daten in einer procedure Timer1Timer stattfindet, entsprechend der Source, die ich eben fand.
Warum muss man die Timerzeit (100ms)ablaufen lassen, ehe man ein Byte lesen darf.
Leider steht im Refernzhandbuch nur drin, was der Timer macht, nicht wann man ihn einsetzt, außer dem OnTimer Ereignis. Aber da steht ja nix davon in dieser Source.
Bin eben noch Anfänger, total privat.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
  var Dat: Integer;
begin
  while INBUFFER > 0 do begin
    Dat := ReadByte;
    MemoBinIn.Lines[LineBin] := MemoBinIn.Lines[LineBin] + IntToStr(Dat)+ ' ';
    if length (MemoBinIn.Lines[LineBin]) > 40 then begin
      MemoBinIn.Lines.add ('');
      LineBin := MemoBinIn.Lines.count;
    end;
    if Dat <> 10 then MemoTextIn.Lines[LineText] := MemoTextIn.Lines[LineText] + Chr(Dat);
    if Dat = 13 then begin
      MemoTextIn.Lines.add ('');
      LineText := LineText +1
    end;
    if length (MemoTextIn.Lines[LineText]) > 25 then begin
      MemoTextIn.Lines.add ('');
      LineText := LineText +1
    end;
    if INBUFFER > 500 then ClearBuffer;
  end;
Ist das der übliche Weg?
Wer hilft mir bitte auf die Sprünge?

[edit=SirThornberry]code-tags durch delphi-tags ersetzt - Mfg, SirThornberry[/edit]
LG Rudi
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Verwendung der Komponente: Timer

  Alt 25. Okt 2009, 11:24
Hi,

ich weiss ja nicht, wozu dieser Code dient - aber effizient ist er in der Tat nicht.
Um was für ein Programm handelt es sich denn da ?

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.275 Beiträge
 
Delphi 12 Athens
 
#3

Re: Verwendung der Komponente: Timer

  Alt 25. Okt 2009, 11:28
Guten Morgen,

du hast das schon richtig erkannt. Timer1Timer wird entsprechend der Einstellung (in diesem Fall 100ms) ausgeführt. D.h. unabhängig welcher Code in der Procedure steht wird sie alle 100 ms aufgerufen. Der Code in der Prozedur liest ein Byte, und verarbeitet es im Memo (ganz grob )
Warum das lesen in dem Timer ausgeführt wird kann ich dir auch nicht sagen. Vieleicht hatte es hardwaretechnischen Gründe. Wenn ich deine Frage richtig interpretiert habe ob das immer so mit dem Timer sein muß, ein klares NEIN

  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#4

Re: Verwendung der Komponente: Timer

  Alt 25. Okt 2009, 12:00
Das Problem ist hier, daß du einen Code von einem Programm hast und nicht weißt was dort warum passiert.
Wir haben hier immer nur Bruchstücke davon und wissen dagegen dann nicht was in den restlichen Programmteilen los ist, also können wir praktisch garnicht viel helfen und höchtens mal etwas raten.

INBUFFER: also irgendwo anders wird da ein Puffer gefüllt
und abhängig davon würde ich womöglich an dieser Stelle mal ansetzen ... denn ich würde da die Auswertung gleich mit starten.
Und wenn das wegen 'ner Zeitkritschien Angelegenheit nicht geht, dann würde ich die Prozedur im Timer etwas optimieren ... eventuell einfach dadurch, daß gleich mehrere/alle Bytes ausgewertet werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Verwendung der Komponente: Timer

  Alt 25. Okt 2009, 13:37
Naja, die Auswertung beschränkt sich auf Zeilenumbrüche....

ob das nicht nur ein Log oder sowas ist ?
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
rulix

Registriert seit: 18. Sep 2008
Ort: Wien
7 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Verwendung der Komponente: Timer

  Alt 25. Okt 2009, 15:52
Zitat von thkerkmann:
Hi,

ich weiss ja nicht, wozu dieser Code dient - aber effizient ist er in der Tat nicht.
Um was für ein Programm handelt es sich denn da ?

Gruss
Die Routine holt ein Byte ab und stellt sie in einem Memofeld dar.
Die Byte routine ist in einerm Modul rscom.pas definiert. Da stehen Sachen, die nach API von MS klingen.
Es geht um eine Kommunikation mit einem AVR ATtiny2313.
Der sendet bytes die in einem Memofenster dargestellt werden.

Eigentlich würde ich gerne bytes vom uC in einer Warteschleife empfangen, aber aus der muss ich ja irgendwie auch rauskommen können; also hat der Schreiber dieser Routine so was wie einen Softwareinterrupt gemacht, denk ich, nachdem ich jetzt weiss, dass mit 1o Hz abgefragt wird.
Im Prinzip ist es so ähnlich wie ein Hyperterminal. Ich nehme an, dass ein byte irgendwann eintrifft und erst mit Readbyte() abgeholt wird. Was passiert eigentlich, wenn es nicht abgeholt wurde und ein 2. byte eintrifft?
Steckt dann alles, oder wird das 1. byte verworfen. Das sind Innereien von denen ich keine Ahnung habe.
Was der uC dann machen würde, weiss ich genau, aber Delphi und API ist mir unklar. Muss ich das überhaupt wissen?

Zur Verdeutlichung noch einige Zeilen aus der rscom.pas.

Code:
function INBUFFER (): DWORD;
var Comstat: _Comstat;
    Errors: DWORD;
begin
  if ClearCommError (PortHandle, Errors, @Comstat) then
  INBUFFER := Comstat.cbInQue else INBUFFER := 0;
end;

function READBYTE(): Integer;
var Dat: Byte;
    BytesRead: DWORD;
begin
 ReadFile(PortHandle,Dat,1,BytesRead,NIL);
 if BytesRead = 1 then Result:=Dat else Result := -1;
end;
Hat jemand einen Vorschlag für mich, wie ich das anders machen könnte?
Vielleicht ein Vorschlag, wenn ich nicht zu aufdringlich bin, von dir, haentschman?
Ich danke jedenfalls für die rege Beteiligung.
LG Rudi
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:21 Uhr.
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