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

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

[复制链接]
3 z4 o. q9 }. Z1 l3 [" n
2 S+ o/ R4 z, \* x: W5 C; s

前言

* J O4 g8 k$ X
, q- s" ^+ ~# C; N" I0 i+ ?; j# z
4 d) o" W9 s8 v! z8 I1 H+ ?

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

) Y7 a+ k+ M* O, R) Q
/ E( |$ Z* _, p* V( @
& E6 l1 e/ C1 Q+ B% T

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

" S1 b @/ h Y1 W' G/ b
7 }. \, q. @. @, H
" G9 u& ^5 g) ~$ k. Q2 ^1 P( V

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

6 D5 e6 |, [9 R/ i7 i
$ w! m3 _; c; I/ z! t2 k; y
. C2 F( i6 W* { M% P5 p( O+ {8 {

界面简介及效果总览

+ q5 p# y/ M5 G# U5 m ^
1 V3 U9 ^. Y& ]! g
2 c' _9 p$ R- B9 A1 R- N5 }. g9 X
* O( U. T% W' ]# w$ `
$ E2 X. F: G0 v$ Z; j3 v5 Z( e- h
- u2 k6 f1 X4 L8 @: @ n8 d

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

5 \5 V1 Y, C( @) o; d
# u8 E' ^0 G8 n2 d
% F2 A& b* r8 Z j% o" w/ S [
. U: m7 ~' L2 ~; X
" S1 l8 u$ S0 C8 R, I) e
* i1 W4 G' V" o; I8 r$ O' x$ v

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

% M7 R# K Y# \1 P' o
4 h$ M% k3 w9 Z: r% A# B- y
0 q! @' x, L8 \! g, z

实现过程

& B4 |! ~3 @5 j. g+ Z7 G" M
( E1 ?! B' M# v) ]9 q7 t0 n+ u# O. B
1 M: Z9 ]- W1 Y

场景加载

( r u0 z" B. t. o
' S' N8 H E4 n: c3 Q" G' s2 w
+ y. r! I$ \% } k% m2 Y

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

$ ]" H2 W( e$ Q* C: O
0 d3 {6 S5 A' {
3 u2 O% e; P6 [1 w6 a x

开场动画

# }/ }. l; S9 z
# e* I D; h: P; Z# _# x' c, ~
7 @/ K9 p# Y* e5 l
8 n5 |$ Z9 e1 e+ W- K& o+ `* ?+ t
( d1 l# v" L! Z1 U* g1 U1 @
) S0 \1 h3 @ Y, W* d/ }

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

2 }/ O1 o6 @2 T6 o( m; e n0 N x1 n
0 _ f3 R& H2 H% }; n3 }; F4 ^
1 m( _: Z( |3 Q5 T

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

+ c/ {/ r+ j/ z4 _
, T& R% r- d: }+ L; F
: f# I. _. f/ \, q/ n

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

+ a- |1 h5 q/ O/ \- h( p
8 }, Q9 u4 o1 T8 b+ j
0 b2 u( X; ~* K( j+ Z3 J

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

8 d" Q) p/ u. c1 W
! F- o4 Q- T# ~
) n0 X' ^$ S/ d8 ]+ B

实现价值

5 O; O% N$ A' Y( ]( ^! \1 X
1 t* }) R6 O6 \8 S, w& d
' r6 @( R+ R* E* ~, N

风电机组:

; ~% C6 g( J; v' n$ p
L6 E B9 }. D
% C( |' \% r. g& y

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

6 V% G4 g( i+ ^8 W3 |
4 q5 n; H3 ?7 J% Z
0 `- ~; s0 ^. q. _1 D' H' o
( u; l. o6 Q! Z" y, p
* {5 b& p& e1 F) ^
( A8 E% v0 E) E2 n

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

/ Q: S7 N9 ]& q2 q
: { ^3 |/ z S* m$ d: q3 j% A
1 n! x4 V5 c" |

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

$ Z- [. j4 b* n( B' ?" d" U0 U5 |! ]
, B4 l5 `* K0 P& f7 O
6 {" j* E$ `- x! o
1 w2 f! ^7 `1 Z& [0 z
0 G; c4 L9 c: x% W* v M$ y; _4 V
' x- ~2 C8 }3 ]. L: S# X# \
. U6 j$ A" p( ^- p4 Y
, a+ `) E7 ], }
& l* X1 U2 N: a! l

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

9 N& h0 W, V5 p, N; ?: H4 q
! R2 z+ k" A! f. {% ^# N, Y+ d
: \1 b# a( k; S! ~* e N' C& Y. N

风电机的详细信息:

4 d! F3 C& [, r w
; G+ l& g0 A# c: x
3 N9 K* N% E9 E, N1 ?

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

" S* c4 W) `6 C$ d" N8 O7 j
' l/ p; o, C3 ^' D) W% ~( y7 w
2 F N H5 [ b5 |5 `
9 [! ]! x r$ B( d l$ b
* J2 ?3 v" z6 j% @
# \5 s" Q# e* U2 B. R* `" C

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

7 f6 i# |$ _4 m9 _! q
5 K2 T1 @( b4 v( J& z& x' F
5 k7 q) M9 Z Z( i: X1 a, u2 t1 r

输电系统:

0 A9 s( m7 |0 |; i
( K& ~) P; a) j+ G0 ^. e/ U
, S( e$ X' H& ]. D, c

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

3 B; Z7 m% X, [# ~
. z G. K& a& A. u9 J6 @
9 R& `% m7 R7 j# E0 {

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

( A/ f: {2 E" x. ~/ ?
$ M5 p4 X" a# O5 n6 _6 ?$ Y7 D) n
* {# Q L1 T* G

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

# p# P/ j) K/ n7 _9 L) Q) g* t5 X
/ }% |6 o: C" [- a V1 c
0 n1 `7 W* Q' _1 s$ [& Z7 U
4 X% D S* A: m, W- Z$ n
8 x/ m( L5 g/ l8 T S
: \4 t4 |$ x2 p1 u5 f) y, b

总结

: @! F+ p y( ^# W1 L
3 G7 k) @1 Q' t# H6 j
5 {% |' S4 Q3 m3 r0 G

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

4 O! \6 |5 a( q9 h) `# F% \
6 G0 E- L, g1 m
/ L6 |3 @: a. L: O+ v. g y* s
举报/反馈
# l# F- S/ M, a( ]5 F
, m; [. Q& z9 W7 z* T8 F% o- z9 P" X* U2 ? + d# E) P8 _# h, C0 F ' N+ c! @% J$ C1 [; A+ J8 q4 ?7 _6 m
回复

举报 使用道具

相关帖子

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