`

通过JAVA与串口(RS232)通信实例

    博客分类:
  • J2SE
阅读更多
最近了解到的需求是需要需激光打刻机进行(RS232)串口通信,
这里使用的是RXTX开源包实现的。
之前并没有用java做过串口通信,而且这方面资料不是很多。
项目实际应用中可能会采用VB开发(这个我就不会了)

只不过用java尝试一下,记个笔记,希望可以对相关开发用些帮助。

下面是实现代码
package test;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Date;
import java.util.Enumeration;
import java.util.TooManyListenersException;

import gnu.io.CommPortIdentifier;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;

public class CommUtil implements SerialPortEventListener {

	InputStream inputStream; // 从串口来的输入流
	OutputStream outputStream;// 向串口输出的流
	SerialPort serialPort; // 串口的引用
	CommPortIdentifier portId;

	public CommUtil(Enumeration portList, String name) {
		while (portList.hasMoreElements()) {
			CommPortIdentifier temp = (CommPortIdentifier) portList.nextElement();
			if (temp.getPortType() == CommPortIdentifier.PORT_SERIAL) {// 判断如果端口类型是串口
				if (temp.getName().equals(name)) { // 判断如果端口已经启动就连接
					portId = temp;
				}
			}
		}
		try {
			serialPort = (SerialPort) portId.open("My"+name, 2000);
		} catch (PortInUseException e) {

		}
		try {
			inputStream = serialPort.getInputStream();
			outputStream = serialPort.getOutputStream();
		} catch (IOException e) {
		}
		try {
			serialPort.addEventListener(this); // 给当前串口天加一个监听器
		} catch (TooManyListenersException e) {
		}
		serialPort.notifyOnDataAvailable(true); // 当有数据时通知
		try {
			serialPort.setSerialPortParams(2400, SerialPort.DATABITS_8, // 设置串口读写参数
					SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
		} catch (UnsupportedCommOperationException e) {
		}
	}

	public void serialEvent(SerialPortEvent event) {
		switch (event.getEventType()) {
		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:
			break;
		
		case SerialPortEvent.DATA_AVAILABLE:// 当有可用数据时读取数据,并且给串口返回数据
			byte[] readBuffer = new byte[20];

			try {
				while (inputStream.available() > 0) {
					System.out.println(inputStream.available());
					int numBytes = inputStream.read(readBuffer);
					System.out.println(numBytes);
				}
				System.out.println(new String(readBuffer).trim());
			} catch (IOException e) {
				e.printStackTrace();
			}
			break;
		}
	}
	public void send(String content){
		try {
			outputStream.write(content.getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void ClosePort() {
	    if (serialPort != null) {
	      serialPort.close();
	    }
	  }

	
}



测试
package test;

import gnu.io.CommPortIdentifier;

import java.util.Enumeration;

public class Test {

	public static void main(String[] args) throws InterruptedException {
		Enumeration portList = CommPortIdentifier.getPortIdentifiers(); //得到当前连接上的端口
		
		CommUtil comm3 = new CommUtil(portList,"COM3");
		int i = 0;
		while(i<5)
		{
			Thread.sleep(3000);
			comm3.send("hello");
			i++;
		}
		comm3.ClosePort();
	}

}
分享到:
评论
10 楼 a601962168 2017-03-02  
9 楼 wx_hello 2014-08-06  
lyj286326189 写道
报错

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
at test.Test.main(Test.java:10)

你的解决了吗?  求解。。。

最近想搞个喷码抢软件,喷一串字符。。不知道如何下手。。。
8 楼 wx_hello 2014-08-06  
最近想搞个喷码抢软件,喷一串字符。。不知道如何下手。。。
7 楼 wx_hello 2014-08-06  
问下:
Enumeration portList = CommPortIdentifier.getPortIdentifiers(); // 得到当前连接上的端口

我在上面的代码处就报错了。。



java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
at test.CommUtil.main(CommUtil.java:100)




不知道如何解决。。。求大神告知。。。谢谢!
6 楼 ncx1259988 2013-10-14  
这个可以支持中文吗,没弄过这个,最近要弄一个,中文不知道怎么处理
5 楼 di1984HIT 2013-05-22  
我弄了一下,不错。
4 楼 di1984HIT 2013-05-22  
写的不错。
3 楼 lyj286326189 2012-07-20  
报错

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
at test.Test.main(Test.java:10)
2 楼 sosyi 2010-09-03  
发短信可以 打电话就找不到端口。。 郁闷中
1 楼 sosyi 2010-09-03  
知道java 调用 AT指令打电话怎么写吗?

相关推荐

    JAVA rs232 串口 硬件com接口

    2. `comm.jar`:这是Java串口通信的API库,包含了Java串口通信所需的类和接口。比如`javax.comm.CommPortIdentifier`用于识别可用的串口,`javax.comm.ParallelPort`和`javax.comm.SerialPort`分别代表并行和串行...

    Java读写RS232

    在Java中处理RS232通信,通常需要借助第三方库,如RXTX库,它为Java提供了访问串口的功能。 在提供的文件中,“RS232Util.java”很可能包含了实现RS232通信的核心工具类。这个类可能包含初始化串口、设置波特率、...

    Java程序与RSR232串口通讯小练手

    4. **串口通信实例分析**:通过JavaRs232Case.exe学习具体的串口通信代码实现。 5. **串口调试工具**:学习如何使用“串口小助手”这类工具进行通信监控和调试。 熟悉这些知识点对于开发涉及串口通信的Java应用程序...

    Android studio 串口通信

    Android系统本身并不直接支持串口通信,但可以通过JNI(Java Native Interface)或者第三方库来实现。 **Android Studio中的串口通信实现** 1. **使用JNI** 通过JNI,可以在Java代码中调用C或C++编写的本地方法来...

    RXTX串口swing真正实例

    在本实例中,SWING被用来设计交互式的串口通信程序的界面,用户可以通过这些界面元素与串口设备进行交互。 接下来是**串口设置**,这是串行通信的基础。串口通常指的是符合RS-232标准的接口,用于设备间的通信。在...

    jni.rar_Android jni_JAVA串口 JNI_android_android RS232_jni

    然而,对于某些特定的硬件交互,如串口通信(RS232),原生Java API往往无法满足需求,这时就需要借助JNI(Java Native Interface)来实现。本文将详细讲解如何在Android应用中使用JNI封装串口通讯,并通过Java调用...

    SerialportSample.rar_rs232_协议通信_托利多

    在“SerialportSample”项目中,开发者可能使用了C#、Python、Java或其他编程语言中的SerialPort类库来实现RS232通信。这些库通常提供打开、关闭串口,设置波特率、数据位、停止位和校验位,以及读写数据的方法。...

    使用java通过串口实现对电机的控制

    RS232C标准是由电子工业协会EIA于1969年制定的一项用于定义数据终端设备(DTE)与数据通信设备(DCE)之间接口电气特性的规范。它在个人计算机通信中扮演着极其重要的角色。 **信号特性**:为了确保准确的数据发送和...

    全面掌握JAVA串口编程

    Java串口编程是Java开发中一个重要的领域,尤其在物联网(IoT)、嵌入式系统和设备通信中,它扮演着关键角色。本资源包包含的8个文件旨在帮助开发者全面理解并掌握这一技术。以下是对每个知识点的详细解释: 1. **...

    如何用java读取电子称的RS232接口上的数据.docx

    总结来说,通过Java和RXTX库,我们可以实现与电子秤的RS232接口进行通信,接收来自电子秤的数据,并在需要的时候将这些数据分发给感兴趣的应用组件。这通常涉及配置串口参数、打开串口、设置监听器和处理接收到的...

    java连串口的链库和依赖

    "java连串口的链库和依赖"这个主题涉及到的关键技术点是RXTX库,它是一个开源的Java库,专门用于处理串行(RS232)和并行(IEEE 1284.4)通信。RXTX提供了与操作系统底层交互的能力,使得Java程序员能够方便地访问...

    串口开发依赖包 (rxtx/modbus)

    然后,通过Java代码实例化`SerialPort`对象,设置波特率、校验位、数据位等通信参数,即可开启与串口设备的通信。 `seroUtils.jar` 可能是作者自定义的串口工具类库,它可能封装了rxtx库的一些常用功能,如打开、...

    comm串口通行java

    在提供的压缩包中,`comm.jar`是包含`comm`包相关类的库文件,用于编译和运行Java串口通信程序。`COMM1.1_Beta_license.txt`很可能是`comm`包的许可协议文件,详细规定了该库的使用条件和限制。`README.txt`可能包含...

    明华读卡器Java例程

    总之,"明华读卡器Java例程"是一个涵盖硬件接口、通信协议、数据处理等多个IT领域的实践案例,通过学习和理解这个例程,开发者不仅可以掌握与读卡器的交互,还能深化对Java编程和嵌入式系统开发的理解。

    RXTX-API.rar_java rxtx_rxtx_rxtx java

    它为Java提供了一种与操作系统底层交互的接口,使得开发者可以在Java程序中轻松实现串行端口(RS232)和并行端口(LPT)的操作。在Java中,由于其跨平台的特性,串行通信通常比其他语言更为复杂,而RXTX库的存在则...

    USB232Demo.rar

    标题中的“USB232Demo.rar”提示我们这是一个与USB到串行通信相关的示例程序或库,可能是一个用于演示如何使用USB转RS232设备的软件包。描述中的“基于D2xx.jar串口通信”进一步明确了这个压缩包是利用D2xx驱动库...

    安卓CH340串口助手源码 eclipse源码

    该芯片能够提供USB接口与串行通信接口之间的转换,使得不支持USB的设备可以通过USB接口与计算机进行通讯,极大地扩展了设备的连接方式。 在Android系统中,串口助手软件可以用于查看和发送串口数据,是调试和开发的...

    jniDemo串口

    串口通讯,通常指的是RS232串行接口,是一种广泛用于设备间数据传输的标准。在工业控制、嵌入式系统以及早期的计算机连接中,RS232接口非常常见。它定义了数据信号、握手信号、电源等的电平标准和引脚分配,允许两个...

    JSP发短信(短信猫)实例

    短信猫通常提供串行接口(如RS232)或者USB接口,使得开发者可以通过编程方式控制其进行短信操作。 1. **利用WebService发短信**: WebService是一种基于互联网的,平台无关的交互方式,允许不同系统之间交换数据...

    短信猫代码

    它通过串行接口(如RS232)与计算机连接,然后通过特定的API或SDK来实现与计算机软件的交互。在Java编程环境中,我们可以利用短信猫的驱动库和API来编写程序,实现短信的发送和接收功能。 本项目提供的"短信猫代码...

Global site tag (gtag.js) - Google Analytics