diff --git a/src/main/java/a8k/service/db/dao/MotorParameterDao.java b/src/main/java/a8k/service/db/dao/MotorParameterDao.java deleted file mode 100644 index 6eb1d29..0000000 --- a/src/main/java/a8k/service/db/dao/MotorParameterDao.java +++ /dev/null @@ -1,17 +0,0 @@ -package a8k.service.db.dao; - -import a8k.service.db.entity.ModuleParameter; - -import com.iflytop.uf.UfActiveRecord; -import org.springframework.stereotype.Component; - -import java.util.Map; - -@Component -public class MotorParameterDao { - public ModuleParameter getMotorParameter(int mid) { - var param = UfActiveRecord.findOne(ModuleParameter.class, Map.of("mid", mid)); - assert param != null; - return param; - } -} diff --git a/src/main/java/a8k/service/db/entity/MotorTubeRackMoveCtrlServiceParameter.java b/src/main/java/a8k/service/db/entity/MotorTubeRackMoveCtrlServiceParameter.java index 7a8dc7d..dda69eb 100644 --- a/src/main/java/a8k/service/db/entity/MotorTubeRackMoveCtrlServiceParameter.java +++ b/src/main/java/a8k/service/db/entity/MotorTubeRackMoveCtrlServiceParameter.java @@ -35,13 +35,13 @@ public class MotorTubeRackMoveCtrlServiceParameter { Integer horizontalMotorOffset; //水平移动电机位置偏移 @UfActiveRecordField - Integer horizontalMotorLostStepThresholdVal; //水平电机丢步判断 + public Integer horizontalMotorLostStepThresholdVal; //水平电机丢步判断 @UfActiveRecordField - Integer scanCodeClampPos; //试管扫码夹紧位置 + public Integer scanCodeClampPos; //试管扫码夹紧位置 @UfActiveRecordField - Integer scanCodeReleasePos;//试管扫码释放位置 + public Integer scanCodeReleasePos;//试管扫码释放位置 public static String getTableName() { diff --git a/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java b/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java deleted file mode 100644 index 7f33d67..0000000 --- a/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java +++ /dev/null @@ -1,256 +0,0 @@ -package a8k.service.hardware; -import a8k.a8k_can_protocol.CmdId; -import a8k.a8k_can_protocol.Errorcode; -import a8k.a8k_can_protocol.ModuleId; -import a8k.a8k_can_protocol.RegIndex; -import a8k.appbean.HardwareException; -import a8k.base_hardware.A8kCanBusService; -import a8k.service.db.dao.A8kDirectCtrlPosDao; -import a8k.service.db.dao.A8kTubeInfoDao; -import a8k.service.db.dao.MotorTubeRackMoveCtrlServiceParameterDao; -import a8k.service.db.dao.MotorParameterDao; -import jakarta.annotation.Resource; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -@Component -public class MotorTubeRackMoveCtrlService { - /** - * - * 主要用来控制试管架的平移动作控制 - * - * 通用编写注意事项: - * 1.坐标从数据库中拿一些关键点的坐标进行运算 - * 2.直接调用A8kCanBusService的方法。 - * 3.利用光电,和编码器检查设备是否运行到位 - * - * 当前模块编写注意事项 - * 1. 电机移动前先将试管扫码夹紧复位 - * 2. 扫码时试管夹紧夹紧 - */ - - // MotorTubeRackMotor_tubeScanPos - // MotorTubeRackMotor_tubeHeighJudgmentPos - // MotorTubeRackMotor_tubePreProcessPos - // MotorTubeRackMotor_tubeExistJudgmentPos - // - // MotorTubeRackMotor_tubeRackEnterPos - // MotorTubeRackMotor_tubeRackExitPos - // MotorTubeRackMotor_tubeRackScanCodePos - // MotorTubeScanClampModule_clampPos - // MotorTubeScanClampModule_releasePos - - - @Autowired - A8kTubeInfoDao tubeInfoDao; - - @Autowired - MotorParameterDao motorParameterDao; - @Resource - private A8kCanBusService a8kCanBusService; - @Resource - MotorTubeRackMoveCtrlServiceParameterDao serviceParameterDao; - - - - // - // 电机基础控制 - // - - public void moveToZeroWhenDeviceSetup() throws HardwareException, InterruptedException { - this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to_zero, new Integer[]{}, 30*1000); - } - - - public void moveToZero() throws HardwareException, InterruptedException { - var beforePosResponse = this.a8kCanBusService.callcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_read_pos, new Integer[]{0}); - var beforePos = beforePosResponse.getContentI32(0); - this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to_zero, new Integer[]{}, motorParams.moveToZeroOvertime); - var afterPosResponse = this.a8kCanBusService.callcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_read_pos, new Integer[]{0}); - var afterPos = afterPosResponse.getContentI32(0); - var distance = beforePos - afterPos; - - var response = this.a8kCanBusService.callcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kmodule_get_reg, new Integer[]{RegIndex.kreg_step_motor_dpos}); - var dval = response.getContentI32(0); - if ( Math.abs(dval - distance) > motorParams.loseStepWarningJudgeDistance ) { - throw new HardwareException(ModuleId.MotorTubeRackMoveModule, Errorcode.kstep_motor_lost_step); - } - - //先通过move_to 指令移动到零点 - //再通过 move_to_zero 进行归零(设置超时时间),超时时间,来源MotorParameterDao - //最后读取 寄存器dval,判断move_to_zero移动了多少距离,如果dval过大,则抛出电机丢步异常。 - //1.记录运行前电机所在位置 - //2.使用move_to_zero移动到零点 - //3.读取电机运行完成后所在的位置 - //4.比较dpos和上面两个位置的差值 相差多少,如果超过2mm,即超过20则认为发生过阻转。 - - } - - - // - // 试管架移动 - // - - /** - * 移动试管架到入口位置 - */ - public void moveTubeRackToEnterPos() throws HardwareException, InterruptedException { - var params = this.serviceParameterDao.getParameter(); - this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{params.tubeRackEnterPos}, params.actionOvertime); - } - - /** - * 移动试管架到出口位置 - */ - public void moveTubeRackToExitPos() throws HardwareException, InterruptedException { - var params = this.serviceParameterDao.getParameter(); - this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{params.tubeExistJudgmentPos}, params.actionOvertime); - } - - /** - * 移动试管架到试管架扫码位置 - */ - public void moveTubeRackToScanPos() throws HardwareException, InterruptedException { - var params = this.serviceParameterDao.getParameter(); - this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{params.tubeRackScanCodePos}, params.actionOvertime); - } - - /** - * 移动试管架到试管架扫码并扫码 - */ - public String moveTubeRackToScanPosAndScan() throws HardwareException, InterruptedException { - this.moveTubeRackToScanPos(); - this.a8kCanBusService.callcmd(ModuleId.TubeRackScannerModule, CmdId.kcode_scaner_start_scan, new Integer[]{}); - Thread.sleep(500); - var response = this.a8kCanBusService.callcmd(ModuleId.TubeRackScannerModule, CmdId.kcode_scaner_read_scaner_result, new Integer[]{}); - this.a8kCanBusService.callcmd(ModuleId.TubeRackScannerModule, CmdId.kcode_scaner_stop_scan, new Integer[]{}); - var contentBytes = response.getCmdContent(); - return new String(contentBytes); - } - - // - // 试管移动 - // - - - /** - * 移动试管到扫码位置 - * @param tubeType - * @param tubeIndex - */ - public void moveTubeToScanPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException { - var params = this.serviceParameterDao.getParameter(); - var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType); - var scanPos = params.tubeScanPos + tubeIndex * tubeInfo.tubeSpacing; - this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{scanPos}, params.actionOvertime); - } - - /** - * 移动试管到扫码位置,并扫码 - * @param tubeType - * @param tubeIndex - */ - public String moveTubeToScanPosAndScan(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException { - this.moveTubeToScanPos(tubeType, tubeIndex); - - this.a8kCanBusService.callcmd(ModuleId.TubeRackScannerModule, CmdId.kcode_scaner_start_scan, new Integer[]{}); - Thread.sleep(500); - var response = this.a8kCanBusService.callcmd(ModuleId.TubeRackScannerModule, CmdId.kcode_scaner_read_scaner_result, new Integer[]{}); - this.a8kCanBusService.callcmd(ModuleId.TubeRackScannerModule, CmdId.kcode_scaner_stop_scan, new Integer[]{}); - var contentBytes = response.getCmdContent(); - return new String(contentBytes); - } - - /** - * 移动试管到试管高低判断位置 - * @param tubeType - * @param tubeIndex - */ - public void moveTubeToHeighJudgmentPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException { - var params = this.serviceParameterDao.getParameter(); - var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType); - var detectPos = params.tubeHeighJudgmentPos + tubeIndex * tubeInfo.tubeSpacing; - this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{detectPos}, params.actionOvertime); - } - - /** - * 移动试管到试管预处理的位置 - * @param tubeType - * @param tubeIndex - */ - public void moveTubeToPreProcessPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException { - var params = this.serviceParameterDao.getParameter(); - var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType); - var pos = params.tubePreProcessPos + tubeIndex * tubeInfo.tubeSpacing; - this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{pos}, params.actionOvertime); - } - - // - // 状态检测 - // - - /** - * 移动试管到试管有无判断位置 - * @param tubeType - * @param tubeIndex - */ - public void moveTubeToExistJudgmentPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException { - var params = this.serviceParameterDao.getParameter(); - var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType); - var pos = params.tubeRackExitPos + tubeIndex * tubeInfo.tubeSpacing; - this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{pos}, params.actionOvertime); - } - - public boolean isTubeRackInEnterPos() throws HardwareException { - var response = this.a8kCanBusService.callcmd(ModuleId.FeederBoard, CmdId.kxymotor_read_inio, new Integer[]{3}); - return response.getContentI32(0) == 1; - } - - public boolean isTubeRackInExitPos() throws HardwareException { - var response = this.a8kCanBusService.callcmd(ModuleId.FeederBoard, CmdId.kxymotor_read_inio, new Integer[]{5}); - return response.getContentI32(0) == 1; - } - - /** - * 获取移动通道的光电状态 - * @param photoelectricIndex 0:里光电,1:外光电 - * @return true, 光电触发 false,光电没有触发 - */ - public boolean getMoveChannelPhotoelectricState(int photoelectricIndex) throws HardwareException { - var index = 0 == photoelectricIndex ? 2 : 1; - var response = this.a8kCanBusService.callcmd(ModuleId.FeederBoard, CmdId.kxymotor_read_inio, new Integer[]{index}); - return response.getContentI32(0) == 1; - } - - // - // 其他辅助组件 - // - - - /** - * 扫描夹紧机构夹紧 - */ - public void scanClampModuleCompress() throws HardwareException, InterruptedException { - var params = this.serviceParameterDao.getParameter(); - this.a8kCanBusService.callblockcmd( - ModuleId.ServoTubeRackTubePushModule, - CmdId.kmini_servo_move_to, - new Integer[]{0}, - params.actionOvertime - ); - } - - /** - * 扫描夹紧机构复位 - */ - public void scanClampModuleReset() throws HardwareException, InterruptedException { - var params = this.serviceParameterDao.getParameter(); - this.a8kCanBusService.callblockcmd( - ModuleId.ServoTubeRackTubePushModule, - CmdId.kmini_servo_move_to, - new Integer[]{0}, - params.actionOvertime - ); - } - - -}