当前位置:首页 >> 电力/水利 >>

DIgSILENT-PowerFactory入门教程


DIgSILENT/PowerFactory 入门教程
中文版 V1.0

By Bruce 2014.7

目录
1 软件概况 ................................................................ 1 1.1 简介 .....................

............................................................................................................. 1 1.2 功能及特点 ...................................................................................................................... 1 1.3 安装、界面及数据结构 .................................................................................................. 3 2 基本操作 ............................................................... 10 2.1 新建工程 ........................................................................................................................ 10 2.2 导入、导出文件 ............................................................................................................ 12 2.3 简单教程 ........................................................................................................................ 14 2.4 绘制电网图 .................................................................................................................... 14 2.5 元件选型 ........................................................................................................................ 15 2.6 计算潮流 ........................................................................................................................ 16 2.7 运行仿真计算 ................................................................................................................ 18 2.8 设置仿真结果图 ............................................................................................................ 20 3 动态建模基础 ........................................................... 28 3.1 DigSILENT/Powerfactory 动态模型的基本结构 ............................................................. 28 3.2 Model Definition .............................................................................................................. 29 3.3 Common Model ............................................................................................................... 31 3.4 Type .................................................................................................................................. 32 3.5 电网元件 ........................................................................................................................ 33 3.6 Composite Model Frame.................................................................................................. 34 3.7 Composite Model ............................................................................................................. 35 3.8 构造动态模型的基本步骤 ............................................................................................ 36 4 DSL 语言应用 ............................................................ 36 4.1 DSL 语言结构................................................................................................................... 36 4.2 变量初始化 .................................................................................................................... 37 4.3 状态变量初始化技巧 .................................................................................................... 40 5 DPL 语言应用 ............................................................ 41 5.1 DPL 语言初步 .................................................................................................................. 41

5.2 DPL 语言结构 .................................................................................................................. 43 6 稳定性和电磁暂态仿真 .................................................... 44 6.1 简介 ................................................................................................................................ 44 6.2 计算方法 ........................................................................................................................ 45 6.3 仿真设置 ........................................................................................................................ 46 6.4 结果对象 ........................................................................................................................ 52 6.5 事件 ................................................................................................................................ 55 6.6 运行仿真 ........................................................................................................................ 59 6.7 稳定性分析模型 ............................................................................................................ 60 6.8 用户定义(DSL)模型 .................................................................................................. 79 6.9 DIgSILENT 仿真语言(DSL) ................................................................................................ 88 6.10 Matlab 集成 ................................................................................................................... 97 参考资料 ................................................................ 104 DIgSILENT PowerFactory 学习交流信息 ...................................... 104

1 软件概况
1.1 简介
DIgSILENT(DIgital SImuLation and Electrical NeTwork calculation program)即:数字仿真 及电网计算程序最早由德国DigSILENT公司于1976年研发。是一种用基于计算的工业、商用电 力系统集成、 交互式分析软件。DIgSILENT以实现电力系统及其控制系统的规划及运行优化为 主要目标, 全面引入面向对象编程技术和数据库概念,允许用户在单一的数据库中创建详尽的 电力系统元件模型(包括稳态、时域、频域等计算用的一系列参数 )。DIgSILENT/Powerfactory 是世界上首个具有整合在线图形界面的电力系统仿真软件, 具备AC/DC混合系统潮流计算, 故 障分析, 谐波分析, 机电、 电磁暂态仿真,小干扰特征值求解,可靠性分析,保护,配网优化, 参数辨识,最优潮流等强大的集成化电力系统分析功能。 因DIgSILENT/Powerfactory具备丰富的电力电子元件模块及多类型变流器控制模型, 尤其 是DIgSILENT提供多种风机模型与光伏电池和储能系统模型,其被广泛应用于风能、太阳能及 储能装置等新能源大规模接入电力系统的建模、仿真及分析研究。

1.2 功能及特点
1.2.1 主要功能 1. 潮流计算

a) 描述复杂的单相和三相交流系统及各种交直流混合系统。 b) 潮流求解过程提供了 3 种方法以供选择:经典的牛顿—拉夫逊算法、 牛顿—拉夫逊电流 迭代法和线性方程法(直接将所有模型作线性化处理)。 c) 提供变电站控制、网络控制、变压器分接头调整控制以及多种远程控制模式。 2. 故障分析 a) 支持几乎所有的故障类型(包括复故障分析) 。 b) 故障分析的结果既可以采用相分量也可以采用序分量来表示各点的电压和电流,以及 从故障点看进去的戴维宁阻抗等。 3. 谐波分析 的元件模型。 b) 还可以根据需要计算出某母线的谐波自阻抗和互阻抗 , 且绘制出阻抗的 Bode 图和 Nyquist 图,以方便用户了解阻抗的频率特性,进而找出滤波系统的最佳配置位置。 4. 稳定性分析 能够实现机电暂态和电磁暂态的仿真计算,能够仿真电力系统几乎所有类型的故障, 仿真分析的结果能够通过虚拟表计来绘制成曲线图。
1

a) 可以模拟各种谐波电流源和电压源 ,并提供了计及集肤效应和内在自感的与频率相关

5.

可靠性分析 将系统充裕性和安全性进行了综合考虑,主要包括三个方面:预想事故分析、 发电可靠性 估计和网络可靠性估计。

6.

保护 它包含了许多额外的元件如 CT、VT、继电器等。所有这些保护元件在静态、暂态情 况下都能够使用。在所有可能的仿真模式如潮流分析、故障分析、机电暂态和电磁暂 态等情况下这些保护元件都能够响应。

7.

最优潮流 最优潮流计算是对基本潮流计算的有效补充。最优潮流计算主要采用内点法,并提供 了多种约束条件和控制手段,其考虑的目标函数主要有最小网损、最小燃料费用、最 大利润及最小区域交换潮流。

8. 9.

配网优化 能够实现电容器选址优化、解环点优化以及电缆补强优化三种优化功能。 低压网络分析 根据连接到某一线路上的用户数量来定义负荷、考虑负荷的多样性、在进行潮流计算 时考虑负荷多样性并计算电压最大跌落值和最大支路电流、自动进行电缆补强、电压 跌落和电缆负载率分析等。

1.2.2 软件特点 1. 2. 3. 4. 5. 丰富的元件库(Equipment Type Library) ,包括详细的系统元件模型如架空线、电缆、变 压器、SVC、电流源和电压源等,以及控制其模型如发电机调压器、调速器和 PSS 等。 PV/QV 面向程序化过程的编程语言 DPL, 能够实现多种静态仿真分析功能, 如电压稳定性、 敏感性分析等。 面向连续运行过程的仿真语言 DSL,用于实现暂态稳定性分析过程中系统元件的控制。 含多种电力电子元件,如 SVC、TCSC 等,这些元件都可以利用 DSL 定义相应的控制模 型。 数据管理方式 a) 数据库和数据管理器:分级的面向对象的数据,该数据库以 Project 为单位对数据进行 存储,包含计算分析所需要的电网元件信息、图形信息以及计算设置。 b) 提供电力系统运行、规划方案信息管理功能:允许用户在电网基础信息的基础上进行 某些数据的修改并分别进行保存,如涉及不同的扩建方案,分析系统不同的运行方式 等。 6. 完全图形化的操作模式 软件有 Data Manager 和 Graphic 图形窗口两个工作页面组成,用户可以直接在图形窗 口绘制电网、录入和修改电网数据,也可以在 Data Manager 页面中进行数据的录入和 修改。 7. 虚拟表计技术的应用
2

窗口的概念,用于显示通过 DPL 或暂态分析过程中的各变量的曲线和波形,用户可以 根据自己的需要来定义变量。 8. 数据兼容性 a) 提供用于与 SCADA/GIS 进行数据交换的数据交换语言 DOLE。 b) 可以通过 Excel 进行数据的输入和输出。 c) 可与 PSSE/E 和 PSS/U 等电力系统仿真软件的数据进行转换。

1.3 安装、界面及数据结构
1.3.1 安装说明 DIgSILENT/PowerFactory 的安装向导界面如图 1 所示。一般单个用户选择 PowerFactory Workstation 版本安装后激活即可使用。

图1 DIgSILENT/PowerFactory的安装向导界面

3

1.3.2 基本界面 DigSILENT/Powerfactory 14.0 主界面如图 2 所示。其中图标区包含软件主要计算及分析功 能的快捷图标,以及工程打开、保存等操作图标。绘图窗口用于电网及元件、控制系统结构、 控制代码的绘制及编写,是软件的图形数据输入一体化界面。工具栏中提供了电力系统元件、 线路等常用模型,将其直接拖放至绘图窗口中并进行相应连接即可完成模型的拓扑结构建模。 数据管理窗存放 DigSILENT/Powerfactory 中所有模型参数、系统结构、用户信息及计算结果 等数据。输出窗用于简单仿真及计算结果、软件运行及提示信息的输出。
图标区 工 具 栏

绘图窗

数据管理窗

输出窗

图2 DigSILENT/Powerfactory软件界面

DigSILENT/ 数据管理窗口如图 3 所示。 左侧窗口给出了软件中全部数据的树形索引结构。 Powerfactory 中,用户通过账户对数据进行查询、修改、创建等操作。不同的账户类型具有不 同的优先等级。其中 Administrator 账户具有最高优先级,用于对系统中其余账户的创建、修 改及删除操作,可对系统中任意账户中数据进行创建、修改及删除操作,在该账户中,软件平 台中所有用户均可见,但不能够进行任何算例的仿真计算。示例账户中给出了 DigSILENT/ Powerfactory 软件在各方面应用的 18 个示例,使用该账户登陆,所有用户均不可见,一般不 使用该账户进行模型构建及操作。用户可根据需要自行创建用户账户,如 wangcg,staticwind 等。模型的创建、修改,仿真计算等操作均在用户账户中完成。

4

示例账户

用户账户

用户账户

用户账户

zhangzhangh

管理员账户 图3 数据管理窗口

用户账户创建及登陆窗口如图 4 所示。用户账户可采用无密码创建方式,也可采用口令 密码方式创建。加密账户一旦创建,再次登陆需要输入相应密码。

图4 用户账户创建及登陆窗口

用户账户数据管理窗口如图 5 所示,由用户账户登陆后,仅本账户可见(wangcg 用户不 可见) 。在用户账户中可将 Demo 账户中示例复制至本账户下进行修改、仿真等操作。

图5 用户账户数据管理窗口

图标区主要图标如图 6 所示:

5

图6 图标区主要图标

绘图区主要绘图元件如图 7 所示。

图7 绘图区主要绘图元件

输出窗口工具如图 8 所示。

6

图8 信息输出窗口

1.3.3 数据结构 DigSILENT/Powerfactory 数据以 Project(工程)为基本单位进行操作。 工程的内部数据结构 如图 9 所示。一个工程中包含 Library,Network Model,Operation Scenatios,Study Cases 以及 Settings 几个部分。

7

图9 工程数据结构

Library(库)中文件通常分为 LineType(元件类型库)及 Operational Library(运行数 据库)以及 User Defined Models(用户自定义模型库)等几个子库。用户可自行创建新类型的 子库。元件类型库中一般存储本工程所需的发电机、线路、变压器等电力设备元件及控制系统 传 递 函 数 的 Block Definition( 模 块 定 义 ) 文 件 。 除 工 程 中 用 户 自 行 定 义 的 本 地 库 外 , DigSILENT/Powerfactory 将常用的电力系统元件、 控制结构及控制过程的模块定义文件事先统 一存放于全局库中, 任意工程中的模型均可引用全局库中的模块定义,从而大大降低建模重复 工作量。

图10 全局库及本地库

Network Model Network Data, Variations 三个部分。 Diagrams (网络模型) 中包含 Diagrams, Network Data 存放线路、 存放图形化界面中的网络拓扑信息, 变压器等原件型号, 参数等数据。 Network Data 中的数据按 grid(电网区域)划分(如本例中电网仅有 1 个区域:39bus),用户可 Variations 建立多个电网区域, 不同区域电网可以互联, 并在计算中按需要将各区域加入或移除。 用于存放新建电厂、线路等网络变化数据。

8

图11 网络模型结构

