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

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

[复制链接]
5 H: q9 z: G. z% R0 E- m
" y7 U3 |# R3 V. D% L$ D

前言

1 x8 _2 i, s8 L9 i1 p) o, R
' a5 D8 q3 q2 _( [! ~. P/ i9 C" K
( S( l% @+ L; a; d- F+ b

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

; y& A* C$ u, V2 V6 _/ c, u" [
" e/ b z( Q+ B
% A2 O( j; K, Z. x% J. L

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

e/ ^' Q! S H5 C( ?
0 O; V. C+ n% @7 }
0 g0 X6 G6 E, Q/ j4 J

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

0 e+ |" _2 o) m. q* P5 r9 o
9 Y5 J" H X3 X; d: U1 R4 w
& L# ~7 U3 C9 e( J( y" |

界面简介及效果总览

W0 O% E3 u- Q6 I
4 Z( I2 L2 Q& M+ N
* ]$ ~ x3 m, u( m. D
& S* [$ D2 R, n; \) v# g
7 c6 H0 ]! L$ Q1 ^ T: Y5 o/ m
: O3 i2 D0 ~, \) X) s0 I" N

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

1 _1 L! O' F7 T( y: L
0 S; U$ v+ o1 j+ V) ?( b) E( _
9 A- K' f' q8 P8 O. j. G
' ?+ `% q6 x" g& e8 E9 V! [) C
+ p6 ~7 S% w* `4 H$ N: W$ U% Q% q
- K8 q% Q5 p9 b

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

9 c/ }: G) ^- S' w8 c
+ N! ?. j% M+ b% B2 `1 k
) z9 G. R) ?& A) e

实现过程

; X. r+ N2 z, Q
; O8 K# b% |, c
. P3 G5 G2 x: [$ N o

场景加载

; L1 k* T6 O: f$ L! H4 h1 y( U) q
; A( K# e3 n1 F( H0 L6 R
$ e+ N- J0 r6 x$ V* [5 i; O

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

9 B0 h* u$ V9 Z7 n+ ^3 B @
$ e( [( J: b0 `6 F& W
8 X8 |& Y7 H- K0 o/ m6 y9 t

开场动画

; _ o% a1 M7 a9 z$ B. _
8 q3 g8 D0 K7 Y* f; M
' \$ B: {5 t( e0 |
p! m. k& Q5 n {
$ Z' I# a/ W+ {2 F+ C' o ^
0 W5 K& K8 D6 M- \

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

, Z7 `" }6 _6 h2 @
$ Q' L# G, z3 a. p& r& P9 A6 V
: m% L) u$ D% }# n" g

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

/ t- I4 a' s8 L2 ~: u% b
7 K' N2 R4 |; N5 D
# Z; L: h: |) G4 \' ?4 O/ F

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

1 n- Y2 S" p4 u+ T
1 A9 P+ L2 j, P) k [( s
7 l: y/ a0 e% n* u

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

. K* |9 ]* m9 H7 j
8 Z' m! a% s9 k) d: A3 ^8 J
0 a2 t c" q P3 [6 D' ~8 E

实现价值

& O$ w8 U/ r# S- S) `; a5 D1 p
( J2 J! q# U0 Q9 O% R+ R. p+ @
8 Q8 N: c1 p s |% F1 R2 [" X; u

风电机组:

7 A/ f3 ~4 A4 W( {: J
# `3 l, R+ |8 G% D+ _8 S
2 F* r( r6 M4 e: ^! R

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

+ t- X* L: j" o4 j' x6 ? @% L& d- N
1 A+ w: S6 k! X8 Z
/ d/ J7 K3 `$ s4 o, ?
0 |; Y9 w' {, d% o+ L
( @' b, |% e. F/ P7 @
' a. Y! { p4 u* r- [

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

$ L: N! F) V8 L9 g) J( ?7 F$ }
( X% F- O3 ~& w9 h! u
: ?% P! {% ?. _1 G% N, B5 o, Z/ i

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

p/ o, D, ]8 c- L4 x/ j
/ w4 { k8 Y" X0 l4 c2 W6 l
9 E1 ]/ E- |' k2 x R
# R0 y1 l# b: V( {) h% Z
) \$ X$ F+ {& m3 v8 ^* \0 Z" i
h, H' O% O; A" |
; d! ^9 B( O/ ?
4 a. [) I) J9 I6 r3 v$ D
& b! L7 J9 P4 a0 N6 o3 U( M1 j9 g7 ^ S

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

0 p8 [8 ~; z( Y* L( V; r" Z# }
$ x0 ?- p+ S, S3 D4 M* t) F
( ^) o1 ^+ I5 F0 J

风电机的详细信息:

6 E3 `( g" |3 p% z7 m
7 }/ K/ ^0 l$ s
$ O# G: J7 P u8 I( z& L8 [* P2 D

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

% l" h* |% R2 B; \, U; V+ ]
8 v( T' i' L' e) _ w3 W) f' a
4 t, ]9 R/ R' H& n
8 e* s; R: Y( x
$ `2 b7 g7 K7 l7 q# k) Q0 l; W3 E
+ ] _4 G/ Q9 v; m) }

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

8 S# d" M' u4 O/ t" n, J' G3 i- {
& v% b! q. ^$ K) J
5 A5 A& q( |6 S% e, B

输电系统:

5 n+ b: Q/ {( D
* a& q7 r; \( H8 H& K4 k3 V
! |5 x) M _% V) [& h% r; m8 u

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

" R/ x4 @* ^; g! r Q$ k' ?/ E( a
% `% V7 P5 Q+ H& n$ `+ N5 ~. |) t
, ]3 F- S5 }" e7 ?0 b

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

* v" } c* K# v$ T8 [, ~
( q$ l4 }- G/ e8 O
6 e7 X7 z4 }4 y

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

# y' s9 \. |2 I K7 i
' o- `4 ]! r" D/ C
- `6 j+ z& I' T1 x3 X( {( S* C1 ?% }6 y; y
! Q$ e' I8 T% [1 h; F+ [
3 F- X# l U8 O
4 L! W# \& D9 T7 N

总结

& p/ Z$ p: _3 M
$ x; [& c& q* W' m8 H- ~+ [
) F( E8 V3 _5 A7 {; Y

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

( g0 H" p5 |" m3 F; K; m
4 ?% K2 _! I1 d0 ?
4 i c$ S8 [ n
举报/反馈
4 G _8 _, U2 o
+ K9 C3 S" a6 T 4 c. \! |5 N+ e- R$ d: r- g, E1 ?; A, a, V 5 y, W- r; _ t5 v5 k% I1 ^( J9 f3 @' I: y % x* l0 k$ m% y1 H, w0 @
回复

举报 使用道具

相关帖子

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