diff --git a/doc/检测流程.md b/doc/检测流程.md index e885d19..164d378 100644 --- a/doc/检测流程.md +++ b/doc/检测流程.md @@ -174,30 +174,6 @@ flowchart TD ```mermaid --- -title: Can总线服务类图 ---- -classDiagram - class A8kCanBusService { - - } - - class A8kCanBusConnection { - + onOpen() - + onMessage() - + callcmd() - + send() - + moduleGetStatus() - } - - class WebSocketClient - - A8kCanBusService --> A8kCanBusConnection - A8kCanBusConnection --|> WebSocketClient - -``` - -```mermaid ---- title: 单次任务执行时序 --- sequenceDiagram diff --git a/doc/耗材管理.md b/doc/耗材管理.md index 45c4476..d1720b7 100644 --- a/doc/耗材管理.md +++ b/doc/耗材管理.md @@ -55,12 +55,12 @@ sequenceDiagram participant ConsumablesScanCtrlService user->>+ConsumableScanControler: 开始扫描 - ConsumableScanControler->>+AppConsumablesScanService: scanConsumables AppConsumablesScanService->>+GStateMgrService: isDeviceInited GStateMgrService->>-AppConsumablesScanService: 设备初始化结果 alt 未初始化 + ConsumableScanControler->>+AppConsumablesScanService: scanConsumables AppConsumablesScanService->>-ConsumableScanControler: 抛出系统未初始化异常 - else + else 初始化完成 AppConsumablesScanService->>+ConsumablesScanCtrlService: doScanConsumablesAction ConsumablesScanCtrlService->>-AppConsumablesScanService: scanRawResults原始扫描结果 loop 遍历扫描结果 @@ -72,7 +72,8 @@ sequenceDiagram AppConsumablesScanService->>+AppConsumablesScanService: loadingConsumables AppConsumablesScanService->>-AppConsumablesScanService: 解析后的结果 end - AppConsumablesScanService->>-ConsumableScanControler:ConsumablesScanResultPacket + ConsumableScanControler->>+AppConsumablesScanService: scanConsumables + AppConsumablesScanService->>-ConsumableScanControler:result end ConsumableScanControler->>-user:ConsumablesScanResultPacket diff --git a/doc/设备通信流程梳理.md b/doc/设备通信流程梳理.md new file mode 100644 index 0000000..52d6c02 --- /dev/null +++ b/doc/设备通信流程梳理.md @@ -0,0 +1,59 @@ +```mermaid +--- +title: Can总线服务类图 +--- +classDiagram + class A8kCanBusService { + + } + + class A8kCanBusConnection { + + onOpen() + + onMessage() + + callcmd() + + send() + + moduleGetStatus() + } + + class WebSocketClient + + A8kCanBusService --> A8kCanBusConnection + A8kCanBusConnection --|> WebSocketClient + +``` + +```mermaid +--- +title: 收到设备发送的包处理流程 +--- +sequenceDiagram + participant A8kCanBusConnection + participant ByteArray + participant A8kPacket + participant ProcessContext + participant AppEventBusService + participant BlockingQueue + + A8kCanBusConnection ->>+ A8kCanBusConnection: onMessage + A8kCanBusConnection ->>+ A8kCanBusConnection: processCanRxMessage + + %% 将16进制字符串转换成二级制字节 + A8kCanBusConnection ->>+ ByteArray: hexStringToBytes() + ByteArray ->>- A8kCanBusConnection: byte[] + A8kCanBusConnection ->>+ A8kPacket: A8kPacket() + A8kPacket ->>- A8kCanBusConnection: packet + opt 包类型为PACKET_TYPE_ACK 或者 PACKET_TYPE_ERROR_ACK + A8kCanBusConnection->>+ProcessContext: pushReceipt() + + %% 执行这边之前需要判断收到的包的序号是不是当前发送的包的序号相同,并且比较moduleId和commandId是否相等 + ProcessContext->>+BlockingQueue: add() + BlockingQueue->>-ProcessContext: void + ProcessContext->>-A8kCanBusConnection: void + end + + opt 包类型为PACKET_TYPE_EVENT 处理设备上报事件 + A8kCanBusConnection->>+AppEventBusService: pushEvent() + AppEventBusService->>-A8kCanBusConnection: void + end +``` + diff --git a/src/main/java/a8k/app/hardware/channel/A8kCanBusConnection.java b/src/main/java/a8k/app/hardware/channel/A8kCanBusConnection.java index 0986867..4a97a1b 100644 --- a/src/main/java/a8k/app/hardware/channel/A8kCanBusConnection.java +++ b/src/main/java/a8k/app/hardware/channel/A8kCanBusConnection.java @@ -67,11 +67,8 @@ public class A8kCanBusConnection extends WebSocketClient { } synchronized void pushReceipt(A8kPacket receipt) { - if (this.cmdPacket != null - && this.cmdPacket.getPacketIndex() == receipt.getPacketIndex() - ) { - if (this.cmdPacket.getModuleId() == receipt.getModuleId() - && this.cmdPacket.getCmdId() == receipt.getCmdId()) { + if (this.cmdPacket != null && this.cmdPacket.getPacketIndex() == receipt.getPacketIndex()) { + if (this.cmdPacket.getModuleId() == receipt.getModuleId() && this.cmdPacket.getCmdId() == receipt.getCmdId()) { receiptQueue.add(receipt); this.cmdPacket = null; } else {