www.mikrocontroller.net

Forum: PC-Programmierung JavaME seriellen Port öffnen


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Su Si (sannchen)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo Leute!

Ich bin neu hier.
Ich programmiere zur Zeit ein Midlet für ein JavaME-fähiges 
Digitalfunkgerät.
Allerdings kann ich nur ab und zu den seriellen Port öffnen. Meist geht 
es nur einmal am Tag und dann streikt das Gerät bzw. wirft mir eine 
"IllegalArgumentException".
Der Port wird auch immer wieder geschlossen, aber diese Anweisung wirft 
eine NullPointerException, deswegen geh ich davon aus, dass der Port 
vorher gar nicht geöffnet wurde.

Hat jemand eine Idee an was das liegen kann, dass nur manchmal der Port 
erfolgreich geöffnet werden kann?
private void open() 
    { 
      textBox.setString("versuche Port zu öffnen");  
      try
        {  
          CommConnection cc= (CommConnection)Connector.open("comm:COM0");
            textBox.setString("Port offen");
   
            textBox.setString("Vor Port schließen");
            cc.close();
            textBox.setString("Port geschlossen");
        }
        catch(IOException io)
        {
           textBox.setString("Fehler " +io.getMessage());
        }
    }

Vielen Dank und liebe Grüße,
Sannchen

Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Wenigstens hier:
Su Si schrieb:
> CommConnection cc= (CommConnection)Connector.open("comm:COM0");
solltest du mal prüfen ob der Port nicht null ist.

Außerdem wird der Port nicht geschlossen wenn eine IO Exception auftrat, 
besser so:
private void open() 
    { 
      textBox.setString("versuche Port zu öffnen");  
      CommConnection cc = null;
      try
        {  
        cc = (CommConnection)Connector.open("comm:COM0");
        if (cc != null) {
            textBox.setString("Port offen");
   
            textBox.setString("Vor Port schließen");
            cc.close();
            cc = null;
            textBox.setString("Port geschlossen");
        }
        }
        catch(IOException io)
        {
           textBox.setString("Fehler " +io.getMessage());
        } finally {
          if (cc != null) {
            cc.close();
          }
        }
    }

Autor: Su Si (sannchen)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Danke Läubi für deine schnelle Antwort!!

Leider habe ich das Gerät nicht täglich zur Verfügung, daher dauert es 
jetzt wieder ein paar Tage bis ich das testen kann.

Aber was meinst damit das ich testen soll, das der Port nicht null ist? 
Versteh ich nicht ganz.

Danke!

Liebe Grüße,
Sannchen

Autor: Martin Maurer (capiman)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
> Aber was meinst damit das ich testen soll, das der Port nicht null ist?

Ich vermute, Läubi meinte, Du sollst (wie in seinem Beispiel)
den Returnwert von Connector.open abprüfen. Könnte ja sein,
dass der Port gar nicht existiert, schon von einer anderen App
offen ist oder ein anderer Fehler beim Öffnen auftritt.

Autor: Su Si (sannchen)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Achso! Okay danke!
Ich würde es am liebsten morgen gleich testen, geht aber leider nicht :(

Aber dann hätte ich gleich eine weitere Verständisfrage.
Ich möchte in dem Programm dann über den Output Stream natürtlich Daten 
ausgeben. Musste heute aber feststellen, dass nur Integer gehen. Kann 
ich auch irgendwie Strings übergeben?
Und wie kann ich am PC diesen Output Stream empfangen? Wenn ich 
Hyperterminal auf den angeschlossenen Port öffne, dann kommt, dass 
dieser Port belegt ist.
Hab ich einen Denkfehler?

Danke!

Grüße,
Sannchen

Autor: Läubi .. (laeubi) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Su Si schrieb:
> Musste heute aber feststellen, dass nur Integer gehen. Kann
> ich auch irgendwie Strings übergeben?

Dafür gibt es die Klassen StreamReader/Writer. Alternativ kann man einen 
String auch einfach in Bytes zerlegen und diese dann über den Stream 
senden.

Su Si schrieb:
> Und wie kann ich am PC diesen Output Stream empfangen? Wenn ich
> Hyperterminal auf den angeschlossenen Port öffne, dann kommt, dass
> dieser Port belegt ist.

Dann solltest du schauen wer den Port belegt ;-)
Die beiden Geräte müssen natürlich per Kabel verbunden sein, auf dem 
selben Gerät geht es nicht es sei den dieses hat zwei Schnittstellen.

Allgemein wenn du mit Java arbeiten willst solltest du dir unabhängig 
von dem Problem ein paar Grundlagen aneignen.

Autor: abiks2005 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
The following example shows how a CommConnection would be used to 
discover available comm ports.

 String port1;
 String ports = System.getProperty("microedition.commports");
 int comma = ports.indexOf(',');
 if (comma > 0) {
     // Parse the first port from the available ports list.
     port1 = ports.substring(0, comma);
 } else {
     // Only one serial port available.
     port1 =ports;
 }

Autor: Su Si (sannchen)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
okay mit den Klassen StreamReader/Writer habe ich mich noch nicht 
beschäftigt. Danke für den Tipp!!
Ich möchte in den Strings AT-Befehle übergeben. Hat schon mal jemand 
gemacht? Und hat vielleicht ein Stück Beispielcode?

okay, dann sollte ich das mal erforschen ;)
Die Geräte sind natürlich mit einem seriellen Kabel verbunden ;)
Das Funkgerät hat nur eine serielle Schnittstelle und das ist die COM0 
und ich frage im Programm auch den verfügbaren Port ab. Dennoch Danke 
für den Codeschnipsel!

Autor: Su Si (sannchen)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo :)

Ich hatte heute doch die Gelegenheit den Code von Läubi zu testen und es 
funktioniert!
Der Port wurde scheinbar wirklich nicht geschlossen.
Vielen Dank für eure Hilfe!!

Liebe Grüße,
Susi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net