Engee documentation
Notebook

B2 The program of functional tests of DZ and TNZNP 330-500 kV

In this example, a test network model is implemented to perform functional tests of the 330-500 kV DZ and TNNP from Appendix B2 STO 56947007-29.120.70.241-2017. Technical requirements for RPA microprocessor devices. This example contains 12 models named B2_X.engee, where X is the number or range of experiment numbers, the model B2.engee is intended for verification. The model has been adapted and tested for launch at KPM RHYTHM. For more information about using KPM RHYTHM, see the examples KPM RHYTHM: Quick Start and KPM RHYTHM: Real-time operation. Examples of experiments are made to demonstrate without connecting real equipment, you need to connect it yourself. To connect the RPA terminal, you need to add DAC blocks and digital inputs/outputs from the RHYTHM block library to the model, then connect the terminal to the RHYTHM KPM. The scheme of the simulated network:

image_2.png

Parameters of the power system A:
The active resistance of the direct sequence is 1,038 ohms
The inductive resistance of the direct sequence is 13,322 ohms.
The active resistance of the zero sequence is 1,403 ohms
The inductive resistance of the zero sequence is 16.429 ohms.
Equivalent EMF – 523 kV
The EMF phase angle is 0°

Power system parameters B:
The active resistance of the direct sequence is 3,761 ohms.
The inductive resistance of the direct sequence is 39.757 ohms.
The active resistance of the zero sequence is 1,661 ohms.
The inductive resistance of the zero sequence is 31.988 ohms.
Equivalent EMF– 474 kV
The EMF phase angle is -11.26°

Parameters of the A-B line:
Length 152.63 km
The resistivity of a straight line is consistent. 0.01967 + j 0.2899 ohms/km
The resistivity of the zero-sequence line is 0.1697 + j 1.1071 ohms/km
The specific capacity of the direct sequence is 3,908 nF/km
The specific capacity of the zero sequence is 2,851 nF/km
Mutual induction resistivity 0.15 +j 0.3044 ohms/km

Measuring current transformers:
TFRM-500B U1
pt= 2000/1 A
Snom = 40 VA, cos φ = 0.8
K10 = 18
Qact = 23.6 cm2
Lc = 2.28 cm
W1 = 1
W2 = 2000
R2 = 4.23 ohms
X2 = 0 Ohms

Model verification

Before the first launch, you need to install a package for rendering tables.:

In [ ]:
using Pkg
Pkg.add("PrettyTables")

Comparison of required mode parameters and calculated ones:

In [ ]:
model_name = "B2"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
blocks = ["Q1_ctrl", "Q2_ctrl", "Q3_ctrl", "Q4_ctrl", "ЗН_3", "ЗН_4"]
switch_states = [0 0 0 0 1 1]
for i = 1:length(blocks)
    engee.set_param!(model_name*"/"*blocks[i], "Value" => switch_states[i]);
end
time_ar = [0, 1]
switch = ones(2,4,2)
# Запуск загруженной модели:
results = engee.run(model_name);
# вектор времени симуляции
# sim_time = results["P1_1"].time;
P1_1_ex1 = results["P1_1"].value[end]
Q1_1_ex1 = results["Q1_1"].value[end]
V1_1_ex1 = results["V1_1"].value[end][1]
I1_1_ex1 = results["I1_1"].value[end][1]
P2_1_ex1 = results["P2_1"].value[end]
Q2_1_ex1 = results["Q2_1"].value[end]
V2_1_ex1 = results["V2_1"].value[end][1]
I2_1_ex1 = results["I2_1"].value[end][1]
switch_states = [0 0 1 1 0 0]
for i = 1:length(blocks)
    engee.set_param!(model_name*"/"*blocks[i], "Value" => switch_states[i]);
end
# Запуск загруженной модели:
results = engee.run(model_name);
# вектор времени симуляции
# sim_time = results["P1_1"].time;
P1_1_ex2 = results["P1_1"].value[end]
Q1_1_ex2 = results["Q1_1"].value[end]
V1_1_ex2 = results["V1_1"].value[end][1]
I1_1_ex2 = results["I1_1"].value[end][1]
P2_1_ex2 = results["P2_1"].value[end]
Q2_1_ex2 = results["Q2_1"].value[end]
V2_1_ex2 = results["V2_1"].value[end][1]
I2_1_ex2 = results["I2_1"].value[end][1];

