zhangzq
3 weeks ago
1 changed files with 74 additions and 0 deletions
@ -0,0 +1,74 @@ |
|||
package org.nl.common.utils; |
|||
|
|||
import com.fazecast.jSerialComm.SerialPort; |
|||
import org.apache.commons.lang3.StringUtils; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.function.Function; |
|||
|
|||
@Service |
|||
@ConditionalOnProperty(prefix = "comPort",name = "need") |
|||
public class ComPortUtil { |
|||
|
|||
private static SerialPort serialPort; |
|||
|
|||
@Value("${comPort.name}") |
|||
private String cname; |
|||
@Value("${comPort.newBaudRate}") |
|||
private static int newBaudRate; |
|||
@Value("${comPort.newDataBits}") |
|||
private static int newDataBits; |
|||
@Value("${comPort.newStopBits}") |
|||
private static int newStopBits; |
|||
@Value("${comPort.newParity}") |
|||
private static int newParity; |
|||
|
|||
public ComPortUtil() { |
|||
SerialPort[] commPorts = SerialPort.getCommPorts(); |
|||
if (commPorts ==null || commPorts.length < 1 || StringUtils.isEmpty(cname)){ |
|||
throw new RuntimeException("项目启动失败:无法识别com口信息"); |
|||
} |
|||
for (SerialPort commPort : commPorts) { |
|||
if (commPort.getSystemPortName().equals(cname)){ |
|||
serialPort = commPort; |
|||
} |
|||
throw new RuntimeException("项目启动失败:没有找到对应com口"); |
|||
} |
|||
Runtime.getRuntime().addShutdownHook(new Thread(() -> { |
|||
System.out.println("---项目停机执行关闭逻辑---"); |
|||
this.doDestroy(); |
|||
})); |
|||
} |
|||
private static void readComMsg(Function function){ |
|||
if (serialPort!=null){ |
|||
try { |
|||
serialPort.openPort();// 打开串口
|
|||
serialPort.setComPortParameters(newBaudRate, newDataBits, newStopBits, newParity);// 设置串口参数
|
|||
serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0); |
|||
byte[] buffer = new byte[1024]; |
|||
while (serialPort.isOpen()){ |
|||
Thread.sleep(500); |
|||
int bytesRead = serialPort.readBytes(buffer, buffer.length); |
|||
if (bytesRead > 0) { |
|||
String msg = new String(buffer, 0, bytesRead); |
|||
System.out.println("--获取COM口信息--"+msg); |
|||
function.apply(msg); |
|||
} |
|||
} |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} finally { |
|||
if (serialPort!=null && serialPort.isOpen()) { |
|||
serialPort.closePort();// 关闭串口
|
|||
} |
|||
} |
|||
} |
|||
} |
|||
private void doDestroy(){ |
|||
if (serialPort!=null && serialPort.isOpen()) { |
|||
serialPort.closePort();// 关闭串口
|
|||
} |
|||
} |
|||
} |
Loading…
Reference in new issue