diff --git a/src/views/govern/device/control/analysisList/index.vue b/src/views/govern/device/control/analysisList/index.vue index 62e8b1c..1100429 100644 --- a/src/views/govern/device/control/analysisList/index.vue +++ b/src/views/govern/device/control/analysisList/index.vue @@ -1,6 +1,6 @@ - + - - - - - - - - - + + + + + + + + {{ mqttMessage.dataTime }} + + + + + + + + + +
实时录波 - 谐波频谱 - 实时趋势
-->
返回 @@ -300,7 +310,7 @@ - +
@@ -382,13 +392,13 @@ const handleRecordWaves = () => { sonTab.value = 0 window.clearInterval(timer.value) } -//实时趋势 +//谐波频谱 const realTrendRef = ref() const changeTrendType = (val: any) => { activeTrendName.value = val * 1 handleTrend() } -//实时趋势 +//谐波频谱 const activeTrendName: any = ref(0) const handleTrend = async () => { realTimeFlag.value = false @@ -417,9 +427,9 @@ const handleTrend = async () => { realTrendRef.value && realTrendRef.value.open({ devId: deviceId.value, lineId: lineId.value, activeTrendName: activeTrendName.value }) } -//谐波频谱 +//实时趋势 const harmonicSpectrumRef = ref() -//谐波频谱 +//实时趋势 const handleHarmonicSpectrum = () => { realTimeFlag.value = false // harmonicSpectrumRef.value && @@ -428,6 +438,7 @@ const handleHarmonicSpectrum = () => { clearInterval(realDataTimer.value) realTimeFlag.value = false sonTab.value = 2 + harmonicSpectrumRef.value && harmonicSpectrumRef.value.resetData() getRealDataMqttMsg() } //返回 @@ -557,166 +568,167 @@ const connectMqtt = () => { mqttRef.value = mqtt.connect(url, options) } const getRealDataMqttMsg = async () => { + clearInterval(timer.value) + clearInterval(realDataTimer.value) //新的实时数据 //1.调用接口 mqtt推送数据 await getBasicRealData(lineId.value).then((res: any) => { if (res.code == 'A0000') { ElMessage.success('装置应答成功') + //2.建立mqtt通讯 + //每隔30s调用一下接口,通知后台推送mqtt消息 + realDataTimer.value = setInterval(() => { + getBasicRealData(lineId.value).then((res: any) => { + console.log(res, '获取基础实时数据') + }) + }, 30000) + connectMqtt() + mqttRef.value.on('connect', (e: any) => { + // ElMessage.success('连接mqtt服务器成功!') + console.log('mqtt客户端已连接....') + // mqttRef.value.subscribe('/Web/Progress') + mqttRef.value.subscribe('/Web/RealData/+') + //假数据 + }) + + mqttRef.value.on('message', (topic: any, message: any) => { + mqttMessage.value = {} + // console.log('mqtt接收到消息', message,topic) + console.log('mqtt接收到消息', JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message))))) + let obj = JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message)))) + //处理mqtt数据 1转2除 2转1乘 + //如果消息返回值是二次值,下拉框是二次值只需要单位换算 除以1000 + //如果消息返回值是一次值,下拉框是一次值只需要单位换算 除以1000 + if (obj.dataLevel == formInline.dataLevel) { + obj = { + ...obj, + // 电压有效值 + vRmsA: obj.vRmsA / 1000, + vRmsB: obj.vRmsB / 1000, + vRmsC: obj.vRmsC / 1000, + //基波电压幅值 + v1A: obj.v1A / 1000, + v1B: obj.v1B / 1000, + v1C: obj.v1C / 1000, + //有功功率 + pA: obj.pA / 1000, + pB: obj.pB / 1000, + pC: obj.pC / 1000, + pTot: obj.pTot / 1000, + //无功功率 + qA: obj.qA / 1000, + qB: obj.qB / 1000, + qC: obj.qC / 1000, + qTot: obj.qTot / 1000, + //视在功率 + sA: obj.sA / 1000, + sB: obj.sB / 1000, + sC: obj.sC / 1000, + sTot: obj.sTot / 1000 + } + } + //如果消息返回值是二次值,下拉框是一次值需要单位换算 除以1000 并且乘以pt ct + if (obj.dataLevel == 'Secondary' && formInline.dataLevel == 'Primary') { + obj = { + ...obj, + // 电压有效值 + vRmsA: (obj.vRmsA * obj.pt) / 1000, + vRmsB: (obj.vRmsA * obj.pt) / 1000, + vRmsC: (obj.vRmsA * obj.pt) / 1000, + // 电流有效值 + iRmsA: obj.iRmsA * obj.ct, + iRmsB: obj.iRmsA * obj.ct, + iRmsC: obj.iRmsA * obj.ct, + //基波电压幅值 + v1A: (obj.v1A * obj.pt) / 1000, + v1B: (obj.v1B * obj.pt) / 1000, + v1C: (obj.v1C * obj.pt) / 1000, + //基波电流幅值 + i1A: obj.i1A * obj.ct, + i1B: obj.i1B * obj.ct, + i1C: obj.i1C * obj.ct, + //有功功率 + pA: (obj.pA * obj.pt * obj.ct) / 1000, + pB: (obj.pB * obj.pt * obj.ct) / 1000, + pC: (obj.pC * obj.pt * obj.ct) / 1000, + pTot: (obj.pTot * obj.pt * obj.ct) / 1000, + //无功功率 + qA: (obj.qA * obj.pt * obj.ct) / 1000, + qB: (obj.qB * obj.pt * obj.ct) / 1000, + qC: (obj.qC * obj.pt * obj.ct) / 1000, + qTot: (obj.qTot * obj.pt * obj.ct) / 1000, + //视在功率 + sA: (obj.sA * obj.pt * obj.ct) / 1000, + sB: (obj.sB * obj.pt * obj.ct) / 1000, + sC: (obj.sC * obj.pt * obj.ct) / 1000, + sTot: (obj.sTot * obj.pt * obj.ct) / 1000 + } + } + //如果消息返回值是一次值,下拉框是二次值需要单位换算 乘以1000 并且除以pt ct + if (obj.dataLevel == 'Primary' && formInline.dataLevel == 'Secondary') { + obj = { + ...obj, + // 电压有效值 + vRmsA: (obj.vRmsA / obj.pt) * 1000, + vRmsB: (obj.vRmsA / obj.pt) * 1000, + vRmsC: (obj.vRmsA / obj.pt) * 1000, + // 电流有效值 + iRmsA: obj.iRmsA / obj.ct, + iRmsB: obj.iRmsA / obj.ct, + iRmsC: obj.iRmsA / obj.ct, + //基波电压幅值 + v1A: (obj.v1A / obj.pt) * 1000, + v1B: (obj.v1B / obj.pt) * 1000, + v1C: (obj.v1C / obj.pt) * 1000, + //基波电流幅值 + i1A: obj.i1A / obj.ct, + i1B: obj.i1B / obj.ct, + i1C: obj.i1C / obj.ct, + //有功功率 + pA: (obj.pA / obj.pt / obj.ct) * 1000, + pB: (obj.pB / obj.pt / obj.ct) * 1000, + pC: (obj.pC / obj.pt / obj.ct) * 1000, + pTot: (obj.pTot / obj.pt / obj.ct) * 1000, + //无功功率 + qA: (obj.qA / obj.pt / obj.ct) * 1000, + qB: (obj.qB / obj.pt / obj.ct) * 1000, + qC: (obj.qC / obj.pt / obj.ct) * 1000, + qTot: (obj.qTot / obj.pt / obj.ct) * 1000, + //视在功率 + sA: (obj.sA / obj.pt / obj.ct) * 1000, + sB: (obj.sB / obj.pt / obj.ct) * 1000, + sC: (obj.sC / obj.pt / obj.ct) * 1000, + sTot: (obj.sTot / obj.pt / obj.ct) * 1000 + } + } + //保留两位小数 + for (var i in obj) { + if (typeof obj[i] == 'number' && obj[i] != 0 && Math.abs(obj[i]) % 1 != 0) { + obj[i] = obj[i].toFixed(2) + } + } + mqttMessage.value = obj + //更新实时数据值 + realTimeFlag.value && realTimeRef.value && realTimeRef.value.setRealData(mqttMessage.value) + //更新谐波频谱数据 + !realTimeFlag.value && + sonTab.value == 2 && + harmonicSpectrumRef.value && + harmonicSpectrumRef.value.setHarmonicSpectrumData(mqttMessage.value) + }) + + mqttRef.value.on('error', (error: any) => { + console.log('mqtt连接失败...', error) + mqttRef.value.end() + }) + + mqttRef.value.on('close', function () { + console.log('mqtt客户端已断开连接.....') + }) } else { ElMessage.success('装置应答失败') } }) - //2.建立mqtt通讯 - //每隔30s调用一下接口,通知后台推送mqtt消息 - realDataTimer.value = await setInterval(() => { - getBasicRealData(lineId.value).then((res: any) => { - console.log(res, '获取基础实时数据') - }) - }, 30000) - connectMqtt() - mqttRef.value.on('connect', (e: any) => { - // ElMessage.success('连接mqtt服务器成功!') - console.log('mqtt客户端已连接....') - // mqttRef.value.subscribe('/Web/Progress') - mqttRef.value.subscribe('/Web/RealData/+') - //假数据 - }) - - mqttRef.value.on('message', (topic: any, message: any) => { - mqttMessage.value = {} - // console.log('mqtt接收到消息', message,topic) - console.log('mqtt接收到消息', JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message))))) - let obj = JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message)))) - //处理mqtt数据 1转2除 2转1乘 - //如果消息返回值是二次值,下拉框是二次值只需要单位换算 除以1000 - //如果消息返回值是一次值,下拉框是一次值只需要单位换算 除以1000 - if (obj.dataLevel == formInline.dataLevel) { - obj = { - ...obj, - // 电压有效值 - vRmsA: obj.vRmsA / 1000, - vRmsB: obj.vRmsB / 1000, - vRmsC: obj.vRmsC / 1000, - //基波电压幅值 - v1A: obj.v1A / 1000, - v1B: obj.v1B / 1000, - v1C: obj.v1C / 1000, - //有功功率 - pA: obj.pA / 1000, - pB: obj.pB / 1000, - pC: obj.pC / 1000, - pTot: obj.pTot / 1000, - //无功功率 - qA: obj.qA / 1000, - qB: obj.qB / 1000, - qC: obj.qC / 1000, - qTot: obj.qTot / 1000, - //视在功率 - sA: obj.sA / 1000, - sB: obj.sB / 1000, - sC: obj.sC / 1000, - sTot: obj.sTot / 1000 - } - } - //如果消息返回值是二次值,下拉框是一次值需要单位换算 除以1000 并且乘以pt ct - if (obj.dataLevel == 'Secondary' && formInline.dataLevel == 'Primary') { - obj = { - ...obj, - // 电压有效值 - vRmsA: (obj.vRmsA * obj.pt) / 1000, - vRmsB: (obj.vRmsA * obj.pt) / 1000, - vRmsC: (obj.vRmsA * obj.pt) / 1000, - // 电流有效值 - iRmsA: obj.iRmsA * obj.ct, - iRmsB: obj.iRmsA * obj.ct, - iRmsC: obj.iRmsA * obj.ct, - //基波电压幅值 - v1A: (obj.v1A * obj.pt) / 1000, - v1B: (obj.v1B * obj.pt) / 1000, - v1C: (obj.v1C * obj.pt) / 1000, - //基波电流幅值 - i1A: obj.i1A * obj.ct, - i1B: obj.i1B * obj.ct, - i1C: obj.i1C * obj.ct, - //有功功率 - pA: (obj.pA * obj.pt * obj.ct) / 1000, - pB: (obj.pB * obj.pt * obj.ct) / 1000, - pC: (obj.pC * obj.pt * obj.ct) / 1000, - pTot: (obj.pTot * obj.pt * obj.ct) / 1000, - //无功功率 - qA: (obj.qA * obj.pt * obj.ct) / 1000, - qB: (obj.qB * obj.pt * obj.ct) / 1000, - qC: (obj.qC * obj.pt * obj.ct) / 1000, - qTot: (obj.qTot * obj.pt * obj.ct) / 1000, - //视在功率 - sA: (obj.sA * obj.pt * obj.ct) / 1000, - sB: (obj.sB * obj.pt * obj.ct) / 1000, - sC: (obj.sC * obj.pt * obj.ct) / 1000, - sTot: (obj.sTot * obj.pt * obj.ct) / 1000 - } - } - //如果消息返回值是一次值,下拉框是二次值需要单位换算 乘以1000 并且除以pt ct - if (obj.dataLevel == 'Primary' && formInline.dataLevel == 'Secondary') { - console.log(6666) - obj = { - ...obj, - // 电压有效值 - vRmsA: (obj.vRmsA / obj.pt) * 1000, - vRmsB: (obj.vRmsA / obj.pt) * 1000, - vRmsC: (obj.vRmsA / obj.pt) * 1000, - // 电流有效值 - iRmsA: obj.iRmsA / obj.ct, - iRmsB: obj.iRmsA / obj.ct, - iRmsC: obj.iRmsA / obj.ct, - //基波电压幅值 - v1A: (obj.v1A / obj.pt) * 1000, - v1B: (obj.v1B / obj.pt) * 1000, - v1C: (obj.v1C / obj.pt) * 1000, - //基波电流幅值 - i1A: obj.i1A / obj.ct, - i1B: obj.i1B / obj.ct, - i1C: obj.i1C / obj.ct, - //有功功率 - pA: (obj.pA / obj.pt / obj.ct) * 1000, - pB: (obj.pB / obj.pt / obj.ct) * 1000, - pC: (obj.pC / obj.pt / obj.ct) * 1000, - pTot: (obj.pTot / obj.pt / obj.ct) * 1000, - //无功功率 - qA: (obj.qA / obj.pt / obj.ct) * 1000, - qB: (obj.qB / obj.pt / obj.ct) * 1000, - qC: (obj.qC / obj.pt / obj.ct) * 1000, - qTot: (obj.qTot / obj.pt / obj.ct) * 1000, - //视在功率 - sA: (obj.sA / obj.pt / obj.ct) * 1000, - sB: (obj.sB / obj.pt / obj.ct) * 1000, - sC: (obj.sC / obj.pt / obj.ct) * 1000, - sTot: (obj.sTot / obj.pt / obj.ct) * 1000 - } - } - //保留两位小数 - for (var i in obj) { - if (typeof obj[i] == 'number' && obj[i] != 0 && Math.abs(obj[i]) % 1 != 0) { - obj[i] = obj[i].toFixed(2) - } - } - mqttMessage.value = obj - //更新实时数据值 - realTimeFlag.value && realTimeRef.value && realTimeRef.value.setRealData(mqttMessage.value) - //更新谐波频谱数据 - !realTimeFlag.value && - sonTab.value == 2 && - harmonicSpectrumRef.value && - harmonicSpectrumRef.value.setHarmonicSpectrumData(mqttMessage.value) - }) - - mqttRef.value.on('error', (error: any) => { - console.log('mqtt连接失败...', error) - mqttRef.value.end() - }) - - mqttRef.value.on('close', function () { - console.log('mqtt客户端已断开连接.....') - }) } //tab点击事件 @@ -840,9 +852,9 @@ const handleClick = async (tab?: any) => { } //模版下载 const handleDownLoadTemplate = () => {} -//解析列表 +//补召日志 const analysisListRef = ref() -//打开解析列表 +//打开补召日志 const handleAnalysisList = () => { analysisListRef.value && analysisListRef.value.open() } diff --git a/src/views/govern/device/control/tabs/components/harmonicSpectrum.vue b/src/views/govern/device/control/tabs/components/harmonicSpectrum.vue index 1ec3c9d..17735b6 100644 --- a/src/views/govern/device/control/tabs/components/harmonicSpectrum.vue +++ b/src/views/govern/device/control/tabs/components/harmonicSpectrum.vue @@ -65,7 +65,7 @@ indexOptions.value = [ { name: 'vRmsB', phase: 'B相', data: [] }, { name: 'vRmsC', phase: 'C相', data: [] } ], - unit:'kV', + unit: 'kV', data: [] }, { @@ -76,7 +76,7 @@ indexOptions.value = [ { name: 'iRmsB', phase: 'B相', data: [] }, { name: 'iRmsC', phase: 'C相', data: [] } ], - unit:"A", + unit: 'A', data: [] }, { @@ -88,7 +88,7 @@ indexOptions.value = [ { name: 'pC', phase: 'C相', data: [] }, { name: 'pTot', phase: '总', data: [] } ], - unit:"kW", + unit: 'kW', data: [] }, { @@ -100,7 +100,7 @@ indexOptions.value = [ { name: 'qC', phase: 'C相', data: [] }, { name: 'qTot', phase: '总', data: [] } ], - unit:"kW", + unit: 'kW', data: [] }, @@ -112,7 +112,7 @@ indexOptions.value = [ { name: 'v1B', phase: 'B相', data: [] }, { name: 'v1C', phase: 'C相', data: [] } ], - unit:"kV", + unit: 'kV', data: [] }, { @@ -123,43 +123,139 @@ indexOptions.value = [ { name: 'i1B', phase: 'B相', data: [] }, { name: 'i1C', phase: 'C相', data: [] } ], - unit:"A", + unit: 'A', data: [] }, { id: 6, name: '频率(Hz)', children: [ - { name: 'freq',phase: '频率', data: [] }, - { name: 'freqDev',phase: '频率偏差', data: [] } + { name: 'freq', phase: '频率', data: [] }, + { name: 'freqDev', phase: '频率偏差', data: [] } ], - unit:"Hz", + unit: 'Hz', data: [] }, { id: 7, name: '电压不平衡度(%)', - children: [{ name: 'vUnbalance',phase: '电压不平衡度', data: [] }], - unit:"%", + children: [{ name: 'vUnbalance', phase: '电压不平衡度', data: [] }], + unit: '%', data: [] }, { id: 8, name: '电流不平衡度(%)', - children: [{ name: 'iUnbalance',phase: '电流不平衡度', data: [] }], - unit:"%", + children: [{ name: 'iUnbalance', phase: '电流不平衡度', data: [] }], + unit: '%', data: [] } ] -searchForm.value.index[0] = indexOptions.value[0] +// searchForm.value.index[0] = indexOptions.value[0] const heightTop = mainHeight(275) let height: any = mainHeight(275).height -//谐波频谱参数 + const params: any = ref({}) -const getHarmonicSpectrumParams = (val: any) => { - params.value = val - init() +const resetData = () => { + indexOptions.value = [ + { + id: 0, + name: '电压总有效值(kV)', + children: [ + { name: 'vRmsA', phase: 'A相', data: [] }, + { name: 'vRmsB', phase: 'B相', data: [] }, + { name: 'vRmsC', phase: 'C相', data: [] } + ], + unit: 'kV', + data: [] + }, + { + id: 1, + name: '电流总有效值(A)', + children: [ + { name: 'iRmsA', phase: 'A相', data: [] }, + { name: 'iRmsB', phase: 'B相', data: [] }, + { name: 'iRmsC', phase: 'C相', data: [] } + ], + unit: 'A', + data: [] + }, + { + id: 2, + name: '有功功率(kW)', + children: [ + { name: 'pA', phase: 'A相', data: [] }, + { name: 'pB', phase: 'B相', data: [] }, + { name: 'pC', phase: 'C相', data: [] }, + { name: 'pTot', phase: '总', data: [] } + ], + unit: 'kW', + data: [] + }, + { + id: 3, + name: '无功功率(kW)', + children: [ + { name: 'qA', phase: 'A相', data: [] }, + { name: 'qB', phase: 'B相', data: [] }, + { name: 'qC', phase: 'C相', data: [] }, + { name: 'qTot', phase: '总', data: [] } + ], + unit: 'kW', + data: [] + }, + + { + id: 4, + name: '基波电压总有效值(kV)', + children: [ + { name: 'v1A', phase: 'A相', data: [] }, + { name: 'v1B', phase: 'B相', data: [] }, + { name: 'v1C', phase: 'C相', data: [] } + ], + unit: 'kV', + data: [] + }, + { + id: 5, + name: '基波电流总有效值(A)', + children: [ + { name: 'i1A', phase: 'A相', data: [] }, + { name: 'i1B', phase: 'B相', data: [] }, + { name: 'i1C', phase: 'C相', data: [] } + ], + unit: 'A', + data: [] + }, + { + id: 6, + name: '频率(Hz)', + children: [ + { name: 'freq', phase: '频率', data: [] }, + { name: 'freqDev', phase: '频率偏差', data: [] } + ], + unit: 'Hz', + data: [] + }, + { + id: 7, + name: '电压不平衡度(%)', + children: [{ name: 'vUnbalance', phase: '电压不平衡度', data: [] }], + unit: '%', + data: [] + }, + { + id: 8, + name: '电流不平衡度(%)', + children: [{ name: 'iUnbalance', phase: '电流不平衡度', data: [] }], + unit: '%', + data: [] + } + ] + searchForm.value.index = [] + searchForm.value.index[0] = indexOptions.value[0] } +resetData() const mqttMessage: any = ref() const setHarmonicSpectrumData = (val: any) => { mqttMessage.value = val @@ -500,7 +596,7 @@ watch( } ) onMounted(() => {}) -defineExpose({ getHarmonicSpectrumParams, setHarmonicSpectrumData }) +defineExpose({ resetData, setHarmonicSpectrumData })