Hallo zusammen,
ich habe jetzt schon fast eine halbe Stunde nach der Lösung gesucht aber ich finde dazu einfach gar nichts. Zumindest nicht so wie ich es brauche.
Ich möchte nicht den Namen des COM Ports vorgeben sondern es soll getestet werden, ob das Gerät was ich nutzen möchte mir eine Antwort schickt. Bedeutet kurz gesagt. Ich lese die vorhandenen COM-Ports aus und öffne den ersten, sende ein Kommando raus. Ist mein Gerät auf diesem Port wird es das Kommando erkennen und meiner Software eine Antwort schicken, diese erkennt meine Software und ich weiß aha das ist der COM-PORT mit dem ich arbeiten möchte. Sollte dies nicht der Fall sein wird der nächste COM-Port benutzt, gleiches Prozedere, so lange bis kein Port mehr da ist: pASST KEIN com-pORT; würde eine Fehlermeldung kommen. Wird jedoch oben genanntes Szenario erfüllt startet meine GUI.
Ich finde leite nur Quellcode den ich bereits selbst habe und zwar diesen bei dem ich den Portname selbst vorgebe. Leider ist der COM-Port auf jedem Computer eventuell ein anderer und kann somit nicht verallgemeinert werden. Ich habe bereits folgenden Code. Dieser funktioniert aber nur wenn ich den ersten Port überspringe(habe ich nur testweise gemacht um zu erfahren, ob der Code generell mit dem richtigen Port funktionieren würde). Würde ich das Überspringen rauslassen (so wie es eigentlich sein sollte) Werden zwar beide Ports geöffnet aber beide auch wieder geschlossen, da keine Antwort kommt.
Wäre super wenn mir jemand weiterhelfen könnte.
ich habe jetzt schon fast eine halbe Stunde nach der Lösung gesucht aber ich finde dazu einfach gar nichts. Zumindest nicht so wie ich es brauche.
Ich möchte nicht den Namen des COM Ports vorgeben sondern es soll getestet werden, ob das Gerät was ich nutzen möchte mir eine Antwort schickt. Bedeutet kurz gesagt. Ich lese die vorhandenen COM-Ports aus und öffne den ersten, sende ein Kommando raus. Ist mein Gerät auf diesem Port wird es das Kommando erkennen und meiner Software eine Antwort schicken, diese erkennt meine Software und ich weiß aha das ist der COM-PORT mit dem ich arbeiten möchte. Sollte dies nicht der Fall sein wird der nächste COM-Port benutzt, gleiches Prozedere, so lange bis kein Port mehr da ist: pASST KEIN com-pORT; würde eine Fehlermeldung kommen. Wird jedoch oben genanntes Szenario erfüllt startet meine GUI.
Ich finde leite nur Quellcode den ich bereits selbst habe und zwar diesen bei dem ich den Portname selbst vorgebe. Leider ist der COM-Port auf jedem Computer eventuell ein anderer und kann somit nicht verallgemeinert werden. Ich habe bereits folgenden Code. Dieser funktioniert aber nur wenn ich den ersten Port überspringe(habe ich nur testweise gemacht um zu erfahren, ob der Code generell mit dem richtigen Port funktionieren würde). Würde ich das Überspringen rauslassen (so wie es eigentlich sein sollte) Werden zwar beide Ports geöffnet aber beide auch wieder geschlossen, da keine Antwort kommt.
Wäre super wenn mir jemand weiterhelfen könnte.
Java:
private static CommPortIdentifier serialPortId = null;
private Enumeration<?> enumComm = null;
private static SerialPort serialPort = null;
private static OutputStream outputStream = null;
private static InputStream inputStream = null;
private static Boolean serialPortGeoeffnet = false;
private static int baudrate = 115200;
private static int dataBits = SerialPort.DATABITS_8;
private static int stopBits = SerialPort.STOPBITS_1;
private static int parity = SerialPort.PARITY_NONE;
...
boolean oeffneSerialPort() {
int counter = 1;
enumComm = CommPortIdentifier.getPortIdentifiers();
while (enumComm.hasMoreElements()) {
serialPortId = (CommPortIdentifier) enumComm.nextElement();
if(serialPortId.getPortType() == 1) {
if(counter != 0) {
counter--;
} else {
try {
serialPort = (SerialPort) serialPortId.open("Öffnen und Senden", 500);
System.out.println(serialPort.getName().substring(4, serialPort.getName().length()));
outputStream = serialPort.getOutputStream();
inputStream = serialPort.getInputStream();
serialPort.addEventListener(new serialPortEventListener());
serialPort.notifyOnDataAvailable(true);
serialPort.setSerialPortParams(baudrate, dataBits, stopBits, parity);
serialPortGeoeffnet = true;
sendeSerialPort("holeStatus");
Thread.sleep(1000);
if(foundPort == true) {
System.out.println("SerialPort erfolgreich geöffnet");
return true;
} else {
System.out.println("Serialport nicht gefunden");
// schliesseSerialPort();
}
} catch (IOException | PortInUseException | UnsupportedCommOperationException | TooManyListenersException | InterruptedException e) {
// Logging.logger.logp(Level.SEVERE, SerielleKommunikation.class.getSimpleName(), SerielleKommunikation.class.getMethods()[0].getName(), e.getMessage());
e.getStackTrace();
}
}
}
}
if (foundPort != true) {
return false;
} else {
return true;
}
}
public static void schliesseSerialPort() {
if (serialPortGeoeffnet == true) {
System.out.println("Schließe Serialport");
outputStream = null;
inputStream = null;
serialPort = null;
foundPort = false;
serialPortGeoeffnet = false;
} else {
System.out.println("Serialport bereits geschlossen");
}
}
public static void sendeSerialPort(String element) {
new Senderoutine(element);
}