Browse Source

doc:增加检测流程梳理;增加系统事件处理流程梳理

master
黄翔 4 months ago
parent
commit
af3f4c7da9
  1. 223
      doc/检测流程.md
  2. 68
      doc/系统事件消息总线.md
  3. 7
      src/main/java/a8k/extui/page/driver/CodeScanerDriverCtrlPage.java

223
doc/检测流程.md

@ -0,0 +1,223 @@
```mermaid
classDiagram
class MainFlowCtrlScheduler
class GStateMgrService
class DeviceWorkStateMgrService
class DeviceState
class ModuleEnableCtrlDriver
class LiquidOperationCtrlService
class A8kActionTask
class AC20ScanReactionPlate
AC20ScanReactionPlate --|> A8kActionTask
class IMainFlowStateChangeProcesser
class Thread
MainFlowCtrlScheduler --> GStateMgrService
MainFlowCtrlScheduler --> DeviceWorkStateMgrService
MainFlowCtrlScheduler --> ModuleEnableCtrlDriver
MainFlowCtrlScheduler --> LiquidOperationCtrlService
MainFlowCtrlScheduler "1" --> "*" A8kActionTask
MainFlowCtrlScheduler --> IMainFlowStateChangeProcesser
MainFlowCtrlScheduler --> Thread
DeviceWorkStateMgrService --> DeviceState
```
```mermaid
---
title: 检测流程初始化
---
flowchart TD
A(开始) --> |Spring容器启动后| B[注册所有的检测流程可以将会执行的动作]
B --> C[注册设备状态变更处理器]
C --> D[核心流程将会执行的动作按照方法名字母顺序升序排序]
D --> E[启动职守线程处理设备工作状态变更]
E --> F(结束)
```
```mermaid
---
title: 设备工作状态变更状态图
---
stateDiagram-v2
[*] --> IDLE
IDLE --> WORKING : 点击开始检测/执行检测流程
WORKING --> PAUSE : 点击暂停
PAUSE --> WORKING : 点击继续/onResume
WORKING --> IDLE : 点击停止/设备清空状态复位
PAUSE --> IDLE : 点击停止
```
```mermaid
---
title: 系统的工作状态
---
stateDiagram-v2
[*] --> COMPLETED
COMPLETED --> START_PENDING : 点击开始检测
START_PENDING --> COMPLETED : [设备状态为IDLE]/设置设备状态为WORKING
COMPLETED --> PAUSE_PENDING : 点击暂停
PAUSE_PENDING --> COMPLETED : [设备状态为WORKING]/设置设备状态为PAUSE
COMPLETED --> RESUME_PENDING : 点击继续
RESUME_PENDING --> COMPLETED : [设备状态为PAUSE]/设置设备状态为WORKING
COMPLETED --> STOP_PENDING : 点击停止
STOP_PENDING --> COMPLETED : [设备状态不为IDLE]/设置设备状态为IDLE
```
```mermaid
---
title: 系统状态定时处理流程
---
flowchart TD
A(开始) --> B[获取系统状态]
B --> C{设备错误}
C --Y--> B
C --N--> D[设备工作状态处理]
D --> E[系统状态处理]
E --> END(结束)
```
```mermaid
---
title: 设备状态变更处理流程
---
flowchart TD
BEGIN(开始) --> DeviceStateDiv{设备状态}
DeviceStateDiv --暂停--> OnPause[do nothing]
DeviceStateDiv --恢复--> OnResume[do nothing]
DeviceStateDiv --工作--> OnWorking
OnPause --> END(结束)
OnResume --> END(结束)
OnWorking --> END(结束)
subgraph OnWorking
SUB_BEGIN(开始) --> G
G{存在就绪任务} --Y--> B[执行操作]
G --N--> E[获取系统状态]
B --> C{存在设备错误}
C --Y--> D[填充错误信息]
D --> E
C --N--> E
E --> F{系统状态切换中或者系统出现错误}
F --Y--> SUB_END(结束)
F --N--> G
end
```
```mermaid
---
title: 系统状态处理
---
flowchart TD
BEGIN(开始) --> A[获取系统状态]
A --> B{存在设备错误}
B --Y--> C[标记为发生严重错误]
C --> D[设置系统状态为状态变更完成]
D --> E[发送应用错误信息]
E --> F[失能所有电机]
F --> G[设置设备状态为空闲]
G --> END(结束)
B --N--> H{系统状态判断}
H --启动切换中--> OnStartPending[设备状态为IDLE则设备状态设置为WORKING]
H --暂停切换中--> OnPausePending[设备状态为WORKING则设备状态设置为PAUSE]
H --恢复切换中--> OnResumePending[设备状态为PAUSE则设备状态设置为WORKING]
H --停止切换中--> OnStopPending[设备状态不为IDLE则设备状态设置为IDLE]
OnStartPending --> J[设置系统状态为状态变更完成]
OnPausePending --> J
OnResumePending --> J
OnStopPending --> J
J --> END
```
```mermaid
classDiagram
class A8kActionTask {
+ Boolean isReady()
+ List<AppError> doAction()
}
class AC20ScanReactionPlate {
}
AC20ScanReactionPlate --|> A8kActionTask
AC20ScanReactionPlate --> OptScanModuleStateMgrService
AC20ScanReactionPlate --> ProjectContextMgrService
AC20ScanReactionPlate --> ReactionRecordMgrService
AC20ScanReactionPlate --> OptScanModuleCtrlService
```
```mermaid
---
title: 扫描反应板获取结果工作流程
---
flowchart TD
BEGIN(开始) --> A[设置光学扫描模组状态为扫描中]
A --> B[获取项目上下文]
B --> E[根据项目中的光学类型生成扫描原始结果]
E --> F[根据原始结果分析得到反应结果]
F --> G[丢弃反应板]
G --> H[设置光学扫描模组状态为空闲]
H --> I[保存反应板反应结果]
I --> END(结束)
```
```mermaid
---
title: Can总线服务类图
---
classDiagram
class A8kCanBusService {
}
class A8kCanBusConnection {
+ onOpen()
+ onMessage()
+ callcmd()
+ send()
+ moduleGetStatus()
}
class WebSocketClient
A8kCanBusService --> A8kCanBusConnection
A8kCanBusConnection --|> WebSocketClient
```
```mermaid
---
title: 单次任务执行时序
---
sequenceDiagram
participant A8kActionTask
participant OptScanModuleCtrlService
participant OptModuleDriver
participant A8kCanBusService
participant AC20ScanReactionPlate
participant A8kCanBusConnection
participant WebSocketClient
A8kActionTask ->> AC20ScanReactionPlate: doAction
AC20ScanReactionPlate ->> AC20ScanReactionPlate: doOptScanXX
AC20ScanReactionPlate ->> OptScanModuleCtrlService: optScan
OptScanModuleCtrlService ->> OptScanModuleCtrlService: startOptScan
OptScanModuleCtrlService ->> OptModuleDriver: setReg
OptModuleDriver ->> A8kCanBusService: moduleSetReg
A8kCanBusService ->> A8kCanBusConnection: callcmd2
A8kCanBusConnection ->> A8kCanBusConnection: packParamsToPacket
A8kCanBusConnection ->> A8kCanBusConnection: autoReSend
A8kCanBusConnection ->> A8kCanBusConnection: priSend
A8kCanBusConnection ->> A8kCanBusConnection: _priSend
A8kCanBusConnection ->> WebSocketClient: send
```

