基于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

相关文档
最新文档