|
|
@ -4,10 +4,158 @@ import * as R from "ramda"; |
|
|
|
import type { StatusDatagram } from "@/services/socket"; |
|
|
|
import { BehaviorSubject, Subject } from "rxjs"; |
|
|
|
|
|
|
|
const defaultStatus: StatusDatagram["data"] = { |
|
|
|
emergencyStop: false, // 硬件急停信号,true 为急停触发,false 为正常运行
|
|
|
|
doorStatus: false, // 门的状态,false 表示关闭,true 表示开启
|
|
|
|
railArm: { |
|
|
|
x: 0, |
|
|
|
y: 0, |
|
|
|
z: 0, |
|
|
|
joint1: 0, |
|
|
|
joint2: 0, |
|
|
|
distance: 0, // 当前机械臂(轴 3)上下移动的距离
|
|
|
|
railDistance: 0, |
|
|
|
clawDistance: 0, |
|
|
|
clawStatus: false, // 夹爪状态,true 为张开,false 为闭合
|
|
|
|
isZeroPos: true, // 导轨是否在原点
|
|
|
|
isLimitPos: false, // 导轨是否在限位点
|
|
|
|
}, |
|
|
|
// 操作区(加液、摇匀、拍照)状态
|
|
|
|
liquidArea: { |
|
|
|
liquidArm: { |
|
|
|
x: 0, |
|
|
|
y: 0, |
|
|
|
z: 0, |
|
|
|
joint1: 0, |
|
|
|
joint2: 0, |
|
|
|
pump: [ |
|
|
|
{ |
|
|
|
pumpId: 1, |
|
|
|
isPumping: false, // 是否正在加液,true正在加液
|
|
|
|
}, |
|
|
|
{ |
|
|
|
pumpId: 2, |
|
|
|
isPumping: false, // 是否正在加液,true正在加液
|
|
|
|
}, |
|
|
|
{ |
|
|
|
pumpId: 3, |
|
|
|
isPumping: false, // 是否正在加液,true正在加液
|
|
|
|
}, |
|
|
|
{ |
|
|
|
pumpId: 4, |
|
|
|
isPumping: false, // 是否正在加液,true正在加液
|
|
|
|
}, |
|
|
|
{ |
|
|
|
pumpId: 5, |
|
|
|
isPumping: false, // 是否正在加液,true正在加液
|
|
|
|
}, |
|
|
|
{ |
|
|
|
pumpId: 6, |
|
|
|
isPumping: false, // 是否正在加液,true正在加液
|
|
|
|
}, |
|
|
|
], |
|
|
|
}, |
|
|
|
isShaking: false, // 是否正在摇匀
|
|
|
|
liquidTray: false, // 是否存在托盘
|
|
|
|
// 溶液容器状态
|
|
|
|
solutionBucket: [ |
|
|
|
{ |
|
|
|
isEmpty: false, // 容器是否为空
|
|
|
|
isFull: false, // 容器是否已满
|
|
|
|
}, |
|
|
|
{ |
|
|
|
isEmpty: false, // 容器是否为空
|
|
|
|
isFull: false, // 容器是否已满
|
|
|
|
}, |
|
|
|
{ |
|
|
|
isEmpty: false, // 容器是否为空
|
|
|
|
isFull: false, // 容器是否已满
|
|
|
|
}, |
|
|
|
{ |
|
|
|
isEmpty: false, // 容器是否为空
|
|
|
|
isFull: false, // 容器是否已满
|
|
|
|
}, |
|
|
|
{ |
|
|
|
isEmpty: false, // 容器是否为空
|
|
|
|
isFull: false, // 容器是否已满
|
|
|
|
}, |
|
|
|
{ |
|
|
|
isEmpty: false, // 容器是否为空
|
|
|
|
isFull: false, // 容器是否已满
|
|
|
|
}, |
|
|
|
{ |
|
|
|
isEmpty: false, // 容器是否为空
|
|
|
|
isFull: false, // 容器是否已满
|
|
|
|
}, |
|
|
|
{ |
|
|
|
isEmpty: false, // 容器是否为空
|
|
|
|
isFull: false, // 容器是否已满
|
|
|
|
}, |
|
|
|
], |
|
|
|
}, |
|
|
|
|
|
|
|
// 加热区列表
|
|
|
|
heatArea: [ |
|
|
|
{ |
|
|
|
hardwareId: "hardware_1", |
|
|
|
trayStatus: 0, // 0为无托盘,1为有托盘,2为托盘抬起
|
|
|
|
isHeating: false, // 是否正在加热
|
|
|
|
capStatus: false, // 是否存在拍子
|
|
|
|
isSealed: false, // 拍子密封状态,true为已密封,false为未密封
|
|
|
|
temperature: 0, // 当前温度
|
|
|
|
}, |
|
|
|
{ |
|
|
|
hardwareId: "hardware_2", |
|
|
|
trayStatus: 0, // 0为无托盘,1为有托盘,2为托盘抬起
|
|
|
|
isHeating: false, // 是否正在加热
|
|
|
|
capStatus: false, // 是否存在拍子
|
|
|
|
isSealed: false, // 拍子密封状态,true为已密封,false为未密封
|
|
|
|
temperature: 0, // 当前温度
|
|
|
|
}, |
|
|
|
{ |
|
|
|
hardwareId: "hardware_3", |
|
|
|
trayStatus: 0, // 0为无托盘,1为有托盘,2为托盘抬起
|
|
|
|
isHeating: false, // 是否正在加热
|
|
|
|
capStatus: false, // 是否存在拍子
|
|
|
|
isSealed: false, // 拍子密封状态,true为已密封,false为未密封
|
|
|
|
temperature: 0, // 当前温度
|
|
|
|
}, |
|
|
|
{ |
|
|
|
hardwareId: "hardware_4", |
|
|
|
trayStatus: 0, // 0为无托盘,1为有托盘,2为托盘抬起
|
|
|
|
isHeating: false, // 是否正在加热
|
|
|
|
capStatus: false, // 是否存在拍子
|
|
|
|
isSealed: false, // 拍子密封状态,true为已密封,false为未密封
|
|
|
|
temperature: 0, // 当前温度
|
|
|
|
}, |
|
|
|
{ |
|
|
|
hardwareId: "hardware_5", |
|
|
|
trayStatus: 0, // 0为无托盘,1为有托盘,2为托盘抬起
|
|
|
|
isHeating: false, // 是否正在加热
|
|
|
|
capStatus: false, // 是否存在拍子
|
|
|
|
isSealed: false, // 拍子密封状态,true为已密封,false为未密封
|
|
|
|
temperature: 0, // 当前温度
|
|
|
|
}, |
|
|
|
{ |
|
|
|
hardwareId: "hardware_6", |
|
|
|
trayStatus: 0, // 0为无托盘,1为有托盘,2为托盘抬起
|
|
|
|
isHeating: false, // 是否正在加热
|
|
|
|
capStatus: false, // 是否存在拍子
|
|
|
|
isSealed: false, // 拍子密封状态,true为已密封,false为未密封
|
|
|
|
temperature: 0, // 当前温度
|
|
|
|
}, |
|
|
|
], |
|
|
|
// 碱容器状态(废液桶)
|
|
|
|
alkaliBucket: { |
|
|
|
isEmpty: false, // 容器是否为空
|
|
|
|
isFull: false, // 容器是否已满
|
|
|
|
}, |
|
|
|
}; |
|
|
|
|
|
|
|
export const useStatusStore = defineStore("status", () => { |
|
|
|
const status = ref<StatusDatagram["data"] | undefined>(); |
|
|
|
const status = ref<StatusDatagram["data"]>(defaultStatus); |
|
|
|
const setStatus = (data: StatusDatagram["data"]) => { |
|
|
|
if (!R.equals(status.value, data)) { |
|
|
|
if (!R.isEmpty(data) && !R.equals(status.value, data)) { |
|
|
|
console.log("status: ", data); |
|
|
|
status.value = data; |
|
|
|
} |
|
|
@ -19,8 +167,8 @@ export const useStatusStore = defineStore("status", () => { |
|
|
|
// 进行中状态
|
|
|
|
export type OnGoingStatus = "idle" | "doorOpening" | "doorClosing" | "shaking" | "injecting" | "movingToAct" | "movingToHeat"; |
|
|
|
|
|
|
|
const onGoingStatusSub = new BehaviorSubject<OnGoingStatus>('idle'); |
|
|
|
const onGoingStatusSub = new BehaviorSubject<OnGoingStatus>("idle"); |
|
|
|
export const onGoingStatusOb = onGoingStatusSub.asObservable(); |
|
|
|
export function setOnGoingStatus(status: OnGoingStatus) { |
|
|
|
onGoingStatusSub.next(status) |
|
|
|
onGoingStatusSub.next(status); |
|
|
|
} |