package com;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
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,Runnable {
InputStream inputStream;
OutputStream outputStream;
SerialPort serialPort;
CommPortIdentifier portId = null;
Thread readThread;
String msg = "";
String message = "";
StringBuffer sb = new StringBuffer();
public CommUtil(String portName) {
try{
portId = CommPortIdentifier.getPortIdentifier(portName);
if ( portId.isCurrentlyOwned() )
{
System.out.println("端口正被其他程序占用");
}
}catch(Exception e){}
try {
serialPort = (SerialPort) portId.open("CommUtil", 2000);
} catch (PortInUseException e) {
System.out.println("实例化失败");
}
try {
inputStream = serialPort.getInputStream();
outputStream = serialPort.getOutputStream();
} catch (IOException e) {}
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {}
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(1200, SerialPort.DATABITS_8,SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN);
}catch (UnsupportedCommOperationException e) {}
readThread = new Thread(this);
readThread.start();
}
public String receive(){
readThread = new Thread(this);
readThread.start();
return sb.toString();
}
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException 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:
try {
byte[] readBuffer = new byte[inputStream.available()];
System.out.println(inputStream.available());
while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
System.out.println(numBytes);
}
System.out.println(readBuffer);
System.out.println(readBuffer.toString());
msg = Char2HexString(readBuffer);
System.out.println(msg);
sb.append(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void send(String content){
try {
System.out.println(HexString2Bytes(content).toString());
outputStream.write(HexString2Bytes(content));
} catch (IOException e) {
e.printStackTrace();
}
}
public String read(){
return sb.toString();
}
public void close(){
if (serialPort != null) {
serialPort.close();
}
}
public static String Char2HexString(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
}
public static byte[] HexString2Bytes(String src){
byte[] ret = new byte[src.length()/2];
byte[] tmp = src.getBytes();
for(int i=0; i<src.length()/2; i++){
ret[i] = uniteBytes(tmp[i*2], tmp[i*2+1]);
}
return ret;
}
public static byte uniteBytes(byte src0, byte src1) {
byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})).byteValue();
_b0 = (byte)(_b0 << 4);
byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})).byteValue();
byte ret = (byte)(_b0 ^ _b1);
return ret;
}
}
]
分享到:
相关推荐
采用RXTXcomm2.2最新版本作为基础,包含...另外写了个简单的工具类,方便使用(注:工具类只提供了基础功能,需按使用场景进行改造,如改成静态方法或采用依赖注入等方式。所提供方法不足以满足需求的也可以自行添加)
Java 串口(rxtx)demo(包含发送、接收、以及连接数据库和连接实际的串口硬件的代码和工具类)
标题中的“rxtxcomm-2.2.rar”是一个压缩包文件,暗示了它包含的是一个特定版本(2.2)的RXTX库。RXTX是Java平台上的一个开源项目,主要用于串行通信(Serial Communication)和并行通信(Parallel Communication)...
总的来说,RXTXcomm.jar 2.1.7版本是Java开发者处理串口通信问题的一个强大工具,特别是在Mac平台上。其优化的性能和兼容性使得在Mac系统中进行串口编程变得更加便捷。通过合理利用这个库,开发者可以专注于应用程序...
总结来说,"Linux Java RXTXcomm"是一个高效、可靠的串口通信工具,对于在Linux环境中使用Java进行串口通信的开发者来说,是一个不可或缺的资源。它简化了与硬件设备的交互,提高了开发效率,特别是在与Arduino等...
使用RXTXcomm.jar进行串口通信时,首先需要在项目中引入这个jar包,这可以通过Maven或Gradle等构建工具完成,也可以手动添加到项目的类路径中。然后,可以通过Java代码创建SerialPort对象,配置串口参数,并进行读写...
总的来说,rxtxcomm为Java开发者提供了一套完整的工具集,使得他们可以轻松地在各种平台上实现串行通信功能,无论是简单的数据交换还是复杂的设备控制。通过深入理解和应用这个库,开发者可以构建出强大而可靠的串口...
描述中提到的“刚刚做过串口开发”,暗示了RXTXcomm是串口编程的重要工具。串口通信是计算机通过串行接口与其他设备进行数据交换的一种方式,常见于工业控制、嵌入式系统和物联网设备等场景。RXTX库提供了一系列简单...
RXTXcomm.jar包含了Java运行所需的类文件,而RXTXcomm.dll是Windows系统下的动态链接库,用于实现Java代码与操作系统底层串口通信功能的交互。对于32位和64位的区分,这是因为不同的操作系统版本需要对应架构的DLL...
1. **导入RXTX库**:首先,需要将解压后的RXTXcomm.jar添加到项目的类路径中,以便能够使用其中的类和方法。 2. **初始化串口**:使用`Gnu.io.RXTXCommDriver`加载RXTX驱动,然后通过`Gnu.io.SerialPortManager`...
总的来说,"Java串口通信全平台RXTXcomm-2.2"为Java开发者提供了一个强大的工具,无论是在Windows还是Linux环境下,都能轻松地进行串口通信,极大地扩展了Java在工业控制、嵌入式系统和物联网领域的应用范围。
RXTXcomm.jar包含了必要的Java类和本地库,以便在Java程序中调用串口和并口操作。 **串口通信基础** 串口通信是一种简单但实用的数据传输方式,常用于连接各种电子设备,如打印机、GPS接收器、Arduino板等。在Java...
在Java项目中,你需要将这个JAR文件添加到类路径中,以便你的Java程序能够访问和使用RXTX提供的功能。 2. **rxtxParallel.dll**:这个动态链接库文件是RXTX的并行通信实现,针对Windows操作系统。在运行包含RXTX...
内容包括:modbus4j.jar,modbus4J-doc,modbus4J-src,RXTXcomm,seroUtils 也可以去国外的网站下载,地址在下面 https://sourceforge.net/projects/modbus4j/files/modbus4j/1.1/
串口通信是计算机之间进行数据交换的一种传统...无论是开发嵌入式应用、数据采集系统还是物联网解决方案,RXTX都是一个值得信赖的工具。在实际项目中,理解并熟练使用这些组件,可以极大地提升开发效率和程序的稳定性。
使用RXTX库时,开发者需要将`rxtxcomm-2.2.jar`添加到Java项目的类路径中,以便在程序中导入和使用RXTX的API。在Windows系统上,还需要确保`rxtxserial.dll`能被系统找到,通常将其放置在系统路径下的目录,或者随...
在处理与硬件设备的交互,如Arduino、PLC或者任何需要串口连接的设备时,RXTXcomm是非常有用的工具。 在遇到“no rxtxSerial in java.library.path”这样的错误时,通常意味着Java运行时环境无法找到RXTXcomm库的...
1. 使用`CommPortIdentifier`类获取可用的串口列表,并找到需要的串口。 2. 打开串口,这需要调用`SerialPort.openPort()`方法。 3. 设置串口参数,如波特率、数据位、停止位和校验位,这可以通过`SerialPort.setXXX...
RXTXcomm.jar是RXTX的主要库文件,包含了Java类和接口,而dll文件(如rxtxParallel.dll和rxtxSerial.dll)则是与硬件交互的实际驱动,用于处理底层的串行和并行通信。 `rxtxParallel.dll`是并行通信的实现,它允许...