|
|
@ -30,9 +30,11 @@ public class TransferModuleService { |
|
|
|
private final DeviceCommandService deviceCommandService; |
|
|
|
private final DeviceStateService deviceStateService; |
|
|
|
private final SystemConfigService systemConfigService; |
|
|
|
private final BlockingQueue<Thread> solutionQueue = new ArrayBlockingQueue<>(10); |
|
|
|
private final BlockingQueue<Thread> annealQueue = new ArrayBlockingQueue<>(10); |
|
|
|
private final BlockingQueue<Thread> heatQueue = new ArrayBlockingQueue<>(10); |
|
|
|
private final BlockingQueue<Thread> thinQueue = new ArrayBlockingQueue<>(1); |
|
|
|
private final BlockingQueue<Thread> thickQueue = new ArrayBlockingQueue<>(3); |
|
|
|
private final BlockingQueue<Thread> annealQueue = new ArrayBlockingQueue<>(3); |
|
|
|
private final BlockingQueue<Thread> heatQueue = new ArrayBlockingQueue<>(1); |
|
|
|
private final BlockingQueue<Thread> feedQueue = new ArrayBlockingQueue<>(3); |
|
|
|
|
|
|
|
/** |
|
|
|
* 申请使用转运模块。 |
|
|
@ -46,12 +48,18 @@ public class TransferModuleService { |
|
|
|
// 1. 先把自己加入对应类型的队列尾部 |
|
|
|
Thread current = Thread.currentThread(); |
|
|
|
switch (type) { |
|
|
|
case move_liquid: |
|
|
|
solutionQueue.add(current); |
|
|
|
case move_feed: |
|
|
|
feedQueue.add(current); |
|
|
|
break; |
|
|
|
case move_heat: |
|
|
|
heatQueue.add(current); |
|
|
|
break; |
|
|
|
case move_thin: |
|
|
|
thinQueue.add(current); |
|
|
|
break; |
|
|
|
case move_thick: |
|
|
|
thickQueue.add(current); |
|
|
|
break; |
|
|
|
case move_anneal: |
|
|
|
annealQueue.add(current); |
|
|
|
break; |
|
|
@ -69,10 +77,14 @@ public class TransferModuleService { |
|
|
|
} else { |
|
|
|
// 模块空闲时,再判断当前线程是否是“四个队列”里优先级最高且队头的那个 |
|
|
|
Thread head = null; |
|
|
|
if (!heatQueue.isEmpty()) { |
|
|
|
if (!feedQueue.isEmpty()) { |
|
|
|
head = feedQueue.peek(); |
|
|
|
} else if (!heatQueue.isEmpty()) { |
|
|
|
head = heatQueue.peek(); |
|
|
|
} else if (!solutionQueue.isEmpty()) { |
|
|
|
head = solutionQueue.peek(); |
|
|
|
} else if (!thinQueue.isEmpty()) { |
|
|
|
head = thinQueue.peek(); |
|
|
|
} else if (!thickQueue.isEmpty()) { |
|
|
|
head = thickQueue.peek(); |
|
|
|
} else if (!annealQueue.isEmpty()) { |
|
|
|
head = annealQueue.peek(); |
|
|
|
} |
|
|
@ -121,11 +133,17 @@ public class TransferModuleService { |
|
|
|
*/ |
|
|
|
private void removeCurrentFromQueue(CraftsTransferTypeCode type, Thread current) { |
|
|
|
switch (type) { |
|
|
|
case move_feed: |
|
|
|
feedQueue.remove(current); |
|
|
|
break; |
|
|
|
case move_heat: |
|
|
|
heatQueue.remove(current); |
|
|
|
break; |
|
|
|
case move_liquid: |
|
|
|
solutionQueue.remove(current); |
|
|
|
case move_thin: |
|
|
|
thinQueue.remove(current); |
|
|
|
break; |
|
|
|
case move_thick: |
|
|
|
thickQueue.remove(current); |
|
|
|
break; |
|
|
|
case move_anneal: |
|
|
|
annealQueue.remove(current); |
|
|
@ -222,7 +240,6 @@ public class TransferModuleService { |
|
|
|
* 转运机械臂Z轴移动到0点 |
|
|
|
*/ |
|
|
|
public void transferZMoveZero(String cmdId, String cmdCode) throws Exception { |
|
|
|
//todo z轴存在丢步问题 用回原点代替归0 |
|
|
|
DeviceCommandBundle deviceCommand = DeviceCommandGenerator.transferZMove(0.0); |
|
|
|
//DeviceCommandBundle deviceCommand = DeviceCommandGenerator.transferZOrigin(); |
|
|
|
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand); |
|
|
|