diff --git a/pom.xml b/pom.xml
index 7f8764e6d235ae351ce2ad963a0b1c4cf0ffcd29..f63494413cda7227077ef09804581c0db653c2ea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -91,7 +91,6 @@
${spring-boot.version}
com.fjg.openprotocoldemo.OpenProtocolDemoApplication
-
diff --git a/src/main/java/com/fjg/openprotocoldemo/controller/TestController.java b/src/main/java/com/fjg/openprotocoldemo/controller/TestController.java
index 1a78c6e9a3d945ee1eee596432d27b4481ffeb77..ccae4031b160deff98a5f6c5e6805e4e9d598a4e 100644
--- a/src/main/java/com/fjg/openprotocoldemo/controller/TestController.java
+++ b/src/main/java/com/fjg/openprotocoldemo/controller/TestController.java
@@ -1,11 +1,11 @@
package com.fjg.openprotocoldemo.controller;
import com.fazecast.jSerialComm.SerialPort;
-import com.fjg.openprotocoldemo.modbus.client.rtu.TestCommPorts;
import com.fjg.openprotocoldemo.net.client.TcpClient;
import com.fjg.openprotocoldemo.protocol.op.TcpClientFactory;
import com.fjg.openprotocoldemo.util.SerialPortUtil;
import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
/**
@@ -15,9 +15,9 @@ import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/test")
@AllArgsConstructor
+@Slf4j
public class TestController {
- private final TcpClient tcpClient;
private final TcpClientFactory tcpClientFactory;
@PostMapping("/send")
@@ -29,12 +29,8 @@ public class TestController {
@PostMapping("/send1")
public void send1(@RequestBody String message) {
SerialPort serialPort = SerialPort.getCommPort("COM21");
-
// 配置串口参数
serialPort.setComPortParameters(9600, 8, SerialPort.ONE_STOP_BIT, SerialPort.NO_PARITY);
- SerialPortUtil.readSerialPort(serialPort, message, 10000, bytes -> {
- System.out.println(new String(bytes));
- });
-// TestCommPorts.readSerialPort(message);
+ SerialPortUtil.readSerialPort(serialPort, message, 10000, bytes -> log.debug(new String(bytes)));
}
}
diff --git a/src/main/java/com/fjg/openprotocoldemo/modbus/client/rtu/TestCommPorts.java b/src/main/java/com/fjg/openprotocoldemo/modbus/client/rtu/TestCommPorts.java
index 4ee3ad444dedda537c9ec5854e1a8ea8e8911bfb..ce7636b37a52c805771001f141b3b771ad0bcd53 100644
--- a/src/main/java/com/fjg/openprotocoldemo/modbus/client/rtu/TestCommPorts.java
+++ b/src/main/java/com/fjg/openprotocoldemo/modbus/client/rtu/TestCommPorts.java
@@ -32,9 +32,9 @@ public class TestCommPorts implements CommandLineRunner {
*/
private static void listSerialPorts(){
SerialPort[] ports = SerialPort.getCommPorts();
- System.out.println("可用串口列表:");
+ log.debug("可用串口列表:");
for (SerialPort port : ports) {
- System.out.println(port.getSystemPortName() + " - " + port.getDescriptivePortName());
+ log.debug(port.getSystemPortName() + " - " + port.getDescriptivePortName());
}
}
@@ -48,17 +48,14 @@ public class TestCommPorts implements CommandLineRunner {
// 打开串口
if (serialPort.openPort()) {
- System.out.println("串口已打开!");
+ log.debug("串口已打开!");
} else {
- System.out.println("无法打开串口!");
+ log.debug("无法打开串口!");
return;
}
-
- // 在这里可以进行读写操作...
-
// 关闭串口
serialPort.closePort();
- System.out.println("串口已关闭!");
+ log.debug("串口已关闭!");
}
@@ -126,13 +123,13 @@ public class TestCommPorts implements CommandLineRunner {
}
public static void main(String[] args) {
-// listSerialPorts();
-// openSerialPort("COM21");
+ listSerialPorts();
+ openSerialPort("COM21");
}
@Override
public void run(String... args) throws Exception {
-// listenSerialPort();
+ // TODO 此处功能待完善
}
}
diff --git a/src/main/java/com/fjg/openprotocoldemo/net/client/TcpClient.java b/src/main/java/com/fjg/openprotocoldemo/net/client/TcpClient.java
index 4c65a5f9f6eb467eb2c2768774daec8afec6f068..c36b5f7efb675025c24096599f8f9ae8da1cfcea 100644
--- a/src/main/java/com/fjg/openprotocoldemo/net/client/TcpClient.java
+++ b/src/main/java/com/fjg/openprotocoldemo/net/client/TcpClient.java
@@ -2,9 +2,6 @@ package com.fjg.openprotocoldemo.net.client;
import com.fjg.openprotocoldemo.net.ConnectionCallback;
import com.fjg.openprotocoldemo.net.MessageCallback;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import io.netty.handler.timeout.IdleStateEvent;
/**
* @author fengjianguo
diff --git a/src/main/java/com/fjg/openprotocoldemo/run/AppRunning.java b/src/main/java/com/fjg/openprotocoldemo/run/AppRunning.java
index ae8dfa6d4c036b93a3f4ad9dcf396c3f655540fa..5026dc25815ad00ffedf074e2862eb3bfef69799 100644
--- a/src/main/java/com/fjg/openprotocoldemo/run/AppRunning.java
+++ b/src/main/java/com/fjg/openprotocoldemo/run/AppRunning.java
@@ -1,22 +1,10 @@
package com.fjg.openprotocoldemo.run;
-import cn.hutool.core.util.HexUtil;
-import com.fjg.openprotocoldemo.net.ConnectionCallback;
-import com.fjg.openprotocoldemo.net.client.TcpClient;
-import com.fjg.openprotocoldemo.protocol.op.OpTcpClient;
import com.fjg.openprotocoldemo.protocol.op.TcpClientFactory;
import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
-import java.nio.charset.StandardCharsets;
-import java.util.Scanner;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.locks.ReentrantLock;
/**
* @author fengjianguo
@@ -26,33 +14,12 @@ import java.util.concurrent.locks.ReentrantLock;
@AllArgsConstructor
public class AppRunning implements CommandLineRunner {
- private final TcpClient tcpClient;
private final TcpClientFactory tcpClientFactory;
@Override
public void run(String... args) throws Exception {
// 启动客户端
tcpClientFactory.startAllClients();
-// tcpClient.start();
-//
-// // 持续接收用户输入并发送消息
-// Scanner scanner = new Scanner(System.in);
-// while (true) {
-// System.out.println("Enter a message to send (type 'exit' to quit):");
-// String input = scanner.nextLine();
-//
-// if ("exit".equalsIgnoreCase(input)) {
-// break; // 用户输入 exit 时退出
-// }
-// byte[] bytes = input.getBytes();
-// System.out.println("发送消息:" + bytes);
-// // 发送消息到服务器
-// tcpClient.sendMessage(bytes);
-// }
-//
-// // 停止客户端
-// tcpClient.stop();
-// scanner.close();
}
diff --git a/src/main/java/com/fjg/openprotocoldemo/util/CRC16ModbusUtil.java b/src/main/java/com/fjg/openprotocoldemo/util/CRC16ModbusUtil.java
index bf727d2db3de8b9a94a9be018cbfdfb6c45dcdcb..68caef334a1d8679be9deb76634dfff302e1ab84 100644
--- a/src/main/java/com/fjg/openprotocoldemo/util/CRC16ModbusUtil.java
+++ b/src/main/java/com/fjg/openprotocoldemo/util/CRC16ModbusUtil.java
@@ -1,9 +1,12 @@
package com.fjg.openprotocoldemo.util;
+import lombok.extern.slf4j.Slf4j;
+
/**
* @author fengjianguo
* @date 2025/5/21 15:53
*/
+@Slf4j
public class CRC16ModbusUtil {
@@ -30,6 +33,7 @@ public class CRC16ModbusUtil {
/**
* 计算 CRC16-MODBUS 校验码
+ *
* @param data 原始数据字节数组
* @return CRC16 校验值(short)
*/
@@ -39,7 +43,8 @@ public class CRC16ModbusUtil {
/**
* 计算 CRC16-MODBUS 校验码(支持偏移和长度)
- * @param data 字节数组
+ *
+ * @param data 字节数组
* @param offset 起始位置
* @param length 数据长度
* @return CRC16 校验值(short)
@@ -52,7 +57,7 @@ public class CRC16ModbusUtil {
crc = (crc >> 8) ^ CRC_TABLE[index];
}
- return (short)(crc & 0xFFFF);
+ return (short) (crc & 0xFFFF);
}
/**
@@ -61,9 +66,9 @@ public class CRC16ModbusUtil {
public static byte[] getCRCBytes(short crc) {
byte[] bytes = new byte[2];
// 低位字节(先发)
- bytes[0] = (byte)(crc & 0xFF);
+ bytes[0] = (byte) (crc & 0xFF);
// 高位字节(后发)
- bytes[1] = (byte)((crc >> 8) & 0xFF);
+ bytes[1] = (byte) ((crc >> 8) & 0xFF);
return bytes;
}
@@ -105,11 +110,11 @@ public class CRC16ModbusUtil {
// 计算 CRC
short crc = calculateCRC(data);
- System.out.printf("CRC16: 0x%04X\n", crc & 0xFFFF);
+ log.debug("CRC16: {}", crc & 0xFFFF);
// 获取 CRC 校验位(2字节)
byte[] crcBytes = getCRCBytes(crc);
- System.out.printf("CRC Bytes: [0x%02X, 0x%02X]\n",
+ log.debug("CRC Bytes: [{}, {}]",
crcBytes[0], crcBytes[1]);
// 构造完整帧(原始数据 + CRC)
@@ -118,11 +123,11 @@ public class CRC16ModbusUtil {
System.arraycopy(crcBytes, 0, fullFrame, data.length, crcBytes.length);
// 打印完整帧(用于发送)
- System.out.print("完整帧(Hex):");
+ log.debug("完整帧(Hex):");
for (byte b : fullFrame) {
- System.out.printf("%02X ", b & 0xFF);
+ log.debug("{} ", b & 0xFF);
}
- System.out.println("========================================================");
+ log.debug("========================================================");
// 示例帧:正确帧(含 CRC)
byte[] validFrame = new byte[]{
@@ -138,7 +143,7 @@ public class CRC16ModbusUtil {
};
// 验证帧是否合法
- System.out.println("validFrame 是否合法: " + isFrameValid(validFrame));
- System.out.println("invalidFrame 是否合法: " + isFrameValid(invalidFrame));
+ log.debug("validFrame 是否合法: {}", isFrameValid(validFrame));
+ log.debug("invalidFrame 是否合法: {}", isFrameValid(invalidFrame));
}
}
diff --git a/src/main/java/com/fjg/openprotocoldemo/util/HexStringUtil.java b/src/main/java/com/fjg/openprotocoldemo/util/HexStringUtil.java
index 9780a5301ddb10c370f8cf8d0baf134b5fd66853..4ebe43db7f3c4e6ccc73cc956f7cc8e956848632 100644
--- a/src/main/java/com/fjg/openprotocoldemo/util/HexStringUtil.java
+++ b/src/main/java/com/fjg/openprotocoldemo/util/HexStringUtil.java
@@ -5,6 +5,10 @@ package com.fjg.openprotocoldemo.util;
* @date 2025/4/22 9:30
*/
public class HexStringUtil {
+
+ private HexStringUtil() {
+ }
+
/**
* 16进制字符串转化为byte数组
*
diff --git a/src/main/java/com/fjg/openprotocoldemo/util/SerialPortUtil.java b/src/main/java/com/fjg/openprotocoldemo/util/SerialPortUtil.java
index b229bbc8684ca8cbdbe3a7f3de8fb5a31a343b82..a3b1db32ca40b546f348550e7cb01f12cb3bb787 100644
--- a/src/main/java/com/fjg/openprotocoldemo/util/SerialPortUtil.java
+++ b/src/main/java/com/fjg/openprotocoldemo/util/SerialPortUtil.java
@@ -15,7 +15,11 @@ import java.util.function.Function;
*/
@Slf4j
public class SerialPortUtil {
- private final static Object LOCK = new Object();
+
+ private SerialPortUtil() {
+ }
+
+ private static final Object LOCK = new Object();
public static void readSerialPort(SerialPort serialPort, String request, long timeout, Consumer consumer) {
synchronized (LOCK) {
diff --git a/src/main/java/com/fjg/openprotocoldemo/util/StringUtil.java b/src/main/java/com/fjg/openprotocoldemo/util/StringUtil.java
index 364204b938a1d46411383a2457cbe2cc6ea9b2ec..cd9c924852b119d6f5cbb852567fc3bef22ec499 100644
--- a/src/main/java/com/fjg/openprotocoldemo/util/StringUtil.java
+++ b/src/main/java/com/fjg/openprotocoldemo/util/StringUtil.java
@@ -1,11 +1,14 @@
package com.fjg.openprotocoldemo.util;
/**
- *
* @author fengjianguo
* @date 2024/4/3 10:30
*/
public class StringUtil {
+
+ private StringUtil() {
+ }
+
/**
* 数组转字符串
*
diff --git a/src/test/java/com/fjg/openprotocoldemo/OpenProtocolDemoApplicationTests.java b/src/test/java/com/fjg/openprotocoldemo/OpenProtocolDemoApplicationTests.java
deleted file mode 100644
index a5b52f87e9ffe85d69a6f63c78423fdabb8db832..0000000000000000000000000000000000000000
--- a/src/test/java/com/fjg/openprotocoldemo/OpenProtocolDemoApplicationTests.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.fjg.openprotocoldemo;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class OpenProtocolDemoApplicationTests {
-
- @Test
- void contextLoads() {
- }
-
-}