基于Java的串口通信
第30卷第2期2007年4月
电子器件
口№J删0fEh‰Devj姻V01.30No.2
Apr.2007Java_B舔edIIIlplementati蚰蚰SerialC岫胁icati蚰
LJLi口咒g,ZHUSh口枷n
(o池胛口,口舭z魂妇州智,墨盯缸蟮L梳e时卸,H4唱西州3lo。27,凸妇)
Abst曲d:1biIllplernentfreeo。m删∞的nbe却e印卿u咄’andpe工ipheml‰S0urceeqⅢpt【1甘lt,the即叮gy
consump在on枷谢119町rstemuses鲥a1com删凹tionasthec。m肌痂∞曲nm洲,whdeJ8vahaS恼spedaladvantageindevelopil瞎蚰syst∞L1ksyst叽receivesands∞dsda协inJavat‰ughR§232()0Mpor七诵m
黜mjarpa出ageandifnpl锄衄t!;s面al。黜uIli∞tion谢小廿leequipm∞tSbasedonRs485B峨1kapph盘一tionof也e吐1eoryofmllldth髓dons萄a1
c[mlr删枷衄enables廿1eirI】pl也nerltation0fdiffel伽tasksatthe鞠met血】eandirrIp∞vesutih臻donof!℃s)llrceandp臼{删noeofov刚1syst吼
K好w盯ds:serialcor曲mnication;java}Rs-485bus;comm.Jarpackage;multithtead
EEAoC:6210L
基于Java的串口通信
李良,朱善安
(浙江大学电气工程学院,杭州310027)
摘要:为实现计算机与外围数据源设备的自由通信,能耗监控系统采用了串口通信的方式,丽Java对开发该系统具有其独特的优势.系统在Jm程序中使用conmjar开发包通过R§232串口收发数据,并与基于Rs485总线的设备进行数据通
信.多线程技术在串口通讯中的运用,使得应用程序能同时执行不向的任务,提高了资源的利用率和系统的整体性能.
关键词:串口通信,Java;R}485总线;黜Jar开发包;多线程
中图分类号:Ⅱ,311文献标识码:A文章编号:10惦-94如(2007)哪71枷3本文介绍的是为设备能耗等进行实时监控的系程地监控维护
统.该控制系统通过串行通信口与电能表的数据交
换与处理,实现对用电设备的监控.杭州西子仪表公
司的三相四线电能表,可选配R孓485通信接口方
便地实现与服务器的通信.Java程序语言具有面向
对象、平台无关、多线程、安全等特性,是一种跨平
台、适合于分布式计算环境的面向对象的编程语言.
因此,用Java程序语言实现串口通信具有很强的实
用意义.
1系统的结构
该监控系统的物理拓扑结构为B/s/c模式,如1.1客户端
图l所示,即客户端(或者浏览器)+服务器+控制客户端通过web浏览器下载一种能嵌在网页
端模式.用户可在任何时间地点联入Internet,通过
中运行的Java小应用程序ⅢApplet与服务器遁web浏览器访问系统,连接服务器对各设备进行远讯.客户端的基本功能包括:显示图形用户界面
收稿日期:2006一04—26
作者简介:李良(1982-),女,硕士研究生,研究方向为远程设备以及网络实验室的状态监控,n乳nard龉惜@ya}∞.00mm
第2期李良,朱善安:基于Java的串口通信715
(GU)、连接服务器端、发送设置参数或者指令及显示数据和结果等.
1.2服务器端
服务器端采用SQLserver2000数据库,连接客户端和控制端,记录各项数据.
1.3控制端
控制端采用简单、成熟且稳定的485总线,对传感器——三相四线制电能表的数据进行采集,并上传到服务器的数据库上.
2串行通信接口
系统控制端的电能表支持R孓485总线协议,而工控机上的COM口为R§232串行通信端口[21.为使数据侦听能够进行,工控机需要通过232转485模块将232信号转换成485信号发出.服务器和仪表之间的硬件连接如图2所示.
图2R§485总线连接
2.1R孓232
RS232是目前最常用的一种串行通讯接口,被定义为一种在低速率串行通讯中增加通讯距离的单端标准R§232串行通信端口是每台计算机上的常规配备,通常有C⑨m和00阮两个端口,最大传输距离在50m左右,在总线上只允.许连接1个收发器.
2.2R§485
针对I己§232的不足,出现了一些如R§485的新的接口标准.I§485接口总线速度快(最大10Mbyte/s),传送距离远(90Kbyte/s下可传1200m),以差分平衡方式传输信号,具有很强的抗共模干扰能力,在总线上允许连接多达128个收发器,这样用户可以利用单一的f&485接口方便地建立起设备网络,上述优点使其成为首选的串行接口.因为RS485接口组成的半双工网络,一般只需二根连线,所以I毛§485接口均采用屏蔽双绞线传输.
3Java与COM口的串口通讯
3.1Java与c0删【11.jar开发包
Sun的J2SE中没有直接提供串行通讯协议的开发包,而是以独立的jar包形式发布在java.suILcom网站上—一即commjar,称之为Java(tm)Com删】11icationsAPI,它是J2SE的标准扩展.Co删njar提供了对R孓232串行端口通讯的支持,Java通过该类库能够极大地简化对串口的操作过程.与com札jar开发包一起的还有两个重要的文件,而n32cOtll.dn和javaxcOmIILproperties.comm.jar提供了通讯用的javaAPI,win32co矾dll提供了供comm.jar调用的本地驱动接口,javaxcomm.properties是这个驱动的类配置文件[3].Java读写串口过程主要是调用Javaxcomm包中的commAPI函数.在Javaxcomm包中串口的输人输出操作是数据流形式,在初始化串口波特率和数据位的同时,将输入输出流和该串口建立一个映射,串口的输入输出操作就直接反映在输人流和输出流上.通过CommPort类的getInputStre锄()和getOutputStream()方法即可分别取得端口的输人流和输出流.
3.2串口通讯的软件实现
串口写数据的流程图如图3所示.打开串口并对其初始化,就可以向定义的串口数据流写数据了.固恒M翌悃
图3向串口写数据流程图
串口读写的软件实现如下所示:
/*打开串口并对其初始化的程序*/
publicvoidhlitialize(){
portId=ConⅡnPortId∞戗盯.getPonIdentifier(”CoM21.);
se血1P0rt=(se血1Pon)portIdLop朗(
”seria】C(脚munication”,2000);
serialPon.setSerialPortParams(
1200,//波特率1200
S耐alI)0n.DATABrrs8,//数据位8位
serialP0儿s1、oPBrrs1,//数据停止位1位
Se血lP0n.PARITY_E、,EN//校验位1位
);
)
/*从端口中读取数据*/
hlplltS缸镏mi珥斌=serialPc)ngethlpllts瞰拼n();
hIput.read(…);
/*往端口中写数据*/
()印IItsh瑚miI】put=鲫[ialR眈薛oItpl鹉缸倒《);
0utput.wdte(…);
4电表通讯
4.1电表通讯规约及原理
杭州西子仪表公司的两款电能表,支持RS485