|
MATLAB这个产品可以分为两个部分:
1)MATLAB本体,包括人机界面、m文件编程(MATLAB语言)等。MATLAB语言本身是解释性的,但是其内部调用的库(例如MKL、LAPACK等)是经过高性能优化的。前段时间,杉树科技公司还说替代了MKL中的Pardiso函数,提高了求解大型稀疏线性方程组的性能,更好支持了优化算法求解器的国产替代,算得上是很大突破。
编程时如果充分发挥这些高性能库的特点,就可以获得极高的性能。比如说MATLAB语言中所有的变量都是矩阵,而我们通常理解的变量,可以当成1行1列的矩阵。这种处理方式可以帮助用户树立向量化编程的思想,尽量减少循环的使用,因为矩阵计算的效率是由底层BLAS库来保证的。这一点有点类似C++/STL里面的算法,凡是STL算法能完成的操作,就不用迭代器一个个遍历操作、人工实现了。具体到电力系统,例如潮流计算求解注入功率和支路功率,究竟是通过循环来求;还是通过矩阵一次性算出,效率的差异是很大的。此外,MATLAB所有的变量都可以是复数,或者复数矩阵。可能是数学教育的原因,国内对复数的使用非常不习惯。即使遇到复数,也要把实部虚部或者幅值角度分开处理。实际上广泛使用复数是现代科学和现代工程的大势所趋。电力系统应该充分使用复数。
我们电力系统的主流程序所用到的稀疏矩阵算法,奠定于六七十年代,反映的是六七十年代的数学成果,包括:三种节点编号优化方法、因子表分解、稀疏向量法等。这些矩阵算法也作为电力系统研究生的教学内容,实际上是属于数学专业的,而且落后国际数值计算的前沿已经很多了。涉及到数值计算的内容,长远来看,还是应该采用领先的第三方高性能数值计算软件。MATLAB使用的底层稀疏矩阵库,都是久经考验,例如Tim Davis教授的SuiteSparse库。编写电力系统的应用,其稀疏矩阵计算部分必须采用高性能的实现。
大约10年前,为了深入研究状态估计算法,我用MATLAB语言重写了基于PQ解耦的状态估计程序。调用江苏数据进行计算,大约只需要0.28s,这个效率是比较出乎意料的。因为我是调用m文件的方式进行计算,没有编译可执行程序,自然也就没有编译器级别的优化,而且是在个人计算机上完成计算。这个性能可以与在服务器上运行的商业版状态估计程序竞争。这说明MATLAB的水还是比较深的。我完全不反对研究生使用MATLAB完成课题、编写论文(前提是没有版权问题)。但是如果一个国家、整个行业都依赖国外软件,那真的应该需要反思了。
2)SIMULINK仿真,这是一个非常有竞争力的产品,涉及到各行各业的仿真。我们后文以SIMULINK仿真为主,其中SIMULINK也包括电力系统仿真。
现在全国使用MATLAB中的SIMULINK电力系统仿真来搭建模型,解决技术问题、进行科研的人,总数加起来至少超过1万人吧。电力系统建模,当然是非常有必要的,也是有技术含量的,是解决很多问题的必经之路。但是,本科生可以建模,硕士生可以建模,博士生也可以建模。中国的工程师可以建模,美国的工程师也可以建模。无非就是建立的模型好不好用,精细不精细,能否反映并指导实际的工程实践。在商业公司的仿真软件上建模,还需要考察对软件本身的学习掌握程度。但不管怎么说,建模这件事并没有真正难以逾越的难关。但是研发电力系统的工业软件,给建模的人提供一个平台,那就是完全不同维度的问题了。开发电力系统仿真软件的难度,比使用电力系统仿真软件的难度,提高了好几个数量级,这应该是毫不夸张的说法。
谈到电力系统的仿真软件,最领先的国家似乎是加拿大。加拿大有两个省的水电局的电力系统仿真做到了世界领先。分别是曼尼托巴省和魁北克省。由于高压直流输电在加拿大的开发较早,他们很早就有研发仿真软件的需求。
曼尼托巴省水电局早在20世纪70年代,就研发了最早版本的PSCAD软件。后来孵化出了RTDS公司,研发的RTDS装置在实时仿真方面做到了世界领先。曼尼托巴的技术路线,是叫做EMTP算法,就是电力系统的电感、电容等基本元件,差分化后变为电流源和电阻的并联,从而改变了电路结构,因此又叫做伴随电路法。伴随电路法是电力系统专用的,应该不能推广到别的行业,例如机器人控制等。但是这种算法的计算效率非常高,编程也相对容易。
魁北克省的仿真发展也非常早,魁北克省水电局的研究所孵化出了Opal-RT Technologies公司,这个公司有两个拳头产品:HYPERSIM和RT-LAB。1979年到1980年,我国曾经派一个29人的团队到魁北克省水电局进修。这批团队中,有南瑞的人(当时还叫自动化所),重点考察了当时加拿大将计算机应用于电力系统调度的先进做法。这批团队中,还有后来大名鼎鼎的周孝信院士。周院士回国后,进一步推进了PSASP的研发,以及考虑研发中国自己国产的实时仿真装置(就是后来的ADPSS)。不管怎么说,ADPSS和HYPERSIM的渊源是比较深的。一直到今天,国家的电网仿真中心的数模混合仿真,依然是基于HYPERSIM做的,这个实验室光是购买硬件在环的直流极控装置,就花了几个亿,更不要说其它成本了。ADPSS还没有做到对HYPERSIM的国产替代。
这里插一句,曼尼托巴省水电局和魁北克省水电局的研究所,充其量只相当于我国的省级电科院,而且规模还比不上江苏、广东电科院,只能是中等规模的省级电科院。他们做出了世界领先的产品,我们在做什么呢?好像取得了数量多得多的科技奖励、做到了重大成果满天飞。
说到这里,还没说到MATLAB中的电力系统仿真,但之前的是背景介绍。Mathworks公司开发电力系统仿真,是与魁北克省水电局合作的,或者说就是魁北克省水电局在MTALAB这个平台基础上开发的。大约十多年前,我读过一本书,里面提到Mathworks公司也从曼尼托巴挖了一拨人开发软件,但是不确定来源的可靠性。在官方角度,Mathworks公司是与魁北克省水电局合作的。MATLAB中的电力系统仿真就目前的版本,是属于Simscape旗下,Simscape为多域物理系统提供了一个完整的建模仿真环境。Simscape Electrical libraries划分为两个部分:分别为:通用的电气工程库,还有一个电力系统专用的Specialized Power Systems。电力系统业内人士比较看重的是后面那个。
MATLAB中的电力系统仿真与曼尼托巴的技术路线完全不一样,走了另一条路。其技术特色是发挥MATLAB在通用仿真的优势,将电力系统的行业模型尽可能的归结到通用的数学模型上去。这个通用的数学模型其实就是控制理论教科书常谈的ABCD状态空间模型。当然,里面的细节诸多,考虑的因素诸多,比教科书复杂太多了。
状态空间模型最重要的一步是确定状态量有哪些,下图给出了MATLAB电力系统模型的状态量有哪些:
状态量包含三部分:电力网络中的状态量(如电感电流、电容电压等);一次设备中的状态量(例如发电机功角、转速、暂态电势等);控制系统中的状态量(如某个积分环节的状态等)。状态量建模的代码工作量很大,仅以同步发电机为例,我们不谈发电机本体,仅考虑励磁设备,这里励磁就有直流励磁机、交流励磁机(包括静止和旋转、可控或不可控的整流器)、静止励磁机,附加励磁有各种PSS(电力系统稳定器),提供振荡阻尼。光励磁就要开发几十种型号的模型了。
在算法上,也需要考虑电力系统的领域特点。并不是你在课堂上学过数值分析,写一点python或者JAVA代码就可以直接用了。也不是你搞一个通用的算法,不加修改就可以直接用到电力系统了。以MATLAB电力系统仿真为例,默认是电磁暂态仿真(也可以改成机电暂态仿真,这里就不展开了)。可以采用两种算法:
1)连续系统仿真,变步长。由于电力电子装置的变化很快,采用变步长可以消除不必要的数值振荡,代价是计算效率低。MATLAB电力系统仿真默认采用ode23tb算法,也就是TR-BDF2算法,这个算法处理刚性问题是强有力的。我不知道研究MATLAB电力系统建模仿真的专业人士有几个看过TR-BDF2的原始论文。当然我并不确定ode23tb的实现是否与公开发表的TR-BDF2算法完全一致。
2)离散系统仿真,定步长,这个更适合实时仿真。但不可避免的是,怎样考虑在定步长的时候,通过插值算法消除电力电子装置动作的误差,这个是很复杂的学术问题。MATLAB电力系统建模采用两种算法的混合:Tustin算法和Backward Euler (TBE)算法。前者就等效为隐式梯形法,后者是后退欧拉法。前者的性能较好,但处理振荡会有麻烦;后者精度较低,但处理开关变位是Ok的,所以需要两者的结合。
除了基本的模型、算法研发,我们还需要考虑实时仿真、硬件在环的需求。MATLAB可以把搭建的电力系统模型自动代码生成(包括生成电力电子变流器的模型),并且转换为烧制FPGA所需的代码。在官网上,是与Speedgoat合作的。在现实中,大家用的更多的是加拿大魁北克的RT-LAB。但不管怎么说,自动代码生成到嵌入式的技术,超出了我的知识体系和理解能力的范围,也许需要很多的编译器人才,也需要懂硬件的人才,特别要有非常精通Verilog HDL的人才。我敢肯定,没有一家国内公司在这项技术上可以与Mathworks竞争。
补充1:在电力系统仿真方面,目前国内只有中国电科院一个团队产品化比较成功,这样是不好的,不同的仿真产品互相验证是很有必要。虽然电科院BPA和PSASP形式上是两个团队,但是他们的思路已经同化,更不用说诸如直流等模型等都已经做成动态库内部共享了。因此对于大型的电力科研机构或企业来说,是有责任站出来发展国产的仿真软件的。
补充2:MATLAB光是关于电力系统仿真的文档,就有数千页。能把文档全部读完消化,那都是极其罕见的高手了。MATLAB的文档完善是很大的卖点。
补充3:关于开源仿真软件,我十几年前就用过Scilab,也用过其它的一些开源仿真软件,例如Ptolemy等。开源仿真软件的问题在于,仿真的模型库完全不齐备(用于学术研究是可以的,但用于工程实践还是严重不足),还有产品稳定性不如MATLAB。例如MATLAB的ode45算法,理论上不能解决刚性问题,但实际上效果出奇的好,其它仿真软件就没有类似的效果。我怀疑MATLAB很多基础算法,与教科书和论文上的并不完全一致,而是有许多不公开的经验在里面。还有是商业上的,你帮客户写个咨询报告使用开源软件,万一里面有bug怎么弄,责任怎么分摊,都是问题。很多人主张国产替代MATLAB必须走开源的道路,我对这一观点严重存疑。
补充4:在电力系统仿真领域,其实PSCAD、RTDS的仿真结果更受到业内人士认可。其实这也是MATLAB的特点,不可能一个软件全部包揽,在特定的行业往往都有更好的专用软件,但是MATLAB的全面性实在太强了。因此,国内发展仿真软件,可以从各个行业入手,尤其是挖掘国内行业内部的特有需求。例如电力系统领域,国内电网公司的很多通信协议与业务相关或有细则修改,不一定与IEC、IEEE的标准完全一致,国外企业不见得会愿意开发。还有是国内特有的模型,特别是配电、微网及需求侧的模型。国内发展仿真软件,没必要也没能力发展MATLAB这样的全能软件。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-4 00:27
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社