From 3472ce585ea07cb78cb195231482c2c12ff4b9e6 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Thu, 3 Oct 2024 17:38:43 +0800 Subject: [PATCH] update --- src/main/java/a8k/OS.java | 17 +++++++++------ src/main/java/a8k/hardware/A8kCanBusService.java | 6 +++--- .../appdevicectrl/AppDeviceCtrlService.java | 2 +- .../service/appdevicectrl/MainFlowCtrlService.java | 25 +++++++--------------- .../appdevicectrl/action/DO_EJECT_TUBEHOLDER.java | 2 +- .../action/DO_ENTER_TUBEHOLDER_AND_SCAN.java | 10 ++++----- .../scheduler/MainFlowCtrlScheduler.java | 25 ++++++++++++++++------ .../service/appstate/AppResourceMgrService.java | 10 ++++++++- 8 files changed, 57 insertions(+), 40 deletions(-) diff --git a/src/main/java/a8k/OS.java b/src/main/java/a8k/OS.java index 7ddc9cc..fe4948e 100644 --- a/src/main/java/a8k/OS.java +++ b/src/main/java/a8k/OS.java @@ -13,12 +13,17 @@ public class OS { } public static void forceSleep(Integer mills) { - int end = mills + (int) System.currentTimeMillis(); - while (System.currentTimeMillis() < end) { - try { - threadSleep(50); - } catch (InterruptedException ignored) { - } +// int end = mills + (int) System.currentTimeMillis(); +// while (System.currentTimeMillis() < end) { +// try { +// threadSleep(50); +// } catch (InterruptedException ignored) { +// } +// } + try { + threadSleep(mills); + } catch (InterruptedException e) { + throw new RuntimeException(e); } } diff --git a/src/main/java/a8k/hardware/A8kCanBusService.java b/src/main/java/a8k/hardware/A8kCanBusService.java index 3963488..cca26fb 100644 --- a/src/main/java/a8k/hardware/A8kCanBusService.java +++ b/src/main/java/a8k/hardware/A8kCanBusService.java @@ -719,7 +719,7 @@ public class A8kCanBusService { } if (debugFlag && pack.isTrace()) { String packstr = pack.toString(); - logger.info("Tx:|RAW:{}| {}", txpacket, packstr); + logger.debug("Tx:|RAW:{}| {}", txpacket, packstr); } if (cmdid.actionCmd) { @@ -774,11 +774,11 @@ public class A8kCanBusService { if (packet.getPacketType() == A8kPacket.PACKET_TYPE_ACK) { if (tpCxt != null && tpCxt.getPacketIndex() == packet.getPacketIndex()) { if (tpCxt.isTrace()) { - logger.info("RX-ACK |RAW:{}| {}", s, packet); + logger.debug("RX-ACK |RAW:{}| {}", s, packet); } } } else { - logger.info("RX |RAW:{}| {}", s, packet); + logger.debug("RX |RAW:{}| {}", s, packet); } } diff --git a/src/main/java/a8k/service/appdevicectrl/AppDeviceCtrlService.java b/src/main/java/a8k/service/appdevicectrl/AppDeviceCtrlService.java index bcca784..c7eb989 100644 --- a/src/main/java/a8k/service/appdevicectrl/AppDeviceCtrlService.java +++ b/src/main/java/a8k/service/appdevicectrl/AppDeviceCtrlService.java @@ -83,7 +83,7 @@ public class AppDeviceCtrlService { @ExtApiFn(name = "设备是否正在切换状态中", group = "设备状态") public Boolean deviceWorkStateIsChanging() { A8kWorkState workState = gstate.getWorkState(); - A8kWorkState sampleScanServiceWorkState = mainFlowCtrlSampleScanService.getWorkState(); + A8kWorkState sampleScanServiceWorkState = gstate.mainFlowCtrlState.workState; if (!workState.equals(sampleScanServiceWorkState)) { return true; } diff --git a/src/main/java/a8k/service/appdevicectrl/MainFlowCtrlService.java b/src/main/java/a8k/service/appdevicectrl/MainFlowCtrlService.java index aa1956a..21d7b9f 100644 --- a/src/main/java/a8k/service/appdevicectrl/MainFlowCtrlService.java +++ b/src/main/java/a8k/service/appdevicectrl/MainFlowCtrlService.java @@ -30,15 +30,6 @@ public class MainFlowCtrlService { @Resource SpringBootBeanUtil springBoot; - A8kWorkState workState = A8kWorkState.IDLE; // - - // - // CommonCode - // - - synchronized public A8kWorkState getWorkState() { - return workState; - } // // Init @@ -51,12 +42,12 @@ public class MainFlowCtrlService { scheduler.regClearErrorProcesser(this::DO_CLEAR_ERROR); scheduler.regEcodePostProcesser(this::postPorcessA8kEcode); - scheduler.regFn(A8kActionStep.DO_START, this::DO_START, () -> !workState.equals(gstate.getWorkState()) && gstate.getWorkState().equals(A8kWorkState.WORKING)); - scheduler.regFn(A8kActionStep.DO_STOP, this::DO_STOP, () -> !workState.equals(gstate.getWorkState()) && gstate.getWorkState().equals(A8kWorkState.IDLE)); - scheduler.regFn(A8kActionStep.DO_PAUSE, this::DO_PAUSE, () -> !workState.equals(gstate.getWorkState()) && gstate.getWorkState().equals(A8kWorkState.PAUSE)); + scheduler.regFn(A8kActionStep.DO_START, this::DO_START, () -> !gstate.mainFlowCtrlState.workState.equals(gstate.getWorkState()) && gstate.getWorkState().equals(A8kWorkState.WORKING)); + scheduler.regFn(A8kActionStep.DO_STOP, this::DO_STOP, () -> !gstate.mainFlowCtrlState.workState.equals(gstate.getWorkState()) && gstate.getWorkState().equals(A8kWorkState.IDLE)); + scheduler.regFn(A8kActionStep.DO_PAUSE, this::DO_PAUSE, () -> !gstate.mainFlowCtrlState.workState.equals(gstate.getWorkState()) && gstate.getWorkState().equals(A8kWorkState.PAUSE)); - scheduler.regFn( SpringBootBeanUtil.getBean(DO_ENTER_TUBEHOLDER_AND_SCAN.class)); - scheduler.regFn( SpringBootBeanUtil.getBean(DO_EJECT_TUBEHOLDER.class)); + scheduler.regFn(SpringBootBeanUtil.getBean(DO_ENTER_TUBEHOLDER_AND_SCAN.class)); + scheduler.regFn(SpringBootBeanUtil.getBean(DO_EJECT_TUBEHOLDER.class)); //启动调度 scheduler.startScheduler(); @@ -83,15 +74,15 @@ public class MainFlowCtrlService { } void DO_START() { - workState = A8kWorkState.WORKING; + gstate.mainFlowCtrlState.workState = A8kWorkState.WORKING; } void DO_PAUSE() { - workState = A8kWorkState.PAUSE; + gstate.mainFlowCtrlState.workState = A8kWorkState.PAUSE; } void DO_STOP() { - workState = A8kWorkState.IDLE; + gstate.mainFlowCtrlState.workState = A8kWorkState.IDLE; } } diff --git a/src/main/java/a8k/service/appdevicectrl/action/DO_EJECT_TUBEHOLDER.java b/src/main/java/a8k/service/appdevicectrl/action/DO_EJECT_TUBEHOLDER.java index 1a2461d..f7669f8 100644 --- a/src/main/java/a8k/service/appdevicectrl/action/DO_EJECT_TUBEHOLDER.java +++ b/src/main/java/a8k/service/appdevicectrl/action/DO_EJECT_TUBEHOLDER.java @@ -48,7 +48,7 @@ public class DO_EJECT_TUBEHOLDER implements A8kStepAction { @Override public A8kActionStep getDowhat() { - return A8kActionStep.DO_ENTER_TUBEHOLDER_AND_SCAN; + return A8kActionStep.DO_EJECT_TUBEHOLDER; } @Override public void doaction() throws AppException { diff --git a/src/main/java/a8k/service/appdevicectrl/action/DO_ENTER_TUBEHOLDER_AND_SCAN.java b/src/main/java/a8k/service/appdevicectrl/action/DO_ENTER_TUBEHOLDER_AND_SCAN.java index dff3990..2d3a269 100644 --- a/src/main/java/a8k/service/appdevicectrl/action/DO_ENTER_TUBEHOLDER_AND_SCAN.java +++ b/src/main/java/a8k/service/appdevicectrl/action/DO_ENTER_TUBEHOLDER_AND_SCAN.java @@ -141,10 +141,10 @@ public class DO_ENTER_TUBEHOLDER_AND_SCAN implements A8kStepAction { @Override public Boolean check() { //处于工作状态,试管架已经处于空闲状态,入料光电被触发 - return mfcs.workState.equals(A8kWorkState.WORKING) // - && gstate.getTubeHolderState().processState.equals(TubeHolderProcessState.IDLE)// - && getTubeholderEnterPosPPS() - ; + Boolean cond1 = mfcs.workState.equals(A8kWorkState.WORKING); + Boolean cond2 = gstate.getTubeHolderState().processState.equals(TubeHolderProcessState.IDLE); + Boolean cond3 = getTubeholderEnterPosPPS(); + return cond1 && cond2 && cond3; } @Override public List getDeplyResourceList() { @@ -181,7 +181,7 @@ public class DO_ENTER_TUBEHOLDER_AND_SCAN implements A8kStepAction { Boolean getTubeholderEnterPosPPS() { //入料通道是否为空 try { - return canBus.getIOState(IOId.THChInterPPS); + return canBus.getIOState(IOId.InfeedPPS); } catch (AppException e) { logger.error("getTubeholderEnterPosPPS error", e); return false; diff --git a/src/main/java/a8k/service/appdevicectrl/scheduler/MainFlowCtrlScheduler.java b/src/main/java/a8k/service/appdevicectrl/scheduler/MainFlowCtrlScheduler.java index 448d4ef..d059c62 100644 --- a/src/main/java/a8k/service/appdevicectrl/scheduler/MainFlowCtrlScheduler.java +++ b/src/main/java/a8k/service/appdevicectrl/scheduler/MainFlowCtrlScheduler.java @@ -145,9 +145,15 @@ public class MainFlowCtrlScheduler { List guessWhatToDo() { List dowhatList = new ArrayList<>(); for (ConditionItem item : conditionItems) { - if (item.fn.check() && appResourceMgrService.applyForResources(this, item.relayResourceList)) { + Boolean cond = item.fn.check(); + Boolean relayResourceSuc = appResourceMgrService.applyForResources(this, item.relayResourceList); + + + logger.info("step {} resoure:{},conditon {},resource {}", item.key, item.relayResourceList, cond, relayResourceSuc); + if (cond && relayResourceSuc) { dowhatList.add(item.key); } + } return dowhatList; } @@ -196,6 +202,9 @@ public class MainFlowCtrlScheduler { throw new RuntimeException(e); } } + + //清空NoError + ecodeList.removeIf(ecode -> ecode.ecode == A8kEcode.NoError); return ecodeList; } @@ -219,6 +228,7 @@ public class MainFlowCtrlScheduler { ecodePostProcesser.process(ecodeList); } + ebus.pushEvent(new A8kEcodeContextListPromptEvent(ecodeList)); state.errorFlag = true; this.state.ecodeList = ecodeList; @@ -228,7 +238,7 @@ public class MainFlowCtrlScheduler { void threadLoopFn() { while (workThread.isAlive()) { if (state.fatalErrorFlag) { - OS.forceSleep(100); + OS.forceSleep(800); } else if (clearErrorPendingFlag) { /* * 清除错误 @@ -245,9 +255,9 @@ public class MainFlowCtrlScheduler { A8kEcodeContext context = new A8kEcodeContext(A8kActionStep.DO_CLEAR_ERROR, A8kEcode.fromInt(appe.getErrorCode())); a8kEcodePostProcesser(List.of(context)); } - OS.forceSleep(100); + OS.forceSleep(800); } else if (state.errorFlag) { - OS.forceSleep(100); + OS.forceSleep(800); } else { List dowhatList = guessWhatToDo(); @@ -260,8 +270,11 @@ public class MainFlowCtrlScheduler { List ecodeList = waitAllActionIsDone(futureList); appResourceMgrService.releaseAllResource(this); - a8kEcodePostProcesser(ecodeList); - OS.forceSleep(100); + if (!ecodeList.isEmpty()) { + a8kEcodePostProcesser(ecodeList); + } + + OS.forceSleep(800); } } } diff --git a/src/main/java/a8k/service/appstate/AppResourceMgrService.java b/src/main/java/a8k/service/appstate/AppResourceMgrService.java index ff48378..6238835 100644 --- a/src/main/java/a8k/service/appstate/AppResourceMgrService.java +++ b/src/main/java/a8k/service/appstate/AppResourceMgrService.java @@ -3,6 +3,8 @@ package a8k.service.appstate; import a8k.service.appstate.resource.A8kPublicResourceType; import jakarta.annotation.PostConstruct; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.util.List; @@ -10,10 +12,11 @@ import java.util.Vector; @Component public class AppResourceMgrService { + static Logger logger = LoggerFactory.getLogger(AppResourceMgrService.class); static public class Resource { public A8kPublicResourceType type; - public Boolean rented = true;//是否被租用 + public Boolean rented = false;//是否被租用 public Object ownerNow = null; public Resource(A8kPublicResourceType type) { @@ -68,6 +71,11 @@ public class AppResourceMgrService { * @return 是否申请成功 */ synchronized public Boolean applyForResources(Object applyer, List types) { + // logger.info("{} applyForResources: {}", applyer.getClass().getSimpleName(), types); + if (types == null || types.isEmpty()) { + return true; + } + //检查是否所有资源都可租用 for (A8kPublicResourceType type : types) { if (!checkResourceRentable(type)) {