Posted on 2010-06-18 17:06 
云自无心水自闲 阅读(2401) 
评论(0)  编辑  收藏  所属分类: 
Java 、
心得体会 
			
			
		 
		一、往串口写数据
import java.io.*;
import javax.comm.*;
import java.util.*;
public class PortWriter
{
    static Enumeration ports;
    static CommPortIdentifier pID;
    static OutputStream outStream;
    SerialPort serPort;
    static String messageToSend = "message!\n";
    
    public PortWriter() throws Exception{
        serPort = (SerialPort)pID.open("PortWriter",2000);
        outStream = serPort.getOutputStream();
        serPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
        SerialPort.STOPBITS_1,
        SerialPort.PARITY_NONE);
    }    
    
    public static void main(String[] args) throws Exception{
        ports = CommPortIdentifier.getPortIdentifiers();
        
        while(ports.hasMoreElements())
        {
            pID = (CommPortIdentifier)ports.nextElement();
            System.out.println("Port " + pID.getName());
            
            if (pID.getPortType() == CommPortIdentifier.PORT_SERIAL)
            {
                if (pID.getName().equals("COM1"))
                {
                    PortWriter pWriter = new PortWriter();
                    System.out.println("COM1 found");
                }
            }
        }
        outStream.write(messageToSend.getBytes());
    }
}
二、通过串口传送文件:
import java.io.*;
import javax.comm.*;
public class PrintFile {
  public static void main(String args[]) throws Exception {
    if (args.length != 2) {
      System.err.println("usage : java PrintFile port file");
      System.err.println("sample: java PrintFile LPT1 sample.prn");
      System.exit(-1);
    }
    String portname = args[0];
    String filename = args[1];
    // Get port
    CommPortIdentifier portId = CommPortIdentifier
        .getPortIdentifier(portname);
    // Open port
    // Requires owner name and timeout
    CommPort port = portId.open("Java Printing", 30000);
    // Setup reading from file
    FileInputStream fis = new FileInputStream(filename);
    BufferedInputStream bis = new BufferedInputStream(fis);
    // Setup output
    OutputStream os = port.getOutputStream();
    BufferedOutputStream bos = new BufferedOutputStream(os);
    int c;
    while ((c = bis.read()) != -1) {
      bos.write(c);
    }
    // Close
    bos.close();
    bis.close();
    port.close();
  }
}
Below we have an example which sends a string to one serial port, receives it on the same port. You need a null-modem for this (just connect the RX and TX pins of your serial port to test this). In a production environment this example can be used as a template for sending and receiving data from e.g. a micro-controller board. 
// derived from SUN's examples in the javax.comm package
import java.io.*;
import java.util.*;
//import javax.comm.*; // for SUN's serial/parallel port libraries
import gnu.io.*; // for rxtxSerial library


public class nulltest implements Runnable, SerialPortEventListener 
{
   static CommPortIdentifier portId;
   static CommPortIdentifier saveportId;
   static Enumeration        portList;
   InputStream           inputStream;
   SerialPort           serialPort;
   Thread           readThread;

   static String        messageString = "Hello, world!";
   static OutputStream      outputStream;
   static boolean        outputBufferEmptyFlag = false;


   public static void main(String[] args) 
{
      boolean           portFound = false;
      String           defaultPort;
      
      // determine the name of the serial port on several operating systems
      String osname = System.getProperty("os.name","").toLowerCase();

      if ( osname.startsWith("windows") ) 
{
         // windows
         defaultPort = "COM1";

      } else if (osname.startsWith("linux")) 
{
         // linux
        defaultPort = "/dev/ttyS0";

      } else if ( osname.startsWith("mac") ) 
{
         // mac
         defaultPort = "????";

      } else 
{
         System.out.println("Sorry, your operating system is not supported");
         return;
      }
          

      if (args.length > 0) 
{
         defaultPort = args[0];
      } 

      System.out.println("Set default port to "+defaultPort);
      
        // parse ports and if the default port is found, initialized the reader
      portList = CommPortIdentifier.getPortIdentifiers();

      while (portList.hasMoreElements()) 
{
         portId = (CommPortIdentifier) portList.nextElement();

         if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) 
{

            if (portId.getName().equals(defaultPort)) 
{
               System.out.println("Found port: "+defaultPort);
               portFound = true;
               // init reader thread
               nulltest reader = new nulltest();
            } 
         } 
         
      } 

      if (!portFound) 
{
         System.out.println("port " + defaultPort + " not found.");
      } 
      
   } 


   public void initwritetoport() 
{
      // initwritetoport() assumes that the port has already been opened and
      //    initialized by "public nulltest()"


      try 
{
         // get the outputstream
         outputStream = serialPort.getOutputStream();

      } catch (IOException e) 
{}


      try 
{
         // activate the OUTPUT_BUFFER_EMPTY notifier
         serialPort.notifyOnOutputEmpty(true);

      } catch (Exception e) 
{
         System.out.println("Error setting event notification");
         System.out.println(e.toString());
         System.exit(-1);
      }
      
   }


   public void writetoport() 
{
      System.out.println("Writing \""+messageString+"\" to "+serialPort.getName());

      try 
{
         // write string to serial port
         outputStream.write(messageString.getBytes());

      } catch (IOException e) 
{}
   }


   public nulltest() 
{
      // initalize serial port

      try 
{
         serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);

      } catch (PortInUseException e) 
{}
   

      try 
{
         inputStream = serialPort.getInputStream();

      } catch (IOException e) 
{}
   

      try 
{
         serialPort.addEventListener(this);

      } catch (TooManyListenersException e) 
{}
      
      // activate the DATA_AVAILABLE notifier
      serialPort.notifyOnDataAvailable(true);
   

      try 
{
         // set port parameters
         serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, 
                     SerialPort.STOPBITS_1, 
                     SerialPort.PARITY_NONE);

      } catch (UnsupportedCommOperationException e) 
{}
      
      // start the read thread
      readThread = new Thread(this);
      readThread.start();
      
   }


   public void run() 
{
      // first thing in the thread, we initialize the write operation
      initwritetoport();

      try 
{

         while (true) 
{
            // write string to port, the serialEvent will read it
            writetoport();
            Thread.sleep(1000);
         }

      } catch (InterruptedException e) 
{}
   } 


   public void serialEvent(SerialPortEvent event) 
{

      switch (event.getEventType()) 
{
      case SerialPortEvent.BI:
      case SerialPortEvent.OE:
      case SerialPortEvent.FE:
      case SerialPortEvent.PE:
      case SerialPortEvent.CD:
      case SerialPortEvent.CTS:
      case SerialPortEvent.DSR:
      case SerialPortEvent.RI:
      case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
         break;
      case SerialPortEvent.DATA_AVAILABLE:
         // we get here if data has been received
         byte[] readBuffer = new byte[20];

         try 
{
            // read data

            while (inputStream.available() > 0) 
{
               int numBytes = inputStream.read(readBuffer);
            } 
            // print data
            String result  = new String(readBuffer);
            System.out.println("Read: "+result);

         } catch (IOException e) 
{}
   
         break;
      }
   } 

}

 
http://edn.embarcadero.com/article/31915
http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part3/Chapter23/serialPortDemo.html
http://radio.javaranch.com/frank/2004/03/22/1079951422000.html
http://www.velocityreviews.com/forums/t144781-com-port-communication.html