| | |
| | | <div class="formulaItem"> |
| | | <Icon style="color: powderblue" icon="la:box" :size="38" /> |
| | | <div> |
| | | <div class="mainInfo2">{{ realData?.feed }} 筐</div> |
| | | <div class="mainInfo2">{{ realData?.feed || 0 }} 筐</div> |
| | | <div class="subhead2">投料量</div> |
| | | </div> |
| | | </div> |
| | | <div class="formulaItem"> |
| | | <Icon style="color: red" icon="bx:wind" :size="35" /> |
| | | <div> |
| | | <div class="mainInfo2">{{ realData?.windTemp }} °C</div> |
| | | <div class="mainInfo2">{{ realData?.windTemp || 0 }} °C</div> |
| | | <div class="subhead2">热风</div> |
| | | </div> |
| | | </div> |
| | | <div class="formulaItem"> |
| | | <Icon style="color: green" icon="tabler:target-arrow" :size="35" /> |
| | | <div> |
| | | <div class="mainInfo2">{{ realData?.target }} %</div> |
| | | <div class="mainInfo2">{{ realData?.target || 0 }} %</div> |
| | | <div class="subhead2">目标</div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="center" style="height: 50%"> |
| | | <div class="centerText"> |
| | | <div class="mainInfo3" |
| | | ><span>{{ realData?.target }}</span> % |
| | | ><span>{{ realData?.target || 0 }}</span> % |
| | | </div> |
| | | <div class="subhead2">目标含水率</div> |
| | | </div> |
| | |
| | | <div class="center" style="height: 50%"> |
| | | <div> |
| | | <div class="mainInfo3" |
| | | ><span>{{ realData?.initial }}</span> %</div |
| | | ><span>{{ realData?.initial || 0 }}</span> %</div |
| | | > |
| | | <div class="subhead2">来料含水率</div> |
| | | </div> |
| | |
| | | <div class="leftTop1"> |
| | | <Icon icon="bi:fan" :size="50" /> |
| | | <div> |
| | | <div class="mainInfo">{{ realData.trendVo?.fanFrequency | 0 }} Hz</div> |
| | | <div class="mainInfo">{{ realData?.trendVo?.fanFrequency | 0 }} Hz</div> |
| | | <div class="subhead">风机频率</div> |
| | | </div> |
| | | </div> |
| | |
| | | margin-left: 100px; |
| | | font-size: 22px; |
| | | background: sandybrown; |
| | | height: 60px; |
| | | |
| | | border-radius: 10px; |
| | | line-height: 0; |
| | | padding: 29px; |
| | | line-height: 25px; |
| | | max-width: 500px; |
| | | padding: 15px; |
| | | font-weight: bold;" > |
| | | {{ realData?.warnMsg }} |
| | | </div> |
| | |
| | | <div class="chartTittle">实时进度</div> |
| | | <div id="efficiencyLine" style="width: 848px; height: 180px; margin-top: -10px"></div> |
| | | <div style="height: 10px; display: flex; width: 848px; padding: 0 60px; justify-content: space-between"> |
| | | <div style="width: 100px; height: 20px">{{ realData.dryTime | 0 }} min</div> |
| | | <div style="width: 100px; height: 20px">{{ realData?.dryTime | 0 }} min</div> |
| | | <div style="width: 100px; height: 20px; text-align: right">{{ realData?.totalTime | 0 }} min</div> |
| | | </div> |
| | | <div id="progressBar" style="width: 848px; height: 80px"></div> |
| | |
| | | <div class="chartTittle"> |
| | | 干燥效率(kg/h) |
| | | <div class="rightLabel"> |
| | | <div class="label good">>{{ standard.xiaolv }} 优 </div> |
| | | <div class="label bad"><{{ standard.xlMin }} 差</div> |
| | | <div class="label good">>{{ realData?.efficAvg?.toFixed(2) }} 优 </div> |
| | | <div class="label bad"><{{ ((realData?.efficAvg|0) * 0.9)?.toFixed(2) }} 差</div> |
| | | </div> |
| | | </div> |
| | | <div class="outDiv" style="padding-top: 20px"> |
| | |
| | | </div> |
| | | <div class="rightChart center"> |
| | | <div class="center compareBar"> |
| | | <div class="barTop">{{ standard.xiaolv }}</div> |
| | | <div class="barTop">{{ realData?.efficAvg?.toFixed(2) }}</div> |
| | | <div class="barBack"> |
| | | <div class="barDiv" :style="{ height: realData?.xlsHeight }"></div> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | <div class="center compareBar"> |
| | | <div class="barTop">{{ realData?.xiaolv | 0 }}</div> |
| | | <div class="barTop">{{ realData?.xiaolv?.toFixed(2) || 0 }}</div> |
| | | <div class="barBack"> |
| | | <div |
| | | class="barDiv" |
| | |
| | | <div class="chartTittle" |
| | | >蒸汽消耗(m³/kg) |
| | | <div class="rightLabel"> |
| | | <div class="label bad">>{{ standard.zhengqi }} 差</div> |
| | | <div class="label good"><{{ standard.zqMin }} 优</div> |
| | | <div class="label bad">>{{ realData?.steamAvg?.toFixed(2) }} 差</div> |
| | | <div class="label good"><{{ ((realData?.steamAvg|0) * 0.9).toFixed(2) }} 优</div> |
| | | </div> |
| | | </div> |
| | | <div class="outDiv" style="padding-top: 20px"> |
| | |
| | | </div> |
| | | <div class="rightChart center"> |
| | | <div class="center compareBar"> |
| | | <div class="barTop">{{ standard.zhengqi }}</div> |
| | | <div class="barTop">{{ realData?.steamAvg?.toFixed(2) }}</div> |
| | | <div class="barBack"> |
| | | <div class="barDiv" :style="{ height: realData?.zqsHeight }"></div> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | <div class="center compareBar"> |
| | | <div class="barTop">{{ realData?.zhengqi | 0 }}</div> |
| | | <div class="barTop">{{ realData?.zhengqi?.toFixed(2) || 0 }}</div> |
| | | <div class="barBack"> |
| | | <div |
| | | class="barDiv" |
| | |
| | | <div class="chartTittle"> |
| | | <div> 电能消耗(kWh/kg)</div> |
| | | <div class="rightLabel"> |
| | | <div class="label bad">>{{ standard.dian }} 差</div> |
| | | <div class="label good"><{{ standard.dMin }} 优</div> |
| | | <div class="label bad">>{{ realData?.wattAvg?.toFixed(3) }} 差</div> |
| | | <div class="label good"><{{ ((realData?.wattAvg|0) * 0.9).toFixed(3) }} 优</div> |
| | | </div> |
| | | </div> |
| | | <div class="outDiv" style="padding-top: 20px"> |
| | |
| | | </div> |
| | | <div class="rightChart center"> |
| | | <div class="center compareBar"> |
| | | <div class="barTop">{{ standard.dian }}</div> |
| | | <div class="barTop">{{ realData?.wattAvg?.toFixed(3) }}</div> |
| | | <div class="barBack"> |
| | | <div class="barDiv" :style="{ height: realData?.dnsHeight }"></div> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | <div class="center compareBar"> |
| | | <div class="barTop">{{ realData?.dian | 0 }}</div> |
| | | <div class="barTop">{{ realData?.dian?.toFixed(3) || 0 }}</div> |
| | | <div class="barBack"> |
| | | <div |
| | | class="barDiv" |
| | |
| | | import { queryById, listAll } from '../api/DryEquipment.api' |
| | | import { dryEquipment } from '../dataDefine/DryEquipment.data' |
| | | import { useUserStore } from '/@/store/modules/user' |
| | | import { getTenantId, getToken } from '/@/utils/auth' |
| | | |
| | | const domRef = ref<Nullable<HTMLElement>>(null) |
| | | const { enter, toggle, exit, isFullscreen } = useFullscreen() |
| | |
| | | smooth: true, |
| | | symbol: 'none', |
| | | data: [ |
| | | [1, 1], |
| | | [2, 2], |
| | | |
| | | ], |
| | | lineStyle: { |
| | | width: 1, |
| | |
| | | smooth: true, |
| | | symbol: 'none', |
| | | data: [ |
| | | [1, 10], |
| | | [2, 20], |
| | | |
| | | ], |
| | | lineStyle: { |
| | | width: 1, |
| | |
| | | amplitude: 3, |
| | | animationDuration: 5, |
| | | //animationDurationUpdate: 0, |
| | | data: [0.56, 0.44, 0.32], |
| | | data: [0, 0, 0], |
| | | shape: |
| | | 'path://M828.817,706.209C828.817,881.725,686.98,1024,512,1024c-174.98,0-316.817-142.275-316.817-317.791C195.183,530.74,512,0,512,0s316.817,530.74,316.817,706.209z', |
| | | outline: { |
| | |
| | | }, |
| | | data: [ |
| | | { |
| | | value: 20, |
| | | value: 0, |
| | | }, |
| | | ], |
| | | }, |
| | |
| | | }, |
| | | data: [ |
| | | { |
| | | value: 20, |
| | | value: 0, |
| | | }, |
| | | ], |
| | | }, |
| | |
| | | axisLabel: { |
| | | formatter: '{value} °C', |
| | | }, |
| | | // max: standard.value.xiaolv + 3, |
| | | // max: eqp.value.dryEfficiency + 3, |
| | | }, |
| | | series: [ |
| | | { |
| | |
| | | }, |
| | | // [[15,10], [15,11], [10,6], [7.5,12], [5,12], [2.5,5], [2.5,9], [1,7]] |
| | | data: [ |
| | | [0, 1], |
| | | [15, 10], |
| | | [45, 11], |
| | | [70, 6], |
| | | |
| | | ], |
| | | markPoint: { |
| | | data: [ |
| | |
| | | data: [ |
| | | { |
| | | name: '额定', |
| | | yAxis: standard.value.xiaolv, |
| | | yAxis: 100, |
| | | }, |
| | | ], |
| | | label: { |
| | |
| | | name: '2011', |
| | | type: 'bar', |
| | | barWidth: 10, |
| | | data: [190, 89, 34, 70, 44, 30], |
| | | data: [0, 0, 0, 0, 0, 0], |
| | | label: { |
| | | show: true, |
| | | position: 'right', |
| | |
| | | queryById({ id: router.currentRoute.value.params.id }).then((res) => { |
| | | // console.log(`output->res`, res) |
| | | eqp.value = res |
| | | eqp.value.dryEfficiency = res.dryEfficiency |
| | | eqp.value.steamConsumption = res.steamConsumption |
| | | eqp.value.powerConsumption = res.powerConsumption |
| | | queryRealTime() |
| | | setTimeout(initCharts, 500) |
| | | }) |
| | |
| | | if (eqp.value) { |
| | | eqp.value = eqps.value[eqpNum.value] |
| | | // console.log("888",eqp.value); |
| | | let tenantId = 1003 |
| | | let tenantId = getTenantId() |
| | | let eqpCode = eqp.value.code |
| | | let queryRealTimeUrl = '/dry/real/getRealTimeData' |
| | | defHttp.get({ url: queryRealTimeUrl, params: { tenantid: tenantId, machineid: eqpCode } }).then((res) => { |
| | |
| | | /**温度环形图 */ |
| | | if (bellowsTempChart) { |
| | | bellowsTempChart.setOption({ |
| | | series: [{ data: [{ value: res.windTemp }] }, { data: [{ value: res.windTemp }] }], |
| | | series: [{ data: [{ value: res.trendVo.bellowsTemp }] }, { data: [{ value: res.trendVo.bellowsTemp }] }], |
| | | }) |
| | | } |
| | | /**风机频率环形图 */ |
| | |
| | | /**干燥进度、走势与阶段效率和阶段消耗 */ |
| | | if (res && res.detailList) { |
| | | var progressSeries = [] |
| | | var ganZaoXiaoLv = [] |
| | | |
| | | var zhengQiXiaoHao = [] |
| | | var dianNengXiaoHao = [] |
| | | var totalTime = 1 |
| | | var ganZaoXiaoLv = [] |
| | | var totalTime = 0 |
| | | var beforeWeight = 0 |
| | | res.moisList = [] |
| | | beforeWeight = res.originWeight |
| | |
| | | //console.log(`output->bef`, beforeWeight) |
| | | //console.log(`output->cur`, item.weight) |
| | | res.moisList.push([item.totalTime, item.moisture]) |
| | | //console.log(`output->totalTime,item.totalTime`, totalTime, item.totalTime) |
| | | // console.log(`output->totalTime,item.totalTime`, totalTime, item.totalTime) |
| | | var curDryTime = item.totalTime - totalTime |
| | | |
| | | if (curDryTime > 0) { |
| | |
| | | }) |
| | | } |
| | | |
| | | // ganZaoXiaoLv.push([totalTime + res.remain,standard.value.xiaolv]) |
| | | // ganZaoXiaoLv.push([totalTime + res.remain,eqp.value.dryEfficiency]) |
| | | // console.log(`output->res.remain`, res.remain) |
| | | // console.log(`output->res.dryTime`, res.dryTime) |
| | | // console.log(`output->totalTime`, totalTime) |
| | |
| | | } |
| | | |
| | | res.totalTime = totalTime + res.remain |
| | | console.log("efficAvg::",res.efficAvg); |
| | | /**干燥效率、消耗 */ |
| | | if (efficiencyLineChart) { |
| | | //console.log(`output->ganZaoXiaoLv`, ganZaoXiaoLv) |
| | |
| | | data: [ |
| | | { |
| | | name: '额定', |
| | | yAxis: standard.value.xiaolv, |
| | | yAxis: res.efficAvg|0, |
| | | }, |
| | | ], |
| | | label: { |
| | |
| | | }) |
| | | } |
| | | |
| | | let lastTrend = res.detailList[res.detailList.length-1] |
| | | /**效率对比图 */ |
| | | if (res.originWeight - res.yield <= 0) { |
| | | res.xiaolv = standard.value.xiaolv + 6 |
| | | if (res.originWeight - lastTrend.weight <= 0) { |
| | | res.xiaolv = 0 |
| | | } else { |
| | | res.xiaolv = (((res.originWeight - res.yield) / res.dryTime) * 60).toFixed(2) |
| | | res.xiaolv = ((res.originWeight - lastTrend.weight) / lastTrend.totalTime) * 60 |
| | | } |
| | | |
| | | if (res.xiaolv > standard.value.xiaolv) { |
| | | res.xiaolv = Number(res.xiaolv) |
| | | //eqp.value.dryEfficiency = Number(eqp.value.dryEfficiency) |
| | | if (res.xiaolv > res.efficAvg) { |
| | | console.log("xiaolv:",res , eqp); |
| | | res.xlgood = true |
| | | res.xlsHeight = (standard.value.xiaolv / res.xiaolv) * 100 + '%' |
| | | res.xlsHeight = (res.efficAvg / res.xiaolv) * 100 + '%' |
| | | res.xlrHeight = '100%' |
| | | } else if (res.xiaolv < standard.value.xlMin) { |
| | | } else if (res.xiaolv < res.efficAvg * 0.9) { |
| | | res.xlbad = true |
| | | res.xlsHeight = '100%' |
| | | res.xlrHeight = (res.xiaolv / standard.value.xiaolv) * 100 + '%' |
| | | res.xlrHeight = (res.xiaolv / res.efficAvg) * 100 + '%' |
| | | } else { |
| | | res.xlsHeight = '100%' |
| | | res.xlrHeight = (res.xiaolv / standard.value.xiaolv) * 100 + '%' |
| | | res.xlrHeight = (res.xiaolv / res.efficAvg) * 100 + '%' |
| | | } |
| | | |
| | | /** 蒸汽消耗 */ |
| | | if (res.originWeight - res.yield <= 0) { |
| | | res.zhengqi = standard.value.zhengqi - 3 |
| | | if (res.originWeight - lastTrend.weight <= 0) { |
| | | res.zhengqi = 0 |
| | | } else { |
| | | res.zhengqi = (res.steam / (res.originWeight - res.yield)).toFixed(1) |
| | | res.zhengqi = lastTrend.steam / (res.originWeight - lastTrend.weight) |
| | | } |
| | | res.zhengqi = standard.value.zhengqi - 3 |
| | | console.log(res); |
| | | console.log('zhengqi:', res.zhengqi); |
| | | if (res.zhengqi > standard.value.zhengqi) { |
| | | res.zhengqi = Number(res.zhengqi) |
| | | //eqp.value.steamConsumption = Number(eqp.value.steamConsumption) |
| | | // res.zhengqi = eqp.value.steamConsumption - 3 |
| | | // console.log(res); |
| | | // console.log('zhengqi:', res.zhengqi); |
| | | if (res.zhengqi > res.steamAvg) { |
| | | res.zqbad = true |
| | | res.zqsHeight = (standard.value.zhengqi / res.zhengqi) * 100 + '%' |
| | | res.zqsHeight = (res.steamAvg / res.zhengqi) * 100 + '%' |
| | | res.zqrHeight = '100%' |
| | | } else if (res.zhengqi < standard.value.zqMin) { |
| | | } else if (res.zhengqi < res.steamAvg * 0.9) { |
| | | res.zqgood = true |
| | | res.zqsHeight = '100%' |
| | | res.zqrHeight = (res.zhengqi / standard.value.zhengqi) * 100 + '%' |
| | | res.zqrHeight = (res.zhengqi / res.steamAvg) * 100 + '%' |
| | | } else { |
| | | res.zqsHeight = '100%' |
| | | res.zqrHeight = (res.zhengqi / standard.value.zhengqi) * 100 + '%' |
| | | res.zqrHeight = (res.zhengqi / res.steamAvg) * 100 + '%' |
| | | } |
| | | |
| | | /** 电能消耗 */ |
| | | if (res.originWeight - res.yield <= 0) { |
| | | res.dian = standard.value.dian - 1.5 |
| | | if (res.originWeight - lastTrend.weight <= 0) { |
| | | res.dian = 0 |
| | | } else { |
| | | res.dian = (res.watt / (res.originWeight - res.yield)).toFixed(1) |
| | | res.dian = lastTrend.watt / (res.originWeight - lastTrend.weight) |
| | | } |
| | | res.dian = standard.value.dian - 1.5 |
| | | if (res.dian > standard.value.dian) { |
| | | // res.dian = eqp.value.powerConsumption - 1.5 |
| | | res.dian = Number(res.dian) |
| | | //eqp.value.powerConsumption = Number(eqp.value.powerConsumption) |
| | | if (res.dian > res.wattAvg) { |
| | | console.log("dian::", res.dian,res.wattAvg ) |
| | | res.dnbad = true |
| | | res.dnsHeight = (standard.value.dian / res.dian) * 100 + '%' |
| | | res.dnsHeight = (res.wattAvg / res.dian) * 100 + '%' |
| | | res.dnrHeight = '100%' |
| | | } else if (res.dian < standard.value.dMin) { |
| | | } else if (res.dian < res.wattAvg * 0.9) { |
| | | res.dngood = true |
| | | res.dnsHeight = '100%' |
| | | res.dnrHeight = (res.dian / standard.value.dian) * 100 + '%' |
| | | res.dnrHeight = (res.dian / res.wattAvg) * 100 + '%' |
| | | } else { |
| | | res.dnsHeight = '100%' |
| | | res.dnrHeight = (res.dian / standard.value.dian) * 100 + '%' |
| | | res.dnrHeight = (res.dian / res.wattAvg) * 100 + '%' |
| | | } |
| | | |
| | | //console.log('state:::fan::', res.state_fan, 'roller::', res.state_roller, 'windbox::', res.state_windbox) |
| | |
| | | } |
| | | } |
| | | |
| | | //console.log(`output->res`, res) |
| | | // console.log(`output->res`, res.detailList[res.detailList.length-1]) |
| | | realData.value = res |
| | | }) |
| | | } |
| | |
| | | |
| | | .eqpStatus { |
| | | width: 848px; |
| | | height: 300px; |
| | | |
| | | } |
| | | .rightInfo { |
| | | display: flex; |