19 changed files with 278 additions and 33 deletions
-
1src/src/main/java/com/my/graphiteDigesterBg/diframe/DiCommand.java
-
1src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceIO.java
-
7src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceIOManager.java
-
25src/src/main/java/com/my/graphiteDigesterBg/diframe/actuator/DiActMotor.java
-
11src/src/main/java/com/my/graphiteDigesterBg/move/MoveLiquidAdd.java
-
16src/src/main/java/com/my/graphiteDigesterBg/move/MoveMoveTubeRackFromHeatPlateToLiquidPlate.java
-
16src/src/main/java/com/my/graphiteDigesterBg/move/MoveMoveTubeRackFromLiquidPlateToHeatPlate.java
-
21src/src/main/java/com/my/graphiteDigesterBg/move/MoveTubeToErrorRackSlot.java
-
4src/src/main/java/com/my/graphiteDigesterBg/resource/ResHeatingTubeRackSlot.java
-
9src/src/main/java/com/my/graphiteDigesterBg/task/TaskHeating.java
-
32src/src/main/java/com/my/graphiteDigesterBg/task/TaskSampleMoveToHeatPlate.java
-
22src/src/main/java/com/my/graphiteDigesterBg/task/TaskSampleMoveToLiquidPlate.java
-
11src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java
-
21src/src/main/java/com/my/graphiteDigesterBg/task/TaskTubeMoveToErrorSlot.java
-
2src/src/main/resources/application.yml
-
59src/src/main/resources/device.yml
-
2src/web/src/pages/main/contents/Operation.vue
-
6src/web/src/pages/main/contents/OperationCamera.vue
-
45src/web/src/pages/main/contents/OperationSampleTakeShot.vue
@ -0,0 +1,32 @@ |
|||
package com.my.graphiteDigesterBg.task; |
|||
import com.my.graphiteDigesterBg.diframe.DiTaskBase; |
|||
import com.my.graphiteDigesterBg.diframe.Task; |
|||
import com.my.graphiteDigesterBg.move.MoveMoveTubeRackFromLiquidPlateToHeatPlate; |
|||
import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager; |
|||
|
|||
@Task(name="SampleMoveToHeatPlate") |
|||
public class TaskSampleMoveToHeatPlate extends DiTaskBase { |
|||
@Override |
|||
public void run() { |
|||
this.setStatus(TaskStatus.RUNNING); |
|||
|
|||
Integer slotIndex = null; |
|||
var slotMan = this.getResourceManager(ResHeatingTubeRackSlotManager.class); |
|||
for ( var slot : slotMan.getSlots() ) { |
|||
if ( slot.rackPosition.equals("LIQUID_PLATE") ) { |
|||
slotIndex = slot.index; |
|||
break; |
|||
} |
|||
} |
|||
if ( slotIndex == null ) { |
|||
throw new RuntimeException("liquid plate slot not found"); |
|||
} |
|||
|
|||
var move = new MoveMoveTubeRackFromLiquidPlateToHeatPlate(); |
|||
move.setDevice(this.getDevice()); |
|||
move.slotIndex = slotIndex; |
|||
move.run(); |
|||
|
|||
this.setStatus(TaskStatus.FINISHED); |
|||
} |
|||
} |
@ -0,0 +1,22 @@ |
|||
package com.my.graphiteDigesterBg.task; |
|||
import com.my.graphiteDigesterBg.MyDevice; |
|||
import com.my.graphiteDigesterBg.diframe.DiTaskBase; |
|||
import com.my.graphiteDigesterBg.diframe.Task; |
|||
import com.my.graphiteDigesterBg.move.MoveMoveTubeRackFromHeatPlateToLiquidPlate; |
|||
@Task(name="SampleMoveToLiquidPlate") |
|||
public class TaskSampleMoveToLiquidPlate extends DiTaskBase { |
|||
// slot index |
|||
public Integer slotIndex; |
|||
|
|||
@Override |
|||
public void run() { |
|||
this.setStatus(TaskStatus.RUNNING); |
|||
|
|||
var move = new MoveMoveTubeRackFromHeatPlateToLiquidPlate(); |
|||
move.setDevice(this.getDevice()); |
|||
move.slotIndex = this.slotIndex; |
|||
move.run(); |
|||
|
|||
this.setStatus(TaskStatus.FINISHED); |
|||
} |
|||
} |
@ -0,0 +1,45 @@ |
|||
<template> |
|||
<a-button class="ml-1" @click="actionSampleTakeShot"><eye-outlined /></a-button> |
|||
|
|||
<!-- 取出位置弹框 --> |
|||
<a-modal v-if="enable" v-model:open="enable" title="观察样本" @ok="actionOk" @cancel="actionCancel" ok-text="确认" cancel-text="取消"> |
|||
<a-form :label-col="{span:4}" :wrapper-col="{span:20}" label-align="left" class="py-5"> |
|||
<a-form-item label="位置"> |
|||
<a-radio-group v-model:value="slotIndex" button-style="solid"> |
|||
<a-radio-button value="0">A-1</a-radio-button> |
|||
<a-radio-button value="1">A-2</a-radio-button> |
|||
<a-radio-button value="2">A-3</a-radio-button> |
|||
<a-radio-button value="3">A-4</a-radio-button> |
|||
<a-radio-button value="4">A-5</a-radio-button> |
|||
</a-radio-group> |
|||
</a-form-item> |
|||
</a-form> |
|||
</a-modal> |
|||
</template> |
|||
<script setup> |
|||
import ApiClient from '@/utils/ApiClient'; |
|||
import { ref } from 'vue'; |
|||
/** @var {Boolean} */ |
|||
const enable = ref(false); |
|||
/** @var {Number} */ |
|||
const slotIndex = ref(0); |
|||
|
|||
// 样本拍照 |
|||
function actionSampleTakeShot() { |
|||
enable.value = true; |
|||
} |
|||
|
|||
// 确认 |
|||
async function actionOk() { |
|||
enable.value = false; |
|||
let client = ApiClient.getClient(); |
|||
await client.taskAppend('SampleMoveToLiquidPlate',{ |
|||
slotIndex : slotIndex.value * 1, |
|||
}); |
|||
} |
|||
|
|||
// 取消 |
|||
function actionCancel() { |
|||
enable.value = false; |
|||
} |
|||
</script> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue