|
@ -1,13 +1,22 @@ |
|
|
package a8k.service.hardware; |
|
|
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.A8kDirectCtrlPosDao; |
|
|
import a8k.service.db.dao.A8kTubeInfoDao; |
|
|
import a8k.service.db.dao.A8kTubeInfoDao; |
|
|
import a8k.service.db.dao.MotorParameterDao; |
|
|
import a8k.service.db.dao.MotorParameterDao; |
|
|
|
|
|
import jakarta.annotation.Resource; |
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
import org.springframework.stereotype.Component; |
|
|
import org.springframework.stereotype.Component; |
|
|
|
|
|
|
|
|
@Component |
|
|
@Component |
|
|
public class MotorTubeRackMoveCtrlService { |
|
|
public class MotorTubeRackMoveCtrlService { |
|
|
|
|
|
private static final Integer MOVE_TO_ZERO_MAX_DPOS = 10; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* |
|
|
* |
|
|
* 主要用来控制试管架的平移动作控制 |
|
|
* 主要用来控制试管架的平移动作控制 |
|
@ -39,18 +48,30 @@ public class MotorTubeRackMoveCtrlService { |
|
|
A8kTubeInfoDao tubeInfoDao; |
|
|
A8kTubeInfoDao tubeInfoDao; |
|
|
@Autowired |
|
|
@Autowired |
|
|
MotorParameterDao motorParameterDao; |
|
|
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 指令移动到零点 |
|
|
//再通过 move_to_zero 进行归零(设置超时时间),超时时间,来源MotorParameterDao |
|
|
//再通过 move_to_zero 进行归零(设置超时时间),超时时间,来源MotorParameterDao |
|
|
//最后读取 寄存器dval,判断move_to_zero移动了多少距离,如果dval过大,则抛出电机丢步异常。 |
|
|
//最后读取 寄存器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); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// |
|
|
// |
|
|