Study Cases(算例)中包含多个 Study Case(算例)文件夹(本例中仅有一个算例 Six-Cycles Fault Amplidyne) ,不同算例中可包含不同电网区域及运行方式,故障方式等计算命令以及结 果。图 12 中给出了一个算例的数据结构,主要数据包括:Summary Grid(电网结构),以 注;ASCII Result Export(计算结果数值输出),以 OPF 波) 、 (最优潮流) 等已选变量计算输出结果, 以 标 标注;Eigenvalues(特征值)、Harmonics(谐 Optimal Power Flow(最优潮流)、 标注。

Simulaiton Events(仿真事件)、Short Ciruit Calculation(故障计算)等仿真计算设置、事件过程 及故障方式等数据,该系列数据根据算例所进行的计算类型将自动增减。General Set(通用设 置) 、Short Circuit Set(短路设置)等计算设置数据,以 标注。Graphic(图表)中包含动态仿 标注。 真、特征值、谐波等仿真计算结果的输出波形及可视化结果,以

图12 算例结构

另外,DIgSILENT/PowerFactory 中有很多示例工程和模板如图 13 所示,这为学习使用本 软件和建模仿真工作带来了很大的便利。

9

图13 Demo中的例程和全局库中的模板

2 基本操作
2.1 新建工程
1. File>>New>>Project,如图 14 所示。

图14

新建工程 10

2.

弹出工程设置页面如图 15,输入工程名称等信息,点击 OK。

图15 工程设置页面

3.

然后弹出电网设置页面如图 16,键入电网名称,选择颜色和电网额定频率,点击 OK。得 到新建工程如图 17 所示。

图16 电网设置页面

图17 用户user所属的工程Project 11

2.2 导入、导出文件
2.2.1 导入工程 File》Import》Data,如图 18 所示。弹出文件选择窗口,选择要导入的工程文件。注意: 要导入的工程文件必须保存在英文路径下。

图18 导入工程

2.2.2 导出工程 选中要导出的工程,确认工程处于未激活状态,右键》Export 如图 19 所示。弹出导出工 程页面,选择导出工程的保存路径和格式(pfd 或 dz) ,确认导出。

12

图19 导出工程

2.2.3 导出图形文件 在想要导出的电网单线图或者结果图形页面,执行 File》Export 操作,选择 WMF 或者 BMP 格式导出图形文件。

图20 导出图形文件

13

2.3 简单教程
DIgSILENT/PowerFactory 提供了简单的训练教程,方便用户初步掌握该软件的使用。在 15.0 以上的版本中, Tutorial 可以查看有关该教程的详细说明, Start 通过执行 Help》 执行 Help》 Tutorial 可以开始进行练习。总共有 7 个练习。

图21 软件自带的Tutorial

2.4 绘制电网图
在绘图元件区单击选择所需元件绘图;先画母线,后画元件;画好的电网单线图会自动 保存。对于电网单线图中元件的编辑,可以在绘图界面或者数据管理窗口进行。

14

图22 绘制电网图

2.5 元件选型
绘制好的电网图中,电源、变流器、母线、电抗和电容等需要设置电压、电流、容量、 相别及是否接地等基本参数。母线基本参数设置页面如图 23 所示。

图23 母线参数设置页面

电机(包括发电机、电动机和变压器)和线路(架空线路和电缆)需要选择或者新建型 号,元件引用的原型最好存在本工程库里。发电机选型如图 24 所示。

图24 发电机选型 15

2.6 计算潮流
在电网单线图中的所有元件都正确设置和选型后,就可以进行简单的潮流计算。潮流计 算的入口数据如表 1 所示。
表1 潮流计算的入口数据

潮流计算的基本设置包括计算方法 (交流或直流、 平衡或不平衡) 、 无功功率控制选项 (变 压器分接头是否自动调节、电容器和电抗器是否自动调节、是否考虑无功出力极限) 、温度对 架空线或电缆的影响及负荷选项等。另外还有有功功率控制方式和高级选项等。

图25 潮流计算设置

设置好潮流计算选项后,点击 Execute,即可看到潮流计算结果,包括图形界面窗口输出 (发电机输出功率、母线和节点电压、线路传输潮流、变压器和负荷潮流)和信息输出窗口输 出(母线信息、全系统完整信息、系统部分信息) 。
16

图26

图形界面潮流计算结果

结果输出窗口的输出内容可以通过 Output Calculation Analysis 进行设置,如图 27 所示。

图27 Output Calculation Analysis设置 17

在电网单线图页面空白处,右键》Layers 后弹出如下页面,可以设置元件名称、计算结 果、连接点、向量组及潮流方向箭头是否显示。

图28

Graphic Layers设置页面

2.7 运行仿真计算
DIgSILENT/PowerFactory 有多个仿真计算工具箱,点击 Change Toolbox 图标,就能看到 所有工具箱的下拉列表,如图 29 所示。

图29 DIgSILENT/PowerFactory的多个仿真计算工具箱

选择不同的工具箱,该图标右侧会出现响应的功能按钮。以 RMS/EMT Simulation 为例, 选择该项后,右侧就会出现如上图所示的四个按钮,分别是计算初始化条件、开始仿真、停止 仿真和新建仿真图。点击初始化条件计算按钮,会弹出初始化计算设置页面,基本选项包括仿 真方式(RMS、EMT)和电网类型(对称网络、不对称网络) 。此外,还有步长设置(主要选 择仿真过程中的基本积分步长和最大步长限制)以及步长调整设置和高级选项等。
18

图30 初始化计算设置页面

初始化计算还与动态模型中各个模块的初始化设置有关,具体内容将在下一章说明。初始 化计算成功后,就可以开始仿真,点击开始仿真按钮,会弹出仿真设置页面,设置仿真时长和 输出结果显示。

图31 仿真设置页面

点击停止仿真按钮,可以随时停止仿真;点击新建仿真图按钮,可以绘制仿真曲线或结 果图。

19

2.8 设置仿真结果图
2.8.1 新建仿真结果图 在运行仿真之前,要先作好仿真结果图,在仿真结果后,想要观察的结果会自动显示。 绘制仿真结果图的步骤如下: Step1 将用于绘制曲线的变量加入结果变量集 Define》 Variable 对于电网单线图中的元件, 选中想要加入变量集的变量对应的元件, 右键》 Set,在元件列表中双击该元件,出现变量选择页面如图所示。勾选想要加入结果变量集里的 变量。

图32 定义元件变量集

20

图33 勾选变量

对于控制模型中的变量,则需要先选中该 DSL 所在的复合模型,然后在数据管理窗口的 右边列表中选中所要定义的变量所在的 DSL 模型,同样右键》Define》Variable Set,最后可选 择想要加入结果变量集中的变量。

图34 定义控制模型中的变量

Step2 新建虚拟仪器页面与图形面板 在单线图界面,点击 Insert New Graphic 按钮,弹出设置页面如图所示。选中 Virtual
21

Instrument Panel 后得到空白的绘图页面。

图35 新建虚拟仪器页面

在该空白页面中,点击 Append New VI(s)按钮,插入空白的图形面板。

图36 新建绘图面板

Step3 设置结果图属性
22

双击该图形面板,出现图形设置页面,对于简单的 Subplot 图形,x 轴为时间,y 轴可选 结果变量集中定义的变量。在属性设置列表中,第一栏选择结果文件,可以选择不同仿真条件 下的仿真结果用来对比,在不选择时为默认的结果文件 Results。第二栏选元件或者 Common Model(DSL) ,第三栏选具体的变量,之后是颜色、线型、线宽、变量描述等栏。在变量描述 栏里,可以自行添加对变量的描述,在图线信息中显示出来。

图37 设置结果图线属性

设置好曲线信息后,就可以运行仿真,得到该变量的曲线图。本例中为发电机 G1 的有功 功率,如下图所示。图线上边的 Zoom 和 Scale 等按钮可以对图的显示范围进行调整。

23

图38 图线范围调整按钮

2.8.2 改变字体设置 对于图中的数字标示和变量说明的字体与大小,软件中有一些 Style 可供选择。

图39 软件自带图线Style

如果自带的 Style 不能满足要求,可以新建用户自定义的 Style。在图形面板空白处,右 键》Style》Create New Style,并给新的 Style 起名。

24

图40 新建Style

然后,右键》Style》Edit Style,弹出设置对象列表,可以对自己新建的 Style 进行设置。 双击想要设置的对象后,出现设置页面,在设置页面点击 Font,弹出字体设置页面,然后可以 对设置对象的字体、字形和大小等进行设置。设置好后,可能需要切换一下 Style 才能成功显 示设置好的结果。

图41 设置自定义的Style 25

2.8.3 对比仿真结果 如果要对不同仿真条件下的仿真结果进行对比,可先将一种仿真条件下的仿真结果另存。 仿真结果位于相应的 Study Case 下,可以直接复制粘贴后重命名保存,以便绘图设置中调用。

图42 复制仿真结果文件

图43 粘贴仿真结果文件 26

在本例中, 将复制粘贴后的放着结果重命名为 Result1, 对应的是发生故障时的仿真结果。 然后改变仿真事件设置,使之前设置的短路故障 Out of Service。

图44 改变仿真事件设置

再次运行仿真,将仿真结果 Result 复制粘贴并重命名为 Result2。在图线设置页面的选择 列表第一栏即结果文件选择栏分别选择 Result1 和 Result2,并设置不同的颜色、线型和说明进 行区分。

图45 设置不同仿真结果对比

设置好后,可以得到故障与正常运行时发电机输出有功功率的对比。

27

图46 不同仿真条件下的结果对比

3 动态建模基础
3.1 DigSILENT/Powerfactory 动态模型的基本结构
DigSILENT/Powerfactory 动态模型主要由下述几类构成: 1、 Model Definition: 调用 Type(用 户自定义类型使用 Block Definition), 以 调用 Composite Model Frame, 以 Data 中的 Common Model(通用模型) ,以 标注;6、Composite Model(复合模型) ,以 2、 Composite Model Frame 标注; (复合模型框架) : 、 等标注;4、Network 、 等 标注;5、软件封装的电网元件,以 标注。 3、Type:元件类型:以 标注;

动态模型各组成模块构成关系如图 47 所示,组成模块可分为以绿色图标表示的 Model 及 褐色图标表示的 Block。Block 是整个模型的最底层,用于定义 Model 的具体构成内容。其中 Type 定义电网元件的类型及结构; Composite Model Frame 定义 Composite Model;Model Definition 用于定义 Common Model。 整个电网中的元件模型或直接由电网元件构成,或由 Composite Model 构成。其中,电网 元件一般仅用于构成已封装好的简单原件模型。Composite Model 由若干电网元件或 Common Model 组成,构成了包含控制及自定模块的原件动态模型。 电网元件通过系统指定的输入及输出变量与 Common Model 或 Composite Model 进行控制量及 数据传递,通过电网络与系统其它部分实现连接。通常的 Composite Model 由电网元件及 Common Model 构成, 其中 Common Model 可接收电网元件参数信号或向电网元件发出控制指
28

令。

图47

DigSILENT/Powerfactory动态模型构成关系

3.2 Model Definition
Model Definition 通过引用基于 DSL 语言(后面将介绍)或 DSL 语言定义的 Block Definition Common Model 通过调用 组合形成 Block Definition 定义系统中的控制器模型及模型传递函数。 Block Definition 构成用户自定义元件的 Model Definition。同一 Block Definition 可被多个 Common Model 调用。用户可根据需要建立或修改 Model Definition 引用的 Block Definition, 从而定义不同的系统元件及控制模型,每个 Block Definition 对应一个传递函数,各 block 间可 采用输入、输出信号及运算符连接。 一个基于 DSL 的 Block Definition 模型如图 48 所示。在 Basic Data 页中,level(层次)定义 了该 block 能够使用的功能及可使用的函数类型。一般使用 level 3 或 4。Variable 定义了 block 中需使用的各类变量名称。在 Equation 页中,主要语句分为定义语句、初始化语句及变量说 明语句(在下例中出现)三类。

29

图48 基于DSL的Block Definition

定义语句主要按 DSL 语言中给定函数及运算关系给定动态过程中变量依存关系。 初始化语句给定模块中输入变量、输出或状态变量的初值(根据具体模块需求定义) 。对 系统中的电力元件, 其相应输入及输出变量在潮流计算后将自动给定,而与该原件相连的模块 变量初值可由相应元件初值求解(动态仿真中可使模型直接进入稳态) ,变量初始化后,动态 仿真程序由给定初值开始实施数值积分计算。 变量初始化不当将导致系统进入稳态时间大幅延 长。 变量说明语句主要对参数变量进行变量单位及用途等注解性说明。说明内容使用' '包含, 并在 DSL 模块中出现。 一个基于 Block Definition 组合的 Model Definition 如图 49 所示。由图 a 可见,该模块由 5 个 Block Definition 构成,相互模块间变量传递关系可由用户指定,其中绿点表示输入量,红 点表示输出量。 需要添加模块时, 通过将右侧工具栏中的 Block reference 图标至 Block Definition 中并将其 type 选为需引用的 Block Definition 即可。一旦出现 Block reference 图标,整个 Block Definition 将被锁定为组合型 Model Definition。Block reference 图标右侧相邻的 Slot 图标将不 可被选中,Model Definition 不可再成为 Frame。

30

a 组合Block Definition内部结构

b 输入输出变量与初始化 图49 Block Definition组合的Model Definition

对组合 Model Definition,变量名及种类将根据内部结构给定的变量传递关系自动生成, 无需另行指定。

3.3 Common Model
Common Model 通过引用 Block Definition 作为其 Model Definition 定义内部结构及功能。 在 DigSILENT/Powerfactory 中, 功能, 结构相同而参数不同的 Common Model 可引用同一 Block Definition, 从而大大降低建模工作量。 而对具体 Common Model, 其参数可根据需要单独设置。 需单独设置的参数名称及数量在 Block Definition 中确定。
31

图50 Common Model

3.4 Type
Type 是电网元件所引用的模型结构及部分参数。不同种类的电网元件具有不同类型的 Type,使用***Type 区分其类型,如图 51 中异步电机类型为 Asynchronous Machine Type,其 可被异步机元件引用。对线路有 Line Type 等,相应 Type 可被相应元件引用。 Type 中定义了用于潮流、电磁暂态仿真、机电暂态仿真、谐波分析等不同仿真计算的结 构及参数,仅在进行相应计算时参数才会被引用。DigSILENT/Powerfactory 在公共库 Library 中事先定义了大量的电力系统元件 Type,用户可直接加以引用,也可以根据需要对其中参数 进行修改。

32

图51 异步电动机Type

3.5 电网元件
DigSILENT/ Powerfactory 电网元件通过引用相应***Type 作为其 Type 定义其结构及功能。 对元件的建立基于图形界面进行。在元件定义页中可指定潮流、动态仿真、谐波计算等稳态、 动态仿真所需数据。

33

图52 变压器元件

3.6 Composite Model Frame
Composite Model Frame 是用于 Composite Model 定义的 Block Definition。其给出了 Composite Model 所引用 Common Model 及电网元件的数据传递关系。Composite Model Frame 使用 Slot 定义内部结构。

图53 Composite Model Frame定义

Slot 定义页中,需给出输入及输出变量名称,该信号名称必须与所引用元件输入输出量同 名以确保参数传递。Slot 名称可随意给定,但为增强模块的可读性,一般取 Slot 名称与所引用 模块同名。
34

图54 Slot定义

3.7 Composite Model
通过引用 Frame,Composite Model 已经定义了所加载的各模块间的变量传递关系。但模 块的加载则由用户在 Composite Model 定义页面中规定。图 55 所示的 Composite Model 中, DFIG 相应的 Slot 加载模块为双馈式发电机 G1d。PQ Control 相应 Slot 加载模块为 Common Model(PQ Control)。

图55 Composite Model 35

3.8 构造动态模型的基本步骤
DigSILENT/Powerfactory 中建立动态模型的基本步骤如下: 1. 2. 3. 4. 5. 6. 7. 8. 9. 在绘图窗内将添加相应元件图标。 新建或引入已有元件 Type。 在元件定义页中引入元件 Type 并修改参数。 新建或引用已有 Model Definition。 建立 Common Model。 在 Common Model 引入建立的 Block Definition,并添加所需参数。 建立用于 Common Model 的 Block Definition。 新建或引用已有 Composite Model Frame。 建立 Composite Model。 Model。

10. 在 Composite Model 中引入 Composite Model Frame,加载所引用的元件模型及 Common

4 DSL 语言应用
4.1 DSL 语言结构
DSL: DIgSILENT Simulation Language(DIgSILENT 仿真语言)被用来进行电力系统中电气 控制系统及其他设备建模。与其他的编程及仿真语言一样, DSL 使用独有的符号系统进行建 模。 DSL 使用语句及框图两种表达方式。可以描述多种自定义模型:任何类型的静态/动态的多 输入/多输出模型,例如电压控制器、PSS 等;可以描述几乎所有的算法及逻辑表达式;能够定 义程序事件。 DSL 语言语句(无需“;”号断句)含以下三类: 1、表达式:数学表达式,包含数学运算符、常数、函数、括号。示例:A = x1+2.45*T1/sin(3.14*y) 。 2、Bool 式:逻辑表达式,包含逻辑关系、逻辑运算、括号。示例 A = {x1>0.and..not.x2 <= 0.7}.or.T1=0.0。 3、字符串:示例:A = 'this is a string'。 DSL 使用变量类型包含以下五类: Output signals:输出变量可作为其他 DSL 模型的 Input signals。 Input signals:输入变量来自其他 DSL 模型或系统中电力元件任何输出量 State variables:状态量用于 DSL 模型内部动态过程描述,不可直接输出。 Parameters:参数变量是只读参数,用于改变 DSL 模型动、静态特性。 Internal variables:内部变量用于简化表达式中使用的参数,加强语言可读性。
36

一个典型的 DSL 语句模型如下所示: vardef(T)='s';'Time constant' vardef(K)=;'Gain' limits(T)=[0,) x.=select(T>0,(K*yi-x)/T,0.0) yo=select(T>0,x,K*yi) 参数定义页如图 56 所示。

图56 Block Definition参数定义

上述模型定义了一阶惯性环节 K/(1+sT)。其中,比例增益 K 及时间常数 T 是可调的参数 变量,x 为状态变量。 前两句对参数变量 T,K 的单位及用途进行说明。 第三句对参数 T 的取值范围进行规定。 最后两句在 T>0 限定下定义了惯性环节的数学关系。 通常该模块使用时还需要对状态量 x 进行初始化(可在外部进行) ,以给定积分初值。常 用的初始化语句为 inc(x)=0。

4.2 变量初始化
变量初始化对 DIgSILENT 至关重要。不合理的初始化将使系统从一个远离平衡点的初始
37

状态向平衡状态过渡,增加系统过渡时间。对大规模系统仿真,将大大增加系统达到稳定运行 状态的时间,延长仿真时间。更严重的是,不合理的初始条件将可能导致系统的初始运行点无 法进行数值积分计算,从而导致系统仿真无法进行或报错。 DIgSILENT 变量初始化可采用直接初始化与迭代初始化两种方式。 1、直接初始化:采用以下四种方式 a、inc(varnm) = expr 最常用的变量初始化语句, 使用解析表达式初始化有输出连接的模型。由于模块具有外部 连接,输出变量初值已由外部模块给定,无需初始化。输入变量、状态变量、内部变量则需进 行初始化。对初始化的变量,表达式在重置后按初值计算。 b、inc0(varnm) = expr 用于无输出连接变量初始化。 由于输出变量未与后续模块相连,需要在本模块中单独进行 初始化。 c、自动初始化

自动初始化选项

图57 自动初始化

自动初始是最简便的初始化方式,当选中了 Block Definition 中的自动初始化选项后,系 统将根据表达式自动计算内变量及输入变量的初值。此时,虽然仍需使用 inc()指定初值,但 实际上这些量的初值均由系统自动计算,并非都按 inc()命令给定。 d、incfix(varnm) = expr 在自动初始化且自动初始化变量计算存在冲突时需使用 incfix()命令进行初始化。当一个 输出同时由 n 个输入确定时,incfix()可指定其中 n-1 个,而第 n 个变量则由系统自动初始化。 (直接指定 n 个输入不能保证其输出为所需值)
38

2、迭代初始化:对于复杂计算式,初值一般无法解析表达。针对这一困难,DIgSILENT 采用数值计算方案自动搜索变量初值。 根据已知初值及未知初值变量间数值关系,基于线性搜 索、二分法搜索、以及牛顿法,DIgSILENT 形成了三种初值搜索方案 a、inc(varna)=loopinc (varnb,min,max,step,eps) 其中:varnb =初值已知的变量;min = 搜索下限;max = 搜索上限;step = 搜索步长;eps =最大误差。 loopinc 采用线性搜索,根据 varna 与 varnb 间关系式,由 min 开始,在(min,max)区间内按 步长 step 搜索与 varnb 偏差最小的 varna,当最终偏差大于 eps 时给出警告信息。 b、inc(varna)=intervalinc(varnb,min,max,iter,eps) 其中:varnb =初值已知的变量;min=搜索下限;max=搜索上限;iter=迭代次数上限;eps= 最大误差。 lntervalinc 采用二分法搜索,根据 varna 与 varnb 间关系式,分割区间(min,max)直至等于 varnb。若 iter 次分割后误差仍大于 eps,则给出警告信息。 c、inc(varna)=newtoninc(initexpr, start, iter, eps) initexpr=使用输出变量表达的输入变量表达式; start=搜索初值; iter=迭代次数上限; 其中: eps=最大误差。 Newtoninc 使用牛顿搜索,根据初值 start 搜索 varna 初值。若达到迭代次数上限 iter 时, initexpr 与 y 的误差仍大于 eps,给出警告信息。 用算例对上述各类初始化过程说明如下: 1、对有外部模块连接的输出变量 y,y 初值自动计算,仅需由表达式计算输入量 u。 y=2+3*u inc(u)=(y-2)/3 2、当输出 y 并未接输出模块,需使用 inc0(y)给定 y 的初值,进而初始化 u。 y=2+3*u inc0(y)=5 inc(u)=(y-2)/3 3、输出 y 并未接输出模块,使用 inc0(y)给定 y 的初值,采用线性搜素初始化 u。 y=2+3*u inc0(y)=5 inc(u) = loopinc(y, -10, 10, 0.01, 0.001) 4、输出 y 并未接输出模块,使用 inc0(y)给定 y 的初值,采用二分法初始化 u。 y=2+3*u inc0(y)=5 inc(u) = intervalinc(y, -10, 10, 40, 0.001) 5、输出 y 并未接输出模块,使用 inc0(y)给定 y 的初值,采用牛顿法初始化。 y=2+3*u inc0(y)=5
39

inc(u) = newtoninc((y-2)/3, 0, 100, 0.001) 6、 y=2+3*u inc0(y)=5 inc(u) = 0 ! initial value for automatic calculation

4.3 状态变量初始化技巧
DSL 使用状态变量对动态过程加以描述,对状态变量的初始化直接影响系统动态过程的 过渡时间。 1、解析定义法 对一阶惯性环节 yo=(K/(1+sT))*yi。DSL 语言描述为 x.=(K*yi-x)/T yo=x 为保证系统初始化运行点即为平衡点,显然需要保证系统状态量导数为 0。 由于 inc(x)=yo,显然 inc(yi)=x/K。

图58 inc(x)=0,inc(yi)=0条件下yi动态(错误的初始化)

图59 inc(x)=yo,inc(yi)=x/K条件下yi动态(正确的初始化)

2、自动初始化
40

另外,在显然明了的初始化过程中,可使用自动初始化。 针对上例,可任意制定 x,及 yi 的初值,如 inc(x)=0,inc(yi)=0。软件将按平衡状态自动进 行初始化

图60

inc(x)=0,inc(yi)=0条件下yi动态(自动初始化)

5 DPL 语言应用
5.1 DPL 语言初步
DPL: DIgSILENT Programming Language (DIgSILENT 编程语言)用于程序自动运行任务的 完成。DPL 提供决策和流程命令;提供定义与使用用户定义变量;具有与访问对象及输入输 出的灵活接口;提供数学表达式。 通过自动任务执行,DPL 能够应用于电力系统仿真分析的任何领域:网络优化、电缆定 容、保护配合、稳定分析、参数扫描、应急分析等。 简言之,DPL 的主要功能是将 DIgSILENT 中的各项定义、计算、分析功能进行动态、有 机、复杂的结合,从而全自动或半自动的完成电网分析任务。例如,在进行电网临界切除时间 计算时,需要针对各输电线路调用仿真程序计算故障切除时间。对大电网工作量是巨大的。 DPL 能够全自动完成全网各线路的选择,稳定计算,失稳判别等一系列工作,并最终确定出 电网临界切除时间,大大降低电网分析、计算的人工工作量。 DPL 使用程序 scripts(脚本)结合以下计算功能完成任务: 诸如'if-then-else? and 'do-while'等流程指令;诸如 load-flow or short-circuit commands 等 PowerFactory 仿真命令;输入输出程序;数学函数;对象过程调用;子程序调用。 DPL 中,命令对象 ComDpl 将不同参数、变量或对象与函数及内部组件连接,并输出计算 结果或改变参数。 脚本的输入可以是预定义的输入参数、单线图、数据库或对象组件组中的单个对象,其中 单线图、数据库或对象组件组中的单个对象均被存储在 General Selection 中。 这些输入信息随后被脚本中的方程及内部变量引用,同样的,内部对象可被多种命令使用 并执行。
41

图61 DPL组成

DPL 能够执行一系列操作并启动计算或其他脚本内部函数。它还能够通过与数据库的通 信,存储数据库内对象修改的设置、参数及结果。几乎所有激活工程中的对象都能够被访问及 修改。 使用预定义输出命令 ComSh 或用户自定义的输出命令,DPL 能够将结果输出或改变元件 参数。 建立 DPL 程序的步骤: 1、建立一个 ComDpl 并给定输入参数或外部对象

图62 建立ComDpl

2、将所需元件添加至 DPL Commands Set。
42

图63 添加元件至DPL Commands Set

3、编辑脚本文件 4、执行 DPL 文件:点击相应元件、在右键菜单中点击 Execute DPL Scripts 按钮、从 DPL 文件菜单中选出需执行的 DPL 脚本文件、点击按钮 Execute 运行。

5.2 DPL 语言结构
DPL 使用类似 C++的语法结构,简单、直观、可读性强且命令集小。DPL 语言包含:变 量定义、操作与表达式、流程指令及函数调用。DPL 使用‘;’号断句,语句可由括号组合。 1. 变量类型:包含双精度变量、整型变量、字符串、对象、对象集合。向量及矩阵作为 外部对象引用。 定义语句:[TYPE] varname, varname, ..., varname; 2. 定常参数:SEL(DPL 一般对象) 、 NULL(空对象) 、this(DPL command 自身) 。 3. 表达式与赋值:类似 DSL。 4. 程序流程指令(与 C++类似) : if ( [boolexpr] ) [statlist]; if ( [boolexpr] ) [statlist] else [statlist]; do [statlist] while ( [boolexpr] );while ( [boolexpr] ) [statlist]; for ( statement ; [boolexpr] ; statement ) [statlist]。
43

可使用逻辑运算符对 bool 表达式进行运算。 5. 输入输出:input(var, 'var 数值'); output('=var');等号前为字符串,等号后为变量名。 外部对象操作:DPL 有很多种方式对数据库对象及其参数调用。 直接在 DPL command folder 中引用;通过 DPL command set 调用;通过 external objects 调 用。 对象的变量与方法调用:当数据库中的对象被 DPL 调用后,该对象的所有方法及变量均 可被 DPL 调用。调用格式: (objectname:parametername) 。 DPL 命令可调用其他 DPL 命令。

6 稳定性和电磁暂态仿真
6.1 简介
电力系统稳定性的研究涉及在前后负荷或发电突然变化, 故障和停机的条件下电力系统的 行为。系统的鲁棒性是指在正常运行和扰动条件下,系统保持稳定的能力。因此,有必要设计 和操作电力系统,可以在不损失负荷或电力系统不失步的情况下,经受住暂态事件(即可能的 突发事件) 。根据三种可能的时间表,电力系统中的暂态可分为: 短期或电磁瞬变; 中期或机电暂态; 长期动态。 PowerFactory 功能可以分析完整的 电力系统元件的多层次建模和先进算法的使用意味着, 电力系统暂态现象。因此,有三种不同的仿真功能: 1. 2. 3. 一个基本功能,就是采用对称稳态(RMS)网络模型用于中期仿真和平衡网络条件下 暂态用于长期仿真; 一个三相功能,就是采用对称稳态(RMS)网络模型用于中期仿真和平衡或不平衡网 络条件下暂态用长期仿真,不平衡即不对称故障后的动态行为分析; 电磁暂态(EMT)仿真功能,使用在平衡和不平衡网络条件下的动态模型用于电磁和 机电暂态。此功能特别适合于短期暂态分析。 除了时域计算,还有其他两个分析功能可供选择: 参数辨识 模态分析或特征值分析 PowerFactory 时域仿真的初始化由一个有效潮流完成,PowerFactory 功能能确定所有电力 系统的元件, 包括所有的控制单元和机械部件的初始条件。这些初始条件是指在仿真开始时的 稳态运行点,符合负载,电机,控制器等所有状态变量的偏差是零的要求。 仿真过程开始之前, 必须确定用什么类型的网络表示用于进一步的分析, 使用多大的步长, 处理什么样的事件和存储结果的位置。
44

仿真使用使用迭代过程和动态模型状态变量积分来解 AC 和 DC 潮流。高度精确的非线性 系统模型会得到精确解,包括在高振幅的暂态。各种数值积分例程被用于机电系统(包括电压 调节器和电力系统稳定器)和液压机械或热机械模型。 暂态仿真执行过程中,通常包括以下步骤: 1. 2. 3. 4. 5. 6. 7. 计算初始值,包括潮流计算; 结果变量和/或仿真事件的定义; 结果图形和/或其他虚拟仪器的可选定义; 执行仿真; 创建其他的结果图或虚拟仪器,或编辑现有的; 更改设置,重复计算; 印刷效果。

6.2 计算方法
6.2.1 平衡的 RMS 仿真 平衡的 RMS 仿真功能,考虑在机电,控制和热设备的动态。它采用了无源电网对称的, 稳定状态表示。使用这种表示,只考虑电压和电流的基本组成部分。 根据发电机,电动机,控制器,发电厂和用于电机驱动的机器模型,可进行以下研究: 暂态稳定(如确定关键故障清除时间) ; 中期稳定(如旋转备用和负荷脱落优化) ; 振荡稳定(如控制装置的优化,以提高系统的阻尼) ; 电机启动(如确定启动时间和电压下降) ; 可以在仿真中加入事件,包括下面的例子: ?启动和/或失去发电机或电动机; ?负载的逐步变化; ?负荷脱落; ?线路和变压器开断/跳闸; ?对称短路事件; ?插入网络元件; ?电厂关闭; ?控制器设定值的变化; ?任何系统参数的变化。 由于网络的对称表示,基本的仿真功能只允许插入对称故障。 6.2.2 三相 RMS 仿真 如果必须分析不对称故障或不平衡网络,必须使用三相 RMS 仿真功能。这种仿真功能使
45

用稳定状态下,无源电网的三相表示, 因此可以计算由于网络元件不平衡或由于不对称故障引 起的网络不平衡情况。在机电,控制和热设备的动态表示和在基本 RMS 仿真功能的一样。 可以模拟不对称的机电设备,使用这个分析功能也可以对单相和两相网络进行分析。 除了平衡的 RMS 仿真事件,可以模拟不平衡的故障事件,如: ?单相和两相(接地)短路; ?相间短路; ?不同线路之间的电路故障; ?单相和两相线路断线。 所有这些事件可以模拟同时或单独出现,因此可以模拟对称和非对称故障的任意组合。 6.2.3 三相 EMT 的仿真 在 EMT 仿真中, 电压和电流用瞬时值表示, 这使无源网络元件的动态行为也被予以考虑。 这是为以下应用所必需的: ?电压和电流的直流和谐波成分; ?逆变器驱动的机器的精确行为; ?高压直流输电系统的精确行为; 无源网络元件,如变压器饱和的非线性行为; ?开关设备的过电压现象; ?雷击和行波; ?故障中保护装置的确切行为分析。 使用高级别且详细的模型代表网络意味着,可以仿真各个阶段和所有定义的事件(对称和 非对称) 。 EMT 的功能也可以用于长过程的暂态仿真。然而,由于无源网络中元件是动态表 示的,积分步长明显比在一个稳定状态表示情况下的小,因此,计算时间会增加。

6.3 仿真设置
基于潮流计算结果, 必须确定所有内部变量和连接机内部工作状态,控制器和其他暂态模 型。这一计算结果是计算同步发电机励磁电压和负荷角。此外,控制器、发电厂模型和任何其 他活动的并会影响时域仿真的设备的所有状态变量,也会被计算。 计算的初始条件通过以下方式启动: 从图标工具栏上选择图标 ,然后按图标 ;

从主菜单选择 Calculation -> Stability -> Initial Conditions...。 在 Initial Conditions 命令 (ComInc) 页面中, 所有的仿真设置都可以定义, 如仿真类型 (即 RMS 或 EMT,平衡或不平衡)和仿真步长设置。 这些设置包括: Basic Options (基本选项)
46

这里可以选择模仿真类型(RMS,EMT 的平衡,不平衡) ,定义潮流命令,结果对象和事 件列表。 Step Sizes (步长) 使用步长算法指定最大和最小步长。 Step Size Adaptation(自适应步长) 启动变步长算法。 Advanced Options(高级选项) 包括各种误差域,迭代限制,阻尼因素等 Noise Generation(产生噪音) 定义随机应用的噪音产生参数。

图64 初始化命令页面

6.3.1 基本选项 基本选项用于选择仿真类型和网络表示方式。 通过点击相应的图标 事件列表和潮流命令可用于检查或编辑这些对象。
47

, 结果对象的引用,

Verify Initial Conditions (验证初始条件) 如果完成初始化, 电力系统将在一个稳定状态。 当 Verify Initial Conditions 选项被启用时, 然后条件 dx/ dt = 0 检查所有的状态变量。如果一个或多个状态变量的导数不等于零,电力系 统可能从仿真开始时就开始“移动”,即使没有应用外部事件。在这种情况下,用户应仔细分析 相关的控制器或模型,及其定义的初始条件。 应仔细检查在输出窗口中给出的所有警告或错误消息。 典型的问题是设备超载或仿真一开 始时设备就运行在高于或低于信号限制。 在输出窗口中显示的错误消息可能如下所示: DIgSI/err DIgSI/err DIgSI/err DIgSI/err - Some models could not be initialized. - Please check the following models: - 'Simple Grid\AVR Common Model.ElmDsl': - Initial conditions not valid !

Automatic Step Size Adaptation (自动适应步长) 此选项启用步长自适应算法,可大大加快仿真。PowerFactory 在任何时刻调整实际过程每 个状态变量步长。PowerFactory 根据本地的离散化误差,计算保持在规定范围内的数值误差最 优步长。步长控制器调整积分步长的大小。 因此,快速瞬变衰减时,PowerFactory 自动增加步长并大大加快仿真过程。在事件(内部 或外部)的情况下,总是重新设置步长为最小步长。这样,该系统在暂态事件的行为以最佳精 度表示。 如果这个选项被激活,页面 Step Size 选项卡上就有两个步长可用: Electromagnetic Transients/Electromechanical Transients(电磁暂态/机电暂态)EMT 和 RMS 仿真的各自最小步长。 Maximum Step Size(最大步长) 仿真的最大步长。 在 Step Size Adaptation 选项卡上可以找到适应这种算法的进一步的参数。 6.3.2 步长 Integration Step Sizes (积分步长) 当使用一个固定的仿真步长(停用基本选项卡上的自动步长适应)时,EMT 或 RMS 的积 分步长必须设置。 通常不用绘制计算每一个时间步,这减少绘制的数据也会减少仿真时间。为此,输出图形 步长可以设置, 所以不是整个仿真时间上放入每个时间点都将在虚拟仪器图中绘制。选择一个 较大的输出步长,仿真过程将加快,但不影响计算过程。然而,应当指出,快速的变化可能不 会在报告结果中。 步长的参数是: dtemt 电磁暂态(典型值:0.0001 秒) dtgrd 机电暂态(SYM,ASM,VCO,PSS) (典型值 0.01 秒)
48

dtout 输出(典型值:对 EMT,同 dtemt;对 RMS,同 dtgrd) Start Time(开始时间) 仿真的开始时间。这通常是负的,允许对发生在 t = 0 后的第一个事件进行分析。 注意:当设置时域模拟时,使用正确的仿真时间步长以观察的结果的正确现象,是非常重 要的。对于 RMS,仿真的最小时间步长应始终要小于系统的时间常数。在控制器中必须考虑 和开环和闭环时间常数。对于瞬变电磁,例如分析行波时,最小的传播时间将是最小时间步长 的上限。 除了基于牛顿 - 拉夫森算法,用于解决“弱”非线性(即饱和效应的同步和异步电机) , EMT 仿真功能允许中断用于模拟“强”的非线性(即开关,两坡饱和变压器,或晶闸管) 。这 些中断也可能会在时间步长间发生。 中断的情况下,所有时间变量都被插值到中断的瞬间,在这一点上,仿真重新启动。这可 以防止数值振荡,并允许较低的积分步长以应付电力电子器件。 电压控制器的动态模型方程(VCO)和电力系统稳定器(PSS) ,发电机和无源网络方程 (dtgrd 步长)是同时求解的。 6.3.3 自适应步长 如果 Basic Options 选项卡上的 Automatic Step Size Adaptation 被启用,在 Step Size Adaptation 选项卡有更多的步长可供选择。这些选项包括: errmax 最大预测误差(典型值:0.01) errinc 最小预测误差(典型值:0.01) ninc 步长增加延迟(典型值:10 个时间步) finc 增加时间步长的加速因子(默认值:1.5) fdec 减小时间步长的加速因(默认值:2) ddtemt_max 最大步长增加(典型值: RMS 为 0.05;EMT 为 0.001 秒) 注意:仿真时间对一些参数非常敏感。例如,当增加最大的时间步长计算时,暂态计算持 续时间不一定会增加。 如果这个时间步长增加超过了“最佳''的时间步长, 仿真时间可能会增加。 强烈建议认真观察仿真时间和不同仿真参数的结果。 6.3.4 高级选项 高级选项可用于调整模拟算法的性能。经验不足的用户,建议使用默认值。 Event Control (事件控制) Resolution Factor kres) 此处输入的值 (参数名: 决定用于同步事件的时间间隔。 每次内部或外部事件发生, PowerFactory 插值所有状态变量的时间到该时刻, 这个时刻事件发生, 并从这里重新启动仿真。 在大动乱的情况下,大量的事件同时发生是可能的。因为这将大大减慢仿真,PowerFactory 同 时执行时间期限 kres * dtmin 的时间间隔内发生的所有事件。
49

所有的系统变量, 都在事件发生时的时间点插值并从那里开始仿真。较高的分辨率因素减 少事件之间的最小时间间隔。0.001 的默认值,通常是足够的。 如果事件发生了,有两种不同的可用选项: Interpolation at user defined events (在用户定义的事件处插值) ?像往常一样,计算 v(t)和 v(t+h) 。PowerFactory 使用特殊的数值方法,使得无数值振 荡。 Re-Initialize After Event (事件后重新初始化) ?计算 v(t)和 v(t+h) ,因此在同一时间的这两个值,一个在事件发生前,一个在事件发 生后。如果启用 Re-initialize After Event,第二种方法应用于事件。 更多的参数可以被改变,来控制的仿真算法。 Integration Control (积分控制) errseq 状态方程的最大误差(典型值:0.1%) itrpx 连续状态迭代的最大数量(典型值:10) alpha_rms 阻尼系数(RMS) (典型值:1) alpha_emt 阻尼系数(EMT)的(典型值:0.99) Iteration Control(迭代控制) errsm 节点方程的最大迭代误差(典型值:10 * errlf) 迭代误差 errsm 的取决于电机的额定功率和电压等级。作为一个适当的起点值,errsm 应 设置为: errsm = 10 * errlf,其中 errlf 是最大的。允许每个母线潮流误差。检查最好是通过绘制发 电机母线电压。如果观察电压步,errsm 的的值应减少。 erreq 最大模型方程误差(典型值:1%) itrlx 最大迭代次数(典型值:25) itrpx 在每个允许达到最大容许母线误差 errsm 的积分步处,指定迭代的最大值。在暂态仿 真过程中,需要迭代次数的典型值是 1 和 5 之间。在一定条件下,即开关操作后 -可以观察到 高达 25 次的迭代。 itrjx 重新计算雅可比矩阵迭代限制(典型值:5) Signal Buffer(信号缓冲器) Reference System(参考系统) Local/Global Reference System (本地/全局参考系统) PowerFactory 稳定性分析,使用的参考电机的角度,是指所有其他的角度来以此为参考角 度。这是一个数值上非常有效的方法。运行初始条件后,参考机将显示在输出窗口。它通常是 潮流计算的松弛电机。 PowerFactory 提供对整个系统的使用一个参考机 在几个孤岛的情况下, (全局参考系统) , 或每个岛使用一个单独的参考机选项。如果接下来的仿真中,这些岛被重新同步化,应使用第 一种。在所有其他情况下应该使用选项(本地系统) ,因为它会有更高的数值稳定性和更快的 仿真时间。
50

Calculate Maximum Rotor Angle Deviation (计算最大的转子角偏差) PowerFactory 还可以计算系统之间的同步电机转子角度之间的最大偏差。这个变量叫 dfrotx,可以从显示同步发电机系统中的所有变量中选择 dfrotx 并显示。这个变量可以用来作 为一个大输电系统同步操作的指标。 A-stable integration algorithm for all models (所有模型的 A-稳定积分算法) 如果启用此选项,PowerFactory 使用 A-稳定的数值积分算法来解仿真。在这种情况下, 同时求解动态模型方程和网络方程。该算法是(略)在小步长的情况下略慢,但大步长的情况 下的收敛性要好得多。典型的应用是长过程仿真,此情况下,快速瞬变衰减后,仿真步长可以 大大增加。另一个典型的应用是有电力电子的系统。尽管电力电子器件,通常配备具有非常快 的控制,A-稳定的算法仍然允许合理的步长,此时松弛法会失效。 当使用常规的,明确的数值积分算法,如龙格 - 库塔(而不是 A-稳定的算法) ,积分步 长必须被调整到一个系统的特征值。这种方法(松弛法)是指动态模型方程和网络方程的交替 解法,直到两者都达到收敛:该算法在小步长下是快的,但步长增加时不收敛。它是经典暂态 稳定应用的最佳选择。但是,如果使用过大的步长,数值解变得不稳定,即使快速模式完全衰 减了并在系统中不再明显了。 有了 PowerFactoryA-稳定算法,步长可以不考虑数值稳定性,调整到所有状态变量的实际 过程中。当快速瞬变衰减完了,可以调整步长到慢瞬态的速度等。 如果对一些非常快的模式不感兴趣,可以选择从一开始,就选择一个大步长,该算法将自 动平稳快速的变化。 这种类型的算法的一个典型应用是长期现象的模拟,其中应增加仿真步长 到分钟范围内,即使系统当前是在快速模式下。 然而,如果涉及电力电子,即使用于电网稳态方程的稳定性模型,特征时间常数可以是极 短(即 1 毫秒)的。因此,使用经典的积分算法需要使用小于最小系统时间常数的步长,否则 将使数值不稳定。 注意:使用 A-稳定的积分算法的一个要求是,只有“true”输入和输出信号变量用于不同模 型之间的信息交换。 应该提到的是,也可以选择 A-稳定算法用于一些元件模型(并非所有模型) ,因此,可以 在模型中的一部分使用 A-稳定算法 (例如电力电子转换器或快速控制器) 。 此选项课在元件页 面中获得。 有了 A-稳定的算法,这些系统可以合理的步长进行分析。因此,A-稳定的算法不能描述 为使用简化的模型,但可以描述为数值积分算法的另一种类型。 6.3.5 噪声产生 ComInc 可以用 Noise Generator 元件 (ElmNoise) 在瞬态仿真中产生基于随机数的噪声信号。 页面 Noise Generation 页面,可以选择随机数生成方法。可以选择随机数发生器为自动(自动 选择选项) ,这是默认值,也是最常用的。 另外, 可以选择更新选项, 在这种情况下, 噪声发生器的随机种子可以手动从“A”到“K” 选 择。因此,噪声信号在每一个模拟中看起来都是相同的,即前模拟结果可以准确地再现。
51

6.3.6 高级仿真选项 - 潮流 有进一步的选项,它们可以影响仿真过程及其结果。在 Advanced Simulation Options 选项 卡上的潮流命令页面, 保护装置或各种型号控制器的影响可以忽略不计。 因此, 在仿真过程中, 同在潮流计算和其他计算中一样,所选择的模型或保护装置将被忽略。图 65 说明了这一点。

图65 ComLdf命令页面高级仿真选项

考虑保护装置的可用的选项是: None:没有保护装置在计算中考虑 All:所有保护装置都被考虑 Main:只考虑运行中的保护装置,它们被定义为“main”设备 Backup:只考虑“后备”保护装置。根据控制器模型,可通过 Ignore Composite Elements 忽略所有控制器和机械元件。 如果只想忽略一些特定的模型类型, 可以把它们从左侧窗口 (考 虑的模型)移到右边的窗口(忽略的模型) 。

6.4 结果对象
在 EMT 或 RMS 仿真中,大量的信号变量随时间变化。为了减少对个别案件的分析中的 可用数据和缩小变量的数目,必须定义供后面使用的选择的信号。

52

因此, 可以设置一个或多个结果对象包含结果变量。仿真功能的实现需要结果对象的引用 来存储结果。 可以产生信号的计算功能命令页面, 有结果对象的引用, 如图 66 所示的初始条件 (ComInc) 页面。

图66 结果对象引用

这样的结果对象引用指向当前使用的结果对象。向下箭头按钮( 用,或编辑引用结果对象的内容。 右箭头按钮(

)用于选择或复位引

)用于编辑的结果对象本身。当编辑输出变量时,按“Edit”按钮,然后按

“Contents”获得结果对象内存储的变量列表。这将弹出相应的 ElmRes 编辑页面。编辑或检 查结果对象的更简单的方法,是按主工具栏上的图标 ,或从主菜单选项中选择 Data ->

Stability -> Result Variables。这将使用户可以在初始条件(ComInc)命令的页面中编辑当前选 定的结果对象的内容。 在 RMS 和 EMT 仿真中,为添加不同元件的变量到结果对象中,右键单击在单线图中所 需的元件,然后选择 Define...--> Variable Set (Sim)...如图 67 所示。

53

图67 定义线路元件的变量设置

在仿真中,这个元件将被监测。会自动打开一个浏览器窗口,双击相关行的变量设置图标 ( ) ,然后可以选择要记录的感兴趣的变量。 注意:大多数 RMS 和 EMT 的模拟变量是相同的。不过可能存在对 EMT 是有效的,但对 RMS 计算无效的变量。最好是只使用目前正在执行的计算变量。 6.4.1 保存前次仿真的结果 要监视的变量都存储(默认)在 All calculations 结果对象中。在当前的模拟中的变量的结 果也存储在这个文件中。如果要显示两个不同的仿真结果,例如:在虚拟仪器中,可以通过简 单复制的结果对象 All calculations 并重新命名它,保存前次仿真的结果。 这可以很容易地在数据管理器中完成。 结果对象可以在当前活动的研究案例中找到。复制结果 对象并把它粘贴到相同的研究案例中。在此之后,名为 All calculations(1)的第二个结果对象将 被创建。如果需要,该对象可以用更合适的名字命名。 在下面的仿真中,默认的结果对象 All calculations 将被新结果覆盖,但复制的结果将不会 被修改,它可以和新的模拟结果在一个图形中显示。

54

6.5 事件
除 了 一个 结 果对 象 的引 用 ,仿 真 功能 也 需要 事 件对 象 引用 , 以确 定 仿真 事 件。 在 PowerFactory 默认的事件对象是 Simulation Events,和结果对象一样,也存储在研究案例中。 外部事件用于在稳态计算(如短路计算) ,以及暂态计算(仿真) 。 PowerFactory 提供多种时域仿真的事件: 1.开关事件(EvtSwitch) 2.参数事件(EvtParam) 3.短路事件(EvtShc) 4.intercircuit 故障事件(EvtShcll) 5.同步机事件(EvtSym) 6.负载事件(EvtLod) 7.元件停运(EvtOutage) 8.消息事件(EvtMessage) 9.设置一体化步长事件(EvtStep) 10.分流事件(EvtTap) 不同的事件存储在事件对象中。 目前选定的事件对象 (标记为活动) 的内容可以在 ComInc 页面中发现。使用 Contents 按钮后面的右箭头( 象,这个对象可以被编辑。 另外,事件对象可以通过按 Edit Simulation Events 图标从主工具栏中很容易地访问。 )按钮来访问存储在事件列表中的事件对

将显示当前定义的事件列表,包括设置的仿真时间,事件发生时刻,相关对象。图 68 展示了 事件设置的一个例子

55

图68 包含一系列事件的事件对象

创建一个新的事件时,使用工具栏上的图标

,它可以在图 68 中的 Simulation Events 对

象页面中看到。事件类型可以从弹出的元件选择页面列表中选择,如图 69 所示。在仿真过程 中停止计算,编辑事件并继续仿真,可以修改事件。

图69 定义一个新的仿真事件 56

定义事件的另一种方法如下:根据计算的初始条件(

),或仿真运行时刻,在期望的

隔间上双击,来创建开关事件。此外,用户可以用鼠标右键单击元件,然后选择元素件相关事 件如 Define... -> Switch Event, Define... -> Load Event or Define... -> Short-Circuit Event。 在仿真过程中,所有以前的事件(即已经发生的事件),都以灰色的字体样式显示,可以 不再进行编辑或更改。当仿真结束或手动停止时,仍然在仿真中的事件可以改变,也可以创建 新的事件。 注意:在仿真的最后,事件列表显示所有事件,都是灰色的。对于这个仿真来说,它们不 可以再被修改,因为仿真可以从这点上重新启动。要改变一个新的仿真的事件,必须首先初始 化计算( ),所以仿真时间要复位。

6.5.1 开关事件 开关事件仅用于暂态仿真。要创建一个新的开关事件,按主菜单上的 图标(如果该图 ,

标是可用的) , 这将打开一个包含所有定义的仿真事件的浏览器。 点击这个浏览器的图标 将显示 IntNewobj 页面,可用来创建一个新的开关事件。

图70 创建一个新开关事件

按下 OK 后,开关(标有断路器或元件)的引用必须手动设置。电力系统中的任何开关都 可以被选择,从而可以启用线路,发电机,电动机,负载等的开断。用户可以自由选择各个阶 段的开关/断路器,或只有一个或两个阶段的开关/断路器。
57

应当指出, 必须建立多个开断事件, 例如, 如果线路必须在两端都打开。 这些开关的事件, 应该有相同的执行时间。 6.5.2 参数事件 有了这种类型的事件,任何元件或 DSL 模型的输入参数,可以设置或改变。首先,指定 事件发生时刻的时间被插入。然后使用向下箭头按钮 指定/选择一个元件。然后从上下文菜

单中选择 Select...。之后插入名称和一个有效元件的参数的新值。 6.5.3 短路事件 本事件适用于在母线, 终端或指定点上的线路短路。 故障类型 (三相, 两相或单相故障) , 以及故障电阻、电抗和影响阶段都可以被指定。 不能定义持续的故障。相反,为清除故障,必须定义另一短路事件,这将在同一地点的清 除故障。 6.5.4 Intercircuit 故障事件 这种类型的事件和第 6.5.3 短路事件中所描述的短路事件类似。选择两个不同的元件和各 自的阶段,在它们之间发生故障。至于短路事件(EvtShc),有四种不同的元件可以选择: 母线(StaBar) 端点(ElmTerm) 架空线或电缆(ElmLne) 6.5.5 同步电机事件 同步电机有一个特殊的事件, 用来轻易改变电机的机械转矩。用户可在要发生事件的仿真 中指定时间点和活动的同步电机 ElmSym。然后,用户可以定义额外的机械转矩,提供给发电 机。扭矩可以是正或负的,并以标幺值输入。 6.5.6 负荷事件 ElmLodlv 或 ElmLodlvp) 用户可在要发生事件的仿真中指定时间点和负荷元件 (ElmLod, 。 负载的值,可以使用 load 事件改变。 有不同的方式来改变选定的负载的功率: Step 在事件发生时,由给定值(负载额定功率的百分比)改变功率(正或负)的当前值。 Ramp 超过由 Ramp Duration(秒)指定的时间,由给定值(负载额定功率的百分比)改变功率 (正或负)的当前值。负载 ramping 在事件发生时启动。
58

6.5.7 元件停运 此事件只在 RMS 仿真中使用,一个元件在一个特定的时间点停用。选项 Take element out of service 应当在页面中选中。应当指出,在暂态仿真过程中,不能将停运的元件再次投入应 用。这只在稳态计算功能是可能的,例如:短路计算或可靠性评估。在时域仿真中,以下错误 信息将出现在输出窗口中: DIgSI/err (t=000:000 ms) - Outage Event in Simulation not available. Use Switch-Event instead! 6.5.8 保存结果 此事件只用于 PowerFactory 程序监测器。它不能在时域仿真中使用。 6.5.9 设置积分步长 6.5.10 分流事件 ElmTr2 等) 用户在仿真中指定分流事件发生的时间和分流器或变压器元件 (ElmShnt, 。 然后可以指定分流行动。

6.6 运行仿真
初始条件(即执行 ComInc 按下启动仿真。 对在初始条件命令 ComInc 定义的开始时间和停止时间(参数名称:tstop)之间的间隔 时间内进行仿真,该停止时间可以在仿真页面(ComSim)中指定。仿真完成后,可继续按该 图标 并输入一个新的停止时间,仿真可以继续。在这种情况下,停止时间可能输入为与 )计算成功后,主工具栏上的图标 将被激活,可以

当前的仿真时间相关。 按图标 或主工具栏上的图标 ,可中断正在运行的仿真。仿真暂停后,可以创建其

他事件和查看结果。 再次按下该图标 ,然后继续仿真。视需要,可暂停和继续仿真。

59

6.7 稳定性分析模型
稳定性分析计算通常基于预定义系统模型。大多数案例都会用到控制器、原动机和其他设 备的标准 IEEE 模型以及函数。 稳定性分析对电网规划起了很重要的作用。 预定义的参数集合记录了分析系统的合理参数。 稳定性分析常用于系统的运行分析,反映了系统的实际运行状况。 并不是所有的配置和系统都有现成的 IEEE 模型, 例如风力发电机, 高压直流输电系统等。 用户可以使用软件中的工具来自行搭建所需的模型。也就是说,我们可以在 PowerFactory 中 建立高度专业化的、精确的模型。 当厂商愿意提供控制器模型的确切参数时, 我们可以建立一个图表区来专门存放这些控制 器和机械模型。在实际应用中,用这些模型来代替原有的 IEEE 标准模型可以有助于系统建模 精度的提高。 公用事业公司和咨询顾问常常进行一些分析系统运行性能和优化系统方面的研究。因此, 我们显然需要稳定性分析的准确算法和建立精确暂态模型的工具。 这其中包括复杂操作分析和特殊的部件规划问题。正因为这些需求,才导致 DIgSILENT PowerFactory 的时域建模功能朝高灵活度和高准确度的方向不断发展。 以上这些正是这一章所 要介绍的内容。 6.7.1 系统建模方法 稳定性分析系统建模是电力系统分析领域中最为关键的问题之一。依靠应用模型的准确性, 大信号的有效性, 可用的系统参数以及实施故障或测试,该软件几乎适用于所有情况的分析并 且可得好合理的结果参数。 这一点体现了暂态稳定分析的复杂性,另一方面,由于该分析中的时域模型非常多且每一 个模型都是其他模型的组合, 最终所有这些时域模型都将连在一起成为一个大的包含一套基本 系统微分方程的暂态模型,这一点也增加了分析的复杂性。 PowerFactory 针对该问题提出的建模理念是建立严格的分级系统, 鉴于暂态分析的复杂性, 该方法的主要特点是将图形和模板结合在一起。 分层时域建模构成了建模方法的基础:
? ?

基于“DigSILENT 仿真语言”的 DSL 定义块形成了表示更为复杂的暂态模型的 传递函数和微分方程的基本构建块。 内置模型和常用模型。内置模型或元件是常见电力系统设备的 PowerFactory 暂态 模型,如发电机,电动机,静止无功补偿设备等。常用模型基于 DSL 定义块并且 是用户定义暂态模型的前端。

?

基于复合框架的复合模型是多个元件(内置模型)或常用模型的组合。复合框架 可以重复使用复合模型的基本结构。

下面的例子很好的说明了模型之前的关系以及这些模型的使用方式。 假设某个特定网络中突然失去一个满载的 600 兆瓦机组,此时需要对由此产生的频率偏差
60

进行分析。根据网络结构和所需的分析结果确定分析中是否要用到电压控制器,原动机,主控 制器或者是系统中所有大型发电机的其他重要设备的具体模型。图 71 显示了一个典型的配有 电力系统稳定器,电压控制器,主控制器和原动机的同步发电机模型。

图71 复合发电机或电厂模型

主控制器和原动机可以概括为主控制器单元模型。建立此类模型的步骤如下: 1. 定义所需的每个控制器或装置的暂态模型(模型/块定义) 。 2. 给每台发电机的控制器暂态模型设置合适的参数(常用模型) 。 3. 创建一个图表来定义不同模型之间的输入输出关系(复合框架) 。 4. 对于发电机,可用图表和自定义暂态模型的组合来定义一个特定的“复合”发电 机模型(复合模型) 。 对于每台发电机,我们可以直接创建已设好内部参数的自定义暂态模型,然后将这些 模型连接起来,从而不需创建图表。这样看起来似乎步骤 2 和步骤 3 是多余的,但是,这 样做就意味着我们对系统中的每个发电机都要建立一个新的电压控制器。 往往许多电压控制器的设计都是相似的。因此无需对每台发电机的控制器都创建副本, 还应当避免控制器或整个发电机模型的副本的冗余。 一般电厂图 (复合框架) 和特定电厂图 (复合模型) 之间的关系就好比控制器定义 (模 型定义)和特定控制器(常用模型)间的关系。DIgSILENT PowerFactory 在创建复合模型 时需要用到两个关键对象,类似于不同元件之间的元件定义:
? ?

常用模型(ElmDsl)将一般时域模型/模型方程(定义块)和参数集合结合在一起 并创建了集成的时域模型。 复合模型(ElmComp)将图表(复合框架)内的时域模型连接起来,并创建了“复 合模型” 。

下面的图表详细地说明了复合模型 (其类型为 “框架” ) 和常用模型 (其类型为 “方块图” ) 之间的关系。
?

复合模型(见图 72)引用了复合框架的定义。复合框架基本上是一个包含各种空 槽的示意图,这些空槽可以分配给控制器或元件。这些槽按图连接在一起,请参
61

见“复合定义块” (第 6.8.3 节:DSL 模型定义) 。复合框架中的槽是为特定暂态模 型预先配置的。
?

图 73 的原理图表示了一个复合框架 (BlkDef) , 这个框架包括一个同步发电机槽、 一个主控制器单元槽(pcu slot)和一个电压控制器槽(vco slot) 。采用这种复合框 架的复合模型显示了可用插槽—插槽名称列表。可以在这些槽中插入特定的同步 发电机、电压控制器和原控制器单元模型。

?

复合模型中的同步电机被称为内置模型,见图 74。这意味着预先配置过的元件不 需要特定的模型定义。能够提供输入输出变量的任何元件(如转换器、母线等) 都可以放到插槽中。

?

电压控制器和主控制器单元是用户定义的常用模型,见图 75,所有用户定义的暂 态模型的“前端”通常都是常用模型(ElmDsl) ,该模型结合了模型定义和特定参 数设置。也有一些预先确定的定义,这样用户可以创建他/她自己的模型定义。

?

常用模型是模型定义(BlkDef)的引用,这类似于复合框架(见图 76) 。各模块按 图定义并连接起来。模型定义的输入输出变量必须和槽的定义中的相匹配。

并不是复合模型中的所有插槽都必须使用。这里,也可以有空的插槽。在这种情况下,不 使用插槽的输入功能, 且插槽的输出在整个仿真过程中都视为定值。接下来的章节将介绍复合 模型与复合框架、常用模型与定义块的使用。 有关用 DIgSILENT 仿真语言(DSL)设计和创建用户定义常用模型的知识可参见章节 6.8 用户定义(DSL)模型。

图72 使用 "Frame_Generator"框架的复合模型 62

图73 复合框架 "Frame_Generator"

图74 发电机“G1”内置模型

图75 使用 "vco_simple"定义的常用模型 63

图76 "vco_simple"的模型定义

6.7.2 复合模型 创建复合模型元件的方法是点击数据管理器工具栏中的"New Object" ( )按钮,从选项列

表中选择“Composite Model” 。接着选择复合框架。复合框架一般储存在全局库或本地库中, 从概念上类似于电气元件的类型定义。接着复合模型窗口中显示出相应复合框架的槽的列表, 如图 77 所示。 可以通过右击插槽并从关联菜单中选择 “Select Element/Type” 的方法手动地给插槽分配控 制器或模型,如图 77 所示。这时弹出数据库管理窗口,用户可以在该窗口中浏览网络元件并 选择其中之一插入到所选的槽中。

图77 复合模型的编辑窗口 64

在控制器插入到一个槽中时,往往该控制器元件还尚未创建。我们可以通过选择插槽关联 菜单中的选项“New Element/Type”来创建一个新的控制器原元件。PowerFactory 将自动跳转 到项目库,并显示可用的用户定义模型的列表(ElmDsl) 。 在项目库或全局库中选择一个模型定义会打开一个新建常用模型的元件页面,在这个页面 中可以定义元件的参数,类似于变压器元件。若没有找到合适的模型,在设定模型参数之前应 选则一个定义块(参见 6.7.3 复合框架和图 76) 。 如果给一个插槽分配一个元件,可右击插槽并从关联菜单中选择“Edit Element/Type”来 编辑被分配的元件。点击鼠标右键关联菜单中的选项“Reset Element/Type”可重置插槽,此时 插槽会变为空槽。 注:根据槽的定义,点击菜单中的“Reset Element/Type”选项不仅会清除列表中的槽,还会清 除存储于数据库管理器的复合模型中的内置模型或常用模型。在 6.7.3 节中,将对这些设置进 行详尽的介绍。 一个更为快捷的定义标准复合模型的方法是右击单线图中的某个对象,然后在元件关联菜 单中选择“Define...” 。 给选中的对象选择一个标准复合模型时,将会出现可用的控制器列表。点击某个控制器会 将该控制器添加到复合模型中, 当没有标准复合模型适合该对象时,系统会自动为该对象创建 复合模型。 标准复合模型适用于: 同步发电机和同步电动机 异步发电机和异步电动机 静止无功补偿系统 槽更新 点击复合模型(ElmComp)页面的“Slot Update”按钮,处理器会重新读取复合框架的槽 定义并且会取消所有无效的槽分配。 当给某个槽分配不适合的模型时,这种分配就是无效的。例如,不能把电压控制器分配给 为主控制器设计的槽。 为特定复合模型创建的所有的内置模型和常用模型都存储在该复合模型内部。复合模型的 目录可在数据库管理器中显示,在数据库管理器中复合模型被看作是一个普通的数据文件夹。 基本电力系统设备,如同步电机或静止无功补偿器,通常不存储在复合文件夹中,而是存储在 网络本身。 槽更新设法将目录中的每一个模型都重新分配给对应的槽。给每个插槽定义的选项是非常 重要的。这一部分的知识将在 6.7.3 节的中介绍。 阶跃响应 点击复合模型 (ElmComp) 页面的 “Step Response” 按钮会激活阶跃响应指令 (ComStepres) 。 该指令窗口示于图 78。 页面中的选项有:复合模型、模板和目标目录。通过选择,我们可以指定被创建的选项。 也可以选择所要激活的研究案例。当点击“Execute”时,PowerFactory 会在当前项目中创建一
65

个名为“Step Response Test”的新文件夹。如图 79 所示。

图78 阶跃响应指令页面

图79 数据库管理器中的阶跃响应文件夹

在阶跃响应文件夹中创建第二个文件夹,该文件夹以要测试的复合模型来命名。这个简单 的测试网络中只包括发电机、负荷以及复合模型。另外,这里还有两个新的研究案例——分别 测试复合模型的 AVR 和 PCU 的单位阶跃响应。 通过激活和冻结研究案例, 用户可以在这两个研究案例和以前使用过的研究案例之间进行 切换。 注:由于复合模型中的原始元件和新元件之间没有任何联系,因此,改变控制器的设置不会影 响网络。 测试完控制器之后,阶跃响应测试文件可以在不丢失原始网络信息的条件下完全删除。

66

6.7.3 复合框架 复合框架定义了两个或两个以上的插槽、每个插槽的输入输出信号以及插槽之间的联系。 复合框架是通过绘制图形来定义的,因此非常生动具体。 复合框架的绘制类似于普通框图的绘制,主要的区别在于复合框架用的不是普通的模块而 是插槽。 创建一个复合框架的方法是选择主工具栏(绘图窗口)中的“Insert New Graphic”( )

按钮,然后选择“Block/Frame Diagram”点击“Execute”,如图 80 所示。此时本地库中会自动生 成以一个新的块定义。

图80 创建一个新的复合框架

此时在绘图窗口中会出现一个空框架图。 点击绘图工具箱中的

按钮可以创建一个插槽,

单击所需的位置可将该槽定位在图画表面。这类似于将元件放置到单线图中。 空槽将被绘制到页面上。 双击某个槽会弹出插槽的编辑窗口,在这个窗口中可以编辑该槽 的输入输出信号以及各种参数。如图 81。

67

图81 插槽页面

名字和序列 由于插槽的名字会出现在复合模型页面中,因此建议根据给插槽分配的元件来命名该插槽 (例如:'vco slot')。序列参数定义了插槽在复合模型页面中出现的次序。 类别 类别的选择只影响插槽的外部特性。 Linear:插槽在框图中表现为线型或非线型模型。 Automatic, model will be created:当该选项被激活时, “槽更新”指令会自动创建 DSL 模 型并自动从库中搜索模块的定义。 Local, Model must be stored inside:该选项是默认激活的。这就意味着当在复合模型中执 行槽更新命令时,PowerFactory 只会搜索储存在 ElmComp 中的元件。储存在 ElmComp 之外 的模型的引用,如电厂模型中的同步发电机,将从插槽中移除。 并非所有的内置元件或常用模型的输入输出信号都必须在插槽中定义和使用。 一个插槽可 能只含有一个输入信号或只含有一个输出信号。 例如,交流电压源 ElmVac 的电压或频率可能受外部函数的控制。因此,该电源的插槽可 能只含有两个输入信号 u0 和 f0。在 6.7.6 节中将讲述更多有关绘制复合框架和框图的知识。
68

输入和输出信号 每个槽都必须定义输入或输出信号。 内置暂态模型的可用信号名可在相应的元件技术参考 中找到。插槽页面中给定的输入输出信号名应当与给定的暂态模型的输入输出信号完全匹配, 否组信号将不能正确连接并将导致一条错误消息。 只有当一个插槽定义了一个或多个输入输出信号后,才能够通过信号线与其他插槽相连。 因此建议先安放和定义插槽,然后再绘制信号线。 限制信号 在该页面中还可以键入“限制信号” 。这些信号由 PowerFactory 控制,类似于普通的输入 信号。不同之处只在于框图中的图形表示。这些信号将显示在插槽的顶部或底部。 类名/模型名称过滤 这里还可以定义针对插入的类名和/或模型名的过滤器。 例如, 只有同步发电机可以分配给 某个槽,在这种情况下将键入类名 ElmSym*。这时 PowerFactory 只允许类名为“synchronous machine”的元件插入该槽。也可以定义一个可以过滤特定元件名的过滤器。 槽的定义块 定义块(BlkDef)可以直接被分配给槽。该选项会简化槽的处理防止由于槽的信号名称和 所分配的块不匹配而导致的错误。 当要给所选的槽指定定义块的外部形式时,可以双击该槽并 在弹出的页面中选择“Block Definition”的“select” ( )按钮来编辑该槽。这时可选择定

义块,例如,控制器或内置元件类型,之后这个定义块会分配给该槽。 例如,如果一个新定义的插槽代表框架图中的同步电机,则可选择预定义的定义块作为这 个用于元件 ElmSym 的插槽的输入输出信号。只有特定类型的控制器可被分配给某个槽,一个 控制器只能分配给一个槽。 很多预定义的定义块都存储在全局库路径“Library\ Models\Built-in”的下面。 当选定定义块后(该例中选择的是 ElmSym.BlkDef) ,该插槽页面中的输入、输出以及限 制信号输入选项都会消失。系统会自动键入过滤器的类名。当点击 OK 按钮之后,该插槽会正 确显示定义块的输入和输出。 注:当一个定义块被直接分配给一个槽时,只有输入输出信号会被自动设置。在这个槽中 并未实现定义块的内部方程,这个槽依然是空的。通常需要创建一个常用模型,该模型可以插 入到复合模型的槽中。当槽引用的是外部定义块时,应注意这个引用也储存在你的项目中。如 果定义的引用是无效的或是发生改变时, 插槽也会随之变化。 因此, 请慎重给插槽非配块定义。 6.7.4 常用模型 常用模型元件(ElmDsl)是所有用户定义的定义块的前端对象。这意味着用户定义的暂态 模型以及与 PowerFactory 程序一起传递的框图只有通过常用模型才能被使用。常用模型将模 型或定义块与一组特定参数结合在一起。图 25.19 中常用模型使用的是“vco_Simple”定义块。 通常,模型定义的实现与定义块的实现相同,如图 25.20 所示。模型定义包含块引用,它 可能反过来指向一个原始定义块(见图 25.21)或指向另一个复合定义块(见图 25.22)。因此,定
69

义块的结构是递归的。用户应当检查这种递归结构中是否包含了复合块定义的循环引用。 原始定义块包含了一个或多个 DSL 表达式,并且原始定义块是组成复杂暂态模型的基本 单元。在第 6.8 节“用户定义(DSL)模型”中将讲述如何使用和创建 DSL 模型。 模型定义的实现也可以与定义块的不同,但是它可直接作为 DSL 编成的原始定义块。 一般每个定义块都有一个或多个用于定义模型功能的参数。例如下面的两种参数:
? ?

标量参数,即放大因数、偏移量、定值设置等。 用在 DSL 的函数 lapprox()/lapprox2() 和 sapprox()/sapprox2() 中的两维或三维数 组。

图82 VCO的常用模型

70

图83 VCO的定义块——用子定义

图84 限制块的实现——使用DSL程序

图85 控制器的实现——定义子块 71

创建常用模型的方法是,点击数据管理器工具栏的“New Object”(

)并选择“Common

Model” 。在弹出的页面中选择“block/model definition”(块/模型定义) ,类似于复合框架的创 建,既可以选择全局库中的定义也可以选择本地库中的定义。选定定义后,该定义的所有参数 都会出现在常用模型页面的第一页上,此时可以设定各参数的值。

图86 常用模型——参数列表

若选择的定义块的定义中用到了一个或多个数组,则这些数组将显示在 ElmDsl 对象的第 4 的数组。 二页(一维特征)和第三页(二维特征)上。图 87 的例子中显示的是一个 13×

图87 常用模型——数组列表 72

特征的定义如下: 特征:在标有“Size”的行的第一个单元格中输入行数,列数是自动设置的。若行数发生变 化,可通过点击 (跳到前一页)和 (返回)来更新特征。

二维特征:在标有“Size”的行的第一个单元格中输入行数,在第二个单元格中输入列数。 若行数或列数发生变化,可通过点击 6.7.5 复合块定义 模型定义的复合框图是数学传递函数的图形表示,这个函数根据一个或多个输入信号产生 一个或多个输出信号。复合框图也可以对输入信号有所限制(最大最小值)。 框图可被描述为: (y_0, y_1, ...) = function(u_0, u_1, ...) 这里 y_0, y_1, ... 代表输出信号 0, 1, ... , u_0, u_1, ... 代表输入信号 0, 1, .... 。这些信号都 是时间的函数。 框图的基本元件如下: Summation Points(求和点) :它产生单输出 y=(u_0+u_1+...) Multipliers(乘法器) :产生单输出 y=(u_0*u_1*...) Divisors(除法器) :产生单输出 y=(u_0/u_1/...) Switches(交换器) :产生单输出 y=u_0 或 y=u_1 Signal Lines(信号线) :对应一个输入值产生一个或多个输出值 y_0=y_1=...=u Block References(块引用) :用来包含其他的定义块 块引用可被视为复合框图中插入的低级别的定义块的宏。 块引用可以指向另一个复合定义 块也可以指向一个原始定义块。 PowerFactory 程序附带了一个庞大的原始框图的集合。 该集合中包含了大部分常用控制器 元件的原始框图,如 PID 控制器、死区、控制阀特性等。这些原始框图储存在路径“Database | Library | Models |Global_Macros”下面。针对特定的需求,这些预定义的 DSL 基本单元可以被 复制和更改。 通过点击图形工具箱的 按钮可以创建一个块引用。点击该按钮后将产生一个空方,在 (跳到前一页)和 (返回)来更新特征。

这个空方中可以引用库中存储的任何定义块。 注:复合框架定义和模型定义非常相似,它们的用法也几乎相同。当创建槽 / 块时, PowerFactory 会在放置第一个槽/块的时候识别出放置的类别。若先放置了一个块( 槽的按钮( ),则

)将会自动失效,因此可以避免用户无意中将槽和块混在一张图中的情况。参

见第 6.7.6 节“绘制复合框图和复合框架”。

73

如果选择的类型为块,PowerFactory 将插入被引用块的所有可用参数。用户可以改变任何 参数的名字, 但必须确保参数的顺序不发生改变。因为正确的顺序可保证定义块中参数的正确 分配。 信号线是连接输入输出信号的定向支路。一条输出线可以分成许多分支,这些分支可连接 多个输入端。 编辑完块引用之后,块的左右两边会出现彩色的小圆点,这些小圆点代表的是被引用的定 义块的输入、输出以及限制信号的连接点。信号线可以连接到这些点上。可在同一个框图中多 次引用同一个定义块。例如,可以在同一个模型定义中多次使用 PID 控制器。 下图所示的例子是一个简单的框图, 其中包括一个乘法器、 一个求和点和一个标准 PI 块。

图88简单框图

当重建框图时(点击 图,其输出结果为:

) ,输出窗口中会显示框图的 DSL 表示。例如,重建图 88 中的框

model o1 = 'MyBlock'(i1,i2;x1;Kp,Ti;yi) s1 = '\System\Library\Models\DSL\PI.BlkDef'(xe;x1;Kp,Ti;yi) xe = i1*i2 o1 = s1+i2+i1 这个简单的例子说明了整个框图图形的全部意义:这是一种基于标准组件的定义特定控 制器的便捷的方法。 然而,也可通过手动输入上述 DSL 模板来定义完全相同的框图,从而创建一个原始块定 义。 6.7.6 绘制复合框图和复合框架 虽然复合框图和复合框架是两个不同的概念,但二者的画法是相同的。框图和框架的基本 区别是,框架中只包含插槽和信号而框图中则一定没有插槽。 创建框架和框图的方法有以下几种:
?

选择主菜单的中的 File -> New 或 Strg-N 然后选择 “New” 命令页面中的选项 “Block/Frame Diagram”。

?

点击图形工具栏的“Insert New Graphic” (

)按钮,并选择选项 “Block/Frame
74

Diagram”。
?

右键单击数据库管理器中被激活项目的文件夹,然后从关联菜单中选择 New... -> Block/Frame Diagram

?

点击数据管理器中的“New Object” (

) 按钮并选择“Block Definition” (BlkDef) 。

注:后两种方法只能创建定义块对象(BlkDef),而不能创建图。因此这两种方法不适用 于复合框图和复合框架的创建,只适用于创建键入 DSL 编码的原始定义块。 图形工具箱中的以下对象可被拖到框图的矩形中: 点对象: 块引用 求和点 乘法器 除法器 交换器 各类型图形对象 支路对象: 信号线 框架图中只包含下列元件: 点对象: 插槽 各类型图形对象 支路对象: 信号线 我们可以在绘图工具箱中找到以上对象。工具箱中还有纯图形附加对象(线,多边形,矩 形, 文本等) , 如图 89 所示。 必须指出这个工具箱是否可用取决于图形是否被“冻结” ( 当图形没有被冻结时,该工具箱是可用的,同样,当图形被冻结后,该工具箱消失。 ) 。

图89 框图/框架对象

当创建框架或定义块时,放置第一个块或槽的同时 PowerFactory 会识别出定义的类型。
75

因为复合框架只包含槽和信号线, 创建一个槽后会冻结绘图工具箱中的其他点对象。若你先放 置了一个块( ),则槽的按钮( )将会自动失效,因此可以避免用户无意中将槽和块

混放在一张图中的情况。 增加一个块引用 绘制块对象并将它们用信号线连在一起的方法与在单线图中绘制元件的方法是相似的。块 引用起初显示为一个空方,必须通过编辑这个空方才能给它分配一个(低等级)的框图。 在给新引用的块分配(较低等级)定义块之前,因为不知道该块的输入输出信号个数,所 以不能给这个块连接信号。因此,建议首先绘制所有的块引用并给它们分配定义块,之后块引 用会显示所有可用的输入输出信号连接端。 编辑块引用时,右键点击它并从关联菜单中选择“Edit”选项,或是直接双击它,此时会弹 出图 90 所示的窗口。

图90 块引用页面

点击选择按钮 (图 90 中的

) 来选择模型定义。 为用户提供的标准框图储存在“Database\

Library\ Models”路径下的文件夹中。 在图形定义块中创建块还可通过使用 Drag & Drop 功能将全局库或项目库中的宏拖到定义 块的绘图区域来的方法。 添加计算模块 求和点 每个点都可以作为求和点的输入量。 通过编辑求和点对象, 可以改变求和点的信号的标志。 在弹出的 “EDIT” 页面中可以反转任意输入信号。 应当注意的是不是所有的点都必须被使用,
76

并且只有一个点可以作为输出。 乘法器 这个模块中的所有灰色的点都可作为乘法器的输入或者输出。以下是一个有三个输入量一 个输出量的例子:out=(in_0*in_1*in_2)。应当注意的是不是所有的点都必须被使用,并且只有 一个点可以作为输出。 除法器 在这个模块中所有的灰色的点都可作为除法器的输入或者输出。第一个输入量作为分子, 然后被第二个输入量除(当存在第三个输入量时) 。信号从左边开始按顺时针方向排序。以下 是一个有三个输入量一个输出量的例子:out=(in_0/in_1/in_2)。应当注意的是不是所有的点都 必须被使用,并且只有一个点可以作为输出。 交换机 该模块有两个输入信号,哪个信号与输出相连由开关的位置决定。此外,模块顶部的控制 信号定义了开关的操作。如果控制信号小于等于 0.5,开关将会保持在当前显示状态,而大于 0.5 时开关的状态将发生变化。在编辑页面中,可以改变开关的 0 位置。 连接信号 绘制和定义完块引用、槽以及其他点元件以后,就可以将它们用信号线连接起来。在从图 形工具箱中点击 按钮以后,先点击起始点(块/槽的输出) ,然后选择性地点击绘图表面做

为连接线的拐点,最后点击终点(块/槽的输入) ,这样就完成了信号线的绘制。常用块以及其 他点元件的输出和输入端用彩色的点表示出来。 (见图 91)

图91 块的信号连接

绿色:输入 红色:输出 蓝色:最小值 粉色:最大值 灰色:所有可以连接的信号 信号线可以通过对应的页面来编辑,在页面中可以改变信号的名字。 多信号连接 信号通常将一个输入参数和一个输入参数连接在一起。 多信号连接往往用于电压或者电流 信号,尤其是在三相信号的情况下
77

定义一个多信号连接的方式是将两个或者两个以上的信号名写在一起, 用分号隔开, 例如: "I_A;I_B;I_C''。图 92 和 93 显示的是两个块定义的多信号的输出和输入。这两个模块都只显示 一个单一的的输入或输出连接点。他们之间可以通过一条信号线连接起来,就想图 94 显示的 一样。

图92 块1的输出定义

图93 块2的输入定义

图94 多信号连接

注:输出信号中的变量的数量和顺序必须和输入信号中的相同。 框图的输入输出定义 复合框图通常有自身的输入,输出以及信号限制。输入信号点通过在框图内部的框架的 左侧, 上方或者下方新建一条信号线的方法来定义的。这将为复合块定义创建一个新的输入信 号。 新的输出信号是通过点击封闭矩形框架的右侧以结束信号线来定义的。 那些与矩形框架相连接的信号拥有以下的意义:
? ? ? ?

与左侧相连接:输入 与右侧相连接:输出 与底部相连接:最小限制 与顶部相连接:最大限制

注:输入与输出信号的名字必须与槽或块中定义的输入输出信号的名字相同。 调整大小
78

如果一个图形的四个角上出现黑色的小方块, 则可通过左击其中的一个小方块来调整图形 的大小,如图 95 所示。光标将变成对角线双箭头,移动它(按住鼠标左键)可以调整对象的 大小。调整到合适的尺寸时松开鼠标。

图95 调整对象大小

也可以通过点击图形的一侧来调整对象的大小。在这种情况下图形只会朝一个方向改变 大小。这个方法并不是对所有的对象都可行。一些对象只能通过确定的 x/y 比例来调整大小, 还有一些对象完全不能调整大小。 附加方程式 当框图的内部结构被图形化定义以后,可以对框图本身进行编辑。这不需要关闭框图的 图示就可以完成。通过左击或双击封闭的矩形框架,框图编辑页面将会弹出。这个页面将显示 所有已经被定义了的的输入、输出信号和内部信号 点击 按钮会进入页面的第二页, 在这一页中可以键入与块的初始化有关的信息和方程

式。此外,还可以指定常用模型的参数的名称和单位(参见章节 6.8:用户定义模型) 。 DSL 附件方程可以在框图编辑窗口的第二页中定义。

6.8 用户定义(DSL)模型
稳定性分析系统建模是电力系统分析领域中最为关键的问题之一。依靠应用模型的准确性, 大信号的有效性, 可用的系统参数以及实施故障或测试,该软件几乎适用于所有情况的分析并 且所得到的结果参数都是有根据的。 下面用一个简单的例子来说明这一点。当一个 10 万千瓦的电力系统失去容量为 2000MW 的机组时,预期的稳态频率偏差主要由频率对负荷的依赖性、强行励磁倍数决定。假设系统下 降 7%且强行励磁倍数为 0,则稳态频率偏差约等于 700mHz. 更接近现实的做法是设强行励磁系数为 5%/Hz,则预计的稳态频率偏差只有 596Hz。从另 一方面讲,频率对负荷的依赖性可能稍高或稍低。但是,水轮机效率的非线性特征和蒸汽阀的 非线性特征在特定负荷点上是相关的。所以,只要考虑一种或两种负荷情况,通过调整几个关 键参数(如频率对负荷的依赖性以及下垂设置)就可给出合理的简单模型的平均值。 因此,系统模型结构和参数的设置主要依据以下标准: 系统规模:大型和小型系统有不同的“关键参数”。如上面的例子中提到的,对于较小的电
79

力系统,频率对负荷的依赖是无关紧要的,而对于像 UCTE 或 UPS/ IPS 这样的大系统来说, 频率的依赖型可能完全决定了系统对旋转备用的要求。 机组规模: 大型机组的暂态和稳态特性对整个系统的响应起了决定性的作用。而小型机组 对整个系统的影响较小。 系统结构:除了系统规模和机组规模,系统结构比起其他因素来说更为重要。在我们分析 纵向延伸结构或合适的子结构对弱系统的影响时,很容易证明这一点的正确性。 系统故障:系统建模所要考虑的关键是实施故障及其相关问题。一方面,系统阻尼和系统 稳定性分析不需要考虑锅炉动力学。另一方面,必须考虑相关系统元件的中期和长期特征,否 则不能得到负荷优化和频率恢复的正确结果。 研究目的:通常,在系统规划阶段,只要没有有效的特定的附加要求,典型模型和典型参 数就都可拿来用。然而,在扩大系统规模时,需要更为详尽的系统描述。这里详细的模型表示 应当作为性能描述的一部分。 在分析系统的运行问题和运行优化时需特别注意, 对于这类情况, 相关组件的详细建模是至关重要的。 一旦需要对系统进行详细分析并需要建立系统模型时,则必须要解决的后续问题有:
? ? ?

如何确定模型的结构和参数? IEEE 模型以及制造商提供的额外框图是否具体准确? 如何将有效信息用到电力系统分析软件中?

这里提出的并已成功应用于各种项目的方法可被称为“高级系统建模方法(ASMA)”其典 型应用如下:
? ? ? ?

控制器问题和相关故障的分析,特别是在干扰情况下的分析。 控制参数的优化。 常出现在工业系统中的非传统系统结构和控制概念建模。 元件和系统的相位的设计与描述(如电力系统稳定器、发电机、高压直流输电系 统控制器)。

对于高级系统建模方法,以下步骤是至关重要的: 系统模型设置 基本代数和微分方程是在工学和物理学基本方程的基础上根据所需的准确度来建立的。 此 外,由这些基本方程得到的所有参数的计算精度都是相同的。 系统性能的测试 对于确定其他所有参数特别是非线性特性参数,系统性能测试是最好的方法。大多数情况 下,频率响应测试不能测定任何非线性结构及其它们的参数。那些不影响系统正常运行的特殊 的测试程序已被专门用于测试系统的稳态特性、增益以及时间常数。这些测试最好是由高精度 数字暂态性能测试系统来完成。 系统识别 非线性、多入多出系统识别技术采用了系统识别程序。通常情况下,测试数据和识别数据 之间的误差应小于 2%。 测量和仿真的比较
80

除了要分析子系统和组件,在所有相关运行模式下,系统的整体性能都应与理论模型作比 较。 当然,对于继电器建模以及不太复杂或由数字控制的函数建模时,没有必要严格按照 ASMA 方法的应用程序。因为它们是由它们的测试文档明确定义的。 6.8.1 建模与仿真工具 正如已经指出的,仿真结果的可靠性主要取决于系统建模的准确性和完整性。解决该问题 的方法从经典的传统的允许用户定义模型接口的软件到连接列表到基于提供预定义的低级别 宏的面向块的方法。 此外,最现代化的一般商用仿真工具已应用于灵活特定系统的模型表示中。不幸的是,这 种方法不能完全满足特定电力系统的负荷潮流特性。 仿真建模工具是稳定性程序的一部分,为了提供更为灵活的仿真建模工具,已经开始开发 基于控制系统的仿真语言。DIgSILENT 仿真语言 (DSL)的基本特征如下: 仿真工具隶属于连续系统仿真语言(CSSL);
? ? ? ? ?

DSL 中包括(时间)连续线性系统和连续非线性系统的完整的数学描述; 仿真工具基于通用控制和逻辑图,形成了一种非过程化的语言,因此元件选择的 顺序可以是任意的。换句话说,DSL 模型可以转化成图形化表示。 提供了宏的灵活定义,这可以是:代数方程、类似于 PID、PTn 的基本控件、甚 至是完整的物理子系统如阀门组或励磁系统。 为了达到提供完整的模型控制的目的,提供了各种内在函数,如 "select'', "lim'', "limits'', "lapprox'', "picdrop''。 提供各种以错误检测和测试为目的的程序,如:代数循环检测、未使用和未定义 的变量和缺少初始参数的报告程序。

6.8.2 DSL 实现:引言 “DIgSILENT 仿真语言”用于定义新的动态控制器,这种动态控制器的输入信号来自模拟电 力系统,并且对于不同的输入信号会有不同的响应。 DSL 本身能实现 PowerFactory 的附加暂态分析功能。仿真过程中,DSL 模型的模型方程 与电力系统元件的动态特性相结合, 然后联立模型方程进行电力系统与控制器相结合的综合暂 态仿真。 以下是 DSL 的主要接口函数: 信号输入输出通道:DSL 内部定义的变量(目前已超过 2500)可被读写模型访问。主要 特性是允许系统中存在的任何信号的访问或是建立复杂结构,例如基于硬件的模型考虑了“机 架”和“功能卡”设备的结构。 事件:被 DSL 模型评估的条件可能导致事件向程序内部的传送,它们将按事件发生的顺 序排列在事件序列中。
81

输出和监控:条件可能触发输出窗口显示用户定义的消息。

图96 PowerFactory 的DSL系统的结构

可通过一个例子很好的说明 DSL 的结构。 该例子考虑的是简单水轮机的原动机单元模型。 这个 DSL 模型以图形的形式定义并包含了一个嵌入式的 DSL 宏。这个内嵌的宏模型是通过编 程定义的单一的集成器。 定义新的 DSL 模型的基本方法如下: 1. 创建基本 DSL 模型集。这些模型实现了简单的原始的控制器如“一阶时间滞后” 模型或“PID”控制器。PowerFactory 自带了大量的原始控制器模型。通过用 DSL 语言编写微分方程和信号设置可以创建新的原始控制器模型。 2. 可通过绘制框图的方法来创建复杂控制器。这类框图通常要引用其他 DSL 模型, 所引用的这些 DSL 模型通过连接可生成更为复杂的控制器。控制器引用能够将 DSL 原始模型或是其他图形定义的复杂模型并入到复杂模型中。高度复杂的控制 器以一种分层的方式来设计,这里 DSL 原始程序作为这个层次结构的最下层。定 义的详细过程将在 6.8.3 节“定义 DSL 模型”中描述。

82

图97 水轮机的简单模型

图 97 描述了水轮机的模型定义。由此产生的 DSL 代码可通过点击“Rebuilt”( 钮显示在输出窗口上。 1. model Pt = 'pmu_hydro'(At,C;x1;Ti;) 2. 3. 4. 5. 6. 7. 8. pt_x = 'I.BlkDef'(xe;x1;Ti;) i3 = i1/i2 i1 = At*At i2 = pt_x*pt_x i4 = xe*pt_x xe = i3-C Pt = pt_x-i4 Output Signals Input Signals State Variables Parameter Internal Variables : 这个例子描述了简单的水轮机模型的输入信号 A_t 和 C,以及输出信号 P_t。 : Pt : At, C : x1 : Ti

)按

行的标号增加了代码的可读性。相关定义块如下:

图98 积分器的DSL模型的图形表示

图 98 描述了嵌入式原始 DSL 模型的图形表示。 这个原始模型是水轮机模型的子模型 (在 水轮机定义的第二行) 。单一积分器的原始 DSL 实现及程序如下:
83

1. model y = 'I'(xe;x1;Ti;) 2. [Ti] = 's' 3. limits(Ti) = (0,) 4. inc(x1) = y 5. 7. inc(xe) = 0 y = x1 6. x1. = xe/Ti 点击框图页面中的“Equations”按钮将出现第一行,第 2 到 7 行是手动键入的。 DSL 模型的组成部分 这两个 DSL 模型的范例显示了 DSL 模型的两个基本组成部分: 1. 2. 接口定义 DSL 模型描述

接口说明 接口定义了模型名称、输入输出信号的名称、模型参数和状态变量,这些值会显示在模型 标题的输出窗口中。 例(水轮机模型的第一行): 1. model Pt = 'pmu_hydro'(At,C;x1;Ti;) 框图页面还允许定义限制参数、输入信号以及模型的分类—线性或是 DSL 宏。 模型说明 基于接口定义中的信号,模型说明描述了 DSL 模型。DSL 说明包括:
? ? ? ?

变量说明——名称和单位 参数范围 初始条件以及用于计算初值的函数 定义控制器的代数关系 ! Ti 的单位是秒 !初始化 x1=y ! 初始化 xe=0 ! 等式 1: deltax1 / deltat = xe/Ti ! 等式 2: y=x1

例(积分器): 2. [Ti] = 's' 4. inc(x1) = y 5. inc(xe) = 0 6. x1. = xe/Ti 7. y = x1 高级功能 DSL 模型的数值积分、调度中断以及输入输出信号处理是由内部程序自动完成的。此外, 如果 DSL 模型的输出是总母线电流的一个分支,且案例中创建了负荷或发电机,那么迭代仿 真程序中所用到的所有雅克比元素都将自动计算得出。 DSL 的另一个有用的功能是设置计算特征值的系统矩阵的数值。所以,计算系统特征值或 是应用模态网络简化计算(MRT)时,系统会自动考虑 DSL 级的模型实现。当然,在这个计
84

3. limits(Ti) = (0,) ! Ti > 0

算过程中,所有的信号限制功能都会自动失效。 此外,通过窗口菜单组织的输入输出模型参数也是 DSL 模型自动生成的。 6.8.3 DSL 模型的定义 定义一个新的 DSL 模型有两种方法,第一种是在“定义块”(BIkDef)对象的方程式部 分键入 DSL 编码,第二种方法是创建一个新的图形框图(参见复合定义块节中的如何创建新 的定义块)。这两种方法都会生成一个包含 DSL 模型定义的定义块对象。 在构建 DSL 模型的过程中,定义块对象需满足两个要求:
? 它们应包含自身的定义和图形构造的复合块的部分定义以及用于定义模型的图表。 ? 它们提供一个可以定义“DSL 原始模型”或是“原始定义块”的环境。

复合定义块 创建一个新的复合定义块:
?

选择主菜单的中的 File -> New 或 Strg-N 然后选择“ New ”命令页面中的选项 “Block/Frame Diagram”。

?

点击图形工具栏的“Insert New Graphic”( Diagram”。

)按钮,并选择选项“Block/Frame

双击图表周围的框架图,可以访问定义块(BlkDef)的页面。 复杂的定义块对象在概念上类似于 PowerFactory 数据库树中的“网络文件夹”。通过图形 化定义存有图形信息和所有逻辑部分的控制器框图来定义他们。逻辑部分包括信号、小标准组 件(加法器、乘法器等)或 DSL 基元。 复杂定义块对象是以图形的形式创建的, 对于控制器中的一些难以用图形的形式表示的部 分允许添加 DSL 方程来定义。 这里不再介绍构建复杂框图的图形环境,相关内容请参见第 10 章图形编辑器。 原始定义块 创建一个原始的 DSL 定义块:
?

右击数据库管理器中被激活项目的(库)文件夹并在关联菜单中选择 “New... -> Block/Frame - Diagram”。

? ?

点击数据库管理器中的“New Object”(

)按钮并选择 Block Definition (BlkDef); 按钮选择一个定义块,之后点

在打开的框图中双击一个新/空的块引用,点击 击 按钮在本地库中创建一个定义块。

较为复杂的控制器图是由 DSL 原始模块搭建的。例如一个可以实现低通滤波的模块,可 被用来组成更为复杂的控制器。 不像常常会被认为是电力系统的原始模块的变压器和其他电力系统元件,DSL 原始模块 只能被复杂框图引用并且可以同时用在多个 DSL 模型中。
85

定义块页面 当创建一个原始 DSL 模型或是双击一个复合定义块的框架时,会弹出一个页面,在这个 页面中可以定义输入输出变量、参数、状态变量和限制变量,还可插入附加方程式、变量的初 始条件和参数的名称和单位。 图 99 中所示的是 PI 控制器的窗口,其中包括限制参数设置和一个开关信号设置。

图99 定义块页面 ? 名称和标题会出现在存储模型的库文件夹中。 ? 模型表示的等级只有在使用或更改旧的模型时才会被用到。对于新创建的模型通常

使用“等级三”。 对于宏, 这个选项不起任何作用, 因为最高模块的等级是很重要的, 即控制器定义。
? “自动计算初始条件”:PowerFactory 可以自动计算初始条件。然而,若没有发现任

何序列(because of, for example, deadlock situations)则会出现一个错误。
? “分类”

线性:这个选项只会影响图表中块的图形表示。如果这个选项被激活,这个块就会表示为 一个线性块,否则就会为用两条线表示的非线性块。
86

宏:这个选项用来标识定义块为库中的宏。 Matlab:激活该标签会显示一个输入窗口,这里 Matlab (*.m) 文件可被定义为在仿真期 间可与定义块通信的文件。若想了解更多有关 Matlab 接口的知识,请参见第 25.10 节 Matlab 集成。
? ? ? ?

可以在常用模型页面中定义常数限制参数和限制信号,类似于输入信号。不同之 处在于框图中的图形表示。 输入输出信号必须被限定为只能在定义块的内部使用。当块被使用时,数据和名 称会显示在符号图中。 不仅是线性方程,微分方程也需要用到状态变量。对于每阶导数都需指定一个状 态变量。 参数会显示在常用模型页面中并且参数可以被指定。在定义块中定义的参数可以 自动插入到块引用中。块引用和定义块中的参数名称可以不同,但是顺序必须是 相同的。

?

内部变量只能用在定义块的内部并且不能在外部设定。

在页面的右侧还有几个按钮: Contents(目录) :点击此按钮会显示定义块的目录。可能是图形化插入对象、块引用或 是包装的宏,还可能包括内部定义的事件。 Equations(等式) :点击此按钮会在输出窗口中显示 DSL 方程和变量的定义。不论以图 形化的形式定义的还是定义在“附加方程”页的方程式。 Macro Equat.(宏等式) :点击此按钮将在输出窗口中显示当前定义块的 DSL 方程(包括 所用的宏中的等式) 。 Check(检查) :该按钮将验证模型方程如果有错的话会输出错误消息。否则将输出下面 的消息: DIgSI/info - Check '\TestUser.IntUser\Windparks.IntPrj\Library \Block Definitions\DFIG\Voltage Control.BlkDef': DIgSI/info - Block is ok. Pack:该按钮将复合模型定义中所用到的 DSL 模型(宏)复制到定义块的文件夹“使用的 宏”中。通过这种方法,可以引用模型以外的其他项目或库。注意:宏库中的任何变化都不会 对宏产生影响。被复制的宏不再链接到库。所以如果某个宏中有了错误,则必须修改每一个封 装的块。 Pack-> Macro:这个指令会减少包含 DSL 块和附加方程的整个模型以及只包含方程式的 DSL 模型中的宏。所有的图形化信息会丢失。应当注意的是,此命令是不可逆的。 Encrypt:这个命令只有在 Pack-> Macro 被激活之前可用。这条指令将模型中的所有方程 加密,使得方程不可见也不能输出。通过这种方式,包含敏感和限制方程的模型可以在不显示 内部方程的情况下传递。应当指出的是,此命令是不可逆的且没有可用的解密功能。 通过点击 按钮可以访问页面的第二页。这里可以定义 DSL 模型的附加方程。也可以
87

定义其他信息,如,初始化状态变量以及参数的名称和单位。 图 100 显示了 PI 控制器的 DSL 模型的附加方程。

图100 定义块页面——第二页

下一节将介绍 DSL 语言的处理和使用。

6.9 DIgSILENT 仿真语言(DSL)
DSL 语言用于电气控制器和电力系统的其他组件的建模。相比于其他仿真或编程语言, DSL 语言有它独特的语法模式。 6.9.1 术语和缩略语 用于描述 DSL 语法的术语和缩略语如下: expr:算术表达式,不会被“;”终止。
? ? ?

算数运算符:+,-,*,/ 常数:所有的数字都被视为实数 标准函数:sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), sinh(x), cosh(x), tanh(x), exp(x), ln(x), log(x) (basis 10), sqrt(x) (square root), sqr(x) (power of 2), pow(x,y), abs(x), min(x,y), max(x,y), modulo(x,y), trunc(x), frac(x), round(x), ceil(x), floor(x). 下一节将详细描述这些运算符。

