Browse Source

add: modbus config

add: 修改 包结构
master
HSZ_HeSongZhen 3 months ago
parent
commit
b171aeaa15
  1. 1
      build.gradle
  2. 1
      src/main/java/com/iflytop/gd/GraphiteDigesterServiceApplication.java
  3. 19
      src/main/java/com/iflytop/gd/hardware/comm/modbus/ModbusMasterService.java
  4. 12
      src/main/java/com/iflytop/gd/hardware/drivers/HeaterRodDriver.java
  5. 12
      src/main/java/com/iflytop/gd/hardware/type/A8kPacket.java
  6. 12
      src/main/resources/application-dev.yml

1
build.gradle

@ -50,5 +50,6 @@ dependencies {
}
tasks.named('test') {
enabled = false
useJUnitPlatform()
}

1
src/main/java/com/iflytop/gd/GraphiteDigesterServiceApplication.java

@ -16,5 +16,4 @@ public class GraphiteDigesterServiceApplication {
System.out.println("访问地址 → http://localhost:" + port + "/");
System.out.println("文档地址 → http://localhost:" + port + "/doc.html");
}
}

19
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.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.scheduling.annotation.Scheduled;
@ -17,15 +18,27 @@ public class ModbusMasterService {
private ModbusMaster modbusMaster_;
private final ReentrantLock lock = new ReentrantLock();
@Value("${modbus.port}")
private String port;
@Value("${modbus.baudrate}")
private int baudrate;
@PostConstruct
public void init() {
log.info("============== ============== ============== ============== ==============");
log.info("============== ============== ============== ============== ==============");
try {
modbusMaster_ = ModbusMasterFactory.createModbusRtuMaster("COM2", 9600);
modbusMaster_ = ModbusMasterFactory.createModbusRtuMaster(port, baudrate);
modbusMaster_.init();
log.info("Modbus master initialized successfully.");
log.info("Modbus master 端口: {} 波特率:{} initialized successfully.", port, baudrate);
} catch (Exception e) {
log.error("Failed to initialize Modbus master: {}", e.getMessage());
log.error("Failed to initialize Modbus master: {} 端口: {} 波特率: {}",
e.getMessage(), port, baudrate);
}
log.info("============== ============== ============== ============== ==============");
log.info("============== ============== ============== ============== ==============");
}
/**

12
src/main/java/com/iflytop/gd/hardware/drivers/HeaterRodDriver.java

@ -1,5 +1,6 @@
package com.iflytop.gd.hardware.drivers;
import cn.hutool.core.util.StrUtil;
import com.iflytop.gd.hardware.comm.modbus.ModbusMasterService;
import com.iflytop.gd.hardware.type.driver.HeaterRodSlavedId;
import lombok.RequiredArgsConstructor;
@ -65,7 +66,7 @@ public class HeaterRodDriver {
throw new Exception("Failed to stop heater rod with ID: " + heaterRodId.name());
}
log.info("Heater rod with ID: {} stopped.", heaterRodId.name());
log.info("{} stopped.", heaterRodId.name());
}
public void setTemperature(HeaterRodSlavedId heaterRodId, double temperature) throws Exception {
@ -77,7 +78,7 @@ public class HeaterRodDriver {
throw new Exception("Failed to set temperature for heater rod with ID: " + heaterRodId.name());
}
log.info("Heater rod with ID: {} started with temperature: {}", heaterRodId.name(), temperature);
log.info("{} started with temperature: {}", heaterRodId.name(), temperature);
}
public double getTemperature(HeaterRodSlavedId heaterRodId) throws Exception {
@ -86,15 +87,14 @@ public class HeaterRodDriver {
short[] response = modbusMaster.readHoldingRegisters(slaveId, PV_ADDRESS, 1);
if (response == null || response.length == 0) {
throw new Exception("Failed to read temperature for heater rod with ID: " + heaterRodId.name());
throw new Exception(StrUtil.format("Failed to read temperature {}", heaterRodId.name()));
}
double temperature = response[0] / Math.pow(10, decimalPoint);
log.info("GET temperature for heater rod with ID: " + heaterRodId.name());
log.info("{} GET temperature {}", heaterRodId.name(), temperature);
return temperature;
}
// application
// ==== ==== ==== ==== ==== ==== application ==== ==== ==== ==== ==== ====
public void open(HeaterRodSlavedId heaterRodId, double temperature) throws Exception {
this.openPower(heaterRodId);
this.setTemperature(heaterRodId, temperature);

12
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 = 4;
public static final int DATA_LEN_OFFSET = 6;
public static final int DATA_OFFSET = 7;
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 PACKET_MIN_LEN = 8;//
public static final int PACKET_MIN_LEN = 9;//
public static final int CMD_OVERTIME = 1500;
@ -83,7 +83,7 @@ public class A8kPacket {
}
public int getModuleId() {
return ByteArray.readU8bit(raw, MODULE_ID_OFFSET);
return ByteArray.readU16bit(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.put((byte) (moduleId & 0xFF)); // moduleId
buffer.putShort((short) (moduleId & 0xffff)); // moduleId
buffer.put((byte) 0x4C); // index
buffer.put((byte) 0x00); // index
buffer.put((byte) (params.length * 4)); // datalen

12
src/main/resources/application-dev.yml

@ -38,4 +38,14 @@ device.enableCanBus: true
iflytophald:
ip: 192.168.1.140
cmdch.port: 19004
datach.port: 19005
datach.port: 19005
#window config
#modbus:
# port: COM2
# baudrate: 9600
#工控机 config
modbus:
port: ttyS1
baudrate: 9600
Loading…
Cancel
Save