Browse Source

优化光学模组

master
zhaohe 3 months ago
parent
commit
69e93c6ba1
  1. 41
      src/main/java/a8k/app/config/A8kSubModuleInitRegConfig.java
  2. 8
      src/main/java/a8k/app/controler/api/v1/engineer/LiquidAbsorptionAndDistributionTestControler.java
  3. 61
      src/main/java/a8k/app/engineer/service/qatest/LiquidAbsorptionAndDistributionTestService.java
  4. 43
      src/main/java/a8k/app/hardware/type/OptModuleRegIndex.java
  5. 52
      src/main/java/a8k/app/hardware/type/RegIndex.java
  6. 63
      src/main/java/a8k/extui/page/driver/OptScannerCtrlPage.java
  7. 70
      src/main/java/a8k/extui/page/extapp/OptModuleParamCalibration.java

41
src/main/java/a8k/app/config/A8kSubModuleInitRegConfig.java

@ -163,15 +163,38 @@ public class A8kSubModuleInitRegConfig {
// addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_f_reverse_scan_pos_offset);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_scan_step_interval);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_scan_pointnum);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_scan_vdefault);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_scan_vstart);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_scan_a1);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_scan_amax);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_scan_v1);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_scan_dmax);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_scan_d1);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_scan_vstop);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_scan_tzerowait);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_f_scan_vdefault);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_f_scan_vstart);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_f_scan_a1);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_f_scan_amax);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_f_scan_v1);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_f_scan_dmax);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_f_scan_d1);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_f_scan_vstop);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_f_scan_tzerowait);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_f_scan_irun);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_t_scan_vdefault);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_t_scan_vstart);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_t_scan_a1);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_t_scan_amax);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_t_scan_v1);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_t_scan_dmax);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_t_scan_d1);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_t_scan_vstop);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_t_scan_tzerowait);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_t_scan_irun);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_barcode_scan_vdefault);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_barcode_scan_vstart);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_barcode_scan_a1);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_barcode_scan_amax);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_barcode_scan_v1);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_barcode_scan_dmax);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_barcode_scan_d1);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_barcode_scan_vstop);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_barcode_scan_tzerowait);
addRegMarker(ModuleType.A8kOptical, RegIndex.kreg_a8k_opt_barcode_scan_irun);
addRegMarker(ModuleType.MiniServo, RegIndex.kreg_mini_servo_limit_velocity);
addRegMarker(ModuleType.MiniServo, RegIndex.kreg_mini_servo_limit_torque);

8
src/main/java/a8k/app/controler/api/v1/engineer/LiquidAbsorptionAndDistributionTestControler.java

@ -2,6 +2,7 @@ package a8k.app.controler.api.v1.engineer;
import a8k.app.engineer.service.qatest.LiquidAbsorptionAndDistributionTestService;
import a8k.app.hardware.type.A8kEcode;
import a8k.app.type.exception.AppException;
import a8k.app.type.ui.ApiRet;
import io.swagger.v3.oas.annotations.Operation;
@ -30,9 +31,16 @@ public class LiquidAbsorptionAndDistributionTestControler {
return ApiRet.success();
}
// static public class TestOnceRequestParam {
// public Integer ul;
// }
@Operation(summary = "进行一次移液操作")
@PostMapping("/testOnce")
public ApiRet<Void> testOnce(Integer ul) throws AppException {
if (ul == null)
throw AppException.of(A8kEcode.CODEERROR, "ul不能为null");
liquidAbsorptionAndDistributionTestService.absorbAndDistribute(ul);
return ApiRet.success();
}

61
src/main/java/a8k/app/engineer/service/qatest/LiquidAbsorptionAndDistributionTestService.java

@ -28,7 +28,7 @@ import org.springframework.stereotype.Component;
@RequiredArgsConstructor
public class LiquidAbsorptionAndDistributionTestService {
public static class Config {
public Boolean takeTipEachTime;
public Boolean takeTipEachTime = false;
}
final private EngineerModeActionExecutor actionExecutor;
@ -57,9 +57,16 @@ public class LiquidAbsorptionAndDistributionTestService {
* @param config 配置
*/
synchronized public void submitConfig(Config config) {
if (config == null) {
log.error("配置错误");
return;
}
this.config = config;
log.info("更新配置 ");
log.info(" takeTipEachTime: {}", config.takeTipEachTime);
if (config.takeTipEachTime == null) {
config.takeTipEachTime = false;
}
}
/**
@ -68,31 +75,33 @@ public class LiquidAbsorptionAndDistributionTestService {
* @throws AppException appE
*/
public void absorbAndDistribute(Integer ul) throws AppException {
/*
* 检查当前是否有其他项目正在进行测试
*/
BeforeDoEngineerActionChecker.check();
actionExecutor.start(() -> {
try {
actionExecutor.docmd("移液", () -> {
if (config.takeTipEachTime)
hbotMoveExCtrlService.dropTip();
takeTip();
lld();
if (liquidPos == 0)
throw AppException.ofAECodeError("未检测到液体");
takeLiquid(ul * 1.0);
distributeLiquid();
resetPos();
});
} catch (AppException e) {
UISender.txErrorMsg(log, e, "吸取分配液体失败");
}
});
log.info("吸取并分配液体 {}", ul);
return;
// /*
// * 检查当前是否有其他项目正在进行测试
// */
// BeforeDoEngineerActionChecker.check();
//
// actionExecutor.start(() -> {
//
//
// try {
// actionExecutor.docmd("移液", () -> {
// if (config.takeTipEachTime)
// hbotMoveExCtrlService.dropTip();
// takeTip();
// lld();
// if (liquidPos == 0)
// throw AppException.ofAECodeError("未检测到液体");
// takeLiquid(ul * 1.0);
// distributeLiquid();
// resetPos();
// });
//
// } catch (AppException e) {
// UISender.txErrorPrompt(e);
// }
// });
}
/**

43
src/main/java/a8k/app/hardware/type/OptModuleRegIndex.java

@ -8,15 +8,40 @@ public enum OptModuleRegIndex {
kreg_a8k_opt_scan_step_interval(RegIndex.kreg_a8k_opt_scan_step_interval),
kreg_a8k_opt_scan_pointnum(RegIndex.kreg_a8k_opt_scan_pointnum),
kreg_a8k_opt_scan_vdefault(RegIndex.kreg_a8k_opt_scan_vdefault),
kreg_a8k_opt_scan_vstart(RegIndex.kreg_a8k_opt_scan_vstart),
kreg_a8k_opt_scan_a1(RegIndex.kreg_a8k_opt_scan_a1),
kreg_a8k_opt_scan_amax(RegIndex.kreg_a8k_opt_scan_amax),
kreg_a8k_opt_scan_v1(RegIndex.kreg_a8k_opt_scan_v1),
kreg_a8k_opt_scan_dmax(RegIndex.kreg_a8k_opt_scan_dmax),
kreg_a8k_opt_scan_d1(RegIndex.kreg_a8k_opt_scan_d1),
kreg_a8k_opt_scan_vstop(RegIndex.kreg_a8k_opt_scan_vstop),
kreg_a8k_opt_scan_tzerowait(RegIndex.kreg_a8k_opt_scan_tzerowait),
kreg_a8k_opt_f_scan_vdefault(RegIndex.kreg_a8k_opt_f_scan_vdefault), //
kreg_a8k_opt_f_scan_vstart(RegIndex.kreg_a8k_opt_f_scan_vstart), //
kreg_a8k_opt_f_scan_a1(RegIndex.kreg_a8k_opt_f_scan_a1), //
kreg_a8k_opt_f_scan_amax(RegIndex.kreg_a8k_opt_f_scan_amax), //
kreg_a8k_opt_f_scan_v1(RegIndex.kreg_a8k_opt_f_scan_v1), //
kreg_a8k_opt_f_scan_dmax(RegIndex.kreg_a8k_opt_f_scan_dmax), //
kreg_a8k_opt_f_scan_d1(RegIndex.kreg_a8k_opt_f_scan_d1), //
kreg_a8k_opt_f_scan_vstop(RegIndex.kreg_a8k_opt_f_scan_vstop), //
kreg_a8k_opt_f_scan_tzerowait(RegIndex.kreg_a8k_opt_f_scan_tzerowait), //
kreg_a8k_opt_f_scan_irun(RegIndex.kreg_a8k_opt_f_scan_irun), //
kreg_a8k_opt_t_scan_vdefault(RegIndex.kreg_a8k_opt_t_scan_vdefault), //
kreg_a8k_opt_t_scan_vstart(RegIndex.kreg_a8k_opt_t_scan_vstart), //
kreg_a8k_opt_t_scan_a1(RegIndex.kreg_a8k_opt_t_scan_a1), //
kreg_a8k_opt_t_scan_amax(RegIndex.kreg_a8k_opt_t_scan_amax), //
kreg_a8k_opt_t_scan_v1(RegIndex.kreg_a8k_opt_t_scan_v1), //
kreg_a8k_opt_t_scan_dmax(RegIndex.kreg_a8k_opt_t_scan_dmax), //
kreg_a8k_opt_t_scan_d1(RegIndex.kreg_a8k_opt_t_scan_d1), //
kreg_a8k_opt_t_scan_vstop(RegIndex.kreg_a8k_opt_t_scan_vstop), //
kreg_a8k_opt_t_scan_tzerowait(RegIndex.kreg_a8k_opt_t_scan_tzerowait), //
kreg_a8k_opt_t_scan_irun(RegIndex.kreg_a8k_opt_t_scan_irun), //
kreg_a8k_opt_barcode_scan_vdefault(RegIndex.kreg_a8k_opt_barcode_scan_vdefault), //
kreg_a8k_opt_barcode_scan_vstart(RegIndex.kreg_a8k_opt_barcode_scan_vstart), //
kreg_a8k_opt_barcode_scan_a1(RegIndex.kreg_a8k_opt_barcode_scan_a1), //
kreg_a8k_opt_barcode_scan_amax(RegIndex.kreg_a8k_opt_barcode_scan_amax), //
kreg_a8k_opt_barcode_scan_v1(RegIndex.kreg_a8k_opt_barcode_scan_v1), //
kreg_a8k_opt_barcode_scan_dmax(RegIndex.kreg_a8k_opt_barcode_scan_dmax), //
kreg_a8k_opt_barcode_scan_d1(RegIndex.kreg_a8k_opt_barcode_scan_d1), //
kreg_a8k_opt_barcode_scan_vstop(RegIndex.kreg_a8k_opt_barcode_scan_vstop), //
kreg_a8k_opt_barcode_scan_tzerowait(RegIndex.kreg_a8k_opt_barcode_scan_tzerowait), //
kreg_a8k_opt_barcode_scan_irun(RegIndex.kreg_a8k_opt_barcode_scan_irun), //
;
public final RegIndex regIndex;

52
src/main/java/a8k/app/hardware/type/RegIndex.java

@ -89,15 +89,49 @@ public enum RegIndex {
kreg_a8k_opt_f_reverse_scan_pos_offset(4504), // F光学逆向扫描扫描起始位距离零点的偏移
kreg_a8k_opt_scan_step_interval(4505), // 参数固定:为1
kreg_a8k_opt_scan_pointnum(4506), // 参数固定:为1200个点
kreg_a8k_opt_scan_vdefault(4520),
kreg_a8k_opt_scan_vstart(4521),
kreg_a8k_opt_scan_a1(4522),
kreg_a8k_opt_scan_amax(4523),
kreg_a8k_opt_scan_v1(4524),
kreg_a8k_opt_scan_dmax(4525),
kreg_a8k_opt_scan_d1(4526),
kreg_a8k_opt_scan_vstop(4527),
kreg_a8k_opt_scan_tzerowait(4528),
// kreg_a8k_opt_scan_vdefault(4520),
// kreg_a8k_opt_scan_vstart(4521),
// kreg_a8k_opt_scan_a1(4522),
// kreg_a8k_opt_scan_amax(4523),
// kreg_a8k_opt_scan_v1(4524),
// kreg_a8k_opt_scan_dmax(4525),
// kreg_a8k_opt_scan_d1(4526),
// kreg_a8k_opt_scan_vstop(4527),
// kreg_a8k_opt_scan_tzerowait(4528),
kreg_a8k_opt_f_scan_vdefault(4600), //
kreg_a8k_opt_f_scan_vstart(4601), //
kreg_a8k_opt_f_scan_a1(4602), //
kreg_a8k_opt_f_scan_amax(4603), //
kreg_a8k_opt_f_scan_v1(4604), //
kreg_a8k_opt_f_scan_dmax(4605), //
kreg_a8k_opt_f_scan_d1(4606), //
kreg_a8k_opt_f_scan_vstop(4607), //
kreg_a8k_opt_f_scan_tzerowait(4608), //
kreg_a8k_opt_f_scan_irun(4609), //
kreg_a8k_opt_t_scan_vdefault(4700), //
kreg_a8k_opt_t_scan_vstart(4701), //
kreg_a8k_opt_t_scan_a1(4702), //
kreg_a8k_opt_t_scan_amax(4703), //
kreg_a8k_opt_t_scan_v1(4704), //
kreg_a8k_opt_t_scan_dmax(4705), //
kreg_a8k_opt_t_scan_d1(4706), //
kreg_a8k_opt_t_scan_vstop(4707), //
kreg_a8k_opt_t_scan_tzerowait(4708), //
kreg_a8k_opt_t_scan_irun(4709), //
kreg_a8k_opt_barcode_scan_vdefault(4800), //
kreg_a8k_opt_barcode_scan_vstart(4801), //
kreg_a8k_opt_barcode_scan_a1(4802), //
kreg_a8k_opt_barcode_scan_amax(4803), //
kreg_a8k_opt_barcode_scan_v1(4804), //
kreg_a8k_opt_barcode_scan_dmax(4805), //
kreg_a8k_opt_barcode_scan_d1(4806), //
kreg_a8k_opt_barcode_scan_vstop(4807), //
kreg_a8k_opt_barcode_scan_tzerowait(4808), //
kreg_a8k_opt_barcode_scan_irun(4809), //
/***********************************************************************************************************************
* XYROBOT *

63
src/main/java/a8k/extui/page/driver/OptScannerCtrlPage.java

@ -29,7 +29,6 @@ public class OptScannerCtrlPage {
Integer dpos = 10;
public Object readAllRegs() throws AppException {
ZJsonNode node = new ZJsonNode();
for (OptModuleRegIndex reg : OptModuleRegIndex.values()) {
@ -48,29 +47,37 @@ public class OptScannerCtrlPage {
optModuleDriver.setReg(reg, val);
}
public void setStartAndStopVel(Integer v) throws AppException {
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_scan_vstart, v);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_scan_vstop, v);
}
public void setV1(Integer v) throws AppException {
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_scan_v1, v);
public void setFoptIRun(Integer irun) throws AppException {
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_irun, irun);
}
public void setA1AndD1(Integer acc) throws AppException {
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_scan_a1, acc);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_scan_d1, acc);
public void setFOptVCfg(Integer vStart, Integer vStop, Integer a1, Integer v1, Integer amax, Integer defaultV) throws AppException {
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_v1, v1);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_a1, a1);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_d1, a1);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_amax, amax);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_dmax, amax);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_vdefault, defaultV);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_vstart, vStart);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_vstop, vStop);
}
public void setAmaxAndDmax(Integer acc) throws AppException {
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_scan_amax, acc);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_scan_dmax, acc);
}
public void setDefaultVel(Integer v) throws AppException {
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_scan_vdefault, v);
public void setTOptIRun(Integer irun) throws AppException {
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_irun, irun);
}
public void setTOptVCfg(Integer vStart, Integer vStop, Integer a1, Integer v1, Integer amax, Integer defaultV) throws AppException {
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_v1, v1);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_a1, a1);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_d1, a1);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_amax, amax);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_dmax, amax);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_vdefault, defaultV);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_vstart, vStart);
optModuleDriver.setReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_vstop, vStop);
}
public Integer readReg(OptModuleRegIndex reg) {
@ -86,17 +93,29 @@ public class OptScannerCtrlPage {
void init() {
var page = extApiPageMgr.newPage(this);
page.newGroup("寄存器配置");
page.addFunction("设置起停速度", this::setStartAndStopVel).setParamVal("v", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_scan_vstart));
page.addFunction("设置V1", this::setV1).setParamVal("v", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_scan_v1));
page.addFunction("设置加速度", this::setA1AndD1).setParamVal("acc", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_scan_a1));
page.addFunction("设置最大加速度", this::setAmaxAndDmax).setParamVal("acc", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_scan_amax));
page.addFunction("设置默认速度", this::setDefaultVel).setParamVal("v", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_scan_vdefault));
page.addFunction("设置F光学电机IRUN", this::setFoptIRun).setParamVal("irun", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_irun));
page.addFunction("设置F光学电机运行参数", this::setFOptVCfg)
.setParamVal("vStart", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_vstart))
.setParamVal("vStop", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_vstop))
.setParamVal("a1", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_a1))
.setParamVal("v1", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_v1))
.setParamVal("amax", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_amax))
.setParamVal("defaultV", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_f_scan_vdefault));
page.addFunction("设置T光学电机IRUN", this::setTOptIRun).setParamVal("irun", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_irun));
page.addFunction("设置T光学电机运行参数", this::setTOptVCfg)
.setParamVal("vStart", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_vstart))
.setParamVal("vStop", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_vstop))
.setParamVal("a1", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_a1))
.setParamVal("v1", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_v1))
.setParamVal("amax", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_amax))
.setParamVal("defaultV", () -> readReg(OptModuleRegIndex.kreg_a8k_opt_t_scan_vdefault));
page.addFunction("设置寄存器", this::setReg);
page.addFunction("读取所有寄存器", this::readAllRegs);
extApiPageMgr.addPage(page);

70
src/main/java/a8k/extui/page/extapp/OptModuleParamCalibration.java

@ -1,5 +1,8 @@
package a8k.extui.page.extapp;
import a8k.app.dao.type.combination.ProjBuildinInfo;
import a8k.app.optalgo.type.A8kOptPeakInfo;
import a8k.app.service.data.ProjInfoMgrService;
import a8k.app.type.a8k.ConsumableGroup;
import a8k.app.type.a8k.pos.IncubatorPos;
import a8k.app.service.lowerctrl.DeviceMoveToZeroCtrlService;
@ -16,8 +19,8 @@ import a8k.app.type.exception.AppException;
import a8k.app.hardware.utils.OptGainConvert;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@ -36,19 +39,15 @@ import java.util.Map;
* FOptScanStartPos (F光学扫描起始位置)
*/
@Component
@Slf4j
@RequiredArgsConstructor
public class OptModuleParamCalibration {
private static final Logger log = LoggerFactory.getLogger(OptModuleParamCalibration.class);
@Resource
OptModuleExtParamsMgr optModuleExtParamsMgr;
@Resource
PlateBoxCtrlService plateBoxCtrlService;
@Resource
OptScanModuleCtrlService optScanModuleCtrlService;
@Resource
DeviceMoveToZeroCtrlService deviceMoveToZeroCtrlService;
private final OptModuleExtParamsMgr optModuleExtParamsMgr;
private final PlateBoxCtrlService plateBoxCtrlService;
private final OptScanModuleCtrlService optScanModuleCtrlService;
private final DeviceMoveToZeroCtrlService deviceMoveToZeroCtrlService;
private final ProjInfoMgrService projInfoMgrService;
@ExtApiStatu(name = "", group = "F光学参数", order = 1)
@ -99,7 +98,8 @@ public class OptModuleParamCalibration {
optScanModuleCtrlService.dropPlate();
}
A8kScanCurve fcurveCache = null;
A8kScanCurve FCurveCache = null;
public void setFOptScanShift(Integer shift) throws AppException {
if (shift < 0) {
throw AppException.ofAECodeError("扫描偏移量必须大于0");
@ -108,11 +108,11 @@ public class OptModuleParamCalibration {
Integer oldShift = optModuleExtParamsMgr.getParam(OptModuleExtParam.FOptScanShift, Integer.class);
Integer diffShift = shift - oldShift;
if (fcurveCache != null) {
for (int i = 0; i < fcurveCache.refCurve.size(); i++) {
if (FCurveCache != null) {
for (int i = 0; i < FCurveCache.refCurve.size(); i++) {
// log.info("i={}, fcurveCache.refCurve.get(i)={}, diffShift={}", i, fcurveCache.refCurve.get(i), diffShift);
// log.info("new value={}", fcurveCache.refCurve.get(i) - diffShift);
fcurveCache.refCurve.set(i, fcurveCache.refCurve.get(i) + diffShift);
FCurveCache.refCurve.set(i, FCurveCache.refCurve.get(i) + diffShift);
}
}
@ -136,19 +136,19 @@ public class OptModuleParamCalibration {
Integer rawScanGain = OptGainConvert.scanerToRawGain(A8kOptType.FOPT, scanGain);
Integer rawLasterGain = optModuleExtParamsMgr.getOptLasterRawGain(A8kOptType.FOPT);
var result = optScanModuleCtrlService.startOptScan(A8kOptType.FOPT, rawLasterGain, rawScanGain);
fcurveCache = A8kScanCurveFactory.createScanCurve1200Point(result);
return fcurveCache;
FCurveCache = A8kScanCurveFactory.createScanCurve1200Point(result);
return FCurveCache;
}
public A8kScanCurve getFCurveCache() {
return fcurveCache;
synchronized public A8kScanCurve getFCurveCache() {
return FCurveCache;
}
//
//T光学
//
A8kScanCurve TCurveCache = null;
public void setTOptScanShift(Integer shift) throws AppException {
if (shift < 0) {
@ -174,7 +174,26 @@ public class OptModuleParamCalibration {
Integer rawLasterGain = optModuleExtParamsMgr.getOptLasterRawGain(A8kOptType.TOPT);
var result = optScanModuleCtrlService.startOptScan(A8kOptType.TOPT, rawLasterGain, rawScanGain);
return A8kScanCurveFactory.createScanCurve1200Point(result);
TCurveCache = A8kScanCurveFactory.createScanCurve1200Point(result);
return TCurveCache;
}
synchronized public A8kScanCurve getTCurveCache() {
return TCurveCache;
}
A8kScanCurve optScanCurve = null;
public A8kOptPeakInfo doOptScan(Integer projId, Integer subProjIndex) throws AppException {
ProjBuildinInfo projBuildinInfo = projInfoMgrService.getProjBuildInInfo(projId);
var result = optScanModuleCtrlService.optScan(projBuildinInfo, subProjIndex);
optScanCurve = A8kScanCurveFactory.createScanCurve1200Point(result.rawData.rawData);
return result.analysResult;
}
synchronized public A8kScanCurve getOptScanCurve() {
return optScanCurve;
}
@ -208,6 +227,11 @@ public class OptModuleParamCalibration {
page.addFunction("设置接收放大倍数[0.5->21.7]", this::setTOptScanAmplVal)
.setParamVal("val", () -> optModuleExtParamsMgr.getParam(OptModuleExtParam.TOptScanGainVal, Double.class));
page.addFunction("扫描", this::TOptScan);
page.addFunction("查看波形", this::getTCurveCache);
page.newGroup("光学扫描");
page.addFunction("光学扫描", this::doOptScan).setParamVal("projId", () -> 1).setParamVal("subProjIndex", () -> 0);
page.addFunction("查看光学扫描波形", this::getOptScanCurve);
extApiPageMgr.addPage(page);
}

Loading…
Cancel
Save