# Rs232 (ComPORT) unter Java



## jeroen (21. Mrz 2008)

Hi, 

ich möchte gern ein Programm schreiben das die Rs232 verwendet. 
Ich hab dazu die JavaComm API runtergeladen und die comm.jar in das verzeichniss C:\Program Files (x86)\Java\jre1.6.0_05\lib kopiert. 
Ich verwende die IDE Microsoft visuelle studio 2003. 

Mein Code: 


```
import javax.comm.*; 
import java.util.*; 


public class Test 
{ 
   public static void main(String[] args) 
   { 
      System.out.println("Hallo Welt!"); 

      SerialPort port = null; 
      try 
      { 
         port = (SerialPort) portId.open( 
            "name", // Name of the application asking for the port 
            10000   // Wait max. 10 sec. to acquire port 
            ); 
      } 
      catch(PortInUseException e) 
      { 
         System.err.println("Port already in use: " + e); 
         System.exit(1); 
      } 

   } 
}
```


Der Fehler ist Die Klasse 'SerialPort' kann nicht gefunden werden. 
Hab ich irgendwas falsch eingebunden oder so ?


----------



## robochris (21. Mrz 2008)

So weit ich gesehen habe, ist es besser RXTX zu verwenden.

Hier  findet sich der Source für ein Beispielprogramm. Dort die Klasse RS232.

Gruß,
chris


----------



## jeroen (21. Mrz 2008)

hi,

ich habe es jetzt auch mal mit der rxtx probiert.
der fehler ist immernoch der gleiche.

Die Klasse 'CommPortIdentifier' kann nicht gefunden werden
Die Klasse 'SerialPort' kann nicht gefunden werden

Muss ich bei Visuell Studio noch irgendwas angeben ?


----------



## robochris (21. Mrz 2008)

Hast Du die Installationsanleitung auf der von mir geposteten Seite genau gelesen? 
Hast Du die *gnu* anstatt die *.comm Klasse importiert?


----------



## jeroen (21. Mrz 2008)

sry mein Programm zieht jetzt so aus:


```
package ConsoleApplication3;

import java.io.*;
import java.util.*;
import gnu.io.*;

/**
 * Zusammenfassung für Class1.
 */

public class Rs232 
{
	private static boolean debug = false;
		
	private boolean open;
	private CommPortIdentifier portId;
	private SerialPort sPort;
	private OutputStream os;
	private InputStream is;
	private int baud;
	    
	/**
	 * constructor
	 */
	public Rs232() 
	{
		baud=2400;
		open = false;
	}
	    
	public void setBaud (int speed) 
	{
		baud=speed;
	}	    
	/**
	 * open
	 */
	public void ports_available() 
	{
		// obtain a CommPortIdentifier object for the port you want to open
		Enumeration portList = CommPortIdentifier.getPortIdentifiers();
		while (portList.hasMoreElements()) 
		{
			portId = (CommPortIdentifier) portList.nextElement();
			System.out.println(portId.getName());
		}
	}
	public void open(String comPort) 
	{
		if(!isOpen()) 
		{
			// obtain a CommPortIdentifier object for the port you want to open
			Enumeration portList = CommPortIdentifier.getPortIdentifiers();
			while (portList.hasMoreElements()) 
			{
				portId = (CommPortIdentifier) portList.nextElement();
				//System.out.println(portId.getName());
				if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) 
				{
					if (portId.getName().equals(comPort)) break;
				}
			}
			// open the port represented by the CommPortIdentifier object
			try 
			{
				sPort = (SerialPort)portId.open("SerialConnection", 5000);
			} 
			catch (PortInUseException e) { System.out.println(e); }
			// set the parameters of the connection
			try 
			{
				sPort.setSerialPortParams(baud,
					SerialPort.DATABITS_8,
					SerialPort.STOPBITS_1,
					SerialPort.PARITY_NONE);
			} 
			catch(UnsupportedCommOperationException e) { System.out.println(e); }
			// open the input and output streams for the connection
			try 
			{
				os = sPort.getOutputStream();
				is = sPort.getInputStream();
			} 
			catch (IOException e) 
			{
				sPort.close();
				System.out.println(e); 
			}
			// set receive timeout to allow breaking out of polling loop during input handling
			try 
			{
				sPort.enableReceiveTimeout(30);
			} 
			catch(UnsupportedCommOperationException e) { System.out.println(e); }

			open = true;
		}
	}
	    
	/**
	 * close
	 */
	public void close() 
	{
		if(!open) return;
	    	
		// check to make sure sPort has reference to avoid a NPE.
		if(sPort != null) 
		{
			try 
			{
				// close the i/o streams.
				os.close();
				is.close();
			} 
			catch(IOException e) { System.out.println(e); }
			// close the port.
			sPort.close();
		}
		open = false;
	}
	/**
	 * write only one byte to port
	 */
	public void write(byte data) 
	{
		byte[] b=new byte[1];
			
		try 
		{
			b[0]=data;
			os.write(b);
			if(debug) System.out.printf("write: %02x", data);
		} 
		catch(IOException e) { System.out.println(e); }
	}	    

		
	/**
	 * write
	 */
	public void write(byte[] data) 
	{
		try 
		{
			os.write(data);
			if(debug) System.out.println("write: " + new String(data));
		} 
		catch(IOException e) { System.out.println(e); }
	}
	    
	/**
	 * write (string)
	 */
	public void write(String data) 
	{
		write(data.getBytes());
	}
	 
	public boolean hasReceived()
	{
		try
		{
			if(is.available()==0) return false;
			else return true;
		}
		catch(IOException e) 
		{ 
			System.err.println(e); 
			return false;
		}
	}

	/**
	 * read
	 */
	public byte readbyte() 
	{
		if(debug) System.out.println("readbyte");
	    	
		byte data = 0;
	        
		byte[] readBuffer = new byte[20];
	        
		try 
		{
			while (is.available() > 0) 
			{
				int numBytes = is.read(readBuffer);
			}
			data = readBuffer[1];
		} 
		catch(IOException e) { System.out.println(e); }
		return data;
	}
	/**
	 * read
	 */
	public String read() 
	{
		if(debug) System.out.println("read");
		String data = null;
	        
		byte[] readBuffer = new byte[20];
	        
		try 
		{
			while (is.available() > 0) 
			{
				int numBytes = is.read(readBuffer);
			}
			data = new String(readBuffer);
		} 
		catch(IOException e) { System.out.println(e); }
		return data;
	}
	    
	/**
	 * isOpen
	 */
	public boolean isOpen() 
	{
		return open;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		// TODO Auto-generated method stub
		System.out.println("Test");
		open("com1");
			
	}
}
```


