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

[复制链接]
5 ?. i3 x( [9 ^0 i
1 O C$ B* U+ v8 ?) \$ c! Z( l

前言

8 d2 n5 [7 H* B# X& M: S; e2 ]
6 t& \7 I/ T4 c7 q; N
# r8 z! S6 |1 V% B

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

$ W w- g+ Z$ W% p; W: ?
3 F% `4 t7 ?* p# E- ?4 C( k5 G
# W3 M. l* ^$ z. z( e

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

( _8 x2 u5 T, e
# ]' w4 o6 p$ a& R
+ N3 W/ t$ t h5 `

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

8 e$ G( I7 N9 s9 E( y3 B8 @
% r$ q3 f: `2 c X# t, b
# F @. B) ?3 l7 h3 ~. \$ |) l

界面简介及效果总览

. P, a+ U8 a4 |5 n+ ]1 l- r7 v
* r# D. g. h3 S B% s. Y
+ G* h6 c! Y: T0 i2 O3 Y3 j' S6 Y
# X$ n) U* ?; h4 @$ T1 Z g. ?* s
; ~& G) m5 Y; I# U- S; F5 W+ Z" G; ~
4 U3 V3 Q! g8 `9 H7 W! U& N

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

: F' K9 `& b1 c$ p/ f7 F3 B3 e5 v0 J* P
* t% F& h7 z- L8 O: [( j
$ y- r/ J* u; }$ A9 u U* _0 A
; o/ ]# v$ r. j6 V% y' S
) m, W. r1 w. Z; Y& P
4 A8 u! S& p3 Z- f

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

" q: D e( K+ Q" r8 d! E% I
' D: R; Y7 ?6 q8 |9 `- a
4 D7 R0 Q' S6 Z0 d% v$ O, a( ]

实现过程

! e% k: @1 k5 v4 u& I J- d0 b2 ~$ O
4 C1 \, H& C4 {. S& T6 r
" a0 _) A8 Y c- U2 d8 w

场景加载

. L7 c. q7 e+ Z3 u
2 i! [2 d+ G. i' L- E- ^
$ l! j# j$ ~. ~

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

. V. b4 y; g5 _3 i) l2 d
, u) m- J+ K3 T" F. p
: d) r7 a5 N- q& E/ O

开场动画

3 \' }" } f2 { \
/ @" W0 N2 a C: d* g, m3 u5 F1 G
8 C* ?% `* L8 \
* C9 c/ Z3 s- I% G! O. n
9 P9 z! G: G$ \5 e3 g! h4 ]
& }/ i. I+ k+ u; L# n6 R B* ~

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

) h2 L' [- k; v% D6 ~6 r2 L A
* u3 J* ]4 T6 Q, f( }
8 }7 G3 j$ V2 F8 l+ J4 D- [

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

" x) l) S0 ?0 L; [
4 P& M F$ K$ U2 ~" W: @3 B3 Z3 y
8 V$ L* l, A. g: f

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

; a: v- T# e- @8 F# l) P
9 b1 U. x1 P; `/ f
' x4 I) `6 H$ {6 p3 M, O

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

( ]' A" O2 n' G& @. O5 j
# x" D6 h* S3 y ~; N( W( j
' x, s/ x @9 w. {9 i

实现价值

0 v# c+ |, m# v5 H: D
- S3 ~) {4 I8 K4 F8 C0 B8 h
& H- P$ C/ \9 |& l' m6 ` A

风电机组:

$ @0 f/ S& l; A# X
5 H/ i. R2 O) w5 x, l) q7 f
* y- | B x# c5 }' B

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

' ` P1 I1 ?. G4 a' `
; x: [$ }* x. u- z3 d4 b
( g. F4 a6 Q. P' |1 |
: s8 {, d- q: E: m
. }# y' ^2 ^1 S' R- Z( u8 L/ [
( _( f" p/ _4 {: q

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

* F* V* Y! ?" s* d$ X, E& [& w
' V5 L2 M) F( F3 T
2 y8 s3 h6 |7 D1 n

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

3 D4 |' X- c3 N3 p) @
_0 A& r: H3 A8 S1 [9 M0 ]/ v
) [" v1 \* _( m9 M. l
7 ]+ m9 p [5 E2 \. t# J
6 f/ T7 H2 H$ g6 H' f
# [: V/ q+ j" {2 [# A. p
6 h) V9 V* o I3 a3 |2 D! w
5 }' S+ m( [2 W2 H
2 W8 @7 c' j" n2 K0 ?

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

2 x9 E# e/ U7 |) r
, j R( K5 Q5 k
0 H# I' Y; U5 o6 v g/ B% x* {6 K

风电机的详细信息:

; L/ ?3 [+ w+ V& [+ l
9 W5 G7 U$ O5 S
5 `" I4 _ V8 l/ v r0 o

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

; L& ~5 M8 l- ?( J
; v. P1 H9 T0 k# ~8 R. c
1 @' n* J1 x- s- ^& h2 F
0 u. g& b, U; F r- G
! B# V* n* j/ Y% \- A
p7 d! e" L' T$ d+ k

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

) y* f8 r. \: A# c) j& g6 V/ }- f# }; d+ J
A5 h6 a) v/ O" ^1 v! a7 K
% a/ L, _6 O- t% g1 J. G9 i0 `. r

输电系统:

- l9 P2 z4 t0 j) @6 y# g
/ g6 x7 h7 b+ b5 Y* U" r6 \1 M
/ F& }7 u9 S8 C

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

6 R ~1 k: `% c+ z( l- L
& y" h ?+ h3 b9 P# q& ^4 M
! J7 G& S3 q z* i

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

, |" B2 h" ?3 J+ U
+ ^8 h0 r* g% T4 P) @
: Q+ S) b4 k' l4 H2 B" f+ h

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

6 e5 h$ `& L. f% q
* G2 j% n" b/ h! J) R
& P# |; ~ C/ h2 O
y* _- R" Y( H/ @$ V+ d, R. x
& w. \; @, @8 `. c7 P; `% @% |! O
- n! Y4 K, m. L/ i3 E

总结

( n; }0 f U" w+ J- \8 S5 D4 W
% A$ f6 S, [+ h4 P! P3 _
$ }) t2 Y& z: i$ _6 A2 k4 D( {

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

0 a# y; E% R L0 Y, m
5 k$ O# z" B! q* N! y
% I. @/ s. e* R1 J
举报/反馈
3 ^/ S4 _& _0 X
1 d8 s9 o& P6 G H , R7 {" M8 }) N# P. G4 c; B2 C) @! q I8 z. S" _ 1 Q1 T' ]5 Z- M+ c- I/ X0 D ( X* v# T6 Z% x' V, }
回复

举报 使用道具

相关帖子

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