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

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

[复制链接]
, ~7 ]7 n4 G* }3 c. h# y+ P9 j
& q$ u. i+ q. p- ?& c' U2 [4 [1 }& H

前言

5 [7 Z- [! N0 `5 G0 v+ z, e
$ a( H$ @& y }2 a- j* q+ X5 K- ~* O
9 x$ H/ s( K! D" t+ ]$ ?2 H4 d

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

+ \4 W6 ^: V4 t
9 f% h+ N$ R- ^! I0 f, v. x
: F) E" G/ x4 D( Z

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

. {) T5 z4 j; W
) t/ f) }: V6 } ]( g, G- F
) y3 {. Q9 x% K, d2 |% }

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

0 x- J- b4 K5 G# w9 t) C+ B
; }9 A3 g c" O# e, D# G, f
2 S' T9 g {7 x5 i4 B D1 p

界面简介及效果总览

7 `9 n# v" H y# X. s; x
2 I2 {0 a6 H; t0 ?! L4 {8 V+ p
" m S9 f7 a1 L* U- |7 h
& e$ b- u/ s4 c' |; p# _0 b
- g8 u! P; k) ]
1 K R: L# \3 a& B6 v, d# G

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

& R+ D; t: [' I" {8 s4 g/ Q
- f2 J2 U6 ]# D$ G
5 x+ F: z& L9 y
) X* ]% h3 @* |+ E( m7 F& M. w
& Y. Y. T5 p% |5 W! K
" q) v+ g6 r2 k: q2 W4 m

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

; @" s9 ?8 h; H7 f6 V# {! R
6 q% b7 u# [" N
: z6 G) z/ Y, f+ F

实现过程

% F, a& j9 V9 I% c% g
W9 `/ w: p" _6 B! |0 T9 K
) N* A7 K* t* I5 X8 M+ C ~

场景加载

) i# x4 X/ j [9 t
( G; ?6 g7 L4 m% ]! F+ x G
2 E; V. d8 t) @1 D0 ]8 D4 ^) j% h

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

2 h* E' J" Z( |0 i
2 {) m7 |% ~- P" }6 ~3 Q2 R
, k" m' x( B$ X4 h+ J

开场动画

" [& r! `# r$ R1 [) ]
$ H$ \# C6 {# |5 {
4 W; T! t1 {0 Q& i
9 l5 m( J8 G* p7 E: U
4 z, b3 y+ y' D/ [, ~4 R
- e' k! [+ W$ w" [0 t2 j

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

5 d+ Z/ Q4 N0 ^) u6 t, b9 s7 Y0 N
) k5 [, @" e: t/ r" v8 X) l
" q" }* D3 h0 Z) v

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 参数进行。

$ j4 `, A# @/ n) j# k9 e% z! e
$ @! z) j7 j0 O& O4 T$ T: z* I
4 F& n, M9 V' h7 Z! |4 a0 D

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

( Z1 E3 P- y0 _$ F
) A* [5 Y& u! B) p
, S) o. t4 k, s) A/ r( \

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

- j2 S3 J5 y, i) c4 t
6 O7 `7 Y! H) k* R7 }" n
V0 }9 Q' m9 T; V( z4 A% w% O

实现价值

7 T; q, w4 Y% c3 Q- W% f/ g
) p, P$ l& z: q: }+ o
|- i0 m1 l% J9 F4 I

风电机组:

' [8 p k! d0 F8 e3 O: @
* c" Z2 M! m+ N
0 d7 t9 s- g/ k1 T8 Y ^

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

/ V% E2 ]3 G- ^2 r7 {
) d6 z9 ^) p( s' y
% E, l- @5 H; `- u7 u2 \
+ S; n% e! M* u+ i Q8 {1 R
5 c+ S! J8 Y+ V
6 p# w7 H& Y$ Q4 v

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

4 J' ?, X/ b; l1 d6 f
, q0 o1 C. v5 }) }1 e
: C+ J5 Y: P" v5 a0 T

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

( Z% ]2 G% e4 j( w% D* ]' [
9 H3 K1 [+ j/ p6 _
& P! J: `4 k& o* i( C/ [
' n2 n# [/ n3 s( T0 h
6 D6 W" ]; D/ B1 e# Y
' B, |# A3 a5 I& l. I$ R
: i/ |8 a) g( V( C* c7 g3 e1 G
5 L; g. q" V& i8 \+ f
) f; u& A( t2 X) w

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

. e0 A' p; R3 X# m9 [* _8 H
: u- {/ ~) s+ k X Z
" w- a7 H% ?+ O' T3 w8 [

风电机的详细信息:

" Z1 @' j3 P% s! k
+ o- Z& ]! c- I: [% r8 H
. z1 f9 h) e K/ i; k1 V1 q

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

& ]% l" B3 ^: G; W& z0 T
0 j* c, Y7 i7 \( m7 |0 K4 r
1 O6 e! u1 L4 K% b! R4 J* @! D. F
- H$ T, \' {) O1 F
; o7 l+ S3 H' g8 j2 s8 H& ?& V! G- V
: H6 ?; H& A( j$ Y

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

) s3 Z/ }, {' w. N
2 q/ b- x: l, w( Z2 s# D
4 A; d/ d5 H1 @. S

输电系统:

, U" o! p6 J: s5 J/ c* y$ `8 t4 Q
- w( r, O, w' E9 q/ l) F
$ E( I6 Z2 a3 B9 x, T' n

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

1 m H+ i" I, b
! s& A9 U" X6 ?+ g; \
2 c8 J# A8 y, k

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

/ U; X" b( w, w5 W
& v( L; z0 o9 c6 h/ x
8 [( J4 Y9 c8 Y4 }8 M& S

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

( [8 f5 K$ F! h8 {) U5 Y
# ~* I+ E6 b8 Z4 t% F
9 r7 y6 c. T+ E! y
" q) Y3 v& M* j" u/ q4 U
& E7 O+ J7 f# v) f
$ @0 n! G7 g# g" s1 i1 J

总结

1 ]+ m" C3 u5 j
8 w, l4 b: l, z5 w- ?
X" h4 w8 ~: S: `9 f% ?7 q

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

+ \8 x* d& K& H) x+ D: A% i
$ A" f4 p* }5 A" I, a& K% s
7 E* F; v# }( p, {- U
举报/反馈
0 P6 D* s' g( i
8 V; t' ?. V7 h+ S b% V & [. N1 k& D5 r& ?! [: ~, o' M1 L" F9 b, x7 r/ @ 4 `9 v% q X( D/ Y0 l# r ' b- t- Q. T9 l' L5 S+ }
回复

举报 使用道具

相关帖子

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