sige 1 year ago
parent
commit
f97f07e068
  1. 103
      src/src/main/java/com/my/graphiteDigesterBg/step/StepTakeOutFromErrorSlot.java
  2. 2
      src/web/src/pages/main/Page.vue
  3. 2
      src/web/src/pages/main/contents/TaskStepManagement.vue
  4. 42
      src/web/src/pages/main/contents/notification/TaskErrorDigestionStepTakeOutFromErrorSlot.vue

103
src/src/main/java/com/my/graphiteDigesterBg/step/StepTakeOutFromErrorSlot.java

@ -0,0 +1,103 @@
package com.my.graphiteDigesterBg.step;
import com.my.graphiteDigesterBg.MyDevice;
import com.my.graphiteDigesterBg.diframe.DiTaskStepBase;
import com.my.graphiteDigesterBg.diframe.TaskStep;
import com.my.graphiteDigesterBg.diframe.actuator.DiActMotor;
import com.my.graphiteDigesterBg.diframe.actuator.DiActServo;
import com.my.graphiteDigesterBg.diframe.model.DiMdbNotification;
import com.my.graphiteDigesterBg.move.MoveDoorClose;
import com.my.graphiteDigesterBg.move.MoveDoorOpen;
import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager;
import com.my.graphiteDigesterBg.task.TaskDigestion;
import java.util.ArrayList;
import java.util.List;
@TaskStep(name="TakeOutFromErrorSlot")
public class StepTakeOutFromErrorSlot extends DiTaskStepBase {
@Override
public void run() {
var task = (TaskDigestion)this.getTask();
var slot = task.getSlot();
List<Integer> errorTubes = task.errorTubeIndexes;
if ( null == errorTubes ) {
errorTubes = new ArrayList<>();
}
// 开门
MoveDoorOpen.execute(task.getDevice());
// 准备一个空试管架
DiMdbNotification.taskAction(task,"TaskErrorDigestionStepTakeOutFromErrorSlot");
task.waitAction("TaskErrorDigestionStepTakeOutFromErrorSlot");
// 关门
MoveDoorClose.execute(task.getDevice());
for ( Integer errorTubeIndex : errorTubes ) {
this.takeOutFromErrorSlot(errorTubeIndex);
}
}
// 从异常处理区域取出试管
private void takeOutFromErrorSlot( Integer tubeIndex ) {
var task = (TaskDigestion)this.getTask();
var slotMan = task.getResourceManager(ResHeatingTubeRackSlotManager.class);
var heatPlateMotor = this.getActuator(MyDevice.ACT_HEAT_PLATE_MOTOR, DiActMotor.class);
var transLrMotor = this.getActuator(MyDevice.ACT_TRANSFER_LR_MOTOR, DiActMotor.class);
var transUdMotor = this.getActuator(MyDevice.ACT_TRANSFER_UD_MOTOR, DiActMotor.class);
var transferClipServo = this.getActuator(MyDevice.ACT_TRANSFER_CLIP_SERVO, DiActServo.class);
var liquidPlateMotor = this.getActuator(MyDevice.ACT_LIQUID_PLATE_MOTOR, DiActMotor.class);
// 打开试管架盖
var errorSlot = slotMan.getErrorSlot();
String errSlotKey = "HeatingPlateMotorSlotCover_" + errorSlot.index;
DiActServo coverServo = this.getActuator(errSlotKey, DiActServo.class);
coverServo.moveTo("HeatPlateSlotCoverOpen");
// 加热转盘移动到试管位置
heatPlateMotor.moveTo("HeatPlateErrorSlotTube", tubeIndex);
// 搬运左右移动到试管位置
transLrMotor.moveTo("TransLrMotorHeatingPlateTube", tubeIndex);
// 打开试管夹
transferClipServo.moveTo("TransClipServoOpenFromTube");
// 升降下降到试管位置
transUdMotor.moveTo("TransUdMotorTubeClip");
// 试管夹关闭
transferClipServo.moveTo("TransClipServoClose");
// 升降移动到顶部
transUdMotor.moveTo("TransUdMotorTop");
// 搬运左右移动到就绪位置
transLrMotor.moveTo("TransLrMotorStandby");
// 盖上试管架盖
coverServo.moveTo("HeatPlateSlotCoverClose");
// 加液转盘移至就绪位置
heatPlateMotor.moveTo("HeatPlateStandby");
// 标记试管位置存在
var errorRackSlot = slotMan.getErrorSlot();
errorRackSlot.getTubes().get(tubeIndex).setHasTube(false);
// 下方试管
// 加液盘旋转到试管位置
liquidPlateMotor.moveTo("LiquidPlateTube", tubeIndex);
// 搬运左右移动到试管位置
transLrMotor.moveTo("TransLrMotorLiquidPlateTube", tubeIndex);
// 搬运上下移动到取试管位置
transUdMotor.moveTo("TransUdMotorLiquidPlateTubeClip");
// 搬运夹爪张开
transferClipServo.moveTo("TransClipServoOpenForTube");
// 搬运上下移动到顶部
transUdMotor.moveTo("TransUdMotorTop");
// 搬运夹爪关闭
transferClipServo.moveTo("TransClipServoTubeClip");
// 搬运左右移动到就绪位置
transLrMotor.moveTo("TransLrMotorStandby");
// 加液试管架回到就绪位置
liquidPlateMotor.moveTo("LiquidPlateStandby");
}
// action done
public void actionDone( ) {
var task = (TaskDigestion)this.getTask();
var action = task.getAction("TaskErrorDigestionStepTakeOutFromErrorSlot");
action.finish();
}
}

