You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

7.4 KiB

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
---
title: 检测流程初始化
---

flowchart TD
    A(开始) --> |Spring容器启动后| B[注册所有的检测流程可以将会执行的动作]
    B --> C[注册设备状态变更处理器]
    C --> D[核心流程将会执行的动作按照方法名字母顺序升序排序]
    D --> E[启动职守线程处理设备工作状态变更]
    E --> F(结束)
---
title: 设备工作状态变更状态图
---
stateDiagram-v2
    [*] --> IDLE
    IDLE --> WORKING : 点击开始检测/执行检测流程
    WORKING --> PAUSE : 点击暂停
    PAUSE --> WORKING : 点击继续/onResume
    WORKING --> IDLE : 点击停止/设备清空状态复位
    PAUSE --> IDLE : 点击停止
---
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
---
title: 系统状态定时处理流程
---

flowchart TD
    A(开始) --> B[获取系统状态]
    B --> C{设备错误}
    C --Y--> B
    C --N--> D[设备工作状态处理]
    D --> E[系统状态处理]
    E --> END(结束)
    
---
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

---
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
classDiagram
    class A8kActionTask {
        + Boolean isReady()
        + List<AppError> doAction()
    }
    
    class AC20ScanReactionPlate {
        
    }

    AC20ScanReactionPlate --|> A8kActionTask
    AC20ScanReactionPlate --> OptScanModuleStateMgrService
    AC20ScanReactionPlate --> ProjectContextMgrService
    AC20ScanReactionPlate --> ReactionRecordMgrService
    AC20ScanReactionPlate --> OptScanModuleCtrlService
---
title: 扫描反应板获取结果工作流程
---
flowchart TD
    BEGIN(开始) --> A[设置光学扫描模组状态为扫描中]
    A --> B[获取项目上下文]
    
    B --> E[根据项目中的光学类型生成扫描原始结果]
    E --> F[根据原始结果分析得到反应结果]
    F --> G[丢弃反应板]
    G --> H[设置光学扫描模组状态为空闲]
    H --> I[保存反应板反应结果]
    I --> END(结束)
---
title: Can总线服务类图
---
classDiagram
    class A8kCanBusService {
        
    } 
    
    class A8kCanBusConnection {
        + onOpen()
        + onMessage()
        + callcmd()
        + send()
        + moduleGetStatus()
    }
    
    class WebSocketClient
    
    A8kCanBusService --> A8kCanBusConnection
    A8kCanBusConnection --|> WebSocketClient

---
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
---
title: 全血样本预处理流程
---
flowchart
    Begin[开始] --> S1[获取当前试管信息]
    S1 --> S2[获取当前试管架配置信息]
    
    %% 试管样本准备阶段
    S2 --> S3[夹取试管到摇匀位置]
    S3 --> S4[摇匀]
    S4 --> S5[取试管帽]
    S5 --> S6[设置样本预处理完成]
    
    %% 反应板夹准备阶段
    S6 --> S7[丢弃反应板夹为什么]
    S7 --> S8[拉取反应板夹]
    S8 --> S9[丢弃反应板夹为什么]
    S9 --> S10[推送反应板夹]
    S10 --> S11[设置反应板夹准备完毕]
    
    %% 处理样本
    S11 --> S12[刺破小缓冲液]
    S12 --> S13[取样]
    S13 --> S14[将孵育盘转到待滴液的位置]
    S14 --> S15[滴液]
    
    %% 孵育处理
    S15 --> S16[查询项目的孵育时间]
    S16 --> S17[设置孵育开始时间和孵育时长开始孵育]
    
    S17 --> S18[设置样本处理完成]
    
---
title: 样本处理类图
---

classDiagram
    %% 试管
    class Tube
    %% 试管架
    class TubeHolder
    %% 反应液类型
    class A8kReactionFlowType