?

括号:(算术表达式)

所有三角函数的单位都是弧度(RAD)。 例:A = x1+2.45*T1/sin(3.14*y) Boolexpr: 逻辑表达式,不会被“;”终止。
? ? ? ?

逻辑关系:<, >, <> (不等于), >=, <=, =。 一元算子:.not. 二元算子:.and. .or. .nand. .nor. .eor. 括号:{逻辑表达式}

例:A = {x1>0.and..not.x2 <= 0.7}.or.T1=0.0 String: 单引号中的序列?…? 例:A = 'this is a string'
88

6.9.2 常规 DSL 语法 行长:行的最大长度为 80 个字符。使用?&?可将较长的行断为两行,?&?应置于第 二行的第一列。位于第一列的?&?表示将当前行和前一行相连。 例: y = lapprox(x, 1.674, 7.367, 2.485, 12.479, 5.457, 18.578 & 6.783, 15.54, 8.453, 12.589, 9,569, 6.478) 断行不能用于字符串或是名称中。 区分大小写:所有的关键字、名称、函数、变量、模型、宏等,都要区分大小写。 空格:当处理 DSL 编码时所有的空格都被移除。但是字符串中的空格会被保留。 注释:?!?后面的部分被认为是注释部分。当执行 DSL 代码时,会忽略注释部分。 例: ! 注释可能在某一行的开头 x1. = select(at<>0, & 6.9.3 DSL 变量 DSL 模型可以使用五种不同类型的变量: 输出信号:输出信号变量像输入信号变量一样可以用在较为复杂的 DSL 模型中。 输入信号:输入变量一般来自其他的 DSL 模型或是电力系统元件。对于后一种情况,所 分析的电力系统的电压、电流以及其他可用信号也适用于 DSL 模型。 状态变量:状态变量是时变信号产生的,用于 DSL 模型中。 参数:参数是只读数据可用于改变 DSL 模型的特性。 内部变量:内部变量定义在 DSL 模型中,且只能在 DSL 模型中使用。可以简化 DSL 方 程式组的构建。 以下规则可能会有助于解释警告和错误消息:
? ? ? ?

! 注释常用在分裂行中

(1-sqr(x1)/sqr(at))/Tw, 0)

