Skip to content

Commit 886b15c

Browse files
committed
添加websocket通讯模块,完善指令系统及示波器界面
1 parent de2753b commit 886b15c

File tree

4 files changed

+302
-25
lines changed

4 files changed

+302
-25
lines changed

src/App.vue

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
<el-col :span="12">
1313
<el-row justify="end" style="height:32px;">
1414
<el-form-item label="连接设备" style="margin-right: 20px;">
15-
<el-switch v-model="isConnected" @change="connectDevice()" inline-prompt active-text="" inactive-text="" />
15+
<el-switch v-model="isConnected" @change="connectDevice()" inline-prompt active-text=""
16+
inactive-text="" />
1617
</el-form-item>
1718
<el-form-item label="深色模式" style="margin-right: 20px;">
1819
<el-switch v-model="switchVal" @change="toggleDark(), UseDarkMode()" inline-prompt active-text=""
@@ -63,8 +64,25 @@ function UseDarkMode() {
6364
OSChart.darkMode(isDark.value);
6465
};
6566
function connectDevice() {
66-
console.log("连接设备");
67+
if (isConnected.value == true) {
68+
console.log("连接设备");
69+
socket.init(receiveMessage);
70+
}
71+
else {
72+
console.log("断开连接");
73+
socket.close();
74+
}
75+
}
76+
function receiveMessage(message: any) {
77+
if (message.data[0] == '{') {
78+
var data = JSON.parse(message.data);
79+
OSChart.refreshData(data);
80+
} else {
81+
console.log(message.data);
82+
}
83+
6784
}
85+
6886
onMounted(() => {
6987
UseDarkMode();
7088
switchVal = ref(isDark.value);
@@ -75,6 +93,8 @@ onMounted(() => {
7593
import WaveGen from './components/WaveGen.vue'
7694
import WaveGenChart from './components/WaveGenChart.vue'
7795
import OSChart from './components/OSChart.vue'
96+
import socket from './script/websocket'
97+
7898
7999
export default {
80100
name: 'App',

src/components/OSChart.vue

Lines changed: 63 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
<div :style="`width:${width}px;height:${height}px;`" :id="container" class="OSChart"></div>
33
<div class="OSCForm">
44
<el-form-item size="large">
5-
<el-button type="primary" @click="OSCRun" style="width: 45%; margin-right: 5%;">运行</el-button>
6-
<el-button @click="OSCStop" style="width: 45%; margin-left: 5%;">停止</el-button>
7-
</el-form-item>
5+
<el-button type="primary" @click="OSCRun" style="width: 45%; margin-right: 5%;">运行</el-button>
6+
<el-button @click="OSCStop" style="width: 45%; margin-left: 5%;">停止</el-button>
7+
</el-form-item>
88
<el-form-item size="large" label="采样频率/Hz">
9-
<el-input-number v-model="sampleRate" @change="sampleRateChange(sampleRate)" :min="1000" :max="128000" :step="1000" step-strictly label="采样频率/Hz">
9+
<el-input-number v-model="sampleRate" @change="sampleRateChange(sampleRate)" :min="1000" :max="128000"
10+
:step="1000" step-strictly label="采样频率/Hz">
1011
</el-input-number>
1112
</el-form-item>
1213
</div>
@@ -29,12 +30,14 @@ import { UniversalTransition } from 'echarts/features';
2930
import { CanvasRenderer } from 'echarts/renderers';
3031
import { onMounted } from 'vue';
3132
import { EChartsType } from 'echarts/core';
33+
import socket from '../script/websocket'
3234
3335
import { ref } from "vue";
3436
import {
3537
ElFormItem,
3638
ElInputNumber,
3739
ElButton,
40+
ElMessage
3841
} from 'element-plus'
3942
4043
echarts.use([
@@ -93,15 +96,19 @@ var myChart: EChartsType;
9396
var chartDom: HTMLElement;
9497
9598
let isRun = true;
99+
var OSCData = new Array();
96100
const sampleRate = ref(8000);
97101
const sampleRateChange = (value: number) => {
98-
console.log(value);
102+
console.log("R" + value + "\n");
103+
sendData("R" + value);
99104
}
100-
function OSCRun(){
105+
function OSCRun() {
101106
isRun = true;
107+
sendData("CT");
102108
};
103-
function OSCStop(){
109+
function OSCStop() {
104110
isRun = false;
111+
sendData("CF");
105112
};
106113
function func(x: number) {
107114
x /= 10;
@@ -110,8 +117,15 @@ function func(x: number) {
110117
111118
function generateData() {
112119
let data = [];
113-
for (let i = 0; i <= 300; i += 1) {
114-
data.push([i, func(i)]);
120+
if (OSCData.length < 10) {
121+
for (var i = 0; i < 256; i++) {
122+
OSCData[i] = 0;
123+
data.push([i, OSCData[i]]);
124+
}
125+
} else {
126+
for (var i = 0; i < 256; i++) {
127+
data.push([i, OSCData[i]]);
128+
}
115129
}
116130
return data;
117131
}
@@ -149,7 +163,7 @@ option = {
149163
}
150164
},
151165
xAxis: {
152-
name: 'x',
166+
name: 'Div',
153167
min: 0,
154168
max: 256,
155169
minorTick: {
@@ -160,9 +174,9 @@ option = {
160174
}
161175
},
162176
yAxis: {
163-
name: 'y',
164-
min: -5,
165-
max: 5,
177+
name: '电压/V',
178+
min: -0.2,
179+
max: 3.5,
166180
minorTick: {
167181
show: true
168182
},
@@ -174,18 +188,18 @@ option = {
174188
{
175189
show: true,
176190
type: 'inside',
177-
filterMode: 'filter',
191+
filterMode: 'none',
178192
xAxisIndex: [0],
179-
startValue: -20,
180-
endValue: 20
193+
startValue: 0,
194+
endValue: 40
181195
},
182196
{
183197
show: true,
184198
type: 'inside',
185-
filterMode: 'empty',
199+
filterMode: 'none',
186200
yAxisIndex: [0],
187-
startValue: -20,
188-
endValue: 20
201+
startValue: -1,
202+
endValue: 5
189203
}
190204
],
191205
series: [
@@ -205,9 +219,38 @@ function darkMode(isDark: boolean) {
205219
myChart = echarts.init(chartDom);
206220
myChart.setOption(option);
207221
}
222+
223+
const sendData = (data: string) => {
224+
if (socket.socket_open) {
225+
socket.send(data);
226+
} else {
227+
ElMessage({
228+
type: 'error',
229+
message: '请先建立连接',
230+
duration: 0,
231+
center: true,
232+
grouping: true,
233+
showClose: true
234+
})
235+
}
236+
}
237+
function refreshData(message: any) {
238+
if (isRun) {
239+
OSCData = [];
240+
OSCData = message.a;
241+
myChart.setOption({
242+
series: [
243+
{
244+
data: generateData()
245+
}
246+
]
247+
});
248+
}
249+
}
208250
export default {
209251
name: "OSChart",
210252
darkMode,
253+
refreshData,
211254
props2: {
212255
msg: String,
213256
option: Object
@@ -220,6 +263,7 @@ export default {
220263
.OSChart {
221264
margin: 0 auto;
222265
}
266+
223267
.OSCForm {
224268
width: 50%;
225269
margin: 0 auto;

src/components/WaveGen.vue

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<!-- 表单1 -->
66
<el-form ref="form" :model="form" label-width="auto" :size="formSize" :label-position="labelPosition">
77
<el-form-item label="波形选择">
8-
<el-select v-model="waveType" placeholder="请选择波形">
8+
<el-select v-model="waveType" @change="waveTypeChange(waveType)" placeholder="请选择波形">
99
<el-option label="正弦波" value="1"></el-option>
1010
<el-option label="方波" value="2"></el-option>
1111
<el-option label="锯齿波" value="3"></el-option>
@@ -43,15 +43,15 @@ import {
4343
ElButton,
4444
ElOption,
4545
ElInputNumber,
46-
ElRow,
47-
ElCol,
46+
ElMessage,
4847
ElSelect,
4948
ElSlider,
5049
ElSwitch,
5150
} from 'element-plus'
5251
5352
import { reactive } from 'vue'
5453
import WaveGenChart from './WaveGenChart.vue'
54+
import socket from '../script/websocket'
5555
5656
defineProps<{ msg: string }>();
5757
@@ -75,23 +75,47 @@ const form = reactive({
7575
7676
})
7777
78+
const sendData = (data: string) => {
79+
if (socket.socket_open) {
80+
socket.send(data);
81+
} else {
82+
ElMessage({
83+
type: 'error',
84+
message: '请先建立连接',
85+
duration: 0,
86+
center: true,
87+
grouping: true,
88+
showClose: true
89+
})
90+
}
91+
}
92+
7893
const onSubmit = () => {
7994
WaveGenChart.refreshData();
8095
console.log('submit!')
8196
}
97+
const waveTypeChange = (value: string) => {
98+
console.log("W" + value);
99+
form.waveType = value;
100+
sendData("W" + value);
101+
}
82102
const freqChange = (value: number) => {
83-
console.log(value);
103+
console.log("F" + value);
84104
form.freq = value;
105+
sendData("F" + value);
85106
}
86107
const dutyChange = (value: number) => {
87108
console.log(value);
88109
form.duty = value;
110+
sendData("D"+value);
89111
}
90112
const uMaxValueChange = (value: number) => {
91113
console.log(value);
114+
sendData("U"+value);
92115
}
93116
const biasChange = (value: number) => {
94117
console.log(value);
118+
sendData("B"+value);
95119
}
96120
export default {
97121
name: "WaveGen",

0 commit comments

Comments
 (0)