您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Java串口通信编程指导
Java串口通信编程第1页/共9页Java串口通信编程Java串口通信编程第2页/共9页1.概述在java中,利用JavaCommunication包可以操作串口,但官方的包在3.0之后就只支持Linux和Solaris平台了,Windows平台的只支持到98年出的2.0版本,不过在XP下还能使用。另外,也可以用开源的Rxtx实现串口通信,这里仅以JavaCommunication包,在Windows平台实现串口通信进行说明。2.前期准备2.1.下载JavaCommunication包下载地址如下:。如果是非Windows平台,请到Sun网站选择其他版本下载。地址如下:=43208d3d2.2.配置解压缩javacomm20-win32.zip把win32com.dll拷贝到{JAVA_HOME}\jre\bin把comm.jar拷贝到{JAVA_HOME}\jre\lib\ext把javax.comm.properties拷贝到{JAVA_HOME}\jre\libsetCLASSPATH={JAVA_HOME}\jre\lib\ext\comm.jar;%classpath%Java串口通信编程第3页/共9页3.实现过程主要步骤包括:获得串口标识打开串口设置串行端口通讯参数获取输入(出)流进行读写操作3.1.获得串口标识指定串口的端口号,生成串口的标识类的实例。javax.comm.CommPortIdentifier是通讯端口管理器,控制访问到通讯端口的中心类。一个应用程序首先使用CommPortIdentifier中的方法,通过相关的驱动去获取那些通讯端口是可用的并且选择一个端口便于开始。它包括如下功能:a.通过驱动决定通讯端口是可用的。b.打开通讯端口为了I/O操作。c.决定端口的拥有者。d.解析端口拥有者的争夺。e.管理事件显示在端口拥有者的中的状态改变。示例代码如下:代码:CommPortIdentifierportID=null;try{//CommPortIdentifierを取得portID=CommPortIdentifier.getPortIdentifier(COM1);}catch(NoSuchPortExceptionex){ex.printStackTrace();}3.2.打开串口示例代码如下:代码:try{//ポートのオープンport=(SerialPort)portID.open(portApp,5000);}catch(PortInUseExceptionex){ex.printStackTrace();}Java串口通信编程第4页/共9页5000(毫秒)是超时时间。3.3.设置串行端口通讯参数设置串口传输的波特率、数据位、停止位、奇偶校验等参数。示例代码如下:代码:try{//通信条件の設定//通信速度9600baud//データビット8bit//ストップビット1bit//パリティなし//フローコントロールの設定//無制御を使用port.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);}catch(UnsupportedCommOperationExceptionex){ex.printStackTrace();System.exit(1);}3.4.获取输入(出)流利用getInputStream()以及getOutputStream()从每个串口产生对应的输入输出流对象。示例代码如下:代码://受信バッファprotectedBufferedReadercomReader;//送信バッファprotectedBufferedOutputStreamcomWriter;try{//RS-232C入力用のReaderを生成comReader=newBufferedReader(newInputStreamReader(port.getInputStream()));//RS-232C出力用のWriterを生成comWriter=newBufferedOutputStream(port.getOutputStream());}catch(IOExceptionex){ex.printStackTrace();Java串口通信编程第5页/共9页}3.5.进行读写操作写操作很简单,只需要调用BufferedOutputStream的write()方法就可以了。示例代码如下:代码:try{comWriter.write(送信内容。。。);comWriter.flush();}catch(IOExceptione){port.close();System.out.println(SerialSendError:+e);e.printStackTrace();}读操作,需要如下步骤:继承SerialPortEventListener接口。为SerialPort添加监听Listener。实现该接口的serialEvent(SerialPortEventevent)方法。通过BufferedReader的read()方法逐byte读取。当然也可以用readLine()方法进行逐行读取。示例代码如下:代码:publicclassSerialPortTerminalextendsSerialPortHandlerimplementsSerialPortEventListener{//受信バッファprotectedBufferedReadercomReader;//送信バッファprotectedBufferedOutputStreamcomWriter;publicSerialPortTerminal(StringportName){super(portName,SerialPortTerminal);try{//SerialPortEventを受け取るためのリスナの登録port.addEventListener(this);}catch(TooManyListenersExceptionex){ex.printStackTrace();System.exit(1);}//DataAvailableイベントを受け取るようにするJava串口通信编程第6页/共9页port.notifyOnDataAvailable(true);try{//RS-232C入力用のReaderを生成comReader=newBufferedReader(newInputStreamReader(port.getInputStream()));//RS-232C出力用のWriterを生成comWriter=newBufferedOutputStream(port.getOutputStream());}catch(IOExceptionex){ex.printStackTrace();System.exit(1);}}//イベント処理ルーチンpublicvoidserialEvent(SerialPortEventevent){switch(event.getEventType()){caseSerialPortEvent.OUTPUT_BUFFER_EMPTY://DataAvailable以外のイベントは処理しないbreak;caseSerialPortEvent.DATA_AVAILABLE://DataAvailableの処理Stringbuffer=null;StringWriterstrWriter=newStringWriter();char[]c=newchar[20];intnewData=0;inti=0;while(true){try{newData=comReader.read();//入力ストリームから読み込みif(newData==-1||newData==0x0d){//CRbreak;}c[i]=(char)newData;if(i100){break;}}catch(IOExceptionex){return;}i++;}try{strWriter.write(c);strWriter.flush();buffer=strWriter.toString();strWriter.close();retText=buffer;comReader.close();port.close();}catch(Exceptione){}setReadfinishFlg(true);break;}Java串口通信编程第7页/共9页}}Java串口通信编程第8页/共9页4.测试相关正确安装JavaCommunicationAPI,并将自己的程序编译通过以后,你可以按如下方法测试这个程序。如果你只有一台机器,你可以利用一条RS-232电缆将COM1和COM2连接起来,在COM1上运行自己的串口读写程序,在COM2上运行第二章辅助工具中提到的串口调试工具。如果你有两台机器的话,你可以利用一条RS-232电缆将两台机器的COM1(或者是COM2)连接起来,在一端运行程序,另外一端运行串口调试工具。5.示例代码Java串口通信编程第9页/共9页6.辅助工具6.1.模拟串口软件名称:VirtualSerialPortDriver目的:由于串口开发,需要硬件接口,以及串口链接线。使用本软件可以在没有硬件串口接口和链接线的情况下,模拟出串口,并且可以让模拟出的两个串口互相导通。下载地址:(14天免费试用)6.2.串口调试工具软件名称:Serister目的:测试的辅助工具,日文界面,可以接受RS232C传过来的数据,并且以多种形式表现出来,如以十六进制显示,以文本方式显示等。还可以编辑送信内容,进行送信等。下载地址:(免费)软件名称:SuperCommTool超级串口调试器目的:和上面的功能类似,这个是中文界面的。下载地址:(免费)软件名称:串口调试(AccessPort)目的:更强大的串口检测调试工具。下载地址:(免费)
本文标题:Java串口通信编程指导
链接地址:https://www.777doc.com/doc-309831 .html