状态变量一般不能同时用作输出变量;若需要时,则建议使用赋值语句 y=x1。 所有的参数都是实数。 特定参数?array_iiii? (高达 4 位 i) 和 2* iiii 元素用于定义特征 (见程序“lapprox”) 。

只有状态变量的导数可被分配给表达式。

6.9.4 DSL 结构 DSL 模型由三部分组成:
? ? ?

接口部分,该部分描述了模型名称、标题、分类、变量集合。在框图页面的第一 页中设置这一部分的内容。 定义代码 方程式代码
89

定义代码和方程式代码形成了实际的控制网络的定义,将在下一节中介绍它们。 6.9.5 定义代码 DSL 模型的方程部分的定义代码用于定义参数属性和初始条件。 单位和参数说明 vardef(varnm) = unitstring;namestring 变量 varnm 的名称和单位 例: vardef(Ton) = 's';'Pick up time for restart' ! 定义单位和名称 vardef(Ton) = ;'Pick up time for restart' ! 只定义名称 vardef(Ton) = 's'; ! 只定义单位 [varnm] = unitstring 变量 varnm 的单位,最大长度为 10 个字符 注: 当被替代的变量的单位与定义的单位不匹配时, 会出现一个宏调用错误的信息。 例: [Ton] = 's' ! 定义单位 有效值的范围 limits(varnm) = [/( minimum value, maximum value ]/) 定义变量 varnm 的有效区间。 若在仿真过程中超出了允许的范围, 则会输出: limits(yt)=(,1] is equivalent to output(yt>1,'Maximum exceeded: yt=yt>1') 圆括号表示不包括最小值和最大值,方括号表示包括最小值和最大值。 例: limits(x)=[min,max] ! min <= x <= max limits(x)=(min,max] ! min < x <= max limits(x)=(,max] ! x <= max limits(x)=(min,) ! min < x 如果需要并且有可能的话,程序会自动决定同一变量的几个区间中的最小区间。 例: limits(x)=(1,3) and limits(x)=(2,4] results in 2<x<3. 宏模型常常定义某些变量的上下限。 使用宏的模型也可能定义用于宏调用中的变量的区间。 ‘最小区间’ 方法可以使调用的模型在不违反内部宏的限制定义的条件下自由地定义参数区间。 6.9.6 初始条件 1. 直接设定初始条件 定义变量 varnm 的初始条件。 如果还没有定义 inc(varnm), 正常的赋值表达式将被评估 (只
90

inc(varnm) = expr

有当 varnm 是内部或输入型时) 。如果定义了 inc(varnm),只有将模型复位时它才会被评估。 inc0(varnm) = expr 定义变量 varnm 的初始条件, 用与 varnm 不与输入输出变量相连的情况。 只有当变量 varnm 不能被与它相连的输入输出信号的初始条件初始化时,才可以用 inc()语句的变形来初始化。 inc0()语句可使输入输出端打开。 incfix(varnm) = expr 该语句是 inc()语句的变形, 它只有在与自动初始化相连并用于确定矛盾情况下的初始值时 才有效,使用 incfix,可以直接初始化一个或多个变量而其他变量可以自动初始化。 例: 一个 AVR 模型可以有两个输入[upss , usetp ],一个输出[uerrs ],这两个输入均不能由这个 单一的输出自动初始化,这是由所连的设备决定的。因此,其中的一个输入值必须初始化为一 个固定的值,例如 incfix(upss)=0。这时 usetp 将被自动初始化。 2. 初始条件的迭代设定 可用于初始条件的迭代设定的三个函数是:looping, intervalinc, newtoninc。 如果已知一组参数,且这组参数的初始值是另一组参数的函数值,那么通过这些函数值, 可以寻找这组参数的初始值。 迭代函数用于找到未知参数的(近似)值和给已知参数设定初始值。 loopinc (varnm, min, max, step, eps) 执行一个简单的线性搜索为参数 varnm 查找一个值,这个值最接近已知的初始值。 varnm = target variable, whose initial value is known min = 下限 max = 上限 step =步长 eps =最大误差 例:inc(a) = loopinc(b, -5, 5, 0.01, 0.001)
? ? ?

