Browse Source

更新参数

tags/v0
zhaohe 1 year ago
parent
commit
17268b9d46
  1. 1
      src/main/java/a8k/a8k_can_protocol/A8kEcode.java
  2. 2
      src/main/java/a8k/a8k_can_protocol/A8kPacket.java
  3. 49
      src/main/java/a8k/a8k_can_protocol/CmdId.java
  4. 22
      src/main/java/a8k/base_hardware/A8kCanBusService.java
  5. 259
      src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java
  6. 2
      src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java
  7. BIN
      zhaohe_app.db

1
src/main/java/a8k/a8k_can_protocol/A8kEcode.java

@ -26,6 +26,7 @@ public enum A8kEcode {
MNotInZeroPos(20, "电机没有在零点"),// MNotInZeroPos(20, "电机没有在零点"),//
TubeXChannelIsNotEmpty(21, "试管架平移通道不为空"),// TubeXChannelIsNotEmpty(21, "试管架平移通道不为空"),//
TubeTypeNotSupport(22, "试管类型不支持"),// TubeTypeNotSupport(22, "试管类型不支持"),//
CmdIdNotSupport(23, "不支持指令"),//
// //
// FOR HARDWARE // FOR HARDWARE
// //

2
src/main/java/a8k/a8k_can_protocol/A8kPacket.java

@ -76,7 +76,7 @@ public class A8kPacket {
} }
public int getContentI32(int index) { public int getContentI32(int index) {
return ByteArray.readU16bit(raw, 8 + index * 4);
return ByteArray.read32bit(raw, 8 + index * 4);
} }
public String toByteString() { public String toByteString() {

49
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"),// event_bus_reg_change_report(0x0064, "event_bus_reg_change_report"),//
// //
module_ping(0x0100, "module_ping"),// 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_stop(0x0101, "module_stop"),//
module_set_reg(0x0105, "module_set_reg"),// module_set_reg(0x0105, "module_set_reg"),//
module_get_reg(0x0106, "module_get_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_clear_error(0x010b, "module_clear_error"),//
module_active_cfg(0x0110, "module_active_cfg"),// module_active_cfg(0x0110, "module_active_cfg"),//
// //
@ -23,7 +23,7 @@ public enum CmdId {
xymotor_move_to_zero(0x0304, "xymotor_move_to_zero"),// xymotor_move_to_zero(0x0304, "xymotor_move_to_zero"),//
xymotor_read_pos(0x0306, "xymotor_read_pos"),// xymotor_read_pos(0x0306, "xymotor_read_pos"),//
xymotor_read_inio_index_in_stm32(0x0307, "xymotor_read_inio_index_in_stm32"),// 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_set_pos(0x0309, "xymotor_set_pos"),//
xymotor_motor_move_by_direct(0x030a, "xymotor_motor_move_by_direct"),// xymotor_motor_move_by_direct(0x030a, "xymotor_motor_move_by_direct"),//
xymotor_read_enc_direct(0x030b, "xymotor_read_enc_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_easy_move_to_io(0x0216, "step_motor_easy_move_to_io"),//
step_motor_stop(0x0228, "step_motor_stop"),// step_motor_stop(0x0228, "step_motor_stop"),//
step_motor_active_cfg(0x0229, "step_motor_active_cfg"),// 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_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_status(0x0232, "step_motor_read_tmc5130_status"),//
step_motor_read_tmc5130_state(0x0233, "step_motor_read_tmc5130_state"),// 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_rotate_with_torque(0x660b, "mini_servo_rotate_with_torque"),//
mini_servo_set_cur_pos(0x660c, "mini_servo_set_cur_pos"),// 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_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_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_index_in_stm32(0x6705, "extboard_read_outio_index_in_stm32"),//
extboard_read_outio(0x6706, "extboard_read_outio"),// 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_BYTES = 1;
public final static int ATTACH_IS_INT32 = 2; 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.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.index = index;
this.chName = chName;
this.chName = chname;
this.cmdAttachType = cmdAttachType; this.cmdAttachType = cmdAttachType;
this.receiptAttachType = receiptAttachType; 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() { public int toInt() {
return index; return index;
@ -185,5 +202,9 @@ public enum CmdId {
return chName; return chName;
} }
public Boolean eq(Integer index) {
return this.index == index;
}
} }

22
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); 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); var packet = callcmd(id.toInt(), CmdId.module_get_reg.toInt(), regindex.index);
return packet.getContentI32(0); return packet.getContentI32(0);
} }
@ -444,7 +444,7 @@ public class A8kCanBusService {
public void waitForMod(MId mid, Integer acitionOvertime) throws InterruptedException, HardwareException { public void waitForMod(MId mid, Integer acitionOvertime) throws InterruptedException, HardwareException {
long startedAt = System.currentTimeMillis(); long startedAt = System.currentTimeMillis();
// Thread.sleep(300);
// CmdId action = lastCmdMap.get(mid); // CmdId action = lastCmdMap.get(mid);
CmdId action = lastCmdMapGet(mid); CmdId action = lastCmdMapGet(mid);
do { do {
@ -583,12 +583,16 @@ public class A8kCanBusService {
isWaitingReceipt = true; isWaitingReceipt = true;
String txpacket = pack.toByteString(); 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(); String packstr = pack.toString();
logger.info("Tx:|RAW:{}| {}", txpacket, packstr); 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())); lastCmdMapPut(MId.valueOf(pack.getModuleId()), CmdId.valueOf(pack.getCmdId()));
} }
@ -633,7 +637,13 @@ public class A8kCanBusService {
A8kPacket packet = new A8kPacket(rx); 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); logger.info("RX |RAW:{}| {}", s, packet);
} }

