package com.ruoyi.fuzhou.utils.rtu; import com.serotonin.modbus4j.serial.SerialPortWrapper; import gnu.io.SerialPort; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * 自定义串口封装 * @author zhangyy * @date 2025/3/8 */ public class SerialPortWrapperImpl implements SerialPortWrapper { private final Logger log = LoggerFactory.getLogger(this.getClass()); /** * 串口对象 */ private SerialPort serialPort; /** * 串口 */ private String port; /** * 波特率 */ private Integer baudRate; /** * 数据位的位数,RTU是8位,ASCII是7位 */ private Integer dataBits; /** * 停止位的位数,如果无奇偶校验为2,有奇偶校验为1 */ private Integer stopBits; /** * 奇偶校验位,无校验是0,奇校验是1,偶校验是2 */ private Integer parity; /** * 硬件之间输入流应答控制 */ private Integer flowControlIn; /** * 硬件之间输出流应答控制 */ private Integer flowControlOut; public SerialPortWrapperImpl() { super(); } /** * * @param port 端口 * @param baudRate 波特率 * @param dataBits 数据位 * @param stopBits 停止位 * @param parity 校验位 * @param flowControlIn * @param flowControlOut */ public SerialPortWrapperImpl(String port, int baudRate, int dataBits, int stopBits, int parity, int flowControlIn, int flowControlOut) { this.port = port; this.baudRate = baudRate; this.dataBits = dataBits; this.stopBits = stopBits; this.parity = parity; this.flowControlIn = flowControlIn; this.flowControlOut = flowControlOut; } @Override public void close() throws Exception { SerialPortUtils.close(serialPort); } @Override public void open() throws Exception { serialPort = SerialPortUtils.open(port, baudRate, dataBits, stopBits, parity); } @Override public InputStream getInputStream() { InputStream in = null; try { in = serialPort.getInputStream(); } catch (IOException e) { log.error("获取串口输入流错误", e); } return in; } @Override public OutputStream getOutputStream() { OutputStream out = null; try { out = serialPort.getOutputStream(); } catch (IOException e) { log.error("获取串口输出流错误", e); } return out; } @Override public int getBaudRate() { return this.baudRate; } @Override public int getDataBits() { return this.dataBits; } @Override public int getStopBits() { return this.stopBits; } @Override public int getParity() { return this.parity; } @Override public int getFlowControlIn() { return this.flowControlIn; } @Override public int getFlowControlOut() { return this.flowControlOut; } public SerialPort getSerialPort() { return serialPort; } public void setSerialPort(SerialPort serialPort) { this.serialPort = serialPort; } public String getPort() { return port; } public void setPort(String port) { this.port = port; } public void setBaudRate(Integer baudRate) { this.baudRate = baudRate; } public void setDataBits(Integer dataBits) { this.dataBits = dataBits; } public void setStopBits(Integer stopBits) { this.stopBits = stopBits; } public void setParity(Integer parity) { this.parity = parity; } public void setFlowControlIn(Integer flowControlIn) { this.flowControlIn = flowControlIn; } public void setFlowControlOut(Integer flowControlOut) { this.flowControlOut = flowControlOut; } }