Browse Source

update

tags/v0
zhaohe 10 months ago
parent
commit
f250e35dea
  1. BIN
      app.db
  2. 4
      src/main/java/a8k/service/app/appctrl/AppConsumablesScanService.java
  3. 20
      src/main/java/a8k/service/app/appctrl/AppDeviceCtrlService.java
  4. 4
      src/main/java/a8k/service/app/appctrl/AppMainFlowCtrlService.java
  5. 4
      src/main/java/a8k/service/app/appctrl/AppTubeSettingMgrService.java
  6. 14
      src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java
  7. 4
      src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java
  8. 102
      src/main/java/a8k/service/app/devicedriver/basectrl/HbotBaseMoveControler.java
  9. 17
      src/main/java/a8k/service/app/devicedriver/basectrl/HbotModule.java
  10. 2
      src/main/java/a8k/service/app/devicedriver/basectrl/PipetteCtrlModule.java
  11. 22
      src/main/java/a8k/service/app/devicedriver/calibration/Hbot2DCodeScanPosCalibration.java
  12. 2
      src/main/java/a8k/service/app/devicedriver/commonctrl/HardwareCommonCtrl.java
  13. 6
      src/main/java/a8k/service/app/devicedriver/ctrl/ConsumablesScanCtrl.java
  14. 68
      src/main/java/a8k/service/app/devicedriver/ctrl/DeviceInitCtrlService.java
  15. 6
      src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java
  16. 44
      src/main/java/a8k/service/debug/AppDebugHelperService.java
  17. 2
      src/main/java/a8k/type/CheckPointType.java

BIN
app.db

4
src/main/java/a8k/service/app/appctrl/ConsumablesScanService.java → src/main/java/a8k/service/app/appctrl/AppConsumablesScanService.java

