From 17268b9d46660d632c8bbb2e4f4b1b2f8a2962d1 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 24 Jul 2024 18:10:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/a8k/a8k_can_protocol/A8kEcode.java | 1 + src/main/java/a8k/a8k_can_protocol/A8kPacket.java | 2 +- src/main/java/a8k/a8k_can_protocol/CmdId.java | 49 ++-- .../java/a8k/base_hardware/A8kCanBusService.java | 22 +- .../hardware/MotorTubeRackMoveCtrlService.java | 259 +++++++++++++++------ .../ReactionPlatesTransmitCtrlService.java | 2 +- zhaohe_app.db | Bin 479232 -> 487424 bytes 7 files changed, 236 insertions(+), 99 deletions(-) diff --git a/src/main/java/a8k/a8k_can_protocol/A8kEcode.java b/src/main/java/a8k/a8k_can_protocol/A8kEcode.java index 52a0761..1c00edf 100644 --- a/src/main/java/a8k/a8k_can_protocol/A8kEcode.java +++ b/src/main/java/a8k/a8k_can_protocol/A8kEcode.java @@ -26,6 +26,7 @@ public enum A8kEcode { MNotInZeroPos(20, "电机没有在零点"),// TubeXChannelIsNotEmpty(21, "试管架平移通道不为空"),// TubeTypeNotSupport(22, "试管类型不支持"),// + CmdIdNotSupport(23, "不支持指令"),// // // FOR HARDWARE // diff --git a/src/main/java/a8k/a8k_can_protocol/A8kPacket.java b/src/main/java/a8k/a8k_can_protocol/A8kPacket.java index 77831cc..229d542 100644 --- a/src/main/java/a8k/a8k_can_protocol/A8kPacket.java +++ b/src/main/java/a8k/a8k_can_protocol/A8kPacket.java @@ -76,7 +76,7 @@ public class A8kPacket { } public int getContentI32(int index) { - return ByteArray.readU16bit(raw, 8 + index * 4); + return ByteArray.read32bit(raw, 8 + index * 4); } public String toByteString() { diff --git a/src/main/java/a8k/a8k_can_protocol/CmdId.java b/src/main/java/a8k/a8k_can_protocol/CmdId.java index 76f518e..05f1570 100644 --- a/src/main/java/a8k/a8k_can_protocol/CmdId.java +++ b/src/main/java/a8k/a8k_can_protocol/CmdId.java @@ -9,11 +9,11 @@ public enum CmdId { event_bus_reg_change_report(0x0064, "event_bus_reg_change_report"),// // module_ping(0x0100, "module_ping"),// - module_get_status(0x0104, "module_get_status"),// + module_get_status(0x0104, "module_get_status", false),// module_stop(0x0101, "module_stop"),// module_set_reg(0x0105, "module_set_reg"),// module_get_reg(0x0106, "module_get_reg"),// - module_get_error(0x010a, "module_get_error"),// + module_get_error(0x010a, "module_get_error", true),// module_clear_error(0x010b, "module_clear_error"),// module_active_cfg(0x0110, "module_active_cfg"),// // @@ -23,7 +23,7 @@ public enum CmdId { xymotor_move_to_zero(0x0304, "xymotor_move_to_zero"),// xymotor_read_pos(0x0306, "xymotor_read_pos"),// xymotor_read_inio_index_in_stm32(0x0307, "xymotor_read_inio_index_in_stm32"),// - xymotor_read_inio(0x0308, "xymotor_read_inio"),// + xymotor_read_inio(0x0308, "xymotor_read_inio", true),// xymotor_set_pos(0x0309, "xymotor_set_pos"),// xymotor_motor_move_by_direct(0x030a, "xymotor_motor_move_by_direct"),// xymotor_read_enc_direct(0x030b, "xymotor_read_enc_direct"),// @@ -78,7 +78,7 @@ public enum CmdId { step_motor_easy_move_to_io(0x0216, "step_motor_easy_move_to_io"),// step_motor_stop(0x0228, "step_motor_stop"),// step_motor_active_cfg(0x0229, "step_motor_active_cfg"),// - step_motor_read_io_state(0x022a, "step_motor_read_io_state"),// + step_motor_read_io_state(0x022a, "step_motor_read_io_state", true),// step_motor_easy_move_to_end_point(0x022c, "step_motor_easy_move_to_end_point"),// step_motor_read_tmc5130_status(0x0232, "step_motor_read_tmc5130_status"),// step_motor_read_tmc5130_state(0x0233, "step_motor_read_tmc5130_state"),// @@ -98,9 +98,9 @@ public enum CmdId { mini_servo_rotate_with_torque(0x660b, "mini_servo_rotate_with_torque"),// mini_servo_set_cur_pos(0x660c, "mini_servo_set_cur_pos"),// // - extboard_read_inio(0x6701, "extboard_read_inio"),// + extboard_read_inio(0x6701, "extboard_read_inio", true),// extboard_write_outio(0x6702, "extboard_write_outio"),// - extboard_read_muti_inio(0x6703, "extboard_read_muti_inio"),// + extboard_read_muti_inio(0x6703, "extboard_read_muti_inio", true),// extboard_read_inio_index_in_stm32(0x6704, "extboard_read_inio_index_in_stm32"),// extboard_read_outio_index_in_stm32(0x6705, "extboard_read_outio_index_in_stm32"),// extboard_read_outio(0x6706, "extboard_read_outio"),// @@ -140,23 +140,40 @@ public enum CmdId { public final static int ATTACH_IS_BYTES = 1; public final static int ATTACH_IS_INT32 = 2; - public int index; - public String chName; - public int cmdAttachType = ATTACH_IS_INT32; - public int receiptAttachType = ATTACH_IS_INT32; + public int index; + public String chName; + public int cmdAttachType = ATTACH_IS_INT32; + public int receiptAttachType = ATTACH_IS_INT32; + public boolean notTrace = false; + public boolean actionCmd = true; - CmdId(int index, String name) { + CmdId(int index, String chname) { this.index = index; - this.chName = chName; + this.chName = chname; } - CmdId(int index, String name, int cmdAttachType, int receiptAttachType) { + CmdId(int index, String chname, boolean notTrace) { + this.index = index; + this.chName = chname; + this.notTrace = notTrace; + this.actionCmd = !notTrace; + } + + CmdId(int index, String chname, int cmdAttachType, int receiptAttachType) { this.index = index; - this.chName = chName; + this.chName = chname; this.cmdAttachType = cmdAttachType; this.receiptAttachType = receiptAttachType; } + CmdId(int index, String chname, int cmdAttachType, int receiptAttachType, boolean notTrace) { + this.index = index; + this.chName = chname; + this.cmdAttachType = cmdAttachType; + this.receiptAttachType = receiptAttachType; + this.notTrace = notTrace; + } + public int toInt() { return index; @@ -185,5 +202,9 @@ public enum CmdId { return chName; } + public Boolean eq(Integer index) { + return this.index == index; + } + } diff --git a/src/main/java/a8k/base_hardware/A8kCanBusService.java b/src/main/java/a8k/base_hardware/A8kCanBusService.java index 4257995..3397153 100644 --- a/src/main/java/a8k/base_hardware/A8kCanBusService.java +++ b/src/main/java/a8k/base_hardware/A8kCanBusService.java @@ -208,11 +208,11 @@ public class A8kCanBusService { } - public void moduleSetReg(MId id, RegIndex regindex, int reg) throws HardwareException { + public void moduleSetReg(MId id, RegIndex regindex, Integer reg) throws HardwareException { callcmd(id.toInt(), CmdId.module_set_reg.toInt(), regindex.index, reg); } - public int moduleGetReg(MId id, RegIndex regindex) throws HardwareException { + public Integer moduleGetReg(MId id, RegIndex regindex) throws HardwareException { var packet = callcmd(id.toInt(), CmdId.module_get_reg.toInt(), regindex.index); return packet.getContentI32(0); } @@ -444,7 +444,7 @@ public class A8kCanBusService { public void waitForMod(MId mid, Integer acitionOvertime) throws InterruptedException, HardwareException { long startedAt = System.currentTimeMillis(); - +// Thread.sleep(300); // CmdId action = lastCmdMap.get(mid); CmdId action = lastCmdMapGet(mid); do { @@ -583,12 +583,16 @@ public class A8kCanBusService { isWaitingReceipt = true; String txpacket = pack.toByteString(); - if (debugFlag && pack.getCmdId() != CmdId.module_get_status.toInt()) { + CmdId cmdid = CmdId.valueOf(pack.getCmdId()); + if (cmdid == null) { + throw new HardwareException(MId.valueOf(pack.getModuleId()), A8kEcode.CmdIdNotSupport); + } + if (debugFlag && !cmdid.notTrace) { String packstr = pack.toString(); logger.info("Tx:|RAW:{}| {}", txpacket, packstr); } - if (pack.getCmdId() != CmdId.module_get_status.toInt()) { + if (cmdid.actionCmd) { lastCmdMapPut(MId.valueOf(pack.getModuleId()), CmdId.valueOf(pack.getCmdId())); } @@ -633,7 +637,13 @@ public class A8kCanBusService { A8kPacket packet = new A8kPacket(rx); - if (debugFlag && packet.getCmdId() != CmdId.module_get_status.toInt()) { + CmdId cmdid = CmdId.valueOf(packet.getCmdId()); + if (cmdid == null) { + logger.warn("Rx packet cmdid not support: {}", packet.getCmdId()); + return; + } + + if (debugFlag && !cmdid.notTrace) { logger.info("RX |RAW:{}| {}", s, packet); } diff --git a/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java b/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java index 863da5a..4fc98b9 100644 --- a/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java +++ b/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java @@ -4,15 +4,19 @@ import a8k.a8k_can_protocol.*; import a8k.appbean.HardwareException; import a8k.appbean.ecode.AppRet; import a8k.base_hardware.A8kCanBusService; -import a8k.service.db.dao.A8kTubeInfoDao; -import a8k.service.db.dao.MotorTubeRackMoveCtrlServiceParameterDao; -import com.iflytop.uf.util.UfCommon; +import a8k.utils.*; import jakarta.annotation.Resource; -import org.springframework.beans.factory.annotation.Autowired; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Component +@HardwareService(name = "进出料控制模组") +@HardwareServiceParams(service = MotorTubeRackMoveCtrlService.class) public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule { + HardwareParamReader hpReader = new HardwareParamReader(SamplesPreProcessModuleCtrlService.class); + static Logger logger = LoggerFactory.getLogger(MotorTubeRackMoveCtrlService.class); + /** * * 主要用来控制试管架的平移动作控制 @@ -27,18 +31,70 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule { * 2. 扫码时试管夹紧夹紧 */ - - @Autowired - A8kTubeInfoDao tubeInfoDao; - @Resource - private A8kCanBusService canBus; - @Resource - MotorTubeRackMoveCtrlServiceParameterDao paramDao; - + private A8kCanBusService canBus; @Resource private CommonHardwareOpeartion comHardwareOpear; + @HardwareServiceParam(name = "超时时间", group = "基础参数") + public Integer getActionOvertime() { + return 10000; + } + + @HardwareServiceParam(name = "入料X位置", group = "试管架位置信息") + public Integer getTREnterXPos() { + return -51; + } + + // public void setTREnterXPos(Integer val){ + // return; + // } + + @HardwareServiceParam(name = "出料X位置", group = "试管架位置信息") + public Integer getTRExitXPos() { + return 0; + } + + @HardwareServiceParam(name = "试管架扫码X位置", group = "试管架位置信息") + public Integer getTRScanXPos() { + return 0; + } + + @HardwareServiceParam(name = "试管扫码位置", group = "试管位置信息") + public Integer getTScanXPos() { + return 0; + } + + @HardwareServiceParam(name = "试管高度判断位置", group = "试管位置信息") + public Integer getTAltitJudgXPos() { + return 0; + } + + @HardwareServiceParam(name = "试管是否存在判断位置", group = "试管位置信息") + public Integer getTExistJudgXPos() { + return 0; + } + + @HardwareServiceParam(name = "试管预处理位置", group = "试管位置信息") + public Integer getTPreProcessXPos() { + return 0; + } + + @HardwareServiceParam(name = "试管架孔间距", group = "其他") + public Integer getTubeSpacing() { + return 0; + } + + @HardwareServiceParam(name = "扫码舵机转速(0..900)", group = "其他") + public Integer getTubeScanServoTorque() { + return 300; + } + + @HardwareServiceParam(name = "试管扫码超时时间", group = "其他") + public Integer getTubeScanOvertime() { + return 1000; + } + /*========================================================================================= * Overrid *========================================================================================*/ @@ -49,6 +105,7 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule { * @throws HardwareException 硬件异常 */ @Override + @HardwareServiceAction(name = "模块使能", group = "基础操作") public void modGroupEnable(Boolean enable) throws HardwareException { comHardwareOpear.enableAllMotor(enable); } @@ -58,26 +115,32 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule { * @throws HardwareException 硬件异常 */ @Override + @HardwareServiceAction(name = "模块停止", group = "基础操作") public void modGroupStop() throws HardwareException { comHardwareOpear.forceStopAllMOtor(); } + @Override + @HardwareServiceAction(name = "模块归零", group = "基础操作") public void modGroupMoveToZero() throws HardwareException, InterruptedException { - if (!canBus.stepMotorReadIoState(MId.ShakeModGripperZM, 0)) { - throw new HardwareException(A8kEcode.ShakeModGripperZMNotInZeroPos); - } - canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, paramDao.getScanCodeReleasePos()); - canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, paramDao.getActionOvertime()); - + // if (!canBus.stepMotorReadIoState(MId.ShakeModGripperZM, 0)) { + // throw new HardwareException(A8kEcode.ShakeModGripperZMNotInZeroPos); + // } + canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 1); + canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, 0); + canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, getActionOvertime()); + + canBus.stepMotorEnable(MId.FeedingModXM, 1); canBus.stepMotorEasyMoveToZero(MId.FeedingModXM); - canBus.waitForMod(MId.FeedingModXM, paramDao.getActionOvertime()); + canBus.waitForMod(MId.FeedingModXM, getActionOvertime()); } @Override + @HardwareServiceAction(name = "模块快速归零", group = "基础操作") public void modGroupMoveToZeroQuick() throws HardwareException, InterruptedException { moveTubeRackTo(0); canBus.stepMotorEasyMoveToZero(MId.FeedingModXM); - canBus.waitForMod(MId.FeedingModXM, paramDao.getActionOvertime()); + canBus.waitForMod(MId.FeedingModXM, getActionOvertime()); } @@ -91,57 +154,108 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule { * @throws HardwareException 硬件异常 * @throws InterruptedException 打断异常 */ - public void moveTubeRackTo(int pos) throws HardwareException, InterruptedException { - if (!canBus.stepMotorReadIoState(MId.ShakeModGripperZM, 0)) { - throw new HardwareException(A8kEcode.ShakeModGripperZMNotInZeroPos); - } + @HardwareServiceAction(name = "移动到X", group = "模块基础动作") + public void moveTubeRackTo(Integer pos) throws HardwareException, InterruptedException { + // if (!canBus.stepMotorReadIoState(MId.ShakeModGripperZM, 0)) { + // throw new HardwareException(A8kEcode.ShakeModGripperZMNotInZeroPos); + // } scanClampModRelease(); - + canBus.stepMotorEnable(MId.FeedingModXM, 1); canBus.stepMotorEasyMoveTo(MId.FeedingModXM, pos); - canBus.waitForMod(MId.FeedingModXM, paramDao.getActionOvertime()); + canBus.waitForMod(MId.FeedingModXM, getActionOvertime()); } /** * 扫描夹紧机构夹紧 */ + @HardwareServiceAction(name = "扫描夹紧机构夹紧", group = "模块基础动作") public void scanClampModClamp() throws HardwareException, InterruptedException { - canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, paramDao.getScanCodeClampPos()); - canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, paramDao.getActionOvertime()); + canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 1); + canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, 900); + canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, getActionOvertime()); } /** * 扫描夹紧机构复位 */ + @HardwareServiceAction(name = "扫描夹紧机构复位", group = "模块基础动作") public void scanClampModRelease() throws HardwareException, InterruptedException { - canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, paramDao.getScanCodeReleasePos()); - canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, paramDao.getActionOvertime()); + canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 1); + canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, 0); + canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, getActionOvertime()); } + /** + * 入料 + */ + @HardwareServiceAction(name = "入料", group = "模块基础动作") + public void tryEnterTubeRack(Integer time) throws HardwareException, InterruptedException { + try { + canBus.stepMotorEasyRotate(MId.FeedingModInfeedM, 1); + Thread.sleep(time); + } finally { + canBus.moduleStop(MId.FeedingModInfeedM); + } + } + + /** + * 出料 + */ + @HardwareServiceAction(name = "出料", group = "模块基础动作") + public void tryEjectTubeRack(Integer time) throws HardwareException, InterruptedException { + try { + canBus.stepMotorEasyRotate(MId.FeedingModOutfeedM, 1); + Thread.sleep(time); + } finally { + canBus.moduleStop(MId.FeedingModOutfeedM); + } + } + + @HardwareServiceAction(name = "通过归零读取当前电机位置", group = "模块基础动作") + public AppRet readXPosByMoveZero() throws HardwareException, InterruptedException { + + + canBus.stepMotorEnable(MId.FeedingModXM, 1); + canBus.stepMotorEasyMoveToZero(MId.FeedingModXM); + canBus.waitForMod(MId.FeedingModXM, getActionOvertime()); + canBus.stepMotorEnable(MId.FeedingModXM, 0); + return AppRet.success(-canBus.moduleGetReg(MId.FeedingModXM, RegIndex.kreg_step_motor_dpos)); + } + + + + + /*========================================================================================= + * 片段 + *========================================================================================*/ /** * 移动试管架到入口位置 */ + @HardwareServiceAction(name = "移动<试管架>到入口位置", group = "片段") public void tubeRackMoveToEnterPos() throws HardwareException, InterruptedException { - moveTubeRackTo(paramDao.getTubeRackEnterPos()); + moveTubeRackTo(getTREnterXPos()); } /** - * 移动试管架到出口位置 + * 移动<试管架>到出口位置 */ + @HardwareServiceAction(name = "移动<试管架>到出口位置", group = "片段") public void moveTubeRackToExitPos() throws HardwareException, InterruptedException { - moveTubeRackTo(paramDao.getTubeRackExitPos()); + moveTubeRackTo(getTRExitXPos()); } /** - * 移动试管架到试管架扫码位置 + * 移动<试管架>到试管架扫码位置 */ - public void moveTubeRackToScanPos() throws HardwareException, InterruptedException { - moveTubeRackTo(paramDao.getTubeRackScanCodePos()); + private void moveTubeRackToScanPos() throws HardwareException, InterruptedException { + moveTubeRackTo(getTRScanXPos()); } /** - * 移动试管架到试管架扫码并扫码 + * 移动试管架到扫码并扫码 */ + @HardwareServiceAction(name = "扫描试管架编码", group = "片段") public AppRet moveTubeRackToScanPosAndScan() throws HardwareException, InterruptedException { String result; moveTubeRackToScanPos(); @@ -152,7 +266,6 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule { scanClampModRelease(); return AppRet.success(result); } - // // 试管移动 // @@ -161,10 +274,10 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule { * 移动试管到扫码位置 * @param tubeIndex 试管索引 */ - public AppRet moveTubeToScanPos(Integer tubeIndex) throws HardwareException, InterruptedException { - var scanPos = paramDao.getTubeScanPos() + tubeIndex * paramDao.getTubeSpacing(); + private AppRet moveTubeToScanPos(Integer tubeIndex) throws HardwareException, InterruptedException { + var scanPos = getTScanXPos() + tubeIndex * getTubeSpacing(); canBus.stepMotorEasyMoveTo(MId.FeedingModXM, scanPos); - canBus.waitForMod(MId.FeedingModXM, paramDao.getActionOvertime()); + canBus.waitForMod(MId.FeedingModXM, getActionOvertime()); return AppRet.success(); } @@ -172,6 +285,7 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule { * 移动试管到扫码位置,并扫码 * @param tubeIndex 试管索引 */ + @HardwareServiceAction(name = "扫描<试管X>编码", group = "片段") public AppRet moveTubeToScanPosAndScan(Integer tubeIndex) throws HardwareException, InterruptedException { var ret = this.moveTubeToScanPos(tubeIndex); if (!ret.isSuccess()) {return AppRet.fail(ret);} @@ -179,8 +293,8 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule { try { scanClampModClamp(); canBus.codeScanerStartScan(MId.FeedingModScannerMod); - canBus.miniServoRotateWithTorque(MId.ShakeModTubeScanerClampingSV, paramDao.getTubeScanServoTorque()); - String result = canBus.codeScanerWaittingForResult(MId.FeedingModScannerMod, paramDao.getTubeScanOvertime()); + canBus.miniServoRotateWithTorque(MId.ShakeModTubeScanerClampingSV, getTubeScanServoTorque()); + String result = canBus.codeScanerWaittingForResult(MId.FeedingModScannerMod, getTubeScanOvertime()); return AppRet.success(result); } finally { canBus.moduleStop(MId.ShakeModTubeScanerClampingSV); @@ -193,66 +307,57 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule { * 移动试管到试管高低判断位置 * @param tubeIndex 试管索引 */ - public void moveTubeToHeighJudgmentPos(Integer tubeIndex) throws HardwareException, InterruptedException { - moveTubeRackTo(paramDao.getTubeHeighJudgmentPos() + tubeIndex * paramDao.getTubeSpacing()); + @HardwareServiceAction(name = "判断<试管N>位置", group = "片段") + public AppRet moveTubeToAltitJudgXPos(Integer tubeIndex) throws HardwareException, InterruptedException { + moveTubeRackTo(getTAltitJudgXPos() + tubeIndex * getTubeSpacing()); + return AppRet.success(isHighTube()); } /** * 移动试管到试管预处理的位置 * @param tubeIndex 试管索引 */ + @HardwareServiceAction(name = "移动<试管N>摇匀位", group = "片段") public void moveTubeToPreProcessPos(Integer tubeIndex) throws HardwareException, InterruptedException { - moveTubeRackTo(paramDao.getTubePreProcessPos() + tubeIndex * paramDao.getTubeSpacing()); + moveTubeRackTo(getTPreProcessXPos() + tubeIndex * getTubeSpacing()); } /** * 移动试管到试管有无判断位置 * @param tubeIndex 试管索引 */ - public void moveTubeToExistJudgmentPos(Integer tubeIndex) throws HardwareException, InterruptedException { - moveTubeRackTo(paramDao.getTubeExistJudgmentPos() + tubeIndex * paramDao.getTubeSpacing()); - } - - public void tryEnterTubeRack(Integer time) throws HardwareException, InterruptedException { - try { - canBus.stepMotorEasyRotate(MId.FeedingModInfeedM, 1); - Thread.sleep(time); - } finally { - canBus.moduleStop(MId.FeedingModInfeedM); - } + @HardwareServiceAction(name = "判断<试管N>是否存在", group = "片段") + public AppRet judgeTubeExist(Integer tubeIndex) throws HardwareException, InterruptedException { + moveTubeRackTo(getTExistJudgXPos() + tubeIndex * getTubeSpacing()); + return AppRet.success(isTubeRackInEnterPos()); } - public void tryEjectTubeRack(Integer time) throws HardwareException, InterruptedException { - try { - canBus.stepMotorEasyRotate(MId.FeedingModOutfeedM, 1); - Thread.sleep(time); - } finally { - canBus.moduleStop(MId.FeedingModOutfeedM); - } - } - // // 状态 // - - public AppRet isTubeRackInEnterPos() throws HardwareException { - return AppRet.success(canBus.getIOState(IOId.InfeedPPS)); + @HardwareServiceStatus(name = "入口光电") + public Boolean isTubeRackInEnterPos() throws HardwareException { + return canBus.getIOState(IOId.InfeedPPS); } - public AppRet isTubeRackInExitPos() throws HardwareException { - return AppRet.success(canBus.getIOState(IOId.OutfeedPPS)); + @HardwareServiceStatus(name = "出口光电") + public Boolean isTubeRackInExitPos() throws HardwareException { + return canBus.getIOState(IOId.OutfeedPPS); } - public AppRet isHighTube() throws HardwareException { - return AppRet.success(canBus.getIOState(IOId.TubeHeightPPS)); + @HardwareServiceStatus(name = "高低判读光电") + public Boolean isHighTube() throws HardwareException { + return canBus.getIOState(IOId.TubeHeightPPS); } - public AppRet getTHchOuterPPS() throws HardwareException { - return AppRet.success(canBus.getIOState(IOId.THChOuterPPS)); + @HardwareServiceStatus(name = "通道外光电") + public Boolean getTHchOuterPPS() throws HardwareException { + return canBus.getIOState(IOId.THChOuterPPS); } - public AppRet getTHchInterPPS() throws HardwareException { - return AppRet.success(canBus.getIOState(IOId.THChInterPPS)); + @HardwareServiceStatus(name = "通道内光电") + public Boolean getTHchInterPPS() throws HardwareException { + return canBus.getIOState(IOId.THChInterPPS); } } diff --git a/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java b/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java index 07bfe1d..87bfe1b 100644 --- a/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java +++ b/src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java @@ -37,7 +37,7 @@ public class ReactionPlatesTransmitCtrlService { 基础操作 =======================================================================================*/ - AppRet moduleReset() throws HardwareException, InterruptedException { + AppRet moduleReset() throws HardwareException, InterruptedException { //光电状态检查 //试管平移通道是否有障碍 if (canBus.getIOState(IOId.THChInterPPS) || canBus.getIOState(IOId.THChOuterPPS)) { diff --git a/zhaohe_app.db b/zhaohe_app.db index a582a92986dd929a38e5cc12c9288ed5b396e6d7..d61438ec16c63913a6fa9c19bf0773054aff42b9 100644 GIT binary patch delta 1007 zcmZozAlvXjc7l{pgE|8PLpcza05LBR&zq=Y#MGd^F<}WmA1m)k2L6NmHhky!B6v@3 z78KadTi?jT%FQSqD_qLLYt6{XYG`1fXP8`+npl#mP?DIGld9m6Sd>zpSdK4Cx&@rLp75H0awE%A7?=oJ^{ERgR?FfuSQ(KRsF6)-YUFfg|= zG_*1@)-yCW-HU;j#f^dOKbtn|CzeVUH@**iTe)Mn zxw-T>?{Zpl{9*TE_u8&Dfl-B>g*TsZ6EHN^F>e1egRz)}g@J+54aj$5WV4iH6Zci0 z{;`u$X0iY;$M*a47!@yWGhk;C*v`_x^v8eG0}$&0(;xlKf*0QNZ&tYQfPb=rfZ?PM zEZbQOnE%*MKeT~O6fBG&fC{{qEnqePYXNcuw>@BH6fk5~W#DGo$iRD#cQubN_YU^m z9Ltz5us1PnWSh@i$P|SMfljPvn!fQ9a|sLc2?n3Zf&w0Fq4jLyna&^wOE}_*hIm6f zl6ox57&w4Qhhh4K&&=0YIPNq41X}f#vA!{(j$Pc@nX$HZYq*! zSz=B|WdWK9RDSw`-^`-h8@@BgGqUh^Fx>=t@hTHrWImgCuKVc&0-XqzW+Zn z`}QxtnWr!VQw2i>FpNtkJpjgS0n;CTM3ke%ZDCsgOIrZzvH-RR4xms30v;fC24W{5 tb_HS=AO>a9G9b1DVhbR)17a&6HU?rNAO_0=llB4rWe)5D2)jVZ3jm8AJZAs^ delta 4676 zcmd56`t7{&#d<`vm2)@c5S-0?8Yd*$=rF|nL#P>);MuQ5^bE_*hy<`=IN%1 zAB{~Ryf(H)3Ti8*xavZXP?3tMS_l}68iZ7dmfzt1sSqgCLPAI>h7eFw30L9Xojf*< zHyMc^V9Ano=J=cQo%78--#xq9cJ}4A^DSG-mne$*9R9ue^WqCVa-@7|@%SrZf)$1- z@mJz5;WxtYQhRnlSQ`Gs59tIeUZ%u#@dNRSczG$k`g?Ky^3E0=|~Ca7Fl8^4H0U_~Y?-Y)9jzMl-s;{P20YlTXd< z9N;sKLw~Jn+Oki1rONJgrcEeKoN`ODB&!mFdJt>7BPRC^_U8)y*+TBo{r%aFASHcA zN=LRkSxH}GJ~rRWvz3K)rm3=Yf!ahcIv7kisZd^`5G@KxcIa7-9jYEL~AV}%#! zcjwzvozc1N5ngOcrBKfJbr0n|f>{ z)euCqf+A@_gyjfQTFnpcm(=lz$41f&i8Q5^!r=i)sU}erJ%LL&NiVEMq}F7jg^I;@ zQSsN~yTtQiR``j~n_NjAPh3fy#aR!&{Sm8Hh|=MK2V_{ z1KYJ-pjkRXlIi=d2_47xaE=TVAJ6Yj*luc-{+c-jL`vhw2E!m zx*{360}Ny$p!&!JCiETPLJuKTk)VmZP}slS*3ewW;`fUWrjv9P+mda?H4OwH@>HPe zjsy(P(|~Lu%a%PGsdA{ghjRN0`ws3MpJ+UgJ6O!^ACCnL?t053|J7?ME6=elN5&g# z!F^rEJvJp^BhLc3s}`^|MFEix z*p{g~vJE{T`!>XN8!oVYO9Qs2`U=uC!$EQ=?3pJUFm^*NwxS@(kPHQQSS~=dT`Wh% zw1K4S(14PSPemgX_B*Wvo2|u`CEIh6=K>XL9m~pY6Sg zBWaE&ONFZ0D(QwBq1$UE%~lr_RkK&NFeHTkv1YN%^+cj%{ZM3+U8HF$*j#uO{!c4- zm0qS_X0GqVb-c04&?&&NR8wS;62G4OWAgPxQ~c+#*J6hnd!v8he;HlizR5kpUS}7W z6@HfKiY($j%|$AUSDESZO!t@hjHb~uQ#TBTadL8^#-Qj>DOq>NrZ*U*O;U(KieUdeJge}h}DLU-3ldRpRBC>lX;gLI>Tj7_Sd+o z6K=_Q;>2Wa(UOW?Rp6`YJnf&2e1XsO_tSIyZD&;{x9ZO}dnV)8d}d=Ou+Q5p7pLB7 z8Kr+QgUm_qOy&Ixbe4_2N15~ODIjoP;jpqP>hR|`n8!Mxb&FH`X2zZl%%gWdio_Cb zivK8K*S*0!Zkl-)xkHr?F3=Aw&t79jXaN(75>`V~8-};JC6@1Hic9jRXNA+j@E*F& ztR7N5ySu|I$)DO}cy(}yIi9Y3=|g5aH}q5}5;qmNIUqD=tKNZS*Sgx4qY8PdQ-Kym|K-O*SS3TDS*ceE__gqJX z$aj3zdSa??FyEIO$n~kHNHjw(YCtjp)U`ar6}Mv?U&5Z-kZhp44mORpi?I2^?hZN7 zP@oSLY#pmOWzUtMTmyM8L^?pk z6p@S<8gTNqi!CCw5n-zUS;p1~-y(ENlEOg}zruM$*< z?&>g&sP1a@Ho^M*0zJG*i9ZsLiM;S8uKc1<-ple;Jy2oFzn35mF?>}JR2X`Hzp%&YMJfj H*Tw$;=f~4X