From 4ad7daa96043522bfbfb997ac37ea622d6379389 Mon Sep 17 00:00:00 2001 From: zhangjiming Date: Tue, 18 Feb 2025 15:32:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BAcmd=E4=B8=8A=E6=8A=A5=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0success=E5=B1=9E=E6=80=A7=EF=BC=8C=E5=BE=AE=E8=B0=83ge?= =?UTF-8?q?tTxnRecord=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/socket.ts | 99 +++++++++++++++++++++++++---------------------- src/services/txn.ts | 13 ++++--- src/views/debug/debug.vue | 8 ++-- 3 files changed, 63 insertions(+), 57 deletions(-) diff --git a/src/services/socket.ts b/src/services/socket.ts index a069553..9a2c4a4 100644 --- a/src/services/socket.ts +++ b/src/services/socket.ts @@ -10,6 +10,7 @@ export type CmdDatagram = { // commandName: DebugCmd; status: CmdSuccess | CmdFailure; message: string; + success: boolean; }; }; @@ -24,59 +25,59 @@ export type StatusDatagram = { type: "status"; // 状态 data: { emergencyStop: boolean; // 硬件急停信号,true 为急停触发,false 为正常运行 - railArm: { - x: number; - y: number; - z: number; - joint1: number; - joint2: number; - joint3: number; - railDistance: number; - clawDistance: number; - speed: number; - isZeroPos: 0 | 1; // 导轨是否在原点,0 表示不在原点,非 0 表示在原点 - isLimitPos: 0 | 1; // 导轨是否在限位点,0 表示不在限位点,非 0 表示在限位点 - }; - liquidArm: { - x: number; - y: number; - z: number; - joint1: number; - joint2: number; - speed: number; - }; + railArm: { + x: number; + y: number; + z: number; + joint1: number; + joint2: number; + joint3: number; + railDistance: number; + clawDistance: number; + speed: number; + isZeroPos: 0 | 1; // 导轨是否在原点,0 表示不在原点,非 0 表示在原点 + isLimitPos: 0 | 1; // 导轨是否在限位点,0 表示不在限位点,非 0 表示在限位点 + }; + liquidArm: { + x: number; + y: number; + z: number; + joint1: number; + joint2: number; + speed: number; + }; // 加液泵状态列表 - motors: Array<{ - pumpId: string; - speed: number; - position: number; // 电机实时位置 - isZeroPos: 0 | 1; // 电机是否在原点,0 表示不在原点,非 0 表示在原点 - isLimitPos: 0 | 1; // 电机是否在限位点,0 表示不在限位点,非 0 表示在限位点 - }>; - heatingStatus: boolean; + motors: Array<{ + pumpId: string; + speed: number; + position: number; // 电机实时位置 + isZeroPos: 0 | 1; // 电机是否在原点,0 表示不在原点,非 0 表示在原点 + isLimitPos: 0 | 1; // 电机是否在限位点,0 表示不在限位点,非 0 表示在限位点 + }>; + heatingStatus: boolean; // 加热器状态列表 - heater: Array<{ - heaterId: string; - temperature: number; - current: number; - }>; - trayStatus: boolean[]; // 加热位托盘状态列表,true 为存在托盘,false 为无托盘 - capStatus: boolean[]; // 拍子状态列表,true 为存在拍子,false 为无拍子 + heater: Array<{ + heaterId: string; + temperature: number; + current: number; + }>; + trayStatus: boolean[]; // 加热位托盘状态列表,true 为存在托盘,false 为无托盘 + capStatus: boolean[]; // 拍子状态列表,true 为存在拍子,false 为无拍子 // 酸液桶状态 - lyeTank: { - isEmpty: boolean; - isFull: boolean; - }; + lyeTank: { + isEmpty: boolean; + isFull: boolean; + }; // 废液桶状态 - wasteTank: { - isEmpty: boolean; - isFull: boolean; - }; + wasteTank: { + isEmpty: boolean; + isFull: boolean; + }; }; }; export type Datagram = CmdDatagram | WarnDatagram | StatusDatagram; -export type DatagramType = Datagram['type'] +export type DatagramType = Datagram["type"]; export type SocketState = "open" | "close" | "error"; @@ -130,9 +131,13 @@ class WebSocketClient { // 接收消息的处理 this.ws.onmessage = (event: MessageEvent) => { try { - const data = JSON.parse(event.data); + const data = JSON.parse(event.data) as Datagram; // console.log('🚀 ~ WebSocketClient ~ bindEvents ~ data:', data) - this.dataSub.next(data); + if (data.type === "cmd") { + this.dataSub.next({ type: data.type, data: { ...data.data, success: data.data.status === "D0000" } }); + } else { + this.dataSub.next(data); + } } catch (error) { console.error("消息解析错误:", error); } diff --git a/src/services/txn.ts b/src/services/txn.ts index 7b1e0d6..fd66306 100644 --- a/src/services/txn.ts +++ b/src/services/txn.ts @@ -32,11 +32,12 @@ export function addTxnRecord(val: TxnRecord) { return txn } -export function getTxnRecord(txn: string, del: boolean = true) { +export function getTxnRecord(txn: string, category: TxnRecord['category']) { const record = txnCmdMap[txn]; - console.log(txn,':', record) - if (del) { - delete txnCmdMap[txn]; - } - return record; + // 只有属于指定category时,才返回,且返回后删除记录,节约内存 + if (record.category === category) { + delete txnCmdMap[txn]; + return record + } + return undefined } diff --git a/src/views/debug/debug.vue b/src/views/debug/debug.vue index fc63acd..3ea7d08 100644 --- a/src/views/debug/debug.vue +++ b/src/views/debug/debug.vue @@ -206,13 +206,13 @@ onMounted(() => { const subscription = wsClient.dataOb.subscribe(data => { console.log(data); if (data.type === "cmd") { - const cmdInfo = getTxnRecord(data.data.commandId); - if (cmdInfo.category === "debug") { + const cmdInfo = getTxnRecord(data.data.commandId, "debug"); + if (cmdInfo) { const cmdName = CmdDescMap[cmdInfo.command]; - const result = data.data.status === "D0000" ? "执行完毕" : "执行失败"; + const result = data.data.success ? "执行完毕" : "执行失败"; ElMessage({ message: `${cmdName} ${result}`, - type: data.data.status === "D0000" ? "success" : "error", + type: data.data.success ? "success" : "error", }); } } else if (data.type === "status") {