sige 1 year ago
parent
commit
c79053ae43
  1. 2
      src/main/java/a8k/service/db/dao/A8kDirectCtrlPosDao.java
  2. 2
      src/main/java/a8k/service/db/dao/MotorParameterDao.java
  3. 2
      src/main/java/a8k/service/db/entity/MotorParameter.java
  4. 51
      src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java

2
src/main/java/a8k/service/db/dao/A8kDirectCtrlPosDao.java

@ -49,7 +49,7 @@ public class A8kDirectCtrlPosDao {
return new PosBean(pos.posX, pos.posY, pos.posZ); return new PosBean(pos.posX, pos.posY, pos.posZ);
} }
A8kDirectCtrlPos getPos(String posName) {
public A8kDirectCtrlPos getPos(String posName) {
A8kDirectCtrlPos pos = UfActiveRecord.findOne(A8kDirectCtrlPos.class, Map.of("posName", posName)); A8kDirectCtrlPos pos = UfActiveRecord.findOne(A8kDirectCtrlPos.class, Map.of("posName", posName));
assert pos != null; assert pos != null;
return pos; return pos;

2
src/main/java/a8k/service/db/dao/MotorParameterDao.java

@ -9,7 +9,7 @@ import java.util.Map;
@Component @Component
public class MotorParameterDao { public class MotorParameterDao {
MotorParameter getMotorParameter(int mid) {
public MotorParameter getMotorParameter(int mid) {
var param = UfActiveRecord.findOne(MotorParameter.class, Map.of("mid", mid)); var param = UfActiveRecord.findOne(MotorParameter.class, Map.of("mid", mid));
assert param != null; assert param != null;
return param; return param;

2
src/main/java/a8k/service/db/entity/MotorParameter.java

@ -14,7 +14,7 @@ public class MotorParameter extends UfActiveRecord {
Integer zeroPosOff; //零点偏移 Integer zeroPosOff; //零点偏移
@UfActiveRecordField @UfActiveRecordField
Integer moveToZeroOvertime;// 回零超时时间
public Integer moveToZeroOvertime;// 回零超时时间
@UfActiveRecordField @UfActiveRecordField
Integer defaultVelocity; //默认速度 Integer defaultVelocity; //默认速度

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

@ -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);
} }
// //

Loading…
Cancel
Save