变量 a 的初始值是通过在[-5,5]的范围内以 0.01 的步长与参数 b 进行比较搜索得到 的。 返回值:返回 a,a 是 b 值和已知初始值之间的最小差值。如果最小偏差大于 eps 将会出现警告消息。 限制:只能用在 inc()语句的右侧

intervalinc(varnm, min, max, iter, eps) 为了使参数 varnm 和它的初始值尽量相同,我们采取区间搜索的办法。 varnm = 目标变量,它的初始值已知 min = 下限, max = 上限 iter = 最大迭代次数 s = 最大误差 例:inc(a) = intervalinc(b, -5, 5, 40, 0.001)
91

说明:搜索变量 a。在[-5,5]的范围内执行分区搜索,只要偏差 b 小于 eps,则此时的 a 即为要找的值。若已达到最大迭代次数则迭代停止,此时如果最小偏差还大于 eps 则输出警告 消息。 限制:只能用于 inc()语句的右侧。 newtoninc(initexpr, start, iter, eps) 用牛顿迭代法解一组耦合方程,通过不断地缩小偏差来查找一个或多个参数。 initexpr =参数表达式 start = 初值查找的起始值 iter = 最大迭代次数 eps = 最大误差 例: qt0 = 0.5 eps = 0.000001 maxiter = 100 inc(hedr) = newtoninc(hw-sqr(qedr)*(Rds+Rdr), hw, maxiter, eps) inc(qt1) = newtoninc(Pt1/(4*dh*eta1), qt0, maxiter, eps) inc(qt2) = newtoninc(Pt2/(4*dh*eta2), qt0, maxiter, eps) inc(qt3) = newtoninc(Pt3/(4*dh*eta3), qt0, maxiter, eps) inc(qt4) = newtoninc(Pt4/(4*dh*eta4), qt0, maxiter, eps) 这个例子显示了模型的初值定义的一部分。通过建立系统的耦合方程并用牛拉法解方程可 以同时找到五个参数的初值。所以,最终:

