| Autor |
Beitrag |
bingo72
      
Beiträge: 39
|
Verfasst: 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
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: 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;
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| for i:=1 to 255 do begin try except continue; 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 
      
Beiträge: 39
|
Verfasst: Do 22.02.07 10:27
Hallo Stefan!!
So in etwa hab ich das auch schon gemacht....
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
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Do 22.02.07 10:48
Du könntest eine Zeitverzögerung einbauen: Delphi-Quelltext 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 
      
Beiträge: 39
|
Verfasst: 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
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: 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 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 inc(status); end; 1: begin 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 
      
Beiträge: 39
|
Verfasst: Do 22.02.07 13:02
|
|
bingo72 
      
Beiträge: 39
|
Verfasst: 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
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: 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 
      
Beiträge: 39
|
Verfasst: 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
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Do 22.02.07 14:08
Gut
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 if Initialsierung = true then inc(status); end; 1: begin SendeAnComPort(PutChar('g')); 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.
|
|
|