Browse Source

取出样本

master
sige 2 years ago
parent
commit
19cc461209
  1. 2
      src/src/main/java/com/my/graphiteDigesterBg/diframe/DiTask.java
  2. 10
      src/src/main/java/com/my/graphiteDigesterBg/diframe/DiTaskBase.java
  3. 27
      src/src/main/java/com/my/graphiteDigesterBg/diframe/DiTaskManager.java
  4. 5
      src/src/main/java/com/my/graphiteDigesterBg/resource/ResHeatingTubeRackSlotManager.java
  5. 56
      src/src/main/java/com/my/graphiteDigesterBg/task/TaskSampleTakeOut.java
  6. 2
      src/src/main/resources/device.yml

2
src/src/main/java/com/my/graphiteDigesterBg/diframe/DiTask.java

@ -8,8 +8,6 @@ public interface DiTask {
String getUUID();
// set device
void setDevice(DiDevice device);
// set parameter
void setParameter(Object parameter);
// run
void run();
}

10
src/src/main/java/com/my/graphiteDigesterBg/diframe/DiTaskBase.java

@ -1,7 +1,4 @@
package com.my.graphiteDigesterBg.diframe;
import com.my.graphiteDigesterBg.MyDevice;
import com.my.graphiteDigesterBg.diframe.actuator.DiActMotor;
import java.util.ArrayList;
import java.util.List;
abstract public class DiTaskBase implements DiTask {
@ -11,8 +8,6 @@ abstract public class DiTaskBase implements DiTask {
private final String uuid;
// status
private TaskStatus status;
// parameter
private Object parameter;
// steps
private List<DiTaskStep> steps;
// step index
@ -51,11 +46,6 @@ abstract public class DiTaskBase implements DiTask {
this.device = device;
}
@Override
public void setParameter(Object parameter) {
this.parameter = parameter;
}
// run
@Override
public void run() {

27
src/src/main/java/com/my/graphiteDigesterBg/diframe/DiTaskManager.java

@ -3,6 +3,7 @@ import com.my.graphiteDigesterBg.diframe.util.DiClassHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.List;
@ -75,8 +76,32 @@ public class DiTaskManager {
throw new RuntimeException(e);
}
// set device
task.setDevice(this.device);
task.setParameter(parameter);
// set parameter to properties
Map<String,Object> parameterMap = (Map<String,Object>)parameter;
for ( Map.Entry<String,Object> entry : parameterMap.entrySet() ) {
String key = entry.getKey();
Field field = null;
try {
field = task.getClass().getDeclaredField(key);
} catch (NoSuchFieldException e) {
continue ;
}
Class<?> fieldType = field.getType();
if ( !fieldType.isAssignableFrom(entry.getValue().getClass()) ) {
throw new RuntimeException("Parameter type mismatch: " + key);
}
field.setAccessible(true);
try {
field.set(task, entry.getValue());
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
return task;
}
}

5
src/src/main/java/com/my/graphiteDigesterBg/resource/ResHeatingTubeRackSlotManager.java

@ -46,4 +46,9 @@ public class ResHeatingTubeRackSlotManager extends DiResourceManagerBase {
}
throw new RuntimeException("No free slot");
}
// get slot by index
public ResHeatingTubeRackSlot getSlotByIndex( Integer index ) {
return this.slots.get(index);
}
}

56
src/src/main/java/com/my/graphiteDigesterBg/task/TaskSampleTakeOut.java

@ -0,0 +1,56 @@
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.diframe.actuator.DiActMotor;
import com.my.graphiteDigesterBg.diframe.actuator.DiActServo;
import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlot;
import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager;
@Task(name="SampleTakeOut")
public class TaskSampleTakeOut extends DiTaskBase {
// slot index
public Integer slotIndex;
@Override
public void run() {
ResHeatingTubeRackSlotManager heatingSlotMan = this.getResourceManager(ResHeatingTubeRackSlotManager.class);
ResHeatingTubeRackSlot slot = heatingSlotMan.getSlotByIndex(this.slotIndex);
DiActMotor heatPlateMotor = this.getActuator(MyDevice.ACT_HEAT_PLATE_MOTOR, DiActMotor.class);
DiActMotor transLrMotor = this.getActuator(MyDevice.ACT_TRANSFER_LR_MOTOR, DiActMotor.class);
DiActMotor transUdMotor = this.getActuator(MyDevice.ACT_TRANSFER_UD_MOTOR, DiActMotor.class);
DiActServo transferClipServo = this.getActuator(MyDevice.ACT_TRANSFER_CLIP_SERVO, DiActServo.class);
DiActMotor liquidPlateMotor = this.getActuator(MyDevice.ACT_LIQUID_PLATE_MOTOR, DiActMotor.class);
// 加热盘转盘移动到取放架位置
heatPlateMotor.moveTo(8580); // @TODO : 这里要根据位置计算 ~~~
// 打开试管架盖
slot.coverOpen();
// 搬运上升到顶部
transUdMotor.moveTo(1300);
// 搬运移动到加热取架位置
transLrMotor.moveTo(1620);
// 搬运下降到取架位置
transUdMotor.moveTo(130);
// 打开试管架夹爪
transferClipServo.moveTo(2670);
// 搬运上升到顶部
transUdMotor.moveTo(1300);
// 搬运移动到加液取放架位置
transLrMotor.moveTo(365);
// 加液转盘移动到取放位置
liquidPlateMotor.moveTo(642);
// 搬运下降到放架位置
transUdMotor.moveTo(540);
// 关闭试管架夹爪
transferClipServo.moveTo(2073);
// 搬运上升到顶部
transUdMotor.moveTo(1300);
// 关闭试管架盖
slot.coverClose();
// 搬运移动到就绪位置
transLrMotor.moveTo(1000);
this.setStatus(TaskStatus.FINISHED);
}
}

2
src/src/main/resources/device.yml

@ -2,7 +2,7 @@ connection :
class : com.my.graphiteDigesterBg.diframe.connection.DiConSerialPort
path : COM7
baudRate : 921600
frameTimeout : 200
frameTimeout : 100
callTimeout : 5000
mode : binary # text | hex | binary
# device registers

Loading…
Cancel
Save