From c79053ae4383baa535e9795d824d162f345eb389 Mon Sep 17 00:00:00 2001 From: sige Date: Sun, 14 Jul 2024 14:20:36 +0800 Subject: [PATCH] 1 --- .../a8k/service/db/dao/A8kDirectCtrlPosDao.java | 2 +- .../java/a8k/service/db/dao/MotorParameterDao.java | 2 +- .../java/a8k/service/db/entity/MotorParameter.java | 2 +- .../hardware/MotorTubeRackMoveCtrlService.java | 51 ++++++++++++++++++---- 4 files changed, 45 insertions(+), 12 deletions(-) diff --git a/src/main/java/a8k/service/db/dao/A8kDirectCtrlPosDao.java b/src/main/java/a8k/service/db/dao/A8kDirectCtrlPosDao.java index b55c889..00ccca8 100644 --- a/src/main/java/a8k/service/db/dao/A8kDirectCtrlPosDao.java +++ b/src/main/java/a8k/service/db/dao/A8kDirectCtrlPosDao.java @@ -49,7 +49,7 @@ public class A8kDirectCtrlPosDao { return new PosBean(pos.posX, pos.posY, pos.posZ); } - A8kDirectCtrlPos getPos(String posName) { + public A8kDirectCtrlPos getPos(String posName) { A8kDirectCtrlPos pos = UfActiveRecord.findOne(A8kDirectCtrlPos.class, Map.of("posName", posName)); assert pos != null; return pos; diff --git a/src/main/java/a8k/service/db/dao/MotorParameterDao.java b/src/main/java/a8k/service/db/dao/MotorParameterDao.java index 3ace809..7518855 100644 --- a/src/main/java/a8k/service/db/dao/MotorParameterDao.java +++ b/src/main/java/a8k/service/db/dao/MotorParameterDao.java @@ -9,7 +9,7 @@ import java.util.Map; @Component public class MotorParameterDao { - MotorParameter getMotorParameter(int mid) { + public MotorParameter getMotorParameter(int mid) { var param = UfActiveRecord.findOne(MotorParameter.class, Map.of("mid", mid)); assert param != null; return param; diff --git a/src/main/java/a8k/service/db/entity/MotorParameter.java b/src/main/java/a8k/service/db/entity/MotorParameter.java index c968162..c91e78a 100644 --- a/src/main/java/a8k/service/db/entity/MotorParameter.java +++ b/src/main/java/a8k/service/db/entity/MotorParameter.java @@ -14,7 +14,7 @@ public class MotorParameter extends UfActiveRecord { Integer zeroPosOff; //零点偏移 @UfActiveRecordField - Integer moveToZeroOvertime;// 回零超时时间 + public Integer moveToZeroOvertime;// 回零超时时间 @UfActiveRecordField Integer defaultVelocity; //默认速度 diff --git a/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java b/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java index e0a5e01..c1307b8 100644 --- a/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java +++ b/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java @@ -1,13 +1,22 @@ 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.MotorParameterDao; +import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class MotorTubeRackMoveCtrlService { + private static final Integer MOVE_TO_ZERO_MAX_DPOS = 10; + /** * * 主要用来控制试管架的平移动作控制 @@ -39,18 +48,30 @@ public class MotorTubeRackMoveCtrlService { A8kTubeInfoDao tubeInfoDao; @Autowired MotorParameterDao motorParameterDao; - + @Resource + private A8kCanBusService a8kCanBusService; // // 电机基础控制 // - public void moveToZeroWhenDeviceSetup() { - + 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() { + public void moveToZero() throws HardwareException, InterruptedException { + this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{0}, 30*1000); + + var motorParams = this.motorParameterDao.getMotorParameter(ModuleId.MotorTubeRackMoveModule); + this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to_zero, new Integer[]{}, motorParams.moveToZeroOvertime); + + var response = this.a8kCanBusService.callcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kmodule_get_reg, new Integer[]{RegIndex.kreg_step_motor_dpos}); + var dval = response.getContentI32(0); + if ( dval > MotorTubeRackMoveCtrlService.MOVE_TO_ZERO_MAX_DPOS ) { + throw new HardwareException(ModuleId.MotorTubeRackMoveModule, Errorcode.kstep_motor_lost_step); + } + //先通过move_to 指令移动到零点 //再通过 move_to_zero 进行归零(设置超时时间),超时时间,来源MotorParameterDao //最后读取 寄存器dval,判断move_to_zero移动了多少距离,如果dval过大,则抛出电机丢步异常。 @@ -64,26 +85,38 @@ public class MotorTubeRackMoveCtrlService { /** * 移动试管架到入口位置 */ - public void moveTubeRackToEnterPos() { + public void moveTubeRackToEnterPos() throws HardwareException, InterruptedException { + var pos = this.directCtrlPosTableDao.getPos(A8kDirectCtrlPosDao.MotorTubeRackMotor_tubeRackEnterPos); + this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{pos.posX}, 30*1000); } /** * 移动试管架到出口位置 */ - public void moveTubeRackToExitPos() { + public void moveTubeRackToExitPos() throws HardwareException, InterruptedException { + var pos = this.directCtrlPosTableDao.getPos(A8kDirectCtrlPosDao.MotorTubeRackMotor_tubeRackExitPos); + this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{pos.posX}, 30*1000); } /** * 移动试管架到试管架扫码位置 */ - public void moveTubeRackToScanPos() { + public void moveTubeRackToScanPos() throws HardwareException, InterruptedException { + var pos = this.directCtrlPosTableDao.getPos(A8kDirectCtrlPosDao.MotorTubeRackMotor_tubeRackScanCodePos); + this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{pos.posX}, 30*1000); } /** * 移动试管架到试管架扫码并扫码 */ - public String moveTubeRackToScanPosAndScan() { - return ""; + 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); } //