Disrespect for results:

In [ ]:
using PrettyTables
colomn1 = ["Обе цепи в работе", "Напряжение на шинах, кВ", "Ток по линии, А",
"Активный переток мощности, МВт", "Реактивный переток мощности, МВАр", "",
"Цепь 2 отключена с двух сторон и заземлена", "Напряжение на шинах, кВ", "Ток по линии, А",
"Активный переток мощности, МВт", "Реактивный переток мощности, МВАр"]
colomn2 = ["", "518,4", "392", "347,8", "53,53", "", "", "517,7", "618", "532,3", "154,8"]
colomn3 = ["", "505,9", "449", "-346,2", "-186,8", "", "", "496,5", "681", "-528,3", "-251,9"]
colomn4 = ["", V1_1_ex1, I1_1_ex1*1e3, P1_1_ex1, Q1_1_ex1, "", "", V1_1_ex2, I1_1_ex2*1e3, P1_1_ex2, Q1_1_ex2]
colomn5 = ["", V2_1_ex1, I2_1_ex1*1e3, P2_1_ex1, Q2_1_ex1, "", "", V2_1_ex2, I2_1_ex2*1e3, P2_1_ex2, Q2_1_ex2]
colomn6 = ["", (518.4 - V1_1_ex1) / 518.4 * 100, (0.392 - I1_1_ex1) / 0.392 * 100, (347.8 - P1_1_ex1) / 347.8 * 100,
(53.53 - Q1_1_ex1) / 53.53 * 100, "", "", (517.7 - V1_1_ex2) / 517.7 * 100, (0.618 - I1_1_ex2) / 0.618 * 100, 
(532.3 - P1_1_ex2) / 532.3 * 100, (154.8 - Q1_1_ex2) / 154.8 * 100]
colomn7 = ["", (505.9 - V2_1_ex1) / 505.9 * 100, (0.449 - I2_1_ex1) / 0.449 * 100, (-346.2 - P2_1_ex1) / -346.2 / 100,
(-186.8 - Q2_1_ex1) / -186.8 * 100, "", "", (496.5 - V2_1_ex2) / 496.5 * 100, (0.681 - I2_1_ex2) / 0.681 * 100,
(-528.3 - P2_1_ex2) / -528.3 * 100, (-251.9 - Q2_1_ex2) / -251.9 * 100]
data = hcat(colomn1, colomn2, colomn3, colomn4, colomn5, colomn6, colomn7);
header = (["Режимы", "ПС А", "ПС Б", "ПС А", "ПС Б", "ПС А", "ПС Б"], 
["", "RTDS", "RTDS", "Engee", "Engee", "Ошибка, %", "Ошибка, %"])
pretty_table(
    data;
    header = header,
    alignment = :l,
    formatters = ft_printf("%5.2f")
)
┌────────────────────────────────────────────┬───────┬────────┬────────┬─────────┬───────────┬───────────┐
│ Режимы                                     │ ПС А  │ ПС Б   │ ПС А   │ ПС Б    │ ПС А      │ ПС Б      │
│ RTDS  │ RTDS   │ Engee  │ Engee   │ Ошибка, % │ Ошибка, % │
├────────────────────────────────────────────┼───────┼────────┼────────┼─────────┼───────────┼───────────┤
│ Обе цепи в работе                          │       │        │        │         │           │           │
│ Напряжение на шинах, кВ                    │ 518,4 │ 505,9  │ 518.56 │ 505.93  │ -0.03     │ -0.01     │
│ Ток по линии, А                            │ 392   │ 449    │ 387.39 │ 442.69  │  1.18     │  1.41     │
│ Активный переток мощности, МВт             │ 347,8 │ -346,2 │ 344.16 │ -340.72 │  1.05     │  0.00     │
│ Реактивный переток мощности, МВАр          │ 53,53 │ -186,8 │ 51.17  │ -185.47 │  4.41     │  0.71     │
│                                            │       │        │        │         │           │           │
│ Цепь 2 отключена с двух сторон и заземлена │       │        │        │         │           │           │
│ Напряжение на шинах, кВ                    │ 517,7 │ 496,5  │ 517.80 │ 496.60  │ -0.02     │ -0.02     │
│ Ток по линии, А                            │ 618   │ 681    │ 610.64 │ 671.38  │  1.19     │  1.41     │
│ Активный переток мощности, МВт             │ 532,3 │ -528,3 │ 526.57 │ -520.73 │  1.08     │  1.43     │
│ Реактивный переток мощности, МВАр          │ 154,8 │ -251,9 │ 150.51 │ -249.64 │  2.77     │  0.90     │
└────────────────────────────────────────────┴───────┴────────┴────────┴─────────┴───────────┴───────────┘

