修正 modbus 写入超时问题

This commit is contained in:
2026-01-20 19:44:10 +08:00
parent 12a459854e
commit 939bcbe950
4 changed files with 30 additions and 7 deletions

View File

@ -119,7 +119,7 @@
<artifactId>javax.servlet-api</artifactId>
</dependency>
<!-- modbus -->
<!-- modbus4j (保留兼容) -->
<dependency>
<groupId>com.infiniteautomation</groupId>
<artifactId>modbus4j</artifactId>
@ -127,4 +127,4 @@
</dependencies>
</project>
</project>

View File

@ -50,6 +50,8 @@ public class ModbusProcessor {
private int writeTimeout;
@Value("${modbus.read-retries:1}")
private int readRetries;
@Value("${modbus.write-retries:1}")
private int writeRetries;
@Autowired
private RedisCache redisCache;
@ -64,6 +66,7 @@ public class ModbusProcessor {
try {
master = connectionManager.borrowMaster(config);
master.setTimeout(writeTimeout);
master.setRetries(0);
result = writeTagValue(master, config, config.getWriteTags());
} catch (Exception e) {
logger.error("Failed to borrow connection or write to devices '{}'", config.getDeviceName(), e);
@ -91,12 +94,13 @@ public class ModbusProcessor {
try {
master = connectionManager.borrowMaster(config);
master.setTimeout(writeTimeout); // 设置超时时间
master.setRetries(0);
// 使用重试装饰器
ModbusMaster finalMaster = master;
result = RetryableModbusOperation.executeWithRetry(() -> {
return writeTagValue(finalMaster, config, config.getWriteTags());
}, 1); // 最大重试1次共2次尝试
}, writeRetries); // 最大重试次数由配置控制
} catch (Exception e) {
logger.error("Failed to borrow connection or write to devices '{}'", config.getDeviceName(), e);