Browse Source

update

tags/v0
zhaohe 10 months ago
parent
commit
3472ce585e
  1. 17
      src/main/java/a8k/OS.java
  2. 6
      src/main/java/a8k/hardware/A8kCanBusService.java
  3. 2
      src/main/java/a8k/service/appdevicectrl/AppDeviceCtrlService.java
  4. 25
      src/main/java/a8k/service/appdevicectrl/MainFlowCtrlService.java
  5. 2
      src/main/java/a8k/service/appdevicectrl/action/DO_EJECT_TUBEHOLDER.java
  6. 10
      src/main/java/a8k/service/appdevicectrl/action/DO_ENTER_TUBEHOLDER_AND_SCAN.java
  7. 25
      src/main/java/a8k/service/appdevicectrl/scheduler/MainFlowCtrlScheduler.java
  8. 10
      src/main/java/a8k/service/appstate/AppResourceMgrService.java

17
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);
}
}

6
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);
}
}

2
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;
}

25
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;
}
}

2
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 {

10
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<A8kPublicResourceType> 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;

25
src/main/java/a8k/service/appdevicectrl/scheduler/MainFlowCtrlScheduler.java

@ -145,9 +145,15 @@ public class MainFlowCtrlScheduler {
List<A8kActionStep> guessWhatToDo() {
List<A8kActionStep> 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<A8kActionStep> dowhatList = guessWhatToDo();
@ -260,8 +270,11 @@ public class MainFlowCtrlScheduler {
List<A8kEcodeContext> ecodeList = waitAllActionIsDone(futureList);
appResourceMgrService.releaseAllResource(this);
a8kEcodePostProcesser(ecodeList);
OS.forceSleep(100);
if (!ecodeList.isEmpty()) {
a8kEcodePostProcesser(ecodeList);
}
OS.forceSleep(800);
}
}
}

10
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<A8kPublicResourceType> types) {
// logger.info("{} applyForResources: {}", applyer.getClass().getSimpleName(), types);
if (types == null || types.isEmpty()) {
return true;
}
//检查是否所有资源都可租用
for (A8kPublicResourceType type : types) {
if (!checkResourceRentable(type)) {

Loading…
Cancel
Save