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

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

[复制链接]
1 \# }; c3 i6 U8 B
) x+ M9 B: f; U7 S3 P8 Q; E

前言

" H$ X8 E9 n7 J u6 W
/ w P. ~" \! `0 [4 G. l
+ i0 B0 X8 H3 l7 O

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

) N5 V S0 q' c' d
" x) D/ A+ _$ ^7 c3 a% E
1 S# {& G2 L8 p2 L# x

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

! A1 ~' T5 _- k
9 Q. K# A" q0 r5 `& k
4 r6 q0 {8 |/ g- f( n

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

8 K# G5 P# b; T
# J* ^$ `: |& O8 c
% m! _: v/ a, _* {

界面简介及效果总览

1 @3 G( E3 B& a7 A l* h5 P
3 }! r8 q; a0 l. _3 M
. m4 x; ~6 @3 U& B
' Q" Y! i! V% m. w9 m
, o f& i& B) }1 c8 ~
- C, s% V8 \* f, @. L

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

; w7 L9 B$ u1 \8 q( _& j3 b8 D0 L6 w
% J' m. W- W( M
* f- A9 U6 I, z* ?
9 a8 B1 C/ D- n C* |8 p
* @- X$ F4 Q3 G# q5 @& a# S/ A
) x, C* ^9 |3 B2 p. }/ d

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

6 y6 K. ~: o* @0 N) W- U) h- a
3 w" A0 M8 f I3 ?
- P1 C n) z3 X( x! @1 _" Z

实现过程

0 h/ U I, x/ P5 V9 f. D% w* K- Y
1 W% Z! K6 E2 ^/ `$ t5 E
0 q8 F# e, o1 p* [

场景加载

8 K6 _: l' _1 s9 j i, [
0 Q) {$ D W& g! [; D8 W9 [
7 j4 g/ [. u! ~+ o* f7 \

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

8 R/ P5 N l& O
% h) _* Y5 @$ x* F* \6 M6 y
5 g q3 w, {. Z( k; ]. i

开场动画

2 L# b" k3 M1 ^. F% L
3 R% O# k* y% \! N3 b* u& T
' r7 U3 a* G3 d- H5 L% D
4 n( F0 A4 Q8 R' I
' e6 ^6 U0 W5 I& j. w* i/ C4 K
8 E! X8 [$ i% _' Q% l- f

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

7 q: K& I8 I, N/ c- i. b. S7 U. q3 n
- r8 Y4 y4 ^0 b( w7 @& M
: t2 z( P8 w& q$ Z

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

& y7 X4 d% G& _+ ]: [
; Q2 a$ K7 ?5 }
( C2 h4 W' b1 M1 }

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

% w' a7 a) \" z D2 ?2 Z
: X8 t3 @& B) R. H! ], l% c* Q
' G2 C( d* B" z: g n5 @0 X) u- j

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

$ F9 m* {# F0 `; k8 U4 k6 V2 Y
+ q3 Q- j3 b: @1 e
: |( J0 Q; S6 C+ j

实现价值

% @( _ ~( i2 G
; c& G0 B, o( g* U2 w/ c6 x
5 w) Y* H4 s: U

风电机组:

2 n" [8 d- x3 s0 y) ?
: r- T0 u/ C6 |! Y: ?* g
+ B* Q7 E* _' v, g

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

+ p* ]' N, a7 O n j
7 ?4 D' E$ a# [: K: ]+ P ]
" o) ^& u# \$ `& q6 X, X
; |' I! v* E- _( Y7 D& @
* r* g @. S" Y6 _- @3 z4 `, ]" F
- X$ }) [( @; t) F

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

6 B6 M$ M2 W# M. A9 U- G$ s2 \ `
, P- c: b0 o4 B# l3 k, x$ ~
5 ]0 a# }1 I$ A w

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

4 ]: W4 h& G& M& R/ Q$ B' N: X `
8 ?& O; [! M: F1 N
" y1 r0 P$ }$ ^ Y# ]
: H; \; g* ?* a8 K
+ a- X2 E" }2 g; _8 D$ }
4 I) ^& H0 S2 I' x& n5 t: L( m( \( |8 U
# M6 p7 M4 \; u z. A2 E* s4 N
5 q2 ]: Q. j3 P, }; G8 G8 U( P! j7 W
C9 `* J& N1 y( @& v

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

+ B- K! W' y4 D# o5 B
% W, ^, D) V! U+ q# }
3 \- ]' }5 z, g2 ^

风电机的详细信息:

9 f5 K1 F% H' R. \
2 R3 p* |$ \( b7 r3 T _
* I5 L. I. o+ e, Z# k5 K8 E* P

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

5 m- _: h2 g8 R% H: l
6 L: ]6 |7 f; _& d" I
. X+ S, N% y. E9 @: u
" Y5 H4 y& U1 g' ^) E6 z+ M
6 u: `9 D, A/ X% E& O7 i1 O
9 ~. Q0 q3 L! |0 g: m% H

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

: p% `9 j8 n* {) f5 H5 n1 ~: o" y6 b& f
$ m. @/ z0 G6 Q, Z- p% }8 E
7 I7 ~8 x: J" O" c: }

输电系统:

; \" X. C( ~! C6 K& u! ^
, m' h+ q$ {( R+ j
5 ]7 l) n) S% ?7 }8 Y" ]' x

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

9 @+ L2 {5 Q) K
- R4 M7 r7 r- H
# W3 s7 u N4 R

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

" b# @, H% e7 i
3 g8 F5 f/ c( H7 r1 Z: Y0 @6 k) {
4 W3 i/ y$ s4 x1 N/ T5 y& _4 e

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

* ]. d! `1 V0 e: X: W1 b# [
2 @. U- B1 j$ E, L/ E9 {. y
/ K' R! W7 S: G% @
O! F2 ^$ ^6 g& c
. C* X* y4 h9 B: m
, G, B6 Q' v1 g7 b$ r- e- O! G

总结

3 ^' x) S2 f% H% K, i: [
* ^2 Q9 T6 }; i3 Z
: l% r3 _ I* a, ~- b9 g4 O$ G

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

$ Q# q# `- g k4 T# `. _( g- L
* H, \. {* P; c0 O
0 R$ t+ t1 G0 c t
举报/反馈
% O+ r* e& W* \2 E8 w0 n
! f) T3 P3 S& t! a. P$ t; H7 {# g/ T }2 u& q; H7 @ ' C% \% {; l0 n% W & b( c% [3 o2 v' M* i7 U/ Q' [8 `1 [( Z7 N# T* ~9 o% j( i0 o/ u
回复

举报 使用道具

相关帖子

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