注意事项:
? ? ? ?

是给复杂模块增加初始条件而不是每个原始模块(如,一阶延时模块) 。 一般初始化的方向是从右到左。即,已知输出求输入。 若某变量没有定义初始条件,则用模拟方程代替。这足以指定状态变量和输入变 量的初始条件。 需要设置初始条件的自动计算选项,但是并不是对于每一个状态变量或输入变量 都需要正确的初始条件。初始值只用于初始迭代过程中。Incfix 函数用于模糊初 始值的定义。

?

使用验证初始条件选项来检查初始条件是否能带来正确的结果。

92

6.9.7 方程代码 方程代码包括建立仿真模型的所有方程式。一组方程是定义了描述输入输出信号之间传 递关系的差分方程。这些传递函数可以从简单的线性、单输入单输出函数,到高度复杂的非线 性、非连续多入多出函数。 DSL 用来描述信号和其他变量之间的直接关系。 表达式可以分配给一个变量或是状态变量 的一阶导数。高阶微分方程必须通过引入附加状态变量才能分解成一组单阶方程。 6.9.8 方程语句 方程语句用于指定参数的表达式,这里的参数值的是微分方程组的所有相关参数。 语法: varnm = expr 指定变量 'varnm'的表达式为'expr'。 例: y = sin(a)+3*x1 y = .not. x1>2 .or. a<=3 varnm. = expr 给变量'varnm'的一阶导数指定表达式 expr。 例: x1. = (xe-x1)/T1 x2. = x1 备注:
? ? ?

