Richtigen COM-Port bestimmen

meister-g

Bekanntes Mitglied
Hi!

über diese
USB to UART Bridge VCP Drivers
Treiber schließe ich ein Gerät über USB an die serielle Schnittstelle an.

Über die Bibliothek SerialPort von SerialIO, die javax.comm wrapt und quasi plattformunabhängig macht kann ich wunderbar auf das Gerät zugreifen.

Es ergibt sich aber ein großes Problem: Ich weiss nicht an welchem COM-Port mein Gerät ist.
(Momentan gebe ich mir die COM-Ports aus und weiß dann - da es der einzige bzw der mit der höheren Nummer ist - zu welchem Port ich connecten muss und mach das dann manuell)

Böse wäre nun zu allen COM-Ports auslesen und nach den richtigen Daten zu scannen. Müsste aufgrund eines speziellen Protokolls super funktionieren. Hier kann ich aber fatalerweise für kurze Zeit einen falschen COM-Port in Beschlag nehmen.
Wie komme ich also an die Info an welchem COM-Port mein Gerät hängt?

Über ein C#-Tool mit WMI habe ich es hinbekommen, indem ich die USB-Ports auslese, das mit der richtigen Vendor und Produkt-ID nehme und über die DeviceID den COM-Port erhalte.
Kann ich das irgendwie auch plattformunabhängig herausfinden?

Wenn nicht, was ist die schnellste/einfachste Möglichkeit für Windows (Mac, Linux)?
Falls ich in Java über USB zugreife - kann ich dann auch den COM-Port auslesen wie über WMI? Welche USB-Library verwende ich dann? Gibt es evlt eine wie SerialIO, die alle möglichen Betriebssysteme handled?

Mir fallen also folgende Möglichkeiten ein:
- unter Win eigenes C# Tool aufrufen (was mach ich bei einem Mac/Linux etc.?)
- auf WMI über Java zugreifen (was mach ich bei anderen Systemen?)
- Java USB Library verwenden (welche? unterstützte Plattformen? komme ich an den COM-Port?)
- ??? (evtl irgendetwas ganz simples wie System.getProperty... oder evtl. direkt über den COM-Port irgendetwas wie die Seriennummer zu erhalten)

Ich bin für jeden Tip dankbar, wie ich möglichst ohne zusätzliche Libraries, möglichst plattformunabhängig (wenn nicht möglich mindestens für Win/Mac) möglichst einfach herausfinden kann an welchem Port mein Gerät hängt. Habe wie gesagt die Treiberinformationen (siehe oben - CP210), Vendor & Produkt-ID und Seriennummer.
 
G

Gast2

Gast
Wie komme ich also an die Info an welchem COM-Port mein Gerät hängt?
genau so:
allen COM-Ports auslesen und nach den richtigen Daten zu scannen. Müsste aufgrund eines speziellen Protokolls super funktionieren.


Über ein C#-Tool mit WMI habe ich es hinbekommen, indem ich die USB-Ports auslese, das mit der richtigen Vendor und Produkt-ID nehme und über die DeviceID den COM-Port erhalte.
Kann ich das irgendwie auch plattformunabhängig herausfinden?
nein ... WMI gibt es nur für Windows ... und Java kenn (AFAIK) werder Com-Port noch USB ... Du kannst Dir aber die Mühe machen und WMI für Java mitels JNI umsetzen

hand, mogel

PS: wenn es keinen vernüftigen Grund gibt es mit Java zu machen - wieso bleibst Du dann nicht bei C#?
 

meister-g

Bekanntes Mitglied
com und usb gibt es unter java nicht, richtig.
aber wie gesagt ist serialport von serialio quasi für jede plattform implementiert. daher war meine frage ob es eine ähnliche library für usb gibt und ob man damit wie unter wmi den com-port erhält, der hinter dem usb-anschluss steckt.

wmi gibt es nach einer minirecherche auch eine java-bibliothek...aber wenn ich über wmi gehe muss ich keine java-bibliothek verwenden sondern kann auch ein externes c#tool verwenden, welches ich habe. warum ich c# nicht generell verwende ist klar: die ganze software läuft schon unter java. das c# tool ist eben nur ein bisschen wmi code, dass den richtigen com-port ermittelt. den aufruf eines externen windows-tools möchte ich aber vermeiden. 100% java geht wohl nicht. aber eben gute betriebssystemübergreifende bibliotheken wie serialio.

