Autor Beitrag
bingo72
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 39



BeitragVerfasst: Do 22.02.07 07:50 
Hallo Delphi-Kollegen!!

Ich verwende AsyncPro um Daten von den USB-Schnittstellen zu lesen...alles ok!!
Da auf jedem PC die ComPort-Nummern anders sein können/werden, suche ich nach einer Möglichkeit, daß die Applikation selbstständig alle Ports scannt und den richtigen Port findet??
Bislang stellte ich dem Anwender eine Combo-Box zur Auswahl seines Anschlusses zur Verfügung...geht das auch auf eine automatische Art und Weise, sodaß sich darum der Anwender nicht kümmern muß??

LG
Thomas
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Do 22.02.07 09:19 
Hallo!

Nimm einfach ne Schleife 1 bis 255 und versuch jeweils zu initialisieren.
Das Ganze in Try-Except-Block.
Sollte es keine Exception werfen, weißt du, dass du auf diesen Port initialisieren kannst und andernfalls lässt es bleiben;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
for i:=1 to 255 do
begin
 try
  //Versuche zu initialisieren
 except
  continue; //Schleife fortsetzen
end;


Falls du initialisieren kannst, kannst du dann was an den Port senden und wenn du was zurückbekommst, mit dem du etwas anfangen kannst, weißt du, dass es dein Gerät ist.

LG
Stefan

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
bingo72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 39



BeitragVerfasst: Do 22.02.07 10:27 
Hallo Stefan!!

So in etwa hab ich das auch schon gemacht....

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TComPorts.ComPortTest;
var
  lStatusOK        : Boolean;
  lPortNr          : Byte;
  lMaxPortNr       : Byte;
begin
  lStatusOK := true;
  lPortNr := 0;
  lMaxPortNr := 128;

  repeat
    try
      CloseAccel;
      inc(lPortNr);
      AccelComPort.ComNumber := lPortNr;
      AccelComPort.
      InitAccel;
      StartAccel;
    except
    end;
  until (lPortNr = lMaxPortNr);
end;


Wie kann ich nun die repeat-Schleife anhalten, bis das OnTriggerAvail-Event ausgelöst wurde?? Denn wenn auch es sich um den richtigen Port handelt, dann braucht es eine gewisse Zeit bis der Event ausgelöst wird. In der Zwischenzeit wäre aber die Schleife schon x-mal durchgelaufen!!

LG
Thomas
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Do 22.02.07 10:48 
Du könntest eine Zeitverzögerung einbauen:

ausblenden Delphi-Quelltext
1:
delay(Intervall);					


LG
Stefan

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
bingo72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 39



BeitragVerfasst: Do 22.02.07 11:15 
Ja das wär eine Möglichkeit....nur is mir das zu unsicher...welchen Intervall nimmst Du dann?? Der eine Rechner schickt das schneller an den ComPort, weil er mehr Leistung hat oder gerade sonst nichts abzuarbeiten hat, als der andere PC!!
Es muß doch auch eine Möglichkeit geben, dies über Events zu lösen oder??
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Do 22.02.07 11:21 
Hmm..berechtigter Einwand...
Gibt das Trigger-Event irgendwas zurück?
True oder False?

Du könntest das Ganze in eine Art Waitstate setzen

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
 ...
 status:= 0;
 REPEAT
  case status of
   0: begin
       //Versuche zu Initialisieren
       inc(status);
      end;
   1: begin
       //Trigger-Event auslösen
       if Trigger = false then
        dec(status)
       else
        status:= 100;
     end;
  end;
 UNTIL (status = 100) or (COMport > max);


LG
Stefan

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
bingo72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 39



BeitragVerfasst: Do 22.02.07 13:02 
Das Trigger-Event wird nur ausgelöst, wenn es true ist .... soll heissen, der angesteuerte ComPort ist in der Lage, Daten zu empfangen. Blöderweise bekomme ich im umgekehrten Fall keine Benachrichtigung, daß zwar der ComPort tatsächlich angesprochen wurde, aber der Port nicht verwendet werden kann. Dein Code ist überzeugend, doch nur wenn ich in jedem Fall (Port kann verwendet werden := true/false) benachrichtigt werde, was leider bei mir nicht der Fall ist.

user profile iconZeitGeist87 hat folgendes geschrieben:
Hmm..berechtigter Einwand...
Gibt das Trigger-Event irgendwas zurück?
True oder False?

Du könntest das Ganze in eine Art Waitstate setzen

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
 ...
 status:= 0;
 REPEAT
  case status of
   0: begin
       //Versuche zu Initialisieren
       inc(status);
      end;
   1: begin
       //Trigger-Event auslösen
       if Trigger = false then
        dec(status)
       else
        status:= 100;
     end;
  end;
 UNTIL (status = 100) or (COMport > max);


LG
Stefan
bingo72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 39



BeitragVerfasst: Do 22.02.07 13:07 
Um es auf den Punkt zu bringen...

Das Problem ist, daß ich zur Zeit noch keine Möglichkeit gefunden habe, daß ich in jedem Fall ein Event ausgelöst wird!!?? Somit kann ich nicht unterscheiden, ob es einfach noch Zeit braucht, bis der Event ausgelöst wird, oder ob bei der momentanen Port-Nummer einfach kein Event ausgelöst wird.
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Do 22.02.07 13:52 
Sendet dein Gerät keine Daten raus?
Oder gibts die Möglichkeit einer Versionsabfrage?
Oder irgendwas, was du abfragen kannst, bei dem du auf jeden Fall etwas zurückbekommst.

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
bingo72 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 39



BeitragVerfasst: Do 22.02.07 14:02 
Hallo Stefan!!

Das Prinzip ist so aufgebaut, daß Daten erst von der Com gesandt werden, wenn man ein putchar('g') an den Port schickt.
Dies liefert dann aber nur die Daten wenn der Port verfügbar ist....sonst geht das putchar quasi ins leere....hab jetzt schon alle events durchprobiert!!

LG
Thomas
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Do 22.02.07 14:08 
Gut :)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
var empf: string;
begin
 empf:= '';
 status:= 0;
 REPEAT
  case status of
   0: begin
       //Versuche zu Initialisieren
       if Initialsierung = true then
        inc(status);
      end;
   1: begin
       //Daten senden
       SendeAnComPort(PutChar('g'));
       //Schau, ob etwas empfangen wurde
       empf:= LeseDatenVomComPort
       if length(empf) < 1 then
        dec(status)
       else
        status:= 100;
     end;
  end;
 UNTIL (status = 100) or (COMport > max);


LG
Stefan

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.