你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:文章管理 / 本期精品文章
Java串行通信类的设计与应用
 

马玉春

  要 Java语言具有一次编译、到处运行的特性,并广泛应用于嵌入式系统中。本文在NetBeans 5.0环境下实现了通用的串行通信类,可以方便地发送和读取任何字节,并给出了应用实例和测试效果。该技术可以广泛应用于基于Java的嵌入式设备的二次开发中。

关键词 串行通信,串口初始化,多线程,数据接收

 

一、引言

Java程序具有一次编译、到处运行的跨平台特性,随着Java在嵌入式系统中的广泛应用,研究Java的串行通信程序具有日益重要的意义。文献[1]实现了基于Java事件驱动的串行通信,在该文献及Sun公司中国技术社区的蒋清野的基础之上,设计了通用的串行通信类,跟文献[2]相比,这些类更简洁、健壮,而且,可以方便地处理任何字节,并可以将一批数据作为一个整体来提交,方便用户的下一步处理。这里的通用串口类由两个Java类组成,OperateCOM类用来初始化串口,并启动数据接收进程;ReadCOM类用来读取串口数据,并将一批数据作为整体提交。SerialExample类利用OperateCOMReadCOM类进行串行通信的测试,并利用文献[3]中的工具进行各种格式的显示。

 

二、OperateCOM

OperateCOMReadCOM类的包名均为SerialPortOperateCOM类主要完成的工作是:取得串口ID、打开串口、获取输入输出流、设置串口参数、启动串口数据读取进程。然后,就是常用的读取串口数据、从串口发送数据,以及关闭串口。下面对其方法分别介绍如下:

.public OperateCOM (int PortID, int nLen )

这是OperateCOM类的构造方法,PortID表示需要操作的串口号,“1”表示“COM1”,“2”表示“COM2”……以此类推;nLen表示串口的输入缓冲区大小,最小值为1。构造方法的源代码如下:

    public OperateCOM(int PortID, int nLen) {

        PortName = "COM"+PortID;

        nMaxLength = nLen;

        if (nLen < 1) nMaxLength = 1;

    }   

 

.public int GetPortID()    

该方法通过串口名字,如COM1,取得串口的ID,如果正确则返回Serial_Success(常数1);如果错误,则抛出没有此串口的异常NoSuchPortException,并返回Serial_Error(常数-1),其源代码如下:

    public int GetPortID(){

        try {

            portID = CommPortIdentifier.getPortIdentifier(PortName);

        } catch (NoSuchPortException e) {

            return Serial_Error;

        }

        return Serial_Success;

    }

 

.public int Open(String AppName, int nTime)

该方法通过获取的串口portID打开串口,输入参数AppName是程序的名称,nTime表示延迟的毫秒数。如果该串口正在被使用,则会抛出PortInUseException异常;如果打开串口成功,则根据serialPort继续获取串口的输入输出流,其源代码如下:

    public int Open(String AppName, int nTime){

        try {

            serialPort = (SerialPort)portID.open(AppName, nTime);

        } catch (PortInUseException e) {

            return Serial_Error;

        }

       

        try {

            in = serialPort.getInputStream();

            out = serialPort.getOutputStream();

        } catch (IOException e) {

            return Serial_Error;

        }

        return Serial_Success;

    }

   

.public int SetParams(int baudrate, int dataBits, int stopBits, int parity)

该方法用来设置串口参数。输入参数分别对应波特率、数据位、停止位和校验方式。在Java Communications APIJavadoc中,有相应的常数代号,例如,DATABITS_8表示整数8STOPBITS_1表示整数1等。源代码如下:

    public int SetParams(int baudrate, int dataBits, int stopBits, int parity){

        try {

            serialPort.setSerialPortParams(baudrate, dataBits, stopBits, parity);

        } catch (UnsupportedCommOperationException e) {

            return Serial_Error;

        }

        return Serial_Success;

    }

   

.public void StartCom(int nDelay)

该方法启动数据接收进程,nDelay是延迟的毫秒数,表示凡是时间间隔在nDelay毫秒之内的数据,都作为一个整体来处理。从文献[1]中的测试效果可知,串行通信的数据确实是不连续的,需要进行累加处理。ReadCOMThread类的子类,本方法根据给定的参数,生成一个多线程的实例,并启动多线程。OperateCOM类直接控制ReadCOM类的实例的生成、多线程的销毁与数据的读取等。StartCom的源代码如下:

    public void StartCom(int nDelay){

        readThread = new ReadCOM(in, nDelay, nMaxLength);

        readThread.start();

    }

  推荐精品文章

·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 
·2023年7月目录
·2023年6月目录 
·2023年5月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089