www.mikrocontroller.net

Forum: PC-Programmierung RS232 unter Java programmieren - wer kann helfen ?


Autor: awesome (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits !

Mein Problem ist folgendes :

Ich möchte mit JAVA über eine RS232 Schnittstelle Daten senden.
Um das ganze einmal auszuprobieren haben ich mir ein Beispielprogramm 
zur Brust genommen und das ganze ausprobiert, hat auch funktioniert, 
sprich ich konnte per Hyperterminal alles empfangen.

Nun wollte ich das ganze etwas umgestallten, und schon ging der Ärger 
los.

Mein Gedanke war folgender: Per Schieberegler kann ich einen Wert von 0 
bis 255 einstellen. Dieser Wert wird dann in ein Feld kopiert und in 
einen binär Wert umgewandelt (alles noch kein Problem). Jetzt hatte ich 
vor eben diesen binär Wert per RS232 an das Hyperterminal zu schicken. 
Und siehe da es funktioniert nicht. Ich dachte mir wenn ich das 
Beispielprogramm an meine Bedürfnisse anpasse kann das ja nicht so 
schwer sein -> Falsch gedacht.

Vielleicht kann mir ja irgendjemand gute Ratschläge und vielleicht auch 
ein paar Erklärungen geben (habe zwar gegoogelt aber die Ausbeute war 
eher mager und unbefriedigend)

Der Code sieht wie folgt aus :

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.*;
import java.io.*;
import javax.comm.*;

        
public class schieberegler extends Frame 
{
  
  static JTextField tf;
  static JScrollBar sb;
  static JButton aendern;
  static JTextField binär;
  static JButton senden;
  static JTextArea ausgabe;
  static JLabel label1;
  static JLabel label2;
  static JLabel label3;
  static JLabel label4;
  static JLabel label5;
  static JLabel label6;
  static CommPortIdentifier portID;
  InputStream ins;
  OutputStream out;
  static SerialPort serss;
  


  public static void main( String args[] )
  {
    try{portID = CommPortIdentifier.getPortIdentifier("CNCA0");
        serss = (SerialPort) portID.open("mein_programm",2000);
        
    }
    catch(Exception exc){System.out.println("Fehler :"+exc);} 
    JFrame f = new JFrame();
    f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    f.setTitle("RS232 Ansteuerung von ");
    f.pack();
    f.setSize(250,130);
    f.setVisible( true );
     Container c = f.getContentPane();

    c.setLayout( new GridLayout(6,2) );

    c.add (label1 = new JLabel("Aktueller SR Wert:"));
    c.add ( tf = new JTextField( 20 ) );
    c.add (label2 = new JLabel("Schieberegler:"));
    c.add ( sb = new JScrollBar( JScrollBar.HORIZONTAL, 0, 10, 0, 255+10 ) );
    c.add (label3 = new JLabel("Wert ändern:"));
    c.add(aendern = new JButton("ändern"));
    c.add (label4 = new JLabel("Binärer Wert:"));
    c.add(binär = new JTextField(20));
    c.add (label5 = new JLabel("Gäenderten Wert senden:"));
    c.add(senden = new JButton("Wert senden"));
    c.add(label6 = new JLabel("Satus:"));
    c.add(ausgabe = new JTextArea("Port COM geöffnet\n",7,40));
    
    aendern.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) {
        
        String b = null;
          int Wert; 
          Wert = sb.getValue();
          
           b = (new Integer(Wert)).toBinaryString(Wert);
           binär.setText(""+b);
        }
    } );

    tf.addActionListener( new ActionListener() {
          public void actionPerformed( ActionEvent e ) {
            sb.setValue( Integer.parseInt(tf.getText()) );
          }
    } );

    sb.addAdjustmentListener( new AdjustmentListener() {
          public void adjustmentValueChanged( AdjustmentEvent e ) {
            tf.setText( "" + sb.getValue() );
          }
    } );
  }
  
  public schieberegler() {
  
    
   
    
    
    
 
 
    
    
    
    binär.addActionListener(new sendeListener());
    senden.addActionListener(new sendeListener());
    
    try {ins = serss.getInputStream();
         out = serss.getOutputStream();
         serss.addEventListener(new commListener());
    }
   catch (Exception e) { System.out.println("Fehler: "+e);}
    serss.notifyOnDataAvailable(true);
    try {serss.setSerialPortParams(2400,
                                   SerialPort.DATABITS_8,
                                   SerialPort.STOPBITS_1 ,
                                   SerialPort.PARITY_NONE);}
    catch (UnsupportedCommOperationException e) {}
  }
    
    public class sendeListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
      PrintWriter aus = new PrintWriter(out);
      aus.println(binär.getText());
      aus.flush();
      aus.close();
    }
  }

  public class commListener implements SerialPortEventListener{
    public void serialEvent(SerialPortEvent event) {
      if(event.getEventType()==SerialPortEvent.DATA_AVAILABLE){
        byte[] readBuffer = new byte[20];
        try {
          while (ins.available() > 0) {int numBytes = ins.read(readBuffer);}
          String nachricht = new String(readBuffer);
          ausgabe.append(nachricht);
          
        }
        catch (IOException e) {System.out.println("Fehler: "+e);}
    
      }
    }
  }
}
      

Vielen Dank im vorraus, awesome !

Autor: mgiaco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Such mal nach RXTX Libary

Die funktioniert super.

gruß mgiaco

Autor: awesome (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Tipp, aber an der Libary liegt es nicht, denn das 
Beispielprogramm funktioniert hervorragend, und viel ist nicht anders an 
meinem Programm

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.