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

最近基于rxtx包做了一些串口开发

阅读更多

    * 官方demo版只有一个线程实现和一个监听实现,所以都是main方法。知道需要连接的串口号,对于实际开发中不太实用,因为咱们一般都是自动获取的多嘛。。所以这文章就算是总结吧。

 

 

    先说一下连接思路,由于串口设备需要热拨插,所以我必须写一个线程一直监控着端口的状态是否正常,所以可以按以下几个步骤进行解决。

 

    1.  列出可用的串口列表;(如果某串口被占用证明是被打开通讯后的,此时不会在这个列表中,还有一般的串口号不会是什么 COM1 、COM2、COM3之类的,所以我会做一些过滤)

 

 

public static List<String> getAvailableSerialPortsName() {
	List<String> result = new ArrayList<String>();
		Enumeration thePorts = CommPortIdentifier.getPortIdentifiers();
                     while (thePorts.hasMoreElements()) {
			CommPortIdentifier com = (CommPortIdentifier) thePorts.nextElement();
			switch (com.getPortType()) {
			case CommPortIdentifier.PORT_SERIAL:
				CommPort thePort = null;
				try {//过滤COM1-3
					thePort = com.open("CommUtil", 50);
					if (!Pattern.compile("COM[1-3]\\b").matcher(com.getName()).matches()) {
						result.add(com.getName());
					}
				} catch (PortInUseException e) {
					// log.debug("Port, " + com.getName() + ", is in use.");
				} catch (Exception e) {
					log.error("Failed to open port " + com.getName());
				} finally {
					if (thePort != null) {
						thePort.close();
					}
				}
			}
		}
		return result;
	}
 

 

 

    2.  如果系统未正常连接时,会把串口列表中的端口放入队列中,然后每个串口都去打开连接测试,确保哪个串口可用;(连接串口时成功后发送串口指令,只有返回OK的才是我需要用的端口,并记录下串口名,而这里使用了SWT的UI线程,所以主线程是每3秒跑一次,里面等待设备返回状态的是2秒,所以基本上也能满足到测试连接的效果)

 

 

