20 changed files with 540 additions and 150 deletions
-
BINapp.db
-
5pom.xml
-
117src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java
-
131src/main/java/com/iflytop/digester/DigestionTaskThread.java
-
42src/main/java/com/iflytop/digester/deviceinstance/HeatingTurntableSlot.java
-
7src/main/java/com/iflytop/digester/deviceinstance/HeatingTurntableSlotTube.java
-
76src/main/java/com/iflytop/digester/deviceinstance/LiquidAdditionInstance.java
-
65src/main/java/com/iflytop/digester/deviceinstance/TransferRobotArmInstance.java
-
31src/main/java/com/iflytop/digester/model/MdbDigestionTask.java
-
7src/main/java/com/iflytop/digester/underframework/UfActuatorCmdExecutor.java
-
56src/main/java/com/iflytop/digester/underframework/UfCmdSnippetExecutor.java
-
14src/main/java/com/iflytop/digester/underframework/connection/UfZcancmderWebsocket.java
-
2src/main/java/com/iflytop/digester/underframework/dao/model/UfMdbActuatorCmd.java
-
2src/main/java/com/iflytop/digester/underframework/dao/model/UfMdbSnippet.java
-
10src/main/java/com/iflytop/digester/underframework/web/api/TsApiActuatorCommand.java
-
12src/main/java/com/iflytop/digester/underframework/web/api/TsApiSnippet.java
-
11src/main/resources/application.yml
-
2web
@ -0,0 +1,7 @@ |
|||
package com.iflytop.digester.deviceinstance; |
|||
public class HeatingTurntableSlotTube { |
|||
// tube index |
|||
public Integer index = -1; |
|||
// tube no |
|||
public String no = ""; |
|||
} |
@ -1,35 +1,86 @@ |
|||
package com.iflytop.digester.deviceinstance; |
|||
import com.iflytop.digester.underframework.UfCmdSnippetExecutor; |
|||
import org.springframework.stereotype.Component; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
@Component |
|||
public class TransferRobotArmInstance { |
|||
|
|||
// 等待锁队列 |
|||
private final List<Object> waitingLocks = new ArrayList<>(); |
|||
|
|||
// 移动试管到试管架 |
|||
public void takeOutTubesFromErrorSlot(List<Integer> tubeIndexes) { |
|||
var lock = new Object(); |
|||
this.lockArm(lock); |
|||
|
|||
// 执行从异常槽位取出试管 |
|||
UfCmdSnippetExecutor.execute("TubeTakeOutFromErrorSlotStart"); |
|||
for (Integer tubeIndex : tubeIndexes) { |
|||
UfCmdSnippetExecutor.execute("TubeTakeOutFromErrorSlot." + tubeIndex); |
|||
} |
|||
UfCmdSnippetExecutor.execute("TubeTakeOutFromErrorSlotEnd"); |
|||
|
|||
this.unlockArm(lock); |
|||
} |
|||
|
|||
// 移动试管到异常槽位 |
|||
public void moveTubesToErrorSlot(List<Integer> tubeIndexes) { |
|||
var lock = new Object(); |
|||
this.lockArm(lock); |
|||
|
|||
// 执行移动试管到异常槽位 |
|||
UfCmdSnippetExecutor.execute("TubeMoveToErrorSlotStart"); |
|||
for (Integer tubeIndex : tubeIndexes) { |
|||
UfCmdSnippetExecutor.execute("TubeMoveToErrorSlot." + tubeIndex); |
|||
} |
|||
UfCmdSnippetExecutor.execute("TubeMoveToErrorSlotEnd"); |
|||
|
|||
this.unlockArm(lock); |
|||
} |
|||
|
|||
// 移动试管架到加液盘 |
|||
public void moveTubeRackToLiquidPlate(Integer srcSlotIndex) { |
|||
// 执行移动试管架到液体盘 |
|||
var lock = new Object(); |
|||
this.lockArm(lock); |
|||
|
|||
// 执行移动试管架到加液盘 |
|||
var snippetName = "TubeRackMoveToLiquidPlate." + srcSlotIndex; |
|||
UfCmdSnippetExecutor.execute(snippetName); |
|||
|
|||
this.unlockArm(lock); |
|||
} |
|||
|
|||
// 移动试管架到加热转盘 |
|||
public void moveTubeRackToHeatingTurntable(Integer slot) throws InterruptedException { |
|||
if ( !waitingLocks.isEmpty() ) { |
|||
var lock = new Object(); |
|||
var lock = new Object(); |
|||
this.lockArm(lock); |
|||
|
|||
// 执行移动试管架到加热转盘 |
|||
UfCmdSnippetExecutor.execute("TubeRackMoveToHeatingTurntable." + slot); |
|||
|
|||
this.unlockArm(lock); |
|||
} |
|||
|
|||
// wait for arm |
|||
private void lockArm( Object lock ) { |
|||
if ( waitingLocks.isEmpty() ) { |
|||
this.waitingLocks.add(lock); |
|||
return ; |
|||
} |
|||
|
|||
try { |
|||
waitingLocks.add(lock); |
|||
lock.wait(); |
|||
} catch (InterruptedException e) { |
|||
throw new RuntimeException(e); |
|||
} |
|||
} |
|||
|
|||
// 执行移动试管架到加热转盘 |
|||
|
|||
// unlock arm |
|||
private void unlockArm( Object lock ) { |
|||
waitingLocks.remove(lock); |
|||
if ( !waitingLocks.isEmpty() ) { |
|||
waitingLocks.remove(0).notify(); |
|||
waitingLocks.get(0).notify(); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,7 @@ |
|||
package com.iflytop.digester.underframework; |
|||
import com.iflytop.digester.underframework.dao.model.UfMdbActuatorCmd; |
|||
public class UfActuatorCmdExecutor { |
|||
public static void execute(UfMdbActuatorCmd cmd) { |
|||
// @TODO : 这里要判断使用那种通讯方式进行执行, 所以待定一下 |
|||
} |
|||
} |
@ -1,7 +1,7 @@ |
|||
package com.iflytop.digester.underframework.dao.model; |
|||
import com.iflytop.digester.underframework.dao.record.UfActiveRecord; |
|||
import com.iflytop.digester.underframework.dao.record.UfActiveRecordField; |
|||
public class TsMdbActuatorCmd extends UfActiveRecord { |
|||
public class UfMdbActuatorCmd extends UfActiveRecord { |
|||
@UfActiveRecordField |
|||
public String actuatorId; |
|||
|
@ -1 +1 @@ |
|||
Subproject commit bb327e921950cf4cfad799a02f6c7faa076919f4 |
|||
Subproject commit 92cb587baccf83f33dd9465bb37dc815058f26a0 |
Write
Preview
Loading…
Cancel
Save
Reference in new issue