zhaohe 1 year ago
parent
commit
b285c29be6
  1. 52
      src/main/java/a8k/controller/MotorTubeRackMoveCtrlController.java
  2. 1
      src/main/java/a8k/controller/SamplesPreProcessModuleCtrlController.java
  3. 85
      src/main/java/a8k/service/db/dao/MotorTubeRackMoveCtrlServiceParameterDao.java
  4. 171
      src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java

52
src/main/java/a8k/controller/MotorTubeRackMoveCtrlController.java

@ -0,0 +1,52 @@
package a8k.controller;
import a8k.service.db.dao.MotorTubeRackMoveCtrlServiceParameterDao;
import a8k.service.hardware.MotorTubeRackMoveCtrlService;
import com.iflytop.uf.controller.UfApiControllerBase;
import com.iflytop.uf.controller.UfApiResponse;
import com.iflytop.uf.util.UfClassHelper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;
@Controller
public class MotorTubeRackMoveCtrlController extends UfApiControllerBase {
@Resource
private MotorTubeRackMoveCtrlService motorTubeRackMoveCtrlService;
@Resource
private MotorTubeRackMoveCtrlServiceParameterDao motorTubeRackMoveCtrlServiceParameterDao;
@PostMapping("/api/motor-tube-rack-move-ctrl/execute-service-method")
@ResponseBody
public UfApiResponse executeServiceMethod( @RequestBody Map<String,Object> params )
throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Object service = this.motorTubeRackMoveCtrlService;
String methodName = (String)params.get("method");
List<Object> methodArgs = (List<Object>)params.get("params");
Object result = UfClassHelper.invokeMethod(service, methodName, methodArgs);
return this.success(result);
}
@PostMapping("/api/motor-tube-rack-move-ctrl/list-options")
@ResponseBody
public UfApiResponse listAllOptions() throws NoSuchMethodException {
var list = this.motorTubeRackMoveCtrlServiceParameterDao.listOptions();
return this.success(list);
}
@PostMapping("/api/motor-tube-rack-move-ctrl/update-options")
@ResponseBody
public UfApiResponse updateOptions(@RequestBody Map<String,Object> params ) throws Exception {
var options = (List<Map<String,Object>>)params.get("options");
for (Map<String,Object> item : options) {
var name = (String)item.get("name");
var option = this.motorTubeRackMoveCtrlServiceParameterDao.getOption(name);
option.setValue(item.get("value"));
option.save();
}
return this.success();
}
}

1
src/main/java/a8k/controller/SamplesPreProcessModuleCtrlController.java

@ -9,7 +9,6 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;

85
src/main/java/a8k/service/db/dao/MotorTubeRackMoveCtrlServiceParameterDao.java

@ -1,13 +1,92 @@
package a8k.service.db.dao;
import a8k.service.db.entity.HardwareServiceSetting;
import a8k.service.db.entity.MotorTubeRackMoveCtrlServiceParameter;
import com.iflytop.uf.UfActiveRecord;
import com.iflytop.uf.UfActiveRecordField;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component
public class MotorTubeRackMoveCtrlServiceParameterDao {
/**
* 参数存放在HardwareServiceSetting中
* 每个参数依赖于Key+serviceName进行索引
*/
public final String serviceName = "MotorTubeRackMoveCtrlServiceParameterDao";
public List<HardwareServiceSetting> listOptions() {
return UfActiveRecord.find(HardwareServiceSetting.class, Map.of("serviceName", this.serviceName));
}
public HardwareServiceSetting getOption(String optionName) {
return HardwareServiceSetting.getOption(this.serviceName, optionName);
}
// 回零超时时间
public int getMoveToZeroOvertime() {
return HardwareServiceSetting.getInteger(this.serviceName, "MoveToZeroOvertime", 0);
}
// 执行动作的超时时间该超时时间适用于当前模块在当前产品中所有动作的最大时间
public int getActionOvertime() {
return HardwareServiceSetting.getInteger(this.serviceName, "ActionOvertime", 0);
}
//试管扫码位置
public int getTubeScanPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "TubeScanPos", 0);
}
//高低试管判断位置
public Integer getTubeHeighJudgmentPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "TubeHeighJudgmentPos", 0);
}
//试管预处理位置
public Integer getTubePreProcessPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "TubePreProcessPos", 0);
}
//入料位置
public Integer getTubeExistJudgmentPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "TubeExistJudgmentPos", 0);
}
//出料位置
public Integer getTubeRackEnterPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "TubeRackEnterPos", 0);
}
//出料位置
public Integer getTubeRackExitPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "TubeRackExitPos", 0);
}
//试管架扫码位置
public Integer getTubeRackScanCodePos() {
return HardwareServiceSetting.getInteger(this.serviceName, "TubeRackScanCodePos", 0);
}
//水平电机丢步判断
public Integer getHorizontalMotorLostStepThresholdVal() {
return HardwareServiceSetting.getInteger(this.serviceName, "HorizontalMotorLostStepThresholdVal", 0);
}
//试管扫码夹紧位置
public Integer getScanCodeClampPos() {
return HardwareServiceSetting.getInteger(this.serviceName, "ScanCodeClampPos", 0);
}
//试管扫码释放位置
public Integer getScanCodeReleasePos() {
return HardwareServiceSetting.getInteger(this.serviceName, "ScanCodeReleasePos", 0);
}
public MotorTubeRackMoveCtrlServiceParameter getParameter() {
//TODO:
return null;
//
public Integer getTubeSpacing() {
return HardwareServiceSetting.getInteger(this.serviceName, "TubeSpacing", 0);
}
}

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