public static boolean connectTest(final String portName) {
		CommPortIdentifier portIdentifier;
		try {
			portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
			if (portIdentifier.isCurrentlyOwned()) {
				log.error("错误:串口被占用");
				return false;
			} else {
				commPort = portIdentifier.open(TDUtil.class.getName(), 2000);
				if (commPort instanceof SerialPort) {
					SerialPort serialPort = (SerialPort) commPort;
					serialPort.setSerialPortParams(115200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
					final InputStream in = serialPort.getInputStream();
					OutputStream out = serialPort.getOutputStream();
					out.write("AT+CLIP=1\r".getBytes());
					// 停顿2秒,为了话机返回数据给予时间
					Display.getCurrent().timerExec(1000, new Runnable() {
						public void run() {
							try {
								byte[] readBuffer = new byte[20];
								in.read(readBuffer);
								String result = new String(readBuffer, "GBK").trim();
								if (result != null && result.indexOf("OK") != -1) {
									log.debug(portName + "可用");
									setProtName(portName);
								} else {
									log.debug(portName + "不可用");
									setProtName(null);
								}
							} catch (IOException e) {
								e.printStackTrace();
							} finally {
								if (commPort != null) {
									log.debug(portName + "串口关闭");
									commPort.close();
								}
							}
						}
					});
				} else {
					log.error("Error: Only serial ports are handled by this example.");
					return false;
				}
			}
		} catch (NoSuchPortException e) {
			log.error("不支持的串口异常!" + e.getMessage());
			e.printStackTrace();
		} catch (PortInUseException e) {
			log.error("串口被战用异常!" + e.getMessage());
			e.printStackTrace();
		} catch (UnsupportedCommOperationException e) {
			log.error("不支持的串口操作异常!" + e.getMessage());
			e.printStackTrace();
		} catch (IOException e) {
			log.error("IO异常!" + e.getMessage());
			e.printStackTrace();
		}
		return false;
	}
 

 

 

    3.  把可用的端口记录到系统中,这样标识连接状态是正常的。如果非法拨出设备,线程会监控到没有可用的端口,此时再把状态置为不可用。等待着下次设备正常连接后重复上面的1、2操作,然后把原来的端口关闭即可。

 

 

 

分享到:
评论

相关推荐

    rxtx开发串口通讯

    - **可能内容**:这个文件可能是包含一个基于rxtx库的串口通信示例程序,它展示了如何使用Java和rxtx库进行串口通信的具体代码实现。 - **学习要点**:通过阅读和理解代码,可以学习到如何在实际项目中应用rxtx库...

    基于Java的串口开发包 RXTX.zip

    这个基于Java的串口开发包,RXTX.zip,包含了一系列的类和接口,使得开发者能够在Java程序中实现与硬件设备的串行通信,如Arduino、PLC或其他支持串口通信的设备。RXTX的使用极大地简化了Java程序员处理串口任务的...

    基于java的开发源码-串口开发包 RXTX.zip

    Java串口通信库RXTX是一个开源项目,它为Java平台提供了串行通信接口,使得开发者可以方便地在Java程序中进行串口操作。RXTX库弥补了Java标准API在串口通信上的不足,提供了丰富的功能和强大的性能。下面我们将深入...

    rxtx包32bit

    通过RXTX,Mina可以处理串口设备的数据传输,使得基于Java的应用程序能够与各种硬件设备进行无缝连接。 对于32位JDK的用户,本压缩包“mfz-rxtx-2.2-20081207-win-x86”提供的是RXTX库的32位版本,适用于运行在32位...

    基于Java的源码-串口开发包 RXTX.zip

    Java串口通信库RXTX是一个开源项目,它为Java平台提供了低级别的串行I/O功能,使得开发者能够轻松地与串行设备进行交互。RXTX库弥补了Java标准库在串行通信上的不足,提供了跨平台的支持,可以在Windows、Linux、Mac...

    Java基于rxtx串口调试软件代码

    Java基于RXTX的串口调试软件代码是一个实用的开发工具,主要用于测试和调试通过串行通信连接的硬件设备。这个项目使用Eclipse作为集成开发环境(IDE),并选择了SWT(Standard Widget Toolkit)作为图形用户界面...

    基于java的串口开发包 RXTX.zip

    5. **流处理**:RXTX提供`InputStream`和`OutputStream`接口,可以直接通过Java的I/O流操作进行串口数据的读写,简化了编程模型。 6. **串口枚举**:RXTX提供方法用于获取系统上可用的串口列表,便于开发者选择合适...

    RXTX串口通讯包跨平台版本大全

    总结来说,RXTX串口通讯包是Java进行串行通信的重要工具,它提供了丰富的API和跨平台的支持。这个压缩包包含了多种平台的RXTX 2.2版本,确保了不同系统下的应用都能顺利进行串口通信。对于有相关需求的开发者,这是...

    基于Java的实例源码-串口开发包 RXTX.zip

    Java串口通信库RXTX是一个开源项目,用于在Java应用程序中实现串行通信功能。这个包主要用于那些需要与硬件设备交互或者进行低级通信的Java应用,例如嵌入式系统、工业自动化、数据采集等领域。RXTX库提供了一个跨...

    mina-rxtx-2.2 实现串口通讯

    而RXTX则是一个用于Java的串行和并行通信库,它使得Java开发者可以轻松地进行串口编程。本文将深入探讨如何利用MINA与RXTX来实现串口通信。 首先,让我们了解一下RXTX。RXTX是Java中的一个开源项目,它提供了一组...

    Springboot + rxtx 实现串口读写应用部分源码

    SpringBoot 是一个基于 Java 的轻量级框架,用于简化创建独立、生产级别的基于 Spring 应用的初始配置和常规管理。它集成了大量常用的第三方库配置,如数据访问/集成、安全、消息、缓存等,让开发者可以快速地开发出...

    java 串口通信 rxtx demo

    以下是一个简单的RXTX串口通信示例: ```java import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import java.io....

    java基于RXTXcomm.jar的串口通信所需dll-rxtxParallel.dll-rxtxSerial.dll

    标题中的"java基于RXTXcomm.jar的串口通信所需dll"指的是RXTX库在Java应用中使用的动态链接库(DLL)文件,这些文件是RXTX库在Windows操作系统下运行所必需的。RXTXcomm.jar是RXTX的主要库文件,包含了Java类和接口...

    UART_COMM.zip_comm_rxtx_swing_串口通讯

    串口通讯是指通过串行接口进行的数据传输,包括RS-232、RS-485等标准。在个人计算机上,串口通常指的是COM端口,用于连接各种外设,如调制解调器、GPS接收器等。在本项目中,"串口通讯小程序"可能是一个能够枚举和...

    SMSLIB+RXTX 短信猫开发模块

    在实际开发中,首先需要在项目中引入SMSLIB的jar包,然后通过RXTX库配置串口通信。创建SMSLIB的实例,设置短信猫的相关参数(如波特率、数据位、校验位等),初始化并连接设备。接着,可以利用SMSLIB提供的API来编写...

    rxtx-2.1-7-bins-r2.zip_RXTX-2.1-7_Rxtx.zip_rxtx_smpp_短信协议 smpp

    5. **兼容性**:RXTX库兼容Java串行接口规范,可以与Java Communications API (javax.comm)无缝协作。 SMPP(Short Message Peer-to-Peer)协议,是专为短信服务设计的一种应用层协议,常用于短信网关。它允许服务...

    RxTx源码 RxTx Source

    RxTx库正是提供了这样的接口,使得Java程序员可以方便地进行串口操作。 RxTx库的设计基于事件驱动模型,这使得它能够高效处理串口通信中的异步事件。在源码中,`GPort`类是整个库的核心,它包含了与串口交互的所有...

    RXTX Win x64个人备份

    关于标签,"JAVA"表示这是基于Java语言的库,"工具"表明RXTX是一个实用的开发工具,而"串口"则明确了它的核心功能是串行通信。这些标签帮助我们理解RXTX的主要用途和适用领域。 在提供的压缩包文件"mfz-rxtx-2.2-...

    java 串口开发jar包

    Java串口通信主要基于Java Communications API(CommAPI),这个API定义了一组接口和类,允许开发者读写串行端口的数据。`comm-2.0.jar` 是这个API的一个实现,它包含了一系列用于串口操作的核心类和接口,如`...

    JAVA串口调试助手RXTX 源码

    Java串口调试助手RXTX源码是一款专为Java开发者设计的工具,它基于RXTX库,用于实现Java程序与串行端口之间的通信。RXTX是一个开源的Java库,提供了对串行(RS-232)和并行(IEEE 1284)接口的支持,使得Java程序员...

Global site tag (gtag.js) - Google Analytics