From 2476d2401e78430e7209e1b8ea92d16c3f69442f Mon Sep 17 00:00:00 2001 From: stt Date: Thu, 27 Nov 2025 15:04:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E4=B8=8AYPT=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/echarts/rmsWorker.js | 577 ++++++++++++++-------------- 1 file changed, 292 insertions(+), 285 deletions(-) diff --git a/src/components/echarts/rmsWorker.js b/src/components/echarts/rmsWorker.js index 7c7f58d..6159aaf 100644 --- a/src/components/echarts/rmsWorker.js +++ b/src/components/echarts/rmsWorker.js @@ -1,311 +1,318 @@ // 辅助函数 const getMax = (temp, tempA, tempB, tempC) => { - temp = temp > tempA ? temp : tempA; - temp = temp > tempB ? temp : tempB; - if (tempC !== undefined) { - temp = temp > tempC ? temp : tempC; - } - return temp; -}; + temp = temp > tempA ? temp : tempA + temp = temp > tempB ? temp : tempB + if (tempC !== undefined) { + temp = temp > tempC ? temp : tempC + } + return temp +} const getMaxTwo = (temp, tempA, tempB) => { - temp = temp > tempA ? temp : tempA; - temp = temp > tempB ? temp : tempB; - return temp; -}; + temp = temp > tempA ? temp : tempA + temp = temp > tempB ? temp : tempB + return temp +} const getMin = (temp, tempA, tempB, tempC) => { - temp = temp < tempA ? temp : tempA; - temp = temp < tempB ? temp : tempB; - if (tempC !== undefined) { - temp = temp < tempC ? temp : tempC; - } - return temp; -}; + temp = temp < tempA ? temp : tempA + temp = temp < tempB ? temp : tempB + if (tempC !== undefined) { + temp = temp < tempC ? temp : tempC + } + return temp +} const getMinOpen = (temp, tempA, tempB) => { - temp = temp < tempA ? temp : tempA; - temp = temp < tempB ? temp : tempB; - return temp; -}; + temp = temp < tempA ? temp : tempA + temp = temp < tempB ? temp : tempB + return temp +} // 数据处理函数 const fliteWaveData = (wp, step, iphasicValue, isOpen) => { - const rmsData = wp.listRmsData; - const pt = Number(wp.pt) / 1000; - const ct = Number(wp.ct); - const titleList = wp.waveTitle; - let xishu = pt; - let aTitle = "", - bTitle = "", - cTitle = "", - unit = "电压"; - let rmsvFirstX = 0, - rmsvFirstY = 0, - rmsvSecondX = 0, - rmsvSecondY = 0, - firstZhou = "a", - secondeZhou = "a"; - let ifmax = 0, - ifmin = 0, - ismax = 0, - ismin = 0, - rfmax = 0, - rfmin = 0, - rsmax = 0, - rsmin = 0; + const rmsData = wp.listRmsData + const pt = Number(wp.pt) / 1000 + const ct = Number(wp.ct) + const titleList = wp.waveTitle + let xishu = pt + let aTitle = '', + bTitle = '', + cTitle = '', + unit = '电压' + let rmsvFirstX = 0, + rmsvFirstY = 0, + rmsvSecondX = 0, + rmsvSecondY = 0, + firstZhou = 'a', + secondeZhou = 'a' + let ifmax = 0, + ifmin = 0, + ismax = 0, + ismin = 0, + rfmax = 0, + rfmin = 0, + rsmax = 0, + rsmin = 0 - const shunshiFA = []; - const shunshiFB = []; - const shunshiFC = []; - const shunshiSA = []; - const shunshiSB = []; - const shunshiSC = []; - const rmsFA = []; - const rmsFB = []; - const rmsFC = []; - const rmsSA = []; - const rmsSB = []; - const rmsSC = []; + const shunshiFA = [] + const shunshiFB = [] + const shunshiFC = [] + const shunshiSA = [] + const shunshiSB = [] + const shunshiSC = [] + const rmsFA = [] + const rmsFB = [] + const rmsFC = [] + const rmsSA = [] + const rmsSB = [] + const rmsSC = [] - - - if (titleList[iphasicValue * step + 1]?.substring(0, 1) !== "U") { - xishu = ct; - unit = "电流"; - } - - for (let i = 1; i <= iphasicValue; i++) { - switch (i) { - case 1: - aTitle = titleList[iphasicValue * step + i]?.substring(1) || ""; - break; - case 2: - bTitle = titleList[iphasicValue * step + i]?.substring(1) || ""; - break; - case 3: - cTitle = titleList[iphasicValue * step + i]?.substring(1) || ""; - break; - } - } - - if (rmsData[0] && rmsData[0][iphasicValue * step + 1] !== undefined) { - rfmax = rmsData[0][iphasicValue * step + 1] * xishu; - rfmin = rmsData[0][iphasicValue * step + 1] * xishu; - rmsvFirstY = rmsData[0][iphasicValue * step + 1] * xishu; - rmsvFirstX = rmsData[0][0]; - rsmax = rmsData[0][iphasicValue * step + 1]; - rsmin = rmsData[0][iphasicValue * step + 1]; - rmsvSecondY = rmsData[0][iphasicValue * step + 1]; - rmsvSecondX = rmsData[0][0]; - } - - for (let rms = 0; rms < rmsData.length; rms++) { - if (!rmsData[rms] || rmsData[rms][iphasicValue * step + 1] === undefined) { - break; + if (titleList[iphasicValue * step + 1]?.substring(0, 1) !== 'U') { + xishu = ct + unit = '电流' } - switch (iphasicValue) { - case 1: - const rmsFirstA = rmsData[rms][iphasicValue * step + 1] * xishu; - rmsFA.push([rmsData[rms][0], rmsFirstA]); - rfmax = rfmax > rmsFirstA ? rfmax : rmsFirstA; - rfmin = rfmin < rmsFirstA ? rfmin : rmsFirstA; - if (rfmin < rmsvFirstY) { - rmsvFirstY = rfmin; - firstZhou = "a"; - rmsvFirstX = rmsData[rms][0]; + for (let i = 1; i <= iphasicValue; i++) { + switch (i) { + case 1: + aTitle = titleList[iphasicValue * step + i]?.substring(1) || '' + break + case 2: + bTitle = titleList[iphasicValue * step + i]?.substring(1) || '' + break + case 3: + cTitle = titleList[iphasicValue * step + i]?.substring(1) || '' + break } - - const rmsSecondA = rmsData[rms][iphasicValue * step + 1]; - rmsSA.push([rmsData[rms][0], rmsSecondA]); - rsmax = rsmax > rmsSecondA ? rsmax : rmsSecondA; - rsmin = rsmin < rmsSecondA ? rsmin : rmsSecondA; - if (rsmin < rmsvSecondY) { - rmsvSecondY = rsmin; - secondeZhou = "a"; - rmsvSecondX = rmsData[rms][0]; - } - break; - case 2: - const rmsFirstA2 = rmsData[rms][iphasicValue * step + 1] * xishu; - const rmsFirstB2 = rmsData[rms][iphasicValue * step + 2] * xishu; - rmsFA.push([rmsData[rms][0], rmsFirstA2]); - rmsFB.push([rmsData[rms][0], rmsFirstB2]); - rfmax = getMaxTwo(rfmax, rmsFirstA2, rmsFirstB2); - rfmin = getMinOpen(rfmin, rmsFirstA2, rmsFirstB2); - if (rfmin < rmsvFirstY) { - rmsvFirstY = rfmin; - if (rfmin === rmsFirstA2) { - firstZhou = "a"; - } else if (rfmin === rmsFirstB2) { - firstZhou = "b"; - } - rmsvFirstX = rmsData[rms][0]; - } - - const rmsSecondA2 = rmsData[rms][iphasicValue * step + 1]; - const rmsSecondB2 = rmsData[rms][iphasicValue * step + 2]; - rmsSA.push([rmsData[rms][0], rmsSecondA2]); - rmsSB.push([rmsData[rms][0], rmsSecondB2]); - rsmax = getMaxTwo(rsmax, rmsSecondA2, rmsSecondB2); - rsmin = getMinOpen(rsmin, rmsSecondA2, rmsSecondB2); - if (rsmin < rmsvSecondY) { - rmsvSecondY = rsmin; - if (rsmin === rmsSecondA2) { - secondeZhou = "a"; - } else if (rsmin === rmsSecondB2) { - secondeZhou = "b"; - } - rmsvSecondX = rmsData[rms][0]; - } - break; - case 3: - const rmsFirstA3 = rmsData[rms][iphasicValue * step + 1] * xishu; - const rmsFirstB3 = rmsData[rms][iphasicValue * step + 2] * xishu; - const rmsFirstC3 = rmsData[rms][iphasicValue * step + 3] * xishu; - rmsFA.push([rmsData[rms][0], rmsFirstA3]); - rmsFB.push([rmsData[rms][0], rmsFirstB3]); - rmsFC.push([rmsData[rms][0], rmsFirstC3]); - rfmax = getMax(rfmax, rmsFirstA3, rmsFirstB3, rmsFirstC3); - rfmin = isOpen - ? getMinOpen(rfmin, rmsFirstA3, rmsFirstC3) - : getMin(rfmin, rmsFirstA3, rmsFirstB3, rmsFirstC3); - if (rfmin < rmsvFirstY) { - rmsvFirstY = rfmin; - if (rfmin === rmsFirstA3) { - firstZhou = "a"; - } else if (rfmin === rmsFirstB3) { - firstZhou = "b"; - } else { - firstZhou = "c"; - } - rmsvFirstX = rmsData[rms][0]; - } - - const rmsSecondA3 = rmsData[rms][iphasicValue * step + 1]; - const rmsSecondB3 = rmsData[rms][iphasicValue * step + 2]; - const rmsSecondC3 = rmsData[rms][iphasicValue * step + 3]; - rmsSA.push([rmsData[rms][0], rmsSecondA3]); - rmsSB.push([rmsData[rms][0], rmsSecondB3]); - rmsSC.push([rmsData[rms][0], rmsSecondC3]); - rsmax = getMax(rsmax, rmsSecondA3, rmsSecondB3, rmsSecondC3); - rsmin = isOpen - ? getMinOpen(rsmin, rmsSecondA3, rmsSecondC3) - : getMin(rsmin, rmsSecondA3, rmsSecondB3, rmsSecondC3); - if (rsmin < rmsvSecondY) { - rmsvSecondY = rsmin; - if (rsmin === rmsSecondA3) { - secondeZhou = "a"; - } else if (rsmin === rmsSecondB3) { - secondeZhou = "b"; - } else { - secondeZhou = "c"; - } - rmsvSecondX = rmsData[rms][0]; - } - break; } - } - const instantF = { max: ifmax, min: ifmin }; - const instantS = { max: ismax, min: ismin }; - const RMSF = { max: rfmax, min: rfmin }; - const RMSS = { max: rsmax, min: rsmin }; - const RMSFMinDetail = { rmsvFirstX, rmsvFirstY, firstZhou }; - const RMSSMinDetail = { rmsvSecondX, rmsvSecondY, secondeZhou }; - const shunshiF = { shunshiFA, shunshiFB, shunshiFC }; - const shunshiS = { shunshiSA, shunshiSB, shunshiSC }; - const RMSFWave = { rmsFA, rmsFB, rmsFC }; - const RMSSWave = { rmsSA, rmsSB, rmsSC }; - const title = { aTitle, bTitle, cTitle, unit }; + if (rmsData[0] && rmsData[0][iphasicValue * step + 1] !== undefined) { + rfmax = rmsData[0][iphasicValue * step + 1] * xishu + rfmin = rmsData[0][iphasicValue * step + 1] * xishu + rmsvFirstY = rmsData[0][iphasicValue * step + 1] * xishu + rmsvFirstX = rmsData[0][0] + rsmax = rmsData[0][iphasicValue * step + 1] + rsmin = rmsData[0][iphasicValue * step + 1] + rmsvSecondY = rmsData[0][iphasicValue * step + 1] + rmsvSecondX = rmsData[0][0] + } - - return { - - instantF, - instantS, - RMSF, - RMSS, - RMSFMinDetail, - RMSSMinDetail, - shunshiF, - shunshiS, - RMSFWave, - RMSSWave, - title, - unit, - }; -}; + for (let rms = 0; rms < rmsData.length; rms++) { + if (!rmsData[rms] || rmsData[rms][iphasicValue * step + 1] === undefined) { + break + } + + switch (iphasicValue) { + case 1: + const rmsFirstA = rmsData[rms][iphasicValue * step + 1] * xishu + rmsFA.push([rmsData[rms][0], rmsFirstA]) + rfmax = rfmax > rmsFirstA ? rfmax : rmsFirstA + rfmin = rfmin < rmsFirstA ? rfmin : rmsFirstA + if (rfmin < rmsvFirstY) { + rmsvFirstY = rfmin + firstZhou = 'a' + rmsvFirstX = rmsData[rms][0] + } + + const rmsSecondA = rmsData[rms][iphasicValue * step + 1] + rmsSA.push([rmsData[rms][0], rmsSecondA]) + rsmax = rsmax > rmsSecondA ? rsmax : rmsSecondA + rsmin = rsmin < rmsSecondA ? rsmin : rmsSecondA + if (rsmin < rmsvSecondY) { + rmsvSecondY = rsmin + secondeZhou = 'a' + rmsvSecondX = rmsData[rms][0] + } + break + case 2: + const rmsFirstA2 = rmsData[rms][iphasicValue * step + 1] * xishu + const rmsFirstB2 = rmsData[rms][iphasicValue * step + 2] * xishu + rmsFA.push([rmsData[rms][0], rmsFirstA2]) + rmsFB.push([rmsData[rms][0], rmsFirstB2]) + rfmax = getMaxTwo(rfmax, rmsFirstA2, rmsFirstB2) + rfmin = getMinOpen(rfmin, rmsFirstA2, rmsFirstB2) + if (rfmin < rmsvFirstY) { + rmsvFirstY = rfmin + if (rfmin === rmsFirstA2) { + firstZhou = 'a' + } else if (rfmin === rmsFirstB2) { + firstZhou = 'b' + } + rmsvFirstX = rmsData[rms][0] + } + + const rmsSecondA2 = rmsData[rms][iphasicValue * step + 1] + const rmsSecondB2 = rmsData[rms][iphasicValue * step + 2] + rmsSA.push([rmsData[rms][0], rmsSecondA2]) + rmsSB.push([rmsData[rms][0], rmsSecondB2]) + rsmax = getMaxTwo(rsmax, rmsSecondA2, rmsSecondB2) + rsmin = getMinOpen(rsmin, rmsSecondA2, rmsSecondB2) + if (rsmin < rmsvSecondY) { + rmsvSecondY = rsmin + if (rsmin === rmsSecondA2) { + secondeZhou = 'a' + } else if (rsmin === rmsSecondB2) { + secondeZhou = 'b' + } + rmsvSecondX = rmsData[rms][0] + } + break + case 3: + const rmsFirstA3 = rmsData[rms][iphasicValue * step + 1] * xishu + const rmsFirstB3 = rmsData[rms][iphasicValue * step + 2] * xishu + const rmsFirstC3 = rmsData[rms][iphasicValue * step + 3] * xishu + rmsFA.push([rmsData[rms][0], rmsFirstA3]) + rmsFB.push([rmsData[rms][0], rmsFirstB3]) + rmsFC.push([rmsData[rms][0], rmsFirstC3]) + rfmax = getMax(rfmax, rmsFirstA3, rmsFirstB3, rmsFirstC3) + rfmin = isOpen + ? getMinOpen(rfmin, rmsFirstA3, rmsFirstC3) + : getMin(rfmin, rmsFirstA3, rmsFirstB3, rmsFirstC3) + if (rfmin < rmsvFirstY) { + rmsvFirstY = rfmin + if (rfmin === rmsFirstA3) { + firstZhou = 'a' + } else if (rfmin === rmsFirstB3) { + firstZhou = 'b' + } else { + firstZhou = 'c' + } + rmsvFirstX = rmsData[rms][0] + } + + const rmsSecondA3 = rmsData[rms][iphasicValue * step + 1] + const rmsSecondB3 = rmsData[rms][iphasicValue * step + 2] + const rmsSecondC3 = rmsData[rms][iphasicValue * step + 3] + rmsSA.push([rmsData[rms][0], rmsSecondA3]) + rmsSB.push([rmsData[rms][0], rmsSecondB3]) + rmsSC.push([rmsData[rms][0], rmsSecondC3]) + rsmax = getMax(rsmax, rmsSecondA3, rmsSecondB3, rmsSecondC3) + rsmin = isOpen + ? getMinOpen(rsmin, rmsSecondA3, rmsSecondC3) + : getMin(rsmin, rmsSecondA3, rmsSecondB3, rmsSecondC3) + if (rsmin < rmsvSecondY) { + rmsvSecondY = rsmin + if (rsmin === rmsSecondA3) { + secondeZhou = 'a' + } else if (rsmin === rmsSecondB3) { + secondeZhou = 'b' + } else { + secondeZhou = 'c' + } + rmsvSecondX = rmsData[rms][0] + } + break + } + } + + const instantF = { max: ifmax, min: ifmin } + const instantS = { max: ismax, min: ismin } + const RMSF = { max: rfmax, min: rfmin } + const RMSS = { max: rsmax, min: rsmin } + const RMSFMinDetail = { rmsvFirstX, rmsvFirstY, firstZhou } + const RMSSMinDetail = { rmsvSecondX, rmsvSecondY, secondeZhou } + const shunshiF = { shunshiFA, shunshiFB, shunshiFC } + const shunshiS = { shunshiSA, shunshiSB, shunshiSC } + const RMSFWave = { rmsFA, rmsFB, rmsFC } + const RMSSWave = { rmsSA, rmsSB, rmsSC } + const title = { aTitle, bTitle, cTitle, unit } + + return { + instantF, + instantS, + RMSF, + RMSS, + RMSFMinDetail, + RMSSMinDetail, + shunshiF, + shunshiS, + RMSFWave, + RMSSWave, + title, + unit + } +} // 监听消息 self.onmessage = function (e) { - const { wp, isOpen, value, boxoList } = JSON.parse(e.data); + const { wp, isOpen, value, boxoList } = JSON.parse(e.data) - try { - const iphasicValue = wp.iphasic || 1; + try { + const iphasicValue = wp.iphasic || 1 - const picCounts = (wp.waveTitle.length - 1) / iphasicValue; - const waveDatas = []; + const picCounts = (wp.waveTitle.length - 1) / iphasicValue + const waveDatas = [] - for (let i = 0; i < picCounts; i++) { - const data = fliteWaveData(wp, i, iphasicValue, isOpen,boxoList); - waveDatas.push(data); + for (let i = 0; i < picCounts; i++) { + const data = fliteWaveData(wp, i, iphasicValue, isOpen, boxoList) + waveDatas.push(data) + } + // 处理标题 + let titles = '' + if (boxoList.systemType == 'pms') { + titles = + '变电站名称:' + + boxoList.powerStationName + + ' 监测点名称:' + + boxoList.measurementPointName + + ' 发生时刻:' + + boxoList.startTime + + ' 残余电压:' + + (boxoList.featureAmplitude * 100).toFixed(2) + + '% 持续时间:' + + boxoList.duration + + 's' + } else if (boxoList.systemType == 'ZL') { + titles = + ' 监测点名称:' + + boxoList.equipmentName + + ' 发生时刻:' + + boxoList.startTime + + ' 残余电压:' + + boxoList.evtParamVVaDepth + + ' 持续时间:' + + boxoList.evtParamTm + + 's' + } else if (boxoList.systemType == 'YPT') { + titles = + ' 监测点名称:' + + boxoList.lineName + + ' 发生时刻:' + + boxoList.startTime + + ' 残余电压:' + + (boxoList.featureAmplitude * 100).toFixed(2) + + '% 持续时间:' + + boxoList.persistTime + + 's' + } else { + titles = + '变电站名称:' + + boxoList.subName + + ' 监测点名称:' + + boxoList.lineName + + ' 发生时刻:' + + boxoList.startTime + + ' 残余电压:' + + (boxoList.featureAmplitude * 100).toFixed(2) + + '% 持续时间:' + + boxoList.duration + + 's' + } + // 发送处理结果回主线程 + self.postMessage({ + titles: titles, + success: true, + waveDatas, + time: wp.time, + type: wp.waveType, + severity: wp.yzd, + iphasic: iphasicValue + }) + } catch (error) { + self.postMessage({ + success: false, + error: error.message + }) } -// 处理标题 - let titles = ""; - if (boxoList.systemType == "pms") { - titles = - "变电站名称:" + - boxoList.powerStationName + - " 监测点名称:" + - boxoList.measurementPointName + - " 发生时刻:" + - boxoList.startTime + - " 残余电压:" + - (boxoList.featureAmplitude * 100).toFixed(2) + - "% 持续时间:" + - boxoList.duration + - "s"; - } else if (boxoList.systemType == "ZL") { - titles = - " 监测点名称:" + - boxoList.equipmentName + - " 发生时刻:" + - boxoList.startTime + - " 残余电压:" + - boxoList.evtParamVVaDepth + - " 持续时间:" + - boxoList.evtParamTm + - "s"; - } else { - titles = - "变电站名称:" + - boxoList.subName + - " 监测点名称:" + - boxoList.lineName + - " 发生时刻:" + - boxoList.startTime + - " 残余电压:" + - (boxoList.featureAmplitude * 100).toFixed(2) + - "% 持续时间:" + - boxoList.duration + - "s"; - } - // 发送处理结果回主线程 - self.postMessage({ - titles: titles, - success: true, - waveDatas, - time: wp.time, - type: wp.waveType, - severity: wp.yzd, - iphasic: iphasicValue, - }); - } catch (error) { - self.postMessage({ - success: false, - error: error.message, - }); - } -}; +}