Browse Source

update

tags/v0
zhaohe 1 year ago
parent
commit
17a51f365c
  1. 32
      README.md
  2. 28
      src/main/java/a8k/a8k_can_protocol/IOId.java
  3. 154
      src/main/java/a8k/a8k_can_protocol/ModuleId.java
  4. 4
      src/main/java/a8k/controller/TmpTestController.java
  5. 33
      src/main/java/a8k/service/ctrl_service/DeviceInitializationCtrlService.java
  6. 48
      src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java
  7. 100
      src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java

32
README.md

@ -3,9 +3,41 @@
1. 数据库文件是否被破坏检查
2. 数据库文件如果被破坏,自动恢复默认配置
坐标XY方向约定:
0 ----------------------->
| (X)
|
|
|
|
|
v(Y)
舵机位置约定:
1.抓手夹紧位置为1800
命名约定:
TH: TubeHolder
Ch: Channel
THCh: 试管架通道
SM : 步进电机
SV : 舵机
Z : 升降
X : X方向水平移动
Y : Y方向水平移动
电机命名:
GripperSV : 抓手舵机
GripperZM :抓手升降电机
GripperYM : 抓手前后移动电机
ShakeM : 摇匀电机
ShakeClampingM:摇匀夹紧电机
```

28
src/main/java/a8k/a8k_can_protocol/IOId.java

@ -1,26 +1,26 @@
package a8k.a8k_can_protocol;
public enum IOId {
TubeHeightDetecter(ModuleType.kboard, 60, 0), //高低试管检测IO
TubeHolderTransferChannelTubeDetecterOuter(ModuleType.kboard, 60, 1),//试管架转移通道有无检测
TubeHolderTransferChannelTubeDetecterInter(ModuleType.kboard, 60, 2),//试管架转移通道有无检测
SampleExitTubeHolderlDetecter(ModuleType.kboard, 60, 3),//试管出料位置 试管架有无检测
TubeExistDetecter(ModuleType.kboard, 60, 4),//试管有无光电
SampleEnterTubeHolderlDetecter(ModuleType.kboard, 60, 5),//试管架入料位置 试管架有无检测
TubeHeightPPS(ModuleType.kboard, 60, 0), //高低试管检测IO
THChOuterPPS(ModuleType.kboard, 60, 1),//试管架转移通道有无检测
THChInterPPS(ModuleType.kboard, 60, 2),//试管架转移通道有无检测
OutfeedPPS(ModuleType.kboard, 60, 3),//试管出料位置 试管架有无检测
TubeExitPPS(ModuleType.kboard, 60, 4),//试管有无光电
InfeedPPS(ModuleType.kboard, 60, 5),//试管架入料位置 试管架有无检测
WasteBucketOverflowedDetector(ModuleType.kboard, 40, 2),//废料桶满溢检测
WasteBucketOverflowedDetectorPowerCtrl(ModuleType.kboard, 40, 0),//废料桶光栅电源
RecycleBinOverflowPPS(ModuleType.kboard, 40, 2),//废料桶满溢检测
RecycleBinOverflowPPSPowerCtrl(ModuleType.kboard, 40, 0),//废料桶光栅电源
PlateBoxCoverClosureDetector(ModuleType.kboard, 20, 0),//板夹仓舱盖闭合检测
PlateBoxPlateStuckDetector(ModuleType.kboard, 20, 1),//板夹仓卡板检测
PlateBoxCoverClosurePPS(ModuleType.kboard, 20, 0),//板夹仓舱盖闭合检测
PlateBoxPlateStuckPPS(ModuleType.kboard, 20, 1),//板夹仓卡板检测
//转盘逻辑相关光电
//钩板电机零点光电终点光电
PlaterHookerMotorZeroPointDetector(ModuleType.ktmc_step_motor,ModuleId.MotorTestCardPullModule,0),
PlaterHookerMotorEndPointDetector(ModuleType.ktmc_step_motor,ModuleId.MotorTestCardPullModule,1),
PullerMZeroPPS(ModuleType.ktmc_step_motor,ModuleId.OptModPullM,0),
PullerMEndPPS(ModuleType.ktmc_step_motor,ModuleId.OptModPullM,1),
//推板电机零点光电终点光电
PlaterPusherMotorZeroPointDetector(ModuleType.ktmc_step_motor,ModuleId.MotorCardWarehousePushModule,0),
PlaterPusherMotorEndPointDetector(ModuleType.ktmc_step_motor,ModuleId.MotorCardWarehousePushModule,1),
PusherMZeroPPS(ModuleType.ktmc_step_motor,ModuleId.PlatesBoxPusherM,0),
PusherMEndPPS(ModuleType.ktmc_step_motor,ModuleId.PlatesBoxPusherM,1),
;

154
src/main/java/a8k/a8k_can_protocol/ModuleId.java

@ -1,101 +1,93 @@
package a8k.a8k_can_protocol;
public class ModuleId {
public static final int ArmXYBoardModule = 10;//机械臂板模块
public static final int ArmXYModule = 11;//机械臂XY
public static final int MotorCardWarehouseMoveBoardModule = 20;//板夹仓模块
public static final int MotorCardWarehouseMoveModule = 21;//板夹仓移动电机
public static final int MotorCardWarehousePushModule = 22;//板夹仓推杆电机
public static final int CardWarehouseScanerModule = 23;//板夹仓扫码模组
public static final int ShakeModuleBoard = 30;//摇匀模组板
public static final int MotorTubeScanClampModule = 31;//试管固定夹爪电机
public static final int MotorTubeMoveUpDownModule = 32;//摇匀升降电机
public static final int MotorTubeShakeModule = 33;//试管摇匀电机
public static final int ServoTubeMoveFrontBackModule = 34;//摇匀前后电机
public static final int ServoTubeCapClipModule = 35;//摇匀试管帽夹爪
public static final int ServoTubeRackTubePushModule = 36;//试管架旋转固定舵机
public static final int ServoTubeRackTubeRotateModule = 37;//试管架旋转舵机
public static final int HbotBoard = 10;//机械臂板模块
public static final int HbotM = 11;//机械臂XY
public static final int ReactionCardBoxTemperatureCtrlBoard = 40;//反应板夹温度控制板
public static final int ReactionCardBoxTemperatureModule = 41;//反应板夹温度控制模块
public static final int WbTubeFanModule = 42;//气溶胶风扇
public static final int PlatesBoxBoard = 20;//板夹仓模块
public static final int PlatesBoxYM = 21;//板夹仓移动电机
public static final int PlatesBoxPusherM = 22;//板夹仓推杆电机
public static final int PlatesBoxScanner = 23;//板夹仓扫码模组
public static final int IncubatorTempCtrlBoard = 50;//温度控制
public static final int IncubatorTempCtrlModule = 51;//温度控制
public static final int ShakeModBoard = 30;//摇匀模组板
public static final int ShakeModClampingM = 31;//试管固定夹爪电机
public static final int ShakeModGripperZM = 32;//摇匀升降电机
public static final int ShakeModShakeM = 33;//试管摇匀电机
public static final int ShakeModGripperYM = 34;//摇匀前后电机
public static final int ShakeModGripperSV = 35;//摇匀试管帽夹爪
public static final int ShakeModTubeScanerClampingSV = 36;//试管架旋转固定舵机
public static final int ShakeModTubeScanerRotateSV = 37;//试管架旋转舵机
public static final int FeederBoard = 60;//出入料模块
public static final int MotorTubeRackFeedModule = 61;//入料电机
public static final int MotorTubeRackMoveModule = 62;//试管架平移电机
public static final int MotorTubeRackExitModule = 63;//出料电机
public static final int TubeRackScannerModule = 64;//试管架扫码器
public static final int PlatesBoxTCMBoard = 40;//反应板夹温度控制板
public static final int PlatesBoxTCM = 41;//反应板夹温度控制模块
public static final int WbTubeFanModule = 42;//气溶胶风扇
public static final int MotorIncubatorRotateBoard = 70;//孵育盘旋转板
public static final int MotorIncubatorRotateModule = 71;//孵育盘旋转
public static final int IncubatorTCMBoard = 50;//温度控制
public static final int IncubatorTCM = 51;//温度控制
public static final int ArmZBoard = 80;//机械臂Z轴板
public static final int ArmZModule = 81;//机械臂Z
public static final int PipetteModule = 82;//移液枪
public static final int MaterialScannerModule = 83;//物料扫码器
public static final int FeedingModBoard = 60;//出入料模块
public static final int FeedingModInfeedM = 61;//入料电机
public static final int FeedingModXM = 62;//试管架平移电机
public static final int FeedingModOutfeedM = 63;//出料电机
public static final int FeedingModScannerM = 64;//试管架扫码器
public static final int OptScanModuleBoard = 90;//光学模组板
public static final int MotorTestCardScanModule = 91;//板卡扫描电机
public static final int MotorTestCardPullModule = 92;//板卡推杆电机
public static final int ScannerModule = 93;//扫描仪
public static final int IncubatorRotateBoard = 70;//孵育盘旋转板
public static final int IncubatorRotateCtrlM = 71;//孵育盘旋转
public static final int IdCardReaderBoard = 100; //A8K读卡器板
public static final int IdCardReaderModule = 101; //A8K读卡器
public static final int PipetteModBoard = 80;//机械臂Z轴板
public static final int PipetteModZMotor = 81;//机械臂Z
public static final int PipetteMod = 82;//移液枪
public static final int PipetteModCodeScanner = 83;//物料扫码器
public static final int OptModBoard = 90;//光学模组板
public static final int OptModScannerMotor = 91;//板卡扫描电机
public static final int OptModPullM = 92;//板卡推杆电机
public static final int OptMod = 93;//扫描仪
public static String ModuleId2Name(int moduleId) {
return switch (moduleId) {
case ArmXYBoardModule -> "ArmXYBoardModule";
case ArmXYModule -> "ArmXYModule";
case MotorCardWarehouseMoveBoardModule -> "MotorCardWarehouseMoveBoardModule";
case MotorCardWarehouseMoveModule -> "MotorCardWarehouseMoveModule";
case MotorCardWarehousePushModule -> "MotorCardWarehousePushModule";
case CardWarehouseScanerModule -> "CardWarehouseScanerModule";
public static final int A8kIdCardReaderBoard = 100; //A8K读卡器板
public static final int A8kIdCardReader = 101; //A8K读卡器
case ShakeModuleBoard -> "ShakeModuleBoard";
case MotorTubeScanClampModule -> "MotorTubeScanClampModule";
case MotorTubeMoveUpDownModule -> "MotorTubeMoveUpDownModule";
case MotorTubeShakeModule -> "MotorTubeShakeModule";
case ServoTubeMoveFrontBackModule -> "ServoTubeMoveFrontBackModule";
case ServoTubeCapClipModule -> "ServoTubeCapClipModule";
case ServoTubeRackTubePushModule -> "ServoTubeRackTubePushModule";
case ServoTubeRackTubeRotateModule -> "ServoTubeRackTubeRotateModule";
case ReactionCardBoxTemperatureCtrlBoard -> "ReactionCardBoxTemperatureCtrlBoard";
case ReactionCardBoxTemperatureModule -> "ReactionCardBoxTemperatureModule";
public static String ModuleId2Name(int moduleId) {
return switch (moduleId) {
case HbotBoard -> "HbotBoard";
case HbotM -> "HbotM";
case PlatesBoxBoard -> "PlatesBoxBoard";
case PlatesBoxYM -> "PlatesBoxYM";
case PlatesBoxPusherM -> "PlatesBoxPusherM";
case PlatesBoxScanner -> "PlatesBoxScanner";
case ShakeModBoard -> "ShakeModBoard";
case ShakeModClampingM -> "ShakeModClampingM";
case ShakeModGripperZM -> "ShakeModGripperZM";
case ShakeModShakeM -> "ShakeModShakeM";
case ShakeModGripperYM -> "ShakeModGripperYM";
case ShakeModGripperSV -> "ShakeModGripperSV";
case ShakeModTubeScanerClampingSV -> "ShakeModTubeScanerClampingSV";
case ShakeModTubeScanerRotateSV -> "ShakeModTubeScanerRotateSV";
case PlatesBoxTCMBoard -> "PlatesBoxTCMBoard";
case PlatesBoxTCM -> "PlatesBoxTCM";
case WbTubeFanModule -> "WbTubeFanModule";
case IncubatorTempCtrlBoard -> "IncubatorTempCtrlBoard";
case IncubatorTempCtrlModule -> "IncubatorTempCtrlModule";
case FeederBoard -> "FeederBoard";
case MotorTubeRackFeedModule -> "MotorTubeRackFeedModule";
case MotorTubeRackMoveModule -> "MotorTubeRackMoveModule";
case MotorTubeRackExitModule -> "MotorTubeRackExitModule";
case TubeRackScannerModule -> "TubeRackScannerModule";
case MotorIncubatorRotateBoard -> "MotorIncubatorRotateBoard";
case MotorIncubatorRotateModule -> "MotorIncubatorRotateModule";
case ArmZBoard -> "ArmZBoard";
case ArmZModule -> "ArmZModule";
case PipetteModule -> "PipetteModule";
case MaterialScannerModule -> "MaterialScannerModule";
case OptScanModuleBoard -> "OptScanModuleBoard";
case MotorTestCardScanModule -> "MotorTestCardScanModule";
case MotorTestCardPullModule -> "MotorTestCardPullModule";
case ScannerModule -> "ScannerModule";
case IdCardReaderBoard -> "IdCardReaderBoard";
case IdCardReaderModule -> "IdCardReaderModule";
case IncubatorTCMBoard -> "IncubatorTCMBoard";
case IncubatorTCM -> "IncubatorTCM";
case FeedingModBoard -> "FeedingModBoard";
case FeedingModInfeedM -> "FeedingModInfeedM";
case FeedingModXM -> "FeedingModXM";
case FeedingModOutfeedM -> "FeedingModOutfeedM";
case FeedingModScannerM -> "FeedingModScannerM";
case IncubatorRotateBoard -> "IncubatorRotateBoard";
case IncubatorRotateCtrlM -> "IncubatorRotateCtrlM";
case PipetteModBoard -> "PipetteModBoard";
case PipetteModZMotor -> "PipetteModZMotor";
case PipetteMod -> "PipetteMod";
case PipetteModCodeScanner -> "PipetteModCodeScanner";
case OptModBoard -> "OptModBoard";
case OptModScannerMotor -> "OptModScannerMotor";
case OptModPullM -> "OptModPullM";
case OptMod -> "OptMod";
case A8kIdCardReaderBoard -> "A8kIdCardReaderBoard";
case A8kIdCardReader -> "A8kIdCardReader";
default -> "UnknownModuleId(" + moduleId + ")";
};
}

4
src/main/java/a8k/controller/TmpTestController.java

@ -56,8 +56,8 @@ public class TmpTestController {
@GetMapping("/tmp-test/a8k-can-bus-service-call")
@ResponseBody
public String a8kCanBusServiceCall() throws HardwareException, InterruptedException {
this.a8kCanBusService.callcmd(ModuleId.ServoTubeRackTubeRotateModule, CmdId.kmini_servo_enable, new Integer[]{1});
this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackFeedModule, CmdId.kstep_motor_easy_move_by, new Integer[]{5000}, 20000);
this.a8kCanBusService.callcmd(ModuleId.ShakeModTubeScanerRotateSV, CmdId.kmini_servo_enable, new Integer[]{1});
this.a8kCanBusService.callblockcmd(ModuleId.FeedingModInfeedM, CmdId.kstep_motor_easy_move_by, new Integer[]{5000}, 20000);
return "OK";
}

33
src/main/java/a8k/service/ctrl_service/DeviceInitializationCtrlService.java

@ -1,6 +1,8 @@
package a8k.service.ctrl_service;
import a8k.a8k_can_protocol.ModuleId;
import a8k.appbean.AppErrorCode;
import a8k.appbean.HardwareException;
import a8k.base_hardware.A8kCanBusService;
import a8k.service.db.dao.SamplesPreProcessModuleCtrlParamsService;
import jakarta.annotation.Resource;
@ -26,6 +28,28 @@ public class DeviceInitializationCtrlService {
* 2. 试管夹紧电机归零超时一定时间没有归零则返回错误
* 3. 抓手平移电机移动到待机位如果移动不到则返回错误
*
*
* 初始化前检查:
* 1. 试管平移通道是否有障碍
* 2. 板夹仓盖子是否盖上
* 3. 板夹推杆是否在原点
* 4. 板夹拉取是否在终点或者原点
*
* 初始化顺序
* 1. 试管夹紧复位
* 2. 抓手复位
* 3. 抓手平移电机复位
* 4. 抓手升降复位
* 1. 试管扫码夹紧复位
* 5. 试管摇匀复位
* 6. 机械臂Z轴复位
* 7. Hbot复位
*
* 7. 试管架平移电机复位
* 8. 板夹仓平移电机复位
* 9. 板夹仓推杆电机复位
* 10.
*
*/
@Resource
A8kCanBusService canBus;
@ -36,10 +60,13 @@ public class DeviceInitializationCtrlService {
public AppErrorCode initializeDevice() {
logger.info("Initializing device ...");
try {
// canBus.getIOState(IOId.THChDetecterOuter,);
// canBus
canBus.stepMotorEasyMoveToZero(ModuleId.ShakeModGripperZM);
} catch (HardwareException e) {
throw new RuntimeException(e);
}
// this.a8kCanBusService.callblockcmd(
// ModuleId.ServoTubeCapClipModule,

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

@ -52,24 +52,24 @@ public class MotorTubeRackMoveCtrlService {
public void moveToZeroWhenDeviceSetup() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to_zero, new Integer[]{}, params.moveToZeroOvertime);
this.a8kCanBusService.callblockcmd(ModuleId.FeedingModXM, CmdId.kstep_motor_easy_move_to_zero, new Integer[]{}, params.moveToZeroOvertime);
}
public void moveToZero() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
var beforePosResponse = this.a8kCanBusService.callcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_read_pos, new Integer[]{0});
var beforePosResponse = this.a8kCanBusService.callcmd(ModuleId.FeedingModXM, 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[]{}, params.moveToZeroOvertime);
var afterPosResponse = this.a8kCanBusService.callcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_read_pos, new Integer[]{0});
this.a8kCanBusService.callblockcmd(ModuleId.FeedingModXM, CmdId.kstep_motor_easy_move_to_zero, new Integer[]{}, params.moveToZeroOvertime);
var afterPosResponse = this.a8kCanBusService.callcmd(ModuleId.FeedingModXM, CmdId.kstep_motor_read_pos, new Integer[]{0});
var afterPos = afterPosResponse.getContentI32(0);
var distance = beforePos - afterPos;
var dval = a8kCanBusService.module_read_reg(ModuleId.MotorTubeRackMoveModule, RegIndex.kreg_step_motor_dpos);
var dval = a8kCanBusService.module_read_reg(ModuleId.FeedingModXM, RegIndex.kreg_step_motor_dpos);
if (Math.abs(dval - distance) > params.horizontalMotorLostStepThresholdVal) {
throw new HardwareException(ModuleId.MotorTubeRackMoveModule, Errorcode.kstep_motor_lost_step);
throw new HardwareException(ModuleId.FeedingModXM, Errorcode.kstep_motor_lost_step);
}
//先通过move_to 指令移动到零点
@ -92,7 +92,7 @@ public class MotorTubeRackMoveCtrlService {
*/
public void moveTubeRackToEnterPos() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{params.tubeRackEnterPos}, params.actionOvertime);
this.a8kCanBusService.callblockcmd(ModuleId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{params.tubeRackEnterPos}, params.actionOvertime);
}
/**
@ -100,7 +100,7 @@ public class MotorTubeRackMoveCtrlService {
*/
public void moveTubeRackToExitPos() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{params.tubeExistJudgmentPos}, params.actionOvertime);
this.a8kCanBusService.callblockcmd(ModuleId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{params.tubeExistJudgmentPos}, params.actionOvertime);
}
/**
@ -108,7 +108,7 @@ public class MotorTubeRackMoveCtrlService {
*/
public void moveTubeRackToScanPos() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{params.tubeRackScanCodePos}, params.actionOvertime);
this.a8kCanBusService.callblockcmd(ModuleId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{params.tubeRackScanCodePos}, params.actionOvertime);
}
/**
@ -116,10 +116,10 @@ public class MotorTubeRackMoveCtrlService {
*/
public String moveTubeRackToScanPosAndScan() throws HardwareException, InterruptedException {
this.moveTubeRackToScanPos();
this.a8kCanBusService.callcmd(ModuleId.TubeRackScannerModule, CmdId.kcode_scaner_start_scan, new Integer[]{});
this.a8kCanBusService.callcmd(ModuleId.FeedingModScannerM, 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 response = this.a8kCanBusService.callcmd(ModuleId.FeedingModScannerM, CmdId.kcode_scaner_read_scaner_result, new Integer[]{});
this.a8kCanBusService.callcmd(ModuleId.FeedingModScannerM, CmdId.kcode_scaner_stop_scan, new Integer[]{});
var contentBytes = response.getCmdContent();
return new String(contentBytes);
}
@ -138,7 +138,7 @@ public class MotorTubeRackMoveCtrlService {
var params = this.serviceParameterDao.getParameter();
var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType);
var scanPos = params.tubeScanPos + tubeIndex * tubeInfo.tubeSpacing;
this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{scanPos}, params.actionOvertime);
this.a8kCanBusService.callblockcmd(ModuleId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{scanPos}, params.actionOvertime);
}
/**
@ -149,10 +149,10 @@ public class MotorTubeRackMoveCtrlService {
public String moveTubeToScanPosAndScan(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException {
this.moveTubeToScanPos(tubeType, tubeIndex);
this.a8kCanBusService.callcmd(ModuleId.TubeRackScannerModule, CmdId.kcode_scaner_start_scan, new Integer[]{});
this.a8kCanBusService.callcmd(ModuleId.FeedingModScannerM, 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 response = this.a8kCanBusService.callcmd(ModuleId.FeedingModScannerM, CmdId.kcode_scaner_read_scaner_result, new Integer[]{});
this.a8kCanBusService.callcmd(ModuleId.FeedingModScannerM, CmdId.kcode_scaner_stop_scan, new Integer[]{});
var contentBytes = response.getCmdContent();
return new String(contentBytes);
}
@ -166,7 +166,7 @@ public class MotorTubeRackMoveCtrlService {
var params = this.serviceParameterDao.getParameter();
var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType);
var detectPos = params.tubeHeighJudgmentPos + tubeIndex * tubeInfo.tubeSpacing;
this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{detectPos}, params.actionOvertime);
this.a8kCanBusService.callblockcmd(ModuleId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{detectPos}, params.actionOvertime);
}
/**
@ -178,7 +178,7 @@ public class MotorTubeRackMoveCtrlService {
var params = this.serviceParameterDao.getParameter();
var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType);
var pos = params.tubePreProcessPos + tubeIndex * tubeInfo.tubeSpacing;
this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{pos}, params.actionOvertime);
this.a8kCanBusService.callblockcmd(ModuleId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{pos}, params.actionOvertime);
}
//
@ -194,16 +194,16 @@ public class MotorTubeRackMoveCtrlService {
var params = this.serviceParameterDao.getParameter();
var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType);
var pos = params.tubeRackExitPos + tubeIndex * tubeInfo.tubeSpacing;
this.a8kCanBusService.callblockcmd(ModuleId.MotorTubeRackMoveModule, CmdId.kstep_motor_easy_move_to, new Integer[]{pos}, params.actionOvertime);
this.a8kCanBusService.callblockcmd(ModuleId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{pos}, params.actionOvertime);
}
public boolean isTubeRackInEnterPos() throws HardwareException {
var response = this.a8kCanBusService.callcmd(ModuleId.FeederBoard, CmdId.kxymotor_read_inio, new Integer[]{3});
var response = this.a8kCanBusService.callcmd(ModuleId.FeedingModBoard, CmdId.kxymotor_read_inio, new Integer[]{3});
return response.getContentI32(0) == 1;
}
public boolean isTubeRackInExitPos() throws HardwareException {
var response = this.a8kCanBusService.callcmd(ModuleId.FeederBoard, CmdId.kxymotor_read_inio, new Integer[]{5});
var response = this.a8kCanBusService.callcmd(ModuleId.FeedingModBoard, CmdId.kxymotor_read_inio, new Integer[]{5});
return response.getContentI32(0) == 1;
}
@ -214,7 +214,7 @@ public class MotorTubeRackMoveCtrlService {
*/
public boolean getMoveChannelPhotoelectricState(int photoelectricIndex) throws HardwareException {
var index = 0 == photoelectricIndex ? 2 : 1;
var response = this.a8kCanBusService.callcmd(ModuleId.FeederBoard, CmdId.kxymotor_read_inio, new Integer[]{index});
var response = this.a8kCanBusService.callcmd(ModuleId.FeedingModBoard, CmdId.kxymotor_read_inio, new Integer[]{index});
return response.getContentI32(0) == 1;
}
@ -228,7 +228,7 @@ public class MotorTubeRackMoveCtrlService {
*/
public void scanClampModuleCompress() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
this.a8kCanBusService.callblockcmd(ModuleId.ServoTubeRackTubePushModule, CmdId.kmini_servo_move_to, new Integer[]{params.scanCodeClampPos}, params.actionOvertime);
this.a8kCanBusService.callblockcmd(ModuleId.ShakeModTubeScanerClampingSV, CmdId.kmini_servo_move_to, new Integer[]{params.scanCodeClampPos}, params.actionOvertime);
}
/**
@ -236,7 +236,7 @@ public class MotorTubeRackMoveCtrlService {
*/
public void scanClampModuleReset() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
this.a8kCanBusService.callblockcmd(ModuleId.ServoTubeRackTubePushModule, CmdId.kmini_servo_move_to, new Integer[]{params.scanCodeReleasePos}, params.actionOvertime);
this.a8kCanBusService.callblockcmd(ModuleId.ShakeModTubeScanerClampingSV, CmdId.kmini_servo_move_to, new Integer[]{params.scanCodeReleasePos}, params.actionOvertime);
}

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

@ -1,18 +1,14 @@
package a8k.service.hardware;
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
@ -39,33 +35,33 @@ public class SamplesPreProcessModuleCtrlService {
public void moveToZero() throws HardwareException, InterruptedException {
var params = this.samplesPreProcessModuleCtrlParamsService;
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
ModuleId.ShakeModGripperSV,
CmdId.kmini_servo_move_to,
params.getGripperServo_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
ModuleId.ShakeModGripperZM,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
ModuleId.ShakeModGripperYM,
CmdId.kmini_servo_move_to,
params.getHorizontalMotor_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeShakeModule,
ModuleId.ShakeModShakeM,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeScanClampModule,
ModuleId.ShakeModClampingM,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
@ -82,27 +78,27 @@ public class SamplesPreProcessModuleCtrlService {
*/
public void enableModule(boolean enable) throws HardwareException {
this.a8kCanBusService.callcmd(
ModuleId.MotorTubeShakeModule,
ModuleId.ShakeModShakeM,
CmdId.kstep_motor_enable,
enable ? 1 : 0
);
this.a8kCanBusService.callcmd(
ModuleId.MotorTubeScanClampModule,
ModuleId.ShakeModClampingM,
CmdId.kstep_motor_enable,
enable ? 1 : 0
);
this.a8kCanBusService.callcmd(
ModuleId.MotorTubeScanClampModule,
ModuleId.ShakeModClampingM,
CmdId.kstep_motor_enable,
enable ? 1 : 0
);
this.a8kCanBusService.callcmd(
ModuleId.ServoTubeMoveFrontBackModule,
ModuleId.ShakeModGripperYM,
CmdId.kmini_servo_enable,
enable ? 1 : 0
);
this.a8kCanBusService.callcmd(
ModuleId.ServoTubeCapClipModule,
ModuleId.ShakeModGripperSV,
CmdId.kmini_servo_enable,
enable ? 1 : 0
);
@ -125,7 +121,7 @@ public class SamplesPreProcessModuleCtrlService {
public AppErrorCode takeTube(String tubeType,boolean judgeCapExist) throws HardwareException, InterruptedException {
var params = this.samplesPreProcessModuleCtrlParamsService;
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
ModuleId.ShakeModGripperYM,
CmdId.kstep_motor_easy_move_to,
params.getHorizontalMotor_takeCapPos(),
params.getActionOvertime()
@ -137,7 +133,7 @@ public class SamplesPreProcessModuleCtrlService {
motorUdTubeTaskPos = params.getZMotor_HighBloodTakeCapHeight();
}
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
ModuleId.ShakeModGripperZM,
CmdId.kstep_motor_easy_move_to,
motorUdTubeTaskPos,
params.getActionOvertime()
@ -145,17 +141,17 @@ public class SamplesPreProcessModuleCtrlService {
if ( judgeCapExist ) {
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeScanClampModule,
ModuleId.ShakeModClampingM,
CmdId.kmini_servo_rotate_with_torque,
params.getGripperServo_takeCapTorque(),
params.getActionOvertime()
);
this.a8kCanBusService.callcmd(
ModuleId.ServoTubeCapClipModule,
ModuleId.ShakeModGripperSV,
CmdId.kmini_servo_stop
);
var pos = this.a8kCanBusService.callcmd(
ModuleId.ServoTubeCapClipModule,
ModuleId.ShakeModGripperSV,
CmdId.kmini_servo_read_pos
);
if ( pos.getContentI32(0) > params.getGripperServo_hatDeterminesPosThres() ) {
@ -164,49 +160,49 @@ public class SamplesPreProcessModuleCtrlService {
}
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
ModuleId.ShakeModGripperSV,
CmdId.kmini_servo_rotate_with_torque,
params.getGripperServo_takeCapTorque(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
ModuleId.ShakeModGripperZM,
CmdId.kstep_motor_easy_move_to,
0,
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
ModuleId.ShakeModGripperYM,
CmdId.kmini_servo_move_to,
params.getHorizontalMotor_takePushCapPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
ModuleId.ShakeModGripperZM,
CmdId.kstep_motor_easy_move_to,
params.getZMotor_placeShakeHeight(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
ModuleId.ShakeModGripperSV,
CmdId.kstep_motor_easy_move_to,
params.getGripperServo_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
ModuleId.ShakeModGripperZM,
CmdId.kstep_motor_easy_move_to,
0,
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
ModuleId.ShakeModGripperYM,
CmdId.kstep_motor_easy_move_to,
params.getHorizontalMotor_standbyPos(),
params.getActionOvertime()
@ -230,14 +226,14 @@ public class SamplesPreProcessModuleCtrlService {
public AppErrorCode takeTubeCap( String tubeType ) throws HardwareException, InterruptedException {
var params = this.samplesPreProcessModuleCtrlParamsService;
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
ModuleId.ShakeModGripperYM,
CmdId.kstep_motor_easy_move_to,
params.getHorizontalMotor_takePushCapPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
ModuleId.ShakeModGripperSV,
CmdId.kstep_motor_easy_move_to,
params.getGripperServo_standbyPos(),
params.getActionOvertime()
@ -249,28 +245,28 @@ public class SamplesPreProcessModuleCtrlService {
motorUdTakeCapPos = params.getZMotor_HighBloodTakeCapHeight();
}
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
ModuleId.ShakeModGripperZM,
CmdId.kstep_motor_easy_move_to,
motorUdTakeCapPos,
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
ModuleId.ShakeModGripperSV,
CmdId.kstep_motor_easy_move_to,
params.getGripperServo_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
ModuleId.ShakeModGripperZM,
CmdId.kstep_motor_easy_move_to,
0,
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
ModuleId.ShakeModGripperYM,
CmdId.kstep_motor_easy_move_to,
params.getHorizontalMotor_standbyPos(),
params.getActionOvertime()
@ -284,14 +280,14 @@ public class SamplesPreProcessModuleCtrlService {
public void pushBackTubeCapAndTakeBakTube(String tubeType) throws HardwareException, InterruptedException {
var params = this.samplesPreProcessModuleCtrlParamsService;
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
ModuleId.ShakeModGripperYM,
CmdId.kstep_motor_easy_move_to,
params.getHorizontalMotor_takePushCapPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
ModuleId.ShakeModGripperSV,
CmdId.kstep_motor_easy_move_to,
params.getGripperServo_standbyPos(),
params.getActionOvertime()
@ -303,28 +299,28 @@ public class SamplesPreProcessModuleCtrlService {
motorUdTakeCapPos = params.getZMotor_HighBloodTakeCapHeight();
}
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
ModuleId.ShakeModGripperZM,
CmdId.kstep_motor_easy_move_to,
motorUdTakeCapPos,
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
ModuleId.ShakeModGripperSV,
CmdId.kstep_motor_easy_move_to,
params.getGripperServo_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
ModuleId.ShakeModGripperZM,
CmdId.kstep_motor_easy_move_to,
0,
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
ModuleId.ShakeModGripperYM,
CmdId.kstep_motor_easy_move_to,
params.getHorizontalMotor_standbyPos(),
params.getActionOvertime()
@ -348,7 +344,7 @@ public class SamplesPreProcessModuleCtrlService {
var startPos = standByPos - shakeDegree/2;
var endPos = standByPos + shakeDegree/2;
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeShakeModule,
ModuleId.ShakeModShakeM,
CmdId.kstep_motor_easy_reciprocating_motion,
startPos,
endPos,
@ -378,28 +374,28 @@ public class SamplesPreProcessModuleCtrlService {
public void moduleResetWhenPowerOn() throws HardwareException, InterruptedException {
var params = this.samplesPreProcessModuleCtrlParamsService;
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
ModuleId.ShakeModGripperSV,
CmdId.kmini_servo_move_to,
params.getTubeClampMotor_standbyPos()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
ModuleId.ShakeModGripperZM,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
ModuleId.ShakeModGripperYM,
CmdId.kmini_servo_move_to,
params.getHorizontalMotor_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeScanClampModule,
ModuleId.ShakeModClampingM,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeShakeModule,
ModuleId.ShakeModShakeM,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
@ -411,46 +407,46 @@ public class SamplesPreProcessModuleCtrlService {
public void moduleRuntimeReset() throws HardwareException, InterruptedException {
var params = this.samplesPreProcessModuleCtrlParamsService;
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeCapClipModule,
ModuleId.ShakeModGripperSV,
CmdId.kmini_servo_move_to,
params.getTubeClampMotor_standbyPos()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
ModuleId.ShakeModGripperZM,
CmdId.kstep_motor_easy_move_to,
0,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeMoveUpDownModule,
ModuleId.ShakeModGripperZM,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.ServoTubeMoveFrontBackModule,
ModuleId.ShakeModGripperYM,
CmdId.kmini_servo_move_to,
params.getHorizontalMotor_standbyPos(),
params.getActionOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeScanClampModule,
ModuleId.ShakeModClampingM,
CmdId.kstep_motor_easy_move_to,
0,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeScanClampModule,
ModuleId.ShakeModClampingM,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeShakeModule,
ModuleId.ShakeModShakeM,
CmdId.kstep_motor_easy_move_to,
0,
params.getMoveToZeroOvertime()
);
this.a8kCanBusService.callblockcmd(
ModuleId.MotorTubeShakeModule,
ModuleId.ShakeModShakeM,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);

Loading…
Cancel
Save