`
asd8313123
  • 浏览: 18983 次
  • 性别: Icon_minigender_1
  • 来自: 韶关
社区版块
存档分类
最新评论

java串口编程(转)

    博客分类:
  • java
阅读更多

1. SerialBean
SerialBean是本类库与其他应用程序的接口。该类库中定义了SerialBean的构造方法以及初始化串口,从串口读取数据,往串口写入数据以及关闭串口的函数。具体介绍如下:

public SerialBean(int PortID)
本函数构造一个指向特定串口的SerialBean,该串口由参数PortID所指定。PortID = 1 表示COM1,PortID = 2 表示COM2,由此类推。

public int Initialize()
本函数初始化所指定的串口并返回初始化结果。如果初始化成功返回1,否则返回-1。初始化的结果是该串口被SerialBean独占性使用,其参数被设置为9600, N, 8, 1。如果串口被成功初始化,则打开一个进程读取从串口传入的数据并将其保存在缓冲区中。

public String ReadPort(int Length)
本函数从串口(缓冲区)中读取指定长度的一个字符串。参数Length指定所返回字符串的长度。

public void WritePort(String Msg)
本函数向串口发送一个字符串。参数Msg是需要发送的字符串。

public void ClosePort()
本函数停止串口检测进程并关闭串口。

 

package serial; 
import java.io.*; 
import java.util.*; 
import javax.comm.*; 
/** 
  * 
  * This bean provides some basic functions to implement full dulplex 
  * information exchange through the srial port. 
  * 
  */ 
public class SerialBean 
{ 
   static String PortName; 
   CommPortIdentifier portId; 
   SerialPort serialPort; 
   static OutputStream out; 
   static InputStream  in; 
   SerialBuffer SB; 
   ReadSerial   RT; 
     /** 
      * 
      * Constructor 
      * 
      * @param PortID the ID of the serial to be used. 1 for COM1, 
      * 2 for COM2, etc. 
      * 
      */ 
     public SerialBean(int PortID) 
     { 
       PortName = "COM" + PortID; 
     } 
     /** 
      * 
      * This function initialize the serial port for communication. It startss a 
      * thread which consistently monitors the serial port. Any signal capturred 
      * from the serial port is stored into a buffer area. 
      * 
      */ 
     public int Initialize() 
     { 
       int InitSuccess = 1; 
       int InitFail    = -1; 
     try 
     { 
       portId = CommPortIdentifier.getPortIdentifier(PortName); 
       try 
       { 
         serialPort = (SerialPort) 
         portId.open("Serial_Communication", 2000); 
       } catch (PortInUseException e) 
       { 
         return InitFail; 
       } 
       //Use InputStream in to read from the serial port, and OutputStream 
       //out to write to the serial port. 
       try 
       { 
         in  = serialPort.getInputStream(); 
         out = serialPort.getOutputStream(); 
       } catch (IOException e) 
       { 
         return InitFail; 
       } 
       //Initialize the communication parameters to 9600, 8, 1, none. 
       try 
       { 
          serialPort.setSerialPortParams(9600, 
               SerialPort.DATABITS_8, 
               SerialPort.STOPBITS_1, 
               SerialPort.PARITY_NONE); 
       } catch (UnsupportedCommOperationException e) 
       { 
         return InitFail; 
       } 
     } catch (NoSuchPortException e) 
     { 
       return InitFail; 
     } 
     // when successfully open the serial port,  create a new serial buffer, 
     // then create a thread that consistently accepts incoming signals from 
     // the serial port. Incoming signals are stored in the serial buffer. 
     SB = new SerialBuffer(); 
     RT = new ReadSerial(SB, in); 
     RT.start(); 
     // return success information 
     return InitSuccess; 
     } 
     /** 
      * 
      * This function returns a string with a certain length from the incomin 
      * messages. 
      * 
      * @param Length The length of the string to be returned. 
      * 
      */ 
     public String ReadPort(int Length) 
     { 
       String Msg; 
       Msg = SB.GetMsg(Length); 
       return Msg; 
     } 
     /** 
      * 
      * This function sends a message through the serial port. 
      * 
      * @param Msg The string to be sent. 
      * 
      */ 
     public void WritePort(String Msg) 
     { 
       int c; 
       try 
       { 
         for (int i = 0; i < Msg.length(); i++) 
           out.write(Msg.charAt(i)); 
       } catch (IOException e)  {} 
     } 
     /** 
      * 
      * This function closes the serial port in use. 
      * 
      */ 
     public void ClosePort() 
     { 
       RT.stop(); 
       serialPort.close(); 
     } 
} 

 

2. SerialBuffer

SerialBuffer是本类库中所定义的串口缓冲区,它定义了往该缓冲区中写入数据和从该缓冲区中读取数据所需要的函数。

public synchronized String GetMsg(int Length)
本函数从串口(缓冲区)中读取指定长度的一个字符串。参数Length指定所返回字符串的长度。

public synchronized void PutChar(int c)
本函数望串口缓冲区中写入一个字符,参数c 是需要写入的字符。

在往缓冲区写入数据或者是从缓冲区读取数据的时候,必须保证数据的同步,因此GetMsg和PutChar函数均被声明为synchronized并在具体实现中采取措施实现的数据的同步。

 

package serial; 
/** 
  * 
  * This class implements the buffer area to store incoming data from the serial 
  * port. 
  * 
  */ 
public class SerialBuffer 
{ 
   private String Content = ""; 
   private String CurrentMsg, TempContent; 
   private boolean available = false; 
   private int LengthNeeded = 1; 
     /** 
      * 
      * This function returns a string with a certain length from the incomin 
      * messages. 
      * 
      * @param Length The length of the string to be returned. 
      * 
      */ 
   public synchronized String GetMsg(int Length) 
   { 
     LengthNeeded = Length; 
     notifyAll(); 
     if (LengthNeeded > Content.length()) 
     { 
       available = false; 
       while (available == false) 
       { 
         try 
         { 
           wait(); 
         } catch (InterruptedException e) { } 
       } 
     } 
     CurrentMsg  = Content.substring(0, LengthNeeded); 
     TempContent = Content.substring(LengthNeeded); 
     Content = TempContent; 
     LengthNeeded = 1; 
     notifyAll(); 
     return CurrentMsg; 
   } 
     /** 
      * 
      * This function stores a character captured from the serial port to the 
      * buffer area. 
      * 
      * @param t The char value of the character to be stored. 
      * 
      */ 
   public synchronized void PutChar(int c) 
   { 
     Character d = new Character((char) c); 
     Content = Content.concat(d.toString()); 
     if (LengthNeeded < Content.length()) 
     { 
       available = true; 
     } 
     notifyAll(); 
   } 
} 

 

  3. ReadSerial
ReadSerial是一个进程,它不断的从指定的串口读取数据并将其存放到缓冲区中。

public ReadSerial(SerialBuffer SB, InputStream Port)
本函数构造一个ReadSerial进程,参数SB指定存放传入数据的缓冲区,参数Port指定从串口所接收的数据流。

public void run()
ReadSerial进程的主函数,它不断的从指定的串口读取数据并将其存放到缓冲区中。

package serial; 
import java.io.*; 
/** 
  * 
  * This class reads message from the specific serial port and save 
  * the message to the serial buffer. 
  * 
  */ 
public class ReadSerial extends Thread 
{ 
   private SerialBuffer ComBuffer; 
   private InputStream ComPort; 
     /** 
      * 
      * Constructor 
      * 
      * @param SB The buffer to save the incoming messages. 
      * @param Port The InputStream from the specific serial port. 
      * 
      */ 
   public ReadSerial(SerialBuffer SB, InputStream Port) 
   { 
     ComBuffer = SB; 
     ComPort = Port; 
   } 
   public void run() 
   { 
     int c; 
     try 
     { 
       while (true) 
       { 
         c = ComPort.read(); 
         ComBuffer.PutChar(c); 
       } 
     } catch (IOException e) {} 
   } 
} 

 

4. SerialExample
SerialExample是本类库所提供的一个例程。它所实现的功能是打开串口COM1,
对其进行初始化,从串口读取信息对其进行处理后将处理结果发送到串口。

import serial.*; 
import java.io.*; 
/** 
  * 
  * This is an example of how to use the SerialBean. It opens COM1 and reads 
  * six messages with different length form the serial port. 
  * 
  */ 
class SerialExample 
{ 
   public static void main(String[] args) 
   { 
     //TO DO: Add your JAVA codes here 
     SerialBean SB = new SerialBean(1); 
     String Msg; 
     SB.Initialize(); 
     for (int i = 5; i <= 10; i++) 
     { 
       Msg = SB.ReadPort(i); 
       SB.WritePort("Reply: " + Msg); 
     } 
     SB.ClosePort(); 
   } 
} 

 本类库中使用了Java Communication API (javax.comm)。这是一个Java扩展类库,
并不包括在标准的Java SDK当中。如果你尚未安装这个扩展类库的话,你应该从
Sun公司的Java站点下载这个类库并将其安装在你的系统上。在所下载的包里面包括
一个安装说明,如果你没有正确安装这个类库及其运行环境的话,运行这个程序的时候
你会找不到串口。
正确安装Java Communication API并将上述程序编译通过以后,
你可以按如下方法测试这个程序。如果你只有一台机器,你可以利用一条
RS-232电缆将COM1和COM2连接起来,在COM1上运行SerialExample,
在COM2上运行Windows提供的超级终端程序。如果你有两台机器的话,
你可以利用一条RS-232电缆将两台机器的COM1(或者是COM2)连接起来,在一端运行例程,
另外一端运行Windows提供的超级终端程序。如果有必要的话,可以对SerialExample中
所声明的串口进行相应改动。
本程序在Windows 2000 + Java SDK 1.3环境下编译通过并成功运行。

分享到:
评论

相关推荐

    全面掌握JAVA串口编程

    Java串口编程是Java开发中一个重要的领域,尤其在物联网(IoT)、嵌入式系统和设备通信中,它扮演着关键角色。本资源包包含的8个文件旨在帮助开发者全面理解并掌握这一技术。以下是对每个知识点的详细解释: 1. **...

    java串口编程实例

    java串口编程实例 ConnDB.java

    java串口编程小实例

    Java串口编程是一种在Java应用程序中与物理串行端口进行通信的技术,广泛应用于设备控制、数据采集、物联网(IoT)应用等领域。本实例旨在通过简洁易懂的代码示例,帮助开发者理解如何在Java中实现串口通信。 首先,...

    Java串口编程

    Java串口编程

    Java串口编程API包

    Java串口编程API包是Java平台上进行串行通信的关键工具,它允许开发者通过Java程序控制串行端口,实现与外部设备的交互。这个API包包括了几个关键组件,如`comm2.0.jar`、`win32com.dll`以及`javax.comm.properties`...

    Java串口编程 Java手机串口短信发送

    Java串口编程是一种在Java应用程序中与物理串行端口进行通信的技术,广泛应用于设备控制、数据采集、物联网(IoT)等领域。本实例将详细讲解如何使用Java进行串口通信,并提供一个Java手机串口短信发送的代码示例。 ...

    JAVA 串口编程JDK

    Java串口编程是Java开发中一个相对特殊但重要的领域,特别是在设备交互、嵌入式系统或物联网(IoT)应用中。"JAVA 串口编程JDK" 提供了一个Java运行环境包,使得开发者能够利用Java语言进行串口通信,这对于那些希望在...

    Java串口通信编程

    Java 串口通信编程 Java 串口通信编程是指使用 Java 语言开发串口通信程序的过程。串口通信是一种常见的通信方式,广泛应用于工业自动化、机器人控制、物联网等领域。Java 语言作为一门跨平台的编程语言,能够在...

    java串口编程准备事宜

    Java串口编程是Java开发中一个相对小众但重要的领域,尤其在嵌入式系统、自动化设备、物联网(IoT)等领域应用广泛。在进行Java串口编程之前,需要了解和准备一些基础知识和工具,以便顺利地实现串口通信。 首先,...

    RXTX java串口编程jar包

    RXTX java串口编程jar包RXTX java串口编程jar包RXTX java串口编程jar包RXTX java串口编程jar包RXTX java串口编程jar包RXTX java串口编程jar包

    java 串口编程指南

    从最基础的串口通信介绍如何用java去实现,知道了串口通信的原理之后再用代码实现应该就是最简单的事情了吧

    Java串口操作_java串口编程_

    一、Java串口编程基础 1. 串行通信:串行通信是一种数据传输方式,数据按位顺序传输。与并行通信相比,串行通信成本更低,但速度较慢。常见的串口接口有RS-232、USB转串口等。 2. 串口参数:波特率、数据位、停止...

    java 串口编程demo

    Java串口编程是一种在Java应用程序中与硬件设备进行通信的技术,尤其适用于嵌入式系统、自动化设备或物联网(IoT)应用。Java提供了一个名为`javacomm`的API,它使得开发者能够处理串行端口(串口)的数据传输。在给定...

    mac上的java串口编程包

    Java串口编程在Mac OS平台上是一项重要的技术,它允许开发者通过Java程序与硬件设备进行通信,比如Arduino控制器、传感器或其他支持串行接口的设备。在Mac上进行Java串口编程时,开发者通常会借助第三方库或者Java的...

    Java串口编程 - 介绍java串口实现方法

    ### Java串口编程 - 介绍Java串口实现方法 #### 一、概述 在工业自动化、设备通信等领域,串行通信是一种非常常见的数据传输方式。Java作为一种广泛应用的编程语言,支持通过第三方库来实现串口通信功能。本文将...

    java串口编程串口驱动

    Java串口编程是一种在Java应用程序中与物理串行端口进行通信的技术,广泛应用于设备控制、数据采集和物联网(IoT)项目。串口驱动,也称为串行端口驱动,是实现这种通信的关键组件。在Java中,我们通常使用第三方库如...

    java串口编程起步

    ### Java串口编程起步知识点详解 #### 一、引言 串口通信是电子设备间进行数据交换的一种常见方式,特别是在工业控制、自动化系统及物联网领域应用广泛。Java作为一种跨平台的语言,在串口编程方面也提供了强大的...

    java串口通信编程.zip

    Java串口通信编程是Java应用程序与外部设备之间通过串行接口进行数据交换的一种技术。在Java中实现串口通信,通常需要借助第三方库,RXTXcomm.jar就是这样一个常用的库,它提供了Java语言访问串口的功能。这个压缩包...

    java串口编程基本归纳

    java串口编程基本归纳

    串口编程,java串口编程,Shell

    本压缩包包含的资源是关于Linux嵌入式开发中的串口编程,涉及到Java语言和Shell脚本的应用。 首先,我们来看`samsung.c`,这可能是一个针对三星硬件平台的C语言实现的串口驱动程序。在Linux中,驱动程序是操作系统...

Global site tag (gtag.js) - Google Analytics