精华内容
下载资源
问答
  • 三维组态软件

    2016-01-25 15:08:51
    三维组态动态监测软件即能高效获取硬件监测的数据业务和虚拟现实数据,并能对各监测点区的数据进行分析和汇总,并按照监测点和三维场景模型的整合。该软件以生产监测监控为主线,以三维场景作为载体。  3D组态软件...
  • 三维可视化的监控平台,可以根据客户需求进行定制化的开发,一次开发N次通用
  • 三维组态软件提高了工业控制的管理效率,让工业控制的资源管理、风险管控得到很大的改善。    传统的三维组态一般都是本地应用, 该案例使用的是基于浏览器B/S架构下的三维组态的应用。    该案例模拟的是一个...

      ITman彪叔

      三维组态可视化解决方案
      
      HTML5 WebGL 在三维中的应用,已经发展的如火如荼,使其在三维组态(工业控制)方面也变得简单易行! 三维组态软件提高了工业控制的管理效率,让工业控制的资源管理、风险管控得到很大的改善。
      
      传统的三维组态一般都是本地应用, 该案例使用的是基于浏览器B/S架构下的三维组态的应用。
      
      该案例模拟的是一个油田简单的工业控制场景, 模型大致包括
      
      油井、分离器、 加热炉、天然气、外输泵。
      
      还包括管路流动、流动方向。 描述了采油、加工、 输出的全过程。
      
      制作模型
      
      第一步要做的就是建模,设计组使用3D建模工具 3d max或者c4d 进行油田设备模型的建模。建模后导出后缀为obj或者gltf格式文件,这两种格式是我们三维渲染引擎支持最好的文件格式。
      
      建模后的所有模型文件,最终会放到后端的模型库,模型库的管理目录,如下图所示:
      
      模型列表
      
      需要制作的模型包括油井、分离器、加热炉、天然气、外输泵,如下图所示,
      
      模型
      
      加载模型
      
      加载模型可使用引擎模型的加载函数,进行模型加载,如obj模型加载,如下代码所示:
      
      new mono.OBJMTLLoader().load( 'youjing.obj', 'youjing.mtl', '',  (node)=> {
      
      node.type = 'obj';
      
      box.addByDescendant(node);
      
      如加载一个油井模型,因为加载模型是一个异步的过程,所以会有一个回调函数,加载完成之后,在回调函数中,把模型文件生成的三维对象,加入到场景容器box之中,加入之后场景中就会显示我们的三维对象,如下图所示:
      
      油井
      
      三维场景搭建
      
      创建Network3D对象,即可以创建三维场景对象,如下代码所示:
      
      const box = new mono.DataBox();
      
      const network =www.henxingyuLe.com  new TopoNetwork(box, null, 'monoCanvas');
      
      network.mode = 'editor';
      
      window.network =www.tdcqpt.cn network; // todo
      
      this.network = network;
      
      network.bindApp(this);
      
      network.setRenderSelectFunction((www.tainfengyue.cn) => false);
      
      make.Default.path = './static/myModellib/';
      
      network.setClearColor(0, 0, 0);
      
      network.setClearAlpha(0);
      
      const directionalLight = new mono.DirectionalLight(0x333333, 0.3);
      
      directionalLight.setDirection(new mono.Vec3(0, 1, 1));
      
      box.add(directionalLight);
      
      let pointLight =www.sangyulpt.com new mono.PointLight(0xeae5e1, 0.3);
      
      pointLight.setPosition(2000, 2000, 2000);
      
      box.add(pointLight);
      
      pointLight = new mono.PointLight(0xeae5e1, 0.4);
      
      pointLight.setPosition(-2000, 2000, 2000);
      
      box.add(pointLight);
      
      pointLight = new mono.PointLight(0xeae5e1, 0.3);
      
      pointLight.setPosition(2000, 2000, -2000) www.vxinptzc.cn;
      
      box.add(pointLight);
      
      pointLight = new mono.PointLight(0xeae5e1, 0.4);
      
      pointLight.setPosition(www.shentuylgw.cn-2000, 2000, -2000);
      
      box.add(pointLight);
      
      box.add(new mono.AmbientLight(0x888888));
      
      mono.Utils.autoAdjustNetworkBounds(
      
      network,
      
      document.querySelector(www.wangffzc.cn  '.app'),
      
      'clientWidth',
      
      'clientHeight',
      
      );
      
      拖拽模型生成场景
      
      从模型列表,把模型拖拽到三维场景对象上,即可以创建模型对象,如下图所示:
      
      拖拽生成场景
      
      在模型按钮上,需要监听drag 或者dragstart事件,这个被封装到一个独立的类Dragger.js里面,在该类中专门处理了dragstart事件:
      
      addDragger(parent, subClass, option) {
      
      parent.addEventListener('dragstart', (e) => {
      
      let target = null;
      
      //  拿到冒泡的所有元素
      
      const path = eventPath(e);
      
      for (let i = 0; i < path.length; i +www.javachenglei.com  1) {
      
      if (path[i].classList && path[i].classList.contains(subClass)) {
      
      target = path[i];
      
      break;
      
      创建管路
      
      在三维场景中,可以直接通过打点的方式创建三维管道,如下代码所示:
      
      let path = new mono.Path(pipePoints);
      
      path = mono.PathNode.prototype.adjustPath(path,www.muyuminzc2.cn 2, 2);
      
      const node = new mono.PathNode(path, 10, 3, 20);
      
      node.s(www.shundayLzc.cn{
      
      'm.type': 'phong',
      
      'm.side': 'both',
      
      'm.normalType': mono.NormalTypeSmooth,
      
      'm.color': '#E35944',
      
      'm.ambient': '#E35944',
      
      });
      
      this.network.getDataBox().addByDescendant(node);
      
      其中pipePoints是打点记录下的三维顶点。
      
      管路动画
      
      管路动画是通过管路贴图的offset属性,不断变化形成的动态流动效果,如下代码所示:
      
      node.animate = new mono.Animate(www.baihewpt.cn{
      
      from: pipeDirection === 'forward' ? 0 : 1,
      
      to: pipeDirection === 'forward' ? 1 : 0,
      
      dur: 1000,
      
      reverse: false,
      
      repeat: Number.POSITIVE_INFINITY,
      
      onUpdate(value) {
      
      node.setStyle('m.texture.offset', new mono.Vec2(value, 0));
      
      },
      
      });
      
      最终效果如下图:
      
      pipe_animate.gif
      
      整体效果
      
      通过研发编辑,最终的显示效果大致如下:
      
      all.gif
      
      还有更多效果本文并没有凸显出来, 有兴趣获取demo的,请发邮件到:
      
      terry.tan@servasoft.com

    展开全文
  • 三维力控组态软件.ppt

    2019-10-17 00:37:16
    三维力控组态软件ppt,控组态软件是对现场生产数据进行采集与过程控制的专用软件,最大的特点是能以灵活多样的“组态方式”而不是编程方式来进行系统集成。能同时和国内外各种工业控制厂家的设备进行网络通讯,达到...
  • ICONIS\GENESIS64_v10.95三维上位组态软件安装包,全球唯一的一款3D立体三维工控上位组态软件。资源为软件安装包
  • 应用蓝光软件的三维建模及可视化平台建立了王家岭煤矿井上下精细三维模型,应用真三维监测监控组态平台搭建了王家岭煤矿全矿井的三维虚拟场景,集成了各类监测监控子系统,完成了基于蓝光软件的王家岭煤矿三维组态平台...
  • 三维力控组态软件在水厂自动监控系统中的应用、电子技术,开发板制作交流
  • 针对煤矿提高生产能力的需求,通过三维力控组态软件和高速网络,进行了煤矿综合自动化生产平台的设计,基于组态软件和高速工业以太网对采煤各个过程进行综合自动化生产监控。系统的主要功能包括下位端PLC数据采集,...
  • 驿唐MD-309G连接三维力控组态软件的方法下载zip,驿唐DTU与三维力控组态软件连接方法
  • GENESIS64动态三维监控组态软件2D动画制作教程5flv,本视频主要介绍了美国爱康诺公司最新一代基于64位核心的GENESIS64监控软件中智能符号的使用。
  • GENESIS64动态三维监控组态软件2D动画制作教程3flv,本视频主要介绍了美国爱康诺公司最新一代基于64位核心的GENESIS64监控软件中图形对象效果的使用介绍。
  • GENESIS64动态三维监控组态软件2D动画制作教程4flv,本视频主要介绍了美国爱康诺公司最新一代基于64位核心的GENESIS64监控软件中如何制作一个仪表盘。
  • GENESIS64动态三维监控组态软件2D动画制作教程1flv,本视频主要介绍了美国爱康诺公司最新一代基于64位核心的GENESIS64监控软件中联合工具的使用介绍。ICONICS专门针对微软的Windows? Vista?和Windows Server 2008设计...
  • GENESIS64动态三维监控组态软件2D动画制作教程2flv,本视频主要介绍了美国爱康诺公司最新一代基于64位核心的GENESIS64监控软件中联合工具的使用介绍。ICONICS专门针对微软的Windows? Vista?和Windows Server 2008设计...
  • 针对三维组态软件图形用户界面组态过程复杂、人机交互不自然的问题,提出基于语义虚拟接口的三维用户界面组态方法.该方法通过建立虚拟场景建模本体,借助本体语义信息辅助进行三维用户界面组态人机交互.提出虚拟接口的...
  • 软件名称:三维力控组态软件V7.2/7.1/7.0 新版加密狗无限点全授权三维力控组态软件,USB加密狗,送教学!【V7.2 最新版】: 无限点,全功能, 支持WEB发布,含所有扩展组件温馨提醒:V7.2最新为 2017年10月25日官方...

    软件名称:三维力控组态软件V7.2/7.1/7.0 新版加密狗无限点全授权

    三维力控组态软件,USB加密狗,送教学!

    【V7.2 最新版】: 无限点,全功能, 支持WEB发布,含所有扩展组件

    温馨提醒:V7.2最新为 2017年10月25日官方发布的最新版,加密锁同时支持7.1、7.0的所有版本,支持官网同步更新!

    支持的操作系统:Win XP、2003、WIN8 WIN10  32位64位

    3b87dc45561c23b82291d93b5a127db3.gif

    c82218f6b96f92dbbceff32cc0365ced.jpg (89.38 KB, 下载次数: 105)

    2019-6-20 14:44 上传

    3b87dc45561c23b82291d93b5a127db3.gif

    123926o6wwwq4w38zwb990.jpg (62.36 KB, 下载次数: 85)

    2019-6-20 14:44 上传

    3b87dc45561c23b82291d93b5a127db3.gif

    131656n79bhqwzgxxgggll.jpg (113.76 KB, 下载次数: 76)

    2019-6-20 14:44 上传

    3b87dc45561c23b82291d93b5a127db3.gif

    123924rcng1z4ra7wacndm.jpg (51.14 KB, 下载次数: 71)

    2019-6-20 14:44 上传

    3b87dc45561c23b82291d93b5a127db3.gif

    123922d4rlcikyzhc6l42i.jpg (37.44 KB, 下载次数: 69)

    2019-6-20 14:44 上传

    3b87dc45561c23b82291d93b5a127db3.gif

    123920pcltslc9luseqkai.jpg (63.74 KB, 下载次数: 73)

    2019-6-20 14:44 上传

    3b87dc45561c23b82291d93b5a127db3.gif

    123918kz0dx43yvameluva.jpg (49.39 KB, 下载次数: 66)

    2019-6-20 14:44 上传

    3b87dc45561c23b82291d93b5a127db3.gif

    123916oyuu1z24ddzp3dpf.jpg (49.27 KB, 下载次数: 59)

    2019-6-20 14:44 上传

    3b87dc45561c23b82291d93b5a127db3.gif

    123913l2po5o2pe53oyfqq.jpg (48.61 KB, 下载次数: 61)

    2019-6-20 14:44 上传

    灵活方便的开发环境

    提供集成化的设计环境,各种图库及组件支持自定义属性、方法、事件;

    支持工程屏幕分辨率的自适应,支持一机多屏配置;

    提供上千种丰富的图形元素,具备丰富的“矢量”行业图库集,支持自定义图库;

    各种图元对象具备多个图层,通过脚本可灵活控制各图层的显示与隐藏,方便画面制作;

    采用了GDI+绘图技术,用户可以实现图元的各种阴影和过渡色的填充,使图形的渲染更出色,界面的展示更美观;

    与.net技术无缝集成,支持WPF和WCF技术构建3D图形对象组件;

    强大的ActiveX控件对象容器,定义了全新的容器接口集,通过“脚本”可直接操作容器,调用对象的方法、属性,方便系统的集成。

    可靠的工业通讯设计

    支持通过RS232、RS422、RS485、电台、电话轮巡拨号、以太网、移动GPRS、CDMA、GSM、zigbee网络等方式和远程现场设备进行通讯。

    支持与设备采取主从、主主、从主等多种交互机制来进行通讯,支持断线重连和续传,通讯故障后具备自动恢复功能。

    支持3000个以上的IO通讯驱动程序,支持与国内外主流的PLC、SCADA软硬件、DCS、PAC、IPC等设备的通信与联网。

    支持IO通信多“进程”调度模式,根据实际需要可自由选择与分配信道与设备的数量。

    支持断线重连和续传,通讯故障后具备自动恢复功能,软件支持通讯事件的记录与存盘。

    完整的冗余与容错技术

    支持控制设备和通道冗余,支持标准的RS232、RS485、以太网的通道冗余方式,支持控制系统的“软冗余”和“硬冗余”,支持监控服务器的双机热备与监控网络的冗余。全新的多进程和多线程网络通讯调度机制使通讯效率更高、速度更快。

    ★设备与链路冗余

    提供完整的I/O设备和链路冗余,如典型的S7-300的软冗余与s7-400H型的硬冗余,当设备与链路出现故障时自动地进行切换设备和链路来保证系统的稳定。

    ★监控服务器及网络冗余

    支持双机冗余及热备,支持集群。当冗余主站出现故障后,备用站能够接替主站来操作,远程c/s网络客户端自动切换,并且支持不同网段的多重监控网络的切换。

    协同方式的的可视化工具

    软件提供丰富的功能复合组件,复合组件通过后台标准化接口能够实现多个组件间的内部对象化操作,来完成几个组件的协同工作,组件具备丰富的方法、属性,通过脚本可灵活的进行控制,也提供标准的趋势曲线模板方便快速实现工程制作。

    提供了“类EXCEL”操作方式的报表工具,向导方式制作常见生产报表(日报表、月报表、年报表等),也可灵活的制作各类复杂格式报表,完成对实时、历史和统计数据的查询、显示、打印和输出。

    提供多种分析曲线组件,包括趋势曲线、XY曲线、温控曲线、饼图、棒图、温控曲线等,曲线和报表组件不仅可以展现力控实时历史数据库的数据,而且可以与典型的如MySQL、SQL Server、Oracle、 Access等关系数据库进行数据访问与查询。

    分布式报警架构

    提供分布式的报警构架,具备强大的报警存储、统计、分析、显示、查询、事件触发、打印等功能,并可以和语音、视频、多媒体进行联动,来完成一个大型生产报警管理系统。

    采用树形结构的区域及报警组对象方式进行管理报警,支持网络报警及操作事件的数据断线存储,并具备自动恢复功能。

    支持全方位的报警通知,包括声音报警、语音报警、E-mail 或短信报警、逐行打印报警、Modem语音拨号报警等。

    强大的编译及运算引擎

    面向对象设计的脚本编译环境,“所见即所得”,支持脚本在线调试;

    类“Basic”的语言环境,提供面向对象编程方式,实现从简单的数字计算到用于高级控制的算法的功能;

    脚本类型和触发方式多样,支持条件动作、数据变化动作、窗口动作、循环动作等;

    变量支持间接寻址功能,系统内置间接变量、中间变量、数据库变量等多种变量方式。

    高度同步的Web网络发布

    具备独立的Web服务器,力控Web Server实现了服务器端与客户端画面的高度同步,Web页面自动适应服务器工程分辨率,Web客户端与网络服务器的实时数据传输采用事件驱动机制、变化传输方式,IE“瘦”客户端显示的监控数据具有更好的实时性。

    Web通讯的负载均衡使系统具备高容量的数据吞吐能力和良好的健壮性,保证几百个Web客户端的并发访问。

    软件提供Web方式的ActiveX控件进行网络发布,可通过内部的脚本函数输出信息给外部调用者来完成Web方式的信息集成,也支持第三方的ActiveX控件进行Web发布。

    包含产品:软件安装DVD光盘+USB加密锁+赠送教程

    a780836abadce584364084830d9ca14e.gif

    2019-6-20 14:45 上传

    点击文件名下载附件

    阅读权限: 255

    下载积分: 享银 -2

    展开全文
  • 一个很好的组态软件开发范例。学习了它,你就知道三维组态软件的开发了。
  • 介于 2D 组态和 3D 组态上,Hightopo(以下简称 HT )的 HT for Web 产品上的有着丰富的组态化可供选择,本文将介绍如何运用 HT 丰富的 2/3D 组态搭建出一个飞机航行的监控系统的解决方案。 预览地址:flight-...

    前言

    在飞机航行的过程中,客舱里座位上方的荧屏上,除了播放电视剧和广告之外,还会时不时的切换到一个飞机航行的监控系统。这个监控系统的主要目的是,让乘客可以了解到飞机在航行过程中的整体状况、距离目的地的航线进程以及一些有可能出现的突发事件。飞机航行的监控系统在一定程度上,可以使乘客在旅途过程中得到准确的信息源,最重要的是可以使乘客在旅途中得到安心。在保障乘客获取到实际信息源的同时,飞机航行的监控系统也能将采集到的数据及时的反馈给航务人员,而且将数据记录保存下来,在飞机过站或航后供航务和机务人员使用和监测维护。介于 2D 组态和 3D 组态上,Hightopo(以下简称 HT )的 HT for Web 产品上的有着丰富的组态化可供选择,本文将介绍如何运用 HT 丰富的 2/3D 组态搭建出一个飞机航行的监控系统的解决方案。

    预览地址:flight-monitor

    系统分析

    飞机航行监控是一种测量、跟踪飞机性能变化趋势的简单而实用方法。在日常航班飞行中,用机载仪表记录飞机巡航时的有关参数,并将其与原有性能进行比较。监控的主要参数有:飞行单位时间消耗的燃油量、飞机的巡航飞行速度和消耗单位燃油量飞机飞过的水平距离。它们分别表示发动机、飞机及飞机发动机的综合性能。它们分别表示发动机、飞机及飞机发动机的综合性能。性能监控的结果,既可为飞机维修提供可能的故障信息,又为制定飞行计划提供可靠的性能依据。

    目前,先进的喷气运输机都已安装飞行状态监控系统,它记录下有关参数值,并存储在数据管理装置中,这些数据可以发送到或在飞机着陆后送到地面站,用专用计算机程序进行计算和修正,使性能监控数据采集、发送、计箅分析工作自动化,节省了人力,提高了精确度。

    1、飞行数据记录器:自从飞行数据记录器 FDR(Flight Data Recorder)“俗称黑匣子”诞生以来,其提供的详实准确的飞行数据为事故调查、机务维护保障、安全运营监控提供了重要依据,成为航空安全运营的重要管理手段。

    2、ACMS(Aireraft Condition Monitoring System)的系统概述:ACMS 系统是飞机上安装的先进机载数据采集和处理系统,它能以实时方式收集数据,对发动机状态和飞行性能进行监控以及进行特殊的工程调查。由飞机通信寻址与报告系统(ACARS)通过地空数据链发送到地面接收站,最后传送到航空公司的终端,也可通过快速存取记录器(QAR)将数据记录保存下来,在飞机过站或航后供航务和机务人员使用。

    而 HT 实现的业务功能可以通过ACMS 系统采集到的数据,对接到显示终端去展示,通过实时监测的数据准确地显示出来,起到对飞机状态的监控功能并即时反馈信息数据的变化。

    实现过程

    云中穿行效果

    为了达到飞机云中穿行的效果,最开始我遇到的问题是飞机飞行的层次感,也就通常所说的透视效果,这里我采用的是云通道和云背景以不同的速度流动,制造一种飞行的透视效果。

    云我采用的是贴图的方式呈现的,但是仅仅是贴图会遮挡天空和飞机,非常影响飞机飞行的观感,所以我开启了相应图元的transparentopacity,云背景和云通道设置不同的透明度,不仅增加了层次感,还会让人产生云朵从眼前飘过的错觉。

    云通道采用的是ht.Polyline类型,通道缩放拉大了 Y 轴的比例,使云通道有更大的纵向空间,设置reverse.flip背拷贝使云通道内部也显示出贴图,仿佛让飞机置身于云海中穿梭;云背景采用ht.Node类型,只设置一个面显示充当云背景。

    整体的云流动效果采用offset偏移实现,改变相应图元或相应图元面的贴图偏移量来达到飞机云中穿行的效果, 代码如下:

    var i = 1,
        p = 0;
    setInterval(() => {
        i -= 0.1; p += 0.005;
        clouds.s('shape3d.uv.offset', [i, 0]);
        cloudBackground.s('all.uv.offset', [p, 0]);
    }, 100);
    

    升降颠簸效果

    虽然达到了飞机云中穿行的效果,但是如果飞机只是直直的飞行,那也会降低飞行的实感,相信坐过飞机的朋友肯定都遇到过因气流产生的颠簸,也经常感受到飞机飞行途中的爬升和下降,这其实是因为飞机的航线并不是一直固定在一个高度上,有时会爬升有时会下降,所以我就用ht-animation.jsHT 动画扩展插件去实现飞机颠簸效果,代码如下:

    dm.enableAnimation(20);
    plane.setAnimation({
        back1: {
            from: 0,
            to: 160,
            easing: 'Cubic.easeInOut',
            duration: 8000,
            next: "up1",
            onUpdate: function (value) {
                value = parseInt(value);
                var p3 = this.p3();
                this.p3(value, p3[1], p3[2]);
            }
        },
        //...省略相似
        start: ["back1"]
    });
    

    球扇形视角限制

    飞行效果完善之后,这时我就遇到了一个比较棘手的问题,因为实际上虽然看着飞机是在云海中穿梭,但是仅仅是在通道中飞行,背景其实也只是平面贴图,所以当视角到达某种程度的时候就会有强烈的违和感和不真实感,就需要一个视角限制,使视角的调整刚刚好在一个范围内。

    视角限制的话一般是限制 g3d 的 eyecenter ,不太了解的朋友可以去看 hightopo 官网中的 3d 手册,里面有详细的说明,这里我就不再赘述了;因为视角范围的关系,所以我决定固定center的位置,代码如下:

    g3d.addPropertyChangeListener(e => {
        // 固定中心点
        if (e.property === 'center') {
            e.newValue[0] = center[0];
            e.newValue[1] = center[1];
            e.newValue[2] = center[2];
        }
    }
    

    然后再把eye限制在某一个范围内就大功告成了,然而这里却并不是那么简单,最开始我把eye限制在一个立方体的空间内,但交互效果很不理想,考虑到 g3d 默认交互中,鼠标拖拽平移视角变换时,实际上eye是在一个以center为球心的球面上运动的,所以我决定从这个球中挖出来一块作为eye的限制空间,也就是球扇形,不太理解的朋友可以参考这个图:

    球扇形视角限制,一共需要三个参数,分别是中心参考轴、中心轴和外边所成角度、所在球限制半径,其中中心参考轴可根据初始eyecenter的连接延长线确定,所在球限制半径又分最大限制和最小限制,代码如下:

    function limitEye(g3d, eye, center, options) {
        var limitMaxL   = options.limitMaxL,
            limitMinL   = options.limitMinL,
            limitA      = options.limitA;
    
        g3d.addPropertyChangeListener(e => {
            // 固定中心点
            if (e.property === 'center') {
                e.newValue[0] = center[0];
                e.newValue[1] = center[1];
                e.newValue[2] = center[2];
            }
            // 限制视角
            if (e.property === 'eye') {
                var newEyeV = new ht.Math.Vector3(e.newValue),
                    centerV = new ht.Math.Vector3(center),
                    refEyeV = new ht.Math.Vector3(eye),
                    refVector = refEyeV.clone().sub(centerV),
                    newVector = newEyeV.clone().sub(centerV);
    
                if (centerV.distanceTo(newEyeV) > limitMaxL) {
                    newVector.setLength(limitMaxL);
                    e.newValue[0] = newVector.x;
                    e.newValue[1] = newVector.y;
                    e.newValue[2] = newVector.z;
                }
                if (centerV.distanceTo(newEyeV) < limitMinL) {
                    newVector.setLength(limitMinL);
                    e.newValue[0] = newVector.x;
                    e.newValue[1] = newVector.y;
                    e.newValue[2] = newVector.z;
                }
                if (newVector.angleTo(refVector) > limitA) {
                    var oldLength = newVector.length(),
                        oldAngle  = newVector.angleTo(refVector),
                        refLength = oldLength * Math.cos(oldAngle),
                        vertVector,
                        realVector,
                        realEye;
    
                    refVector.setLength(refLength);
    
                    newEyeV = newVector.clone().add(centerV);
                    refEyeV = refVector.clone().add(centerV);
                    vertVector = newEyeV.clone().sub(refEyeV);
                    vertLength = refLength * Math.tan(limitA);
    
                    vertVector.setLength(vertLength);
    
                    realVector = vertVector.clone().add(refEyeV).sub(centerV);
    
                    realVector.setLength(oldLength);
    
                    realEye = realVector.clone().add(centerV);
    
                    // 防止移动角度大于 180 度,视角反转
                    if (oldAngle > Math.PI / 2) {
                        realEye.negate();
                    }
    
                    e.newValue[0] = realEye.x;
                    e.newValue[1] = realEye.y;
                    e.newValue[2] = realEye.z;
                }  
            }
        })
    }
    

    飞机监控系统

    当然作为监控系统,自然要有监控了,增加右下角的小地图,并提供三种模式,分别是聚焦飞机,聚焦飞行轨迹和聚焦地图,并根据飞机的飞行方向控制飞行轨迹的流动效果,其中聚焦飞机会跟随飞机移动进行fitData,使飞机一直处于小地图的中心,代码如下:

    var fitFlowP = function (e) {
        if (e.property === 'position' && e.data === plane) {
            mapGV.fitData(plane, false);
        }
    };
    buttonP.s({
        'interactive': true,
        'onClick': function (event, data, view, point, width, height) {
            map.a('fitDataTag', 'plane2D');
            mapGV.fitData(plane, false);
            mapDM.md(fitFlowP);
        }
    });
    buttonL.s({
        'interactive': true,
        'onClick': function (event, data, view, point, width, height) {
            mapDM.umd(fitFlowP);
            map.a('fitDataTag', 'flyLine');
            mapGV.fitData(flyLine, false);
        }
    });
    // ...省略
    

    在这里插入图片描述

    增加鼠标移到飞机相应位置进行名称的提示、双击后显示飞机相应位置的信息面板并将视角聚焦到面板上、点击飞机任意地方切换回飞机飞行模式等效果。

    左侧增加监控面板替代上面提到的双击相应位置这步操作直接聚焦到相应位置的信息面板上,这里按钮开启了交互并添加了相应的交互逻辑,代码如下:

    button_JC.s({
        'interactive': true,
        'onClick': function (event, data, view, point, width, height) {
            event.preventDefault();
            let g3d = G.g3d,
                g3dDM = G.g3d.dm();
            g3d.fireInteractorEvent({
                kind: 'doubleClickData',
                data: g3dDM.getDataByTag(data.getTag())
            })
        }
    });
    //...省略
    

    天空渲染效果

    既然是监控系统肯定是 24 小时无差别的监控,这就涉及到一个问题,我总不可能半夜的时候飞机也从瓦蓝瓦蓝的天空上飞过,这就很欠缺真实性了,所以要有一个天空从亮到暗再从暗到亮的过程,这个过程我暂定到 06:00-06:30 和19:00-19:30 这两个时间段。

    天空采用的是shape3d : 'sphere’球形,包裹整个场景,然后使用reverse.flip背拷贝 和blend染色,之后天空就可以渲染成我想要的颜色,如果按照时间改变天空明暗只要改变染色值就可以了。

    但是由于白天和晚上光照情况的不同,云反射光的强度也不同,就导致了白天和晚上云的差异,所以也要调整云道和云背景的贴图的opacity透明度,晚间更为透明度,代码如下:

    if ((hour > 6 && hour < 19) || (hour == 6 && minutes >= 30)) {
        timePane && timePane.a({
            'morning.visible': false,
            'day.visible': true,
            'dusk.visible': false,
            'night.visible': false,
            'day.opacity': 1
        })
        skyBox.s({
            "shape3d.blend": 'rgb(127, 200, 240)',
        })
        cloudBackground.s({
            "back.opacity": 0.7,
        })
        clouds.s({
            "shape3d.opacity": 0.7,
        })
    } else if ((hour < 6 || hour > 19) || (hour == 19 && minutes >= 30)) {
    //...省略
    } else if (hour == 6 && minutes < 15 ) {
    //...省略
    } else if (hour == 6 && minutes >= 15 && minutes < 30) {
    //...省略
    } else if (hour == 19 && minutes < 15) {
    //...省略
    } else if (hour == 19 && minutes >= 15 && minutes < 30) {
    //...省略
    }
    


    这里我还增加了对右上角时间面板时间状态图标的支持,并增加了图标切换时的渐隐渐显效果,同时给时间面板状态图标位置增加了点击切换到下一时间状态的功能。

    为了演示效果我增加了时间倍速按钮,下图是 500 倍时间流速下的变化情况:

    总结

    身处大数据时代的我们,在网络科技发展越来越快的环境下,迎来了 5G 的新征程和工业4.0的新变革,在信息数据采集传输和数据可视化系统的融合下,可以发掘出许多行业管控可视化系统的解决方案。而 HT 长久以来一直致力于多样化行业系统可视化的搭建,涉猎的技术行业所累积的经验,通过自主创新研发的技术产品,已经打造出许多行业上具有代表性意义的可视化管控系统,例如同样有关于飞机的监控可视化系统:无人机 3D 可视化系统

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hvYQGzq8-1591092123840)(https://img2020.cnblogs.com/blog/1496396/202006/1496396-20200601185137243-2111613258.gif)]

    2019 我们也更新了数百个工业互联网 2D/3D 可视化案例集,在这里你能发现许多新奇的实例,也能发掘出不一样的工业互联网:https://mp.weixin.qq.com/s/ZbhB6LO2kBRPrRIfHlKGQA

    同时,你也可以查看更多案例及效果:https://www.hightopo.com/demos/index.html

    展开全文
  • 山东建筑大学硕士学位论文 摘 要 近年来随着信息技术通信技术数据库技术BIM 技术等的快速发展对于建 筑运维管理的要求也越来越高在智能建筑领域出现了各种功能性强集成度高的智 能建筑设备对于如何充分地将这些智能...
  • HT 提供的 ht.Shape 是极其强大的图元类型,其在 GraphView 和 Graph3dView 组件上都能展示出各种二维和三维的形状效果, 其扩展子类 ht.PolyLine 可实现三维空间管道的功能,我们可以通过 ht.PolyLine 绘制出流程所...

    前言

    在网络迅速发展的今天,人们的交流已经不再仅限与面对面,一个视频通话就能拉近彼此之间的距离,而在工业管控上却不仅仅局限于实时视频流的监控,HTML 本身拥有强大的 web 组件可供我们去实施一些好玩的例子,甚至加上一些简单有趣的动画和实时数据的对接,效果上可不止提高了一个水平。加上现如今已经启动许久的 工业4.0 衍生出的新一代 工业互联网 和不久才面世于众的5G新时代,数据可视化与网络带宽发展的碰撞,激发出了一代 3D 数据可视化监管的发展。而 Hightopo(以下简称 HT )的 HT for Web 产品上的 web 组态提供了丰富的 2D 组态3D 组态 效果,可以根据需求快速实现一套完整的数据可视化系统。本文将通过一个 HT 的 3D 组态 实现的一个可视化分布式能源站系统带你走进丰富的组态的大门。

    界面简介及效果预览

    场景搭建上我们呈现了以热、电、冷联供为主要形式的多联产系统的分布式能源站系统,根据管道流动传递的流程步骤下,有效地实现了能源的梯级利用的展示效果:

    在这里插入图片描述

    代码实现

    在能源站的建设中,分布式能源站是指小规模化、利用热、电、冷联供为主要形式分布于负荷附近的清洁环保发电设施,是一种相对可靠又高效的发电形式。

    3D 场景实现上通过创建 ht.graph3d.Graph3dView 来呈现 3D 的内容,3D 视图组件进行 deserialize() 反序列化对应的 json 呈现出 3D 场景内容,然后将 3D 组件再加入到 body下的方式实现场景的加载渲染的效果。还可以自定义修改一些交互或者视角上的限制,如修改左右键的交互方式或者设置场景的最大仰角,都能使用户在交互体验上更为流畅。

    // 创建三维拓扑视图
    this.g3d = new ht.graph3d.Graph3dView();
    this.g3dDm = this.g3d.dm();
    // 将 3D 组件加入到 body 下
    this.g3d.addToDOM();
    // 修改左右键交互方式
    let mapInteractor = new ht.graph3d.MapInteractor(this.g3d);
    this.g3d.setInteractors([mapInteractor]);
    // 修改最大仰角为 PI / 2
    mapInteractor.maxPhi = Math.PI / 2;
    

    为了能在悬浮建筑模型的时候,视觉上有交互体验,这里设置了模型的高亮模式。
    在这里插入图片描述

    // 设置鼠标悬浮高亮模式
    this.g3d.setHighlightMode('mouseover');
    // 设置高亮颜色
    ht.Style['highlight.color'] = '#FEB64D';
    

    场景渲染加载出来后,我们就能对于分布式能源站的工业流程可以通过管道的动画来展示。HT 提供的 ht.Shape 是极其强大的图元类型,其在 GraphView 和 Graph3dView 组件上都能展示出各种二维和三维的形状效果, 其扩展子类 ht.PolyLine 可实现三维空间管道的功能,我们可以通过 ht.PolyLine 绘制出流程所经的路径,通过 ht.Default.startAnim() 动画函数去执行调用变化管道上的 uv 贴图的偏移值,就可以达到流动的效果。

    在这里插入图片描述
    实现的代码如下:

    animflow() {
        // 动画执行函数
        ht.Default.startAnim({
            duration: 2000,
            easing: (t) => { return  t },
            action: (v, t) => {
                // 通过数据模型获取唯一标识 tag 得到管道节点设置 uv 偏移流动动画
                this.g3dDm.getDataByTag('flow1').setStyle('top.uv.offset', [ v, 0 ]); 
                this.g3dDm.getDataByTag('flow2').setStyle('top.uv.offset', [ v, 0.5 ]);
                this,g3dDm.getDataByTag('flow3').setStyle('top.uv.offset', [ -v, 0.5 ]);
                ...            
            },
            finishFunc:  () => {
                animflow();
            }
        });
    }
    

    而场景中呈现出来的数据,我们可以通过对接一些主流的接口,例如 ajaxaxios或者是 WebSocket,根据自己对接交互的需求,可以判断采用轮询调用接口或者是对接双向进行数据传输,起到实时刷新数据的需求,而数据的载体可以对接到 HT 的 3D公告板 billboard 上进行展示:

    在这里插入图片描述
    billboard 同样是基于 ht.Shape 的子类,对于 Shape 不管是在 2D 组态或者是 3D 组态上呈现,都可以通过一些定义的属性 styleMap 来设定一些本身自带的属性值,当然用户也可以自己通过在 attrObject 里设定一些自定义属性。而分布式能源站中,我们通过对 billboard 设定了一些属性值来控制公告板的属性信息:

    let billboard = new ht.Node();
    billboard.s({
        // 设定 shpe3d 的类型为公告板 billboard
        "shape3d": "billboard",
        // 设置公告板的图片 image
        "shape3d.image": "symbols/htdesign/box/panel.json",
        // 设置公告板始终自动旋转面对屏幕
        "shape3d.autorotate": true,
        // 设置公告板开启透明
        "shape3d.transparent": true,
        // 设置公告板不可移动
        "3d.movable": false,
        // 设置公告板始终置顶
        "shape3d.alwaysOnTop": true,
        // 设置公告板不可选中
        "3d.selectable": false,
        // 公告板开启缓存
        "shape3d.image.cache": true
    });
    

    如果贴图是矢量,对于开启了缓存的公告板,性能上会大大提高。对比一下这个 例子,你会发现缓存机制上性能的差异性。由此看出,缓存机制对于整体场景的流畅度是至关重要的,对于一些不必要实时刷新的面板信息,我们可以采取缓存的方式,并且在下一次更新的时候调用 Graph3dView.invalidateShape3dCachedImage(node)来手动刷新这个节点,从而大大提高了场景的性能:

    g3d.invalidateShape3dCachedImage(billboard);
    

    总结

    历经了2018的工业互联网元年和2019的 5G 元年,不止是分布式能源站可视化系统的呈现,工业互联网在管控方面将迎来了新时代。为了给精彩的 HTML web 组态添加上绚丽的颜色,HT 在 2D 组态3D 组态 上不断地完善,可以通过 2/3D 融合的场景与图纸搭建出一个个好玩的可视化系统。而作为在 3D 组态上可以呈现出多样化效果下搭建的可视化系统场景,传统上一些数据可视化的工艺流程同样能通过 2D 组态来实现:换热站远程监控系统

    2019 我们也更新了数百个工业互联网 2D/3D 可视化案例集,在这里你能发现许多新奇的实例,也能发掘出不一样的工业互联网:https://mp.weixin.qq.com/s/ZbhB6LO2kBRPrRIfHlKGQA

    同时,你也可以查看更多案例及效果:https://www.hightopo.com/demos/index.html

    展开全文
  • 组态软件

    千次阅读 2018-11-08 00:46:26
    组态软件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 736
精华内容 294
关键字:

三维组态软件