sige 1 year ago
parent
commit
ec7ede301f
  1. 52
      src/main/java/a8k/controller/MotorTubeRackMoveCtrlController.java
  2. 85
      src/main/java/a8k/service/db/dao/MotorTubeRackMoveCtrlServiceParameterDao.java
  3. 89
      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();
}
}

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

@ -1,13 +1,92 @@
package a8k.service.db.dao; package a8k.service.db.dao;
import a8k.service.db.entity.HardwareServiceSetting;
import a8k.service.db.entity.MotorTubeRackMoveCtrlServiceParameter; import a8k.service.db.entity.MotorTubeRackMoveCtrlServiceParameter;
import com.iflytop.uf.UfActiveRecord;
import com.iflytop.uf.UfActiveRecordField;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component @Component
public class MotorTubeRackMoveCtrlServiceParameterDao { 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);
} }
} }

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

@ -51,16 +51,21 @@ public class MotorTubeRackMoveCtrlService {
// //
public void moveToZeroWhenDeviceSetup() throws HardwareException, InterruptedException { 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,
new Integer[]{},
params.getMoveToZeroOvertime()
);
} }
public void moveToZero() throws HardwareException, InterruptedException { public void moveToZero() throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
var params = this.serviceParameterDao;
var beforePosResponse = this.a8kCanBusService.callcmd(ModId.FeedingModXM, CmdId.kstep_motor_read_pos, new Integer[]{0}); var beforePosResponse = this.a8kCanBusService.callcmd(ModId.FeedingModXM, CmdId.kstep_motor_read_pos, new Integer[]{0});
var beforePos = beforePosResponse.getContentI32(0); var beforePos = beforePosResponse.getContentI32(0);
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to_zero, new Integer[]{}, params.moveToZeroOvertime);
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to_zero, new Integer[]{}, params.getMoveToZeroOvertime());
var afterPosResponse = this.a8kCanBusService.callcmd(ModId.FeedingModXM, CmdId.kstep_motor_read_pos, new Integer[]{0}); var afterPosResponse = this.a8kCanBusService.callcmd(ModId.FeedingModXM, CmdId.kstep_motor_read_pos, new Integer[]{0});
var afterPos = afterPosResponse.getContentI32(0); var afterPos = afterPosResponse.getContentI32(0);
var distance = beforePos - afterPos; var distance = beforePos - afterPos;
@ -68,7 +73,7 @@ public class MotorTubeRackMoveCtrlService {
var dval = a8kCanBusService.module_read_reg(ModId.FeedingModXM, RegIndex.kreg_step_motor_dpos); 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, Errorcode.kstep_motor_lost_step); throw new HardwareException(ModId.FeedingModXM, Errorcode.kstep_motor_lost_step);
} }
@ -91,24 +96,39 @@ public class MotorTubeRackMoveCtrlService {
* 移动试管架到入口位置 * 移动试管架到入口位置
*/ */
public void moveTubeRackToEnterPos() throws HardwareException, InterruptedException { 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,
new Integer[]{params.getTubeRackEnterPos()},
params.getActionOvertime()
);
} }
/** /**
* 移动试管架到出口位置 * 移动试管架到出口位置
*/ */
public void moveTubeRackToExitPos() throws HardwareException, InterruptedException { 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,
new Integer[]{params.getTubeExistJudgmentPos()},
params.getActionOvertime()
);
} }
/** /**
* 移动试管架到试管架扫码位置 * 移动试管架到试管架扫码位置
*/ */
public void moveTubeRackToScanPos() throws HardwareException, InterruptedException { 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,
new Integer[]{params.getTubeRackScanCodePos()},
params.getActionOvertime()
);
} }
/** /**
@ -135,10 +155,15 @@ public class MotorTubeRackMoveCtrlService {
* @param tubeIndex * @param tubeIndex
*/ */
public void moveTubeToScanPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException { public void moveTubeToScanPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
var params = this.serviceParameterDao;
var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType); 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 scanPos = params.getTubeScanPos() + tubeIndex * tubeInfo.tubeSpacing;
this.a8kCanBusService.callblockcmd(
ModId.FeedingModXM,
CmdId.kstep_motor_easy_move_to,
new Integer[]{scanPos},
params.getActionOvertime()
);
} }
/** /**
@ -163,10 +188,10 @@ public class MotorTubeRackMoveCtrlService {
* @param tubeIndex * @param tubeIndex
*/ */
public void moveTubeToHeighJudgmentPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException { public void moveTubeToHeighJudgmentPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
var params = this.serviceParameterDao;
var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType); 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 detectPos = params.getTubeHeighJudgmentPos() + tubeIndex * tubeInfo.tubeSpacing;
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{detectPos}, params.getActionOvertime());
} }
/** /**
@ -175,10 +200,10 @@ public class MotorTubeRackMoveCtrlService {
* @param tubeIndex * @param tubeIndex
*/ */
public void moveTubeToPreProcessPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException { public void moveTubeToPreProcessPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
var params = this.serviceParameterDao;
var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType); 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 pos = params.getTubePreProcessPos() + tubeIndex * tubeInfo.tubeSpacing;
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{pos}, params.getActionOvertime());
} }
// //
@ -191,10 +216,10 @@ public class MotorTubeRackMoveCtrlService {
* @param tubeIndex * @param tubeIndex
*/ */
public void moveTubeToExistJudgmentPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException { public void moveTubeToExistJudgmentPos(String tubeType, Integer tubeIndex) throws HardwareException, InterruptedException {
var params = this.serviceParameterDao.getParameter();
var params = this.serviceParameterDao;
var tubeInfo = this.tubeInfoDao.getTubeInfo(tubeType); 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 pos = params.getTubeRackExitPos() + tubeIndex * tubeInfo.tubeSpacing;
this.a8kCanBusService.callblockcmd(ModId.FeedingModXM, CmdId.kstep_motor_easy_move_to, new Integer[]{pos}, params.getActionOvertime());
} }
public boolean isTubeRackInEnterPos() throws HardwareException { public boolean isTubeRackInEnterPos() throws HardwareException {
@ -227,16 +252,26 @@ public class MotorTubeRackMoveCtrlService {
* 扫描夹紧机构夹紧 * 扫描夹紧机构夹紧
*/ */
public void scanClampModuleCompress() throws HardwareException, InterruptedException { 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 { 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