68
doc/系统事件消息总线.md

@ -0,0 +1,68 @@
```mermaid
classDiagram
class AppEventBusService {
+ regListener(AppEventListener listener)
+ pushEvent(AppEvent appEvent)
- eventBusSchedule()
- callOnEvent(AppEvent appEvent)
}
AppEventBusService --> Thread
AppEventBusService --> BlockingQueue
AppEventBusService "1" --> "*" AppEventListener
AppEventListener --> AppEvent
A8kCanBusOnConnectEvent --|> AppEvent
AppTubeholderSettingUpdateEvent --|> AppEvent
A8kHardwareReport --|> AppEvent
A8kCanBusOnConnectEvent --|> AppEvent
AppIDCardMountEvent --|> AppEvent
AppIDCardUnmountEvent --|> AppEvent
AppPromptEvent --|> AppEvent
AppWarningNotifyEvent --|> AppEvent
DoA8kStepActionEvent --|> AppEvent
```
```mermaid
flowchart TD
BEGIN(开始) --容器初始化完成--> A[初始化事件处理线程]
A --> B{阻塞消息队列存在待处理消息}
B --Y--> C[遍历消息处理器调用消息处理器处理消息]
B --N--> B
C --> B
```
```mermaid
---
title 设备状态与应用事件更新
---
classDiagram
class AppWebSocketEndpointMgr {
- broadcastEvent()
- broadcastState()
%% 上报应用事件
+ reportEvent()
%% 上报设备状态
+ reportDeviceState()
%% 上报Session状态
+ reportSessionState()
%% 上报耗材状态
+ reportConsumableStateState()
}
class AppStateWebsocketEndpoint
class AppEventWebsocketEndpoint
class FrontEndMessageBoxAndEventMgr
class DeviceWorkStateMgrService
class GStateMgrService
class TubeStateMgrService
class IncubationPlateStateMgrService
class OptScanModuleStateMgrService
class ConsumablesMgrService
class TubeHolderSettingMgrService
class Report
```

7
src/main/java/a8k/extui/page/driver/CodeScanerDriverCtrlPage.java

@ -39,6 +39,12 @@ public class CodeScanerDriverCtrlPage {
return ret;
}
public void codeScannerStressTest(Integer repeatCnt, Integer timeout) throws AppException {
for (int i = 0; i < repeatCnt; i++) {
codeScanerDriver.feedingModScannerModCodeScannerScanCode( timeout * 1000);
}
}
public void feedingModScannerModCodeScannerStartScan() throws AppException {
codeScanerDriver.feedingModScannerModCodeScannerStartScan();
}
@ -55,6 +61,7 @@ public class CodeScanerDriverCtrlPage {
page.addFunction("扫码(阻塞)", this::pipetteModCodeScannerScanCode);
page.addFunction("扫码开始", this::pipetteGunStartScan);
page.addFunction("扫码停止", this::pipetteGunStopScan);
page.addFunction("压力测试", this::codeScannerStressTest);
page.newGroup("进出料扫描");
page.addFunction("扫码(阻塞)", this::feedingModScannerModCodeScannerScanCode);

Loading…
Cancel
Save