diff --git a/src/main/java/a8k/controller/MotorTubeRackMoveCtrlController.java b/src/main/java/a8k/controller/MotorTubeRackMoveCtrlController.java new file mode 100644 index 0000000..d4b1136 --- /dev/null +++ b/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 params ) + throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + Object service = this.motorTubeRackMoveCtrlService; + String methodName = (String)params.get("method"); + List methodArgs = (List)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 params ) throws Exception { + var options = (List>)params.get("options"); + for (Map item : options) { + var name = (String)item.get("name"); + var option = this.motorTubeRackMoveCtrlServiceParameterDao.getOption(name); + option.setValue(item.get("value")); + option.save(); + } + return this.success(); + } +} diff --git a/src/main/java/a8k/service/db/dao/MotorTubeRackMoveCtrlServiceParameterDao.java b/src/main/java/a8k/service/db/dao/MotorTubeRackMoveCtrlServiceParameterDao.java index 0c68036..bb2fed4 100644 --- a/src/main/java/a8k/service/db/dao/MotorTubeRackMoveCtrlServiceParameterDao.java +++ b/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 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); } } diff --git a/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java b/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java index 242e07c..741c45d 100644 --- a/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java +++ b/src/main/java/a8k/service/hardware/MotorTubeRackMoveCtrlService.java @@ -51,16 +51,21 @@ public class MotorTubeRackMoveCtrlService { // 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 { - 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 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 afterPos = afterPosResponse.getContentI32(0); var distance = beforePos - afterPos; @@ -68,7 +73,7 @@ public class MotorTubeRackMoveCtrlService { 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); } @@ -91,24 +96,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, + new Integer[]{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, + new Integer[]{params.getTubeExistJudgmentPos()}, + 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, + new Integer[]{params.getTubeRackScanCodePos()}, + params.getActionOvertime() + ); } /** @@ -135,10 +155,15 @@ public class MotorTubeRackMoveCtrlService { * @param tubeIndex */ 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 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 */ 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 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 */ 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 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 */ 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 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 { @@ -227,16 +252,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() + ); }