From 5c987c017cf59fa7df8a42a381a775e0e6c6fedd Mon Sep 17 00:00:00 2001 From: zhaohe Date: Mon, 14 Oct 2024 19:22:17 +0800 Subject: [PATCH] update --- src/main/java/a8k/constant/AppConstant.java | 3 ++ src/main/java/a8k/hardware/A8kCanBusService.java | 43 +++++++--------------- .../java/a8k/hardware/type/regindex/RegIndex.java | 2 + .../basectrl/TubeTransportControler.java | 7 +++- .../calibration/TubeTransportPosCalibration.java | 35 +++++++++++++----- .../app/devicedriver/pos/TubeTransportPosMgr.java | 6 ++- 6 files changed, 54 insertions(+), 42 deletions(-) diff --git a/src/main/java/a8k/constant/AppConstant.java b/src/main/java/a8k/constant/AppConstant.java index 58e45e3..4bcb0ca 100644 --- a/src/main/java/a8k/constant/AppConstant.java +++ b/src/main/java/a8k/constant/AppConstant.java @@ -6,4 +6,7 @@ public class AppConstant { public static final int CONSUMABLE_NUM = 25; public static final int TIP_NUM = 120; public static final String APP_VERSION = "1.0.0"; + + public static final Integer ShakeModTubeScanerClampingSVReleasePos = 10; + public static final Integer ShakeModTubeScanerClampingSVClampingPos = 900; } diff --git a/src/main/java/a8k/hardware/A8kCanBusService.java b/src/main/java/a8k/hardware/A8kCanBusService.java index cdc83d3..50ac05f 100644 --- a/src/main/java/a8k/hardware/A8kCanBusService.java +++ b/src/main/java/a8k/hardware/A8kCanBusService.java @@ -119,10 +119,10 @@ public class A8kCanBusService { } - private A8kPacket packParamsToPacket(Integer moduleId, Integer cmdId, Integer[] params) { + private A8kPacket packParamsToPacket(Integer moduleId, Integer cmdId, List params) { int subCmdId = cmdId & 0xFF; int mainCmdId = (cmdId >> 8) & 0xFFFF; - int bufferSize = 2 + 2 + 1 + 1 + 2 + 4 * params.length; // PacketIndex - MainCmdId - SubCmdId - CmdType - + int bufferSize = 2 + 2 + 1 + 1 + 2 + 4 * params.size(); // PacketIndex - MainCmdId - SubCmdId - CmdType - // ModuleId - Parameters ByteBuffer buffer = ByteBuffer.allocate(bufferSize); buffer.order(ByteOrder.LITTLE_ENDIAN); @@ -325,7 +325,6 @@ public class A8kCanBusService { } - // // stepMotor // @@ -485,6 +484,11 @@ public class A8kCanBusService { miniServoWaitIsNotMove(id, actionOvertime); } + // kmini_servo_set_cur_pos + public void miniServoSetCurPos(MId id, Integer pos) throws AppException { + callcmdOvertime(id.toInt(), CmdId.mini_servo_set_cur_pos.toInt(), 5000, pos); + } + public void miniServoWaitIsNotMove(MId id, int acitionOvertime) throws AppException { long startedAt = System.currentTimeMillis(); do { @@ -574,33 +578,14 @@ public class A8kCanBusService { } while (true); } - public A8kPacket callcmd(Integer moduleId, Integer cmdId) throws AppException { - return this.callcmd(moduleId, cmdId, new Integer[]{}); - } - - public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0) throws AppException { - return this.callcmd(moduleId, cmdId, new Integer[]{p0}); - } - - public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1) throws AppException { - return this.callcmd(moduleId, cmdId, new Integer[]{p0, p1}); - } - - public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1, Integer p2) throws AppException { - return this.callcmd(moduleId, cmdId, new Integer[]{p0, p1, p2}); - } - - public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1, Integer p2, Integer p3) throws AppException { - return this.callcmd(moduleId, cmdId, new Integer[]{p0, p1, p2, p3}); - } - - public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1, Integer p2, Integer p3, Integer p4) throws AppException { - return this.callcmd(moduleId, cmdId, new Integer[]{p0, p1, p2, p3, p4}); + public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer... param) throws AppException { + var packet = packParamsToPacket(moduleId, cmdId, List.of(param)); + return sendCmdAutoResend(packet, A8kPacket.CMD_OVERTIME); } - public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer[] params) throws AppException { - var packet = packParamsToPacket(moduleId, cmdId, params); - return sendCmdAutoResend(packet, A8kPacket.CMD_OVERTIME); + public A8kPacket callcmdOvertime(Integer moduleId, Integer cmdId, Integer overtime, Integer... params) throws AppException { + var packet = packParamsToPacket(moduleId, cmdId, List.of(params)); + return sendCmdAutoResend(packet, overtime); } synchronized public A8kPacket sendCmdAutoResend(A8kPacket pack, int overtime) throws AppException { @@ -609,7 +594,7 @@ public class A8kCanBusService { // 如果是其他异常,则直接抛出异常。 for (int i = 0; i < 5; i++) { try { - return this.sendCmd(pack, A8kPacket.CMD_OVERTIME); + return this.sendCmd(pack, overtime); } catch (AppException e) { if (!e.error.code.equals(A8kEcode.LOW_ERROR_OVERTIME)) { throw e; diff --git a/src/main/java/a8k/hardware/type/regindex/RegIndex.java b/src/main/java/a8k/hardware/type/regindex/RegIndex.java index d01c4c1..8000379 100644 --- a/src/main/java/a8k/hardware/type/regindex/RegIndex.java +++ b/src/main/java/a8k/hardware/type/regindex/RegIndex.java @@ -188,6 +188,8 @@ public enum RegIndex { kreg_mini_servo_limit_torque(10252), // 限制扭矩 kreg_mini_servo_protective_torque(10253), // 保护扭矩 kreg_mini_servo_is_move(10254), // 是否在运动 + kreg_mini_servo_set_mid_point(26119), // 设置中间点 + kmini_servo_set_cur_pos(26124), // 设置当前位置 /*********************************************************************************************************************** * ID_CARD_READER * ***********************************************************************************************************************/ diff --git a/src/main/java/a8k/service/app/devicedriver/basectrl/TubeTransportControler.java b/src/main/java/a8k/service/app/devicedriver/basectrl/TubeTransportControler.java index 9b9bba1..afaf4c3 100644 --- a/src/main/java/a8k/service/app/devicedriver/basectrl/TubeTransportControler.java +++ b/src/main/java/a8k/service/app/devicedriver/basectrl/TubeTransportControler.java @@ -29,6 +29,9 @@ public class TubeTransportControler { @Resource A8kCanBusService canBus; + @Resource + TubeTransportPosMgr tubeTransportPosMgr; + /*========================================================================================= * 基础方法 *========================================================================================*/ @@ -70,14 +73,14 @@ public class TubeTransportControler { @ExtApiFn(name = "扫描夹紧机构夹紧", group = "基础方法", order = 1) public void scanClampModClamp() throws AppException { canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 1); - canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, 900); + canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, tubeTransportPosMgr.ScanerClampingSVClampingPos); canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, overtime); } @ExtApiFn(name = "扫描夹紧机构复位", group = "基础方法", order = 2) public void scanClampModRelease() throws AppException { canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 1); - canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, 10); + canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, tubeTransportPosMgr.ScanerClampingSVReleasePos); canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, overtime); } diff --git a/src/main/java/a8k/service/app/devicedriver/calibration/TubeTransportPosCalibration.java b/src/main/java/a8k/service/app/devicedriver/calibration/TubeTransportPosCalibration.java index f61e624..b2b18a8 100644 --- a/src/main/java/a8k/service/app/devicedriver/calibration/TubeTransportPosCalibration.java +++ b/src/main/java/a8k/service/app/devicedriver/calibration/TubeTransportPosCalibration.java @@ -5,6 +5,7 @@ import a8k.extapi_controler.utils.ExtApiFn; import a8k.extapi_controler.utils.ExtApiTab; import a8k.hardware.A8kCanBusService; import a8k.hardware.type.a8kcanprotocol.MId; +import a8k.service.app.devicedriver.basectrl.TubeTransportControler; import a8k.service.app.devicedriver.ctrl.TubeHolderScanerControler; import a8k.service.app.devicedriver.pos.TubeTransportPosMgr; import a8k.type.TubeHolderScanResult; @@ -24,6 +25,8 @@ public class TubeTransportPosCalibration { A8kCanBusService canBus; @Resource TubeHolderScanerControler tubeHolderScanerControler; + @Resource + TubeTransportControler tubeTransportControler; private Integer readFeedingModXMPos() throws AppException { canBus.stepMotorEnable(MId.FeedingModXM, 1); @@ -49,6 +52,7 @@ public class TubeTransportPosCalibration { canBus.stepMotorEnable(MId.FeedingModInfeedM, 1); canBus.stepMotorEnable(MId.FeedingModOutfeedM, 1); canBus.stepMotorEnable(MId.FeedingModXM, 1); + canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 1); } @ExtApiFn(name = "失能相关模块", group = "测试工具", order = 13) @@ -56,47 +60,60 @@ public class TubeTransportPosCalibration { canBus.stepMotorEnable(MId.FeedingModInfeedM, 0); canBus.stepMotorEnable(MId.FeedingModOutfeedM, 0); canBus.stepMotorEnable(MId.FeedingModXM, 0); + canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 0); } - @ExtApiFn(name = "设置当前位置为<入料位置>", group = "标定", order = 21) + @ExtApiFn(name = "<平移电机>设置当前位置为<入料位置>", group = "标定", order = 21) public void setTubeHolderEnterXPos() throws AppException { tubeTransportPosMgr.setTubeHolderEnterXPos(readFeedingModXMPos()); } - @ExtApiFn(name = "设置当前位置为<出料位置>", group = "标定", order = 22) + @ExtApiFn(name = "<平移电机>设置当前位置为<出料位置>", group = "标定", order = 22) public void setTubeHolderExitXPos() throws AppException { tubeTransportPosMgr.setTubeHolderExitXPos(readFeedingModXMPos()); } - @ExtApiFn(name = "设置当前位置为<试管架扫描位置>", group = "标定", order = 23) + @ExtApiFn(name = "<平移电机>设置当前位置为<试管架扫描位置>", group = "标定", order = 23) public void setTubeHolderScanXPos() throws AppException { tubeTransportPosMgr.setTubeHolderScanXPos(readFeedingModXMPos()); } - @ExtApiFn(name = "设置当前位置为<0号试管扫描位置>", group = "标定", order = 24) + @ExtApiFn(name = "<平移电机>设置当前位置为<0号试管扫描位置>", group = "标定", order = 24) public void setTube0ScanXPos() throws AppException { tubeTransportPosMgr.setTube0ScanXPos(readFeedingModXMPos()); } - @ExtApiFn(name = "设置当前位置为<0试管高度判断位置>", group = "标定", order = 25) + @ExtApiFn(name = "<平移电机>设置当前位置为<0试管高度判断位置>", group = "标定", order = 25) public void setTube0AltitJudgXPos() throws AppException { tubeTransportPosMgr.setTube0AltitJudgXPos(readFeedingModXMPos()); } - @ExtApiFn(name = "设置当前位置为<0试管存在判断位置>", group = "标定", order = 26) + @ExtApiFn(name = "<平移电机>设置当前位置为<0试管存在判断位置>", group = "标定", order = 26) public void setTube0ExistJudgXPos() throws AppException { tubeTransportPosMgr.setTube0ExistJudgXPos(readFeedingModXMPos()); } + @ExtApiFn(name = "<夹紧舵机>设置当前位置为夹紧位置", group = "标定", order = 26) + public void setTubeScanClampPos() throws AppException { + canBus.miniServoSetCurPos(MId.ShakeModTubeScanerClampingSV, tubeTransportPosMgr.ScanerClampingSVClampingPos); + } + + + @ExtApiFn(name = "夹紧试管架", group = "校验", order = 31) + public void scanClampModClamp() throws AppException { + tubeTransportControler.scanClampModClamp(); + } - @ExtApiFn(name = "扫描试管架", group = "校验", order = 31) + @ExtApiFn(name = "释放试管架", group = "校验", order = 32) + public void scanClampModRelease() throws AppException { + tubeTransportControler.scanClampModRelease(); + } + @ExtApiFn(name = "扫描试管架", group = "校验", order = 33) public TubeHolderScanResult scanAll() throws AppException { return tubeHolderScanerControler.scanTubeHodler(); } - - @ExtApiFn(name = "设置<试管扫描伺服力矩(100-1000)>", group = "其他", order = 41) public void setTubeScanServoTorque(Integer torque) throws AppException { tubeTransportPosMgr.setTubeScanServoTorque(torque); diff --git a/src/main/java/a8k/service/app/devicedriver/pos/TubeTransportPosMgr.java b/src/main/java/a8k/service/app/devicedriver/pos/TubeTransportPosMgr.java index 84594d8..a1325b9 100644 --- a/src/main/java/a8k/service/app/devicedriver/pos/TubeTransportPosMgr.java +++ b/src/main/java/a8k/service/app/devicedriver/pos/TubeTransportPosMgr.java @@ -13,11 +13,14 @@ import org.springframework.stereotype.Component; public class TubeTransportPosMgr { static final Logger logger = LoggerFactory.getLogger(TubeTransportPosMgr.class); + public final Integer ScanerClampingSVReleasePos = 100; + public final Integer ScanerClampingSVClampingPos = 1000; + public enum POS { TubeHolderEnterXPos, // 入料位置 TubeHolderExitXPos, // 出料位置 TubeHolderScanXPos, // 试管架扫描位置 - Tube0ScanXPos, // 0号试管扫描位置 + Tube0ScanXPos, // 0号试管扫描位置 Tube0AltitJudgXPos, // 0试管高度判断位置 Tube0ExistJudgXPos, // 0试管存在判断位置 TubeScanServoTorque,// 试管扫描伺服力矩 @@ -111,7 +114,6 @@ public class TubeTransportPosMgr { } - public void setTubeScanServoTorque(Integer value) { posReader.updatePos(POS.TubeScanServoTorque, value); }