13693261870
2025-07-02 6708810c4de34dfb9513061432d656f91d56ee3a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
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;
    }
}