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.
588 lines
16 KiB
588 lines
16 KiB
<template>
|
|
<main>
|
|
<div class="ml-[20px]">
|
|
<el-tabs v-model="activeName" class="demo-tabs">
|
|
<el-tab-pane label="设备调试" name="debug"></el-tab-pane>
|
|
<el-tab-pane label="应用调试" name="app"></el-tab-pane>
|
|
</el-tabs>
|
|
</div>
|
|
<div v-if="activeName == 'debug'">
|
|
<div class="debug_axis">
|
|
<div class="axis">
|
|
<div class="w-[3rem]">X轴:</div>
|
|
<input
|
|
v-model="machineryForm.X"
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[80px]" />
|
|
<div class="w-[3rem]">毫米</div>
|
|
<div class="flex">
|
|
<el-button type="primary" @click="onMoveMachinery('X')">移动</el-button>
|
|
<el-button type="primary" @click="onStopRotate('X')">停止</el-button>
|
|
</div>
|
|
</div>
|
|
<div class="axis">
|
|
<div class="w-[4rem]">Y轴:</div>
|
|
<input
|
|
v-model="machineryForm.Y"
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[80px]" />
|
|
<div class="w-[2.5rem]">毫米</div>
|
|
<div class="flex">
|
|
<el-button type="primary" @click="onMoveMachinery('Y')">移动</el-button>
|
|
<el-button type="primary" @click="onStopRotate('Y')">停止</el-button>
|
|
</div>
|
|
</div>
|
|
<div class="axis">
|
|
<div class="w-[3rem]">Z轴:</div>
|
|
<input
|
|
v-model="machineryForm.Z"
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[80px]" />
|
|
<div class="w-[2.5rem]">毫米</div>
|
|
<div class="flex">
|
|
<el-button type="primary" @click="onMoveMachinery('Z')">移动</el-button>
|
|
<el-button type="primary" @click="onStopRotate('Z')">停止</el-button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="debug_main">
|
|
<div class="debug_left">
|
|
<div class="">
|
|
<el-row>
|
|
<el-col :span="6" class="text-right">指定电机转速</el-col>
|
|
<el-col :span="20" class="ml-[5rem]">
|
|
<el-radio-group v-model="rotateForm.axis">
|
|
<el-radio value="X">X</el-radio>
|
|
<el-radio value="Y">Y</el-radio>
|
|
<el-radio value="Z">Z</el-radio>
|
|
</el-radio-group>
|
|
<div class="flex">
|
|
<div>
|
|
速度:<input
|
|
type="number"
|
|
v-model="rotateForm.speed"
|
|
placeholder=""
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />毫米/秒
|
|
</div>
|
|
<div class="ml-[20px]">
|
|
<el-button type="primary" @click="onRotate">确定</el-button>
|
|
</div>
|
|
</div>
|
|
</el-col>
|
|
</el-row>
|
|
<el-divider />
|
|
<el-row>
|
|
<el-col :span="6" class="text-right"> 电压控制器: </el-col>
|
|
<el-col :span="6" class="ml-[20px]">
|
|
<input
|
|
v-model="voltageValue"
|
|
placeholder="0~5000v"
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-button type="primary" @click="onTurnOnHighVoltage">开启</el-button>
|
|
<el-button @click="onTurnOffHighVoltage">关闭</el-button>
|
|
</el-col>
|
|
</el-row>
|
|
<el-divider />
|
|
<el-row class="mt-[10px]">
|
|
<el-col :span="4" class="text-right"> 注射泵: </el-col>
|
|
<el-col :span="20">
|
|
<div class="ml-[20px]">
|
|
<input
|
|
v-model="syringeForm.rotationSpeed"
|
|
placeholder="转速"
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />微升/每分钟
|
|
</div>
|
|
<div class="mt-[10px] ml-[20px]">
|
|
<input
|
|
v-model="syringeForm.time"
|
|
placeholder="时间"
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />秒
|
|
</div>
|
|
<div class="ml-[20px] mt-[10px]">
|
|
方向:
|
|
<el-radio v-model="syringeForm.direction" value="0">后退</el-radio>
|
|
<el-radio v-model="syringeForm.direction" value="1">前进</el-radio>
|
|
<br />
|
|
<el-button type="primary" @click="onTurnOnSyringePump">开始</el-button>
|
|
<el-button type="primary" class="ml-[20px]" @click="onTurnOffSyringePump">停止</el-button>
|
|
</div>
|
|
</el-col>
|
|
</el-row>
|
|
<el-divider />
|
|
<el-row class="mt-[10px]">
|
|
<el-col :span="6" class="text-right"> 湿度: </el-col>
|
|
<el-col :span="12" class="ml-[20px]">
|
|
<input
|
|
placeholder="湿度"
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />
|
|
<div class="flex mt-[10px]">
|
|
<el-button type="primary">开始除湿</el-button>
|
|
<el-button type="primary">结束除湿</el-button>
|
|
</div>
|
|
</el-col>
|
|
</el-row>
|
|
<el-divider />
|
|
</div>
|
|
</div>
|
|
<div class="debug_right">
|
|
<div>
|
|
<el-button type="primary">急停</el-button>
|
|
<div class="mt-[20px]">
|
|
<input
|
|
v-model="brightness"
|
|
placeholder="亮度"
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />
|
|
<el-button class="ml-[20px]" type="primary" @click="onTurnOnLightPanel">开启照明灯</el-button>
|
|
<el-button @click="onTurnOffLightPanel">关闭照明灯</el-button>
|
|
</div>
|
|
</div>
|
|
<el-divider />
|
|
<div>
|
|
<div>切换三通</div>
|
|
<el-button type="primary" @click="onSwitchThreeWayValve('clean')">管路切换到基质</el-button>
|
|
<el-button type="primary" @click="onSwitchThreeWayValve('spray')">管路切换到清洗</el-button>
|
|
</div>
|
|
<el-divider />
|
|
<div>
|
|
<div>气压阀</div>
|
|
<div>
|
|
<el-button type="primary" @click="onControlValve('Cleaning', true)">打开清洗阀</el-button>
|
|
<el-button @click="onControlValve('Cleaning', false)">关闭清洗阀</el-button>
|
|
</div>
|
|
<div class="mt-[10px]">
|
|
<el-button type="primary" @click="onControlValve('Nozzle', true)">打开喷嘴阀</el-button>
|
|
<el-button @click="onControlValve('Nozzle', false)">关闭喷嘴阀</el-button>
|
|
</div>
|
|
<div class="mt-[10px]">
|
|
<el-button type="primary" @click="onControlValve('Dehumidification', true)">打开除湿阀</el-button>
|
|
<el-button @click="onControlValve('Dehumidification', false)">关闭除湿阀</el-button>
|
|
</div>
|
|
</div>
|
|
<el-divider />
|
|
<div class="mt-[10px]">
|
|
<el-button type="primary" @click="onStartWash('injector')">开始清洗注射器</el-button>
|
|
<el-button type="primary" @click="onStartWash('nozzle')">开始清洗喷涂部分</el-button>
|
|
<el-button @click="onStopWash">停止清洗</el-button>
|
|
</div>
|
|
<!-- <el-divider />
|
|
<div class="h-[13rem] bg-[#f4f4f4] p-[10px]">
|
|
<div>状态反馈区</div>
|
|
|
|
</div> -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div v-if="activeName == 'app'">
|
|
<div class="bg-[#FBFBFB] h-[75vh] p-[10px]">
|
|
<el-row class="mt-[10px]">
|
|
<el-col :span="3" class="text-right"> 开始喷涂: </el-col>
|
|
|
|
<el-col :span="12" class="ml-[20px]">
|
|
<div>喷涂路线</div>
|
|
<div>
|
|
<el-radio-group v-model="workForm.routeType">
|
|
<el-radio :value="1">横向</el-radio>
|
|
<el-radio :value="2">纵向</el-radio>
|
|
</el-radio-group>
|
|
</div>
|
|
<div class="mt-[20px]">
|
|
选择玻片:
|
|
<el-radio-group v-model="axis.index">
|
|
<el-radio :value="0">玻片1</el-radio>
|
|
<el-radio :value="1">玻片2</el-radio>
|
|
<el-radio :value="2">玻片3</el-radio>
|
|
<el-radio :value="3">玻片4</el-radio>
|
|
</el-radio-group>
|
|
</div>
|
|
<div class="mt-[20px]">
|
|
行间距:
|
|
<input
|
|
v-model="workForm.space"
|
|
placeholder=""
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />
|
|
毫米
|
|
</div>
|
|
|
|
<div class="mt-[20px]">
|
|
氮气流速:
|
|
<input
|
|
v-model="workForm.nitrogenFlowVelocity"
|
|
placeholder=""
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />
|
|
毫米/秒
|
|
</div>
|
|
|
|
<div class="mt-[20px]">
|
|
氮气气压:
|
|
<input
|
|
v-model="workForm.matrixFlowVelocity"
|
|
placeholder=""
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />
|
|
Mp
|
|
</div>
|
|
|
|
<div class="mt-[20px]">
|
|
电压:
|
|
<input
|
|
v-model="workForm.voltage"
|
|
placeholder=""
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />
|
|
V
|
|
</div>
|
|
|
|
<div class="mt-[20px]">
|
|
喷针距离玻片高度:
|
|
<input
|
|
v-model="workForm.height"
|
|
placeholder=""
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />
|
|
毫米
|
|
</div>
|
|
|
|
<div class="mt-[20px]">
|
|
移速:
|
|
<input
|
|
v-model="workForm.movementSpeed"
|
|
placeholder=""
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />
|
|
毫米/秒
|
|
</div>
|
|
|
|
<div>起始坐标:</div>
|
|
<div>
|
|
X:<input
|
|
v-model="axis.x1"
|
|
placeholder=""
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />
|
|
Y:<input
|
|
v-model="axis.y1"
|
|
placeholder=""
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />
|
|
</div>
|
|
<div class="mt-[10px]">结束坐标:</div>
|
|
<div class="flex">
|
|
X:<input
|
|
v-model="axis.x2"
|
|
placeholder=""
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />
|
|
Y:<input
|
|
v-model="axis.y2"
|
|
placeholder=""
|
|
type="number"
|
|
class="border-none outline-none h-[34px] bg-[#E8ECF7] text-primary font-medium rounded-md text-lg text-center w-[100px]" />
|
|
</div>
|
|
<div class="mt-[20px] text-center">
|
|
<el-button type="primary" class="ml-[10px] w-[100px]" @click="onStartWork">开始喷涂</el-button>
|
|
<el-button type="primary" class="ml-[10px] w-[100px]" @click="onStopWork">结束喷涂</el-button>
|
|
</div>
|
|
</el-col>
|
|
</el-row>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
</template>
|
|
<script lang="ts" setup>
|
|
import { ref, onMounted, onUnmounted, watch } from "vue";
|
|
import { createWebSocket, sharedWsUrl } from "@/services/socket";
|
|
import { ElMessage } from "element-plus";
|
|
import type {
|
|
ControlNitrogen,
|
|
MachineryType,
|
|
SyringeType,
|
|
SyringeParams,
|
|
VoltageType,
|
|
ControlValueType,
|
|
Axis,
|
|
} from "@/services/globalCmd/cmdTypes";
|
|
import {
|
|
moveMotorToPosition,
|
|
switchThreeWayValve,
|
|
controlValve,
|
|
turnOnHighVoltage,
|
|
turnOffHighVoltage,
|
|
turnOnSyringePump,
|
|
turnOffSyringePump,
|
|
startWork,
|
|
stopWork,
|
|
stopMotor,
|
|
turnOffLightPanel,
|
|
turnOnLightPanel,
|
|
stopWash,
|
|
stopDehumidify,
|
|
setMotorSpeed,
|
|
type WashType,
|
|
startWash
|
|
} from "@/services/globalCmd/globalCmd";
|
|
import type { BaseResponse } from "@/services/httpRequest";
|
|
import type { WorkType } from '../../services/globalCmd/cmdTypes';
|
|
const activeName = ref("debug");
|
|
const voltageValue = ref();
|
|
const syringeForm = ref<SyringeParams>({
|
|
rotationSpeed: 1,
|
|
time: 0,
|
|
direction: "1",
|
|
});
|
|
const workForm = ref<WorkType>({
|
|
routeType: 1,
|
|
space: 2,
|
|
nitrogenFlowVelocity: 1,
|
|
nitrogenAirPressure: 1,
|
|
matrixFlowVelocity: 1,
|
|
voltage: 1,
|
|
needPower: false,
|
|
height: 6,
|
|
movementSpeed: 10,
|
|
position: [],
|
|
});
|
|
const axis = ref<Axis>({
|
|
index: 0,
|
|
x1: 10,
|
|
y1: 10,
|
|
x2: 20,
|
|
y2: 20,
|
|
});
|
|
|
|
const rotateForm = ref<{ axis: "X" | "Y" | "Z"; speed: number }>({ axis: "X", speed: 20 });
|
|
|
|
watch(voltageValue,(newVal)=>{
|
|
if(newVal > 5000){
|
|
voltageValue.value = 5000
|
|
}
|
|
if(newVal < 0){
|
|
voltageValue.value = 0
|
|
}
|
|
})
|
|
|
|
|
|
onMounted(() => {
|
|
//连接websocket
|
|
const wsClient = createWebSocket(sharedWsUrl);
|
|
const subscription = wsClient.dataOb.subscribe(data => {
|
|
});
|
|
wsClient.connect();
|
|
|
|
onUnmounted(() => {
|
|
subscription && subscription.unsubscribe();
|
|
});
|
|
});
|
|
|
|
|
|
|
|
const machineryForm = ref<Record<string, string>>({});
|
|
const onMoveMachinery = (axis: string) => {
|
|
if (!axis) return;
|
|
const params = <MachineryType>{
|
|
axis,
|
|
position: parseFloat(machineryForm.value[axis]),
|
|
};
|
|
moveMotorToPosition(params).then((res) => {
|
|
console.log("-----moveMotorToPosition----res---", res);
|
|
success(res);
|
|
});
|
|
};
|
|
|
|
const onSwitchThreeWayValve = (type: string) => {
|
|
const params = {
|
|
type,
|
|
};
|
|
switchThreeWayValve(params).then((res) => {
|
|
console.log("---onSwitchThreeWayValve---res---", res);
|
|
success(res);
|
|
});
|
|
};
|
|
|
|
const onControlValve = (type: ControlNitrogen, open: boolean) => {
|
|
const params = <ControlValueType>{
|
|
params: {
|
|
valveType: type,
|
|
isOpen: open,
|
|
},
|
|
};
|
|
controlValve(params).then((res) => {
|
|
console.log("---onControlValve---res---", res);
|
|
success(res);
|
|
});
|
|
};
|
|
|
|
const onStopDehumidify = () => {
|
|
stopDehumidify().then((res) => {
|
|
success(res);
|
|
});
|
|
};
|
|
|
|
function onStartWash(type: WashType) {
|
|
startWash({ type }).then(res => {
|
|
if (res.success) {
|
|
ElMessage.success("已经开始清洗");
|
|
} else {
|
|
ElMessage.error(res.msg);
|
|
}
|
|
});
|
|
}
|
|
|
|
const onStopWash = () => {
|
|
stopWash({}).then((res) => {
|
|
success(res);
|
|
});
|
|
};
|
|
|
|
//电压控制 开启
|
|
const onTurnOnHighVoltage = () => {
|
|
const params = <VoltageType>{
|
|
params: { voltage: +voltageValue.value },
|
|
};
|
|
turnOnHighVoltage(params).then((res) => {
|
|
console.log("---onTurnOnHighVoltage- 电压控制 on --res---", res);
|
|
success(res);
|
|
});
|
|
};
|
|
|
|
//电压控制 关闭
|
|
const onTurnOffHighVoltage = () => {
|
|
turnOffHighVoltage().then((res) => {
|
|
console.log("---onTurnOffHighVoltage- 电压控制 off--res---", res);
|
|
success(res);
|
|
});
|
|
};
|
|
|
|
//注射泵开启
|
|
const onTurnOnSyringePump = () => {
|
|
// SyringeType
|
|
const params = <SyringeType>{
|
|
params: {
|
|
rotationSpeed: syringeForm.value.rotationSpeed,
|
|
// direction: syringeForm.value.direction,
|
|
// time: syringeForm.value.time,
|
|
},
|
|
};
|
|
turnOnSyringePump(params).then((res) => {
|
|
console.log("---onTurnOffHighVoltage- 电泵开启--res---", res);
|
|
success(res);
|
|
});
|
|
};
|
|
|
|
const onTurnOffSyringePump = () => {
|
|
turnOffSyringePump().then((res) => {
|
|
success(res);
|
|
});
|
|
};
|
|
|
|
const onStartWork = () => {
|
|
const params = <WorkType>{
|
|
...workForm.value,
|
|
position: [axis.value],
|
|
};
|
|
|
|
startWork(params).then((res) => {
|
|
success(res);
|
|
});
|
|
};
|
|
|
|
function onStopWork() {
|
|
stopWork().then((res) => {
|
|
success(res);
|
|
});
|
|
}
|
|
|
|
const onRotate = () => {
|
|
const params = {
|
|
...rotateForm.value,
|
|
};
|
|
|
|
setMotorSpeed(params).then((res) => {
|
|
success(res);
|
|
});
|
|
};
|
|
|
|
const onStopRotate = (axis: string) => {
|
|
stopMotor({axis}).then((res) => {
|
|
success(res);
|
|
});
|
|
};
|
|
|
|
let brightness = ref()
|
|
const onTurnOnLightPanel = () => {
|
|
turnOnLightPanel({brightness: brightness.value}).then(res => {
|
|
success(res);
|
|
});
|
|
};
|
|
|
|
function onTurnOffLightPanel() {
|
|
const params = {
|
|
brightness: brightness.value,
|
|
};
|
|
turnOffLightPanel(params).then((res) => {
|
|
success(res);
|
|
});
|
|
}
|
|
|
|
|
|
function success(data:BaseResponse) {
|
|
if (data && data.msg == "ok") {
|
|
ElMessage.success("发送成功");
|
|
} else {
|
|
ElMessage.error(data.msg);
|
|
}
|
|
}
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
div {
|
|
color: #0349a8;
|
|
}
|
|
.el-button--primary {
|
|
background: linear-gradient(90deg, #0657c0 24%, #096ae0 101%);
|
|
}
|
|
.debug_axis {
|
|
height: 3rem;
|
|
background: #fbfbfb;
|
|
margin-left: 3.5rem;
|
|
margin-right: 3.5rem;
|
|
border-radius: 6px;
|
|
display: flex;
|
|
align-items: center;
|
|
|
|
.axis {
|
|
display: flex;
|
|
align-items: center;
|
|
color: #0349a8;
|
|
}
|
|
}
|
|
|
|
.debug_main {
|
|
display: flex;
|
|
align-items: center;
|
|
margin-left: 4rem;
|
|
margin-top: 2rem;
|
|
.debug_left {
|
|
width: 42vw;
|
|
height: 18.75rem;
|
|
background: #fbfbfb;
|
|
height: 70vh;
|
|
padding: 2rem;
|
|
}
|
|
.debug_right {
|
|
width: 42vw;
|
|
height: 70vh;
|
|
background: #fbfbfb;
|
|
margin-left: 2rem;
|
|
padding: 2rem;
|
|
}
|
|
}
|
|
</style>
|