AGB  ·  Datenschutz  ·  Impressum  







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

Dynamisch ComPort ermitteln...

Ein Thema von bingo72 · begonnen am 21. Feb 2007 · letzter Beitrag vom 23. Feb 2007
Antwort Antwort
Seite 1 von 3  1 23      
bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#1

Dynamisch ComPort ermitteln...

  Alt 21. Feb 2007, 13:46
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dynamisch ComPort ermitteln...

  Alt 21. Feb 2007, 13:47
dann müsstest du wissen woran du erkennst ob du den richtigen Comport hast. Und das hängt ja dann vom Gerät ab. Und was ist wenn er Nutzer mehrere Geräte angeschlossen hat? Dann könnte er nicht auswählen welches er nutzen will.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#3

Re: Dynamisch ComPort ermitteln...

  Alt 21. Feb 2007, 14:24
Hintergrund meiner Frage ist folgender:

Eine USB-GPS-Maus sowie ein Bewegungssensor (ebenfalls über USB) hängen über einen Hub an meinem Laptop. Hier ist es ja klar, an welchen Port welcher Sensor sitzt. Nur wenn ich meinen Hub an einen anderen Laptop hänge, dann vergibt Windows unter umständen andere Port-Nummern. Nun müßte der Anwender, der in der Regel ein Laie ist, herausfinden welcher Sensor, welche Port-Nummer hat.
Und diese Arbeit will ich ihm abnehmen...

Den richtigen Comport würde ich wahrscheinlich, an der Art der erhaltenen Werte erkennen können.....beim Bewegungssensor sind es Realwerte, beim GPS sind es NMEA-String-Sätze....find i zwar auch ned einen guten Ansatz, aber zumindest müßte sich das auf diese Weise unterscheiden lassen??!!

Oder bietet für genau mein Anliegen bereits AsyncPro alle Features und ich weiß sie nur nicht??
  Mit Zitat antworten Zitat
bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#4

Re: Dynamisch ComPort ermitteln...

  Alt 22. Feb 2007, 06:44
Hatte noch keiner dieses Problem??
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Dynamisch ComPort ermitteln...

  Alt 22. Feb 2007, 07:00
Hallo Bingo72,

du kannst das Thema imho nur damit lösen, in dem du in einer sogenannten Initialisierungsprozedur folgendes tust:

- alle vorhandenen Com-Ports finden,
- beim ersten beginnend jeden Port öffnen,
- auf initialisierung deiner Endgeräte eine definierte Zeit warten,
- erhaltenen Traffic auswerten welches deiner Geräte passt oder Timeout abwaren,
- erkannte eigenen Geräte auflisten,
- Kunden Auswahl bestätigen lassen.

Das setzt voraus, dass deine Geräte nach öffnen des Ports automatisch Daten schicken. Deine GPS-Maus sollte dies tun (ich glaube NMEA-Protokolle). Läßt sich ein Port nicht öffnen, ist er von einer anderen Anwendung belegt. Diese Exception mußt du abfangen und entsprechend verarbeiten. Werden mehrere Geräte des richtigen Typs erkannt bietest du dem anwender eine Auswahl an.

Sollten deine Geräte auf eine spezielle Sequenz antworten, so kannst du diese natürlich auch auf jeden Port senden. Damit entsteht aber das Problem, dass Geräte die diesen nicht verarbeiten können Sachen tun die nicht erwünscht oder gut sind. Aus diesem Grund würde ich die passende Methode vorziehen.

Wie man zu den eingerichteten Com-Ports die dazugehörigen installierten Treiber erkennt weis ich leider nicht. Sollte das möglich sein und diese speziell für deine Endreräte eingerichtet sein, so besteht auch die Möglichkeit diese zu erkennen und eine entsprechende Zuordnung zu setzen. Imho benötigt eine GPS-Maus aber keinen speziellen Treiber. Somit müßte sich diese Variante ausschließen.

Gruß oki
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Dynamisch ComPort ermitteln...

  Alt 22. Feb 2007, 07:09
