《Java串口通信编程指导pof.docx》由会员分享,可在线阅读,更多相关《Java串口通信编程指导pof.docx(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Javaa串口通通信编程程1. 概述在javva中,利利用Jaava Commmunnicaatioon包可可以操作作串口,但但官方的的包在33.0之之后就只只支持Liinuxx和Sollariis平台台了,WWinddowss平台的的只支持持到988年出的的 2.0版本本,不过过在XPP下还能能使用。另外,也可以用开源的Rxtx实现串口通信,这里仅以Java Communication包,在Windows平台实现串口通信进行说明。2. 前期准备备2.1. 下载Jaava Commmunnicaatioon包 下载地址址如下:htttp:/mddubuuc.ffreeesheell.orgg/
2、Joolt/javvacoomm220-wwin332.zzip。 如果是非非Winndowws平台台,请到到Sunn网站选选择其他他版本下下载。地地址如下下:htttp:/wwww.sunn.coom/ddownnloaad/pprodductts.xxml?id=432208dd3d2.2. 配置 解压缩jjavaacommm200-wiin322.ziip 把winn32ccom.dlll拷贝到到JAAVA_HOMMEjreebiin 把commm.jjar拷贝到到JAAVA_HOMMEjreeliibeext 把mm.ppropperttiess拷贝到到JAAVA_HOMMEjreel
3、iib set CLAASSPPATHH=JJAVAA_HOOMEjrre libbexxt commm.jjar;%cllassspatth%3. 实现过程程主要步骤骤包括: 获得串口口标识 打开串口口 设置串行行端口通通讯参数数 获取输入入(出)流流 进行读写写操作3.1. 获得串口口标识指定串口口的端口口号,生生成串口口的标识识类的实实例。javaax.ccommm.CoommPPorttIdeentiifieer是通讯端端口管理理器,控制访访问到通通讯端口口的中心心类。一个应应用程序序首先使使用CoommPPorttIdeentiifieer中的的方法,通过相相关的驱驱动去获获取那些些
4、通讯端端口是可可用的并并且选择择一个端端口便于于开始。它它包括如如下功能能:a. 通通过驱动动决定通通讯端口口是可用用的。 b. 打开开通讯端端口为了了I/OO操作。 c. 决定定端口的的拥有者者。 d. 解析析端口拥拥有者的的争夺。 e. 管理理事件显显示在端端口拥有有者的中中的状态态改变。示例代码码如下:代码:CommmPorrtIddenttifiier porrtIDD = nulll;try/ CommmPoortIIdenntiffierr 取取得porrtIDD = CommmPoortIIdenntiffierr.geetPoortIIdenntiffierr(CCOM11);
5、cattch(NoSSuchhPorrtExxcepptioon eex)ex.priintSStacckTrracee();3.2. 打开串口口示例代码码如下:代码:try/ porrt = (SSeriialPPortt)poortIID.oopenn(pporttAppp, 50000);cattch(PorrtInnUseeExccepttionn exx) ex.priintSStacckTrracee();50000(毫秒秒)是超超时时间间。3.3. 设置串行行端口通通讯参数数设置串口口传输的的波特率率、数据据位、停停止位、奇奇偶校验验等参数数。示例代码码如下:代码:try / 通
6、信条条件設設定/ 通信速速度 996000 baaud/ 8bbit/ 11bitt/ / 設定定/ 無制御御使用用porrt.ssetSSeriialPPorttParramss(96600, SeeriaalPoort.DATTABIITS_8,SeeriaalPoort.STOOPBIITS_1, SeeriaalPoort.PARRITYY_NOONE);porrt.ssetFFlowwConntroolMoode(SerriallPorrt.FFLOWWCONNTROOL_NNONEE); caatchh (UUnsuuppoorteedCoommOOperratiionEExcee
7、ptiion ex) ex.priintSStacckTrracee();Sysstemm.exxit(1);3.4. 获取输入入(出)流流利用geetInnputtStrreamm()以以及geetOuutpuutSttreaam()从每个个串口产生生对应的的输入输输出流对对象。示例代码码如下:代码:/受信信prottectted BuffferredRReadder commReaaderr;/送信信prottectted BuffferredOOutpputSStreeam commWriiterr;try / RS-2322C 入入力用 Reeadeer 生成commReaaderr
8、= neww BuuffeereddReaaderr( neww InnputtStrreammReaaderr(poort.gettInpputSStreeam();/ RS-2322C 出出力用 Wrriteer 生成commWriiterr=new BuffferredOOutpputSStreeam(porrt.ggetOOutpputSStreeam(); caatchh (IIOExxcepptioon eex)ex.priintSStacckTrracee();3.5. 进行读写写操作 写操作很很简单,只需要调用BufferedOutputStream的write()方法就可以了
9、。示例代码码如下:代码:try commWriiterr.wrritee(送送信内容容。);commWriiterr.fllushh(); caatchh (IIOExxcepptioon ee) porrt.cclosse();Sysstemm.ouut.pprinntlnn(SSeriial Sennd EErroor:+e);e.pprinntSttackkTraace(); 读操作,需需要如下下步骤: 继承SeeriaalPoortEEvenntLiisteenerr接口。 为SerriallPorrt添加加监听LListteneer。 实现该接接口的sseriialEEvennt(S
10、SeriialPPorttEveent eveent)方法。 通过BuuffeereddReaaderr的reaad()方法逐逐bytte读取取。当然然也可以以用reeadLLinee()方法法进行逐逐行读取取。示例代码码如下:代码:publlic claass SerriallPorrtTeermiinall exxtennds SerriallPorrtHaandllerimpplemmentts SSeriialPPorttEveentLListteneer /受受信 prootecctedd BuuffeereddReaaderr coomReeadeer; /送送信 prootecc
11、tedd BuuffeereddOuttputtStrreamm coomWrriteer; pubblicc SeeriaalPoortTTermminaal(SStriing porrtNaame) supper(porrtNaame, SSeriialPPorttTerrminnal); trry / SSeriialPPorttEveent 受取登録 pportt.adddEvventtLisstenner(thiis); cattch(ToooMannyLiisteenerrsExxcepptioon eex) eex.pprinntSttackkTraace(); SSysttem
12、.exiit(11); / Daata Avaailaablee 受取取 poort.nottifyyOnDDataaAvaailaablee(trrue); trry / RRS-2232CC 入力力用 Reaaderr 生生成 commReaaderr = neww BuuffeereddReaaderr( nnew InpputSStreeamRReadder(porrt.ggetIInpuutSttreaam(); / RRS-2232CC 出力力用 Wriiterr 生生成 commWriiterr = neww BuuffeereddOuttputtStrreamm(poort.g
13、ettOuttputtStrreamm(); cattch (IOOExccepttionn exx) eex.pprinntSttackkTraace(); SSysttem.exiit(11); / 処理理 pubblicc vooid serriallEveent(SerriallPorrtEvventt evventt) swiitchh(evventt.geetEvventtTyppe() caase SerriallPorrtEvventt.OUUTPUUT_BBUFFFER_EMPPTY:/ DDataa Avvaillablle 以以外処理理bbreaak;caase Serr
14、iallPorrtEvventt.DAATA_AVAAILAABLEE:/ DDataa Avvaillablle 処理SStriing buffferr = nulll; StrringgWriiterr sttrWrriteer = neew SStriingWWritter(); chaar c = nnew chaar220; iint newwDatta = 0; iint i = 0; wwhille (truue) tryy newwDatta = coomReeadeer.rreadd();/ 入力読込込 iff (nnewDDataa = -11 | neewDaata =
15、0x00d) / CRR bbreaak; ci = (chaar)nnewDDataa; iff(i 1100) breeak; ccatcch (IOEExceeptiion ex) reeturrn; i+; ttry strrWriiterr.wrritee(c); strrWriiterr.fllushh(); buffferr = strrWriiterr.tooStrringg(); strrWriiterr.cllosee(); rettTexxt = buuffeer; commReaaderr.cllosee(); porrt.cclosse(); cattch(Excce
16、pttionn e) ssetRReaddfinnishhFlgg(trrue); breeak; 4. 测试相关关正确安装装Javva CCommmuniicattionn APPI,并将自己己的程序序编译通通过以后后,你可可以按如如下方法法测试这这个程序序。如果果你只有有一台机机器,你你可以利利用一条条RS-2322电缆将将COMM1和CCOM22连接起起来,在在COMM1上运运行自己己的串口口读写程程序,在在COMM2上运运行第二二章辅助助工具中中提到的的串口调调试工具具。如果果你有两两台机器器的话,你你可以利利用一条条RS-2322电缆将将两台机机器的CCOM11(或者者是COOM2)
17、连接起起来,在在一端运运行程序序,另外外一端运运行串口口调试工工具。5. 示例代码码6. 辅助工具具6.1. 模拟串口口 软件名称称:Viirtuual SerriallPorrt DDrivver 目的:由由于串口口开发,需需要硬件件接口,以以及串口口链接线线。使用用本软件件可以在在没有硬硬件串口口接口和和链接线线的情况况下,模模拟出串串口,并并且可以以让模拟拟出的两两个串口口互相导导通。 下载地址址:htttp:/wwww.elttimaa.coom/ddownnloaad/vvspddxp/ (144天免费费试用)6.2. 串口调试试工具 软件名称称:Seerissterr 目 的:测试
18、的的辅助工工具,日日文界面面,可以以接受RRS2332C传传过来的的数据,并并且以多多种形式式表现出出来,如如以十六六进制显显示,以以文本方方式显示示等。还还可以编编辑送信信内容,进进行送信信等。 下载地址址:htttp:/wwww.vecctorr.coo.jpp/sooft/winn95/harrdwaare/se44235507.htmml(免费) 软件名称称:SuuperrCommmToool超超级串口口调试器器 目 的:和上面面的功能能类似,这这个是中中文界面面的。 下载地址址:htttp:/ddownn.zddnett.coom.ccn/ddetaail/8/7711993.sshtmml (免费费) 软件名称称:串口口调试(AcccesssPorrt) 目 的:更强大大的串口口检测调调试工具具。 下载地址址:htttp:/m/sooft/98338.hhtmll (免免费)