19 changed files with 799 additions and 909 deletions
-
2src/main/java/a8k/service/app/appctrl/DeviceInitCtrlService.java
-
7src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ4_PRE_PROCESS.java
-
2src/main/java/a8k/service/app/devicedriver/basectrl/CodeScaner.java
-
208src/main/java/a8k/service/app/devicedriver/basectrl/HbotBaseMoveControlService.java
-
4src/main/java/a8k/service/app/devicedriver/basectrl/HbotModule.java
-
4src/main/java/a8k/service/app/devicedriver/basectrl/PipetteCtrlModule.java
-
2src/main/java/a8k/service/app/devicedriver/basectrl/type/HbotRegIndex.java
-
2src/main/java/a8k/service/app/devicedriver/basectrl/type/PipetteRegIndex.java
-
4src/main/java/a8k/service/app/devicedriver/calibration/Hbot2DCodeScanPosCalibration.java
-
2src/main/java/a8k/service/app/devicedriver/commonctrl/HardwareCommonCtrl.java
-
19src/main/java/a8k/service/app/devicedriver/ctrl/ConsumablesScanCtrl.java
-
314src/main/java/a8k/service/app/devicedriver/ctrl/HbotControlService.java
-
2src/main/java/a8k/service/app/devicedriver/ctrl/PipetteGunCtrlService.java
-
6src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java
@ -1,4 +1,4 @@ |
|||
package a8k.service.app.devicedriver.ctrl; |
|||
package a8k.service.app.devicedriver.basectrl; |
|||
|
|||
import a8k.hardware.A8kCanBusService; |
|||
import a8k.hardware.type.a8kcanprotocol.MId; |
@ -0,0 +1,208 @@ |
|||
package a8k.service.app.devicedriver.basectrl; |
|||
|
|||
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; |
|||
import a8k.extapi_controler.utils.ExtApiTab; |
|||
import a8k.service.app.devicedriver.basectrl.type.PipetteRegIndex; |
|||
import a8k.type.exception.AppException; |
|||
import a8k.type.cfg.*; |
|||
import a8k.hardware.A8kCanBusService; |
|||
import a8k.hardware.type.a8kcanprotocol.A8kEcode; |
|||
import a8k.hardware.type.a8kcanprotocol.IOId; |
|||
import a8k.hardware.type.a8kcanprotocol.MId; |
|||
import a8k.hardware.type.regindex.RegIndex; |
|||
import jakarta.annotation.Resource; |
|||
import org.slf4j.Logger; |
|||
import org.slf4j.LoggerFactory; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
/** |
|||
* Hbot控制服务 |
|||
*/ |
|||
@Component |
|||
@ExtApiTab(cfg = ExtApiTabConfig.HbotControlService) |
|||
public class HbotBaseMoveControlService { |
|||
static Logger logger = LoggerFactory.getLogger(HbotBaseMoveControlService.class); |
|||
|
|||
@Resource |
|||
A8kCanBusService canBus; |
|||
@Resource |
|||
PipetteCtrlModule pipetteCtrlModule; |
|||
@Resource |
|||
HbotModule hbotModule; |
|||
Integer ao = 20000; |
|||
|
|||
public void hbotMoveTo(Pos3d targetPos) throws AppException { |
|||
logger.info("hbotCheckAndMoveTo:{}", targetPos); |
|||
|
|||
// 检查盖板是否关闭 |
|||
if (!canBus.getIOState(IOId.PlateBoxCoverClosurePPS)) { |
|||
throw new AppException(A8kEcode.APPE_PLATE_BOX_NOT_COVER); |
|||
} |
|||
|
|||
boolean zEnable = true; |
|||
boolean hbotEnable = canBus.moduleGetReg(MId.HbotM, RegIndex.kreg_xyrobot_is_enable) == 1; |
|||
|
|||
//检查Z轴是否使能,如果没有使能,使能并移动到零点 |
|||
if (pipetteCtrlModule.getReg(PipetteRegIndex.kreg_pipette_zm_is_enable) == 0) { |
|||
pipetteCtrlModule.zMotorEnable(1); |
|||
pipetteCtrlModule.zMotorMoveZeroBlock(); |
|||
zEnable = false; |
|||
} |
|||
|
|||
//检查Z轴是否在零点 |
|||
if (!pipetteCtrlModule.zAixsZeroPointIsTrigger()) { |
|||
pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock(); |
|||
} |
|||
if (!pipetteCtrlModule.zAixsZeroPointIsTrigger()) { |
|||
throw new AppException(A8kEcode.CODEERROR_ZM_NOT_AT_ZERO_POS_WHEN_HBOT_TRY_MOVE); |
|||
} |
|||
|
|||
// HBot移动 |
|||
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); |
|||
|
|||
// Z轴移动 |
|||
if (targetPos.z != 0) { |
|||
pipetteCtrlModule.zMotorEnable(1); |
|||
pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock(); |
|||
pipetteCtrlModule.zMotorMoveToBlock(targetPos.z); |
|||
} |
|||
pipetteCtrlModule.zMotorEnable(zEnable ? 1 : 0); |
|||
hbotModule.enable(hbotEnable ? 1 : 0); |
|||
} |
|||
|
|||
public void hbotMoveTo(Pos2d tpos) throws AppException { |
|||
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 { |
|||
// hbotCheckAndMoveTo(new Pos2d(0, 0)); |
|||
// } |
|||
|
|||
|
|||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
// 单步测试 |
|||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
|
|||
// @ExtApiFn(name = "丢Tip", group = "单步测试") |
|||
// public void dropTip() throws AppException { |
|||
// Pos3d pos = pp.getTipDropPos(); |
|||
// hbotMoveTo(pos.x, pos.y); |
|||
// zMoveTo(pos.z); |
|||
// pipetteCtrlModule.putTipBlock(); |
|||
// zMoveTo(0); |
|||
// } |
|||
// |
|||
// @ExtApiFn(name = "取Tip", group = "单步测试") |
|||
// public Boolean takeTip(TipGroup tipGroup, Integer index) throws AppException { |
|||
// logger.info("takeTip groupId:{} index:{}", tipGroup.ordinal(), index); |
|||
// |
|||
// if (index > TipPickUpPosInfo.cgetTipNum() || index < 0) { |
|||
// throw new AppException(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE); |
|||
// } |
|||
// |
|||
// TipPickUpPosInfo tipPos = pp.getTipPickUpPosInfo(); |
|||
// Pos2d pos = tipPos.getTipPos(tipGroup.ordinal(), index); |
|||
// hbotMoveTo(pos.x, pos.y); |
|||
// |
|||
// //TODO: 补偿,group大于1时,z轴需要补偿0.2mm |
|||
// Integer zCompensate = 0; |
|||
// if (tipGroup.ordinal() > 1) { |
|||
// zCompensate = 2; |
|||
// } |
|||
// |
|||
// pipetteCtrlModule.zMotorMoveToBlock(tipPos.getPickUpZPos(tipGroup.ordinal()) + zCompensate); |
|||
// pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock(); |
|||
// |
|||
// Boolean isGetTip = canBus.moduleGetReg(MId.PipetteMod, RegIndex.kreg_pipette_tip_state) == 1; |
|||
// if (!isGetTip) { |
|||
// logger.error("takeTip fail"); |
|||
// } |
|||
// return isGetTip; |
|||
// } |
|||
|
|||
// @ExtApiFn(name = "HBot移动到", group = "单步测试") |
|||
// public void hbotMoveTo(Integer x, Integer y) throws AppException { |
|||
// hbotCheckAndMoveTo(new Pos2d(x, y)); |
|||
// } |
|||
|
|||
// @ExtApiFn(name = "HBot移动到小瓶缓冲液X孔", group = "单步测试") |
|||
// public void hbotMoveToSmallBottleGroup(ConsumableGroup group, Integer Xhole) |
|||
// throws AppException { |
|||
// BottleGroupsPosInfo posInfo = pp.getBottleBufferPosInfo(); |
|||
// if (Xhole < 0 || Xhole > BottlesPosInfo.cgetMAX()) { |
|||
// throw new AppException(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE); |
|||
// } |
|||
// Pos2d pos = posInfo.cgetSmallBottleBufferPos(group.off, Xhole); |
|||
// hbotCheckAndMoveTo(pos); |
|||
// } |
|||
// |
|||
// @ExtApiFn(name = "HBot移动到探测物质X孔", group = "单步测试") |
|||
// public void hbotMoveToDetectMaterialPos(ConsumableGroup group, Integer Xhole) |
|||
// throws AppException { |
|||
// BottleGroupsPosInfo posInfo = pp.getBottleBufferPosInfo(); |
|||
// if (Xhole < 0 || Xhole > BottlesPosInfo.cgetMAX()) { |
|||
// throw new AppException(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE); |
|||
// } |
|||
// Pos2d pos = posInfo.cgetDetectMaterialPos(group.off, Xhole); |
|||
// hbotCheckAndMoveTo(pos); |
|||
// } |
|||
// |
|||
// @ExtApiFn(name = "HBot移动到大瓶缓冲液X孔", group = "单步测试") |
|||
// public void hbotMoveToLargeBottleGroup(ConsumableGroup ch) throws AppException { |
|||
// LargeBottleBufferPos posInfo = pp.getLargeBottleBufferPosInfo(); |
|||
// Pos2d pos = posInfo.cgetBottlePos(ch.off); |
|||
// hbotCheckAndMoveTo(pos); |
|||
// } |
|||
// |
|||
// @ExtApiFn(name = "HBot移动到急诊位", group = "单步测试") |
|||
// public void hbotMoveToEmergencyPos() throws AppException { |
|||
// hbotMoveTo(pp.getEmergencyPos()); |
|||
// } |
|||
|
|||
} |
@ -1,9 +1,9 @@ |
|||
package a8k.service.app.devicedriver.ctrl.basic; |
|||
package a8k.service.app.devicedriver.basectrl; |
|||
|
|||
import a8k.hardware.A8kCanBusService; |
|||
import a8k.hardware.type.a8kcanprotocol.CmdId; |
|||
import a8k.hardware.type.a8kcanprotocol.MId; |
|||
import a8k.service.app.devicedriver.ctrl.type.HbotRegIndex; |
|||
import a8k.service.app.devicedriver.basectrl.type.HbotRegIndex; |
|||
import a8k.type.cfg.Pos2d; |
|||
import a8k.type.exception.AppException; |
|||
import jakarta.annotation.Resource; |
@ -1,4 +1,4 @@ |
|||
package a8k.service.app.devicedriver.ctrl.type; |
|||
package a8k.service.app.devicedriver.basectrl.type; |
|||
|
|||
import a8k.hardware.type.regindex.RegIndex; |
|||
|
@ -1,4 +1,4 @@ |
|||
package a8k.service.app.devicedriver.ctrl.type; |
|||
package a8k.service.app.devicedriver.basectrl.type; |
|||
|
|||
public enum PipetteRegIndex { |
|||
kreg_module_version(0), // 模块版本 |
@ -1,314 +0,0 @@ |
|||
package a8k.service.app.devicedriver.ctrl; |
|||
|
|||
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; |
|||
import a8k.extapi_controler.utils.ExtApiFn; |
|||
import a8k.extapi_controler.utils.ExtApiTab; |
|||
import a8k.service.app.devicedriver.ctrl.basic.PipetteCtrlModule; |
|||
import a8k.service.app.devicedriver.ctrl.basic.HbotModule; |
|||
import a8k.service.app.devicedriver.ctrl.type.PipetteRegIndex; |
|||
import a8k.service.app.devicedriver.param.PosParam; |
|||
import a8k.service.app.devicedriver.param.TimeParam; |
|||
import a8k.type.ConsumableGroup; |
|||
import a8k.type.exception.AppException; |
|||
import a8k.type.cfg.*; |
|||
import a8k.hardware.A8kCanBusService; |
|||
import a8k.hardware.type.a8kcanprotocol.A8kEcode; |
|||
import a8k.hardware.type.a8kcanprotocol.IOId; |
|||
import a8k.hardware.type.a8kcanprotocol.MId; |
|||
import a8k.hardware.type.regindex.RegIndex; |
|||
import a8k.type.type.TipGroup; |
|||
import jakarta.annotation.Resource; |
|||
import org.slf4j.Logger; |
|||
import org.slf4j.LoggerFactory; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
/** |
|||
* Hbot控制服务 |
|||
*/ |
|||
@Component |
|||
@ExtApiTab(cfg = ExtApiTabConfig.HbotControlService) |
|||
public class HbotControlService { |
|||
static Logger logger = LoggerFactory.getLogger(HbotControlService.class); |
|||
|
|||
@Resource |
|||
A8kCanBusService canBus; |
|||
|
|||
@Resource |
|||
PipetteCtrlModule pipetteCtrlModule; |
|||
|
|||
@Resource |
|||
HbotModule hbotModule; |
|||
|
|||
@Resource |
|||
PosParam pp; |
|||
|
|||
@Resource |
|||
TimeParam timep; |
|||
|
|||
Integer ao = 20000; |
|||
|
|||
|
|||
public void hbotMoveTo(Pos3d targetPos) throws AppException { |
|||
logger.info("hbotCheckAndMoveTo:{}", targetPos); |
|||
|
|||
// 检查盖板是否关闭 |
|||
if (!canBus.getIOState(IOId.PlateBoxCoverClosurePPS)) { |
|||
throw new AppException(A8kEcode.APPE_PLATE_BOX_NOT_COVER); |
|||
} |
|||
|
|||
boolean zEnable = true; |
|||
boolean hbotEnable = canBus.moduleGetReg(MId.HbotM, RegIndex.kreg_xyrobot_is_enable) == 1; |
|||
|
|||
//检查Z轴是否使能,如果没有使能,使能并移动到零点 |
|||
if (pipetteCtrlModule.getReg(PipetteRegIndex.kreg_pipette_zm_is_enable) == 0) { |
|||
pipetteCtrlModule.zMotorEnable(1); |
|||
pipetteCtrlModule.zMotorMoveZeroBlock(); |
|||
zEnable = false; |
|||
} |
|||
|
|||
//检查Z轴是否在零点 |
|||
if (!pipetteCtrlModule.zAixsZeroPointIsTrigger()) { |
|||
pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock(); |
|||
} |
|||
if (!pipetteCtrlModule.zAixsZeroPointIsTrigger()) { |
|||
throw new AppException(A8kEcode.CODEERROR_ZM_NOT_AT_ZERO_POS_WHEN_HBOT_TRY_MOVE); |
|||
} |
|||
|
|||
// HBot移动 |
|||
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); |
|||
|
|||
// Z轴移动 |
|||
if (targetPos.z != 0) { |
|||
pipetteCtrlModule.zMotorEnable(1); |
|||
pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock(); |
|||
pipetteCtrlModule.zMotorMoveToBlock(targetPos.z); |
|||
} |
|||
pipetteCtrlModule.zMotorEnable(zEnable ? 1 : 0); |
|||
hbotModule.enable( hbotEnable ? 1 : 0); |
|||
} |
|||
|
|||
public void hbotMoveTo(Pos2d tpos) throws AppException { |
|||
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 Integer getGripperZeroYPos() { |
|||
// 之所以这样写,是因为是为了放置两个类之间的循环依赖 |
|||
// assert appCxt != null; |
|||
// TODO |
|||
// return |
|||
// appCxt.getBean(SamplesPreProcessModuleCtrlService.class).getGripperZeroYPos(); |
|||
// return 0; |
|||
// } |
|||
|
|||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
// 基础控制 |
|||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
|
|||
|
|||
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)); |
|||
} |
|||
|
|||
|
|||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
// 单步测试 |
|||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
|
|||
@ExtApiFn(name = "丢Tip", group = "单步测试") |
|||
public void dropTip() throws AppException { |
|||
Pos3d pos = pp.getTipDropPos(); |
|||
hbotMoveTo(pos.x, pos.y); |
|||
zMoveTo(pos.z); |
|||
pipetteCtrlModule.putTipBlock(); |
|||
zMoveTo(0); |
|||
} |
|||
|
|||
@ExtApiFn(name = "取Tip", group = "单步测试") |
|||
public Boolean takeTip(TipGroup tipGroup, Integer index) throws AppException { |
|||
logger.info("takeTip groupId:{} index:{}", tipGroup.ordinal(), index); |
|||
|
|||
if (index > TipPickUpPosInfo.cgetTipNum() || index < 0) { |
|||
throw new AppException(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE); |
|||
} |
|||
|
|||
TipPickUpPosInfo tipPos = pp.getTipPickUpPosInfo(); |
|||
Pos2d pos = tipPos.getTipPos(tipGroup.ordinal(), index); |
|||
hbotMoveTo(pos.x, pos.y); |
|||
|
|||
//TODO: 补偿,group大于1时,z轴需要补偿0.2mm |
|||
Integer zCompensate = 0; |
|||
if (tipGroup.ordinal() > 1) { |
|||
zCompensate = 2; |
|||
} |
|||
|
|||
pipetteCtrlModule.zMotorMoveToBlock(tipPos.getPickUpZPos(tipGroup.ordinal()) + zCompensate); |
|||
pipetteCtrlModule.zMotorMoveToZeroPointQuickBlock(); |
|||
|
|||
Boolean isGetTip = canBus.moduleGetReg(MId.PipetteMod, RegIndex.kreg_pipette_tip_state) == 1; |
|||
if (!isGetTip) { |
|||
logger.error("takeTip fail"); |
|||
} |
|||
return isGetTip; |
|||
} |
|||
|
|||
@ExtApiFn(name = "HBot移动到", group = "单步测试") |
|||
public void hbotMoveTo(Integer x, Integer y) throws AppException { |
|||
hbotCheckAndMoveTo(new Pos2d(x, y)); |
|||
} |
|||
|
|||
@ExtApiFn(name = "HBot移动到小瓶缓冲液X孔", group = "单步测试") |
|||
public void hbotMoveToSmallBottleGroup(ConsumableGroup group, Integer Xhole) |
|||
throws AppException { |
|||
BottleGroupsPosInfo posInfo = pp.getBottleBufferPosInfo(); |
|||
if (Xhole < 0 || Xhole > BottlesPosInfo.cgetMAX()) { |
|||
throw new AppException(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE); |
|||
} |
|||
Pos2d pos = posInfo.cgetSmallBottleBufferPos(group.off, Xhole); |
|||
hbotCheckAndMoveTo(pos); |
|||
} |
|||
|
|||
@ExtApiFn(name = "HBot移动到探测物质X孔", group = "单步测试") |
|||
public void hbotMoveToDetectMaterialPos(ConsumableGroup group, Integer Xhole) |
|||
throws AppException { |
|||
BottleGroupsPosInfo posInfo = pp.getBottleBufferPosInfo(); |
|||
if (Xhole < 0 || Xhole > BottlesPosInfo.cgetMAX()) { |
|||
throw new AppException(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE); |
|||
} |
|||
Pos2d pos = posInfo.cgetDetectMaterialPos(group.off, Xhole); |
|||
hbotCheckAndMoveTo(pos); |
|||
} |
|||
|
|||
@ExtApiFn(name = "HBot移动到大瓶缓冲液X孔", group = "单步测试") |
|||
public void hbotMoveToLargeBottleGroup(ConsumableGroup ch) throws AppException { |
|||
LargeBottleBufferPos posInfo = pp.getLargeBottleBufferPosInfo(); |
|||
Pos2d pos = posInfo.cgetBottlePos(ch.off); |
|||
hbotCheckAndMoveTo(pos); |
|||
} |
|||
|
|||
@ExtApiFn(name = "HBot移动到急诊位", group = "单步测试") |
|||
public void hbotMoveToEmergencyPos() throws AppException { |
|||
hbotMoveTo(pp.getEmergencyPos()); |
|||
} |
|||
|
|||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
// 坐标获取工具 |
|||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
|
|||
@ExtApiFn(name = "Hbot使能", group = "坐标获取工具") |
|||
public void hBotEnable() throws AppException { |
|||
hbotModule.enable( 1); |
|||
} |
|||
|
|||
@ExtApiFn(name = "Hbot失能", group = "坐标获取工具") |
|||
public void hBotDisable() throws AppException { |
|||
hbotModule.enable(0); |
|||
} |
|||
|
|||
@ExtApiFn(name = "Z轴使能", group = "坐标获取工具") |
|||
public void zAxisEnable() throws AppException { |
|||
pipetteCtrlModule.zMotorEnable(1); |
|||
} |
|||
|
|||
@ExtApiFn(name = "Z轴失能", group = "坐标获取工具") |
|||
public void zAxisDisable() throws AppException { |
|||
pipetteCtrlModule.zMotorEnable(0); |
|||
} |
|||
|
|||
@ExtApiFn(name = "归零读取Z轴坐标", group = "坐标获取工具") |
|||
public Integer readZAxisPosByMoveToZero() throws AppException { |
|||
pipetteCtrlModule.zMotorMeasureDistance(); |
|||
return pipetteCtrlModule.zMotorReadMeasureDistanceResult(); |
|||
} |
|||
|
|||
@ExtApiFn(name = "打开扫码器", group = "坐标获取工具") |
|||
public void openCodeScaner(Boolean power) throws AppException { |
|||
if (power) { |
|||
canBus.codeScanerStartScan(MId.PipetteModCodeScanner); |
|||
} else { |
|||
canBus.codeScanerStopScan(MId.PipetteModCodeScanner); |
|||
} |
|||
} |
|||
|
|||
Pos2d hbotRefPos = new Pos2d(0, 0); |
|||
|
|||
@ExtApiFn(name = "设置HBOT参考坐标", group = "坐标获取工具") |
|||
public void setHbotRefPos(Integer x, Integer y) throws AppException { |
|||
hbotRefPos.x = x; |
|||
hbotRefPos.y = y; |
|||
} |
|||
|
|||
|
|||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
// hbot取样品 |
|||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
|
|||
public Boolean getXPPS() throws AppException { |
|||
return hbotModule.readInIO(0); |
|||
} |
|||
|
|||
public Boolean getYPPS() throws AppException { |
|||
return hbotModule.readInIO(1); |
|||
} |
|||
|
|||
public Boolean getTipPPS() throws AppException { |
|||
return canBus.moduleGetReg(MId.PipetteMod, RegIndex.kreg_pipette_tip_state) == 1; |
|||
} |
|||
|
|||
public String getPos() throws AppException { |
|||
Pos2d pos = hbotModule.readPos(); |
|||
return pos.toString(); |
|||
} |
|||
|
|||
// public String getHbotRelaPos() throws AppException { |
|||
// Pos2d pos = hbotModule.hbotReadPos(MId.HbotM); |
|||
// pos.x -= hbotRefPos.x; |
|||
// pos.y -= hbotRefPos.y; |
|||
// return pos.toString(); |
|||
// } |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue