diff --git a/src/main/java/com/iflytop/gd/GraphiteDigesterServiceApplication.java b/src/main/java/com/iflytop/gd/GraphiteDigesterServiceApplication.java index 9d7d7ac..fd00c06 100644 --- a/src/main/java/com/iflytop/gd/GraphiteDigesterServiceApplication.java +++ b/src/main/java/com/iflytop/gd/GraphiteDigesterServiceApplication.java @@ -4,7 +4,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.scheduling.annotation.EnableScheduling; +@EnableScheduling @SpringBootApplication public class GraphiteDigesterServiceApplication { diff --git a/src/main/java/com/iflytop/gd/hardware/comm/modbus/ModbusMasterService.java b/src/main/java/com/iflytop/gd/hardware/comm/modbus/ModbusMasterService.java index bf18e86..fe24bed 100644 --- a/src/main/java/com/iflytop/gd/hardware/comm/modbus/ModbusMasterService.java +++ b/src/main/java/com/iflytop/gd/hardware/comm/modbus/ModbusMasterService.java @@ -5,6 +5,7 @@ import com.serotonin.modbus4j.msg.*; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.jboss.logging.BasicLogger; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.scheduling.annotation.Scheduled; @@ -26,14 +27,14 @@ public class ModbusMasterService { @PostConstruct public void init() { + modbusMaster_ = ModbusMasterFactory.createModbusRtuMaster(port, baudrate); log.info("============== ============== ============== ============== =============="); log.info("============== ============== ============== ============== =============="); try { - modbusMaster_ = ModbusMasterFactory.createModbusRtuMaster(port, baudrate); - modbusMaster_.init(); - + this.connect(); log.info("Modbus master 端口: {} 波特率:{} initialized successfully.", port, baudrate); } catch (Exception e) { + modbusMaster_.setConnected(false); log.error("Failed to initialize Modbus master: {} 端口: {} 波特率: {}", e.getMessage(), port, baudrate); } @@ -68,11 +69,13 @@ public class ModbusMasterService { ReadCoilsRequest request = new ReadCoilsRequest(slaveId, startAddress, length); ReadCoilsResponse response = (ReadCoilsResponse) modbusMaster_.send(request); if (response.isException()) { + modbusMaster_.setConnected(false); log.error("Error reading coils: {}", response.getExceptionMessage()); return null; } return response.getBooleanData(); } catch (Exception e) { + modbusMaster_.setConnected(false); log.error("Failed to read coils: {}", e.getMessage()); return null; } finally { @@ -90,11 +93,13 @@ public class ModbusMasterService { ReadDiscreteInputsRequest request = new ReadDiscreteInputsRequest(slaveId, startAddress, length); ReadDiscreteInputsResponse response = (ReadDiscreteInputsResponse) modbusMaster_.send(request); if (response.isException()) { + modbusMaster_.setConnected(false); log.error("Error reading discrete inputs: {}", response.getExceptionMessage()); return null; } return response.getBooleanData(); } catch (Exception e) { + modbusMaster_.setConnected(false); log.error("Failed to read discrete inputs: {}", e.getMessage()); return null; } finally { @@ -112,11 +117,13 @@ public class ModbusMasterService { ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(slaveId, startAddress, length); ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) modbusMaster_.send(request); if (response.isException()) { + modbusMaster_.setConnected(false); log.error("Error reading holding registers: {}", response.getExceptionMessage()); return null; } return response.getShortData(); } catch (Exception e) { + modbusMaster_.setConnected(false); log.error("Failed to read holding registers: {}", e.getMessage()); return null; } finally { @@ -134,11 +141,13 @@ public class ModbusMasterService { ReadInputRegistersRequest request = new ReadInputRegistersRequest(slaveId, startAddress, length); ReadInputRegistersResponse response = (ReadInputRegistersResponse) modbusMaster_.send(request); if (response.isException()) { + modbusMaster_.setConnected(false); log.error("Error reading input registers: {}", response.getExceptionMessage()); return null; } return response.getShortData(); } catch (Exception e) { + modbusMaster_.setConnected(false); log.error("Failed to read input registers: {}", e.getMessage()); return null; } finally { @@ -156,11 +165,13 @@ public class ModbusMasterService { WriteCoilRequest request = new WriteCoilRequest(slaveId, address, value); WriteCoilResponse response = (WriteCoilResponse) modbusMaster_.send(request); if (response.isException()) { + modbusMaster_.setConnected(false); log.error("Error writing coil: {}", response.getExceptionMessage()); return false; } return true; } catch (Exception e) { + modbusMaster_.setConnected(false); log.error("Failed to write coil: {}", e.getMessage()); return false; } finally { @@ -178,11 +189,13 @@ public class ModbusMasterService { WriteRegisterRequest request = new WriteRegisterRequest(slaveId, address, value); WriteRegisterResponse response = (WriteRegisterResponse) modbusMaster_.send(request); if (response.isException()) { + modbusMaster_.setConnected(false); log.error("Error writing register: {}", response.getExceptionMessage()); return false; } return true; } catch (Exception e) { + modbusMaster_.setConnected(false); log.error("Failed to write register: {}", e.getMessage()); return false; } finally { @@ -200,11 +213,13 @@ public class ModbusMasterService { WriteCoilsRequest request = new WriteCoilsRequest(slaveId, startAddress, values); WriteCoilsResponse response = (WriteCoilsResponse) modbusMaster_.send(request); if (response.isException()) { + modbusMaster_.setConnected(false); log.error("Error writing coils: {}", response.getExceptionMessage()); return false; } return true; } catch (Exception e) { + modbusMaster_.setConnected(false); log.error("Failed to write coils: {}", e.getMessage()); return false; } finally { @@ -222,11 +237,13 @@ public class ModbusMasterService { WriteRegistersRequest request = new WriteRegistersRequest(slaveId, startAddress, values); WriteRegistersResponse response = (WriteRegistersResponse) modbusMaster_.send(request); if (response.isException()) { + modbusMaster_.setConnected(false); log.error("Error writing registers: {}", response.getExceptionMessage()); return false; } return true; } catch (Exception e) { + modbusMaster_.setConnected(false); log.error("Failed to write registers: {}", e.getMessage()); return false; } finally { @@ -235,23 +252,33 @@ public class ModbusMasterService { } // ==== ==== ==== ==== ==== ==== 自动重连 ==== ==== ==== ==== ==== ==== + void connect() throws Exception + { + modbusMaster_.init(); + modbusMaster_.setRetries(3); +// modbusMaster_.setIoLog(new BasicLogger()); + modbusMaster_.setTimeout(2000); + modbusMaster_.setConnected(true); + } -// /** -// * 自动重连 -// */ -// @Scheduled(fixedRate = 1000) -// public void autoReconnect() { -// lock.lock(); -// try { -// if (modbusMaster_ == null || modbusMaster_.isConnected()) { -// return; -// } -// modbusMaster_.init(); -// log.info("Modbus master reconnected successfully."); -// } catch (Exception e) { -// log.error("Failed to reconnect Modbus master: {}", e.getMessage()); -// } finally { -// lock.unlock(); -// } -// } + /** + * 自动重连 + */ + @Scheduled(fixedRate = 1000) + public void autoReconnect() { + lock.lock(); + try { + if(modbusMaster_ ==null || !modbusMaster_.isInitialized() || modbusMaster_.isConnected()) + return; + + this.connect(); + + log.info("Modbus master 重连成功 端口: {} 波特率:{}.", port, baudrate); + } catch (Exception e) { + log.error("Modbus master : {}", e.getMessage()); + log.info("Modbus master 重连失败 端口: {} 波特率:{}. {}", port, baudrate, e.getMessage()); + } finally { + lock.unlock(); + } + } } diff --git a/src/main/java/com/iflytop/gd/hardware/config/StepMotorConfig.java b/src/main/java/com/iflytop/gd/hardware/config/StepMotorConfig.java index 3015ee2..041520e 100644 --- a/src/main/java/com/iflytop/gd/hardware/config/StepMotorConfig.java +++ b/src/main/java/com/iflytop/gd/hardware/config/StepMotorConfig.java @@ -83,6 +83,7 @@ public class StepMotorConfig { static final double HEATER_MOTOR_DEFAULT_MAX_LIMIT = 100.0; static final double ACID_PUMP_MOTOR_DEFAULT_MAX_LIMIT = 1000000; final static Map stepMotorMaxLimitMap = Map.ofEntries( + Map.entry(StepMotorMId.SHAKE_MOTOR_MID, 20000.0), Map.entry(StepMotorMId.TRAY_MOTOR_MID, 200.0), Map.entry(StepMotorMId.HBOT_X_MOTOR_MID, 1400.0), Map.entry(StepMotorMId.HBOT_Y_MOTOR_MID, 700.0), diff --git a/src/main/java/com/iflytop/gd/hardware/type/A8kPacket.java b/src/main/java/com/iflytop/gd/hardware/type/A8kPacket.java index 638ae98..904bc4d 100644 --- a/src/main/java/com/iflytop/gd/hardware/type/A8kPacket.java +++ b/src/main/java/com/iflytop/gd/hardware/type/A8kPacket.java @@ -40,11 +40,11 @@ public class A8kPacket { public static final int PACKET_TYPE_OFFSET = 0; public static final int CMDID_OFFSET = 1; public static final int MODULE_ID_OFFSET = 3; - public static final int INDEX_OFFSET = 5; - public static final int DATA_LEN_OFFSET = 7; - public static final int DATA_OFFSET = 8; + public static final int INDEX_OFFSET = 4; + public static final int DATA_LEN_OFFSET = 6; + public static final int DATA_OFFSET = 7; - public static final int PACKET_MIN_LEN = 9;// + public static final int PACKET_MIN_LEN = 8;// public static final int CMD_OVERTIME = 1500; @@ -83,7 +83,7 @@ public class A8kPacket { } public int getModuleId() { - return ByteArray.readU16bit(raw, MODULE_ID_OFFSET); + return ByteArray.readU8bit(raw, MODULE_ID_OFFSET); } public int getDataLen() { @@ -203,7 +203,7 @@ public class A8kPacket { buffer.order(ByteOrder.LITTLE_ENDIAN); buffer.put((byte) (packetType & 0xff)); // packetType buffer.putShort((short) (cmdId & 0xffff)); // cmdid - buffer.putShort((short) (moduleId & 0xffff)); // moduleId + buffer.put((byte) (moduleId & 0xFF)); // moduleId buffer.put((byte) 0x4C); // index buffer.put((byte) 0x00); // index buffer.put((byte) (params.length * 4)); // datalen diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 515afb5..82a4d12 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -36,13 +36,13 @@ command_bus: device.enableCanBus: true iflytophald: - ip: 192.168.1.140 + ip: 192.168.8.168 cmdch.port: 19004 datach.port: 19005 #window config #modbus: -# port: COM2 +# port: COM18 # baudrate: 9600 #工控机 config