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.
 
 
 
 
 

167 lines
5.3 KiB

import { control, debugControl } from 'apis/system'
import { FtMessage } from 'libs/message'
import { socket } from 'libs/socket'
import { useSystemStore } from 'stores/useSystemStore'
export const sendControl = async (params: any, type?: string) => {
if (!params.cmdId) {
params.cmdId = Date.now()
}
const systemStore = useSystemStore()
const systemStatus = systemStore.systemStatus
const sprayingDisableCmd = [
'slide_tray_in',
'slide_tray_out',
'matrix_prefill',
'nozzle_pipeline_wash',
'syringe_pipeline_wash',
'matrix_spray_start',
'syringe_pipeline_wash_stop',
'matrix_prefill_stop',
]
if (systemStatus.spraying && (type === 'debug' || sprayingDisableCmd.includes(params.cmdCode))) {
FtMessage.error('设备正在喷涂中,请等待喷涂完成')
return
}
if (systemStatus.spraying && (type === 'debug' || sprayingDisableCmd.includes(params.cmdCode))) {
FtMessage.error('设备正在喷涂中,请等待喷涂完成')
return
}
systemStore.systemList = []
const cmdName = cmdNameMap[params.cmdCode as keyof typeof cmdNameMap] || params.cmdCode
socket.init((data: any) => {
systemStore.pushSystemList(data)
}, 'cmd_debug')
socket.init((data: any) => {
systemStore.pushSystemList(data)
}, 'cmd_response')
await (type ? control(params) : debugControl(params))
systemStore.updateStreamVisible(true)
FtMessage.success(`[${cmdName}]已发送`)
// if (!res.ok) {
// FtMessage.error(`[${cmdName}]发送失败`)
// return
// }
// FtMessage.success(`[${cmdName}]已发送`)
// const reader = res.body!.getReader()
// const decoder = new TextDecoder()
// systemStore.updateStreamVisible(true)
// let buffer = ''
// FtMessage.success(`[${cmdName}]已开始执行`)
// while (true) {
// const { done, value } = await reader.read()
// if (done) {
// console.log('done')
// FtMessage.success(`[${cmdName}]执行完毕`)
// break
// }
// const chunk = decoder.decode(value, { stream: true })
// // console.log(chunk)
// buffer += chunk
// const { objects, remaining } = extractJSONObjects(buffer)
// buffer = remaining
// objects.forEach((jsonStr) => {
// try {
// const json = JSON.parse(jsonStr)
// systemStore.pushSystemList(json)
// }
// catch (e) {
// console.log(e)
// }
// })
// }
}
export const cmdNameMap = {
slide_tray_in: '推入托盘',
slide_tray_out: '推出托盘',
device_status_get: '获取系统状态',
dehumidifier_start: '除湿',
dehumidifier_stop: '停止除湿',
matrix_prefill: '基质预充',
matrix_prefill_stop: '停止预充',
nozzle_pipeline_wash: '清洗喷嘴管路',
syringe_pipeline_wash: '清洗注射器管路',
syringe_pipeline_wash_stop: '结束清洗',
matrix_spray_start: '开始喷涂',
matrix_spray_stop: '结束喷涂',
matrix_spray_pause: '暂停喷涂',
matrix_spray_continue: '继续喷涂',
motor_x_to_home: 'X轴回原点',
motor_y_to_home: 'Y轴回原点',
motor_z_to_home: 'z轴回原点',
motor_x_stop: 'x轴停止',
motor_y_stop: 'y轴停止',
motor_z_stop: 'z轴停止',
motor_x_to_position: 'X轴移动',
motor_y_to_position: 'Y轴移动',
motor_z_to_position: 'Z轴移动',
syringe_pump_start: '注射泵移动',
syringe_pump_stop: '注射泵停止移动',
high_voltage_open: '打开高压',
high_voltage_close: '关闭高压',
nozzle_valve_open: '喷嘴阀开启',
nozzle_valve_close: '喷嘴阀关闭',
dehumidifier_valve_open: '除湿阀开启',
dehumidifier_valve_close: '除湿阀关闭',
wash_valve_open: '清洗阀开启',
wash_valve_close: '清洗阀关闭',
three_way_valve_close_all: '三通阀管路关闭',
three_way_valve_open_syringe_pipeline: '打开喷嘴管路',
three_way_valve_open_spray_pipeline: '打开注射器管路',
lighting_panel_open: '打开照明灯',
lighting_panel_close: '关闭照明灯',
motor_xyz_origin: '三轴回原点',
}
// const extractJSONObjects = (data: string) => {
// const objects = []
// let startIndex = -1
// let bracketCount = 0
// let inString = false
// let escape = false
//
// for (let i = 0; i < data.length; i++) {
// const char = data[i]
//
// if (inString) {
// if (escape) {
// escape = false
// }
// else if (char === '\\') {
// escape = true
// }
// else if (char === '"') {
// inString = false
// }
// }
// else {
// if (char === '"') {
// inString = true
// }
// else if (char === '{') {
// // 当 bracketCount 为0时,标记一个新的 JSON 对象开始
// if (bracketCount === 0) {
// startIndex = i
// }
// bracketCount++
// }
// else if (char === '}') {
// bracketCount--
// // 当 bracketCount 归零时,说明一个 JSON 对象完整
// if (bracketCount === 0 && startIndex !== -1) {
// const jsonStr = data.slice(startIndex, i + 1)
// objects.push(jsonStr)
// startIndex = -1 // 重置起始位置
// }
// }
// }
// }
// // 如果最后 bracketCount 不为0,说明还有未完成的部分
// const remaining = (bracketCount > 0 && startIndex !== -1) ? data.slice(startIndex) : ''
// return { objects, remaining }
// }