2
src/web/src/pages/main/Page.vue

@ -66,6 +66,7 @@
<noti-handler-task-sample-take-out-tube-rack />
<noti-handler-task-digestion-step-take-out />
<noti-handler-task-digestion-step-checking />
<noti-handler-task-error-digestion-step-take-out-from-error-slot />
</template>
<script setup>
import { ref,onMounted, onUnmounted } from 'vue';
@ -88,6 +89,7 @@ import NotiHandlerTaskStartResetErrorTubeRackTakeOut from './contents/notificati
import NotiHandlerTaskSampleTakeOutTubeRack from './contents/notification/TaskSampleTakeOutTubeRack.vue';
import NotiHandlerTaskDigestionStepTakeOut from './contents/notification/TaskDigestionStepTakeOut.vue';
import NotiHandlerTaskDigestionStepChecking from './contents/notification/TaskDigestionStepChecking.vue';
import NotiHandlerTaskErrorDigestionStepTakeOutFromErrorSlot from './contents/notification/TaskErrorDigestionStepTakeOutFromErrorSlot.vue';
/** @var {AppStore} */
const appStore = useAppStore();
/** @var {Ref<string>} */

2
src/web/src/pages/main/contents/TaskStepManagement.vue

@ -62,6 +62,7 @@
<a-select-option value="MoveToLiquidPlate">转移至加液区</a-select-option>
<a-select-option value="Checking">检查</a-select-option>
<a-select-option value="MoveErrorTubesToErrorSlot">转移异常试管至异常区</a-select-option>
<a-select-option value="TakeOutFromErrorSlot">从异常区域取出试管</a-select-option>
<a-select-option value="ExecuteErrorTask">执行异常处理</a-select-option>
<a-select-option value="TakeOut">取出</a-select-option>
</a-select>
@ -161,6 +162,7 @@ function stepNameGet(step) {
case 'TakeOut' : return `取出`;
case 'Checking' : return `检查`;
case 'MoveErrorTubesToErrorSlot' : return `转移异常试管至异常区`;
case 'TakeOutFromErrorSlot' : return '从异常区域取出试管';
}
}

42
src/web/src/pages/main/contents/notification/TaskErrorDigestionStepTakeOutFromErrorSlot.vue

@ -0,0 +1,42 @@
<template>
<a-modal v-if="enable" v-model:open="enable" title="放入试管架"
:closable="false"
:mask-closable="false"
>
<p>请放入空试管架 完成后请点击 确定 按钮以继续</p>
<template #footer>
<a-button type="primary" @click="actionOk">确定</a-button>
</template>
</a-modal>
</template>
<script setup>
import { onMounted, ref } from 'vue';
import { useAppStore } from '@/stores/AppStore';
import ApiClient from '@/utils/ApiClient';
/** @var {AppStore} */
const appStore = useAppStore();
/** @var {Ref<boolean>} */
const enable = ref(false);
/** @var {string} */
let taskId = null;
// on mounted
onMounted(mounted);
// mounted
function mounted() {
appStore.registerNotificationHandler('TaskErrorDigestionStepTakeOutFromErrorSlot', handleTaskErrorDigestionStepTakeOutFromErrorSlot);
}
// handle TaskStartResetErrorTubeRackPutIn
function handleTaskErrorDigestionStepTakeOutFromErrorSlot( task ) {
taskId = task;
enable.value = true;
}
// action ok
async function actionOk() {
enable.value = false;
let client = ApiClient.getClient();
await client.taskStepActionExecute(taskId, "Done");
}
</script>
Loading…
Cancel
Save