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 && ['matrix_spray_stop'].includes(params.cmdCode)) { FtMessage.error('设备没有正在喷涂的任务') return } if (systemStatus.paused && (type === 'debug' || sprayingDisableCmd.includes(params.cmdCode))) { FtMessage.error('喷涂暂停中,请等待喷涂完成') return } if (!systemStatus.paused && ['matrix_spray_continue'].includes(params.cmdCode)) { FtMessage.error('当前没有暂停的喷涂任务, 无法继续') return } if (!systemStatus.suspendable && ['matrix_spray_pause'].includes(params.cmdCode)) { FtMessage.error('当前不可以暂停') return } if (systemStatus.cleaningSyringePipeline && (type === 'debug' || ['nozzle_pipeline_wash', 'matrix_spray_start', 'matrix_prefill'].includes(params.cmdCode))) { FtMessage.error('正在清洗注射器管路, 无法执行') return } if (systemStatus.cleaningNozzlePipeline && (type === 'debug' || ['syringe_pipeline_wash', 'matrix_spray_start', 'matrix_prefill'].includes(params.cmdCode))) { FtMessage.error('正在清洗喷嘴管路, 无法执行') return } if (systemStatus.prefilling && (type === 'debug' || ['nozzle_pipeline_wash', 'syringe_pipeline_wash', 'matrix_spray_start'].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 === 'debug' ? debugControl(params) : control(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 } // }