收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

用科技建设海洋强国:海上风力发电场三维可视化管理平台

[复制链接]
9 g9 E; M9 ?2 ]. J
, O# D6 n3 j, C+ z' M6 \

前言

: o0 W5 |. ^. s: n4 y7 B4 Q
6 }( q L8 |1 X5 y
6 g! C8 q( @- |5 z( r

我国是一个海洋大国,拥有漫长的海岸线、辽阔的管辖海域和丰富的海洋资源。党的十九大报告明确提出:“坚持陆海统筹,加快建设海洋强国”。从海洋大国到海洋强国,符合我国发展规律、世界发展潮流,是实现中华民族伟大复兴“中国梦”的必然选择。

4 l# r& X, F/ ]
( C) C, h$ U7 j G! W
# i( E3 ~5 S% ` v$ }

风能,作为一种清洁无公害,取之不尽,用之不竭的可再生资源,非常适合用来发电。我国风能资源丰富,可开发利用的风能储量约为 10 亿千瓦,其中海上可开发和利用的风能储量达到了 7.5 亿千瓦。依托于丰富的海洋风能资源,加快海上风电项目的建设和发展,对加速沿海地区的能源转型,推动地方经济发展,提升沿海地区的生态环境,推动风电技术进展和产业升级,促进能源结构调整具有重要的意义。因此,海上风力发电场应运而生。

& W; [8 E. H8 w9 d o) |: }
. x& r1 G/ q( N
# a% h2 t( B8 F* A. z& |

介于 2D 组态和 3D 组态上, Hightopo (以下简称 HT) 的 HT for Web 产品拥有丰富的组态化可供选择。文章将介绍如何运用 HT 丰富的 2D/3D 组态搭建出一个海上风力发电场的解决方案,希望能够抛砖引玉,给大家带来更多海上风电场的思考和讨论。

/ @% U2 S: H O3 V
% k; p1 d+ B7 g3 j! V
3 S. Y7 S; w" r Q3 u/ O

界面简介及效果总览

' j3 l8 @! n& y; v3 K
" y1 N) _, }+ |. `
. i5 X* f8 Z4 {' f
0 Z4 T# t2 D; V2 w
4 \+ c% X$ E0 f* @% g; Q
m( q4 C" R# ? g. U+ e. Z

Demo 主页面中展示了海上风电场的基本构成,包括一定规模数量的风电机组,输电系统和升压台。风电机组有序排放,叶片随风向和风速不停转动,将海洋上丰富的风的动能经过一系列转换,转化为宝贵的电能输出;每个风电机节点产生的电能经过输电系统源源流动,如同水流般汇聚于海上风电场的“心脏”——升压台。

# e8 D2 d' N& M5 T
: D: w1 }$ B* X+ d) d1 w) F/ w/ N" s
9 ?! t7 h4 a' Y1 j
. J- A0 _, U# n
' a- J2 V' F9 N( E
: Z9 R* U2 x, D

点击风机叶片,可以进入叶片的微观世界,以微观视角看风机的详细信息,包括风机参数,环境参数,发电信息和故障信息等。场景的搭建采用 HT 自主研发的基于 HTML5 的 2D/3D 渲染引擎完成,其中的动画和人机交互也是基于自主研发的组件,依托于 JavaScript 和 HTML5 完成。

, b, Y8 p- r, V; E
\* s$ Q8 }" u! e0 |# n3 F
& m$ O9 G3 h5 v

实现过程

1 j8 X9 z( I/ K3 o
' W8 V+ ^, S5 T( U- w; j, r3 t
1 D4 X* {' J% ` k% G

场景加载

$ A. v; l& B) j& h! g: @2 C
8 U& m+ i a! d+ {( I, h5 ~
5 d. w; {8 J" [! x8 A, R2 \! z, u

在前面部分,文章提到本案例的场景都是通过自主研发的渲染引擎完成,那么搭建好的场景如何通过代码加载,呈现给用户呢?在 HT 中,我们通过 ht.graph.GraphView 和 ht.graph.Graph3DView 分别来呈现 2D 和 3D 场景,然后通过反序列化完成场景的加载。

( H5 c& Z2 t6 c" w/ p
8 r0 I/ Y+ O% s+ O
+ G- l. G+ v& `6 E5 J. ~! ? L+ D+ {

开场动画

9 l- A5 G/ [: j
. W+ I% f; c0 j; W* O* Z
+ l! A$ _, v+ C9 E+ E3 x6 Q" [
2 Y( G4 {' i( G1 i+ }
# n, `7 s' P" T2 J. \! J( A
h! V) F& f( L1 C$ H& ^; O( f

本案例的开场动画相对比较简单,动画的核心机制是使用了 HT 内部封装的动画函数 ht.Default.startAnim(),通过启动一个动画对象来使整个动画运行起来。

7 R& n& Q. H. f b; D$ q
' E0 S% J! ?- G8 @! b
4 ]4 w4 f$ S( x; w

ht.Default.starAnim() 支持 Frame-Based 和 Time-Based 两种方式的动画,Frame-Based 的方式是用户通过指定 frames 动画帧数,以及 interval 动画帧间隔参数来控制动画效果,而 Time-Based 的方式是用户只需要指定 duration 的动画周期的毫秒数即可,HT 将在指定的时间周期内完成动画;还设定了 delay 动画延迟执行的时间来搭配动画实现的效果;easing 参数则是用于让用户自定义函数,通过数学公式控制动画,如匀速变化、先慢后快等效果;action 函数的第一个参数 v 代表通过 easing(t) 函数运算后的值, t 代表当前动画进行的进度 [0, 1],一般属性变化根据 v 参数进行。

* Q# L5 s9 }# o" [! _
: A' Z9 E- e$ P6 S
+ H8 J& e# G0 k8 [3 \' b/ R$ v

finishFunc 参数代表动画结束后的动作。action 函数和 finishFunc 动画结束回调函数,通过一些效果的搭配使用,可以使用户达到平滑的动画效果。

/ N* ~6 Q+ h: }& ^$ L+ X
$ S' Q9 r- T6 R; M- c" r& K
- N1 y. T/ E$ B3 D+ F9 k

本案例的开场动画通过设置起始和终止视角的位置,在一定周期内, 使用 setEye(eye) 来完成视角的变化。

9 f6 d% j3 \- c0 i- C
8 u9 Q, O4 D* `
8 `& M. O4 c( F2 f6 l

实现价值

% Y& ?' I" K0 U' }7 i
* R" g( i' m7 H
# C7 Z% b8 A2 P; p s

风电机组:

s$ J, x9 n5 k c9 C
1 V: P6 w# v( Y3 q2 E$ J1 f& i# `
& V1 Y, K3 I6 B% P" b+ ?6 u1 ]

随风而动,将海上风能转化为电能

" O: O+ J: {! w+ X# i( j/ g
8 N1 ]6 s4 j% `3 y# J
4 x+ Q: O1 n! ^* P% V
0 B7 p, Q0 |5 {. q
D9 a; ~/ c+ @5 w# U
4 R+ A \6 v0 S5 i1 t- l: n3 S$ {

在海上风电场项目中,风电机组的数量都是具有一定规模的,这些风电机组收集海上丰富的风能,转化为人类所需的电能。那对于这些一定规模数量的风电机组,如何保证其运行的流畅性呢?本案例使用了 HT 提供的批量 (batch)提高系统性能。

' U8 a6 _& ?) Q) n
# \7 d4 M6 e0 \: ^3 u+ ]4 k
. Z3 ~- ?7 ]/ s" v0 b

批量的原理即如果图元一个个单独绘制模型时性能较差,但是当一批图元聚合成一个大模型进行一次性绘制时,则会极大提高 WebGL 的刷新性能。批量的使用方法是先通过 ht.Default.setBatchInfo 函数全局注册批量,再对 Data 使用 .s(batch, batchName) 设置对应的 batch 批量名。流程如图所示:

7 J4 Y$ b- C* m( K, r; t% V
0 Z% N- W" l) n+ a0 f2 f
) H& [5 `" i5 f4 m
" F, A# c8 H+ Z7 e& Q7 Q
4 p: _% I+ w0 c7 \: k
& V' t) V, i6 X! U
, K0 ~+ h# V4 ~3 p" D7 K# K
x9 C) U/ }/ |9 A1 t7 X
, P, L, ?1 W/ a8 e

在本案例中,每个风机模型被分为三部分,标签部分1,叶片部分2 和 主体部分 3。在上面图示的 batch 流程中,可以发现只对标签部分 1 和 主体部分 3 应用了 batch 操作,但是没有对主体部分 2 运用 batch。这是因为叶片部分需要随风转动,其属性会发生频繁变化,在 batch 里面的图元尽可能避免频繁的变化,如果属性频繁变化,将可能起到反作用。

! n' M& A; l; W# U
5 s% l0 }+ m6 n# ?+ a
# m" D8 Q+ ]5 K6 E* l; E! P H

风电机的详细信息:

2 I3 X7 r# d/ |( W9 ^3 v
7 a. z& W4 `* T% N) b+ }( D) U
) ^* z* R" N. z: D

进入微观视角,将风电机的一切尽收眼底

2 R$ N- Q$ J* h2 s1 G4 ]/ i
3 ]- d( q a( q2 W2 W
# j; b8 W; ]& \; u, Y# X7 R
/ L. N9 I! c9 @
3 U& L& w7 [4 ~* @% o
+ M- T, M7 L2 ~8 t

点击每个风电机的叶片,都能打开风电机的详细页面。在此场景中,我们采用了科技线框风格来展示风电机的内部架构,相对于大部分的实景搭建,感官上更为震撼和炫酷。在展示风机内部结构的同时,两侧还展示了该风机周围的环境参数,海上风向风速信息,风机本身的数据监测,发电参数等。点击风电机的某个部位,可以看到以 billboard 样式展示的详细信息。

9 Z8 G+ l5 H# d1 ~
" Q. S3 j2 x2 k# [
& n6 F9 p6 i7 |4 P

输电系统:

4 z0 W4 c4 R2 P8 ~1 N2 z
( }% H d( ]( A3 k1 ~# H
8 I$ O3 h! v) j# M! M v2 [

不辞劳苦,将电能源源不断地输送给升压台

" i4 s( V5 ~5 P% |4 `+ \# U; W% x
0 C: O) R8 G* G+ d
) Q! D2 E* U6 X( D% b

经过风电机转换而来的电能,通过输电系统源源不断地输送给升压台,如同涓涓细流汇入大江大河。在本案例中,输电系统是使用空间管线 ht.polyline 实现的,ht.polyline 继承于 ht.shape, 支持{x: 10, y: 20, e: 30}格式的三维空间点描述。 ht.polyline 的走向由 points 和 segments 决定。案例中的流动效果是通过使用 setInterval 方法来不停地动态改变管线的 top.uv.offset 属性来实现。

% f9 x4 X0 {! Q6 a
, A9 d5 _- B5 \$ k8 K
" _& M0 ?5 L+ n

在本案例中,输电系统的管道也是数量庞大的,因此也采用 batch 实现。其流程如图所示:

+ B# l! J* D$ a2 }+ P4 Q4 q! N
. a* D& _! t* `% Y `9 I
m4 K# K2 ^9 g8 z0 V" P
% E; @$ }' u6 k9 E
/ ]- H. Z8 e9 J5 K' m% K# m. u
3 S- H1 q$ W) T

总结

7 E) q0 K3 a7 ^; p
: ?9 ^: {7 _% \5 s% Y- ?
) f( o2 t+ J% X P: m; k( G/ A; g

建设海洋强国,寄托着中华民族向海图强的愿望。人类对海洋的探索永无止境,全面、准确而深刻地了解海洋,掌握海洋的运动规律,才能为建设海洋强国提供坚实的基础。开发海洋,经略海洋,保护海洋,拓展蓝色经济空间,已经成为人类生存和社会发展的趋势。海洋经济,海洋科技将来是一个主攻方向,而海上风力发电场作为海洋强国的一部分,也将会涌现一批又一批精品工程,给中国经济的底色注入更多的蓝色。我们也会更加专注于自主产品研发,在力所能及的领域贡献一份力量。

1 g3 |7 K6 c0 X$ N
4 b8 l# F6 a& m- r5 }1 D5 B7 Q* |
6 W8 y/ p Y' w8 `$ |
举报/反馈
0 W7 n% g- m. p% H
; F$ N- F1 r8 k: Q: ]$ o* q$ q1 z2 J. c4 ]9 y$ ] 1 O: W6 z/ ?. F0 A & d! ~. x9 f- t; l: X6 `7 i: t" i * o7 A' g: ]% Y7 T
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
魏辉兵
活跃在前天 12:04
快速回复 返回顶部 返回列表