4 changed files with 149 additions and 0 deletions
-
103src/src/main/java/com/my/graphiteDigesterBg/step/StepTakeOutFromErrorSlot.java
-
2src/web/src/pages/main/Page.vue
-
2src/web/src/pages/main/contents/TaskStepManagement.vue
-
42src/web/src/pages/main/contents/notification/TaskErrorDigestionStepTakeOutFromErrorSlot.vue
@ -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(); |
|||
} |
|||
} |
@ -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> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue