当前位置: 首页 > Web前端 > HTML5

基于HTML5WebGL的智能建筑能源监控系统

时间:2023-04-05 12:50:29 HTML5

前言进入21世纪,在能源危机和全球变暖的压力下,太阳能等可再生能源越来越受到重视,光伏建筑一体化逐渐成为绿色能源。发展方式和生活方式,加强节能降耗,支持低碳产业和发展新能源、可再生能源也成为国家战略,因此基于数据管理和监控的智能建筑能源系统成为趋势。通过数据,可以直观地对建筑进行能耗量化管理和效果评价,以控制和降低建筑运营过程中的能源消耗,最终降低建筑运营成本,提高能源效率。今天给大家带来一个使用海拓的HTforWeb产品的智能楼宇能耗监控系统。系统预览本图为2D与3D相结合的智能建筑能耗监测系统,主要实时监测空调、照明等建筑设备的能耗变化。代码实现1.场景进入动画预览。对于3D建模下的建筑,添加一个好的开场动画效果可以给用户带来很好的体验,所以我们可以针对3D场景修改它的eye和center值。达到漫游效果。当然,我们也可以用流水线实现更复杂的漫游效果,其实质就是改变3D场景的眼睛和中心的值。动画代码如下://场景进入动画flyToView(g3d,eye,center,cb,time){g3d.moveCamera(eye,center,{duration:time?time:3000,finishFunc:function(){cb&&cb();}});}二、建筑动画预览在3D场景中,我们可以将整个建筑模型的节点进行拆分,将建筑模型中需要动画的部分做成单独的节点,以及然后给这些节点设置不同的Tags(注:类似于IDs,在我们的场景中是唯一的)。然后我们就可以通过Tag在我们的3D视图中获取这个节点,然后通过动画修改节点的X轴、Y轴、Z轴的值,做出这样的建筑变化效果。在我们的3D三维坐标系中,X轴正方向朝右,Y轴正方向朝上,Z轴正方向朝屏幕外。使用右手螺旋规则。想了解更多我们3D场景的细节,详见HTforWeb3D手册章节。现实动画代码如下://大楼动画1buildAnim1(node,position,num,direction,cb,time){varx=node.getX(),z=node.getY(),y=node.getElevation();this.anim2=ht.Default.startAnim({duration:time?time:3000,finishFunc:functionfinishFunc(){cb&&cb();},action:functionaction(v){if(position==="Y"){varpositionY=y+num*v;node.setElevation(positionY);}elseif(position==="X"){if(direction==="lf"||direction==="ra"){varpositionX=x+num*v;varpositionY=z+num*v;node.setX(positionX);node.setY(positionY);}elseif(direction==="la"){varpositionX=x-num*v;varpositionY=z+num*v;node.setX(positionX);没有de.setY(positionY);}elseif(direction==="rf"){varpositionX=x+num*v;变量positionY=z-num*v;node.setX(positionX);node.setY(positionY);}}elseif(position==="Z"){varpositionZ=z+num*v;node.setY(positionZ);}}});}从上面的代码可以看出,我们可以动态的传入我们需要的参数,然后根据我们在我们动画的action函数中传入的参数来判断需要哪一步动画。当然我们还有一个finishFunc函数可以通过结束动画调用下一个动画。这样就可以一步步实现动画的效果,从而将复杂的动画拆分成多个简单的小动画。3、电梯动画预览在这套智能楼宇能源监控系统中,我们还可以直观的实时监控楼层间电梯的工作状态,可以准确浏览每部电梯楼层间的停留时间。现实动画代码如下://电梯动画elevatorAnim(){varself=this;varg3dDm=self.dm;varelevatorNodes=g3dDm.getDataByTag("elevatorNodes");//电梯动画varanimateElevatorNodes=null;varelevatorNodesArr=\[\];elevatorNodes&&elevatorNodes.eachChild(function(d){d.a('direction',1);elevatorNodesArr.push(d);});varrandomElevator=function(){animateElevatorNodes=\[\];对于(vari=0;i<3;i++){animateElevatorNodes.push(elevatorNodesArr\[self.getRandomNumberByRange(0,6)\]);}};随机电梯();self.elevatorTask={interval:100,action:function(data){if(animateElevatorNodes.indexOf(data)>-1){varelevation=data.getElevation();varnextElevation=elevation+data.a('方向')\*10;如果(nextElevation<0&&data.a('direction')===-1){data.a('方向',1);}if(nextElevation>760&&data.a('direction')===1){data.a('direction',-1);}data.setElevation(nextElevation);}}};g3dDm.addScheduleTask(self.elevatorTask);//启动动画setInterval(randomElevator,2000);}电梯的动画效果,我使用Hightopo的调度来实现电梯的动画效果。什么是调度呢?在HT中,调度是先通过DataModel添加调度任务,当调度任务指定的时间间隔(interval)到达时,DataModel会遍历3D视图DataModel视图下的所有图元,并回调action函数调度任务,可以在该函数中修改传入数据图元的相应属性,实现动画效果。有关更多调度信息,请参阅章节。4.2D面板显示和数据绑定在我们的系统中,我还搭建了一个2D场景,上面有曲线,直方图和各种数据面板,可以直观的展示建筑的能耗信息,方便我们执行建筑能源消耗量化管理及效果评价。对于图,我们支持引入第三方ECharts嵌入。界面如图:二维界面的数据绑定非常简单。我们可以为二维面板上的图标设置Tag,然后在这个面板上修改绑定的属性。代码如下:varpowerModule=g2dDm.getDataByTag("powerModule");powerModule.a({//在这里为自己命名"num1":self.getRandomNumberByRange(1000,9999),"num2":self.getRandomNumberByRange(1,100),"num3":self.getRandomNumberByRange(100,999),"num4":self.getRandomNumberByRange(100,999),});powerModule.iv();2D界面的数据绑定非常简单,我们也可以通过获取界面数据,动态绑定真实数据到2D/3D面板。当然,如果只是二维场景上的文字,我们可以直接获取文字的node节点,然后通过node.s("text","modifiedcontent")修改数据。小结在能源危机和全球变暖的压力下,利用可再生资源,降低能源消耗,走可持续发展之路显得尤为重要,也是21世纪的必然趋势。通过能源监控系统,在这些丰富的图表、柱状图等图表和有趣生动的3D动画中,直观有效地传达建筑内部的能源变化,从而降低建筑的运营成本,有效降低建筑能耗.对节能减排和环境保护具有重要的现实意义。