|
|
@ -15,8 +15,9 @@ import a8k.service.app.devicectrl.param.param_mgr.TubePreProcesPosParamMgr; |
|
|
|
import a8k.type.TubePreProcessGripperPos; |
|
|
|
import a8k.type.TubePreProcessTubeClamp; |
|
|
|
import a8k.type.TubePreProcessYPos; |
|
|
|
import a8k.type.TubePreProcessZAxisPos; |
|
|
|
import a8k.service.app.devicectrl.param.type.TubePreProcessZAxisPos; |
|
|
|
import a8k.type.exception.AppException; |
|
|
|
import a8k.utils.ZJsonHelper; |
|
|
|
import jakarta.annotation.Resource; |
|
|
|
import org.springframework.stereotype.Component; |
|
|
|
|
|
|
@ -47,6 +48,8 @@ public class TubePreProcesPosCalibration { |
|
|
|
public void deviceReset() throws AppException { |
|
|
|
enableModule(); |
|
|
|
motorMoveZeroExDriver.preProcessModuleMoveToZero(); |
|
|
|
stepMotorCtrlDriver.stepMotorEasyMoveToBlock(StepMotorMId.ShakeModShakeM, 90, 5000); |
|
|
|
tubePreProcesModuleExDriver.clampingMReleaseTubeInFuzzyPos(); |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "使能相关模块", group = "测试工具", order = 2) |
|
|
@ -65,142 +68,211 @@ public class TubePreProcesPosCalibration { |
|
|
|
return posMgr.getParams(); |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "测量Z轴", group = "辅助工具", order = 10) |
|
|
|
public Integer measureZAxis() throws AppException { |
|
|
|
enableModule(); |
|
|
|
Integer zpos = stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.ShakeModGripperZM, 10000); |
|
|
|
disableModule(); |
|
|
|
return zpos; |
|
|
|
} |
|
|
|
|
|
|
|
//TubePreProcessYPos |
|
|
|
//TubePreProcessZAxisPos |
|
|
|
//TubePreProcessGripperPos |
|
|
|
//TubePreProcessTubeClamp |
|
|
|
|
|
|
|
@ExtApiFn(name = "<试管夹具>夹住试管", group = "辅助工具", order = 11) |
|
|
|
public void clampTube() throws AppException { |
|
|
|
tubePreProcesModuleExDriver.clampingMclampTube(); |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "<试管夹具>松开试管", group = "辅助工具", order = 12) |
|
|
|
public void unclampTube() throws AppException { |
|
|
|
tubePreProcesModuleExDriver.clampingMReleaseTube(); |
|
|
|
} |
|
|
|
// 设置 |
|
|
|
// 1. 设置试管帽夹爪冗余(0.1mm) |
|
|
|
// |
|
|
|
// 标定坐标 |
|
|
|
// 基础标定 |
|
|
|
// 1. 拧开试管夹具 |
|
|
|
// 2. 标定当前位置为试管夹具松开位置 |
|
|
|
// 3. 掰动试管帽夹爪,让试管帽夹爪处于张开位置 |
|
|
|
// 4. 标定当前位置为试管帽夹爪松开位置 |
|
|
|
// |
|
|
|
// 扩展标定 |
|
|
|
// 1. 取一个高试管放入试管架中,挪动设备到取试管的位置 |
|
|
|
// 2. 点击标定取高试管位置 |
|
|
|
// 3. 取一个低试管放入试管架中,挪动设备到取试管的位置 |
|
|
|
// 4. 点击标定取低试管位置 |
|
|
|
// 5. 取一个高试管放到摇匀试管的位置,挪动设备到摇匀试管的位置(注意试管夹爪下表面和试管帽接触) |
|
|
|
// 6. 点击标定试管摇匀位置 |
|
|
|
// |
|
|
|
// 辅助测量 |
|
|
|
// 读取当前Z轴高度 |
|
|
|
// |
|
|
|
@ExtApiFn(name = "标定前后移动伺服坐标", group = "标定", order = 100) |
|
|
|
public Integer calibrateTubePreProcessYPos(TubePreProcessYPos posType) throws AppException { |
|
|
|
Integer pos = miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModGripperYSV); |
|
|
|
posMgr.setPos(posType, pos); |
|
|
|
return pos; |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "标定Z轴坐标", group = "标定", order = 101) |
|
|
|
public Integer calibrateTubePreProcessZAxisPos(TubePreProcessZAxisPos posType) throws AppException { |
|
|
|
public Integer readShakeModClampingMPos() throws AppException { |
|
|
|
enableModule(); |
|
|
|
Integer pos = stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.ShakeModGripperZM, 10000); |
|
|
|
posMgr.setPos(posType, pos); |
|
|
|
Integer pos = stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.ShakeModClampingM, 10000); |
|
|
|
disableModule(); |
|
|
|
return pos; |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "标定夹爪伺服坐标", group = "标定", order = 102) |
|
|
|
public Integer calibrateTubePreProcessGripperPos(TubePreProcessGripperPos posType) throws AppException { |
|
|
|
enableModule(); |
|
|
|
|
|
|
|
@ExtApiFn(name = "设置试管帽夹爪冗余(0.1mm)", group = "设置", order = 100) |
|
|
|
public void setTubeCapGripperRedundancy(Integer val) throws AppException { |
|
|
|
posMgr.setPos(TubePreProcessGripperPos.GripperRedundancyHeight, val); |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "标定<试管帽夹爪>松开位置", group = "基础标定", order = 110) |
|
|
|
public Integer calibrateTubeCapGripperOpenPos() throws AppException { |
|
|
|
Integer pos = miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModGripperSV); |
|
|
|
posMgr.setPos(posType, pos); |
|
|
|
disableModule(); |
|
|
|
posMgr.setPos(TubePreProcessGripperPos.GripperServoOpenPos, pos); |
|
|
|
return pos; |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "标定<试管夹具>松开位置", group = "基础标定", order = 111) |
|
|
|
public Integer calibrateTubeCapGripperClosePos() throws AppException { |
|
|
|
Integer pos = readShakeModClampingMPos(); |
|
|
|
posMgr.setPos(TubePreProcessTubeClamp.ShakeClampMotorReleasePos, pos); |
|
|
|
return pos; |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "标定试管夹紧伺服坐标", group = "标定", order = 103) |
|
|
|
public Integer calibrateTubePreProcessTubeClamp(TubePreProcessTubeClamp posType) throws AppException { |
|
|
|
public Object calibrateCurPosAsTakeTubePos(Boolean isHighTube) throws AppException { |
|
|
|
enableModule(); |
|
|
|
Integer pos = stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.ShakeModClampingM, 10000); |
|
|
|
if (posType.equals(TubePreProcessTubeClamp.ShakeClampMotorClampPos)) { |
|
|
|
posMgr.setPos(posType, pos - 2); |
|
|
|
//1. 读取夹爪位置 |
|
|
|
Integer gripperPos = miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModGripperSV); |
|
|
|
//2. 读取Y轴位置 |
|
|
|
Integer ySVPos = miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModGripperYSV); |
|
|
|
//2. 夹爪松开 |
|
|
|
tubePreProcesModuleExDriver.gripperSVOpen(); |
|
|
|
//3. Z轴归零,并读取当前位置 |
|
|
|
Integer zpos = stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.ShakeModGripperZM, 10000); |
|
|
|
|
|
|
|
posMgr.setPos(TubePreProcessGripperPos.GripperServoTakeCapPos, gripperPos); |
|
|
|
posMgr.setPos(TubePreProcessYPos.YServoTakeTubePos, ySVPos); |
|
|
|
if (isHighTube) { |
|
|
|
posMgr.setPos(TubePreProcessZAxisPos.ZMotorTakeHTubePos, zpos); |
|
|
|
} else { |
|
|
|
posMgr.setPos(posType, pos); |
|
|
|
posMgr.setPos(TubePreProcessZAxisPos.ZMotorTakeSTubePos, zpos); |
|
|
|
} |
|
|
|
|
|
|
|
disableModule(); |
|
|
|
return pos; |
|
|
|
var ObNode = ZJsonHelper.createObjectNode(); |
|
|
|
ObNode.put("gripperSVPos", gripperPos); |
|
|
|
ObNode.put("ySVPos", ySVPos); |
|
|
|
ObNode.put("zMpos", zpos); |
|
|
|
return ObNode; |
|
|
|
} |
|
|
|
|
|
|
|
// |
|
|
|
// 夹爪标定,校准,校验 |
|
|
|
// |
|
|
|
@ExtApiFn(name = "<校验>张开", group = "校验.夹爪", order = 206) |
|
|
|
public void gripperSVOpen() throws AppException { |
|
|
|
miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 1); |
|
|
|
tubePreProcesModuleExDriver.gripperSVOpen(); |
|
|
|
|
|
|
|
@ExtApiFn(name = "标定<取高试管>位置", group = "扩展标定", order = 200) |
|
|
|
public Object calibrateCurPosAsTakeHTubePos() throws AppException { |
|
|
|
return calibrateCurPosAsTakeTubePos(true); |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "<校验>夹紧", group = "校验.夹爪", order = 205) |
|
|
|
public void gripperSVCClose() throws AppException { |
|
|
|
miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 1); |
|
|
|
tubePreProcesModuleExDriver.gripperSVCClose(); |
|
|
|
@ExtApiFn(name = "标定<取低试管>位置", group = "扩展标定", order = 201) |
|
|
|
public Object calibrateCurPosAsTakeSTubePos() throws AppException { |
|
|
|
return calibrateCurPosAsTakeTubePos(false); |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "<校验>夹住试管", group = "校验.夹爪", order = 205) |
|
|
|
public void gripperSVClampTube() throws AppException { |
|
|
|
miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 1); |
|
|
|
tubePreProcesModuleExDriver.gripperSVClampTube(); |
|
|
|
@ExtApiFn(name = "标定<摇匀>位置", group = "扩展标定", order = 202) |
|
|
|
public Object calibrateCurPosAsShakePos() throws AppException { |
|
|
|
// |
|
|
|
//1. 读取Y位置 |
|
|
|
Integer ySVPos = miniServoDriver.miniServoReadPos(MiniServoMId.ShakeModGripperYSV); |
|
|
|
//2. 试管夹具张开一点 |
|
|
|
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModClampingM, 10, overtime); |
|
|
|
//3. Z轴归零,并读取当前位置 |
|
|
|
Integer zpos = stepMotorCtrlDriver.stepMotorReadPosByMoveToZeroBlock(StepMotorMId.ShakeModGripperZM, 10000); |
|
|
|
//4. 夹具归零并读取位置 |
|
|
|
Integer clampPos = readShakeModClampingMPos(); |
|
|
|
clampPos = clampPos - 10 - 2; |
|
|
|
|
|
|
|
posMgr.setPos(TubePreProcessZAxisPos.ZMotorShakeTubePos, zpos); |
|
|
|
posMgr.setPos(TubePreProcessTubeClamp.ShakeClampMotorClampPos, clampPos); |
|
|
|
posMgr.setPos(TubePreProcessYPos.YServoShakePos, ySVPos); |
|
|
|
|
|
|
|
var obNode = ZJsonHelper.createObjectNode(); |
|
|
|
obNode.put("ySVPos", ySVPos); |
|
|
|
obNode.put("zMpos", zpos); |
|
|
|
obNode.put("clampPos", clampPos); |
|
|
|
return obNode; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// |
|
|
|
//YSV : 设置参考点,标定,验证 |
|
|
|
// 夹爪标定,校准,校验 |
|
|
|
// |
|
|
|
@ExtApiFn(name = "<校验>移动到摇匀位", group = "校验.YSV", order = 305) |
|
|
|
public void YAxixServoShake() throws AppException { |
|
|
|
miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 1); |
|
|
|
tubePreProcesModuleExDriver.YSVMoveToShakePos(); |
|
|
|
} |
|
|
|
// @ExtApiFn(name = "<校验>张开", group = "校验.夹爪", order = 306) |
|
|
|
// public void gripperSVOpen() throws AppException { |
|
|
|
// miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 1); |
|
|
|
// tubePreProcesModuleExDriver.gripperSVOpen(); |
|
|
|
// } |
|
|
|
// |
|
|
|
// @ExtApiFn(name = "<校验>夹住试管帽", group = "校验.夹爪", order = 305) |
|
|
|
// public void gripperSVClampTube() throws AppException { |
|
|
|
// miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 1); |
|
|
|
// tubePreProcesModuleExDriver.gripperSVClampTube(); |
|
|
|
// } |
|
|
|
|
|
|
|
@ExtApiFn(name = "<校验>移动到取试管位", group = "校验.YSV", order = 306) |
|
|
|
public void YAxixServoTakeTube() throws AppException { |
|
|
|
miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 1); |
|
|
|
tubePreProcesModuleExDriver.YSVMoveToTakeTubePos(); |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "<校验>移动到待机位", group = "校验.YSV", order = 307) |
|
|
|
public void YAxixServoMoveToStandyPos() throws AppException { |
|
|
|
miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 1); |
|
|
|
tubePreProcesModuleExDriver.YSVMoveToStandyPos(); |
|
|
|
} |
|
|
|
// |
|
|
|
//YSV : 设置参考点,标定,验证 |
|
|
|
// |
|
|
|
// @ExtApiFn(name = "<校验>移动到摇匀位", group = "校验.YSV", order = 405) |
|
|
|
// public void YAxixServoShake() throws AppException { |
|
|
|
// miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 1); |
|
|
|
// tubePreProcesModuleExDriver.YSVMoveToShakePos(); |
|
|
|
// } |
|
|
|
// |
|
|
|
// @ExtApiFn(name = "<校验>移动到取试管位", group = "校验.YSV", order = 406) |
|
|
|
// public void YAxixServoTakeTube() throws AppException { |
|
|
|
// miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 1); |
|
|
|
// tubePreProcesModuleExDriver.YSVMoveToTakeTubePos(); |
|
|
|
// } |
|
|
|
// |
|
|
|
// @ExtApiFn(name = "<校验>移动到待机位", group = "校验.YSV", order = 407) |
|
|
|
// public void YAxixServoMoveToStandyPos() throws AppException { |
|
|
|
// miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 1); |
|
|
|
// tubePreProcesModuleExDriver.YSVMoveToStandyPos(); |
|
|
|
// } |
|
|
|
// |
|
|
|
//ZM : 标定,验证 |
|
|
|
// |
|
|
|
|
|
|
|
@ExtApiFn(name = "<校验>取试管", group = "校验.ZM", order = 405) |
|
|
|
public void takeTube(Boolean isHTube) throws AppException { |
|
|
|
enableModule(); |
|
|
|
tubePreProcesModuleExDriver.takeTubeFromTubeholder(isHTube); |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "<校验>放试管", group = "校验.ZM", order = 406) |
|
|
|
public void putTube(Boolean isHTube) throws AppException { |
|
|
|
enableModule(); |
|
|
|
tubePreProcesModuleExDriver.putTubeToTubeholder(isHTube); |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "<校验>Z轴移动到取试管位置", group = "校验.ZM", order = 407) |
|
|
|
public void zMotorMoveToTakeHTubePos(Boolean isHTube) throws AppException { |
|
|
|
enableModule(); |
|
|
|
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModGripperZM, overtime); |
|
|
|
tubePreProcesModuleExDriver.zMotorMoveToTakeHTubePos(isHTube); |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "<校验>Z轴移动到摇匀位置", group = "校验.ZM", order = 408) |
|
|
|
public void zMotorMoveToShakeTubePos() throws AppException { |
|
|
|
enableModule(); |
|
|
|
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModGripperZM, overtime); |
|
|
|
tubePreProcesModuleExDriver.zMotorMoveToShakeTubePos(); |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "<校验>夹紧", group = "校验.夹紧", order = 503) |
|
|
|
|
|
|
|
public void clampTube() throws AppException { |
|
|
|
tubePreProcesModuleExDriver.clampingMclampTube(); |
|
|
|
} |
|
|
|
// @ExtApiFn(name = "<校验>取试管", group = "校验.ZM", order = 505) |
|
|
|
// public void takeTube(Boolean isHTube) throws AppException { |
|
|
|
// enableModule(); |
|
|
|
// tubePreProcesModuleExDriver.takeTubeFromTubeholder(isHTube); |
|
|
|
// } |
|
|
|
// |
|
|
|
// @ExtApiFn(name = "<校验>放试管", group = "校验.ZM", order = 506) |
|
|
|
// public void putTube(Boolean isHTube) throws AppException { |
|
|
|
// enableModule(); |
|
|
|
// tubePreProcesModuleExDriver.putTubeToTubeholder(isHTube); |
|
|
|
// } |
|
|
|
// |
|
|
|
// @ExtApiFn(name = "<校验>Z轴移动到取试管位置", group = "校验.ZM", order = 507) |
|
|
|
// public void zMotorMoveToTakeHTubePos(Boolean isHTube) throws AppException { |
|
|
|
// enableModule(); |
|
|
|
// stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModGripperZM, overtime); |
|
|
|
// tubePreProcesModuleExDriver.zMotorMoveToTakeHTubePos(isHTube); |
|
|
|
// } |
|
|
|
// |
|
|
|
// @ExtApiFn(name = "<校验>Z轴移动到摇匀位置", group = "校验.ZM", order = 508) |
|
|
|
// public void zMotorMoveToShakeTubePos() throws AppException { |
|
|
|
// enableModule(); |
|
|
|
// stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModGripperZM, overtime); |
|
|
|
// tubePreProcesModuleExDriver.zMotorMoveToShakeTubePos(); |
|
|
|
// } |
|
|
|
|
|
|
|
@ExtApiFn(name = "<校验>释放", group = "校验.夹紧", order = 504) |
|
|
|
public void unclampTube() throws AppException { |
|
|
|
tubePreProcesModuleExDriver.clampingMReleaseTube(); |
|
|
|
} |
|
|
|
|
|
|
|
@ExtApiFn(name = "<校验>全部流程", group = "校验.全部", order = 600) |
|
|
|
@ExtApiFn(name = "<校验>全部流程", group = "校验.全部", order = 700) |
|
|
|
public void testAll(Boolean isHTube) throws AppException { |
|
|
|
deviceReset(); |
|
|
|
controler.takeTubeFromTubeholderToShakePos(isHTube); |
|
|
|
controler.shakeTube(45, 5); |
|
|
|
controler.takeTubeCap(isHTube); |
|
|
|
controler.putbakTubeCapAndPutbakTubeToTubeHolder(isHTube); |
|
|
|
tubePreProcesModuleExDriver.clampingMReleaseTubeInFuzzyPos(); |
|
|
|
disableModule(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|