AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Endlosschleife mit Timer

Ein Thema von Crazy-MF · begonnen am 16. Feb 2005 · letzter Beitrag vom 17. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2      
Crazy-MF

Registriert seit: 16. Mär 2004
Ort: Wolfenbüttel
19 Beiträge
 
Delphi 5 Enterprise
 
#1

Endlosschleife mit Timer

  Alt 16. Feb 2005, 22:29
Hallöchen,

war zwar lange nicht mehr da, hoffe aber das man mir trotzdem hilft.

Und zwar sende ich gerade über die TrackBar über den LPT1 an ein Gerät die Zahlen 1-30 im Hexadezimalen Zahlensystem.
Weil ich aber nicht den ganzen Tag vor meinem Notebook sitzen möchte um die TrackBar im Sekundentakt weiter zu schieben würde ich das gerne in einer Endlosschleife realisieren und dabei den Zeittakt in einem Feld bestimmen können.

Sollte dann in etwas so aussehen, dass ich ein Editfeld habe in dem ich den Takt eingebe und zwei Button einer zum starten der Endlosschleife und einen zum stoppen.


Wäre sehr nett wenn mir einer dabei helfen kann. Weiß nämlich nicht, ob ich das mit Delphi 5 überhaupt machen kann und wenn dann mit Timer oder einer anderen zeitgebenden Komponente.

Vielen Dank
Crazy-MF
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Endlosschleife mit Timer

  Alt 16. Feb 2005, 22:34
Dann lese doch vor dem Start den Takt aus dem Edit-Feld aus und setze den Timer-Intervall dann auf diesen Wert. Durch den Klick auf den Start/Stop-Button wird Timer.Enabled auf True/False gesetzt und somit der Timer gestartet bzw. angehalten.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Crazy-MF

Registriert seit: 16. Mär 2004
Ort: Wolfenbüttel
19 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Endlosschleife mit Timer

  Alt 16. Feb 2005, 22:41
Tja das Problem bei der Sache ist dann nur noch:

Die Schleife wird bei dem Startbutton gestartet und nach dem der erste Hexwert gesendet ist soll er eine Pause einlegen, die ich im Editfeld eintrage, dann erst soll der nächste wert gesendet werden.
und der stoppbutton soll nur vorsorglich und zum ändern des taktes sein.

kann sein das ich das falsch erklärt habe.
danke aber für deinen tipp
Crazy-MF
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Endlosschleife mit Timer

  Alt 16. Feb 2005, 23:08
Zitat von Crazy-MF:
Tja das Problem bei der Sache ist dann nur noch:

Die Schleife wird bei dem Startbutton gestartet und nach dem der erste Hexwert gesendet ist soll er eine Pause einlegen, die ich im Editfeld eintrage, dann erst soll der nächste wert gesendet werden.
...
Aber genau das macht ein Timer doch: er führt die Aktion aus, die in der Ereignisprozedur OnTimer festgelegt ist und wartet danach den in der property Intervall festgelegten Zeitraum, bevor die Prozedur wieder ausgeführt wird.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Crazy-MF

Registriert seit: 16. Mär 2004
Ort: Wolfenbüttel
19 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Endlosschleife mit Timer

  Alt 16. Feb 2005, 23:25
Ja stimmt. sorry.

also mein quelltext sieht ungefähr so aus:

Code:
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
function PortIn(Port : Word): Byte; stdcall; external 'io.dll';

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  If TrackBar1.Position = 0 then
    begin
      PortOut($378,$00);
    end;
  If TrackBar1.Position = 1 then
    begin
      PortOut($378,$01);
    end;
  If TrackBar1.Position = 2 then
    begin
      PortOut($378,$02);
    end;
das sind jetzt nur die ersten 3 das geht so weiter bis 30.
Wie soll ich denn jetzt genau mit der Timerkomponente eine schleife programmieren, damit er nach jedem mal wenn er den wert geändert hat zeit x wartet und dann den nächsten sendet???
Crazy-MF
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Endlosschleife mit Timer

  Alt 16. Feb 2005, 23:41
Zitat von Crazy-MF:
Ja stimmt. sorry.

also mein quelltext sieht ungefähr so aus:

Code:
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
function PortIn(Port : Word): Byte; stdcall; external 'io.dll';

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  If TrackBar1.Position = 0 then
    begin
      PortOut($378,$00);
    end;
  If TrackBar1.Position = 1 then
    begin
      PortOut($378,$01);
    end;
  If TrackBar1.Position = 2 then
    begin
      PortOut($378,$02);
    end;
das sind jetzt nur die ersten 3 das geht so weiter bis 30.
Wie soll ich denn jetzt genau mit der Timerkomponente eine schleife programmieren, damit er nach jedem mal wenn er den wert geändert hat zeit x wartet und dann den nächsten sendet???
Hast wohl was gegen die Timer? Dann hier eine Lösung ohne Timer:
Also setze auf deine Form ein Edit (für die Verzögerungszeit), zwei Buttons (1. zum starten, 2. zum stoppen) und die TrackBar.
Dann noch folgender Code:
Delphi-Quellcode:
procedure Warten(ms: Cardinal);
var zeit: Cardinal;
begin
 zeit:= GetTickCount;
 while ((GetTickCount-zeit)<ms) do
  Application.ProcessMessages;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Schleife:= True;
 Senden;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Schleife:= False;
end;

procedure Senden;
var i: Integer;
    delay: Cardinal;//Verzögerung in Millisekunden
begin
 try
  delay:= StrToInt(Form1.Edit1.Text);
 except
  delay:= 1000;
 end;
 i:=0;
 while (Schleife and (i<=30)) do begin
  i:= i+1;
  PortOut($378,i);
  Warten(delay);
 end;
 Schleife:= False;
end;
So, fertig.
Statt in der Prozedur senden die Variable i hochzuzählen, kannst du auch die TrackBar.Position erhöhen und dann diese senden.
Die Variable Schleife ist von Typ Boolean und global deklariert. Sie sollte im OnCreate-Ereignis der Form1 auf False gesetzt werden (ist aber nicht unbedingt nötig).

MfG
Binärbaum

//Edit: kleinen Fehler im Quelltext berichtigt
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Crazy-MF

Registriert seit: 16. Mär 2004
Ort: Wolfenbüttel
19 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: Endlosschleife mit Timer

  Alt 17. Feb 2005, 09:17
Ja danke, das klappt soweit. Aber ich muss die Werte in Hex an den Port senden und er zählt jetzt dezimal hoch.

WAS TUN?

bis Port($378,09) kommt er ja aber dann müsste er ja anders senden?
Crazy-MF
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Endlosschleife mit Timer

  Alt 17. Feb 2005, 12:31
Zitat von Crazy-MF:

Wie soll ich denn jetzt genau mit der Timerkomponente eine schleife programmieren, damit ...
Wieso Schleife im Timer progammieren .. der Timer an sich ist ja schon eine art Endlosschleife ... nur, daß sie nicht nach ende der Procedure sonder nach einem bestimmten Intervall neu gestartet wird ...
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Endlosschleife mit Timer

  Alt 17. Feb 2005, 14:20
Zitat von Crazy-MF:
Ja danke, das klappt soweit. Aber ich muss die Werte in Hex an den Port senden und er zählt jetzt dezimal hoch.

WAS TUN?

bis Port($378,09) kommt er ja aber dann müsste er ja anders senden?
Also die Prozedurdeklaration ist doch folgende:
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll'; Das heißt, es wird ein Wert vom Typ Byte an den ausgewählten Port gesendet. Ob man den Wert nun dezimal oder als den entsprechenden Hex-Wert angibt, dürfte ziemlich egal sein. Letztlich ist das sowieso alles binär codiert, also wird sowohl aus der 10 im Dezimalsystem oder $A im Hexadezimalsystem der gleiche Binärcode: 1010.
Also ist es egal, welchen Wert man angibt.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Crazy-MF

Registriert seit: 16. Mär 2004
Ort: Wolfenbüttel
19 Beiträge
 
Delphi 5 Enterprise
 
#10

Re: Endlosschleife mit Timer

  Alt 17. Feb 2005, 15:14
okay okay. jetz funzt es.
ich habe meine oberfläche mit dem editfeld und 2 button
ich gebe meinen intervall an und drücke button1 und er läuft los. sendet brav über lpt1 die daten und nach jedem datenabschnitt unterbricht er für zeit x. aber endlos läuft er nicht. er bleibt nach 30 stehen und fängt nicht wieder von 0 an. wenn ich das aber alles in eine schleife setze und diese auf unedlich laufen lasse kackt alles ab.

hier mal der code:

Delphi-Quellcode:
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
function PortIn(Port : Word): Byte; stdcall; external 'io.dll';

procedure Warten(ms: Cardinal);
var zeit: Cardinal;
begin
  zeit := GetTickCount;
  while ((GetTickCount-zeit)<ms) do
    Application.ProcessMessages;
end;

procedure Senden;
var i: Integer;
    delay: Cardinal; //Verzögerung in Millisekunden
begin
  try
    delay := StrToInt(Form1.Edit1.Text);
  except
  delay := 1000;
end;

Form1.ProgressBar1.Position := 0;
i := 0;
  while (Schleife and (i<30)) do
  begin
    i:= i+1;
    PortOut($378,i);
    Warten(delay);
    Form1.ProgressBar1.Position := Form1.ProgressBar1.Position +1;
  end;
  Schleife := False;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Schleife := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Schleife := True;
  Senden;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Schleife := False;
end;
vielleicht sieht jetzt einer meinen fehler

danke
Crazy-MF
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:41 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