java 485_Java实现RS485串口通信,发送和接收数据进行解析

本文档详细介绍了如何使用Java进行RS485串口通信,包括打开串口、设置参数、监听数据、发送和接收解析数据。通过创建线程持续监听串口数据,将接收到的16进制数据转换并存储到堵塞队列,然后进一步处理和存储到数据库。
摘要由CSDN通过智能技术生成

packagecom.gpdi.sericlport;import gnu.io.*;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.sql.PreparedStatement;importjava.sql.Connection;importjava.sql.SQLException;importjava.sql.Timestamp;importjava.text.SimpleDateFormat;import java.util.*;importjava.util.concurrent.BlockingQueue;importjava.util.concurrent.LinkedBlockingQueue;import com.gpdi.utils.*;public class ContinueRead extends Thread implements SerialPortEventListener { //SerialPortEventListener//监听器,我的理解是独立开辟一个线程监听串口数据//串口通信管理类

staticCommPortIdentifier portId;/*有效连接上的端口的枚举*/

static Enumeration>portList;

InputStream inputStream;//从串口来的输入流

static OutputStream outputStream;//向串口输出的流

static SerialPort serialPort; //串口的引用//堵塞队列用来存放读到的数据

private BlockingQueue msgQueue = new LinkedBlockingQueue();

@Override/*** SerialPort EventListene 的方法,持续监听端口上是否有数据流*/

public void serialEvent(SerialPortEvent event) {//

switch(event.getEventType()) {caseSerialPortEvent.BI:caseSerialPortEvent.OE:caseSerialPortEvent.FE:caseSerialPortEvent.PE:caseSerialPortEvent.CD:caseSerialPortEvent.CTS:caseSerialPortEvent.DSR:caseSerialPortEvent.RI:caseSerialPortEvent.OUTPUT_BUFFER_EMPTY:break;case SerialPortEvent.DATA_AVAILABLE://当有可用数据时读取数据

byte[] readBuffer = null;int availableBytes = 0;try{

availableBytes=inputStream.available();while (availableBytes > 0) {

readBuffer=ContinueRead.readFromPort(serialPort);

String needData=printHexString(readBuffer);

System.out.println(new Date() + "真实收到的数据为:-----" +needData);

availableBytes=inputStream.available();

msgQueue.add(needData);

}

}catch(IOException e) {

}default:break;

}

}/*** 从串口读取数据

*

*@paramserialPort 当前已建立连接的SerialPort对象

*@return读取到的数据*/

public static byte[] readFromPort(SerialPort serialPort) {

InputStream in= null;byte[] bytes ={};try{

in=serialPort.getInputStream();//缓冲区大小为一个字节

byte[] readBuffer = new byte[1];int bytesNum =in.read(readBuffer);w

1. RS485通讯协议………………………………………………………………… 1 2. 仪表分类说明…………………………………………………………………… 8 2.1. XMA5000 ………………………………………………………………………… 9 2.2. XMB5000 …………………………………………………………………………11 2.3. XMD5000 …………………………………………………………………………12 2.4. XMDT5000 ………………………………………………………………………14 2.5. XME5000 …………………………………………………………………………14 2.6. XMG5000 …………………………………………………………………………14 2.7. XMG6000 …………………………………………………………………………15 2.8. XMG7000 …………………………………………………………………………15 2.9. XMGA5000…………………………………………………………………………16 2.10. XMH5000 …………………………………………………………………………18 2.11. XMHG5000…………………………………………………………………………18 2.12. XMI5000 …………………………………………………………………………18 2.13. XMJ5000 …………………………………………………………………………19 2.14. XML5000 …………………………………………………………………………20 2.15. XMLH5000…………………………………………………………………………21 2.16. XMPHB5000 ………………………………………………………………………21 2.17. XMPHG5000 ………………………………………………………………………21 2.18. XMPHGA5000………………………………………………………………………21 2.19. XMR5000 …………………………………………………………………………21 2.20. XMS5000 …………………………………………………………………………21 2.21. XMT6000 …………………………………………………………………………22 2.22. XMZ5000 …………………………………………………………………………23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值