修改modbus读取设备数据连接池配置
This commit is contained in:
@ -26,9 +26,14 @@ public class Modbus4jConnectionManager {
|
||||
GenericObjectPool<ModbusMaster> pool = connectionPools.computeIfAbsent(poolKey, key -> {
|
||||
PooledModbusMasterFactory factory = new PooledModbusMasterFactory(config.getHost(), config.getPort());
|
||||
GenericObjectPoolConfig<ModbusMaster> poolConfig = new GenericObjectPoolConfig<>();
|
||||
poolConfig.setMaxTotal(5); // 池中最大连接数
|
||||
poolConfig.setMinIdle(1); // 最小空闲连接数
|
||||
poolConfig.setMaxTotal(20); // 池中最大连接数
|
||||
poolConfig.setMinIdle(4); // 最小空闲连接数
|
||||
poolConfig.setTestOnBorrow(true); // 借用时测试连接有效性
|
||||
poolConfig.setTestOnReturn(true); // 归还时测试连接有效性
|
||||
poolConfig.setTestWhileIdle(true); // 空闲时测试连接有效性
|
||||
poolConfig.setMaxWaitMillis(3000); // 获取连接的最大等待时间3秒
|
||||
poolConfig.setTimeBetweenEvictionRunsMillis(30000); // 30秒检查一次空闲连接
|
||||
poolConfig.setMinEvictableIdleTimeMillis(60000); // 空闲超过60秒的连接可以被驱逐
|
||||
|
||||
return new GenericObjectPool<>(factory, poolConfig);
|
||||
});
|
||||
|
||||
@ -43,6 +43,8 @@ import static com.xzzn.common.enums.RegisterType.DISCRETE_INPUT;
|
||||
public class ModbusProcessor {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(ModbusProcessor.class);
|
||||
private int readTimeout = 5000;
|
||||
private int writeTimeout = 3000;
|
||||
|
||||
@Autowired
|
||||
private RedisCache redisCache;
|
||||
@ -55,8 +57,8 @@ public class ModbusProcessor {
|
||||
boolean result;
|
||||
try {
|
||||
master = connectionManager.borrowMaster(config);
|
||||
// 设置了Modbus通信的超时时间为1000毫秒(1秒)。当主设备与从设备通信时,若在1秒内未收到响应,则认为通信超时并抛出异常。这有助于避免长时间等待无响应的设备。
|
||||
master.setTimeout(1000);
|
||||
// 设置了Modbus通信的超时时间为3000毫秒(3秒)。当主设备与从设备通信时,若在3秒内未收到响应,则认为通信超时并抛出异常。这有助于避免长时间等待无响应的设备。
|
||||
master.setTimeout(writeTimeout);
|
||||
result = writeTagValue(master, config, config.getWriteTags());
|
||||
} catch (Exception e) {
|
||||
logger.error("Failed to borrow connection or write to devices '{}'", config.getDeviceName(), e);
|
||||
@ -78,7 +80,7 @@ public class ModbusProcessor {
|
||||
|
||||
try {
|
||||
master = connectionManager.borrowMaster(config);
|
||||
master.setTimeout(1000); // 设置超时时间
|
||||
master.setTimeout(writeTimeout); // 设置超时时间
|
||||
|
||||
// 使用重试装饰器
|
||||
ModbusMaster finalMaster = master;
|
||||
@ -221,7 +223,7 @@ public class ModbusProcessor {
|
||||
public ModbusMaster borrowMaster(DeviceConfig config) throws Exception {
|
||||
ModbusMaster master = connectionManager.borrowMaster(config);
|
||||
// 设置了Modbus通信的超时时间为5000毫秒(5秒)。当主设备与从设备通信时,若在5秒内未收到响应,则认为通信超时并抛出异常。这有助于避免长时间等待无响应的设备。
|
||||
master.setTimeout(5000);
|
||||
master.setTimeout(readTimeout);
|
||||
return master;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user