The calculation error is less than 5%.

Comparison of required short-circuit currents and calculated ones:

In [ ]:
model_name = "B2"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
switch = []
time_ar = [0, 1]
fault = reshape([0 0 0 1; 0 0 0 1; 1 0 0 0; 1 0 0 0; 0 1 1 0; 0 1 1 0], (6, 4, 1))
fault = cat(fault, fault, dims = 3)
blocks = ["ЗН_3", "ЗН_4", "Q1_ctrl", "Q2_ctrl","Q3_ctrl","Q4_ctrl","Q5_ctrl","Q6_ctrl"]
switch_states = [1 1 0 0 0 0 1 1; 0 0 0 0 1 1 1 1]
results = Matrix{Any}(undef, 12, 2)
for j = 1:2
    for i = 1:6
        engee.set_param!(model_name*"/"*blocks[i], "Value" => switch_states[j, i]);
    end
    for i = 1:6
        if i % 2 == 1
            switch = cat(reshape(fault[i,:,:], (1,4,2)), ones(5,4,2), dims = 1)
        else
            switch = cat(ones(1,4,2), reshape(fault[i,:,:], (1,4,2)), ones(4,4,2), dims = 1)
        end
        result = engee.run(model_name);
        if i <= 2
            results[i + (j - 1) * 6, 1] = result["I1_1"].value[end][1];
            results[i + (j - 1) * 6, 2] = result["I2_1"].value[end][1];
        else
            results[i + (j - 1) * 6, 1] = result["3I_0_1"].value[end];
            results[i + (j - 1) * 6, 2] = result["3I_0_2"].value[end];
        end       
    end
end

Displaying results:

