一、技术引用
使用com.fazecast.jSerialComm Jar包
二、代码实现
1、串口实现类
package com.handler;
import com.fazecast.jSerialComm.SerialPort;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
//专用电缆绝缘串口
@Data
@Slf4j
public class NewSerialHandler {
private SerialPort serialPort;
private static NewSerialHandler newSerialHandler;
//私有化方法
private NewSerialHandler(String portName, Integer baudRate, Integer dataBits, Integer stopBits){
try{
this.serialPort = SerialPort.getCommPort(portName);
}catch (Exception e){
e.printStackTrace();
}
serialPort.setParity(SerialPort.NO_PARITY);
serialPort.setBaudRate(baudRate);
serialPort.setNumDataBits(dataBits);
serialPort.setNumStopBits(stopBits);
}
//初始化
public static NewSerialHandler getInstance(String portName, Integer baudRate, Integer dataBits, Integer stopBits){
if(newSerialHandler != null){
return newSerialHandler;
}
synchronized (NewSerialHandler.class){
if(newSerialHandler != null){
return newSerialHandler;
}
newSerialHandler = new NewSerialHandler(portName, baudRate, dataBits, stopBits);
log.info("create success");
return newSerialHandler;
}
}
//打开端口
public boolean openPort(){
return serialPort.openPort();
}
//发送数据
public boolean sendBytes(byte[] bytes){
int result = serialPort.writeBytes(bytes, bytes.length);
return result > 0;
}
//关闭端口
public boolean closePort(){
return serialPort.closePort();
}
//判断端口是否打开
public boolean isOpen(){
return serialPort.isOpen();
}
}
2.使用
private NewSerialHandler newSerialHandler = null; //声明
//初始化串口类
private synchronized void initNewSerialHandler(){
if(Objects.isNull(newSerialHandler)){
try{
newSerialHandler = NewSerialHandler.getInstance(serialConfig.getName(), serialConfig.getBaudRate(), serialConfig.getDataBits(), serialConfig.getStopBits());
newSerialHandler.openPort();
}catch (Exception e){
log.error("serial connect fail:", e);
newSerialHandler = null;
}
}
}
//发送消息
public void sendMsg(String msg){
byte[] bytes = msg.getBytes();
boolean result = newSerialHandler.sendBytes(datas);
//发送失败重联
if(!result){
log.error("send fail;{}", s);
if(newSerialHandler.isOpen()){
newSerialHandler.closePort();
}
if(!newSerialHandler.isOpen()){
newSerialHandler.openPort();
}
}
}
注意事项:
如果运行JVM是64位,则可使用最新jSerialComm包
MAVEN引用
<dependency>
<groupId>com.fazecast</groupId>
<artifactId>jSerialComm</artifactId>
<version>[2.0.0,3.0.0)</version>
</dependency>
如果运行JVM是32位,则需要下载JAR包手动引用到项目中,然后再MAVEN打包加入。JAR包下载地址:链接: https://pan.baidu.com/s/1dS_FTxRGZgrNpOnb_JtSwA 提取码: 7rgd
<dependency>
<groupId>com.fazecast</groupId>
<artifactId>jSerialComm</artifactId>
<version>2.11.1</version>
<!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
<scope>system</scope>
<systemPath>${project.basedir}/lib/jSerialComm-2.11.1.jar</systemPath>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>