`
lushuaiyin
  • 浏览: 705220 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

comm 串口

 
阅读更多

Javax.comm简介

Javax.comm简介
Javax.comm是Sun公司提供的,用于开发平台独立的通讯应用程序的扩展API。(ps:这里javax的x很准确地表明了它是一个扩展包,而不是核心包(core package),但由于历史原因,javax下的并不都是扩展包,比如swing包已经是Java核心架构的一部分了,不过为了与Java1.1编码兼容,仍使用javax.swing。)javax.comm可以访问RS232接口(串口)及有限制地访问IEEE-1284(并口)。

下载
需要到其官方主页http://java.sun.com/products/javacomm/下载这个API,目前的最新版本是3.0。不过可惜的是,Sun目前没有推出此API在Windows平台下的3.0版本,主页上列出的三个版本,分别是运行在x86和Sparc结构下的Solaris系统,以及x86下的Linux系统。要下载Windows版本只能去寻找较老的版本了。我所找到的2个网址是http: //llk.media.mit.edu/projects/cricket/software/javaSerial.zip(两个文件夹里面有所需的 3个文件),http://mdubuc.freeshell.org/Jolt/javacomm20-win32.zip和(完整的2.0版本,还有 examples)。

安装
这里的所谓安装就是把三个重要的文件放到指定的目录下。
将下载的文件解压缩后,在\javacomm20-win32\commapi目录下有必需的三个文件comm.jar,javax.comm. properties和win32comm.dll。将文件comm.jar拷贝到%JAVA_HOME%\jre\lib\ext;文件 javax.comm. properties拷贝到%JAVA_HOME%\jre\lib; 文件win32comm.dll拷贝到%JAVA_HOME%\bin。注意%JAVA_HOME%是jdk的路径,而非jre。

API
在javax.comm下有13个类和接口,分别是

4个接口
CommDriver 可负载设备(the loadable device)驱动程序接口的一部分
CommPortOwnershipListener 传递各种通讯端口的所有权事件
ParallelPortEventListener 传递并行端口事件
SerialPortEventListener 传递串行端口事件

6个类
CommPort 通讯端口
CommPortIdentifier通讯端口管理
ParallelPort 并行通讯端口
ParallelPortEvent 并行端口事件
SerialPort RS-232串行通讯端口
SerialPortEvent 串行端口事件

3个异常类
NoSuchPortException 当驱动程序不能找到指定端口时抛出
PortInUseException 当碰到指定端口正在使用中时抛出
UnsupportedCommOperationException 驱动程序不允许指定操作时抛出

实例
同API一起下载的还有一个examples文件,里面有6个程序。首先看最简单的读、写程序。

读串口的例程
import java.io.*;
import java.util.*;
import javax.comm.*;

public class SimpleRead implements Runnable, SerialPortEventListener {

static CommPortIdentifier portId;
static Enumeration portList;//枚举类

InputStream inputStream;
SerialPort serialPort;
Thread readThread;

public static void main(String[] args) {

portList = CommPortIdentifier.getPortIdentifiers();/*不带参数的getPortIdentifiers方法获得一个枚举对象,该对象又包含了系统中管理每个端口的CommPortIdentifier对象。注意这里的端口不仅仅是指串口,也包括并口。这个方法还可以带参数。getPortIdentifiers(CommPort)获得与已经被应用程序打开的端口相对应的CommPortIdentifier对象。 getPortIdentifier(String portName)获取指定端口名(比如“COM1”)的CommPortIdentifier对象。*/

while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)/*getPortType方法返回端口类型*/ {
// if (portId.getName().equals("COM1"))/* 找Windows下的第一个串口*/ {
if (portId.getName().equals("/dev/term/a"))/*找Unix-like系统下的第一个串口*/ {
SimpleRead reader = new SimpleRead();
}
}
}
}

public SimpleRead() {
try {
serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);/* open方法打开通讯端口,获得一个CommPort对象。它使程序独占端口。如果端口正被其他应用程序占用,将使用 CommPortOwnershipListener事件机制,传递一个PORT_OWNERSHIP_REQUESTED事件。每个端口都关联一个 InputStream 何一个OutputStream。如果端口是用open方法打开的,那么任何的getInputStream都将返回相同的数据流对象,除非有close 被调用。有两个参数,第一个为应用程序名;第二个参数是在端口打开时阻塞等待的毫秒数。*/
} catch (PortInUseException e) {}
try {
inputStream = serialPort.getInputStream();/*获取端口的输入流对象*/
} catch (IOException e) {}
try {
serialPort.addEventListener(this);/*注册一个SerialPortEventListener事件来监听串口事件*/
} catch (TooManyListenersException e) {}

serialPort.notifyOnDataAvailable(true);/*数据可用*/

try {
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);/*设置串口初始化参数,依次是波特率,数据位,停止位和校验*/
} catch (UnsupportedCommOperationException e) {}

readThread = new Thread(this);
readThread.start();
}

public void run() {
try {
Thread.sleep(20000);
} catch (InterruptedException e) {}
}

//串口事件
public void serialEvent(SerialPortEvent event) {

switch(event.getEventType()) {
case SerialPortEvent.BI:/*Break interrupt,通讯中断*/
case SerialPortEvent.OE:/*Overrun error,溢位错误*/
case SerialPortEvent.FE:/*Framing error,传帧错误*/
case SerialPortEvent.PE:/*Parity error,校验错误*/
case SerialPortEvent.CD:/*Carrier detect,载波检测*/
case SerialPortEvent.CTS:/*Clear to send,清除发送*/
case SerialPortEvent.DSR:/*Data set ready,数据设备就绪*/
case SerialPortEvent.RI:/*Ring indicator,响铃指示*/
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:/*Output buffer is empty,输出缓冲区清空*/
break;

case SerialPortEvent.DATA_AVAILABLE:/*Data available at the serial port,端口有可用数据。读到缓冲数组,输出到终端*/
byte[] readBuffer = new byte[20];

try {
while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
}
System.out.print(new String(readBuffer));
} catch (IOException e) {}
break;
}
}
}
(PS:不推荐Thread的这种用法,详见《Core Java VolumeII》)

写串口的例程
把字符串"Hello, world!\n"写到系统的第一个串口

import java.io.*;
import java.util.*;
import javax.comm.*;

public class SimpleWrite {
static Enumeration portList;
static CommPortIdentifier portId;
static String messageString = "Hello, world!\n";
static SerialPort serialPort;
static OutputStream outputStream;

public static void main(String[] args) {
portList = CommPortIdentifier.getPortIdentifiers();

while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
// if (portId.getName().equals("COM1")) {
if (portId.getName().equals("/dev/term/a")) {
try {
serialPort = (SerialPort)
portId.open("SimpleWriteApp", 2000);
} catch (PortInUseException e) {}
try {
outputStream = serialPort.getOutputStream();
} catch (IOException e) {}
try {
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {}
try {
outputStream.write(messageString.getBytes());
} catch (IOException e) {}
}
}
}
}
}

上面两个例程都经过了简化,在打开端口,并且传输结束后没有关闭数据流和串口。在例程中我们看到CommPortIdentifier提供了打开通讯端口的方法open,但却没有相应关闭端口的方法,关闭端口需要调用javax.comm.CommPort类的close()。CommPort是这个包中的一个高级抽象,它定义了端口可作的各种事情:获取I/O数据流对象,控制缓冲区大小,调整输入的处理。

jar包可以在我上传的资源里下载,不要资源分
分享到:
评论

相关推荐

    Comm串口通信类

    "Comm串口通信类"通常指的是一个编程类,它封装了串行通信的相关功能,使得程序员能够方便地在应用程序中实现串口的数据收发。这个类可能是用C++、Java或Python等编程语言实现的,它提供了读写数据、设置波特率、...

    vc comm串口通信

    本项目“vc comm串口通信”旨在实现基于Visual C++(简称VC)的串口通信功能,虽然目前尚未完全完善,但其核心知识点依然值得深入探讨。 首先,我们需要理解串口通信的基本概念。串口通信是通过串行接口进行数据...

    COMM 串口通讯控件

    **串口通讯(Serial Communication)**是计算机通信领域的一个重要组成部分,它允许设备通过串行接口进行数据交换。在Delphi编程环境中,开发者可以利用特定的控件来简化串口通讯的实现。本文将深入探讨名为"COMM ...

    VC_COMM串口通讯

    串口,也称为串行接口,是指数据以一位接一位的方式传输的通信方式。常见的串口标准有RS-232、RS-485等。在VC++中,我们通常使用Windows API函数或者MFC(Microsoft Foundation Classes)库来实现串口通讯。 给定的...

    封装好的Comm串口通讯DLL类

    本文将深入探讨标题为"封装好的Comm串口通讯DLL类"的相关知识点,以及如何利用这个DLL进行串口通信。 首先,DLL(Dynamic Link Library)是Windows操作系统中的一个重要组成部分,它是一种可共享的代码库,多个程序...

    RS232Comm串口数据采集演示程序

    《RS232Comm串口数据采集演示程序详解》 在信息技术领域,串行通信扮演着重要的角色,尤其是在设备间的短距离通信中。RS232Comm是一个专门用于串口数据采集的程序,广泛应用于电子电器通信中。本文将深入探讨RS232...

    comm串口源程序简单修改版

    在这样的背景下,串口调试成为了工程师和开发者不可避免的技术环节,而“Comm串口源程序简单修改版”就是为了解决传统串口调试工具在便捷性和适用性上的不足而诞生的一款实用软件工具。 这个改进版软件最为显著的...

    comm串口通行java

    Java中的`comm`包,全称为Java Communications API,是一个用于实现串行(串口)通信的接口和类的集合。这个API使得Java开发者能够轻松地创建应用程序,与各种硬件设备进行交互,例如打印机、调制解调器、GPS设备等...

    javax.comm 读取串口

    本文将深入探讨`javax.comm`库的使用方法以及如何通过它来读取串口。 首先,`javax.comm`库是Sun Microsystems为Java设计的一个API,主要用于串行通信。它提供了`CommPortIdentifier`、`SerialPort`和`ParallelPort...

    comm串口调试工具

    串行端口,通常称为COM口,是计算机上一种用于与外部设备进行数据传输的接口。早期的个人电脑通常会配备两个物理串口,即COM1和COM2,而现代计算机则更多地通过USB转串口适配器来实现串行通信。串口采用串行通信方式...

    comm串口温度显示.rar

    VC 串口应用:温度采集实例 源代码,通过串口连接温度采集设备,读取温度数值并显示出来,读串口数据的原理是,只要当有数据向串口发数据来时,计算机就会自动将其数据写到一个特定的缓冲区,我们只要写程序去读那个...

    c++的comm串口文档

    串口通信,又称为串行通信,是计算机硬件中的一种通信机制,主要用于设备间的短距离通信。在本文中,我们将详细探讨如何使用C++和MSComm控件进行串口编程,主要涉及以下几个方面: 1. **建立项目**: 在VC++6.0...

    comm串口通信源代码

    串口通信的vc源代码,不是activex,调试通过。

    COMM 串口通讯 TCP 通讯 UDP 通讯

    首先,串口通讯(COMM),又称串行通讯,是一种古老的通信方式,主要用于设备间的短距离通信,如打印机、调制解调器等。它通过数据线逐位传输信息,速度相对较慢,但结构简单,易于实现。串口通讯通常采用RS-232、RS...

    javacomm20-win32.rar_JAVA comm不_Java 串口通信_javacomm20_javacomm20-

    Java Comm API(也称为Java Communications API)是Java平台的一部分,提供了与串行和并行端口交互的接口和类。这个API主要由两个包组成:`javax.comm`和`com.sun.comm`。在`javacomm20-win32`中,`javax.comm`包包...

    Comm串口开发的C#示例

    一款窗口开发示例,使用C#编写的示例,内容简单易懂。

    JAVA串口COMM包

    1. **comm.jar**:这是Java串口通信的主要库文件,包含了`javax.comm`包中的所有类和接口,这些类和接口提供了串行端口的读写操作、事件监听以及流控制等功能。开发者可以通过导入`javax.comm.*`来使用这些功能。 2...

    Javax.comm简介 Java串行端口技术协议 javacomm20 SMSLib串口通信 虚拟串口

    收集的comm串口通信调试的技术文档 Javax.comm简介.doc 浅谈Java串行端口技术协议.doc 关于java使用javacomm20.doc SMSLib串口通信.doc KEIL中如何用虚拟串口调试串口程序.doc

    PC_Comm.rar_comm_串口自动搜索_串口通信_自动搜寻串口

    标题中的“PC_Comm.rar_comm_串口自动搜索_串口通信_自动搜寻串口”表明这是一个关于PC(个人计算机)与外部设备间通过串行通信接口进行数据交互的程序或者工具,尤其强调了它的自动搜索串口和通信功能。在IT领域,...

    java 串口通信 包 comm.jar

    `comm.jar`是Java通信API的核心组件,它包含了处理串口通信所需的所有类和接口。这些类主要集中在`javax.comm`包下,如`CommPortIdentifier`、`SerialPort`、`ParallelPort`等。`CommPortIdentifier`用于识别和获取...

Global site tag (gtag.js) - Google Analytics