oder noch einmal die andere variante: alle com-ports scannen und nach einem speziellen protokoll (bytefolge,crc,etc) überprüfen. ist das ein unding, unschön, oder ein vernünftiges verfahren? ganz kurze zeit kann ich eben einen "fremden" com-port öffnen, der dann für diese kurze zeit nicht zur verfügung steht.
 
G

Gast2

Gast
ganz kurze zeit kann ich eben einen "fremden" com-port öffnen, der dann für diese kurze zeit nicht zur verfügung steht.

die Variante sehe ich nicht so tragisch ... wenn ich Daten über COM erwarte, dann öffne ich den Port am Programmanfang ... somit würdest Du schon mal gar nicht darauf zugreifen können - ergo - es ist nicht Dein Port ;)
 

meister-g

Bekanntes Mitglied
die Variante sehe ich nicht so tragisch ... wenn ich Daten über COM erwarte, dann öffne ich den Port am Programmanfang ... somit würdest Du schon mal gar nicht darauf zugreifen können - ergo - es ist nicht Dein Port ;)

ist es auch wirklich sicher, dass ich durch connecten und lesen kein gerät/keine software stören kann indem z.b. dann auch mit falscher baudrate etc verbunden wird?
 
T

tuxedo

Gast
Wieso lässt du das nicht einfach den User konfigurieren? Wenn auch der es nicht weiß, kannst du ihm die bereits genannte Auto-Suche nach dem Com-Port anbieten.

- Alex
 

Tharsonius

Bekanntes Mitglied
Wenn bereits ein Gerät über einen COM Port verbunden ist, dann ist der COM Port schon geöffnet. Dies kannst Du beim Öffnen abfangen.

Wenn Du nun automatisch scannen möchtest, dann weisst Du ja nicht welche COM Ports vorhanden sind und oben drein, welche bereits benutzt werden.

1. Ports öffnen. Wenn Port nicht vorhanden oder bereits geöffnet, dann ignorieren
2. Auf allen nun neu geöffneten Ports eine Init Nachricht senden und auf Antwort warten.
3. Wenn Antwort kommt, diesen Port verwenden und alle anderen schliessen

So hab ich das bei mir programmiert. Klappt gut. Ich hab das ganze noch mit einem Timeout versehen, will ja nicht ewig warten.
 

meister-g

Bekanntes Mitglied
das Gerät schickt sowieso die ganze Zeit von sich aus Daten.
Auch hier lässt sich eben evtl wieder diskutieren, ob es besser ist einem fremden COM-Port eine Steuermeldung zu schicken oder eben den COM-Port auszulesen (das mach ich gerade).
Es klappt wie beschrieben die Ports zu scannen. Wie gesagt frage ich mich aber ob es irgendeine Software/ein Gerät stören kann, wenn ich einen fremden Port kurz (mit falscher Baudrate?) scanne.

Es hat sich auch ein anderes Problem ergeben, ich möchte aber keinen neuen Thread erstellen. Evtl kann hier auch jemand helfen:
Und zwar erscheint über die anfangs erwähnten Treiber bei eingeschaltetem Gerät ein neuer COM-PORT im System.
Schalte ich das Gerät _nach_ dem ersten
Java:
 CommPortIdentifier.getPortIdentifiers();
ein, so wird nach dem Einschalten der Port über den gleichen Befehl nicht gelistet (erst wieder nach Neustart der Applikation). Gibt es da über die javacomm oder serialio irgendeine Möglichkeit "nachzuladen"?
 
F

Floydmovie

Gast
Hallo

Habe ein änliches Problem.

