java rxtx串口通信问题 和 rfid问题
做一个小程序,rfid接开发板连到串口,需要从串口读取rfid的刷卡信息并显示。
现在的问题是:1、为什么会出现不识别的小框? 2、困扰许久……为什么刷同一张ic卡,显示卡号会有变化?这个用串口调试软件也是一样的问题……

串口通信代码如下:
public class ReadSerial implements Runnable,SerialPortEventListener {
static Enumeration<CommPortIdentifier> portList;
static CommPortIdentifier portId;
InputStream inputStream;
SerialPort serialPort;
Thread readThread;
@SuppressWarnings("unchecked")
public static void main(String[] args){
/*不带参数的getPortIdentifiers方法获得一个枚举对象
* 该对象又包含了系统中管理每个端口的CommPortIdentifier对象
* 这里的端口不仅仅是指串口,也包括并口*/
portList=CommPortIdentifier.getPortIdentifiers();
while(portList.hasMoreElements()){
portId=(CommPortIdentifier) portList.nextElement();
if(portId.getPortType()==CommPortIdentifier.PORT_SERIAL){
if(portId.getName().equals("COM7")){
@SuppressWarnings("unused")
ReadSerial reader=new ReadSerial();
}
}
}
}
public ReadSerial(){
/*open方法打开通讯端口,获得一个CommPort对象
*参数1 应用程序名,参数2 在端口打开时阻塞等待的毫秒数*/
try {
serialPort=(SerialPort) portId.open("jjt", 2000);
} catch (PortInUseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*获取端口的输入流对象*/
try {
inputStream=serialPort.getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*注册一个SerialPortEventListener事件来监听串口事件*/
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*数据可用*/
serialPort.notifyOnDataAvailable(true);
/*设置串口初始化参数*/
try {
serialPort.setSerialPortParams(115200, //波特率
SerialPort.DATABITS_8, //数据位
SerialPort.STOPBITS_1, //停止位
SerialPort.PARITY_NONE); //校验
} catch (UnsupportedCommOperationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
readThread=new Thread(this);
readThread.start();
}
@Override
public void serialEvent(SerialPortEvent event) {
// TODO Auto-generated method stub
switch(event.getEventType()){
case SerialPortEvent.BI:
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:/*输出缓冲区清空*/
break;
case SerialPortEvent.DATA_AVAILABLE:/*端口有可用数据。读到缓冲数组,输出到终端*/
byte[] readBuffer=new byte[1024];
int count=0;
try {
/*返回读取的字节数*/
count = inputStream.read(readBuffer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*从开始读到count个字节再转为字符串*/
String readStr=new String(readBuffer,0,8);
System.out.println(readStr);
}
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
现在的问题是:1、为什么会出现不识别的小框? 2、困扰许久……为什么刷同一张ic卡,显示卡号会有变化?这个用串口调试软件也是一样的问题……


串口通信代码如下:
public class ReadSerial implements Runnable,SerialPortEventListener {
static Enumeration<CommPortIdentifier> portList;
static CommPortIdentifier portId;
InputStream inputStream;
SerialPort serialPort;
Thread readThread;
@SuppressWarnings("unchecked")
public static void main(String[] args){
/*不带参数的getPortIdentifiers方法获得一个枚举对象
* 该对象又包含了系统中管理每个端口的CommPortIdentifier对象
* 这里的端口不仅仅是指串口,也包括并口*/
portList=CommPortIdentifier.getPortIdentifiers();
while(portList.hasMoreElements()){
portId=(CommPortIdentifier) portList.nextElement();
if(portId.getPortType()==CommPortIdentifier.PORT_SERIAL){
if(portId.getName().equals("COM7")){
@SuppressWarnings("unused")
ReadSerial reader=new ReadSerial();
}
}
}
}
public ReadSerial(){
/*open方法打开通讯端口,获得一个CommPort对象
*参数1 应用程序名,参数2 在端口打开时阻塞等待的毫秒数*/
try {
serialPort=(SerialPort) portId.open("jjt", 2000);
} catch (PortInUseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*获取端口的输入流对象*/
try {
inputStream=serialPort.getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*注册一个SerialPortEventListener事件来监听串口事件*/
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*数据可用*/
serialPort.notifyOnDataAvailable(true);
/*设置串口初始化参数*/
try {
serialPort.setSerialPortParams(115200, //波特率
SerialPort.DATABITS_8, //数据位
SerialPort.STOPBITS_1, //停止位
SerialPort.PARITY_NONE); //校验
} catch (UnsupportedCommOperationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
readThread=new Thread(this);
readThread.start();
}
@Override
public void serialEvent(SerialPortEvent event) {
// TODO Auto-generated method stub
switch(event.getEventType()){
case SerialPortEvent.BI:
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:/*输出缓冲区清空*/
break;
case SerialPortEvent.DATA_AVAILABLE:/*端口有可用数据。读到缓冲数组,输出到终端*/
byte[] readBuffer=new byte[1024];
int count=0;
try {
/*返回读取的字节数*/
count = inputStream.read(readBuffer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*从开始读到count个字节再转为字符串*/
String readStr=new String(readBuffer,0,8);
System.out.println(readStr);
}
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
...全文
相关推荐
java程序调用串口硬件注册服务 exe4j rxtxSerial.dll 网页调用
含源码以及相关工具 java程序调用串口硬件注册服务 exe4j rxtxSerial.dll 网页调用
SpringBoot与RXTX实现Java串口通信实战
本文还有配套的精品资源,点击获取 简介:本文详细介绍如何利用SpringBoot框架和RXTXcomm库来实现Java中的串口通信功能。通过使用SpringBoot的轻量级框架优势,结合RXTXcomm提供的跨平台串行通信API,实现了一个简易的串口服务类,并通过SpringBoot控制器进行HTTP请求发送数据。该过程涵盖了引入RXTX库、创建串口服务类、设置串口参数以及...
Java集成Zebra标签打印机实战指南
工业级标签打印系统对通信稳定性要求极高,任何数据丢失或延迟都可能导致标签内容错误甚至生产线停滞。为此,选择合适的串行通信技术栈至关重要。早期Java开发者主要依赖Sun Microsystems发布的javax.commAPI(也称Java Communications API),该API提供了基本的串口和并口访问能力,但由于其仅官方支持Solaris和Linux系统,且长期未更新,导致在Windows平台上的兼容性极差,最终被社区广泛弃用。
RC523制作RFID射频读卡器USB通信参考.zip
RC523制作RFID射频读卡器USB通信参考
javakeshe.zip
通过Java编程,将串口读取到的数据写入MySQL数据库中,及通过界面窗口进行数据库的增删改查的操作 (jdk1.8.0 开发软件eclipse)


