Liste aller Com-Ports - zweistellige Ports?

  • Themenstarter Themenstarter Jezira
  • Beginndatum Beginndatum
J

Jezira

Gast
Hallo,

ich hab da mal eine Frage.
Ich fuddel seit einer Weile mit Kommunikation über Com-Ports rum(mit rxtx), klappt auch bisher alles super. Nur habe ich nun mehr als 9 Com-Ports und hätte diese gern zur Auswahl in einer Dropbox. Mit weniger als 9 geht das auch sehr schön...
Aber egal was ich mache, er kann mir alles über 9 nicht ermitteln. Warum? Und wie komm ich an Port 10, 11, 12 usw?

Ich hoffe mir kann da jemand helfen!

Stelle im Code, die mir diese Liste ausgeben soll(und bis 9 auch tut!):

Java:
        private void setAvailabelPorts()
	{
		Enumeration portList = CommPortIdentifier.getPortIdentifiers();
		
		ports.add(" -- ");
		
		while (portList.hasMoreElements()) 
		 {
			CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();
		 
		        if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) 
		        {
		        	ports.add(""+portId.getName());
		        }
		 }
	}

Hilfeee... ;o)
 
Programm läuft ordentlich weiter... keine Fehlermeldungen.. nichts...

Es macht was es soll, nur stehen sämtliche Ports ab 9 nicht in der Liste.

Angeblich gibt es dann keine Einträge mehr, konnte ich dem Debugger entnehmen. Damit geht er aus der Schleife raus und gibt mir meine Liste raus mit den Ports bis 9... *grummel*

Kontrolle mit anderen Terminalprogrammen zeigten mir auch immer brav alle Ports an... Treiber sind richtig installiert.
 
Interessant. Das Problem hatte ich noch nicht. Habe aber auch keinen Rechner mit so vielen COM-Ports. Deswegen kann ich es leider nicht nachstellen. Ich habe darum im Internet nach diesem Fehler gesucht. Aber nichts gefunden. Da ich es für sehr unwahrscheinlich halte, dass Du jetzt der erste bist, der diesen Fehler gefunden hat, würde ich die Ursache in Deinem Code vermuten.

Der von Dir gepostete Code sieht gut aus (erstmal). Um alle Seiteneffekte auszuschließen (zeigt das GUI-Element evtl. einfach nur 10 Einträge an?), baue mal ein Log-Statement wie folgt in Deinen Code ein.
[JAVA=9]
CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();
System.out.println(portId.getName());
[/code]
Das wird dir alle Ports (auch nicht seriell) ausgeben, die die COMM-API meint zu haben. Falls das dann auch zu wenig Ports ergibt, liegt es wirklich an der API-Implementierung. Dann bleibt Dir nur ein Wechsel zu bspw serialio. Das ist aber leider nicht kostenlost.
 
Ja, das ist es ja. Ich glaube auch kaum das ich die erste bin, die so ein Problem hat. Finden konnte ich allerdings auch nichts dazu... verhext -.-

Log und Debug ergeben das die API wirklich meint nach 9 wäre Schluß. Habs grad nochmal durch laufen lassen. Kann doch nicht sein das es nur bis 9 möglich ist, das kann ich mir nicht vorstellen...

