# Python电网静态和准静态分析及自动化优化

{% tabs %}
{% tab title="关键词" %}
Python | 电网 | Numpy | Matplotlib | Pandas | 时间序列
{% endtab %}

{% tab title="梗概" %}
### 电力系统分析

电力系统分析是电气工程的一个分支，用于设计整个电力系统，包括发电机、变压器、电容器组、并联电抗、输电线路等。这与消费场所的电气安装设计不同，后者不仅涉及低电压，还假设公用事业提供稳定的电力供应，而电力系统分析则涉及公用事业本身的设计。国内安装设计的设计理念不需要任何数学，也不需要任何先进的软件，只关心一个场所内的照明和电源布线的分布。然而，公用事业设计涉及包括发电机和变压器在内的高、低压和中压电力设备，此外还有多台发电机并联工作的复杂性。电力系统分析的目的是确保设备协同工作，以便以规定的电压和频率将所需的电力输送到负荷中心，并且网络中没有组件过载，并且没有故障条件危及系统。

由三个主要部分组成：

* 潮流分析 - 输入发电机电压、负载中心的功率要求和线路阻抗，并找出各种总线（“终端”）上的结果电压。 当然，电压应该在公差范围内。 请注意，在这种情况下，我们不能假设负载电压是家庭安装情况下的标称电压，而是必须通过求解非线性多变量方程来计算。
* 短路研究 - 模拟各种短路并找出产生的故障电流，以便为电力系统选择合适的开关设备
* 稳定性研究 - 由于发电机同步工作，突然的负载变化或故障可能导致其中一个或多个失步，必须加以处理。

### 本文

本文介绍了新的电力系统分析方法和工具。概述了动机以及有关网格建模和数据结构的基本设计选择。第 III 讨论了附带的广泛的电气元件库，例如 ZIP 负载、线路、变压器或开关。 还包括符合 IEC 60909 的短路计算的原始实现。在电力分析功能之上，拓扑搜索模块允许使用 NetworkX 库对电力网络进行图形分析。最后，给出了一个在有源配电网中进行准静态时间序列模拟的综合案例研究。

### Python电网数据结构

基于表格数据结构，其中每个元素类型都由一个包含特定元素所有参数的表和一个包含不同分析方法的元素特定结果的结果表表示。表格数据结构基于 Python 库 pandas。它允许存储任何数据类型的变量，以便电气参数可以与状态变量和元数据（例如名称或描述）一起存储。可以通过添加新列轻松扩展和自定义表格。所有固有的 pandas 方法都可以用来高效地读取、写入和分析网络和结果数据。 网络（缩写为 net）是一个 Python 字典，包含有关网络的所有信息。最重要的是，它包括一个元素和每个元素类型的结果表，例如线路、变压器、开关等。元素表保存用户指定的所有输入参数，而结果表由潮流或最优潮流函数用于存储结果。输入和输出参数由两个表中的相同索引标识。该网络还包括保存标准类型数据和网络范围参数（如频率、网络名称或单位系统的额定视在功率）的字典。

#### 电元件模型

* 总线 - 代表网络的节点
* 负载 - 负载用于模拟电力消耗
* 静态发电机 - 用于模拟具有有功功率和无功功率的恒定功率注入
* 压控发电机 - 用于对具有固定有功功率注入和电压幅度设定点的电压控制发电单元进行建模
* 外部电网 - 外部电网元素模型表示具有电压幅值和相应电压角的电压源
* 分流器 - 可用于模拟电容器组或电抗器的网络元素
* 线路 - 线用π等效电路建模
* 双绕组变压器 - 用 T 等效电路建模
* 三绕组变压器 - 可以由三个 Y 形连接的二绕组变压器建模
* 开关 - 允许对理想开关进行建模
* 直流输电线路 - 直流传输线在两条总线之间传输有功功率
* 阻抗

### 示例

1.  创建一个包含 2 个外部电网、两个变压器（1 个两绕组变压器和 1 个三绕组变压器）的电网。为了使所有总线和线路的创建更简单，我们将创建总线和线路的过程包装到一个函数中。

    ```python
    def create_bus_with_line(net, last_bus, length_km, std_type):
        new_bus = pp.create_bus(net, vn_kv=10.)
        lidx = pp.create_line(net, last_bus, new_bus, std_type=std_type, length_km=length_km)
        pp.create_switch(net, bus=last_bus, element=lidx, et="l")
        pp.create_switch(net, bus=new_bus, element=lidx, et="l")
        return new_bus
    ```

    ```python
    def create_example_net():
      
        net = pp.create_empty_network()

     
        hvb = pp.create_buses(net, 2, vn_kv=110.)
        pp.create_ext_grid(net, hvb[0], s_sc_min_mva=2500, rx_min=0.3)
        pp.create_ext_grid(net, hvb[1], s_sc_min_mva=3000, rx_min=0.2)

     
        lb = pp.create_bus(net, vn_kv=10.)
     
        pp.create_transformer(net, hvb[0], lb, std_type="40 MVA 110/10 kV", df=0.1)
      
        std_types = ["70-AL1/11-ST1A 10.0", "NA2XS2Y 1x240 RM/25 6/10 kV"]
        
        for length, std_type in zip([1.8, 2.4, 3.6, 4.8, 4.8, 1.2], [0, 1, 0, 1, 1, 1]):
            lb = create_bus_with_line(net, lb, length_km=length, std_type=std_types[std_type])
        lb = 5

        for length, std_type in zip([1.2, 3., 4.8, 3.6, 1.2, 0.6], [1, 1, 1, 0, 1, 0]):
            lb = create_bus_with_line(net, lb, length_km=length, std_type=std_types[std_type])
       
        pp.create_transformer3w(net, hvb[1], 8, lb, "63/25/38 MVA 110/10/10 kV")
        net.line.loc[net.line.index[net.line.type == "ol"], "endtemp_degree"] = 100 
        net.line.loc[net.line.index[net.line.type == "cs"], "endtemp_degree"] = 20 
       
        net.line["max_loading_percent"] = 50
        net.trafo["max_loading_percent"] = 50
        net.bus["max_vm_pu"] = 1.03
        net.bus["min_vm_pu"] = 0.97
        
        return net
    ```
2. 分析电网中所有可能的开关状态，以分析考虑径向和短路约束的可行开关位置
3. 考虑有功功率损耗、线路负载、变压器负载和电压约束，优化开关状态和变压器的时间序列仿真

### 源代码
{% endtab %}
{% endtabs %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}