@ -45,30 +45,70 @@ public class MotorTubeRackMoveCtrlService {
@Resource
MotorTubeRackMoveCtrlServiceParameterDao serviceParameterDao;
public void setEnable( Boolean enable ) throws HardwareException {
this.a8kCanBusService.callcmd(
ModId.FeedingModXM,
CmdId.kstep_motor_enable,
enable ? 1 : 0
);
this.a8kCanBusService.callcmd(
ModId.FeedingModInfeedM,
CmdId.kstep_motor_enable,
enable ? 1 : 0
);
this.a8kCanBusService.callcmd(
ModId.FeedingModOutfeedM,
CmdId.kstep_motor_enable,
enable ? 1 : 0
);
}
public void stop() throws HardwareException {
this.a8kCanBusService.callcmd(
ModId.FeedingModXM,
CmdId.kstep_motor_stop,
1
);
this.a8kCanBusService.callcmd(
ModId.FeedingModInfeedM,
CmdId.kstep_motor_stop,
1
);
this.a8kCanBusService.callcmd(
ModId.FeedingModOutfeedM,
CmdId.kstep_motor_stop,
1
);
}
//
// 电机基础控制
//
public void moveToZeroWhenDeviceSetup() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to_zero, new Integer[]{}, params.moveToZeroOvertime);
var params = this.serviceParameterDao;
this.a8kCanBusService.callblockcmd(
ModId.FeedingModXM,
CmdId.kstep_motor_easy_move_to_zero,
params.getMoveToZeroOvertime()
);
}
public void moveToZero() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
var beforePosResponse = this.a8kCanBusService.callcmd(ModId.FeedingModXM, CmdId.kstep_motor_read_pos, new Integer[]{0});
var params = this.serviceParameterDao;
var beforePosResponse = this.a8kCanBusService.callcmd(ModId.FeedingModXM, CmdId.kstep_motor_read_pos);
var beforePos = beforePosResponse.getContentI32(0);
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to_zero, new Integer[]{}, params.moveToZeroOvertime);
var afterPosResponse = this.a8kCanBusService.callcmd(ModId.FeedingModXM, CmdId.kstep_motor_read_pos, new Integer[]{0});
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to_zero, params.getMoveToZeroOvertime());
var afterPosResponse = this.a8kCanBusService.callcmd(ModId.FeedingModXM, CmdId.kstep_motor_read_pos);
var afterPos = afterPosResponse.getContentI32(0);
var distance = beforePos - afterPos;
var dval = a8kCanBusService.module_read_reg(ModId.FeedingModXM, RegIndex.kreg_step_motor_dpos);
if (Math.abs(dval - distance) > params.horizontalMotorLostStepThresholdVal) {
if (Math.abs(dval - distance) > params.getHorizontalMotorLostStepThresholdVal() ) {
throw new HardwareException(ModId.FeedingModXM, A8kEcode.MotorLostStep.toInt());
}
@ -91,24 +131,39 @@ public class MotorTubeRackMoveCtrlService {
* 移动试管架到入口位置
*/
public void moveTubeRackToEnterPos() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{params.tubeRackEnterPos}, params.actionOvertime);
var params = this.serviceParameterDao;
this.a8kCanBusService.callblockcmd(
ModId.FeedingModXM,
CmdId.kstep_motor_easy_move_to,
params.getTubeRackEnterPos(),
params.getActionOvertime()
);
}
/**
* 移动试管架到出口位置
*/
public void moveTubeRackToExitPos() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{params.tubeExistJudgmentPos}, params.actionOvertime);
var params = this.serviceParameterDao;
this.a8kCanBusService.callblockcmd(
ModId.FeedingModXM,
CmdId.kstep_motor_easy_move_to,
params.getTubeRackExitPos(),
params.getActionOvertime()
);
}
/**
* 移动试管架到试管架扫码位置
*/
public void moveTubeRackToScanPos() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{params.tubeRackScanCodePos}, params.actionOvertime);
var params = this.serviceParameterDao;
this.a8kCanBusService.callblockcmd(
ModId.FeedingModXM,
CmdId.kstep_motor_easy_move_to,
params.getTubeRackScanCodePos(),
params.getActionOvertime()
);
}
/**
@ -116,10 +171,10 @@ public class MotorTubeRackMoveCtrlService {
*/
public String moveTubeRackToScanPosAndScan() throws HardwareException, InterruptedException {
this.moveTubeRackToScanPos();
this.a8kCanBusService.callcmd(ModId.FeedingModScannerMod, CmdId.kcode_scaner_start_scan, new Integer[]{});
Thread.sleep(500);
var response = this.a8kCanBusService.callcmd(ModId.FeedingModScannerMod, CmdId.kcode_scaner_read_scaner_result, new Integer[]{});
this.a8kCanBusService.callcmd(ModId.FeedingModScannerMod, CmdId.kcode_scaner_stop_scan, new Integer[]{});
this.a8kCanBusService.callcmd(ModId.FeedingModScannerMod, CmdId.kcode_scaner_start_scan);
Thread.sleep(5000);
var response = this.a8kCanBusService.callcmd(ModId.FeedingModScannerMod, CmdId.kcode_scaner_read_scaner_result);
this.a8kCanBusService.callcmd(ModId.FeedingModScannerMod, CmdId.kcode_scaner_stop_scan);
var contentBytes = response.getCmdContent();
return new String(contentBytes);
}
@ -135,10 +190,14 @@ public class MotorTubeRackMoveCtrlService {
* @param tubeIndex
*/
public void moveTubeToScanPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType);
var scanPos = params.tubeScanPos + tubeIndex * tubeInfo.tubeSpacing;
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{scanPos}, params.actionOvertime);
var params = this.serviceParameterDao;
var scanPos = params.getTubeScanPos() + tubeIndex * params.getTubeSpacing();
this.a8kCanBusService.callblockcmd(
ModId.FeedingModXM,
CmdId.kstep_motor_easy_move_to,
scanPos,
params.getActionOvertime()
);
}
/**
@ -149,10 +208,10 @@ public class MotorTubeRackMoveCtrlService {
public String moveTubeToScanPosAndScan(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException {
this.moveTubeToScanPos(tubeType, tubeIndex);
this.a8kCanBusService.callcmd(ModId.FeedingModScannerMod, CmdId.kcode_scaner_start_scan, new Integer[]{});
Thread.sleep(500);
var response = this.a8kCanBusService.callcmd(ModId.FeedingModScannerMod, CmdId.kcode_scaner_read_scaner_result, new Integer[]{});
this.a8kCanBusService.callcmd(ModId.FeedingModScannerMod, CmdId.kcode_scaner_stop_scan, new Integer[]{});
this.a8kCanBusService.callcmd(ModId.FeedingModScannerMod, CmdId.kcode_scaner_start_scan);
Thread.sleep(5000);
var response = this.a8kCanBusService.callcmd(ModId.FeedingModScannerMod, CmdId.kcode_scaner_read_scaner_result);
this.a8kCanBusService.callcmd(ModId.FeedingModScannerMod, CmdId.kcode_scaner_stop_scan);
var contentBytes = response.getCmdContent();
return new String(contentBytes);
}
@ -163,10 +222,14 @@ public class MotorTubeRackMoveCtrlService {
* @param tubeIndex
*/
public void moveTubeToHeighJudgmentPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType);
var detectPos = params.tubeHeighJudgmentPos + tubeIndex * tubeInfo.tubeSpacing;
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{detectPos}, params.actionOvertime);
var params = this.serviceParameterDao;
var detectPos = params.getTubeHeighJudgmentPos() + tubeIndex * params.getTubeSpacing();
this.a8kCanBusService.callblockcmd(
ModId.FeedingModXM,
CmdId.kstep_motor_easy_move_to,
detectPos,
params.getActionOvertime()
);
}
/**
@ -175,10 +238,14 @@ public class MotorTubeRackMoveCtrlService {
* @param tubeIndex
*/
public void moveTubeToPreProcessPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType);
var pos = params.tubePreProcessPos + tubeIndex * tubeInfo.tubeSpacing;
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{pos}, params.actionOvertime);
var params = this.serviceParameterDao;
var pos = params.getTubePreProcessPos() + tubeIndex * params.getTubeSpacing();
this.a8kCanBusService.callblockcmd(
ModId.FeedingModXM,
CmdId.kstep_motor_easy_move_to,
pos,
params.getActionOvertime()
);
}
//
@ -191,20 +258,17 @@ public class MotorTubeRackMoveCtrlService {
* @param tubeIndex
*/
public void moveTubeToExistJudgmentPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType);
var pos = params.tubeRackExitPos + tubeIndex * tubeInfo.tubeSpacing;
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{pos}, params.actionOvertime);
var params = this.serviceParameterDao;
var pos = params.getTubeRackExitPos() + tubeIndex * params.getTubeSpacing();
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{pos}, params.getActionOvertime());
}
public boolean isTubeRackInEnterPos() throws HardwareException {
var response = this.a8kCanBusService.callcmd(ModId.FeedingModBoard, CmdId.kxymotor_read_inio, new Integer[]{3});
return response.getContentI32(0) == 1;
return this.a8kCanBusService.getIOState(IOId.InfeedPPS);
}
public boolean isTubeRackInExitPos() throws HardwareException {
var response = this.a8kCanBusService.callcmd(ModId.FeedingModBoard, CmdId.kxymotor_read_inio, new Integer[]{5});
return response.getContentI32(0) == 1;
return this.a8kCanBusService.getIOState(IOId.OutfeedPPS);
}
/**
@ -212,10 +276,9 @@ public class MotorTubeRackMoveCtrlService {
* @param photoelectricIndex 0:里光电1:外光电
* @return true, 光电触发 false,光电没有触发
*/
public boolean getMoveChannelPhotoelectricState(int photoelectricIndex) throws HardwareException {
var index = 0 == photoelectricIndex ? 2 : 1;
var response = this.a8kCanBusService.callcmd(ModId.FeedingModBoard, CmdId.kxymotor_read_inio, new Integer[]{index});
return response.getContentI32(0) == 1;
public boolean getMoveChannelPhotoelectricState(Integer photoelectricIndex) throws HardwareException {
var io = 0 == photoelectricIndex ? IOId.THChOuterPPS : IOId.THChInterPPS;
return this.a8kCanBusService.getIOState(io);
}
//
@ -227,16 +290,26 @@ public class MotorTubeRackMoveCtrlService {
* 扫描夹紧机构夹紧
*/
public void scanClampModuleCompress() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
this.a8kCanBusService.callblockcmd(ModId.ShakeModTubeScanerClampingSV, CmdId.kmini_servo_move_to, new Integer[]{params.scanCodeClampPos}, params.actionOvertime);
var params = this.serviceParameterDao;
this.a8kCanBusService.callblockcmd(
ModId.ShakeModTubeScanerClampingSV,
CmdId.kmini_servo_move_to,
new Integer[]{params.getScanCodeClampPos()},
params.getActionOvertime()
);
}
/**
* 扫描夹紧机构复位
*/
public void scanClampModuleReset() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
this.a8kCanBusService.callblockcmd(ModId.ShakeModTubeScanerClampingSV, CmdId.kmini_servo_move_to, new Integer[]{params.scanCodeReleasePos}, params.actionOvertime);
var params = this.serviceParameterDao;
this.a8kCanBusService.callblockcmd(
ModId.ShakeModTubeScanerClampingSV,
CmdId.kmini_servo_move_to,
new Integer[]{params.getScanCodeReleasePos()},
params.getActionOvertime()
);
}

Loading…
Cancel
Save