Ein Wechsel auf kommerzielle Software geht nicht. 😱(
 
Gerade mal bei mir getestet, da ich damit noch nie Probleme hatte: Weder unter XP noch Vista noch Win7. Hier mal Testcode zum auflisten:

Java:
    public ArrayList<String> getAvailableSerialPorts() {
        final ArrayList<String> portList = new ArrayList<String>();
        @SuppressWarnings("rawtypes")
        final Enumeration thePorts = CommPortIdentifier.getPortIdentifiers();
        while (thePorts.hasMoreElements()) {
            final CommPortIdentifier com = (CommPortIdentifier) thePorts.nextElement();
            switch (com.getPortType()) {
            case CommPortIdentifier.PORT_SERIAL:
                portList.add(com.getName());
            }
        }
        return portList;
    }

Ausgespuckt wurden COM1 3 und 14
 
PS:

Habe aktuell 6 Ports, welche ich aber umbelegt habe auf COM5-COM11. Ist für spätere Anwednungen so nötig, sonst könnt ichs bei 1-6 lassen. Vielleicht kann mans so nachvollziehen.
 
Gerade mal bei mir getestet, da ich damit noch nie Probleme hatte: Weder unter XP noch Vista noch Win7. Hier mal Testcode zum auflisten:

Java:
    public ArrayList<String> getAvailableSerialPorts() {
        final ArrayList<String> portList = new ArrayList<String>();
        @SuppressWarnings("rawtypes")
        final Enumeration thePorts = CommPortIdentifier.getPortIdentifiers();
        while (thePorts.hasMoreElements()) {
            final CommPortIdentifier com = (CommPortIdentifier) thePorts.nextElement();
            switch (com.getPortType()) {
            case CommPortIdentifier.PORT_SERIAL:
                portList.add(com.getName());
            }
        }
        return portList;
    }

Ausgespuckt wurden COM1 3 und 14

Danke dafür! Habs grad ausprobiert:
letzter Eintrag Com9

Nun woran liegts? Ich versuchs gleich mal auf nem anderen Rechner, vielleicht hakts hier irgendwo...
 
ich würde einfach mal von kaputten treibern der virtuellen ports ausgehen ...

ein rechner hat hardware mäßig in der regel genau 2 physische COM-ports ... viele BIOS unterstützen bis zu 4 physische COM-ports ... welche aber selten verbaut wurden ... alles was COM5 und höher ist ist demnach irgendwie virtuell ... was durch irgendwelche software-treiber wie bluetooth und andere hervorgerufen wird ... z.b. control-ports von embedded geräten wie android-smartphones ...

ich gehe einfach mal davon aus das der treiber nicht richtig funktioniert und die überflüssigen ports nicht wieder aus dem geräte-system de-registriert ... und somit halt nur noch leichen angezeigt werden die gar nicht mehr da sind ...

sollte auch mal geprüft werden
 
Um genau zu sein habe ich 5 "echte" serielle Ports(9-polige Stecker) und wenn ich es drauf anlege 4 weitere über USB-Wandler. Egal welchen Port ich wohin lege, unter 9 gehts hervorragend, lege ich die auf >9 sind sie laut Program nicht da. Andere Programme zeige dabei sehr wohl alle Ports an und sind damit auch Kommunikationsfähig.

Teste allerdings gerade mit den USB-Wandlern(wie gesagt, die machten nie Probleme), verlege das nun mal auf die tatsächlich vorhandenen Ports. Leider sind im Endsystem später nur noch die Wandler vorhanden.

Richte gerade die Entwicklungsumgebung auf zwei weiteren Rechnern ein um das dort mal zu probieren.
 
Also gut, auf anderen Rechnern läufts und alle Ports stehen in der Liste!
Gut zu wissen, ich bin nich zu doof...

Schlecht ist das es das Problem nun nicht besser macht. Aber wenigstens liegts an den Rechnereinstellungen/Instalationen/Treibern. Wird sich hoffentlich noch rausfinden lassen!

Danke für die vielen Tipps! Ich sag Bescheid wenn ich was finde!
 
ok ... das es systeme mit mehr als 4 physischen anschlüssen gibt ist mir klar .. muss es ja ... z.b. SPS und so ... aber in der regel hat ein "normaler" IBM-kompatibler PC 2 bis 4 COM ports ... weil dem entsprechend auch die BIOS aufgebaut sind ...
klar kann man seinen rechner mit zusatz-karten und USB-wandlern zukrachen ... aber für eine richtig COM-verbindung sind die direkt auf dem board vorhandenen ports zu bevorzugen ...

auch haben gerade USB-wandler das problem das diese nur mit +5V / 100/500mA laufen ... COM hat aber +15V mit ich glaube 2A ... geräte die also physisch auf die eigenschaften von COM angewiesen sind funkionieren damit normalerweise nicht ... allerdings wird heutzutage in fast allen geräten mit COM intern die gleiche USB-wandler schaltung genutzt ... da die meisten arbeiten halt mit laptops und solche USB-wandler-kabeln gemacht werden ...
 
Genau wegen Laptop, mit Anschluß für 8 serielle Geräte, brauche ich die Wandler. Mein Entwicklungs-PC hier ist nicht wirklich Otto-Normal-PC *g*

Habe mal die Treiber erneuert, erstaunlicher Weise funzt das Ganze nun sobald ich die Entwicklungsumgebung verlasse. In Eclipse gehts nach wie vor nicht, aber damit könnt ich leben. Frage mich nur warum das so ist.
 
Habe mal die Treiber erneuert, erstaunlicher Weise funzt das Ganze nun sobald ich die Entwicklungsumgebung verlasse. In Eclipse gehts nach wie vor nicht, aber damit könnt ich leben. Frage mich nur warum das so ist.
Nur Spekulation, verwendest Du für Eclipse evtl. ein anderes JDK als außerhalb? Außerhalb vielleicht sogar "nur" ein JRE?
 
Hallo,

gute Spekulation! Habe alles auf dasselbe JDK eingestellt, in Eclipse nochmal umgestellt. Neustart und es ging tatsächlich!

Danke euch! Hab schon gedacht ich sei zu blöd dafür ;o)
 

Zurück
Oben