项目场景:
MODBUS RUT java
报错 com.serotonin.modbus4j.sero.messaging.TimeoutException
com.serotonin.modbus4j.sero.messaging.TimeoutException: request=SerialMessage [modbusMessage=ReadHoldingRegistersRequest [slaveId=1, getFunctionCode()=3, toString()=ReadNumericRequest [startOffset=0, numberOfRegisters=1]]]
at com.dc3.common.sdk.service.impl.DriverCommandServiceImpl.read(DriverCommandServiceImpl.java:63)
at com.dc3.common.sdk.service.job.DriverReadScheduleJob.lambda$null$0(DriverReadScheduleJob.java:61)
解决方案①:
设置超时时间
// RTU 协议
// 设置串口参数,串口是COM2,波特率是9600
SerialPortWrapperImpl serialParams = new SerialPortWrapperImpl("COM2", 9600,
SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE, 0, 0);
modbusMaster = modbusFactory.createRtuMaster(serialParams);
try {
//设置超时时间
modbusMaster.setTimeout(3000);
//设置重连次数
modbusMaster.setRetries(3);
//初始化
modbusMaster.init();
masterMap.put(deviceId, modbusMaster);
} catch (ModbusInitException e) {
log.error("串口连接异常~");
e.printStackTrace();
}