@ -30,8 +30,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
@Component @Component
public class ConsumablesScanService {
static Logger logger = org.slf4j.LoggerFactory.getLogger(ConsumablesScanService.class);
public class AppConsumablesScanService {
static Logger logger = org.slf4j.LoggerFactory.getLogger(AppConsumablesScanService.class);
@Autowired @Autowired
private AppDebugHelperService appDebugHelperService; private AppDebugHelperService appDebugHelperService;

20
src/main/java/a8k/service/app/appctrl/AppDeviceCtrlService.java

@ -1,22 +1,18 @@
package a8k.service.app.appctrl; package a8k.service.app.appctrl;
import a8k.OS;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn; import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab; import a8k.extapi_controler.utils.ExtApiTab;
import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction;
import a8k.service.app.appstate.ConsumablesMgrService; import a8k.service.app.appstate.ConsumablesMgrService;
import a8k.service.app.appstate.ProjectProcessContextMgrService; import a8k.service.app.appstate.ProjectProcessContextMgrService;
import a8k.service.app.appstate.type.*; import a8k.service.app.appstate.type.*;
import a8k.service.app.appstate.type.state.OptScanModuleState;
import a8k.service.app.devicedriver.ctrl.DeviceInitCtrlService;
import a8k.service.debug.AppDebugHelperService; import a8k.service.debug.AppDebugHelperService;
import a8k.type.Consumable;
import a8k.type.ConsumableGroup; import a8k.type.ConsumableGroup;
import a8k.type.checkpoint.CheckResult; import a8k.type.checkpoint.CheckResult;
import a8k.service.app.appstate.GStateService; import a8k.service.app.appstate.GStateService;
import a8k.type.consumables.ConsumableState; import a8k.type.consumables.ConsumableState;
import a8k.type.exception.AppException; import a8k.type.exception.AppException;
import freemarker.debug.impl.DebuggerService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -28,15 +24,15 @@ import java.util.Map;
public class AppDeviceCtrlService { public class AppDeviceCtrlService {
@Resource @Resource
GStateService gstate;
GStateService gstate;
@Resource @Resource
DeviceInitCtrlService deviceInitializationModule; //设备初始化模块
DeviceInitCtrlService deviceInitializationModule; //设备初始化模块
@Resource @Resource
MainFlowCtrlService mainFlowCtrlSampleScanService; //主流程控制模块
AppMainFlowCtrlService mainFlowCtrlSampleScanService; //主流程控制模块
@Resource @Resource
ConsumablesScanService consumablesScanService; //耗材扫描模块
AppConsumablesScanService appConsumablesScanService; //耗材扫描模块
@Resource @Resource
ConsumablesMgrService consumablesMgrService; //耗材管理模块
ConsumablesMgrService consumablesMgrService; //耗材管理模块
@Resource @Resource
ProjectProcessContextMgrService projectProcessContextMgrService; //项目处理上下文管理模块 ProjectProcessContextMgrService projectProcessContextMgrService; //项目处理上下文管理模块
@ -87,12 +83,12 @@ public class AppDeviceCtrlService {
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
@ExtApiFn(name = "扫描耗材", group = "耗材扫描") @ExtApiFn(name = "扫描耗材", group = "耗材扫描")
public Map<String, Object> scanConsumables() throws AppException { public Map<String, Object> scanConsumables() throws AppException {
return consumablesScanService.scanConsumables();
return appConsumablesScanService.scanConsumables();
} }
@ExtApiFn(name = "扫描某一组耗材", group = "耗材扫描") @ExtApiFn(name = "扫描某一组耗材", group = "耗材扫描")
public Map<String, Object> scanOneGroupConsumables(ConsumableGroup group) throws AppException { public Map<String, Object> scanOneGroupConsumables(ConsumableGroup group) throws AppException {
return consumablesScanService.scanOneGroupConsumables(group);
return appConsumablesScanService.scanOneGroupConsumables(group);
} }

4
src/main/java/a8k/service/app/appctrl/MainFlowCtrlService.java → src/main/java/a8k/service/app/appctrl/AppMainFlowCtrlService.java

@ -19,8 +19,8 @@ import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
@Component @Component
public class MainFlowCtrlService {
static Logger logger = LoggerFactory.getLogger(MainFlowCtrlService.class);
public class AppMainFlowCtrlService {
static Logger logger = LoggerFactory.getLogger(AppMainFlowCtrlService.class);
@Resource @Resource

4
src/main/java/a8k/service/app/appctrl/TubeSettingMgrService.java → src/main/java/a8k/service/app/appctrl/AppTubeSettingMgrService.java

@ -22,8 +22,8 @@ import java.util.List;
@Component @Component
@ExtApiTab(cfg = ExtApiTabConfig.AppTubeSettingMgrService) @ExtApiTab(cfg = ExtApiTabConfig.AppTubeSettingMgrService)
public class TubeSettingMgrService {
static Logger logger = LoggerFactory.getLogger(TubeSettingMgrService.class);
public class AppTubeSettingMgrService {
static Logger logger = LoggerFactory.getLogger(AppTubeSettingMgrService.class);
static class ORDER { static class ORDER {
static final int getA8kDeviceCfg = 1; static final int getA8kDeviceCfg = 1;

14
src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java

@ -7,7 +7,7 @@ import a8k.service.bases.AppEventBusService;
import a8k.service.bases.appevent.AppWarningNotifyEvent; import a8k.service.bases.appevent.AppWarningNotifyEvent;
import a8k.hardware.type.a8kcanprotocol.A8kEcode; import a8k.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService; import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService;
import a8k.service.app.appctrl.TubeSettingMgrService;
import a8k.service.app.appctrl.AppTubeSettingMgrService;
import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType; import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType;
import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction; import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction;
@ -52,11 +52,11 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction {
@Resource @Resource
SampleScanTransportHardwareControler stc; SampleScanTransportHardwareControler stc;
@Resource @Resource
AppEventBusService ebus;
AppEventBusService ebus;
@Resource @Resource
TubeSettingMgrService tubeSettingMgrService;
AppTubeSettingMgrService appTubeSettingMgrService;
@Resource @Resource
AppProjInfoMgrService appProjInfoMgr;
AppProjInfoMgrService appProjInfoMgr;
@Resource @Resource
AppDebugHelperService appDebugHelper; AppDebugHelperService appDebugHelper;
@Resource @Resource
@ -164,7 +164,7 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction {
TubeHolder parseScanResult(TubeHolderScanResult scanResult) throws AppException { TubeHolder parseScanResult(TubeHolderScanResult scanResult) throws AppException {
TubeHolder tubeholder = new TubeHolder(); TubeHolder tubeholder = new TubeHolder();
TubeHolderSetting setting = tubeSettingMgrService.interUseGetThelastActiveTubeHolderSettingAndLock();
TubeHolderSetting setting = appTubeSettingMgrService.interUseGetThelastActiveTubeHolderSettingAndLock();
try { try {
//获取试管架类型 //获取试管架类型
A8kTubeHolderType tubeHolderType = A8kTubeHolderType.of(scanResult.tubeHolderType); A8kTubeHolderType tubeHolderType = A8kTubeHolderType.of(scanResult.tubeHolderType);
@ -188,13 +188,13 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction {
//设置试管架状态 //设置试管架状态
tubeholder.setState(TubeHolderState.PROCESSING); tubeholder.setState(TubeHolderState.PROCESSING);
//删除之前的试管架配置 //删除之前的试管架配置
tubeSettingMgrService.interUseRemoveTubeHolderSetting(setting);
appTubeSettingMgrService.interUseRemoveTubeHolderSetting(setting);
return tubeholder; return tubeholder;
} catch (AppException e) { } catch (AppException e) {
//回滚部分状态 //回滚部分状态
if (setting != null) if (setting != null)
tubeSettingMgrService.interUseUnlockTubeHolderSetting(setting.uuid);
appTubeSettingMgrService.interUseUnlockTubeHolderSetting(setting.uuid);
throw e; throw e;
} }
} }

4
src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java

@ -11,7 +11,7 @@ import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction;
import a8k.service.app.appstate.*; import a8k.service.app.appstate.*;
import a8k.service.app.appstate.resource.A8kPublicResourceType; import a8k.service.app.appstate.resource.A8kPublicResourceType;
import a8k.service.app.appstate.type.Tube; import a8k.service.app.appstate.type.Tube;
import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControlService;
import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControler;
import a8k.service.app.devicedriver.ctrl.ReactionPlatesTransmitCtrl; import a8k.service.app.devicedriver.ctrl.ReactionPlatesTransmitCtrl;
import a8k.service.app.devicedriver.ctrl.SampleScanTransportHardwareControler; import a8k.service.app.devicedriver.ctrl.SampleScanTransportHardwareControler;
import a8k.service.app.devicedriver.ctrl.SamplesPreProcesCtrl; import a8k.service.app.devicedriver.ctrl.SamplesPreProcesCtrl;
@ -60,7 +60,7 @@ public class SEQ4_PRE_PROCESS extends A8kStepAction {
@Resource @Resource
SamplesPreProcesCtrl samplesPreProcesCtrl; SamplesPreProcesCtrl samplesPreProcesCtrl;
@Resource @Resource
HbotBaseMoveControlService hbotBaseMoveControlService;
HbotBaseMoveControler hbotBaseMoveControler;
@Resource @Resource
IncubationPlateStateMgrService incubationPlateStateMgrService; IncubationPlateStateMgrService incubationPlateStateMgrService;
@Resource @Resource

102
src/main/java/a8k/service/app/devicedriver/basectrl/HbotBaseMoveControlService.java → src/main/java/a8k/service/app/devicedriver/basectrl/HbotBaseMoveControler.java

@ -20,15 +20,15 @@ import org.springframework.stereotype.Component;
*/ */
@Component @Component
@ExtApiTab(cfg = ExtApiTabConfig.HbotControlService) @ExtApiTab(cfg = ExtApiTabConfig.HbotControlService)
public class HbotBaseMoveControlService {
static Logger logger = LoggerFactory.getLogger(HbotBaseMoveControlService.class);
public class HbotBaseMoveControler {
static Logger logger = LoggerFactory.getLogger(HbotBaseMoveControler.class);
@Resource @Resource
A8kCanBusService canBus;
A8kCanBusService canBus;
@Resource @Resource
PipetteCtrlModule pipetteCtrlModule; PipetteCtrlModule pipetteCtrlModule;
@Resource @Resource
HbotModule hbotModule;
HbotModule hbotModule;
Integer ao = 20000; Integer ao = 20000;
public void hbotMoveTo(Pos3d targetPos) throws AppException { public void hbotMoveTo(Pos3d targetPos) throws AppException {
@ -59,9 +59,9 @@ public class HbotBaseMoveControlService {
// HBot移动 // HBot移动
hbotModule.enable(1); hbotModule.enable(1);
hbotModule.moveToBlock(targetPos.x - 20, targetPos.y - 20, ao);
hbotModule.moveToBlock(targetPos.x, targetPos.y, ao);
hbotModule.moveToBlock(targetPos.x, targetPos.y, ao);
hbotModule.moveToBlock(targetPos.x - 20, targetPos.y - 20);
hbotModule.moveToBlock(targetPos.x, targetPos.y);
hbotModule.moveToBlock(targetPos.x, targetPos.y);
// Z轴移动 // Z轴移动
if (targetPos.z != 0) { if (targetPos.z != 0) {
@ -77,50 +77,50 @@ public class HbotBaseMoveControlService {
hbotMoveTo(new Pos3d(tpos.x, tpos.y, 0)); hbotMoveTo(new Pos3d(tpos.x, tpos.y, 0));
} }
// public String scan2dCode(Integer waittime) throws AppException {
// try {
// canBus.codeScanerStartScan(MId.PipetteModCodeScanner);
// String result = canBus.codeScanerWaittingForResult(MId.PipetteModCodeScanner, waittime);
// canBus.codeScanerStopScan(MId.PipetteModCodeScanner);
// return result;
// } catch (AppException e) {
// return "";
// }
// }
//
//
// public void zMoveTo(Integer z) throws AppException {
// if (z == 0) {
// pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock();
// } else {
// pipetteCtrlModule.zMotorMoveToBlock(z);
// }
// }
//
// private void hbotCheckAndMoveTo(Pos2d targetPos) throws AppException {
// hbotMoveTo(new Pos3d(targetPos.x, targetPos.y, 0));
// }
// private void modGroupMoveToZero() throws AppException {
// if (!canBus.getIOState(IOId.PlateBoxCoverClosurePPS)) {
// throw new AppException(A8kEcode.APPE_PLATE_BOX_NOT_COVER);
// }
//
// pipetteCtrlModule.zMotorEnable(1);
// hbotModule.enable(1);
//
// hbotModule.moveToZeroBlock(timep.getHbotRuntoZeroActionOvertime());
//
// // 丢弃tip
// Pos3d dropPos = pp.getTipDropPos();
// hbotMoveTo(dropPos);
// // TODO: canBus.pipetteCtrlInitDeviceBlock(MId.PipetteMod, timep.getActionOvertime());
//
// // 快速归零
// modGroupMoveToZeroQuick();
// }
// private void modGroupMoveToZeroQuick() throws AppException {
// public String scan2dCode(Integer waittime) throws AppException {
// try {
// canBus.codeScanerStartScan(MId.PipetteModCodeScanner);
// String result = canBus.codeScanerWaittingForResult(MId.PipetteModCodeScanner, waittime);
// canBus.codeScanerStopScan(MId.PipetteModCodeScanner);
// return result;
// } catch (AppException e) {
// return "";
// }
// }
//
//
// public void zMoveTo(Integer z) throws AppException {
// if (z == 0) {
// pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock();
// } else {
// pipetteCtrlModule.zMotorMoveToBlock(z);
// }
// }
//
// private void hbotCheckAndMoveTo(Pos2d targetPos) throws AppException {
// hbotMoveTo(new Pos3d(targetPos.x, targetPos.y, 0));
// }
// private void modGroupMoveToZero() throws AppException {
// if (!canBus.getIOState(IOId.PlateBoxCoverClosurePPS)) {
// throw new AppException(A8kEcode.APPE_PLATE_BOX_NOT_COVER);
// }
//
// pipetteCtrlModule.zMotorEnable(1);
// hbotModule.enable(1);
//
// hbotModule.moveToZeroBlock(timep.getHbotRuntoZeroActionOvertime());
//
// // 丢弃tip
// Pos3d dropPos = pp.getTipDropPos();
// hbotMoveTo(dropPos);
// // TODO: canBus.pipetteCtrlInitDeviceBlock(MId.PipetteMod, timep.getActionOvertime());
//
// // 快速归零
// modGroupMoveToZeroQuick();
// }
// private void modGroupMoveToZeroQuick() throws AppException {
// hbotCheckAndMoveTo(new Pos2d(0, 0)); // hbotCheckAndMoveTo(new Pos2d(0, 0));
// } // }

17
src/main/java/a8k/service/app/devicedriver/basectrl/HbotModule.java

@ -15,35 +15,38 @@ public class HbotModule {
@Resource @Resource
A8kCanBusService canBus; A8kCanBusService canBus;
Integer actionOvertime = 10000;
Integer moveToZeroActionOvertime = 20000;
public void enable(Integer enable) throws AppException { public void enable(Integer enable) throws AppException {
canBus.callcmd(MId.HbotM.toInt(), CmdId.xymotor_enable.toInt(), enable); canBus.callcmd(MId.HbotM.toInt(), CmdId.xymotor_enable.toInt(), enable);
} }
public void moveBy(Integer x, Integer y) throws AppException {
private void moveBy(Integer x, Integer y) throws AppException {
canBus.callcmd(MId.HbotM.toInt(), CmdId.xymotor_move_by.toInt(), x, y); canBus.callcmd(MId.HbotM.toInt(), CmdId.xymotor_move_by.toInt(), x, y);
} }
public void moveByBlock(Integer x, Integer y, Integer actionOvertime) throws AppException {
public void moveByBlock(Integer x, Integer y) throws AppException {
moveBy(x, y); moveBy(x, y);
canBus.waitForMod(MId.HbotM, actionOvertime); canBus.waitForMod(MId.HbotM, actionOvertime);
} }
public void moveTo(Integer x, Integer y) throws AppException {
private void moveTo(Integer x, Integer y) throws AppException {
canBus.callcmd(MId.HbotM.toInt(), CmdId.xymotor_move_to.toInt(), x, y); canBus.callcmd(MId.HbotM.toInt(), CmdId.xymotor_move_to.toInt(), x, y);
} }
public void moveToBlock(Integer x, Integer y, Integer actionOvertime) throws AppException {
public void moveToBlock(Integer x, Integer y) throws AppException {
moveTo(x, y); moveTo(x, y);
canBus.waitForMod(MId.HbotM, actionOvertime); canBus.waitForMod(MId.HbotM, actionOvertime);
} }
public void moveToZero() throws AppException {
private void moveToZero() throws AppException {
canBus.callcmd(MId.HbotM.toInt(), CmdId.xymotor_move_to_zero.toInt()); canBus.callcmd(MId.HbotM.toInt(), CmdId.xymotor_move_to_zero.toInt());
} }
public void moveToZeroBlock(Integer actionOvertime) throws AppException {
public void moveToZeroBlock() throws AppException {
moveToZero(); moveToZero();
canBus.waitForMod(MId.HbotM, actionOvertime);
canBus.waitForMod(MId.HbotM, moveToZeroActionOvertime);
} }
public Pos2d readPos() throws AppException { public Pos2d readPos() throws AppException {

2
src/main/java/a8k/service/app/devicedriver/basectrl/PipetteCtrlModule.java

@ -130,7 +130,7 @@ public class PipetteCtrlModule {
@ExtApiFn(name = "初始化设备", order = FnOrder.initDeviceBlock) @ExtApiFn(name = "初始化设备", order = FnOrder.initDeviceBlock)
public void initDeviceBlock() throws AppException {
public void pipetteInitDeviceBlock() throws AppException {
canBusService.callcmd(MId.PipetteMod.toInt(), CmdId.pipette_init_device.toInt()); canBusService.callcmd(MId.PipetteMod.toInt(), CmdId.pipette_init_device.toInt());
canBusService.waitForMod(MId.PipetteMod, overtime); canBusService.waitForMod(MId.PipetteMod, overtime);
} }

22
src/main/java/a8k/service/app/devicedriver/calibration/Hbot2DCodeScanPosCalibration.java

@ -5,6 +5,8 @@ import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn; import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab; import a8k.extapi_controler.utils.ExtApiTab;
import a8k.hardware.A8kCanBusService; import a8k.hardware.A8kCanBusService;
import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControler;
import a8k.service.app.devicedriver.basectrl.HbotModule;
import a8k.service.app.devicedriver.basectrl.PipetteCtrlModule; import a8k.service.app.devicedriver.basectrl.PipetteCtrlModule;
import a8k.service.app.devicedriver.basectrl.CodeScaner; import a8k.service.app.devicedriver.basectrl.CodeScaner;
import a8k.service.app.devicedriver.param.Hbot2DCodeScanPos; import a8k.service.app.devicedriver.param.Hbot2DCodeScanPos;
@ -17,20 +19,28 @@ import jakarta.annotation.Resource;
@ExtApiTab(cfg = ExtApiTabConfig.Hbot2DCodeScanPosCalibration) @ExtApiTab(cfg = ExtApiTabConfig.Hbot2DCodeScanPosCalibration)
public class Hbot2DCodeScanPosCalibration { public class Hbot2DCodeScanPosCalibration {
@Resource
Hbot2DCodeScanPos hbot2DCodeScanPos;
@Resource @Resource
A8kCanBusService canBus;
A8kCanBusService canBus;
@Resource
CodeScaner codeScaner;
@Resource
PipetteCtrlModule pipetteCtrlModule;
@Resource @Resource
CodeScaner codeScaner;
HbotModule hbotModule;
@Resource @Resource
PipetteCtrlModule pipetteCtrlModule;
HbotBaseMoveControler hbotBaseMoveControler;
@Resource
Hbot2DCodeScanPos hbot2DCodeScanPos;
@ExtApiFn(name = "扫码测试(全部位置)", group = "测试工具", order = 0)
@ExtApiFn(name = "归零", group = "测试工具", order = 0)
public void deviceReset() throws AppException { public void deviceReset() throws AppException {
pipetteCtrlModule.zMotorEnable(1); pipetteCtrlModule.zMotorEnable(1);
hbotModule.enable(1);
pipetteCtrlModule.zMotorMoveZeroBlock();
hbotModule.moveToZeroBlock();
} }
public void disableMotor() throws AppException { public void disableMotor() throws AppException {

2
src/main/java/a8k/service/app/devicedriver/commonctrl/HardwareCommonCtrl.java

@ -107,7 +107,7 @@ public class HardwareCommonCtrl {
canBus.stepMotorEasyMoveToZeroBlock(MId.OptModPullM, timep.getRuntoZeroActionOvertime()); canBus.stepMotorEasyMoveToZeroBlock(MId.OptModPullM, timep.getRuntoZeroActionOvertime());
canBus.stepMotorEasyMoveToZeroBlock(MId.OptModScannerM, timep.getRuntoZeroActionOvertime()); canBus.stepMotorEasyMoveToZeroBlock(MId.OptModScannerM, timep.getRuntoZeroActionOvertime());
//HBot初始化 //HBot初始化
hbotModule.moveToZero();
hbotModule.moveToZeroBlock();
// TODO canBus.stepMotorEasyMoveToZeroBlock(MId.PipetteModZM, timep.getRuntoZeroActionOvertime()); // TODO canBus.stepMotorEasyMoveToZeroBlock(MId.PipetteModZM, timep.getRuntoZeroActionOvertime());
//转盘归零 //转盘归零

6
src/main/java/a8k/service/app/devicedriver/ctrl/ConsumablesScanCtrl.java

@ -1,7 +1,7 @@
package a8k.service.app.devicedriver.ctrl; package a8k.service.app.devicedriver.ctrl;
import a8k.service.app.devicedriver.basectrl.CodeScaner; import a8k.service.app.devicedriver.basectrl.CodeScaner;
import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControlService;
import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControler;
import a8k.service.bases.ActionReactorService; import a8k.service.bases.ActionReactorService;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn; import a8k.extapi_controler.utils.ExtApiFn;
@ -28,9 +28,9 @@ public class ConsumablesScanCtrl {
@Resource @Resource
Hbot2DCodeScanPos hbotScanPos; Hbot2DCodeScanPos hbotScanPos;
@Resource @Resource
CodeScaner codeScaner;
CodeScaner codeScaner;
@Resource @Resource
HbotBaseMoveControlService hbot;
HbotBaseMoveControler hbot;
private void hbotMoveTo(Pos2d tpos) throws AppException { private void hbotMoveTo(Pos2d tpos) throws AppException {

68
src/main/java/a8k/service/app/appctrl/DeviceInitCtrlService.java → src/main/java/a8k/service/app/devicedriver/ctrl/DeviceInitCtrlService.java

@ -1,4 +1,4 @@
package a8k.service.app.appctrl;
package a8k.service.app.devicedriver.ctrl;
import a8k.hardware.A8kCanBusService; import a8k.hardware.A8kCanBusService;
import a8k.hardware.type.a8kcanprotocol.A8kEcode; import a8k.hardware.type.a8kcanprotocol.A8kEcode;
@ -6,6 +6,7 @@ import a8k.hardware.type.a8kcanprotocol.IOId;
import a8k.hardware.type.a8kcanprotocol.MId; import a8k.hardware.type.a8kcanprotocol.MId;
import a8k.service.bases.ActionReactorService; import a8k.service.bases.ActionReactorService;
import a8k.service.debug.AppDebugHelperService; import a8k.service.debug.AppDebugHelperService;
import a8k.type.CheckPointType;
import a8k.type.checkpoint.CheckResult; import a8k.type.checkpoint.CheckResult;
import a8k.type.checkpoint.Checkpoint; import a8k.type.checkpoint.Checkpoint;
import a8k.service.app.appstate.GStateService; import a8k.service.app.appstate.GStateService;
@ -21,25 +22,19 @@ import java.util.List;
@Component @Component
public class DeviceInitCtrlService { public class DeviceInitCtrlService {
@Resource @Resource
ActionReactorService ar;
List<Checkpoint> checkPoints = new ArrayList<>();
GStateService gstate;
@Resource @Resource
A8kCanBusService canBus;
ActionReactorService actionReactor;
@Resource @Resource
HbotModule hbotModule;
A8kCanBusService canBus;
@Resource @Resource
GStateService gstate;
HbotModule hbotModule;
@Resource @Resource
AppDebugHelperService appDebugHelper; AppDebugHelperService appDebugHelper;
Integer actionOvertime = 10000;
Integer actionOvertime = 10000;
List<Checkpoint> checkPoints = new ArrayList<>();
@PostConstruct @PostConstruct
void init() { void init() {
@ -55,20 +50,20 @@ public class DeviceInitCtrlService {
CheckPointType.CHECK_PUSHERM_IN_IN_ZEROPOS, () -> canBus.getIOState(IOId.PusherMZeroPPS))); CheckPointType.CHECK_PUSHERM_IN_IN_ZEROPOS, () -> canBus.getIOState(IOId.PusherMZeroPPS)));
checkPoints.add(new Checkpoint("检查垃圾箱是否满",// checkPoints.add(new Checkpoint("检查垃圾箱是否满",//
CheckPointType.CHECK_RECYCLE_BIN_IS_OVERFLOW, () -> !canBus.getIOState(IOId.RecycleBinOverflowPPS))); CheckPointType.CHECK_RECYCLE_BIN_IS_OVERFLOW, () -> !canBus.getIOState(IOId.RecycleBinOverflowPPS)));
} }
public List<CheckResult> checkBeforeInitDevice() throws AppException { public List<CheckResult> checkBeforeInitDevice() throws AppException {
if (appDebugHelper.isDebug()) {
return appDebugHelper.checkBeforeInitDevice();
}
List<CheckResult> results = new java.util.ArrayList<>(); List<CheckResult> results = new java.util.ArrayList<>();
for (Checkpoint checkPoint : checkPoints) { for (Checkpoint checkPoint : checkPoints) {
CheckResult result = new CheckResult(); CheckResult result = new CheckResult();
result.type = checkPoint.type; result.type = checkPoint.type;
result.typechinfo = checkPoint.typechinfo; result.typechinfo = checkPoint.typechinfo;
result.pass = checkPoint.checkfn.check();
if (!appDebugHelper.isDebug()) {
result.pass = checkPoint.checkfn.check();
} else {
result.pass = true;
}
results.add(result); results.add(result);
} }
return results; return results;
@ -97,35 +92,26 @@ public class DeviceInitCtrlService {
if (!suc) { if (!suc) {
throw new AppException(A8kEcode.APPE_CHECK_POINT_CHECK_FAIL); throw new AppException(A8kEcode.APPE_CHECK_POINT_CHECK_FAIL);
} }
//进出料初始化 //进出料初始化
ar.dosome("入料平移电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.FeedingModXM, actionOvertime));
ar.dosome("摇匀模组-扫码夹紧舵机回零", () -> canBus.miniServoMoveToBlock(MId.ShakeModTubeScanerClampingSV, 20, actionOvertime));
ar.dosome("摇匀模组-夹爪舵机回零", () -> canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, 300, actionOvertime));
ar.dosome("摇匀模组-夹爪Y轴舵机回零", () -> canBus.miniServoMoveToBlock(MId.ShakeModGripperYSV, 300, actionOvertime));
ar.dosome("摇匀模组-夹紧电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModClampingM, actionOvertime));
ar.dosome("摇匀模组-夹爪Z轴电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModGripperZM, actionOvertime));
ar.dosome("摇匀模组-摇匀电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModShakeM, actionOvertime));
ar.dosome("摇匀模组-摇匀电机摆动90度", () -> canBus.stepMotorEasyMoveTo(MId.ShakeModShakeM, 90));
actionReactor.dosome("入料平移电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.FeedingModXM, actionOvertime));
actionReactor.dosome("摇匀模组-扫码夹紧舵机回零", () -> canBus.miniServoMoveToBlock(MId.ShakeModTubeScanerClampingSV, 20, actionOvertime));
actionReactor.dosome("摇匀模组-夹爪舵机回零", () -> canBus.miniServoMoveToBlock(MId.ShakeModGripperSV, 300, actionOvertime));
actionReactor.dosome("摇匀模组-夹爪Y轴舵机回零", () -> canBus.miniServoMoveToBlock(MId.ShakeModGripperYSV, 300, actionOvertime));
actionReactor.dosome("摇匀模组-夹紧电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModClampingM, actionOvertime));
actionReactor.dosome("摇匀模组-夹爪Z轴电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModGripperZM, actionOvertime));
actionReactor.dosome("摇匀模组-摇匀电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.ShakeModShakeM, actionOvertime));
actionReactor.dosome("摇匀模组-摇匀电机摆动90度", () -> canBus.stepMotorEasyMoveTo(MId.ShakeModShakeM, 90));
//板夹仓初始化 //板夹仓初始化
ar.dosome("板夹仓Y轴电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.PlatesBoxYM, actionOvertime));
ar.dosome("板夹仓推板电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.PlatesBoxPusherM, actionOvertime));
actionReactor.dosome("板夹仓Y轴电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.PlatesBoxYM, actionOvertime));
actionReactor.dosome("板夹仓推板电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.PlatesBoxPusherM, actionOvertime));
//光学模组初始化 //光学模组初始化
ar.dosome("光学模组-拉杆电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.OptModPullM, actionOvertime));
ar.dosome("光学模组-扫码电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.OptModScannerM, actionOvertime));
actionReactor.dosome("光学模组-拉杆电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.OptModPullM, actionOvertime));
actionReactor.dosome("光学模组-扫码电机回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.OptModScannerM, actionOvertime));
//HBot初始化 //HBot初始化
ar.dosome("HBot回零", () -> hbotModule.moveToZero());
actionReactor.dosome("HBot回零", () -> hbotModule.moveToZeroBlock());
//转盘归零 //转盘归零
ar.dosome("转盘回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.IncubatorRotateCtrlM, actionOvertime));
actionReactor.dosome("转盘回零", () -> canBus.stepMotorEasyMoveToZeroBlock(MId.IncubatorRotateCtrlM, actionOvertime));
gstate.setDeviceInited(true); gstate.setDeviceInited(true);
} }
// setDeviceInited
} }

6
src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java

@ -11,7 +11,7 @@ import a8k.service.app.devicedriver.ctrl.SamplesPreProcesCtrl;
import a8k.service.app.devicedriver.ctrl.SampleScanTransportHardwareControler; import a8k.service.app.devicedriver.ctrl.SampleScanTransportHardwareControler;
import a8k.hardware.A8kCanBusService; import a8k.hardware.A8kCanBusService;
import a8k.hardware.type.a8kcanprotocol.A8kEcode; import a8k.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControlService;
import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControler;
import a8k.service.app.devicedriver.ctrl.ReactionPlatesTransmitCtrl; import a8k.service.app.devicedriver.ctrl.ReactionPlatesTransmitCtrl;
import a8k.service.app.devicedriver.param.DebugParam; import a8k.service.app.devicedriver.param.DebugParam;
import a8k.service.app.devicedriver.param.PosParam; import a8k.service.app.devicedriver.param.PosParam;
@ -45,7 +45,7 @@ public class TestScript {
ApplicationContext appCxt; ApplicationContext appCxt;
@Resource @Resource
HbotBaseMoveControlService hbotcs;
HbotBaseMoveControler hbotcs;
@Resource @Resource
TimeParam timep; TimeParam timep;
@ -63,7 +63,7 @@ public class TestScript {
@Resource @Resource
SampleScanTransportHardwareControler sampleScanTransportHardwareControler; SampleScanTransportHardwareControler sampleScanTransportHardwareControler;
EnginnerParamReader settingReader = new EnginnerParamReader(HbotBaseMoveControlService.class);
EnginnerParamReader settingReader = new EnginnerParamReader(HbotBaseMoveControler.class);
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 测试 // 测试

44
src/main/java/a8k/service/debug/AppDebugHelperService.java

@ -9,9 +9,9 @@ import a8k.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.hardware.type.a8kcanprotocol.CmdId; import a8k.hardware.type.a8kcanprotocol.CmdId;
import a8k.hardware.type.a8kcanprotocol.MId; import a8k.hardware.type.a8kcanprotocol.MId;
import a8k.service.app.appctrl.AppDeviceCtrlService; import a8k.service.app.appctrl.AppDeviceCtrlService;
import a8k.service.app.appctrl.CheckPointType;
import a8k.service.app.appctrl.MainFlowCtrlService;
import a8k.service.app.appctrl.TubeSettingMgrService;
import a8k.type.CheckPointType;
import a8k.service.app.appctrl.AppMainFlowCtrlService;
import a8k.service.app.appctrl.AppTubeSettingMgrService;
import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService; import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService;
import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType; import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType;
import a8k.service.app.appctrl.mainflowctrl.base.A8kErrorContext; import a8k.service.app.appctrl.mainflowctrl.base.A8kErrorContext;
@ -259,8 +259,8 @@ public class AppDebugHelperService {
@ExtApiFn(name = "获取运行步骤状态", group = "调试") @ExtApiFn(name = "获取运行步骤状态", group = "调试")
public List<A8kStepAction> getA8kStepActionList() { public List<A8kStepAction> getA8kStepActionList() {
MainFlowCtrlService mainFlowCtrlService = SpringBootBeanUtil.getBean(MainFlowCtrlService.class);
return mainFlowCtrlService.getA8kStepActionList();
AppMainFlowCtrlService appMainFlowCtrlService = SpringBootBeanUtil.getBean(AppMainFlowCtrlService.class);
return appMainFlowCtrlService.getA8kStepActionList();
} }
@ExtApiFn(name = "获取设备状态()", group = "调试") @ExtApiFn(name = "获取设备状态()", group = "调试")
@ -300,15 +300,15 @@ public class AppDebugHelperService {
//添加试管配置 //添加试管配置
logger.info("添加试管配置"); logger.info("添加试管配置");
TubeSettingMgrService tubeSettingMgrService = SpringBootBeanUtil.getBean(TubeSettingMgrService.class);
tubeSettingMgrService.newTubeHolderSetting();
TubeHolderSetting setting = tubeSettingMgrService.newTubeHolderSettingV2();
AppTubeSettingMgrService appTubeSettingMgrService = SpringBootBeanUtil.getBean(AppTubeSettingMgrService.class);
appTubeSettingMgrService.newTubeHolderSetting();
TubeHolderSetting setting = appTubeSettingMgrService.newTubeHolderSettingV2();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
tubeSettingMgrService.setTubeSettingUserIdAndSampleBarcode(setting.uuid, i, String.format("USR%d", i), "");
tubeSettingMgrService.setTubeSetting(setting.uuid, i, BloodType.WHOLE_BLOOD,//
appTubeSettingMgrService.setTubeSettingUserIdAndSampleBarcode(setting.uuid, i, String.format("USR%d", i), "");
appTubeSettingMgrService.setTubeSetting(setting.uuid, i, BloodType.WHOLE_BLOOD,//
String.format("%d,%d,%d,%d,%d,%d", p01_hscrr.projIndex, p02_pct.projIndex, p03_tsh.projIndex, p05_t3.projIndex, p06_t4.projIndex, p22_pctAndHsCRP.projIndex)); String.format("%d,%d,%d,%d,%d,%d", p01_hscrr.projIndex, p02_pct.projIndex, p03_tsh.projIndex, p05_t3.projIndex, p06_t4.projIndex, p22_pctAndHsCRP.projIndex));
} }
tubeSettingMgrService.tubeHodlerSettingSetActiveState(setting.uuid, true);
appTubeSettingMgrService.tubeHodlerSettingSetActiveState(setting.uuid, true);
//初始化设备 //初始化设备
logger.info("初始化设备"); logger.info("初始化设备");
@ -422,28 +422,6 @@ public class AppDebugHelperService {
} }
public List<CheckResult> checkBeforeInitDevice() throws AppException {
List<Checkpoint> checkPoints = new ArrayList<>();
List<CheckResult> resultss = new java.util.ArrayList<>();
checkPoints.add(new Checkpoint("入料通道是否为空", CheckPointType.CHECK_PLATE_BOX_IS_COVER, () -> true));
checkPoints.add(new Checkpoint("板夹仓盖子是否盖着", CheckPointType.CHECK_PLATE_BOX_IS_COVER, () -> true));
checkPoints.add(new Checkpoint("板夹仓卡板检测", CheckPointType.CHECK_PLATE_STUCK_DETECTOR_SENSOR_IS_TRIGGER, () -> true));
checkPoints.add(new Checkpoint("检查拉杆电机是否在零点位置", CheckPointType.CHECK_PULLERM_IS_IN_ZEROPOS, () -> true));
checkPoints.add(new Checkpoint("检查推杆电机是否在零点位置", CheckPointType.CHECK_PUSHERM_IN_IN_ZEROPOS, () -> true));
checkPoints.add(new Checkpoint("检查垃圾箱是否满", CheckPointType.CHECK_RECYCLE_BIN_IS_OVERFLOW, () -> true));
for (Checkpoint checkPoint : checkPoints) {
CheckResult result = new CheckResult();
result.type = checkPoint.type;
result.typechinfo = checkPoint.typechinfo;
result.pass = checkPoint.checkfn.check();
resultss.add(result);
}
return resultss;
}
synchronized public Boolean getTubeholderEnterPosPPS() { synchronized public Boolean getTubeholderEnterPosPPS() {
return tubeHolderScanResult != null; return tubeHolderScanResult != null;
} }

2
src/main/java/a8k/service/app/appctrl/CheckPointType.java → src/main/java/a8k/type/CheckPointType.java

@ -1,4 +1,4 @@
package a8k.service.app.appctrl;
package a8k.type;
public enum CheckPointType { public enum CheckPointType {
CHECK_TUBE_XCHANNEL_IS_EMPTY,//入料通道是否为空 CHECK_TUBE_XCHANNEL_IS_EMPTY,//入料通道是否为空
Loading…
Cancel
Save