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
-
44src/main/java/com/iflytop/digester/deviceinstance/LiquidAdditionInstance.java
-
63src/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
-
9src/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; |
package com.iflytop.digester.deviceinstance; |
||||
|
import com.iflytop.digester.underframework.UfCmdSnippetExecutor; |
||||
import org.springframework.stereotype.Component; |
import org.springframework.stereotype.Component; |
||||
import java.util.ArrayList; |
import java.util.ArrayList; |
||||
import java.util.List; |
import java.util.List; |
||||
@Component |
@Component |
||||
public class TransferRobotArmInstance { |
public class TransferRobotArmInstance { |
||||
|
|
||||
|
// 等待锁队列 |
||||
private final List<Object> waitingLocks = new ArrayList<>(); |
private final List<Object> waitingLocks = new ArrayList<>(); |
||||
|
|
||||
|
// 移动试管到试管架 |
||||
public void takeOutTubesFromErrorSlot(List<Integer> tubeIndexes) { |
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) { |
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) { |
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 { |
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); |
waitingLocks.add(lock); |
||||
lock.wait(); |
lock.wait(); |
||||
|
} catch (InterruptedException e) { |
||||
|
throw new RuntimeException(e); |
||||
|
} |
||||
} |
} |
||||
|
|
||||
// 执行移动试管架到加热转盘 |
|
||||
|
|
||||
|
// unlock arm |
||||
|
private void unlockArm( Object lock ) { |
||||
|
waitingLocks.remove(lock); |
||||
if ( !waitingLocks.isEmpty() ) { |
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; |
package com.iflytop.digester.underframework.dao.model; |
||||
import com.iflytop.digester.underframework.dao.record.UfActiveRecord; |
import com.iflytop.digester.underframework.dao.record.UfActiveRecord; |
||||
import com.iflytop.digester.underframework.dao.record.UfActiveRecordField; |
import com.iflytop.digester.underframework.dao.record.UfActiveRecordField; |
||||
public class TsMdbActuatorCmd extends UfActiveRecord { |
|
||||
|
public class UfMdbActuatorCmd extends UfActiveRecord { |
||||
@UfActiveRecordField |
@UfActiveRecordField |
||||
public String actuatorId; |
public String actuatorId; |
||||
|
|
@ -1 +1 @@ |
|||||
Subproject commit bb327e921950cf4cfad799a02f6c7faa076919f4 |
|
||||
|
Subproject commit 92cb587baccf83f33dd9465bb37dc815058f26a0 |
Write
Preview
Loading…
Cancel
Save
Reference in new issue