... normalerweise macht man soetwas nicht, das ist zu unsicher. Wir beschäftigen uns seit 20 Jahren mit dem Thema und verpassen unseren Applikationen einen Konfigurations-Dialog, in dem der Anwender einträgt, an welchem Com-Port welches Gerät hängt. Nebenbei wird hier noch Baudrate, Start-Stop Bits, Parität und Flusskontrolle eingestellt.

In deinem speziellen Fall kannst Du versuchen, über eine Heuristik genau deine beiden Geräte zu finden. Das dürfte sogar funktionieren, zumal du genau weisst, was rüberkommen muss. Diese Vorgehensweise wurde ja eben schon von oki erläutert.

Aber Eins verstehe ich nicht: USB und COM-Ports, wie passt das zusammen?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#7

Re: Dynamisch ComPort ermitteln...

  Alt 22. Feb 2007, 07:20
Hallo Oki!!

Danke für Deine rasche Antwort....so in die Richtung hab ich mir das auch gedacht...
Ich hab mal sowas in die Richtung ausprobiert:

Delphi-Quellcode:
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;
      InitAccel;
      StartAccel;
    except
    end;
  until (lPortNr = lMaxPortNr);
end;
Kurz zur Erklärung:
Ich starte im repeat-Teil mit Com-Nr: 1 --> im Init-Teil wird nur der Port geöffnet und bei StartAccel wird ein 'G' an den Port geschickt, der wenn der Port verfügbar ist ein OnTriggerAvail-Event auslöst....dort hab ich mal zu Testzwecken einen Breakpoint gesetzt. Dort soll später dann mal eine Abbruchbedingung eingebaut werden, wenn es der richtige Port ist.
Ganz interessieren würde mich, wie man in der repeat-Schleife so einen Timeout abwarten kann, denn auch wenn es der richtige Port ist, der Event wird erst zeitverzögert ausgelöst. In diesem Zeitraum muß ich die repeat-Schleife allerdings anhalten, denn sonst bin ich schon längst bei einer weit höheren Port-Nr, als jener die ursprünglich den Event ausgelöst hat!!
Bitte nochmals um geniale Ideen....

LG
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#8

Re: Dynamisch ComPort ermitteln...

  Alt 22. Feb 2007, 07:22
Erstmal ein servus!
Doch, ich arbeite mit einem RocketPort mit bis zu 16 zusätzlichen Ports! (alles RS232 oder RS485)
Über die Ports werden u.a. Scanner von verschiedenen Herstellern angesteuert.
Den Anwender das entscheiden zulassen ist hier eine gewagte sache!
1. Zuviele möglichkeiten
2. Scanner sind zuähnlich
3. der Anwender ist zulangsam und spätestens nach dem zweiten mal völlig genervt!
Wir steuern Anlagen damit. Die PC´s steuern meißt die gleiche Anlage über einen längeren Zeitraum.
Eine vollautomatische einstellung hat noch keinen sinn gemmacht.

Aber: Beim installieren der PC´s werden die Scanner nach ihrer Kennung oder Versionsnummer gefragt!
Mit der INFO kann dann der PC Konfiguriert werden.

Zitat von oki:
Das setzt voraus, dass deine Geräte nach öffnen des Ports automatisch Daten schicken.
davon kann mann nicht leider nicht immer ausgehn... auch bei USB!
lange rede gar kein sinn : beim möglichen port selbst fragen was dran ist!
Jörg
have FUN
  Mit Zitat antworten Zitat
bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#9

Re: Dynamisch ComPort ermitteln...

  Alt 22. Feb 2007, 07:23
USB und ComPorts deshalb, weil jeder USB-Anschluß letztendlich über eine ComPort-Nummer angesprochen wird....
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#10

Re: Dynamisch ComPort ermitteln...

  Alt 22. Feb 2007, 07:30
Danke für die Idee!
das nahe liegt sofern... ich werd mich drann machen und eine Vollautomatische Version schreiben...
Jörg
have FUN
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 07:15 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