zhaohe 1 year ago
parent
commit
2a4a2c2631
  1. 3
      src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java
  2. 389
      src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java

3
src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java

@ -1,8 +1,11 @@
package a8k.service.db.dao;
import org.springframework.stereotype.Component;
/**
* 样本预处理相关参数访问
*/
@Component
public class SamplesPreProcessModuleCtrlParamsService {
/**

389
src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java

@ -1,11 +1,28 @@
package a8k.service.hardware;
import a8k.appbean.Appecode;
import a8k.a8k_can_protocol.CmdId;
import a8k.a8k_can_protocol.Errorcode;
import a8k.a8k_can_protocol.ModuleId;
import a8k.appbean.A8kTubeType;
import a8k.appbean.AppErrorCode;
import a8k.appbean.HardwareException;
import a8k.appbean.SampleTubeState;
import a8k.base_hardware.A8kCanBusService;
import a8k.service.db.dao.A8kTubeInfoDao;
import a8k.service.db.dao.SamplesPreProcessModuleCtrlParamsService;
import com.iflytop.uf.UfActuatorCmdExecutor;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class SamplesPreProcessModuleCtrlService {
@Resource
A8kTubeInfoDao tubeInfoDao;
@Resource
private A8kCanBusService a8kCanBusService;
@Resource
private SamplesPreProcessModuleCtrlParamsService samplesPreProcessModuleCtrlParamsService;
/*
样品预处理模块
主要负责样品预处理的相关操作
@ -19,7 +36,40 @@ public class SamplesPreProcessModuleCtrlService {
/**
* 按照一定顺序归零设备
*/
public void moveToZero() {
public void moveToZero() throws HardwareException, InterruptedException {
var params = this.samplesPreProcessModuleCtrlParamsService;
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
CmdId.kmini_servo_move_to,
params.getGripperServo_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
CmdId.kmini_servo_move_to,
params.getHorizontalMotor_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeShakeModule,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeScanClampModule,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
/*
1. 假设没有试管在当前设备上的前提下归零设备
2. 舵机虽然没有零位但需要将其移动到待机位置
@ -30,8 +80,32 @@ public class SamplesPreProcessModuleCtrlService {
* 使能模组
* @param enable 是否使能模组
*/
public void enableModule(boolean enable) {
public void enableModule(boolean enable) throws HardwareException {
this.a8kCanBusService.callcmd(
ModuleId.MotorTubeShakeModule,
CmdId.kstep_motor_enable,
enable ? 1 : 0
);
this.a8kCanBusService.callcmd(
ModuleId.MotorTubeScanClampModule,
CmdId.kstep_motor_enable,
enable ? 1 : 0
);
this.a8kCanBusService.callcmd(
ModuleId.MotorTubeScanClampModule,
CmdId.kstep_motor_enable,
enable ? 1 : 0
);
this.a8kCanBusService.callcmd(
ModuleId.ServoTubeMoveFrontBackModule,
CmdId.kmini_servo_enable,
enable ? 1 : 0
);
this.a8kCanBusService.callcmd(
ModuleId.ServoTubeCapClipModule,
CmdId.kmini_servo_enable,
enable ? 1 : 0
);
}
@ -48,14 +122,103 @@ public class SamplesPreProcessModuleCtrlService {
* @param tubeType TubeType_HighBlood,TubeType_ShortBlood,TubeType_Mini,TubeType_MiniBlood,TubeType_BulletTube1P5,TubeType_BulletTube0P5
* @param judgeCapExist 是否判断试管帽子存在与否
*/
public Appecode takeTube(String tubeType,boolean judgeCapExist) {
public AppErrorCode takeTube(String tubeType,boolean judgeCapExist) throws HardwareException, InterruptedException {
var params = this.samplesPreProcessModuleCtrlParamsService;
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
CmdId.kstep_motor_easy_move_to,
params.getHorizontalMotor_takeCapPos(),
params.getActionOvertime()
);
var motorUdTubeTaskPos = params.getZMotor_ShortBloodTakeCapHeight();
var tubeTypeValue = A8kTubeType.valueOf(tubeType);
if ( tubeTypeValue.equals(A8kTubeType.HighBlood) ) {
motorUdTubeTaskPos = params.getZMotor_HighBloodTakeCapHeight();
}
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
CmdId.kstep_motor_easy_move_to,
motorUdTubeTaskPos,
params.getActionOvertime()
);
if ( judgeCapExist ) {
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeScanClampModule,
CmdId.kmini_servo_rotate_with_torque,
params.getGripperServo_takeCapTorque(),
params.getActionOvertime()
);
this.a8kCanBusService.callcmd(
ModuleId.ServoTubeCapClipModule,
CmdId.kmini_servo_stop
);
var pos = this.a8kCanBusService.callcmd(
ModuleId.ServoTubeCapClipModule,
CmdId.kmini_servo_read_pos
);
if ( pos.getContentI32(0) > params.getGripperServo_hatDeterminesPosThres() ) {
return AppErrorCode.TubeNotHasHat;
}
}
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
CmdId.kmini_servo_rotate_with_torque,
params.getGripperServo_takeCapTorque(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
CmdId.kstep_motor_easy_move_to,
0,
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
CmdId.kmini_servo_move_to,
params.getHorizontalMotor_takePushCapPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
CmdId.kstep_motor_easy_move_to,
params.getZMotor_placeShakeHeight(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
CmdId.kstep_motor_easy_move_to,
params.getGripperServo_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
CmdId.kstep_motor_easy_move_to,
0,
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
CmdId.kstep_motor_easy_move_to,
params.getHorizontalMotor_standbyPos(),
params.getActionOvertime()
);
/*
注意事项:
1. 取试管并将试管放在试管夹紧位置同时升降电机和平移电机移动到待机位
2. 试管放置的水平高度和其在试管架中的高度保持一直
3. 取试管前先通过试管夹紧功能判断一下试管帽是否存在在试管没帽的边沿位置抓手扭矩抓紧如果等待一定时间后抓手位置接近极限位置则认为没有帽子返回TubeNotHasHat错误
4. 无论是否抓取成功只要不向外抛出异常方法结束时该模块涉及到组件均需要返回待机位置
*/
return Appecode.Success;
@ -64,22 +227,108 @@ public class SamplesPreProcessModuleCtrlService {
/**
* 取试管帽
*/
public Appecode takeTubeCap() {
//
//
//
//
return Appecode.Success;
public AppErrorCode takeTubeCap( String tubeType ) throws HardwareException, InterruptedException {
var params = this.samplesPreProcessModuleCtrlParamsService;
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
CmdId.kstep_motor_easy_move_to,
params.getHorizontalMotor_takePushCapPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
CmdId.kstep_motor_easy_move_to,
params.getGripperServo_standbyPos(),
params.getActionOvertime()
);
var motorUdTakeCapPos = params.getZMotor_ShortBloodTakeCapHeight();
var tubeTypeValue = A8kTubeType.valueOf(tubeType);
if ( tubeTypeValue.equals(A8kTubeType.HighBlood) ) {
motorUdTakeCapPos = params.getZMotor_HighBloodTakeCapHeight();
}
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
CmdId.kstep_motor_easy_move_to,
motorUdTakeCapPos,
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
CmdId.kstep_motor_easy_move_to,
params.getGripperServo_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
CmdId.kstep_motor_easy_move_to,
0,
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
CmdId.kstep_motor_easy_move_to,
params.getHorizontalMotor_standbyPos(),
params.getActionOvertime()
);
return AppErrorCode.Success;
}
/**
* 盖试管帽并将试管移动回试管架中
*/
public void pushBackTubeCapAndTakeBakTube(String tubeType) {
//
//
//
public void pushBackTubeCapAndTakeBakTube(String tubeType) throws HardwareException, InterruptedException {
var params = this.samplesPreProcessModuleCtrlParamsService;
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
CmdId.kstep_motor_easy_move_to,
params.getHorizontalMotor_takePushCapPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
CmdId.kstep_motor_easy_move_to,
params.getGripperServo_standbyPos(),
params.getActionOvertime()
);
var motorUdTakeCapPos = params.getZMotor_ShortBloodTakeCapHeight();
var tubeTypeValue = A8kTubeType.valueOf(tubeType);
if ( tubeTypeValue.equals(A8kTubeType.HighBlood) ) {
motorUdTakeCapPos = params.getZMotor_HighBloodTakeCapHeight();
}
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
CmdId.kstep_motor_easy_move_to,
motorUdTakeCapPos,
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
CmdId.kstep_motor_easy_move_to,
params.getGripperServo_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
CmdId.kstep_motor_easy_move_to,
0,
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
CmdId.kstep_motor_easy_move_to,
params.getHorizontalMotor_standbyPos(),
params.getActionOvertime()
);
}
@ -93,37 +342,117 @@ public class SamplesPreProcessModuleCtrlService {
* @param times 摇匀次数
* @param shakeDegree 摇匀角度
*/
public void ShakeTube(String tubeType, int times, int shakeDegree) {
public void ShakeTube(String tubeType, int times, int shakeDegree) throws HardwareException, InterruptedException {
var params = this.samplesPreProcessModuleCtrlParamsService;
var standByPos = params.getShakeMotor_standbyPos();
var startPos = standByPos - shakeDegree/2;
var endPos = standByPos + shakeDegree/2;
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeShakeModule,
CmdId.kstep_motor_easy_reciprocating_motion,
startPos,
endPos,
times,
params.getActionOvertime()
);
}
/**
* 打开气溶胶风扇
*/
public void openAerosolFan() {
public void openAerosolFan() throws HardwareException {
var params = this.samplesPreProcessModuleCtrlParamsService;
this.a8kCanBusService.callcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to_zero, params.getAerosolFanLevel());
}
/**
* 关闭气溶胶风扇
*/
public void closeAerosolFan() {
public void closeAerosolFan() throws HardwareException {
this.a8kCanBusService.callcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to_zero, 0);
}
/**
* 设备初始化时复位
*/
public void moduleResetWhenPowerOn() {
public void moduleResetWhenPowerOn() throws HardwareException, InterruptedException {
var params = this.samplesPreProcessModuleCtrlParamsService;
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
CmdId.kmini_servo_move_to,
params.getTubeClampMotor_standbyPos()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
CmdId.kmini_servo_move_to,
params.getHorizontalMotor_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeScanClampModule,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeShakeModule,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
}
/**
* 设备运行时复位
*/
public void moduleRuntimeReset() {
public void moduleRuntimeReset() throws HardwareException, InterruptedException {
var params = this.samplesPreProcessModuleCtrlParamsService;
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
CmdId.kmini_servo_move_to,
params.getTubeClampMotor_standbyPos()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
CmdId.kstep_motor_easy_move_to,
0,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
CmdId.kmini_servo_move_to,
params.getHorizontalMotor_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeScanClampModule,
CmdId.kstep_motor_easy_move_to,
0,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeScanClampModule,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeShakeModule,
CmdId.kstep_motor_easy_move_to,
0,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeShakeModule,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
}
}
Loading…
Cancel
Save