java基于jssc串口包从串行端口读取数据

package serial;

import jssc.*;

public class Serial {

public static void main(String[] args) {
    String[] portNames = null;
    portNames = SerialPortList.getPortNames();
    for (String string : portNames) {
        System.out.println(string);
    }

    if (portNames.length == 0) {
        System.out.println("There are no serial-ports");
    } else {

        SerialPort serialPort = new SerialPort("com2");
        try {
            serialPort.openPort();

            serialPort.setParams(SerialPort.BAUDRATE_9600,    SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
            serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT);

            PortReader portReader = new PortReader(serialPort);

            serialPort.addEventListener(portReader, SerialPort.MASK_RXCHAR);

            serialPort.writeString("S");

            serialPort.closePort();
        } catch (Exception e) {
            System.out.println("There are an error on writing string to port т: " + e);
        }
    }
}
}

package serial;

import jssc.SerialPort;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;

public class PortReader implements SerialPortEventListener {

SerialPort serialPort;
public PortReader(SerialPort serialPort) {
    this.serialPort = serialPort;
}

@Override
public void serialEvent(SerialPortEvent event) {
    System.out.println("started");
    if (event.isRXCHAR() && event.getEventValue() > 0) {
        try {
            String receivedData = serialPort.readString(event.getEventValue());
            System.out.println("Received response: " + receivedData);
        } catch (SerialPortException ex) {
            System.out.println("Error in receiving string from COM-port: " + ex);
        }
    }
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为实现RS485串口通信,我们需要用到Java中的串口通信类库和相关的工具类库,例如RXTXcomm和JSSC等。以下是一个实现RS485串口通信并发送和接收数据进行解析的简单的步骤: 1. 导入RXTXcomm或JSSC类库。 2. 打开串口,设置串口的一些参数,例如波特率、数据位、停止位、校验位、流控制等。 3. 设置串口为RS485模式,即设置控制线(RTS或DTR)为发送控制线(即控制线高电平时,串口处于发送模式)。 4. 构造发送数据的字节数组,并将其通过串口发送出去。 5. 在接收数据之前,先设置好串口的超时时间和缓冲区大小等参数。 6. 接收数据,将接收到的字节数组进行解析,得到所需的数据。 7. 关闭串口。 以下是一个简单的RS485通信示例代码,其中使用了RXTXcomm类库: ```java import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class RS485Communicator implements SerialPortEventListener { private SerialPort serialPort; private InputStream inputStream; private OutputStream outputStream; public void connect(String portName, int baudRate) throws Exception { CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); if (portIdentifier.isCurrentlyOwned()) { throw new Exception("Port is currently in use"); } else { serialPort = (SerialPort) portIdentifier.open(this.getClass().getName(), 2000); serialPort.setSerialPortParams(baudRate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); serialPort.setDTR(false); serialPort.setRTS(false); serialPort.enableReceiveTimeout(1000); serialPort.enableReceiveThreshold(256); inputStream = serialPort.getInputStream(); outputStream = serialPort.getOutputStream(); serialPort.addEventListener(this); serialPort.notifyOnDataAvailable(true); } } public void disconnect() throws IOException { if (serialPort != null) { serialPort.removeEventListener(); serialPort.close(); inputStream.close(); outputStream.close(); } } public void sendData(byte[] data) throws IOException { serialPort.setRTS(true); outputStream.write(data); outputStream.flush(); serialPort.setRTS(false); } public void serialEvent(SerialPortEvent event) { if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) { byte[] buffer = new byte[256]; try { int numBytes = inputStream.read(buffer); // 解析接收到的数据并处理 } catch (IOException e) { e.printStackTrace(); } } } } ``` 在使用时,可以先创建一个RS485Communicator对象,然后调用connect方法连接串口,然后就可以通过sendData方法发送数据,通过解析serialEvent方法接收数据。最后,调用disconnect方法关闭串口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值