Browse Source

EPP0.5/EPP1.5

tags/v0
sige 1 year ago
parent
commit
b4ff6a27c7
  1. BIN
      app.db
  2. 2
      pom.xml
  3. 34
      src/main/java/com/iflytop/a800/controller/DemoController.java
  4. 55
      src/main/java/com/iflytop/a800/device/Pipette.java

BIN
app.db

2
pom.xml

@ -20,7 +20,7 @@
<dependency> <dependency>
<groupId>com.iflytop</groupId> <groupId>com.iflytop</groupId>
<artifactId>uf</artifactId> <artifactId>uf</artifactId>
<version>0.0.20</version>
<version>0.0.21</version>
</dependency> </dependency>
</dependencies> </dependencies>

34
src/main/java/com/iflytop/a800/controller/DemoController.java

@ -1,6 +1,7 @@
package com.iflytop.a800.controller; package com.iflytop.a800.controller;
import com.iflytop.a800.device.Device; import com.iflytop.a800.device.Device;
import com.iflytop.a800.resource.BufferTube; import com.iflytop.a800.resource.BufferTube;
import com.iflytop.uf.UfActuatorCmdExecutor;
import com.iflytop.uf.controller.UfApiControllerBase; import com.iflytop.uf.controller.UfApiControllerBase;
import com.iflytop.uf.controller.UfApiResponse; import com.iflytop.uf.controller.UfApiResponse;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
@ -41,4 +42,37 @@ public class DemoController extends UfApiControllerBase {
pipette.aspirateFromLargeBufferTube(tube, 50); pipette.aspirateFromLargeBufferTube(tube, 50);
return this.success(); return this.success();
} }
@PostMapping("/api/demo/pipette-aspirate-from-emergency-tube")
@ResponseBody
public UfApiResponse pipetteAspirateFromEmergencyTube() {
var pipette = Device.getInstance().pipette;
pipette.aspirateFromEmergencyTube(0, 100);
UfActuatorCmdExecutor.execute("Pipette","pipette_ctrl_move_to_ul", "0");
pipette.aspirateFromEmergencyTube(1, 100);
UfActuatorCmdExecutor.execute("Pipette","pipette_ctrl_move_to_ul", "0");
return this.success();
}
@PostMapping("/api/demo/pipette-aspirate-from-sample-epp-0.5")
@ResponseBody
public UfApiResponse pipetteAspirateFromSampleEpp05() {
var pipette = Device.getInstance().pipette;
for ( int i=0; i<10; i++) {
pipette.aspirateFromSampleEpp0_5(i, 100);
UfActuatorCmdExecutor.execute("Pipette","pipette_ctrl_move_to_ul", "0");
}
return this.success();
}
@PostMapping("/api/demo/pipette-aspirate-from-sample-epp-1.5")
@ResponseBody
public UfApiResponse pipetteAspirateFromSampleEpp1_5() {
var pipette = Device.getInstance().pipette;
for ( int i=0; i<10; i++) {
pipette.aspirateFromSampleEpp1_5(i, 100);
UfActuatorCmdExecutor.execute("Pipette","pipette_ctrl_move_to_ul", "0");
}
return this.success();
}
} }

55
src/main/java/com/iflytop/a800/device/Pipette.java

@ -163,15 +163,68 @@ public class Pipette {
this.aspirateWithLiquidLevelFollow(volume, depth); this.aspirateWithLiquidLevelFollow(volume, depth);
} }
// 从急诊试管吸液
public void aspirateFromEmergencyTube( Integer index, Integer volume ) {
UfCmdSnippetExecutor.execute(String.format("PipetteAspirateFromEmergencyTubePrepare.%d", index));
var maxDepth = UfMdbOption.getInteger("EmergencyTubeLiquidDetectMaxDepth");
var threshold = UfMdbOption.getInteger("EmergencyTubeLiquidDetectThreshold");
this.moveToLiquidLevel(maxDepth, threshold);
Double coefficient = UfMdbOption.getDouble("EmergencyTubeLiquidLevelFollowCoefficient");
Integer depth = (int)(coefficient * volume);
this.aspirateWithLiquidLevelFollow(volume, depth);
}
// 从样本Epp0.5吸液
public void aspirateFromSampleEpp0_5( Integer index, Integer volume ) {
var tubeRackTubeStartPos = UfMdbOption.getInteger("SampleTubeRackTubeStartPos");
var tubeRackTubeDistance = UfMdbOption.getInteger("SampleTubeRackTubeDistance");
Map<String,Object> params = Map.of("tubePos", tubeRackTubeStartPos + index * tubeRackTubeDistance);
UfCmdSnippetExecutor.execute("PipetteAspirateFromSampleEpp0.5", params);
var maxDepth = UfMdbOption.getInteger("SampleTubeRackEpp0.5TubeLiquidDetectMaxDepth");
var threshold = UfMdbOption.getInteger("SampleTubeRackEpp0.5TubeLiquidDetectThreshold");
this.moveToLiquidLevel(maxDepth, threshold);
Double coefficient = UfMdbOption.getDouble("SampleTubeRackEpp0.5TubeLiquidLevelFollowCoefficient");
Integer depth = (int)(coefficient * volume);
this.aspirateWithLiquidLevelFollow(volume, depth);
}
// 从样本Epp0.5吸液
public void aspirateFromSampleEpp1_5( Integer index, Integer volume ) {
var tubeRackTubeStartPos = UfMdbOption.getInteger("SampleTubeRackTubeStartPos");
var tubeRackTubeDistance = UfMdbOption.getInteger("SampleTubeRackTubeDistance");
Map<String,Object> params = Map.of("tubePos", tubeRackTubeStartPos + index * tubeRackTubeDistance);
UfCmdSnippetExecutor.execute("PipetteAspirateFromSampleEpp1.5", params);
var maxDepth = UfMdbOption.getInteger("SampleTubeRackEpp1.5TubeLiquidDetectMaxDepth");
var threshold = UfMdbOption.getInteger("SampleTubeRackEpp1.5TubeLiquidDetectThreshold");
this.moveToLiquidLevel(maxDepth, threshold);
Double coefficient = UfMdbOption.getDouble("SampleTubeRackEpp1.5TubeLiquidLevelFollowCoefficient");
Integer depth = (int)(coefficient * volume);
this.aspirateWithLiquidLevelFollow(volume, depth);
}
// 移动到液面 // 移动到液面
private void moveToLiquidLevel( Integer maxDepth, Integer threshold ) { private void moveToLiquidLevel( Integer maxDepth, Integer threshold ) {
int stepDepth = 10; int stepDepth = 10;
int depth = 0; int depth = 0;
do { do {
int capMatchCount = 0;
for ( int i=0; i<3; i++) {
String capValStr = UfActuatorCmdExecutor.execute("Pipette", "read_pipette_capacitance_val"); String capValStr = UfActuatorCmdExecutor.execute("Pipette", "read_pipette_capacitance_val");
LOG.info("[Pipette] Capacitance value : {}; threshold : {}", capValStr, threshold);
int capVal = Integer.parseInt(capValStr); int capVal = Integer.parseInt(capValStr);
if ( capVal > threshold ) { if ( capVal > threshold ) {
break;
capMatchCount ++;
}
UfCommon.delay(10);
}
if ( 1 < capMatchCount ) {
break ;
} }
depth += stepDepth; depth += stepDepth;

Loading…
Cancel
Save