Browse Source

update

tags/v0
zhaohe 10 months ago
parent
commit
5c987c017c
  1. 3
      src/main/java/a8k/constant/AppConstant.java
  2. 43
      src/main/java/a8k/hardware/A8kCanBusService.java
  3. 2
      src/main/java/a8k/hardware/type/regindex/RegIndex.java
  4. 7
      src/main/java/a8k/service/app/devicedriver/basectrl/TubeTransportControler.java
  5. 35
      src/main/java/a8k/service/app/devicedriver/calibration/TubeTransportPosCalibration.java
  6. 4
      src/main/java/a8k/service/app/devicedriver/pos/TubeTransportPosMgr.java

3
src/main/java/a8k/constant/AppConstant.java

@ -6,4 +6,7 @@ public class AppConstant {
public static final int CONSUMABLE_NUM = 25;
public static final int TIP_NUM = 120;
public static final String APP_VERSION = "1.0.0";
public static final Integer ShakeModTubeScanerClampingSVReleasePos = 10;
public static final Integer ShakeModTubeScanerClampingSVClampingPos = 900;
}

43
src/main/java/a8k/hardware/A8kCanBusService.java

@ -119,10 +119,10 @@ public class A8kCanBusService {
}
private A8kPacket packParamsToPacket(Integer moduleId, Integer cmdId, Integer[] params) {
private A8kPacket packParamsToPacket(Integer moduleId, Integer cmdId, List<Integer> params) {
int subCmdId = cmdId & 0xFF;
int mainCmdId = (cmdId >> 8) & 0xFFFF;
int bufferSize = 2 + 2 + 1 + 1 + 2 + 4 * params.length; // PacketIndex - MainCmdId - SubCmdId - CmdType -
int bufferSize = 2 + 2 + 1 + 1 + 2 + 4 * params.size(); // PacketIndex - MainCmdId - SubCmdId - CmdType -
// ModuleId - Parameters
ByteBuffer buffer = ByteBuffer.allocate(bufferSize);
buffer.order(ByteOrder.LITTLE_ENDIAN);
@ -325,7 +325,6 @@ public class A8kCanBusService {
}
//
// stepMotor
//
@ -485,6 +484,11 @@ public class A8kCanBusService {
miniServoWaitIsNotMove(id, actionOvertime);
}
// kmini_servo_set_cur_pos
public void miniServoSetCurPos(MId id, Integer pos) throws AppException {
callcmdOvertime(id.toInt(), CmdId.mini_servo_set_cur_pos.toInt(), 5000, pos);
}
public void miniServoWaitIsNotMove(MId id, int acitionOvertime) throws AppException {
long startedAt = System.currentTimeMillis();
do {
@ -574,33 +578,14 @@ public class A8kCanBusService {
} while (true);
}
public A8kPacket callcmd(Integer moduleId, Integer cmdId) throws AppException {
return this.callcmd(moduleId, cmdId, new Integer[]{});
}
public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0) throws AppException {
return this.callcmd(moduleId, cmdId, new Integer[]{p0});
}
public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1) throws AppException {
return this.callcmd(moduleId, cmdId, new Integer[]{p0, p1});
}
public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1, Integer p2) throws AppException {
return this.callcmd(moduleId, cmdId, new Integer[]{p0, p1, p2});
}
public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1, Integer p2, Integer p3) throws AppException {
return this.callcmd(moduleId, cmdId, new Integer[]{p0, p1, p2, p3});
}
public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer p0, Integer p1, Integer p2, Integer p3, Integer p4) throws AppException {
return this.callcmd(moduleId, cmdId, new Integer[]{p0, p1, p2, p3, p4});
public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer... param) throws AppException {
var packet = packParamsToPacket(moduleId, cmdId, List.of(param));
return sendCmdAutoResend(packet, A8kPacket.CMD_OVERTIME);
}
public A8kPacket callcmd(Integer moduleId, Integer cmdId, Integer[] params) throws AppException {
var packet = packParamsToPacket(moduleId, cmdId, params);
return sendCmdAutoResend(packet, A8kPacket.CMD_OVERTIME);
public A8kPacket callcmdOvertime(Integer moduleId, Integer cmdId, Integer overtime, Integer... params) throws AppException {
var packet = packParamsToPacket(moduleId, cmdId, List.of(params));
return sendCmdAutoResend(packet, overtime);
}
synchronized public A8kPacket sendCmdAutoResend(A8kPacket pack, int overtime) throws AppException {
@ -609,7 +594,7 @@ public class A8kCanBusService {
// 如果是其他异常则直接抛出异常
for (int i = 0; i < 5; i++) {
try {
return this.sendCmd(pack, A8kPacket.CMD_OVERTIME);
return this.sendCmd(pack, overtime);
} catch (AppException e) {
if (!e.error.code.equals(A8kEcode.LOW_ERROR_OVERTIME)) {
throw e;

2
src/main/java/a8k/hardware/type/regindex/RegIndex.java

@ -188,6 +188,8 @@ public enum RegIndex {
kreg_mini_servo_limit_torque(10252), // 限制扭矩
kreg_mini_servo_protective_torque(10253), // 保护扭矩
kreg_mini_servo_is_move(10254), // 是否在运动
kreg_mini_servo_set_mid_point(26119), // 设置中间点
kmini_servo_set_cur_pos(26124), // 设置当前位置
/***********************************************************************************************************************
* ID_CARD_READER *
***********************************************************************************************************************/

7
src/main/java/a8k/service/app/devicedriver/basectrl/TubeTransportControler.java

@ -29,6 +29,9 @@ public class TubeTransportControler {
@Resource
A8kCanBusService canBus;
@Resource
TubeTransportPosMgr tubeTransportPosMgr;
/*=========================================================================================
* 基础方法
*========================================================================================*/
@ -70,14 +73,14 @@ public class TubeTransportControler {
@ExtApiFn(name = "扫描夹紧机构夹紧", group = "基础方法", order = 1)
public void scanClampModClamp() throws AppException {
canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 1);
canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, 900);
canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, tubeTransportPosMgr.ScanerClampingSVClampingPos);
canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, overtime);
}
@ExtApiFn(name = "扫描夹紧机构复位", group = "基础方法", order = 2)
public void scanClampModRelease() throws AppException {
canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 1);
canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, 10);
canBus.miniServoMoveTo(MId.ShakeModTubeScanerClampingSV, tubeTransportPosMgr.ScanerClampingSVReleasePos);
canBus.waitForMod(MId.ShakeModTubeScanerClampingSV, overtime);
}

35
src/main/java/a8k/service/app/devicedriver/calibration/TubeTransportPosCalibration.java

@ -5,6 +5,7 @@ import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.hardware.A8kCanBusService;
import a8k.hardware.type.a8kcanprotocol.MId;
import a8k.service.app.devicedriver.basectrl.TubeTransportControler;
import a8k.service.app.devicedriver.ctrl.TubeHolderScanerControler;
import a8k.service.app.devicedriver.pos.TubeTransportPosMgr;
import a8k.type.TubeHolderScanResult;
@ -24,6 +25,8 @@ public class TubeTransportPosCalibration {
A8kCanBusService canBus;
@Resource
TubeHolderScanerControler tubeHolderScanerControler;
@Resource
TubeTransportControler tubeTransportControler;
private Integer readFeedingModXMPos() throws AppException {
canBus.stepMotorEnable(MId.FeedingModXM, 1);
@ -49,6 +52,7 @@ public class TubeTransportPosCalibration {
canBus.stepMotorEnable(MId.FeedingModInfeedM, 1);
canBus.stepMotorEnable(MId.FeedingModOutfeedM, 1);
canBus.stepMotorEnable(MId.FeedingModXM, 1);
canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 1);
}
@ExtApiFn(name = "失能相关模块", group = "测试工具", order = 13)
@ -56,47 +60,60 @@ public class TubeTransportPosCalibration {
canBus.stepMotorEnable(MId.FeedingModInfeedM, 0);
canBus.stepMotorEnable(MId.FeedingModOutfeedM, 0);
canBus.stepMotorEnable(MId.FeedingModXM, 0);
canBus.miniServoEnable(MId.ShakeModTubeScanerClampingSV, 0);
}
@ExtApiFn(name = "设置当前位置为<入料位置>", group = "标定", order = 21)
@ExtApiFn(name = "<平移电机>设置当前位置为<入料位置>", group = "标定", order = 21)
public void setTubeHolderEnterXPos() throws AppException {
tubeTransportPosMgr.setTubeHolderEnterXPos(readFeedingModXMPos());
}
@ExtApiFn(name = "设置当前位置为<出料位置>", group = "标定", order = 22)
@ExtApiFn(name = "<平移电机>设置当前位置为<出料位置>", group = "标定", order = 22)
public void setTubeHolderExitXPos() throws AppException {
tubeTransportPosMgr.setTubeHolderExitXPos(readFeedingModXMPos());
}
@ExtApiFn(name = "设置当前位置为<试管架扫描位置>", group = "标定", order = 23)
@ExtApiFn(name = "<平移电机>设置当前位置为<试管架扫描位置>", group = "标定", order = 23)
public void setTubeHolderScanXPos() throws AppException {
tubeTransportPosMgr.setTubeHolderScanXPos(readFeedingModXMPos());
}
@ExtApiFn(name = "设置当前位置为<0号试管扫描位置>", group = "标定", order = 24)
@ExtApiFn(name = "<平移电机>设置当前位置为<0号试管扫描位置>", group = "标定", order = 24)
public void setTube0ScanXPos() throws AppException {
tubeTransportPosMgr.setTube0ScanXPos(readFeedingModXMPos());
}
@ExtApiFn(name = "设置当前位置为<0试管高度判断位置>", group = "标定", order = 25)
@ExtApiFn(name = "<平移电机>设置当前位置为<0试管高度判断位置>", group = "标定", order = 25)
public void setTube0AltitJudgXPos() throws AppException {
tubeTransportPosMgr.setTube0AltitJudgXPos(readFeedingModXMPos());
}
@ExtApiFn(name = "设置当前位置为<0试管存在判断位置>", group = "标定", order = 26)
@ExtApiFn(name = "<平移电机>设置当前位置为<0试管存在判断位置>", group = "标定", order = 26)
public void setTube0ExistJudgXPos() throws AppException {
tubeTransportPosMgr.setTube0ExistJudgXPos(readFeedingModXMPos());
}
@ExtApiFn(name = "<夹紧舵机>设置当前位置为夹紧位置", group = "标定", order = 26)
public void setTubeScanClampPos() throws AppException {
canBus.miniServoSetCurPos(MId.ShakeModTubeScanerClampingSV, tubeTransportPosMgr.ScanerClampingSVClampingPos);
}
@ExtApiFn(name = "夹紧试管架", group = "校验", order = 31)
public void scanClampModClamp() throws AppException {
tubeTransportControler.scanClampModClamp();
}
@ExtApiFn(name = "扫描试管架", group = "校验", order = 31)
@ExtApiFn(name = "释放试管架", group = "校验", order = 32)
public void scanClampModRelease() throws AppException {
tubeTransportControler.scanClampModRelease();
}
@ExtApiFn(name = "扫描试管架", group = "校验", order = 33)
public TubeHolderScanResult scanAll() throws AppException {
return tubeHolderScanerControler.scanTubeHodler();
}
@ExtApiFn(name = "设置<试管扫描伺服力矩(100-1000)>", group = "其他", order = 41)
public void setTubeScanServoTorque(Integer torque) throws AppException {
tubeTransportPosMgr.setTubeScanServoTorque(torque);

4
src/main/java/a8k/service/app/devicedriver/pos/TubeTransportPosMgr.java

@ -13,6 +13,9 @@ import org.springframework.stereotype.Component;
public class TubeTransportPosMgr {
static final Logger logger = LoggerFactory.getLogger(TubeTransportPosMgr.class);
public final Integer ScanerClampingSVReleasePos = 100;
public final Integer ScanerClampingSVClampingPos = 1000;
public enum POS {
TubeHolderEnterXPos, // 入料位置
TubeHolderExitXPos, // 出料位置
@ -111,7 +114,6 @@ public class TubeTransportPosMgr {
}
public void setTubeScanServoTorque(Integer value) {
posReader.updatePos(POS.TubeScanServoTorque, value);
}

Loading…
Cancel
Save