diff --git a/src/main/java/com/dreamworks/boditech/controller/DeviceController.java b/src/main/java/com/dreamworks/boditech/controller/DeviceController.java index 5965834..11cd02d 100644 --- a/src/main/java/com/dreamworks/boditech/controller/DeviceController.java +++ b/src/main/java/com/dreamworks/boditech/controller/DeviceController.java @@ -1,5 +1,6 @@ package com.dreamworks.boditech.controller; import com.dreamworks.boditech.controller.entity.ApiResponse; +import com.dreamworks.boditech.driver.task.step.StepManager; import com.dreamworks.boditech.service.DeviceService; import com.dreamworks.boditech.utils.MyWebsocketServer; import jakarta.annotation.Resource; diff --git a/src/main/java/com/dreamworks/boditech/controller/TestController.java b/src/main/java/com/dreamworks/boditech/controller/TestController.java index df3fbe2..b50903b 100644 --- a/src/main/java/com/dreamworks/boditech/controller/TestController.java +++ b/src/main/java/com/dreamworks/boditech/controller/TestController.java @@ -1,6 +1,7 @@ package com.dreamworks.boditech.controller; import com.dreamworks.boditech.controller.entity.ApiResponse; import com.dreamworks.boditech.driver.task.TaskBatchTubePrepare; +import com.dreamworks.boditech.driver.task.TaskTest; import com.dreamworks.boditech.entity.request.test.AppendParam; import com.dreamworks.boditech.service.DeviceService; import jakarta.annotation.Resource; @@ -16,8 +17,10 @@ public class TestController extends BaseController { @ResponseBody @PostMapping("/api/test/append") public ApiResponse append( @RequestBody AppendParam appendParam) { - TaskBatchTubePrepare task = new TaskBatchTubePrepare(); - task.setTests(appendParam.tests); +// TaskBatchTubePrepare task = new TaskBatchTubePrepare(); +// task.setTests(appendParam.tests); + + TaskTest task = new TaskTest(); this.deviceService.taskAppend(task); return this.success(); } diff --git a/src/main/java/com/dreamworks/boditech/driver/Command.java b/src/main/java/com/dreamworks/boditech/driver/Command.java index b2f63eb..6d24f6e 100644 --- a/src/main/java/com/dreamworks/boditech/driver/Command.java +++ b/src/main/java/com/dreamworks/boditech/driver/Command.java @@ -9,8 +9,10 @@ public class Command { public static final Integer CMD_MODULE_READ_IO = 0x0107; public static final Integer CMD_MODULE_READ_RAW = 0x0113; public static final Integer CMD_MODULE_START = 0x0115; + public static final Integer CMD_MOTOR_EASY_ROTATE = 0x0211; public static final Integer CMD_MOTOR_EASY_MOVE_BY = 0x0212; public static final Integer CMD_MOTOR_EASY_MOVE_TO = 0x0213; + public static final Integer CMD_XYMOTOR_MOVE_TO = 0x0303; // command meta data public static final Map cmdMetaMap = new HashMap(); @@ -25,6 +27,7 @@ public class Command { Command.cmdMetaMap.put(CMD_MODULE_READ_RAW, new CommandMeta("module_read_raw")); Command.cmdMetaMap.put(CMD_MOTOR_EASY_MOVE_TO, new CommandMeta("motor_easy_move_to")); Command.cmdMetaMap.put(CMD_MOTOR_EASY_MOVE_BY, new CommandMeta("motor_easy_move_by")); + Command.cmdMetaMap.put(CMD_MOTOR_EASY_ROTATE, new CommandMeta("motor_easy_rotate")); } return cmdMetaMap.get(cmd); diff --git a/src/main/java/com/dreamworks/boditech/driver/ConsumableBufferTube.java b/src/main/java/com/dreamworks/boditech/driver/ConsumableBufferTube.java deleted file mode 100644 index 084b7e9..0000000 --- a/src/main/java/com/dreamworks/boditech/driver/ConsumableBufferTube.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.dreamworks.boditech.driver; -public class ConsumableBufferTube { - // project id - public Integer projectId; - // project name - public Integer projectName; - // batch number - public Integer type; - // location x - public Integer locationX; - // location y - public Integer locationY; - // location z - public Integer LocationZ; -} diff --git a/src/main/java/com/dreamworks/boditech/driver/ConsumablePipetteTip.java b/src/main/java/com/dreamworks/boditech/driver/ConsumablePipetteTip.java deleted file mode 100644 index 539a36c..0000000 --- a/src/main/java/com/dreamworks/boditech/driver/ConsumablePipetteTip.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.dreamworks.boditech.driver; -public class ConsumablePipetteTip { - // location x - public Integer locationX; - // location y - public Integer locationY; - // location z - public Integer LocationZ; -} diff --git a/src/main/java/com/dreamworks/boditech/driver/Device.java b/src/main/java/com/dreamworks/boditech/driver/Device.java index 2dd722f..14afa5b 100644 --- a/src/main/java/com/dreamworks/boditech/driver/Device.java +++ b/src/main/java/com/dreamworks/boditech/driver/Device.java @@ -1,7 +1,10 @@ package com.dreamworks.boditech.driver; import com.dreamworks.boditech.driver.actuator.*; import com.dreamworks.boditech.driver.connection.ComSerialPort; -import com.dreamworks.boditech.mapper.DeviceLogMapper; +import com.dreamworks.boditech.driver.consumable.CsmBufferTubeA; +import com.dreamworks.boditech.driver.consumable.CsmBufferTubeB; +import com.dreamworks.boditech.driver.consumable.CsmLargeBufferTube; +import com.dreamworks.boditech.driver.consumable.CsmPipetteTip; import com.dreamworks.boditech.utils.MyByteBuffer; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; @@ -11,7 +14,9 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; @Component public class Device { @@ -23,11 +28,16 @@ public class Device { @Resource private ComSerialPort serialPort; - @Resource - private DeviceLogMapper deviceLogMapper; - // actuators private final Map actuators = new HashMap(); + // pipette tips + private final List pipetteTips = new ArrayList(); + // buffer tube larges + private final List largeBufferTubes = new ArrayList(); + // buffer tube A + private final List bufferTubeAList = new ArrayList(); + // buffer tube B + private final List bufferTubeBList = new ArrayList(); // message index private short messageIndex = 0; @@ -38,6 +48,13 @@ public class Device { this.appendActuator(new ActMotor(ActuatorModule.TEST_TUBE_RACK_MOVE_MOTOR, this)); this.appendActuator(new ActMotor(ActuatorModule.TEST_TUBE_RACK_EXIT_MOTOR, this)); this.appendActuator(new ActCodeScanner(ActuatorModule.TEST_TUBE_RACK_SCANNER, this)); + this.appendActuator(new ActMotor(ActuatorModule.TEST_TUBE_SHAKING_MOVE_MOTOR, this)); + this.appendActuator(new ActMotor(ActuatorModule.TEST_TUBE_SHAKING_CAP_CLIP_MOTOR, this)); + this.appendActuator(new ActMotor(ActuatorModule.TEST_TUBE_SHAKING_SHAKE_MOTOR, this)); + this.appendActuator(new ActMotor(ActuatorModule.TEST_TUBE_SHAKING_ROTATE_MOTOR, this)); + this.appendActuator(new ActMotor(ActuatorModule.TEST_TUBE_SHAKING_CLIP_MOTOR, this)); + this.appendActuator(new ActArmXY(ActuatorModule.ARM_XY, this)); + this.appendActuator(new ActMotor(ActuatorModule.ARM_Z_MOTOR, this)); } // append actuator @@ -50,9 +67,94 @@ public class Device { return this.actuators.get(mid); } - // get debug mode - public Boolean getIsDebug() { - return this.debug; + // append buffer tube A + public void appendBufferTubeA( Integer areaIndex, Integer amount ) { + for (int i = 0; i tmp.position.equals(position)); + this.largeBufferTubes.add(tube); + } + + // get large buffer tube + public CsmLargeBufferTube getLargeBufferTube( String projectName ) { + CsmLargeBufferTube tube = null; + for ( CsmLargeBufferTube tmp : this.largeBufferTubes ) { + if ( !tmp.projectName.equals(projectName) ) { + continue ; + } + if ( tmp.isEmpty() ) { + continue; + } + tube = tmp; + break; + } + if ( null == tube ) { + throw new RuntimeException("no large buffer tube"); + } + return tube; } // call device command and wait for response diff --git a/src/main/java/com/dreamworks/boditech/driver/actuator/ActArmXY.java b/src/main/java/com/dreamworks/boditech/driver/actuator/ActArmXY.java new file mode 100644 index 0000000..eeeecc4 --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/driver/actuator/ActArmXY.java @@ -0,0 +1,29 @@ +package com.dreamworks.boditech.driver.actuator; +import com.dreamworks.boditech.driver.Command; +import com.dreamworks.boditech.driver.Device; +public class ActArmXY extends ActuatorBase { + // constructor + public ActArmXY(Integer mid, Device device) { + super(mid, device); + } + + /** + * move to given position + * @param x x position + * @param y y position + */ + public void moveTo(int x, int y) { + this.moveTo(x, y, 0); + } + + /** + * move to given position + * @param x x position + * @param y y position + * @param velocity 0: default velocity, otherwise: rpm per minute for motor + */ + public void moveTo(int x, int y, int velocity) { + this.call(Command.CMD_XYMOTOR_MOVE_TO, x, y, velocity); + this.waitForFinish(); + } +} diff --git a/src/main/java/com/dreamworks/boditech/driver/actuator/ActMotor.java b/src/main/java/com/dreamworks/boditech/driver/actuator/ActMotor.java index cb4ba92..490765e 100644 --- a/src/main/java/com/dreamworks/boditech/driver/actuator/ActMotor.java +++ b/src/main/java/com/dreamworks/boditech/driver/actuator/ActMotor.java @@ -1,8 +1,12 @@ package com.dreamworks.boditech.driver.actuator; import com.dreamworks.boditech.driver.Command; import com.dreamworks.boditech.driver.Device; - public class ActMotor extends ActuatorBase { + // rotate direction + public static final int ROTATE_DIRECTION_CLOCKWISE = 1; + // rotate direction + public static final int ROTATE_DIRECTION_COUNTER_CLOCKWISE = -1; + // constructor public ActMotor(Integer mid, Device device) { super(mid, device); @@ -14,8 +18,15 @@ public class ActMotor extends ActuatorBase { this.waitForFinish(); } + // move by given distance public void moveBy(int distance) { this.call(Command.CMD_MOTOR_EASY_MOVE_BY, distance); this.waitForFinish(); } + + // rotate + public void rotate( int direction ) { + this.call(Command.CMD_MOTOR_EASY_ROTATE, direction); + this.waitForFinish(); + } } diff --git a/src/main/java/com/dreamworks/boditech/driver/actuator/ActuatorModule.java b/src/main/java/com/dreamworks/boditech/driver/actuator/ActuatorModule.java index e76fb97..2b8eecf 100644 --- a/src/main/java/com/dreamworks/boditech/driver/actuator/ActuatorModule.java +++ b/src/main/java/com/dreamworks/boditech/driver/actuator/ActuatorModule.java @@ -1,5 +1,12 @@ package com.dreamworks.boditech.driver.actuator; public class ActuatorModule { + public static Integer ARM_XY = 11; + public static Integer ARM_Z_MOTOR = 81; + public static Integer TEST_TUBE_SHAKING_MOVE_MOTOR = 31; + public static Integer TEST_TUBE_SHAKING_ROTATE_MOTOR = 32; + public static Integer TEST_TUBE_SHAKING_CLIP_MOTOR = 33; + public static Integer TEST_TUBE_SHAKING_CAP_CLIP_MOTOR = 34; + public static Integer TEST_TUBE_SHAKING_SHAKE_MOTOR = 35; public static Integer TEST_TUBE_RACK_MOVEMENT = 60; public static Integer TEST_TUBE_RACK_FEED_MOTOR = 61; public static Integer TEST_TUBE_RACK_MOVE_MOTOR = 62; diff --git a/src/main/java/com/dreamworks/boditech/driver/consumable/CsmBufferTubeA.java b/src/main/java/com/dreamworks/boditech/driver/consumable/CsmBufferTubeA.java new file mode 100644 index 0000000..a5b4c19 --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/driver/consumable/CsmBufferTubeA.java @@ -0,0 +1,17 @@ +package com.dreamworks.boditech.driver.consumable; +public class CsmBufferTubeA { + // area index + public Integer areaIndex; + // position + public Integer position; + // project name + public String projectName = "demo"; + + public Integer getLocationX() { + return 1000; + } + + public Integer getLocationY() { + return 1000; + } +} diff --git a/src/main/java/com/dreamworks/boditech/driver/consumable/CsmBufferTubeB.java b/src/main/java/com/dreamworks/boditech/driver/consumable/CsmBufferTubeB.java new file mode 100644 index 0000000..cf29b9f --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/driver/consumable/CsmBufferTubeB.java @@ -0,0 +1,17 @@ +package com.dreamworks.boditech.driver.consumable; +public class CsmBufferTubeB { + // area index + public Integer areaIndex; + // position + public Integer position; + // project name + public String projectName; + + public Integer getLocationX() { + return 0; + } + + public Integer getLocationY() { + return 0; + } +} diff --git a/src/main/java/com/dreamworks/boditech/driver/consumable/CsmLargeBufferTube.java b/src/main/java/com/dreamworks/boditech/driver/consumable/CsmLargeBufferTube.java new file mode 100644 index 0000000..5bf4511 --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/driver/consumable/CsmLargeBufferTube.java @@ -0,0 +1,22 @@ +package com.dreamworks.boditech.driver.consumable; +public class CsmLargeBufferTube { + // position + public Integer position; + // project name + public String projectName; + + // get location x + public Integer getLocationX() { + return 0; + } + + // get location y + public Integer getLocationY() { + return 0; + } + + // get if the tube is empty + public boolean isEmpty() { + return false; + } +} diff --git a/src/main/java/com/dreamworks/boditech/driver/consumable/CsmPipetteTip.java b/src/main/java/com/dreamworks/boditech/driver/consumable/CsmPipetteTip.java new file mode 100644 index 0000000..afc7423 --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/driver/consumable/CsmPipetteTip.java @@ -0,0 +1,15 @@ +package com.dreamworks.boditech.driver.consumable; +public class CsmPipetteTip { + // area index + public Integer areaIndex; + // position + public Integer position; + + public Integer getLocationX() { + return 500; + } + + public Integer getLocationY() { + return 500; + } +} diff --git a/src/main/java/com/dreamworks/boditech/driver/task/TaskTest.java b/src/main/java/com/dreamworks/boditech/driver/task/TaskTest.java index 961b23d..f333fe2 100644 --- a/src/main/java/com/dreamworks/boditech/driver/task/TaskTest.java +++ b/src/main/java/com/dreamworks/boditech/driver/task/TaskTest.java @@ -2,6 +2,8 @@ package com.dreamworks.boditech.driver.task; import com.dreamworks.boditech.driver.Task; import com.dreamworks.boditech.driver.TaskExecutor; import com.dreamworks.boditech.driver.TestStep; +import com.dreamworks.boditech.driver.task.step.Step; +import com.dreamworks.boditech.driver.task.step.StepManager; import java.util.List; public class TaskTest implements Task { @@ -14,7 +16,7 @@ public class TaskTest implements Task { // test tube public String testTubeType; // project - public String projectName; + public String projectName = "demo"; // sample type public String bloodType; // sample process @@ -28,6 +30,9 @@ public class TaskTest implements Task { @Override public void execute(TaskExecutor executor) { - + List steps = StepManager.buildSteps("[{\"action\":\"puncture\",\"tubeType\":\"A\"}]"); + for ( Step step : steps ) { + step.execute(executor, this); + } } } diff --git a/src/main/java/com/dreamworks/boditech/driver/task/step/Step.java b/src/main/java/com/dreamworks/boditech/driver/task/step/Step.java new file mode 100644 index 0000000..f5bc9c9 --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/driver/task/step/Step.java @@ -0,0 +1,7 @@ +package com.dreamworks.boditech.driver.task.step; +import com.dreamworks.boditech.driver.Task; +import com.dreamworks.boditech.driver.TaskExecutor; +public interface Step { + // execute step + public void execute(TaskExecutor executor, Task task ); +} diff --git a/src/main/java/com/dreamworks/boditech/driver/task/step/StepBase.java b/src/main/java/com/dreamworks/boditech/driver/task/step/StepBase.java new file mode 100644 index 0000000..de2a2d2 --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/driver/task/step/StepBase.java @@ -0,0 +1,4 @@ +package com.dreamworks.boditech.driver.task.step; +abstract public class StepBase implements Step { + +} diff --git a/src/main/java/com/dreamworks/boditech/driver/task/step/StepManager.java b/src/main/java/com/dreamworks/boditech/driver/task/step/StepManager.java new file mode 100644 index 0000000..fa319a2 --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/driver/task/step/StepManager.java @@ -0,0 +1,46 @@ +package com.dreamworks.boditech.driver.task.step; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +public class StepManager { + // step name to step class + private static final Map> stepMap = new HashMap<>(); + + // load step map + private static void loadStepMap() { + if ( !StepManager.stepMap.isEmpty() ) { + return ; + } + StepManager.stepMap.put("shake", StepShake.class); + StepManager.stepMap.put("puncture", StepPuncture.class); + } + + // build step by given name + public static List buildSteps(String json) { + StepManager.loadStepMap(); + + ObjectMapper jsonMapper = new ObjectMapper(); + JsonNode stepJsonTree = null; + try { + stepJsonTree = jsonMapper.readTree(json); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + + List steps = new ArrayList<>(); + for ( JsonNode stepNode : stepJsonTree ) { + String name = stepNode.get("action").asText(); + Class stepClass = StepManager.stepMap.get(name); + if ( stepClass == null ) { + throw new RuntimeException("step class not found: " + name); + } + Step step = jsonMapper.convertValue(stepNode, stepClass); + steps.add(step); + } + return steps; + } +} diff --git a/src/main/java/com/dreamworks/boditech/driver/task/step/StepPuncture.java b/src/main/java/com/dreamworks/boditech/driver/task/step/StepPuncture.java new file mode 100644 index 0000000..d8d82c2 --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/driver/task/step/StepPuncture.java @@ -0,0 +1,54 @@ +package com.dreamworks.boditech.driver.task.step; +import com.dreamworks.boditech.driver.Device; +import com.dreamworks.boditech.driver.Task; +import com.dreamworks.boditech.driver.TaskExecutor; +import com.dreamworks.boditech.driver.actuator.ActArmXY; +import com.dreamworks.boditech.driver.actuator.ActMotor; +import com.dreamworks.boditech.driver.actuator.ActuatorModule; +import com.dreamworks.boditech.driver.consumable.CsmBufferTubeA; +import com.dreamworks.boditech.driver.consumable.CsmBufferTubeB; +import com.dreamworks.boditech.driver.consumable.CsmPipetteTip; +import com.dreamworks.boditech.driver.task.TaskTest; +import com.fasterxml.jackson.annotation.JsonProperty; +public class StepPuncture extends StepBase { + @JsonProperty("action") + public String action; + + @JsonProperty("tubeType") + public String tubeType; + + @Override + public void execute(TaskExecutor executor, Task task) { + Device device = executor.getDevice(); + ActArmXY armXY = (ActArmXY)device.getActuator(ActuatorModule.ARM_XY); + ActMotor armZMotor = (ActMotor)device.getActuator(ActuatorModule.ARM_Z_MOTOR); + TaskTest taskTest = (TaskTest)task; + + // 01. 移动到TIP区域 + CsmPipetteTip tip = device.getPipeTip(); + armXY.moveTo(tip.getLocationX(), tip.getLocationY()); + + // 02. 下降到TIP区域 + armZMotor.moveTo(1000); + + // 03. 上升到准备区域 + armZMotor.moveTo(0); + + // 04. 移动到穿刺区域 + if ( "A".equals(this.tubeType) ) { + CsmBufferTubeA tube = device.getBufferTubeA(taskTest.projectName); + armXY.moveTo(tube.getLocationX(), tube.getLocationY()); + } else if ( "B".equals(this.tubeType) ) { + CsmBufferTubeB tube = device.getBufferTubeB(taskTest.projectName); + armXY.moveTo(tube.getLocationX(), tube.getLocationY()); + } else { + throw new RuntimeException("unknown tube type " + this.tubeType); + } + + // 05. 下降到穿刺区域 + armZMotor.moveTo(1000); + + // 06. 上升到准备区域 + armZMotor.moveTo(0); + } +} diff --git a/src/main/java/com/dreamworks/boditech/driver/task/step/StepShake.java b/src/main/java/com/dreamworks/boditech/driver/task/step/StepShake.java new file mode 100644 index 0000000..2dd3a58 --- /dev/null +++ b/src/main/java/com/dreamworks/boditech/driver/task/step/StepShake.java @@ -0,0 +1,50 @@ +package com.dreamworks.boditech.driver.task.step; +import com.dreamworks.boditech.driver.Device; +import com.dreamworks.boditech.driver.Task; +import com.dreamworks.boditech.driver.TaskExecutor; +import com.dreamworks.boditech.driver.actuator.ActMotor; +import com.dreamworks.boditech.driver.actuator.ActuatorModule; +import com.fasterxml.jackson.annotation.JsonProperty; +public class StepShake extends StepBase { + @JsonProperty("action") + public String action; + + @Override + public void execute(TaskExecutor executor, Task task) { + Device device = executor.getDevice(); + ActMotor testTubeCapClipMotor = (ActMotor)device.getActuator(ActuatorModule.TEST_TUBE_SHAKING_CAP_CLIP_MOTOR); + ActMotor testTubeShakeMotor = (ActMotor)device.getActuator(ActuatorModule.TEST_TUBE_SHAKING_SHAKE_MOTOR); + ActMotor testTubeMoveMotor = (ActMotor)device.getActuator(ActuatorModule.TEST_TUBE_SHAKING_MOVE_MOTOR); + ActMotor testTubeClipMotor = (ActMotor)device.getActuator(ActuatorModule.TEST_TUBE_SHAKING_CLIP_MOTOR); + + // 01. 试管帽夹打开 + testTubeCapClipMotor.moveTo(500); + + // 02. 下降到试管位置 + testTubeMoveMotor.moveTo(150); + + // 03. 试管帽夹关闭 + testTubeCapClipMotor.moveTo(900); + + // 04. 上升到摇晃位置 + testTubeMoveMotor.moveTo(1300); + + // 05. 摇晃 + testTubeShakeMotor.rotate(ActMotor.ROTATE_DIRECTION_CLOCKWISE); + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + testTubeShakeMotor.stop(); + + // 06. 下降到试管位置 + testTubeMoveMotor.moveTo(150); + + // 07. 试管夹夹紧 + testTubeClipMotor.rotate(ActMotor.ROTATE_DIRECTION_CLOCKWISE); + + // 08. 上升到原始位置 + testTubeMoveMotor.moveTo(1300); + } +} diff --git a/src/main/java/com/dreamworks/boditech/service/DeviceService.java b/src/main/java/com/dreamworks/boditech/service/DeviceService.java index e00129b..51ff0cf 100644 --- a/src/main/java/com/dreamworks/boditech/service/DeviceService.java +++ b/src/main/java/com/dreamworks/boditech/service/DeviceService.java @@ -1,5 +1,7 @@ package com.dreamworks.boditech.service; import com.dreamworks.boditech.driver.*; +import com.dreamworks.boditech.driver.consumable.CsmLargeBufferTube; +import com.dreamworks.boditech.driver.consumable.CsmPipetteTip; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -12,9 +14,9 @@ public class DeviceService { public Device device; // pipette tips - public List pipetteTips; + public List pipetteTips; // buffer tubes - public List bufferTubes; + public List bufferTubes; // test cards public List testCards; // tasks @@ -26,6 +28,11 @@ public class DeviceService { // start public void start() { + this.device.appendPipetteTip(0, 10); + this.device.appendPipetteTip(1, 10); + this.device.appendPipetteTip(2, 10); + this.device.appendBufferTubeA(0, 10); + this.taskExecutor = new TaskExecutor(this.tasks, this.device); this.taskExecutorThread = new Thread(this.taskExecutor); this.taskExecutorThread.setName("task-executor");