基于 java 数据采集串口通讯的设计和实现
Design and Realization of the Serial Communication for Data Acquisition Based On Java
(武汉中国地质大学)
周海涛 高兴锁 江晓峰
Zhou,Haitao Gao,Xingsuo Jiang,Xiaofeng
摘要: 介绍如何编写基于 java 的数据采集串口通讯, 结合实际应用, 对采用 Javaxm 类库进行串口通信设计进行了阐述。
关键词: Java; 串口通信; Javaxm;
中图分类号: TP311.52 文献标识码: A
Abstract: Introduce the method to implement java based data collecting Serial Communication , Explain the basic procedure to design
Serial Communication using Javaxm class library with practical applications .
Key words: Java; Serial Communication; Javaxm; Listener
文章编号:1008- 0570(2006)02- 1- 0141- 02
引言
白沙集团长沙卷烟厂数字化质量管理系统是白
沙集团在 2004 年实施的一个以提高管理水平和产品
质量的崭新的信息化管理系统。质量管理的过程控制
和生产过程中的质量数据采集分析显得非常重要, 数
据多、报表多; 较多的手工填表, 容易因笔误而影响结
果。因此, 需要一套自动化过程高、观测快速的数据采
集系统软件。
Java 由于具有开放性、平台无关性和面向对象等
特性, 使得其成为了一个理想的软件开发平台。本文
作者利用 Java 串口通信 API 开发了一个用于串口通
讯的 Java 程序, 大大简化了对串口进行操作的过程,
Java 串口通信 API (Javaxm) 是一个 Java 扩展类
库, 并不包括在标准的 Java2 SDK 当中, 需要进行安
装。
1 系统硬件结构及工作原理
本文以该项目中检验科透气度仪 ppm100 数据的
实时采集为例, 讨论如何通过串口进行数据的采集。
只要硬件包括主控计算机、透气度仪 ppm100、RS232
连接线。系统的硬件构成如图 1 所示。
计算机的 COM 口采用的是 RS232 通信方式, 检
验员通过透气度仪 ppm100 随机的进行包装原料的透
气度检验, 主控计算机通过 COM口实时采集到原始
数据, 分析原始数据后将数据通过网络保存到数据库
中。这样避免了以前打印测试结果手工填写的方式,
提高了效率, 减少了笔误。
2 系统软件设计
软件系统基于面向对象的编程语言, 利用 Java 及
其提供的 Javaxm 控件来实现。
根据仪器的特性, 在本系统中通信协议采用
ASCII 码传输模式, 波特率为 600bps, 数据位 7 位, 奇
校验, 停止位 1 位。
由于检验员的检测时间随机的, 所以我们在工作
之前就要打开数据采集系统进行监视; 当仪器请求数
据传输时, 系统响应请求, 仪器得到响应确认数据传
输线路有效后, 按照预定格式发送数据; 数据到达缓
冲区后, 系统及时读取数据, 将分析处理结果通过网
络保存在数据库中; 系统继续处于监听状态, 等待下
一次数据的到来。采集模块的流程如图 2 所示。
3 利 用 Javaxm 控 件 实 现 串 口
通信
Sun 公司在 Javaxm 类库包中提供了完善的串
口、并口通信功能。
Javaxm 类库通过 SerialPort 对象来对串口事
件进行控制, 通过 getInputStream() 方法读取串口的数
据, getOutputStream() 方法向串口写数据; 通过 setSeri-
alPortParams() 方法设置串口的通信协议。对于实时监
听的应用程序可以通过 addEventListener() 方法注册
; 通过 serialEvent() 方法设置串口需要响应的
事件。当相应的事件或串口错误事件发生时, 系统会
激活监听程序, 然后进行相应的操作。
周海涛:硕士
基金项目: 湖北省自然科学基金 (2003ABA043) 资助
    ppm100  RS232           
中文核心期刊《微计算机信息》(测控自动化)2006 年第 22 卷第 2-1 期
360元 / 年 邮局: 82-946 《 PLC 技术应用 200 例》
数 采 与 监 测
Javaxm 类库的安装方法如下:
(1) 将 Sun 公司提供的 Javaxm 类库包 java.
comm.win32. zip(可从 java.sun 下载) 解压。
(2) 将 win32com.dll 文件拷贝至<JDK> \ bin 目录
下。
(3) 将 comm.jar、javaxm.properties 文 件 拷 贝
至<JDK> \ lib 目录下。
(4) 将comm.jar 文件添加到 classpath 环境变量中。
主要代码如下:
portList = PortIdentifiers(); //
得到端口的标识符
while (portList.hasMoreElements()) {
portId=(CommPortIdentifier) Element();
if (PortType () == CommPortIdentifier.
PORT_SERIAL) {//判断是不是串口
if (Name().equals("COM1")) { //判断是
字符串长度头文件不是 COM1
BSppm100read reader = new BSppm100read();
}
}
}
......
public BSppm100read() {
try {
serialPort = (SerialPort) portId.open ("
ppm100ReadApp", 2000); //打开串口
}
catch (PortInUseException e) {}
try {
inputStream = InputStream(); //设
定缓冲区
}
catch (IOException e) {}
try {
serialPort.addEventListener(this); //注册监听
}
catch (TooManyListenersException e) {}
ifyOnDataAvailable(true);
try {//设定串口的物理参数
serialPort.setSerialPortParams(600, //波特率
SerialPort.DATABITS_7, //数据位 7 位
SerialPort.STOPBITS_1, //停止位 1 位
SerialPort.PARITY_NONE); //校验位
奇校验
}
catch (UnsupportedCommOperationException e)
{}
readThread = new Thread(this);
readThread.start(); // 开始监听的进程
……
public void serialEvent(SerialPortEvent event) {//
监听的操作
switch (EventType()) {//注册监听响应的
事件, 下面是各种事件
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_
EMPTY:
case SerialPortEvent.DATA_AVAILABLE:
{
byte[ ] readBuffer = new byte[ 7 ]; //设置
缓冲区的大小, 前面我们设定的数据位 7 位, 所以此
处缓冲区为 7 位。
try {
while ( (ad(readBuffer)) !
= 0) { //读取数据, 判断他是否为空
…… //数据的分析处理并将处理结果
存放到数据库中
}
其他要注意的地方: 由于 Javaxm 类库的特殊
要求, 在我们调试完成后客户端的主控计算机上也要
安装该类库, 安装方法与调试安装方法一样。
4 结束语
串口数据的实时采集应用非常广泛, 主要有两种
方法, 一个是用微软的 MSComm 控件, 另一个是用
SUN 公司的 Javaxm 类库。目前大多数技术人员使
用的事前一种方法, 而 Java 语言的诸多特点也预示着
利用 Java 语言开发串口通讯程序会越来越多, 所以本
文对其进行了分析介绍, 希望能够给开发串口通讯数
据采集系统的人员提供借鉴。
文中所给出的设计方案在 Windows2000 上调试
通过, 并在长沙卷烟厂检验科的实际工作中得到了成
功应用。该项目的成功实施, 提高了检验科检测数据
的安全性和正确性, 为白沙集团数字化质量管理系统
的其他模块提供了及时有效的数据, 为提高产品的质
量提供了帮助。
参考文献
[1]java.sun

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。