In [ ]:
using PrettyTables
I_ref =[24.71 4.226 20.794 1.29 22.935 1.429 22.35 5.194 19.59 1.737 21.47 1.819;
2.206 11.07 1.181 11.16 1.303 12.36 3.316 7.145 1.734 9.324 1.9 9.761]
colomn1 = ["Обе цепи в работе", "K1", "K2", "K1", "K2","K1", "K2", 
"Цепь 2 отключена с двух сторон и заземлена", "K1", "K2","K1", "K2", "K1", "K2"]
colomn2 = ["", "K(3)", "K(3)", "K(1,1)", "K(1,1)", "K(1)", "K(1)", "","K(3)", "K(3)", "K(1,1)", "K(1,1)", "K(1)", "K(1)"]
colomn3 = ["", "I1", "I1", "3I0", "3I0", "3I0", "3I0", "", "I1", "I1", "3I0", "3I0", "3I0", "3I0"]
colomn4 = ["", "24,71", "4,226", "20,794", "1,29", "22,935", "1,429", "", "22,35", "5,194", "19,59", "1,737", "21,47", "1,819"]
colomn5 = ["", "2,206", "11,07", "1,181", "11,16", "1,303", "12,36", "", "3,316", "7,145", "1,734", "9,324", "1,9", "9,761"]
colomn6 = reshape(cat("", transpose(results[1:6,1]),"", transpose(results[7:12,1]), dims=2), (14))
colomn7 = reshape(cat("", transpose(results[1:6,2]),"", transpose(results[7:12,2]), dims=2), (14))
colomn8 = reshape(cat("", (results[1:6,1].-I_ref[1,1:6])./I_ref[1,1:6].*100,
"", (results[7:12,1].-I_ref[1,7:12])./I_ref[1,7:12].*100, dims=1), (14))
colomn9 = reshape(cat("", (results[1:6,2].-I_ref[2,1:6])./I_ref[2,1:6].*100,
"", (results[7:12,2].-I_ref[2,7:12])./I_ref[2,7:12].*100, dims=1), (14))
data = hcat(colomn1, colomn2, colomn3, colomn4, colomn5, colomn6, colomn7, colomn8, colomn9);
header = (["Режимы КЗ", "", "", "от ПС А", "от ПС Б", "от ПС А", "от ПС Б", "от ПС А", "от ПС Б"], 
["Место КЗ", "Вид КЗ", "", "RTDS", "RTDS", "Engee", "Engee", "Ошибка, %", "Ошибка, %"])
pretty_table(
    data;
    header = header,
    alignment = :l,
    formatters = ft_printf("%5.2f")
)
┌────────────────────────────────────────────┬────────┬─────┬─────────┬─────────┬─────────┬─────────┬───────────┬───────────┐
│ Режимы КЗ                                  │ от ПС А │ от ПС Б │ от ПС А │ от ПС Б │ от ПС А   │ от ПС Б   │
│ Место КЗ                                   │ Вид КЗ │ RTDS    │ RTDS    │ Engee   │ Engee   │ Ошибка, % │ Ошибка, % │
├────────────────────────────────────────────┼────────┼─────┼─────────┼─────────┼─────────┼─────────┼───────────┼───────────┤
│ Обе цепи в работе                          │        │     │         │         │         │         │           │           │
│ K1                                         │ K(3)   │ I1  │ 24,71   │ 2,206   │ 24.34   │  2.19   │ -1.51     │ -0.65     │
│ K2                                         │ K(3)   │ I1  │ 4,226   │ 11,07   │  4.21   │ 11.08   │ -0.36     │  0.05     │
│ K1                                         │ K(1,1) │ 3I0 │ 20,794  │ 1,181   │ 20.89   │  1.16   │  0.48     │ -1.64     │
│ K2                                         │ K(1,1) │ 3I0 │ 1,29    │ 11,16   │  1.27   │ 11.18   │ -1.61     │  0.14     │
│ K1                                         │ K(1)   │ 3I0 │ 22,935  │ 1,303   │ 23.03   │  1.28   │  0.40     │ -1.75     │
│ K2                                         │ K(1)   │ 3I0 │ 1,429   │ 12,36   │  1.41   │ 12.37   │ -1.65     │  0.12     │
│ Цепь 2 отключена с двух сторон и заземлена │        │     │         │         │         │         │           │           │
│ K1                                         │ K(3)   │ I1  │ 22,35   │ 3,316   │ 22.58   │  3.22   │  1.04     │ -2.82     │
│ K2                                         │ K(3)   │ I1  │ 5,194   │ 7,145   │  5.18   │  6.85   │ -0.34     │ -4.16     │
│ K1                                         │ K(1,1) │ 3I0 │ 19,59   │ 1,734   │ 19.69   │  1.72   │  0.50     │ -1.08     │
│ K2                                         │ K(1,1) │ 3I0 │ 1,737   │ 9,324   │  1.72   │  9.34   │ -1.18     │  0.20     │
│ K1                                         │ K(1)   │ 3I0 │ 21,47   │ 1,9     │ 21.56   │  1.88   │  0.40     │ -1.15     │
│ K2                                         │ K(1)   │ 3I0 │ 1,819   │ 9,761   │  1.80   │  9.77   │ -1.27     │  0.13     │
└────────────────────────────────────────────┴────────┴─────┴─────────┴─────────┴─────────┴─────────┴───────────┴───────────┘

The calculation error is less than 5%.

Experiments 1-10

The effect of transient resistance and load on the operation of the DZ.

Test conditions:

  • KZ location: point K4.
  • Type of short circuit: K(1,1)VS0, K(1)B0

Experiment parameters:

image_2.png

Experiment No. 1 is set in the model. To conduct other experiments, it is necessary to change the type of short circuit and the transient resistance in the short circuit block.

In [ ]:
model_name = "B2_1_10"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
results = Matrix{Any}(undef, 1, 4)
result = engee.run(model_name);
results[1, 1] = stack(collect(result["I1_1"].value[:])[!,:value])';
results[1, 2] = stack(collect(result["I2_1"].value[:])[!,:value])';
results[1, 3] = stack(collect(result["V1_1"].value[:])[!,:value])';
results[1, 4] = stack(collect(result["V2_1"].value[:])[!,:value])';   
sim_time = collect(result["I1_1"].time[:])[!,:time];