----------



## robochris (21. Mrz 2008)

So wie es aussieht, hast Du ein Pfad-Problem. Er findet die Kommandos der RXTX Klasse nicht. Vermutlich hast Du sie in den falschen Pfad kopiert.


----------



## HoaX (21. Mrz 2008)

die datein nach lib/ext zu kopieren ist falsch, die haben da nix zu suchen. binde sie einfach ganz normal in deiner IDE oder wo auch immer in den classpath für dieses eine projekt ein


----------



## jeroen (21. Mrz 2008)

> die datein nach lib/ext zu kopieren ist falsch, die haben da nix zu suchen. binde sie einfach ganz normal in deiner IDE oder wo auch immer in den classpath für dieses eine projekt ein



daran liegt es wohl. Kannste bitte sagen was ich jetzt gnau machen muss.


----------



## robochris (21. Mrz 2008)

In dem von mir geposteten Link steht doch einigermaßen genau, wo die Dateien hinmüssen, zumindest für die Verwendung mit der JRE.


----------



## jeroen (21. Mrz 2008)

welche entwicklungsumgebung benutzt ihr den mit der es geht ?


----------



## robochris (21. Mrz 2008)

ich benutze Eclipse. Dort muss man die RXTX Jar dann ins Projekt importieren.


----------



## HoaX (22. Mrz 2008)

importieren is da der falsche ausdruck, bei eclipse nimmt man die lib in den build path auf


----------



## Guest (22. Mrz 2008)

so ich hab jetzt NetBean und Eclipse installiert.
NetBean hat problem mit mein x64 Betriebssystem. Aber mit Eclipse gehs.

Jetzt hab ich noch ne Frage: Hat jemand ein kleines Beispiel fürs senden und empfangen ?
Im Internet finde ich nur Beispiel die viel zu aufwendig sind.


----------



## jeroen (23. Mrz 2008)

so habs selbst hin bekommen.

hab aber noch ne frage zu jigloo mit eclipse. Dort ist mein GUI fenster verschwunden (wievielleicht nur minimiert). wie bekomme ich das zurück ?


----------



## robochris (23. Mrz 2008)

Benutzt Du eigentlich einen echten RS232 Port am Computer oder hast Du einen USB-Adapter?

Es könnte mögich sein, dass es mit einem echten RS232 Port Probleme beim Empfang wegen Handshake-Einstellungen gibt.


----------



## jeroen (23. Mrz 2008)

habs selbst hin gekommen


----------

