云自無心水自閑

          天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
          posts - 288, comments - 524, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          java comm操作串口

          Posted on 2010-06-18 17:06 云自無心水自閑 閱讀(2382) 評論(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


          主站蜘蛛池模板: 军事| 满城县| 揭西县| 新乡县| 拉孜县| 龙山县| 沈阳市| 涪陵区| 庆阳市| 讷河市| 邹城市| 嘉峪关市| 仁寿县| 罗平县| 册亨县| 溆浦县| 东台市| 康乐县| 巫山县| 温州市| 永德县| 尤溪县| 长子县| 新疆| 石台县| 汉阴县| 南乐县| 台东县| 德化县| 南岸区| 青铜峡市| 蓬莱市| 昆明市| 永和县| 平原县| 沅陵县| 临桂县| 嵩明县| 张家界市| 永德县| 贺州市|