对于任何序列都可以进行 DSL 表达式的分配。且顺序不影响表达式的赋值。 所有的变量都是浮点型的,甚至是布尔表达式的变量,变量的值是 0.0000 或 1.0000。 z 的逻辑 1 是通过评估确定的(z>0.5)。 当一个变量 z 用于逻辑表达式时 (如 y=.not.z) , y1 = .not.z 相当于 y1 = (z=<0.5)。 当一个表达式中既有逻辑变量又有非离散变量时,系统不会发出警告消息。 因此,下面的表达式将不会导致发出警告消息:根据 y,确定 z 的取值为 x1 + 4.0 还 是 x1。 y = .not. x1>2 .or. a<=3 z = 4.0*y + x1

?

当变量之间有联系时,应按顺序给变量赋值。在下面的例子中,应先执行第二行然后 再执行第一行。 1. a = b+5 2. b = x1 3. x1. = 1

?

不支持代数循环。在下面的例子中,将显示错误消息:
93

a = b+5 b = 2*a
?

若没有给变量 varnm 赋值,变量会维持它的初始值。右边的表达式中不能有导数。导 数只能出现在等号的左边。第一个例子是正确的,第二个例子是错误的。

x1. = asin(a) ! 正确 a = sin(x1.) !错误 6.9.9 DSL 宏 DSL 宏是一个预定义的 DSL 模型,这个模型可以是复杂的也可以是原始的,这意味着它 可以被更高级的 DSL 模型调用。框图编辑页面提供了一个'Macro'选项,通过该选项,可以标 记模型类型为宏。 DSL 宏可通过以下两种方式被包含在更高级的 DSL 模型中。第一种是在框图中创建一个 块引用。第二种是将其明确列入 DSL 方程中。 语法: varnm1, varnm2,... = macroname (i1,i2,... ; s1,s2,... ; p1,p2,... ; i1,i2,...) 将 DSL 宏 macroname 的输出信号分配给变量 varnm1, varnm2 , ...。将 DSL 宏的输入信号 分配给变量 i1, i2,...。宏使用的状态变量是 s1, s2,... 参数是 p1, p2,... 内部变量是 i1, i2,...。 例: P1,P2 = '\User\I.BlkDef'(i1,i2;s1,s2;T1,T2) 这个例子将 DSL 模型\ User\ I.BlkDef 的输出分配给 P1 和 P2。在表达式中不支持宏调用,即 使他们只有一个输出值。 正确的例子: y = my_macro(x1, s1, p1, i1) ! 错误的例子 y = 3 * my_macro(x1, s1, p1, i1) + 4 应被替换为: y1 = my_macro(x1, s1, p1, i1) y = 3 * y1 + 4 DSL 内部宏处理 通过使用宏的方程式代码,一个 preparser 可替代一个宏调用。DSL 模型中的宏的变量可 以被宏调用中的变量代替。宏的本地变量名会在这一过程中消失。 DSL 模型 通常,有两种基本模型: 1. 电气设备的模型,如发电机、负荷或高压直流输电系统。这些模型的共同特定是其输出信 号 “复杂设备电流”要通过某母线注入电网。然而,除了电气设备的电流,还有其他的 可作为输出信号的变量。可在相关的元件技术参考中找到可用变量的总结。 2. 输出信号不能直接注入电网的模型(一般模型)类型有:原动机单元、电压控制器、继电
94