Displaying results:

In [ ]:
# сторона измерения, 1 - ПС А, 2 -ПС Б
dir = 1;
gr()
p1 = plot(sim_time, results[1, dir], xlabel = "t, с", ylabel = "I, кА", label = ["a" "b" "c"])
p2 = plot(sim_time, results[1, dir + 2], xlabel = "t, с", ylabel = "U, кВ", label = ["a" "b" "c"])
plot(p1, p2, layout=(2,1))
Out[0]:

Experiments 11-14

Checking the operation of the remote control with close short circuits.

Test conditions:

  • Type of short circuit: K(3)ABC
  • Transient resistance at the short circuit location: 0 Ohms.

Experiment parameters:

image_2.png

The model defines experience No. 11. For other experiments, it is necessary to move the short circuit unit to the required point.

In [ ]:
model_name = "B2_11_14"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
results = Matrix{Any}(undef, 1, 4)
result = engee.run(model_name);
results[1, 1] = stack(collect(result["I1_1"].value[:])[!,:value])';
results[1, 2] = stack(collect(result["I2_1"].value[:])[!,:value])';
results[1, 3] = stack(collect(result["V1_1"].value[:])[!,:value])';
results[1, 4] = stack(collect(result["V2_1"].value[:])[!,:value])';  
sim_time = result["I1_1"].time;

Displaying results:

In [ ]:
# сторона измерения, 1 - ПС А, 2 -ПС Б
dir = 1;
gr()
p1 = plot(sim_time, results[1, dir], xlabel = "t, с", ylabel = "I, кА", label = ["a" "b" "c"])
p2 = plot(sim_time, results[1, dir + 2], xlabel = "t, с", ylabel = "U, кВ", label = ["a" "b" "c"])
plot(p1, p2, layout=(2,1))
Out[0]:

Experience 15-16

Checking the operation of the fuel pump with external short circuits on the tires

Test conditions:

  • KZ location: point K3, point K4.
  • Type of short circuit: K(1)A0.
  • Transient resistance at the short circuit location: 0 Ohms.
  • The parallel line is disconnected from both sides and grounded.
  • Normal load mode, preceding short circuit.
image_2.png

The model has experience number 15. To carry out experiment No. 16, it is necessary to move the short circuit block to the required point.

In [ ]:
model_name = "B2_15_16"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
results = Matrix{Any}(undef, 1, 4)
result = engee.run(model_name);
results[1, 1] = stack(collect(result["I1_1"].value[:])[!,:value])';
results[1, 2] = stack(collect(result["I2_1"].value[:])[!,:value])';
results[1, 3] = stack(collect(result["V1_1"].value[:])[!,:value])';
results[1, 4] = stack(collect(result["V2_1"].value[:])[!,:value])';      
sim_time = result["I1_1"].time;

Displaying results:

In [ ]:
# сторона измерения, 1 - ПС А, 2 -ПС Б
dir = 1;
gr()
p1 = plot(sim_time, results[1, dir], xlabel = "t, с", ylabel = "I, кА", label = ["a" "b" "c"])
p2 = plot(sim_time, results[1, dir + 2], xlabel = "t, с", ylabel = "U, кВ", label = ["a" "b" "c"])
plot(p1, p2, layout=(2,1))
Out[0]:

Experience 17-20

Checking the operation of the DZ and TNNP with an internal short circuit with a successful OAPV.

The sequence of modes:

  • 0-0.5 s Normal load mode, preceding a short circuit
  • 0.4 s Occurrence of a short circuit in the middle of the overhead
    line - 0.5 s Disconnection of phase A of the line from both sides, Shockless pause (1.5 s)
  • 1 s Short circuit disappearance
  • 1.5 s Activation of phase A (OAPV) from the side of PS A
  • 1.7 s Activation of phase A lines from the side of PS B.
image_2.png

The model defines experience No. 17. For other experiments, it is necessary to change the short-circuit resistance in the short-circuit block and/or move it to the desired point.