259
src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java

@ -4,15 +4,19 @@ import a8k.a8k_can_protocol.*;
import a8k.appbean.HardwareException; import a8k.appbean.HardwareException;
import a8k.appbean.ecode.AppRet; import a8k.appbean.ecode.AppRet;
import a8k.base_hardware.A8kCanBusService; 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 jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
@HardwareService(name = "进出料控制模组")
@HardwareServiceParams(service = MotorTubeRackMoveCtrlService.class)
public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule { 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. 扫码时试管夹紧夹紧 * 2. 扫码时试管夹紧夹紧
*/ */
@Autowired
A8kTubeInfoDao tubeInfoDao;
@Resource @Resource
private A8kCanBusService canBus;
@Resource
MotorTubeRackMoveCtrlServiceParameterDao paramDao;
private A8kCanBusService canBus;
@Resource @Resource
private CommonHardwareOpeartion comHardwareOpear; 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 * Overrid
*========================================================================================*/ *========================================================================================*/
@ -49,6 +105,7 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule {
* @throws HardwareException 硬件异常 * @throws HardwareException 硬件异常
*/ */
@Override @Override
@HardwareServiceAction(name = "模块使能", group = "基础操作")
public void modGroupEnable(Boolean enable) throws HardwareException { public void modGroupEnable(Boolean enable) throws HardwareException {
comHardwareOpear.enableAllMotor(enable); comHardwareOpear.enableAllMotor(enable);
} }
@ -58,26 +115,32 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule {
* @throws HardwareException 硬件异常 * @throws HardwareException 硬件异常
*/ */
@Override @Override
@HardwareServiceAction(name = "模块停止", group = "基础操作")
public void modGroupStop() throws HardwareException { public void modGroupStop() throws HardwareException {
comHardwareOpear.forceStopAllMOtor(); comHardwareOpear.forceStopAllMOtor();
} }
@Override @Override
@HardwareServiceAction(name = "模块归零", group = "基础操作")
public void modGroupMoveToZero() throws HardwareException, InterruptedException { 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.stepMotorEasyMoveToZero(MId.FeedingModXM);
canBus.waitForMod(MId.FeedingModXM, paramDao.getActionOvertime());
canBus.waitForMod(MId.FeedingModXM, getActionOvertime());
} }
@Override @Override
@HardwareServiceAction(name = "模块快速归零", group = "基础操作")
public void modGroupMoveToZeroQuick() throws HardwareException, InterruptedException { public void modGroupMoveToZeroQuick() throws HardwareException, InterruptedException {
moveTubeRackTo(0); moveTubeRackTo(0);
canBus.stepMotorEasyMoveToZero(MId.FeedingModXM); 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 HardwareException 硬件异常
* @throws InterruptedException 打断异常 * @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(); scanClampModRelease();
canBus.stepMotorEnable(MId.FeedingModXM, 1);
canBus.stepMotorEasyMoveTo(MId.FeedingModXM, pos); 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 { 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 { 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<Integer> 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 { public void tubeRackMoveToEnterPos() throws HardwareException, InterruptedException {
moveTubeRackTo(paramDao.getTubeRackEnterPos());
moveTubeRackTo(getTREnterXPos());
} }
/** /**
* 移动试管架到出口位置
* 移动<试管架>到出口位置
*/ */
@HardwareServiceAction(name = "移动<试管架>到出口位置", group = "片段")
public void moveTubeRackToExitPos() throws HardwareException, InterruptedException { 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<String> moveTubeRackToScanPosAndScan() throws HardwareException, InterruptedException { public AppRet<String> moveTubeRackToScanPosAndScan() throws HardwareException, InterruptedException {
String result; String result;
moveTubeRackToScanPos(); moveTubeRackToScanPos();
@ -152,7 +266,6 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule {
scanClampModRelease(); scanClampModRelease();
return AppRet.success(result); return AppRet.success(result);
} }
// //
// 试管移动 // 试管移动
// //
@ -161,10 +274,10 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule {
* 移动试管到扫码位置 * 移动试管到扫码位置
* @param tubeIndex 试管索引 * @param tubeIndex 试管索引
*/ */
public AppRet<Object> moveTubeToScanPos(Integer tubeIndex) throws HardwareException, InterruptedException {
var scanPos = paramDao.getTubeScanPos() + tubeIndex * paramDao.getTubeSpacing();
private AppRet<Object> moveTubeToScanPos(Integer tubeIndex) throws HardwareException, InterruptedException {
var scanPos = getTScanXPos() + tubeIndex * getTubeSpacing();
canBus.stepMotorEasyMoveTo(MId.FeedingModXM, scanPos); canBus.stepMotorEasyMoveTo(MId.FeedingModXM, scanPos);
canBus.waitForMod(MId.FeedingModXM, paramDao.getActionOvertime());
canBus.waitForMod(MId.FeedingModXM, getActionOvertime());
return AppRet.success(); return AppRet.success();
} }
@ -172,6 +285,7 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule {
* 移动试管到扫码位置并扫码 * 移动试管到扫码位置并扫码
* @param tubeIndex 试管索引 * @param tubeIndex 试管索引
*/ */
@HardwareServiceAction(name = "扫描<试管X>编码", group = "片段")
public AppRet<String> moveTubeToScanPosAndScan(Integer tubeIndex) throws HardwareException, InterruptedException { public AppRet<String> moveTubeToScanPosAndScan(Integer tubeIndex) throws HardwareException, InterruptedException {
var ret = this.moveTubeToScanPos(tubeIndex); var ret = this.moveTubeToScanPos(tubeIndex);
if (!ret.isSuccess()) {return AppRet.fail(ret);} if (!ret.isSuccess()) {return AppRet.fail(ret);}
@ -179,8 +293,8 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule {
try { try {
scanClampModClamp(); scanClampModClamp();
canBus.codeScanerStartScan(MId.FeedingModScannerMod); 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); return AppRet.success(result);
} finally { } finally {
canBus.moduleStop(MId.ShakeModTubeScanerClampingSV); canBus.moduleStop(MId.ShakeModTubeScanerClampingSV);
@ -193,66 +307,57 @@ public class MotorTubeRackMoveCtrlService implements HardwareCtrlModule {
* 移动试管到试管高低判断位置 * 移动试管到试管高低判断位置
* @param tubeIndex 试管索引 * @param tubeIndex 试管索引
*/ */
public void moveTubeToHeighJudgmentPos(Integer tubeIndex) throws HardwareException, InterruptedException {
moveTubeRackTo(paramDao.getTubeHeighJudgmentPos() + tubeIndex * paramDao.getTubeSpacing());
@HardwareServiceAction(name = "判断<试管N>位置", group = "片段")
public AppRet<Boolean> moveTubeToAltitJudgXPos(Integer tubeIndex) throws HardwareException, InterruptedException {
moveTubeRackTo(getTAltitJudgXPos() + tubeIndex * getTubeSpacing());
return AppRet.success(isHighTube());
} }
/** /**
* 移动试管到试管预处理的位置 * 移动试管到试管预处理的位置
* @param tubeIndex 试管索引 * @param tubeIndex 试管索引
*/ */
@HardwareServiceAction(name = "移动<试管N>摇匀位", group = "片段")
public void moveTubeToPreProcessPos(Integer tubeIndex) throws HardwareException, InterruptedException { public void moveTubeToPreProcessPos(Integer tubeIndex) throws HardwareException, InterruptedException {
moveTubeRackTo(paramDao.getTubePreProcessPos() + tubeIndex * paramDao.getTubeSpacing());
moveTubeRackTo(getTPreProcessXPos() + tubeIndex * getTubeSpacing());
} }
/** /**
* 移动试管到试管有无判断位置 * 移动试管到试管有无判断位置
* @param tubeIndex 试管索引 * @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<Boolean> 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<Boolean> isTubeRackInEnterPos() throws HardwareException {
return AppRet.success(canBus.getIOState(IOId.InfeedPPS));
@HardwareServiceStatus(name = "入口光电")
public Boolean isTubeRackInEnterPos() throws HardwareException {
return canBus.getIOState(IOId.InfeedPPS);
} }
public AppRet<Boolean> isTubeRackInExitPos() throws HardwareException {
return AppRet.success(canBus.getIOState(IOId.OutfeedPPS));
@HardwareServiceStatus(name = "出口光电")
public Boolean isTubeRackInExitPos() throws HardwareException {
return canBus.getIOState(IOId.OutfeedPPS);
} }
public AppRet<Boolean> isHighTube() throws HardwareException {
return AppRet.success(canBus.getIOState(IOId.TubeHeightPPS));
@HardwareServiceStatus(name = "高低判读光电")
public Boolean isHighTube() throws HardwareException {
return canBus.getIOState(IOId.TubeHeightPPS);
} }
public AppRet<Boolean> getTHchOuterPPS() throws HardwareException {
return AppRet.success(canBus.getIOState(IOId.THChOuterPPS));
@HardwareServiceStatus(name = "通道外光电")
public Boolean getTHchOuterPPS() throws HardwareException {
return canBus.getIOState(IOId.THChOuterPPS);
} }
public AppRet<Boolean> getTHchInterPPS() throws HardwareException {
return AppRet.success(canBus.getIOState(IOId.THChInterPPS));
@HardwareServiceStatus(name = "通道内光电")
public Boolean getTHchInterPPS() throws HardwareException {
return canBus.getIOState(IOId.THChInterPPS);
} }
} }

2
src/main/java/a8k/service/hardware/ReactionPlatesTransmitCtrlService.java

@ -37,7 +37,7 @@ public class ReactionPlatesTransmitCtrlService {
基础操作 基础操作
=======================================================================================*/ =======================================================================================*/
AppRet moduleReset() throws HardwareException, InterruptedException {
AppRet<Object> moduleReset() throws HardwareException, InterruptedException {
//光电状态检查 //光电状态检查
//试管平移通道是否有障碍 //试管平移通道是否有障碍
if (canBus.getIOState(IOId.THChInterPPS) || canBus.getIOState(IOId.THChOuterPPS)) { if (canBus.getIOState(IOId.THChInterPPS) || canBus.getIOState(IOId.THChOuterPPS)) {

BIN
zhaohe_app.db

Loading…
Cancel
Save