Ich habe ein Gerät (Barcode Scanner). Nun geht es darum, wenn ich das Gerät einstecke das ich über eine Batch datei (kann auch mit c oder c# geschehen) auslesen und diese anschliessend in ein TextFile speichern kann.

Wie ich gelesen habe ist dier dieses gelungen! Wie hast du dies hingekriegt?

Gruss Carlo
 

Ralph-Uwe

Bekanntes Mitglied
Hallo,

ich habe vor kurzen eine Anbindung eine Druckers über eine Serielle Schnittstelle umgestetzt.
Bei meinen erste Versuchen habe ich auch javax.comm benutzt, habe dann aber auf RXTXComm
gewechselt.
Das Einstellen der Ports ist in beiden Lib's gleich. Allerdings bietet RXTXComm beim senden von Strings
mehr Möglichkeiten.

@ meister-g:
spricht etwas dagegen die Port abfrage mehrmals zu wiederholen? Stichwort Timertask.

@ Floydmovie:
Barcodescanner so einstellen, dass nach jedem scan ein Return mit gesendet wird.
Texteditor öffnen
Barcode scannen und als Textfile speichern.
 
F

Floydmovie

Gast
Danke für die rasche Antwort.

Ne ich meine nicht das Scannen selber. Ich habe die software für den Barcode. Leider ist die sehr schlecht und man muss manuel den Port des Scanners eintragen (COM1, COM2 ...). Ich habe gesehen dass das Programm ein Text File hat das die Einstellungen speichert.
Meine Idee ist nun eine Batch zu schreiben der zuerst den COM Port auslist und danach dies in dieses TextFile speichert. Zumschluss die Software Starten und alle einstellungen wären getroffen.

Nun wie kann ich nun den Port des Scanners herauslesen?

Gruss Carlo
 

Ralph-Uwe

Bekanntes Mitglied
Moin

wenn das Programm die Einstellung speichert, warum willst Du dann der Port erst ermittel?

Vielleich kann Du das Programm auch gleich mit den richtigen Parametern aufrufen:
z.B. Scanner.exe COM1

Edit: ich gehe davon aus, dass der Scanner immer am selben Port hängt!
 
Zuletzt bearbeitet:
F

Floydmovie

Gast
Habe es hinbekommen.

Ich starte ein exe das die Schnittstelle einliest. Die Schnittstelle speichert es dan in ein Einstellungsfile des anderen Programmes. Nach dem wird das richtige Programm ausgeführt und lädt die Einstellungen.
 
J

joergimd

Gast
hallo.
besteht die möglichkeit das ich die Comport-abfragesoftware auch bekommen kann?

habe eine USB-I/O Karte HB628 welche bei jedem neuen anstecken immer eine andere Comport-nummer hat.

Ich suche nach einer Möglichkeit, dieses Comport-nummer herausfinden zu automatisieren und gleich in die konfig-dateien für das Karten-Anwenderprogramm zu schreiben.
Damit dann alles zusammen nur 1 Programmstart wird.

1xstarten macht dann
1. Comport scannen wo ist die HB628?
2. Comportnummer in die Konfigs für die HB628 schreiben.
3. Anwenderprogramm gleich mit der richtigen Comportnummer starten.

Profilab Expert ist vorhanden. aber bisher keine Möglichkeit dafür gefunden.

mfg

joerg.schiller1@gmx.de
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M den richtigen COM-Port finden Allgemeine Java-Themen 1
T datei auslesen ind der richtigen reihenfolge Allgemeine Java-Themen 2
L RMI Die richtigen Policy-Einstellungen oder einfach Signieren? Allgemeine Java-Themen 3
S java programm zu einem richtigen programm machen Allgemeine Java-Themen 37
B Dateien mit richtigen Programm öffnen Allgemeine Java-Themen 23
L Die Wahl des richtigen Streams? Allgemeine Java-Themen 3
Master3000 Java Port reset (Socket) Allgemeine Java-Themen 6
G Datei senden via Xmodem an Serial-Port Allgemeine Java-Themen 35
J Serial Port Daten empfangen Allgemeine Java-Themen 5
O Serial Port Daten als Tastaturanschlag senden Allgemeine Java-Themen 0
B Problem mit Virtuellem COM Port Allgemeine Java-Themen 1
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
A Serial Port abhören auf RX und TX Allgemeine Java-Themen 7
S RxTx - langsame Port suche Allgemeine Java-Themen 3
N Port festlegen für JXMapViewer Allgemeine Java-Themen 3
G java applet und com-port Allgemeine Java-Themen 7
J Port verwendung Allgemeine Java-Themen 13
J Receive eines Hex-Bytes über COM-Port Allgemeine Java-Themen 4
J String an Port senden Allgemeine Java-Themen 2
F Java <--> Serieller Port Allgemeine Java-Themen 3
N Serielle Schnittstelle / COM-Port auslesen und die empfangenen Daten verarbeiten Allgemeine Java-Themen 1
M Port-Tunneln Allgemeine Java-Themen 23
H Server Threaded machen. Port-Problem Frage Allgemeine Java-Themen 2
ARadauer Welches Programm hört auf Port? Allgemeine Java-Themen 3
B welchen port muss ich angeben? Allgemeine Java-Themen 11
P Linux port Allgemeine Java-Themen 4
K Java einen Port überwachen lassen Allgemeine Java-Themen 5
G Bibliothek für Port? Allgemeine Java-Themen 2
S Usb Port ansprechen Allgemeine Java-Themen 7
B EventListener zu einem COM Port hinzufügen Allgemeine Java-Themen 10
J COM-Port unter Windows nutzen Allgemeine Java-Themen 2
K serial-port Allgemeine Java-Themen 5
Z Parallel Port, setzen der einzelnen Pins Allgemeine Java-Themen 4
E Konflikte bei lokaler Adresse/Port Allgemeine Java-Themen 2
S Com-Port auslesen.Probleme Allgemeine Java-Themen 2
A Serial Port Probleme Allgemeine Java-Themen 4
E Seriellen Port unter Windows ansprechen Allgemeine Java-Themen 16
C Kommunikation mit USB Port Allgemeine Java-Themen 1
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
D Methoden Teil-Array mit Maximalwert bestimmen Allgemeine Java-Themen 23
gotzi242 Array Summe bestimmen tipps? Allgemeine Java-Themen 14
J Zahlen Abstand zur Null bestimmen Allgemeine Java-Themen 11
S Best Practice Punkt im dreidimensionalen Raum Bestimmen Allgemeine Java-Themen 24
C Movement auf bestimmten Weg bestimmen Allgemeine Java-Themen 11
ralfb1105 Java LogManager property bestimmen/ausgeben Allgemeine Java-Themen 1
X Punkte in einem Feld bestimmen Allgemeine Java-Themen 22
C Kürzeste Wörter bestimmen Allgemeine Java-Themen 8
GreenTeaYT Turtle Richtung bestimmen und Consl? Allgemeine Java-Themen 3
X Zeile unter einer bestimmen Zeile hinzufügen(File) Allgemeine Java-Themen 1
J Sortieralgorithmus, Komplexität bestimmen Allgemeine Java-Themen 3
A Selbsterstellte 404-Seiten bestimmen, die sich als 200 ausgeben Allgemeine Java-Themen 8
A Winkel bestimmen Allgemeine Java-Themen 5
S spaltenweise Maximalwert bestimmen Allgemeine Java-Themen 12
M ImageJ-Wie kann ich die Abstände von 2 Kreisen bestimmen Allgemeine Java-Themen 6
R MD5-Hash eines Strings bestimmen Allgemeine Java-Themen 2
kodela Arbeitspfad einer JAR-Datei bestimmen Allgemeine Java-Themen 4
P Wie Laufwerke bestimmen ? Allgemeine Java-Themen 7
E String Overlapping bestimmen Allgemeine Java-Themen 3
D Bild Typ bestimmen Allgemeine Java-Themen 9
A STackgrösse bestimmen Allgemeine Java-Themen 5
C Wie kann man die IText Table Position bestimmen? Allgemeine Java-Themen 3
A Listener für constructor einer bestimmen Klasse Allgemeine Java-Themen 9
G log4j File erzeugen und Pfad bestimmen Allgemeine Java-Themen 3
X [Java] Internationalisierung / Language codes bestimmen Allgemeine Java-Themen 4
G Grenzwert einer Folge bestimmen Allgemeine Java-Themen 2
M Mit Java CPU Typ bestimmen... Allgemeine Java-Themen 7
aze Source Folder bestimmen Allgemeine Java-Themen 2
M Drucken Schacht auswählen/bestimmen Allgemeine Java-Themen 2
F Typ eines Objekts zur Laufzeit bestimmen? Allgemeine Java-Themen 8
F Eigenschaften von MP3 Dateien bestimmen Allgemeine Java-Themen 2
F Anzahl der nachkommastellen bestimmen nur wie? Allgemeine Java-Themen 10
V Beratung zum Bestimmen der "Mittel"(Java,Sql) mein Allgemeine Java-Themen 3
K CPU-Typ usw. bestimmen Allgemeine Java-Themen 10
G Subsets bestimmen Allgemeine Java-Themen 7
M Bestimmen, ob File fertig geschrieben wurde Allgemeine Java-Themen 3
B java-version bestimmen innerhalb von Programm Allgemeine Java-Themen 4
J html seite in java einbinden und url bestimmen Allgemeine Java-Themen 5
E Wie die Länge eines Array bestimmen Allgemeine Java-Themen 9

Ähnliche Java Themen


Oben