In [ ]:
model_name = "B2_17_20"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
results = Matrix{Any}(undef, 1, 4)
result = engee.run(model_name);
results[1, 1] = stack(collect(result["I1_1"].value[:])[!,:value])';
results[1, 2] = stack(collect(result["I2_1"].value[:])[!,:value])'; 
results[1, 3] = stack(collect(result["V1_1"].value[:])[!,:value])';
results[1, 4] = stack(collect(result["V2_1"].value[:])[!,:value])'; 
sim_time = collect(result["I1_1"].time[:])[!,:time];

Displaying results:

In [ ]:
# сторона измерения, 1 - ПС А, 2 -ПС Б
dir = 1;
gr()
p1 = plot(sim_time, results[1, dir], xlabel = "t, с", ylabel = "I, кА", label = ["a" "b" "c"])
p2 = plot(sim_time, results[1, dir+2], xlabel = "t, с", ylabel = "U, кВ", label = ["a" "b" "c"])
plot(p1, p2, layout=(2,1))
Out[0]:

Experiments 21-24

Checking the operation of the DZ and TNNP with an internal short circuit with an unsuccessful OAPV.

The sequence of modes:

  • 0-0.4 s Normal load mode, preceding short circuit.
  • 0.4 s Short circuit occurrence on the line
  • 0.5 s Switching off phase A of the line with a short circuit on both sides, a shockless pause (1.5 s)
  • 2 s Switching on phase A of the line from the side of the substation
  • 2.1 s Disconnection of the line from the protection of PS A.
image_2.png

The model defines experience No. 21. For other experiments, it is necessary to change the short-circuit resistance in the short-circuit block and/or move it to the desired point.

In [ ]:
model_name = "B2_21_24"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
results = Matrix{Any}(undef, 1, 4)
result = engee.run(model_name);
results[1, 1] = stack(collect(result["I1_1"].value[:])[!,:value])';
results[1, 2] = stack(collect(result["I2_1"].value[:])[!,:value])';
results[1, 3] = stack(collect(result["V1_1"].value[:])[!,:value])';
results[1, 4] = stack(collect(result["V2_1"].value[:])[!,:value])'; 
sim_time = collect(result["I1_1"].time[:])[!,:time];

Displaying results:

In [ ]:
# сторона измерения, 1 - ПС А, 2 -ПС Б
dir = 1
gr()
p1 = plot(sim_time, results[1, dir], xlabel = "t, с", ylabel = "I, кА", label = ["a" "b" "c"])
p2 = plot(sim_time, results[1, dir+2], xlabel = "t, с", ylabel = "U, кВ", label = ["a" "b" "c"])
plot(p1, p2, layout=(2,1))
Out[0]:

Experiments 25-30

Stable intermittent short circuit in the OAPV cycle.

The sequence of modes:

  • 0-0.4 s Normal load mode.
  • 0.4 s Short circuit occurrence.
  • 0.5 s Disconnection of phase A of the line.
  • 1 s The disappearance of the short circuit To (1)A0. Shockless pause (1.5 s).
  • 2 with the inclusion of phase A of the line from the side of PS A and the occurrence of a short circuit of the phases of the sun.
  • 2.1 with short circuit protection shutdown
image_2.png

The model has experience number 25. To carry out other experiments, it is necessary to change the resistance of the switches in the K1 subsystem. To change the short-circuit point, move the short-circuit block to the middle of the line.

In [ ]:
model_name = "B2_25_30"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
results = Matrix{Any}(undef, 1, 4)
result = engee.run(model_name);
results[1, 1] = stack(collect(result["I1_1"].value[:])[!,:value])';
results[1, 2] = stack(collect(result["I2_1"].value[:])[!,:value])';
results[1, 3] = stack(collect(result["V1_1"].value[:])[!,:value])';
results[1, 4] = stack(collect(result["V2_1"].value[:])[!,:value])';
sim_time =  collect(result["I1_1"].time[:])[!,:time];

Displaying results:

In [ ]:
# сторона измерения, 1 - ПС А, 2 -ПС Б
dir = 2
gr()
p1 = plot(sim_time, results[1, dir], xlabel = "t, с", ylabel = "I, кА", label = ["a" "b" "c"])
p2 = plot(sim_time, results[1, dir+2], xlabel = "t, с", ylabel = "U, кВ", label = ["a" "b" "c"])
plot(p1, p2, layout=(2,1))
Out[0]:

Experience 31

Checking the operation of the DZ and TNNP with external short circuits with unsuccessful TAPV with TT saturation.

Test conditions:

  • KZ location: point K4
  • Type of short circuit: K(1)A0
  • Transient resistance at the short circuit location: 0

The sequence of modes:

  • 0-0.4 s Normal load mode.
  • 0.4 s Short circuit occurrence.
  • 0.5 s Disconnection of the damaged line.
  • 1.5 s APV from the side of PS B (1 s).
  • 1.6 s Disconnection of the damaged line.
image.png
In [ ]:
model_name = "B2_31"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
results = Matrix{Any}(undef, 1, 4)
result = engee.run(model_name);
results[1, 1] = stack(collect(result["I1_1"].value[:])[!,:value])';
results[1, 2] = stack(collect(result["I2_1"].value[:])[!,:value])'; 
results[1, 3] = stack(collect(result["V1_1"].value[:])[!,:value])';
results[1, 4] = stack(collect(result["V2_1"].value[:])[!,:value])';    
sim_time =  collect(result["I1_1"].time[:])[!,:time];

Displaying results:

In [ ]:
# сторона измерения, 1 - ПС А, 2 -ПС Б
dir = 1
gr()
p1 = plot(sim_time, results[1, dir], xlabel = "t, с", ylabel = "I, кА", label = ["a" "b" "c"])
p2 = plot(sim_time, results[1, dir+2], xlabel = "t, с", ylabel = "U, кВ", label = ["a" "b" "c"])
plot(p1, p2, layout=(2,1))
Out[0]:

Experiments 32-35

Swing with the swing center on the A-B line.

Test conditions:

  • Swing center: on the A-B line.
  • Swing frequency: 1 Hz and increase to failure of the swing lock.
image_2.png

The model has experience number 32. For other experiments, it is necessary to change the amplitude and frequency parameters of the "Sine function" block from the "Frequency" subsystem. For experiment No. 32, the EMF swing angle at PS B is set to ± 180° from the set mode. From 0 to 0.5 seconds, the system operates in steady state, from 0.5 seconds the frequency begins to change. The amplitude should be increased in proportion to the swing frequency.

In [ ]:
model_name = "B2_32_35"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
results = Matrix{Any}(undef, 1, 4)
result = engee.run(model_name);
results[1, 1] = stack(collect(result["I1_1"].value[:])[!,:value])';
results[1, 2] = stack(collect(result["I2_1"].value[:])[!,:value])';
results[1, 3] = stack(collect(result["Zab_1"].value[:])[!,:value]);
results[1, 4] = stack(collect(result["Zab_2"].value[:])[!,:value]);
sim_time =  collect(result["I1_1"].time[:])[!,:time];

Displaying results:

In [ ]:
# сторона измерения, 1 - ПС А, 2 -ПС Б
dir = 1
gr()
p1 = plot(sim_time, results[1, dir], xlabel = "t, с", ylabel = "I, кА", label = ["a" "b" "c"])
p2 = plot(sim_time, results[1, dir+2], xlabel = "t, с", ylabel = "Zab, Ом", ylims = (0, 2000))
plot(p1, p2, layout=(2,1))
Out[0]:

Experiments 36-43

Swing with the swing center on the A-B line and short circuit in the protection area.

Test conditions:

  • Swing center: on line A-B, 60% of the line length from point A.
  • Swing frequency: 2 Hz
  • KZ location: 60% of the line from PS A.
  • Type of short circuit: K(3)ABC, K(2)BC, K(1,1)BC0, K(1)A0
  • The resistance at the short-circuit point is 0 and 10 ohms.
image_2.png

The model defines experience No. 36. For other experiments, it is necessary to change the type of short circuit and the transient resistance in the short circuit block. For experiment No. 36, the EMF swing angle at PS B is set to ± 180° from the set mode. From 0 to 0.5 seconds, the system operates in steady state, from 0.5 seconds the frequency begins to change, at 1.125 seconds a short circuit occurs at point K7.

