云自无心水自闲

天平山上白云泉,云自无心水自闲。何必奔冲山下去,更添波浪向人间!
posts - 288, comments - 524, trackbacks - 0, articles - 6
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

java comm操作串口

Posted on 2010-06-18 17:06 云自无心水自闲 阅读(2374) 评论(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[] argsthrows 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



只有注册用户登录后才能发表评论。


网站导航: