基于java数据采集串口通讯的设计和实现DesignandRealizationoftheSerialCommunicationforDataAcquisitionBasedOnJava(武汉中国地质大学)周海涛高兴锁江晓峰Zhou,HaitaoGao,XingsuoJiang,Xiaofeng摘要:介绍如何编写基于java的数据采集串口通讯,结合实际应用,对采用Javax.comm类库进行串口通信设计进行了阐述。关键词:Java;串口通信;Javax.comm;监听器中图分类号:TP311.52文献标识码:AAbstract:IntroducethemethodtoimplementjavabaseddatacollectingSerialCommunication,ExplainthebasicproceduretodesignSerialCommunicationusingJavax.commclasslibrarywithpracticalapplications.Keywords:Java;SerialCommunication;Javax.comm;Listener文章编号:1008-0570(2006)02-1-0141-02引言白沙集团长沙卷烟厂数字化质量管理系统是白沙集团在2004年实施的一个以提高管理水平和产品质量的崭新的信息化管理系统。质量管理的过程控制和生产过程中的质量数据采集分析显得非常重要,数据多、报表多;较多的手工填表,容易因笔误而影响结果。因此,需要一套自动化过程高、观测快速的数据采集系统软件。Java由于具有开放性、平台无关性和面向对象等特性,使得其成为了一个理想的软件开发平台。本文作者利用Java串口通信API开发了一个用于串口通讯的Java程序,大大简化了对串口进行操作的过程,Java串口通信API(Javax.comm)是一个Java扩展类库,并不包括在标准的Java2SDK当中,需要进行安装。1系统硬件结构及工作原理本文以该项目中检验科透气度仪ppm100数据的实时采集为例,讨论如何通过串口进行数据的采集。只要硬件包括主控计算机、透气度仪ppm100、RS232连接线。系统的硬件构成如图1所示。计算机的COM口采用的是RS232通信方式,检验员通过透气度仪ppm100随机的进行包装原料的透气度检验,主控计算机通过COM口实时采集到原始数据,分析原始数据后将数据通过网络保存到数据库中。这样避免了以前打印测试结果手工填写的方式,提高了效率,减少了笔误。2系统软件设计软件系统基于面向对象的编程语言,利用Java及其提供的Javax.comm控件来实现。根据仪器的特性,在本系统中通信协议采用ASCII码传输模式,波特率为600bps,数据位7位,奇校验,停止位1位。由于检验员的检测时间随机的,所以我们在工作之前就要打开数据采集系统进行监视;当仪器请求数据传输时,系统响应请求,仪器得到响应确认数据传输线路有效后,按照预定格式发送数据;数据到达缓冲区后,系统及时读取数据,将分析处理结果通过网络保存在数据库中;系统继续处于监听状态,等待下一次数据的到来。采集模块的流程如图2所示。3利用Javax.comm控件实现串口通信Sun公司在Javax.comm类库包中提供了完善的串口、并口通信功能。Javax.comm类库通过SerialPort对象来对串口事件进行控制,通过getInputStream()方法读取串口的数据,getOutputStream()方法向串口写数据;通过setSeri-alPortParams()方法设置串口的通信协议。对于实时监听的应用程序可以通过addEventListener()方法注册监听器;通过serialEvent()方法设置串口需要响应的事件。当相应的事件或串口错误事件发生时,系统会激活监听程序,然后进行相应的操作。周海涛:硕士基金项目:湖北省自然科学基金(2003ABA04
Javax.comm类库的安装方法如下:(1)将Sun公司提供的Javax.comm类库包java.comm.win32.zip(可从http://java.sun.com下载)解压。(2)将win32com.dll文件拷贝至<JDK>\bin目录下。(3)将comm.jar、javax.comm.properties文件拷贝至<JDK>\lib目录下。(4)将comm.jar文件添加到classpath环境变量中。主要代码如下:portList=CommPortIdentifier.getPortIdentifiers();//得到端口的标识符while(portList.hasMoreElements()){portId=(CommPortIdentifier)portList.nextElement();if(portId.getPortType()==CommPortIdentifier.PORT_SERIAL){//判断是不是串口if(portId.getName().equals("COM1")){//判断是不是COM1BSppm100readreader=newBSppm100read();}}}......publicBSppm100read(){try{serialPort=(SerialPort)portId.open("ppm100ReadApp",2000);//打开串口}catch(PortInUseExceptione){}try{inputStream=serialPort.getInputStream();//设定缓冲区}catch(IOExceptione){}try{serialPort.addEventListener(this);//注册监听器}catch(TooManyListenersExceptione){}serialPort.notifyOnDataAvailable(true);try{//设定串口的物理参数serialPort.setSerialPortParams(600,//波特率SerialPort.DATABITS_7,//数据位7位SerialPort.STOPBITS_1,//停止位1位SerialPort.PARITY_NONE);//校验位奇校验}catch(UnsupportedCommOperationExceptione){}readThread=newThread(this);readThread.start();//开始监听的进程……publicvoidserialEvent(SerialPortEventevent){//监听的操作switch(event.getEventType()){//注册监听响应的事件,下面是各种事件caseSerialPortEvent.BI:caseSerialPortEvent.OE:caseSerialPortEvent.FE:caseSerialPortEvent.PE:caseSerialPortEvent.CD:caseSerialPortEvent.CTS:caseSerialPortEvent.DSR:caseSerialPortEvent.RI:caseSerialPortEvent.OUTPUT_BUFFER_EMPTY:caseSerialPortEvent.DATA_AVAILABLE:{byte[]readBuffer=newbyte[7];//设置缓冲区的大小,前面我们设定的数据位7位,所以此处缓冲区为7位。try{while((inputStream.read(readBuffer))!=0){//读取数据,判断他是否为空……//数据的分析处理并将处理结果存放到数据库中}其他要注意的地方:由于Javax.comm类库的特殊要求,在我们调试完成后客户端的主控计算机上也要安装该类库,安装方法与调试安装方法一样。4结束语串口数据的实时采集应用非常广泛,主要有两种方法,一个是用微软的MSComm控件,另一个是用SUN公司的Javax.comm类库。目前大多数技术人员使用的事前一种方法,而Java语言的诸多特点也预示着利用Java语言开发串口通讯程序会越来越多,所以本文对其进行了分析介绍,希望能够给开发串口通讯数据采集系统的人员提供借鉴。文中所给出的设计方案在Windows2000上调试通过,并在长沙卷烟厂检验科的实际工作中得到了成功应用。该项目的成功实施,提高了检验科检测数据的安全性和正确性,为白沙集团数字化质量管理系统的其他模块提供了及时有效的数据,为提高产品的质量提供了帮助。参考文献[1]http://java.sun.com[2]http://www.gjwtech.com/(见68页)
证本论文研究内容的可行性,作者进行了仿真实验,并与采用常规PID控制器的纠偏系统在性能上进行了比较。为了简化起见,我们把带材纠偏系统的模型设为:(6)由试验获得参数,K=1,T=1200s,τ=100s,针对以上数学模型分别设计了PID控制器和模糊免疫PID控制器,传统PID的控制参数:Kp=0.860,KI=0.000218,KD=0.000957,模糊免疫PID的控制参数:K=0.5,η=0.6。取采样时间Ts=350s。模糊控制输入、输出的隶属函数如图3和图4所示。系统仿真曲线如图5所示。对比两种控制器的超调量和调整时间,结果表明,免疫模糊PID控制比传统PID控制效果更好,显示出较好的鲁棒性。5结束语本文针对新型变压器铁芯横向宽度不相等的展开带成型卷绕纠偏控制系统,设计了一种模糊免疫PID控制器。通过实际应用表明,模糊免疫PID算法在控制过程中动态无扰自调整,提高了系统的动态特性并消除了过程的稳态误差,效果优于单独的常规PID算法。参考文献[1]张智星,孙春在,[日]水谷英二.神经-模糊和软件算法[M].西安交通大学出版社,2000.[2]王鹏锋,秦建敏,吕华芳.一种新型的地下水水位自动监控系统[J].微计算机信息,2005,1:33-35[3]何勇华,付兴武等.模糊控制的微型制冷系统[J].微计算机信息,2005,2:13-15作者简介:万宗顺(1981-),男,民族汉,控制理论与控制工程专业研究生,主要从事计算机控制的研究。石金华(1948-),男,民族汉,副教授,硕士生导师,主要从事计算机控制系统理论与应用的研究。E-mail:shenghuo456@163.comAuthorbriefintroduction:Wan,Zongshun(1981-),male,TheHannationality,ThegraduatestudentofCon-trollingtheoryandControllingprojectprofessional,heisengagedinresearchofthecomputercontrolapplicationmainly.ShiJinHua(1948-),male,TheHannationality,associateprofessor,hierophantofgraduatestudent,heisengagedinresearchofthecomputercontrolsystemtheoryandapplication.(200051上海东华大学信息科学与技术学院)万宗顺石金华(SchoolofinformationScienceandtechnologyDongHuaUniversity,ShangHai,200051)Wan,ZongshunShi,Jinhua联系地址:(200051上海市延安西路1882号东华大学信息学院)石金华(投稿日期:2005.7.26)(修稿日期:2005.8.6)(接第142页)[3]章学静;何宾韩;月秋基于雷达信号模拟器的串口通信的设计[J],微计算机信息,2005,3:150-151作者简介:周海涛(1981—),男(汉族),湖北省老河口,硕士,中国地质大学计算机学院,研究方向:计算机网络、信息安全、网格计算。电子邮箱:zhouht2004@eyou.com;高兴锁(1945—),男(汉族),河北,教授,硕士生导师,中国地质大学计算机学院教授,研究方向:计算机网络、信息安全。江晓峰(1980—),男(汉族),湖北武汉,硕士,中国地质大学计算机学院,研究方向:电子商务、信息安全。Authorbriefintroduction:Zhou,Haitao,1981,male,graduatestudent,themajorresearchdirectioniscom-puternetworks,informationsecurityandgirdcomputing.Gao,Xingsuo,1945,male,professor,themajorresearchdirectioniscomputernetworksandinformationsecurity.Jiang,Xiaofeng,1980,male,graduatestudent,themajorresearchdirectioniselectroniccommerceandinforma-tionsecurity.(430074湖北武汉中国地质大学计算机学院)周海涛高兴锁江晓峰(CollegeofComputerScience,ChinaUniv.ofGeo-sciences,Wuhan,430074,China)Zhou,HaitaoGao,XingsuoJiang,Xiaofeng通信地址:(430074湖北武汉中国地质大学(武汉)硕1200320班)周海涛(投稿日期:2005.7.16)(修稿日期:2005.8.1