In [ ]:
model_name = "B2_36_43"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
results = Matrix{Any}(undef, 1, 4)
result = engee.run(model_name);
results[1, 1] = stack(collect(result["I1_1"].value[:])[!,:value])';
results[1, 2] = stack(collect(result["I2_1"].value[:])[!,:value])';
results[1, 3] = stack(collect(result["Zab_1"].value[:])[!,:value]);
results[1, 4] = stack(collect(result["Zab_2"].value[:])[!,:value]);
sim_time =  collect(result["I1_1"].time[:])[!,:time];

Displaying results:

In [ ]:
# сторона измерения, 1 - ПС А, 2 -ПС Б
dir = 1
gr()
p1 = plot(sim_time, results[1, dir], xlabel = "t, с", ylabel = "I, кА", label = ["a" "b" "c"])
p2 = plot(sim_time, results[1, dir+2], xlabel = "t, с", ylabel = "Zab, Ом", ylims = (0, 2000))
plot(p1, p2, layout=(2,1))
Out[0]:

Experience 44

An external short circuit on a parallel line that turns into an internal one.

Test conditions:

  • Type of short circuit: External to (3)ABC, turning into internal.
  • KZ location: point K5 with transition to point K1.
  • Line load: normal mode (Table 2).
  • Angle of occurrence of short circuit: 0°.
  • The transient resistance at the short-circuit point is 0 ohms.

The sequence of modes:

  • Short circuit of phases ABC on a parallel line from the side of PS A.
  • After 60 ms, the short circuit switches to the protected line at point K1.

The sequence of events:

  • 0.5 s 3f short circuit at point K5 (the voltage angle of phase A is zero).
  • 0.56 s 3f short circuit occurs at point K1 (short circuit at point K5 does not disappear).
  • 0.6 s short circuit shutdown at point K5.
  • 0.66 s short circuit shutdown at point K1.
image.png
In [ ]:
model_name = "B2_44"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
results = Matrix{Any}(undef, 1, 4)
result = engee.run(model_name);
results[1, 1] = stack(collect(result["I1_1"].value[:])[!,:value])';
results[1, 2] = stack(collect(result["I2_1"].value[:])[!,:value])';
results[1, 3] = stack(collect(result["V1_1"].value[:])[!,:value])';
results[1, 4] = stack(collect(result["V2_1"].value[:])[!,:value])';
sim_time = collect(result["I1_1"].time[:])[!,:time];

Displaying results:

In [ ]:
# сторона измерения, 1 - ПС А, 2 -ПС Б
dir = 1
gr()
p1 = plot(sim_time, results[1, dir], xlabel = "t, с", ylabel = "I, кА", label = ["a" "b" "c"])
p2 = plot(sim_time, results[1, dir+2], xlabel = "t, с", ylabel = "U, кВ", label = ["a" "b" "c"])
plot(p1, p2, layout=(2,1))
Out[0]:

Experiments 45-46

The effect of the mutual induction of the parallel line on the operation of the DZ.

Test conditions:

  • Normal mode.
  • KZ location: point K2.
  • Resistance at the short circuit location: 0 Ohms.
  • Short circuit type: K(1)A0
  • a) The parallel line is disconnected and grounded.
  • b) Parallel line in operation.
image.png

The model defines experience No. 45. To carry out experiment No. 46, it is necessary to turn on switches Q3 and Q4, disconnect the grounding knives.

In [ ]:
model_name = "B2_45_46"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
results = Matrix{Any}(undef, 1, 4);
result = engee.run(model_name);
results[1, 1] = stack(collect(result["I1_1"].value[:])[!,:value])';
results[1, 2] = stack(collect(result["I2_1"].value[:])[!,:value])';
results[1, 3] = stack(collect(result["Zab_1"].value[:])[!,:value]);
results[1, 4] = stack(collect(result["Zab_2"].value[:])[!,:value]);
sim_time = collect(result["I1_1"].time[:])[!,:time];

Displaying results:

In [ ]:
# сторона измерения, 1 - ПС А, 2 -ПС Б
dir = 1
gr()
p1 = plot(sim_time, results[1, dir], xlabel = "t, с", ylabel = "I, кА", label = ["a" "b" "c"])
p2 = plot(sim_time, results[1, dir+2], xlabel = "t, с", ylabel = "Zab, Ом", ylims = (0, 500))
plot(p1, p2, layout=(2,1))