Browse Source

拆分溫度,可单独配置孵育盘与板夹仓温度

master
白凤吉 3 months ago
parent
commit
a2cb1af6cd
  1. 20
      src/main/java/a8k/app/controler/api/v1/app/setting/DeviceSettingControler.java
  2. 13
      src/main/java/a8k/app/dao/type/db/DeviceSetting.java
  3. 11
      src/main/java/a8k/app/hardware/driver/TemperatureControlDriver.java
  4. 64
      src/main/java/a8k/app/service/background/TemperatureCtrlService.java
  5. 9
      src/main/java/a8k/app/service/setting/AppSettingsMgrService.java
  6. 14
      src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java
  7. 11
      src/main/java/a8k/extui/page/debug/P20AppSettingDebugPage.java
  8. 39
      src/main/java/a8k/extui/page/extapp/P02A8kTemperaturaVerfication.java

20
src/main/java/a8k/app/controler/api/v1/app/setting/DeviceSettingControler.java

@ -83,15 +83,21 @@ public class DeviceSettingControler {
return ApiRet.success();
}
@Operation(summary = "设置设备温度")
@PostMapping("/setTemperature")
public ApiRet<Void> setTemperature(Integer val) {
log.info("setTemperature:{}", val);
appSettingsMgrService.setTemperature(val);
@Operation(summary = "设置孵育盘温度")
@PostMapping("/setIncubateBoxTemperature")
public ApiRet<Void> setIncubateBoxTemperature(Integer val) {
log.info("setIncubateBoxTemperature:{}", val);
appSettingsMgrService.setIncubateBoxTemperature(val);
return ApiRet.success();
}
@Operation(summary = "设置板夹仓温度")
@PostMapping("/setPlateBoxTemperature")
public ApiRet<Void> setPlateBoxTemperature(Integer val) {
log.info("setPlateBoxTemperature:{}", val);
appSettingsMgrService.setPlateBoxTemperature(val);
return ApiRet.success();
}
@Operation(summary = "设置DHCP")
@PostMapping("/setDHCCP")
@ -110,7 +116,7 @@ public class DeviceSettingControler {
@Operation(summary = "获取温度范围")
@PostMapping("/getTemperatureAvailableRange")
public ApiRet<List<Integer>> getTemperatureAvailableRange() {
return ApiRet.success(ZList.of(25, 35));
return ApiRet.success(ZList.of(20, 40));
}

13
src/main/java/a8k/app/dao/type/db/DeviceSetting.java

@ -29,12 +29,17 @@ public class DeviceSetting {
@Schema(description = "自动登出")
public Boolean autoLogout = false;
@Schema(description = "孵育盘温度")
@NotNull
@Min(20)
@Max(40)
public Integer incubateBoxTemperature = 25;
@Schema(description = "设备温度")
@Schema(description = "板夹仓温度")
@NotNull
@Min(15)
@Max(35)
public Integer temperature = 25;
@Min(20)
@Max(40)
public Integer plateBoxTemperature = 25;
public Boolean DHCP = true;

11
src/main/java/a8k/app/hardware/driver/TemperatureControlDriver.java

@ -24,17 +24,16 @@ public class TemperatureControlDriver {
TemperatureCtrlParamMgr temperatureCtrlParamMgr;
public void startCtrlTemperature(Double temperature) throws AppException {
public void startCtrlTemperature(Double incubatorTemperature,Double platesBoxTemperature) throws AppException {
incubatorTCMTempOffset = temperatureCtrlParamMgr.getParam(TemperatureCtrlParam.IncubatorTCMTempOffset);
platesBoxTCMTempOffset = temperatureCtrlParamMgr.getParam(TemperatureCtrlParam.PlatesBoxTCMTempOffset);
Integer incubatorTCMSetTemp = (int) ((temperature + incubatorTCMTempOffset) * 10);
Integer platesBoxTCMSetTemp = (int) ((temperature + platesBoxTCMTempOffset) * 10);
Integer incubatorTCMSetTemp = (int) ((incubatorTemperature + incubatorTCMTempOffset) * 10);
Integer platesBoxTCMSetTemp = (int) ((platesBoxTemperature + platesBoxTCMTempOffset) * 10);
log.info("startCtrlTemperature {}", temperature);
log.info(" incubatorTCMSetTemp {}", incubatorTCMSetTemp);
log.info(" platesBoxTCMSetTemp {}", platesBoxTCMSetTemp);
log.info("startCtrlTemperature incubatorTCMSetTemp {}", incubatorTCMSetTemp);
log.info("startCtrlTemperature platesBoxTCMSetTemp {}", platesBoxTCMSetTemp);
canBus.callcmd(TemperatureControlerMid.IncubatorTCM.mid, CmdId.temp_controler_start_hearting, incubatorTCMSetTemp);
canBus.callcmd(TemperatureControlerMid.PlatesBoxTCM.mid, CmdId.temp_controler_start_hearting, platesBoxTCMSetTemp);

64
src/main/java/a8k/app/service/background/TemperatureCtrlService.java

@ -2,13 +2,15 @@ package a8k.app.service.background;
import a8k.OS;
import a8k.app.type.error.AppError;
import a8k.app.type.exception.AppException;
import a8k.app.service.setting.AppSettingsMgrService;
import a8k.app.hardware.driver.TemperatureControlDriver;
import a8k.app.service.setting.AppSettingsMgrService;
import a8k.app.teststate.VirtualDevice;
import a8k.app.type.error.AppError;
import a8k.app.type.exception.AppException;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@ -27,8 +29,14 @@ public class TemperatureCtrlService {
AppEventBusService eventBus;
Integer targetTemperatureSetVal = null;
Integer targetTemperature = 0;
Integer targetIncubatorTemperatureSetVal = null;
Integer targetPlatesBoxTemperatureSetVal = null;
@Getter
@Setter
Integer targetIncubatorTemperature = 0;
@Getter
@Setter
Integer targetPlatesBoxTemperature = 0;
Boolean workingFlag = false;
Thread temperatureCtrlThread = null;
@ -56,9 +64,10 @@ public class TemperatureCtrlService {
try {
Integer targetSetVal = getTargetTemperatureSetVal();
if (isTargetTemperatureChanged(targetSetVal)) {
startCtrlTemperature(targetSetVal);
Integer targetIncubatorSetVal = getTargetIncubatorTemperatureSetVal();
Integer targetPlatesBoxSetVal = getTargetPlatesBoxTemperatureSetVal();
if (isTargetIncubatorTemperatureChanged(targetIncubatorSetVal) || isTargetPlatesBoxTemperatureChanged(targetPlatesBoxSetVal)) {
startCtrlTemperature(targetIncubatorSetVal, targetPlatesBoxSetVal);
}
clearAppError();
} catch (AppException e) {
@ -77,34 +86,39 @@ public class TemperatureCtrlService {
return error;
}
synchronized public void setTargetTemperature(Integer temperature) {
targetTemperatureSetVal = temperature;
}
synchronized public void clearTargetTemperature() {
targetTemperatureSetVal = null;
targetIncubatorTemperatureSetVal = null;
targetPlatesBoxTemperatureSetVal = null;
}
synchronized public Integer getTargetTemperature() {
return targetTemperature;
private Boolean isTargetIncubatorTemperatureChanged(Integer newTemperature) {
return !newTemperature.equals(targetIncubatorTemperature);
}
private Boolean isTargetPlatesBoxTemperatureChanged(Integer newTemperature) {
return !newTemperature.equals(targetPlatesBoxTemperature);
}
private Boolean isTargetTemperatureChanged(Integer newTargetTemperature) {
return !newTargetTemperature.equals(targetTemperature);
public Integer getTargetIncubatorTemperatureSetVal() {
if (targetIncubatorTemperatureSetVal != null) {
return targetIncubatorTemperatureSetVal;
}
return appSettingsMgrService.getDeviceSetting().getIncubateBoxTemperature();
}
private Integer getTargetTemperatureSetVal() {
if (targetTemperatureSetVal != null) {
return targetTemperatureSetVal;
public Integer getTargetPlatesBoxTemperatureSetVal() {
if (targetPlatesBoxTemperatureSetVal != null) {
return targetPlatesBoxTemperatureSetVal;
}
return appSettingsMgrService.getDeviceSetting().getTemperature();
return appSettingsMgrService.getDeviceSetting().getPlateBoxTemperature();
}
private void startCtrlTemperature(Integer temperature) throws AppException {
log.info("start control temperature: {}", temperature);
temperatureControlDriver.startCtrlTemperature(temperature.doubleValue());
targetTemperature = temperature;
private void startCtrlTemperature(Integer incubatorTemperature, Integer platesBoxTemperature) throws AppException {
log.info("start control incubatorTemperature: {},platesBoxTemperature: {}", incubatorTemperature, platesBoxTemperature);
temperatureControlDriver.startCtrlTemperature(incubatorTemperature.doubleValue(), platesBoxTemperature.doubleValue());
targetIncubatorTemperature = incubatorTemperature;
targetPlatesBoxTemperature = platesBoxTemperature;
workingFlag = true;
}

9
src/main/java/a8k/app/service/setting/AppSettingsMgrService.java

@ -123,10 +123,15 @@ public class AppSettingsMgrService {
lisSettingDao.update(setting);
}
public void setIncubateBoxTemperature(Integer val) {
DeviceSetting setting = deviceSettingDao.get();
setting.setIncubateBoxTemperature(val);
deviceSettingDao.update(setting);
}
public void setTemperature(Integer val) {
public void setPlateBoxTemperature(Integer val) {
DeviceSetting setting = deviceSettingDao.get();
setting.setTemperature(val);
setting.setPlateBoxTemperature(val);
deviceSettingDao.update(setting);
}

14
src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java

@ -1,12 +1,13 @@
package a8k.extui.page.debug;
import a8k.app.type.exception.AppException;
import a8k.app.type.a8k.state.DeviceWorkState;
import a8k.app.service.background.SensorDataUpdateService;
import a8k.app.service.background.TemperatureCtrlService;
import a8k.app.service.lowerctrl.DeviceMoveToZeroCtrlService;
import a8k.app.service.statemgr.*;
import a8k.app.service.mainctrl.AppDeviceCtrlService;
import a8k.app.service.statemgr.DeviceWorkStateMgrService;
import a8k.app.service.statemgr.GStateMgrService;
import a8k.app.type.a8k.state.DeviceWorkState;
import a8k.app.type.exception.AppException;
import a8k.extui.factory.CurveBuilder;
import a8k.extui.mgr.ExtApiPageMgr;
import a8k.extui.type.ExtApiStatu;
@ -51,7 +52,8 @@ public class P00MainflowCtrlServiceDebugPage {
@ExtApiStatu(name = "", group = "其他状态", order = 4)
public Map<String, Object> getBackgroudProcessState() {
return Map.of(
"目标温度", temperatureCtrlService.getTargetTemperature(),
"孵育盘目标温度", temperatureCtrlService.getTargetIncubatorTemperatureSetVal(),
"板夹仓目标温度", temperatureCtrlService.getTargetPlatesBoxTemperatureSetVal(),
"孵育盘实时温度", gStateMgrService.getSensorState().getIncubateBoxTemperature(),
"板夹仓实时温度", gStateMgrService.getSensorState().getPboxTemperature(),
"废量仓光栅状态", gStateMgrService.getSensorState().getWasteBinFullFlag()
@ -78,7 +80,7 @@ public class P00MainflowCtrlServiceDebugPage {
public ExtApiCurve getIncubateBoxTemperatureCurve() {
var datas = sensorDataUpdateService.getIncubateBoxTemperatureCurve();
Integer targetTemp = temperatureCtrlService.getTargetTemperature();
Integer targetTemp = temperatureCtrlService.getTargetIncubatorTemperature();
List<Object[]> points = new ArrayList<>();
for (var data : datas) {
points.add(new Object[]{data.tp, data.val});
@ -88,7 +90,7 @@ public class P00MainflowCtrlServiceDebugPage {
public ExtApiCurve getPlateBoxTemperatureCurve() {
var datas = sensorDataUpdateService.getPlateBoxTemperatureCurve();
Integer targetTemp = temperatureCtrlService.getTargetTemperature();
Integer targetTemp = temperatureCtrlService.getTargetPlatesBoxTemperature();
List<Object[]> points = new ArrayList<>();
for (var data : datas) {
points.add(new Object[]{data.tp, data.val});

11
src/main/java/a8k/extui/page/debug/P20AppSettingDebugPage.java

@ -67,8 +67,12 @@ public class P20AppSettingDebugPage {
appSettingsMgrService.setLISNetPort(val);
}
public void setTemperature(Integer val) {
appSettingsMgrService.setTemperature(val);
public void setIncubateBoxTemperature(Integer val) {
appSettingsMgrService.setIncubateBoxTemperature(val);
}
public void setPlateBoxTemperature(Integer val) {
appSettingsMgrService.setPlateBoxTemperature(val);
}
public void setDHCP(Boolean val) {
@ -95,7 +99,8 @@ public class P20AppSettingDebugPage {
page.addFunction("设置LIS串口波特率", this::setLISSerialBaudrate);
page.addFunction("设置LIS网络IP", this::setLISNetIp);
page.addFunction("设置LIS网络端口", this::setLISNetPort);
page.addFunction("设置温度", this::setTemperature);
page.addFunction("设置孵育盘温度", this::setIncubateBoxTemperature);
page.addFunction("设置板夹仓温度", this::setPlateBoxTemperature);
page.addFunction("设置DHCP", this::setDHCP);
page.addFunction("设置本地IP", this::setLocalIp);
extApiPageMgr.addPage(page);

39
src/main/java/a8k/extui/page/extapp/P02A8kTemperaturaVerfication.java

@ -1,16 +1,16 @@
package a8k.extui.page.extapp;
import a8k.app.type.param.TemperatureCtrlParam;
import a8k.app.service.param.pos.TemperatureCtrlParamMgr;
import a8k.extui.type.ret.ExtApiCurve;
import a8k.extui.factory.CurveBuilder;
import a8k.extui.type.ExtApiStatu;
import a8k.app.service.background.TemperatureCtrlService;
import a8k.app.hardware.driver.TemperatureControlDriver;
import a8k.app.service.background.TemperatureCtrlService;
import a8k.app.service.param.pos.TemperatureCtrlParamMgr;
import a8k.app.type.exception.AppException;
import a8k.app.type.param.TemperatureCtrlParam;
import a8k.extui.factory.CurveBuilder;
import a8k.extui.mgr.ExtApiPageMgr;
import jakarta.annotation.Resource;
import a8k.extui.type.ExtApiStatu;
import a8k.extui.type.ret.ExtApiCurve;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@ -20,7 +20,6 @@ import java.util.List;
/**
*
*
*/
@Component
@Slf4j
@ -44,7 +43,8 @@ public class P02A8kTemperaturaVerfication {
Double incubateBoxTemperatureCache = 0.0;
Double plateBoxTemperatureCache = 0.0;
Integer hasStartedTimeMS = 0;
Double targetTemp;
Double targetIncubateBoxTemp;
Double targetPlateBoxTemp;
Boolean workingFlag = false;
@ -86,7 +86,7 @@ public class P02A8kTemperaturaVerfication {
public void setIncubatorBoxTemperatureOff(Double offset) throws AppException, InterruptedException {
temperatureCtrlParamMgr.setParam(TemperatureCtrlParam.IncubatorTCMTempOffset, offset);
if (workingFlag) {
startCtrl(targetTemp.intValue());
startCtrl(targetIncubateBoxTemp.intValue(), null);
}
}
@ -94,20 +94,25 @@ public class P02A8kTemperaturaVerfication {
public void setPlatesBoxTCMTempOffset(Double offset) throws AppException, InterruptedException {
temperatureCtrlParamMgr.setParam(TemperatureCtrlParam.PlatesBoxTCMTempOffset, offset);
if (workingFlag) {
startCtrl(targetTemp.intValue());
startCtrl(null, targetPlateBoxTemp.intValue());
}
}
synchronized public void startCtrl(Integer targetTemperature) throws AppException, InterruptedException {
temperatureCtrlService.setTargetTemperature(targetTemperature);
synchronized public void startCtrl(Integer targetIncubatorBoxTemperature, Integer targetPlatesBoxTemperature) throws AppException, InterruptedException {
if (targetIncubatorBoxTemperature != null) {
temperatureCtrlService.setTargetIncubatorTemperature(targetIncubatorBoxTemperature);
targetIncubateBoxTemp = targetIncubatorBoxTemperature.doubleValue();
}
if (targetPlatesBoxTemperature != null) {
temperatureCtrlService.setTargetPlatesBoxTemperature(targetPlatesBoxTemperature);
targetPlateBoxTemp = targetPlatesBoxTemperature.doubleValue();
}
if (tempSampleThread != null) {
tempSampleThread.interrupt();
tempSampleThread.join();
}
hasStartedTimeMS = 0;
targetTemp = (double) targetTemperature;
tempSampleThread = new Thread(() -> {
while (true) {
try {
@ -141,11 +146,11 @@ public class P02A8kTemperaturaVerfication {
}
public ExtApiCurve showIncubateBoxTemperatureCurve() {
return CurveBuilder.buidCurve("孵育盘温度曲线", "time", "value", targetTemp - 10, targetTemp + 10, incubateBoxTemperatureCurve);
return CurveBuilder.buidCurve("孵育盘温度曲线", "time", "value", targetIncubateBoxTemp - 10, targetIncubateBoxTemp + 10, incubateBoxTemperatureCurve);
}
public ExtApiCurve showPlateBoxTemperatureCurve() {
return CurveBuilder.buidCurve("板夹仓温度曲线", "time", "value", targetTemp - 10, targetTemp + 10, plateBoxTemperatureCurve);
return CurveBuilder.buidCurve("板夹仓温度曲线", "time", "value", targetPlateBoxTemp - 10, targetPlateBoxTemp + 10, plateBoxTemperatureCurve);
}

Loading…
Cancel
Save