sige 1 year ago
parent
commit
9d38cde185
  1. 9
      .clang-format
  2. 3
      .gitmodules
  3. 1
      a8000_protocol
  4. 17
      src/main/java/a8k/service/db/dao/ModulerParameterDao.java
  5. 6
      src/main/java/a8k/service/db/dao/MotorParameterDao.java
  6. 18
      src/main/java/a8k/service/db/entity/A8kTubeInfo.java
  7. 8
      src/main/java/a8k/service/db/entity/ModuleParameter.java
  8. 24
      src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java

9
.clang-format

@ -0,0 +1,9 @@
# Defines the Chromium style for automatic reformatting.
# http://clang.llvm.org/docs/ClangFormatStyleOptions.html
Language: Cpp
BasedOnStyle: Google
ColumnLimit: 300
AlignConsecutiveMacros: true
AlignConsecutiveDeclarations: true
AlignConsecutiveAssignments: true
AlignOperands: true

3
.gitmodules

@ -0,0 +1,3 @@
[submodule "a8000_protocol"]
path = a8000_protocol
url = zwsd@192.168.1.3:project_boditech_vidas_a8000_v3/a8000_protocol.git

1
a8000_protocol

@ -0,0 +1 @@
Subproject commit 5081899a39cbbfca1beb5da571b1df2f0ce46789

17
src/main/java/a8k/service/db/dao/ModulerParameterDao.java

@ -0,0 +1,17 @@
package a8k.service.db.dao;
import a8k.service.db.entity.ModuleParameter;
import com.iflytop.uf.UfActiveRecord;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class ModulerParameterDao {
ModuleParameter getMotorParameter(int mid) {
var param = UfActiveRecord.findOne(ModuleParameter.class, Map.of("mid", mid));
assert param != null;
return param;
}
}

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

@ -1,6 +1,6 @@
package a8k.service.db.dao;
import a8k.service.db.entity.MotorParameter;
import a8k.service.db.entity.ModuleParameter;
import com.iflytop.uf.UfActiveRecord;
import org.springframework.stereotype.Component;
@ -9,8 +9,8 @@ import java.util.Map;
@Component
public class MotorParameterDao {
public MotorParameter getMotorParameter(int mid) {
var param = UfActiveRecord.findOne(MotorParameter.class, Map.of("mid", mid));
public ModuleParameter getMotorParameter(int mid) {
var param = UfActiveRecord.findOne(ModuleParameter.class, Map.of("mid", mid));
assert param != null;
return param;
}

18
src/main/java/a8k/service/db/entity/A8kTubeInfo.java

@ -16,16 +16,20 @@ public class A8kTubeInfo extends UfActiveRecord {
public Integer tubeNum; //试管数量
@UfActiveRecordField
public Double tubeSpacing; //试管之间的间隔 单位mm
/**
* 摇匀模组使用
*/
@UfActiveRecordField
public Double tubeHight;//float mm 取试管帽高度试管帽的下编研
@UfActiveRecordField
public Double tubeHightWithCap;//float mm 取试管帽高度试管帽的下编研
@UfActiveRecordField
public String tubeCapHight;//试管帽高度
public Double takeTubeCapPos;//float mm 取试管帽高度
/**
* Z轴使用
*/
@UfActiveRecordField
public Double sampleHeight;//float mm 取样高度
public Double sampleBeginPos;//float mm 取样高度
@UfActiveRecordField
public Double sampleBottom;//float mm 取样低位
public Double sampleEndPos;//float mm 取样低位
public static String getTableName() {
return "A8kTubeInfo" + "Table";

8
src/main/java/a8k/service/db/entity/MotorParameter.java → src/main/java/a8k/service/db/entity/ModuleParameter.java

@ -3,7 +3,7 @@ package a8k.service.db.entity;
import com.iflytop.uf.UfActiveRecord;
import com.iflytop.uf.UfActiveRecordField;
public class MotorParameter extends UfActiveRecord {
public class ModuleParameter extends UfActiveRecord {
@UfActiveRecordField
Integer mid; //模块ID
@ -17,13 +17,17 @@ public class MotorParameter extends UfActiveRecord {
public Integer moveToZeroOvertime;// 回零超时时间
@UfActiveRecordField
public Integer actionOvertime;// 执行动作的超时时间该超时时间适用于当前模块在当前产品中所有动作的最大时间
@UfActiveRecordField
Integer defaultVelocity; //默认速度
@UfActiveRecordField
Integer backToZeroVelocity; //回零速度
@UfActiveRecordField
Integer loseStepWarningJudgeDistance; //丢步异常警告距离
public Integer loseStepWarningJudgeDistance; //丢步异常警告距离
public static String getTableName() {
return "MotorParameter" + "Table";
}

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

@ -1,5 +1,4 @@
package a8k.service.hardware;
import a8k.a8k_can_protocol.CmdId;
import a8k.a8k_can_protocol.Errorcode;
import a8k.a8k_can_protocol.ModuleId;
@ -9,6 +8,7 @@ import a8k.base_hardware.A8kCanBusService;
import a8k.service.db.dao.A8kDirectCtrlPosDao;
import a8k.service.db.dao.A8kTubeInfoDao;
import a8k.service.db.dao.MotorParameterDao;
import a8k.service.db.entity.A8kDirectCtrlPos;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -51,6 +51,7 @@ public class MotorTubeRackMoveCtrlService {
@Resource
private A8kCanBusService a8kCanBusService;
//
// 电机基础控制
//
@ -61,20 +62,29 @@ public class MotorTubeRackMoveCtrlService {
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);
var beforePosResponse = this.a8kCanBusService.callcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_read_pos, new Integer[]{0});
var beforePos = beforePosResponse.getContentI32(0);
this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to_zero, new Integer[]{}, motorParams.moveToZeroOvertime);
var afterPosResponse = this.a8kCanBusService.callcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_read_pos, new Integer[]{0});
var afterPos = afterPosResponse.getContentI32(0);
var distance = beforePos - afterPos;
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 ) {
if ( Math.abs(dval - distance) > motorParams.loseStepWarningJudgeDistance ) {
throw new HardwareException(ModuleId.MotorTubeRackMoveModule, Errorcode.kstep_motor_lost_step);
}
//先通过move_to 指令移动到零点
//再通过 move_to_zero 进行归零(设置超时时间)超时时间来源MotorParameterDao
//最后读取 寄存器dval,判断move_to_zero移动了多少距离如果dval过大则抛出电机丢步异常
//1.记录运行前电机所在位置
//2.使用move_to_zero移动到零点
//3.读取电机运行完成后所在的位置
//4.比较dpos和上面两个位置的差值 相差多少如果超过2mm即超过20则认为发生过阻转
}
@ -130,6 +140,12 @@ public class MotorTubeRackMoveCtrlService {
* @param tubeIndex
*/
public void moveTubeToScanPos(String tubeType, Integer tubeIndex) {
var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType);
var startPosInfo = this.directCtrlPosTableDao.getPos(A8kDirectCtrlPosDao.MotorTubeRackMotor_tubeScanPos);
var scanPos = startPosInfo.posX + tubeIndex * tubeInfo.tubeSpacing;
var motorParams = this.motorParameterDao.getMotorParameter(ModuleId.MotorTubeRackMoveModule);
this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{scanPos}, motorParams.actionOvertime);
}
/**

Loading…
Cancel
Save