器、计算程序等。 6.9.10 事件和消息 DSL 语言提供了中断事件生成程序和发送信息到输出窗口的程序:
? ?

程序 fault(boolexpr, event_string)会生成一个事件,在每一步开始时执行此程序。 程序 output(boolexpr, message_string)会输出一条消息, 在每一步结束时执行该程序。

在模型仿真期间,每一步时都会执行"fault" 和"output"程序。第一次发现 boolexpr 的值为 真时,将处理字符串并发送一条消息到输出窗口或是将一个事件添加到 PowerFactory 事件队 列中。若"fault" 或 "output"程序失效,则只有当 DSL 模型重置后,这两个程序才会恢复,这 样的设置是为了防止发生消息和事件的雪崩。 下面将具体介绍这两个程序。 output(boolexpr, message_string) 式中的 message_string 可能包含变量也可能包含特定的函数 num(boolexpr) 或 num(expr):
?

直接出现在等号后面的变量名会被它们的真实值所替代;因此,下面的这行代码 生成消息是: maximum exceeded: yt=1.2 > ymax=1.0:

output(yymax,'maximum exceeded: yt=yt > ymax=ymax')
?

表达式中的 NUM(expr)或 NUM(boolexpr)将被计算值取代,例如:

value=num(a+b) 可以生成 value=3.5000 fault(boolexpr, event_string) 每个 DSL 模型都可以在事件列表中添加事件。例如,一个距离继电器的模型可通过增加 一个正确的开关事件来打开一条线路的电源开关。 “添加事件”是通过执行一个 PowerFactory 数据库中的现存的事件对象来完成的。因此,所有可能被用于 DSL 模型的事件必须与 DSL 模 型一起创建。它们必须存储于常用模型中(ElmDsl) 。这些 DSL 事件形成了 DSL 模型的集成 部分。 fault 表达式中的 event_string 必须引用其中一个事件的名字。在执行时,如果 boolexpr 为 真,则事件将被放到事件栈中。一旦仿真进行到该事件,这个事件将被执行。所以,应提前设 定被 DSL 模型放到栈中的延时事件的执行时间。 通过给 fault 字符串赋一个新值可以修改事件的参数。其原理与上面描述的输出程序是一 样的。 例:fault(u>1.1,'name=MySwitchEvent1 dtime=0.15') 如果变量 u 的值超过了 1.1,则名为'MySwitchEvent1'的事件将被放到事件栈中并且变量 dtime(事件相对时间)将会被设定为 15 毫秒。即这个事件将延迟 15 毫秒。在这种情况下, 需要打开模拟时间的开关。在事件对象'MySwitchEvent1'中定义的开关将被打开。 注: 通过常用对象的编辑页面可以访问事件或是创建事件 (双击 DSL 模型中的数据库管理器) , 然后点击页面中的 Events 按钮。这时将显示在模型中定义的事件列表。只有在 DSL 模型中激 活的事件才能被添加到项目的全局事件列表中。
95

6.9.11 完整 DSL 模型的范例 二次中间再热式汽轮机和蒸汽储备 控制器模型: model pt,ptmw = 'pmu_1'(at,sgn,cosn,ngnum;x1,x2,x3,x4;Thp, Tip,Tlp,alflp,Tspi) limits(T1) = [0,) limits(alfhp) = [0,1] vardef(alfhp) = ;'High pressure turbine ratio'; limits(alflp) = [0,1-alfhp] vardef(alflp) = ;'Low pressure turbine ratio'; vardef(Tspi) = 's';'Boiler capacity time constant'; limits(Tspi) = (0,) vardef(Thp) vardef(Tip) vardef(Tlp) inc(x1) = y/K inc(xe) = y/K inc(x4) = 1.0 inc(at) = pt inc(steamflow0) = pt inc(ylp) = pt x1. y x4. yhp yip ylp pt ptmw = select(T1>0,(xe-x1)/T1,0) = K*select(T1>0,x1,xe) ! if T1=0 => y=xe ! boiler = 's';'High pressure turbine time constant'; = 's';'First reheater time constant'; = 's';'Second reheater time constant'; [T1] = 's'

steamflow = at*x4 = (steamflow0 - steamflow)/Tspi = PT1(steamflow;x1;Thp) ! high pressure part = PT1(yhp;x2;Tip) ! medium pressure part = PT1(yip;x3;Tlp) ! low pressure part = yhp*alfhp + ylp*alflp+ yip*(1.0-alfhp-alflp) = pt*sgn*cosn*ngnum ! only for output purposes

所用的宏'PT1'被定义为: model y = 'PT1'(xe;x1;K,T1;) x1. = select(T1>0,(xe-x1)/T1,0) y = K*select(T1>0,x1,xe) ! if T1=0 => y=xe inc(x1) = y/K inc(xe) = y/K
96

[T1] = 's' limits(T1) = [0,)

6.10 Matlab 集成
此外,用 DIgSILENT 仿真语言设计控制器或其他机电模型时,可以使用 Matlab 接口。这 个接口为模型控制器和其他复杂传递函数提供了 Matlab 环境,并将它们作为定义块插入到 PowerFactory 暂态仿真的框架中。 在仿真过程中,PowerFactory 可以相当于 Matlab 程序。它在每一个时间步长里都将块的 输入值传递给 Matlab,Matlab 将在它自己的环境里执行一个特定的*.m 文件并将结果作为定 义块的输出返回。为实现以上功能,需要在 Matlab 程序中安装 Simulink 软件包。 有关 Matlab 文件的执行将在下一节中介绍。在这个例子电压控制器的实现中首先使用了 一个内置模型(ElmVco)和 Matlab 中的一个定义。 这个例子也可以在 DIgSILENT 主页的常见问 题中找到。 6.10.1 电压控制器的实现—范例 在这个例子中电网包含两个发电机、一个负荷和一条线路,如图 101 所示:

图101 Matlab例网

仿真事件被定义为负荷,这里无功将在 0.5 秒后增加。 这个完整的例子包括三个文件。 1. Matlab Example.dz—PowerFactory 文件 2. VCOtype16.m—Matlab M-文件 这个文件是一个仿真模型的接口,它被作为 PowerFactory 和 Simulink 之间的通信桥梁。 3. vcotype16mod.mdl 是一个 Simulink 模型并且它包含 VCO 16 型的 Simulink 实现。

97

6.10.2 内置模型的实现 在研究案例的基础上,电压控制器模型用内置模型 VCO 16 型 (ElmVco__16) 来表示。 PowerFactory 中的内置 VCO 16 型是一个带简单励磁机的励磁系统。两种复合模型都使用了全 局库的 IEEE-框架中的 AVR。发电机可以有不同的 VCO 参数设置。 图 102 显示的是 ElmVco 编辑页面和 AVR 的参数。

图102电压控制器的参数页面

图 103 显示的是 ElmVco__16 的模型表示

图103 电压控制器的参数页面

仿真结果(图 108)显示了母线电压和两台发电机的励磁电压。结果储存在相关研究案例 的"Results"文件夹下的结果文件中。 6.10.3 Matlab 模型实现 第二个研究案例“MATLAB”在基本案例的基础上做了修改,VCO 16 型是 Simulink 包中的 模型而不是一个内置模型。当进行仿真时,Matlab 控制台会自动启动。 在 PowerFactory 的当前项目中实现一个 Matlab 模型, 该模型必须包含一个类似于 DSL 模
98

型定义的框架中。第 6.10 节 Matlab 集成中详细介绍了这个程序。首先必须在框架中创建一个 插槽,并在该插槽中插入控制器模型。这种方法完全类似于内置模型或常用模型的实现。然后 必须在库中创建一个定义块 BlkDef。这样就无需用 DSL 编码编写传递函数,而是直接导入 Matlab 编码。 以上方法可以在定义块的页面中实现,在库中创建原始 DSL 模型的方法是:
?

右击数据库管理器中被激活项目的一个 (库) 文件夹然后从关联菜单中选择“New... -> Block/Frame – Diagram”。

? ?

点击数据库管理器中的"New Object'' (

) 按钮, 然后选择 Block Definition (BlkDef)。 按钮来选择一个定义块。 按

在打开的框图中双击一个新/空的块引用然后选择 钮可用来在本地库中创建一个新的定义块。

打开新的 BlkDef 的页面的方法是:
? ?

双击复合框定义的框架。 双击库的定义或是按钮

这里必须定义输入输出变量、参数、状态变量和限制信号。当选项 Matlab 被激活,可选 择一个*.m 文件而无需插入描述不同功能块的方程。 图 104 中所示的是所提到的例子中的包含参数定义和所选文件的定义块的编辑页面。

图104 使用特殊框架的复合模型 99

图 105 中所示的是 Matlab Simulink 包中的 ElmVco__16 模型表示。

图105 电压控制器的参数页面

在指定定义块时,必须先创建一个 DSL 模型。正如 25.7.4 节常用模型中描述的,常用模 型元件是所有用户定义的定义块的前端对象。这就意味着所有包含内置元件或 Matlab 模型的 用户定义的暂态模型只能用在常用模型中。 DSL 元件的编辑页面与内置 ElmVco 的 常用模型是模型或定义块与特定参数集合的结合。 页面有区别。从图 106 可以看出,这个页面类似于普通 DSL 模型的页面。所有的时间常数和 其他参数都与内置 VCO 模型相同。

图106 Matlab电压控制器的参数页面

图 107 中显示的是特定框架的复合模型。并且该复合模型的槽中插入了发电机‘G1’和 Matlab-AVR。

100

图107 使用特殊框架的复合模型

使用 VCO 模型 (虚线) 和 Matlab 表示 (实线) 的无功功率失步仿真的结果如图 108 所示。

图108 内部模型的暂态仿真结果 101

6.10.4 Matlab 文件 VCOtype16.m 是 Simulink 模型的接口配置 Matlab 文件,该文件储存在 vcotype16mod.mdl 和 PowerFactory DSL 模型中。如下所述,这里已定义了输入输出信号、参数和状态变量。指 定了传递函数。 文件的内容如下: function [t, x, y] = VCOtype16 global U Tvm Usetp Upss Vska Tisp Ur1mx Ur1mn Vsex Efdmx Efdmn ve1 x1 x2 options = simget('VCOtype16mod'); options = simset('InitialState', [x1,x2]); [t, x, y] = sim('VCOtype16mod', [], options); PowerFactory 将以下变量插入到 MATLAB 工作区中: U, Tvm, Usetp, Upss, Vska, Tisp, Ur1mx, Ur1mn, Vsex, Efdmx, Efdmn, ve1, x1, x2 这些变量是成功运行 Simulink 模型的必要条件。这里有三个输入信号(u,Estop,UPS) 一个输出信号 Uerrs 和两个状态变量 X1、X2。 PowerFactory 仿真过程的每一步都会对 Simulink 模型进行完全评估。 在仿真的每一步中状 态变量('InitialState')都会分配给 Simulink 模型。因为 PowerFactory 是一个简单的函数调用: [t, x, y] = VCOtype16 对于两台发电机,PowerFactory 只使用一个 Simulink 模型。为了避免 Simulink 的限制, PowerFactory 必须在仿真的每一步中都传递所有的参数。 同一时间只允许模型的一个实例运行。 为了找到计算初始条件的方程,你需要了解 Simulink 中传递函数块的结构。为了获得这 种认识,可将 Matlab Simulink 模型中的变量替换为真实的数,设置初始条件,运行几秒钟, 通过监视所有传递函数的输出可判断模型是否能够被正确的初始化。 Matlab Simulink 模型的名字可以和接口文件的名字相同。 接口文件语句中的状态变量的顺序"options = simset('InitialState', [x1, x2, .......])"非常重要, 向量中元件的顺序[x1, x2, ...]必须和内部构造的 Matlab 的状态变量向量中的一样。为了确定 Matlab 状态 变量向 量 的顺序, 用户可 以 在 Matlab 工 作区中 使用命令 "[sizes,x0,xstring]= ModelName",这里 ModelName 是 Simulink 模型的名称(没有.mdl 扩展也不加引号) 。字符串 变量的输出 xstring 包括了 Simulink 模型中动态图块的名字。在上面的例子中,第一个状态变 量在测试块中,第二个状态变量在积分器中: xstring = ...'VCOtype16_model/Measure/State Space' ...'VCOtype16_model/Integrator' 初始条件中变量的名字与 Simulink 动态模型的名字没有任何关系。 初始条件要在 PowerFactory 中设置。此外,由于 PowerFactory 的模型检查机制,状态变 量的导数等于零。
102

Simulink 的求解参数设置为集成在一个小的时间步长中, 如启动时间=0, 结束时间=0.01, 步长= 0.01。 MATLAB 返回的 Y-矩阵中包含了输出变量。如果 DSL 模型中定义了多个输出变量,在分 配给 MATLAB 的输出之前要按字母顺序排序。例如,如果有两个输出"uerrs" 和"output",则 Y-矩阵的第一列的值将赋给“output”,第二列值将分给“uerrs”。 6.10.5 补充说明 DIgSILENT PowerFacory 用程序识别键 Matlab.Application" 和"Matlab.Application.Single" 来调用 MATLAB。 PowerFactory 将启动相同的 MATLAB 安装,这一点会在最后用到。其他 有关 MATLAB 调用的信息请参见 http://www.mathworks.com。

103

参考资料
1. 2. 3. 4. 5. 西交 DIgSILENT Powerfactory 介绍.ppt 西交 DigSILENTPowerfactory 软件在新能源领域的深入应用结题报告.doc 中国电科院 DIgSILENT 培训.pdf 天大 digsilent 培训.pdf 第 25 章_稳定性和电磁暂态仿真.docx 在此一并致谢!

DIgSILENT PowerFactory 学习交流信息
1. 2. 3. 4. 5. 查阅手册 Help>>Users Manual 官方网站 http://www.digsilent.de/application_examples 教授网站 http://www.fglongatt.org/Tutorial_DigSilent_EN 中国电力研学网 DigSilent 板块 QQ 群:微网 digsilent 建模交流群 215196568

104


相关文章:
digsilent七个案例学习总结
在本教程中,不使用用户的名字,尽管在图中显示的是...C. 4 关闭及重新启动 DIgSILENT PowerFactory 程序 ...E.1 Data Manager 基础知识 熟悉 “ Windows ...
digsilent-1.4.1百度网盘下载地址+破教程+实用资料
digsilent-1.4.1百度网盘下载地址+破教程+实用资料_工学_高等教育_教育专区。2010...Digsilent课件1 47页 1下载券 powerfactory简单使用说... 24页 免费 DIgSILENT...
计算机软件
1061936992 DIgSILENT PowerFactory 教程\ Etap.PowerStation.v6.0 电力及电气系统计算分析软件\ Mentor Graphics Catapult C Synthesis v2008a.39\ Mimics 10.01 (...
超低压穿越
在电力系统 仿真分析软件 DIgSILENT/PowerFactory 中建立双馈变速风电机组及 LVRT 功能模型。以地区电网为例,详细分析系统故障对风电机组机端电 压的影响,依据不同...
低电压穿越
在电力系统仿真分析软件 DIgSILENT/PowerFactory 中建立双馈变速风电机组及 LVRT 功能模型。以地区电 网为例,详细分析系统故障对风电机组机端电压的影响,依据不同的...
更多相关标签:
powerfactory教程 | powerexif入门教程 | digsilent视频教程 | digsilent安装教程 | powerfactory | powerfactory 破解版 | power factory | power factory 破解 |