Документация Engee
Notebook

Тестирование устройств релейной защиты ЛЭП в переходных режимах, сопровождающихся насыщением тока. ГОСТ 70358-2022 модель А4.2

Введение

В данном примере представлена модель энергосистемы класса напряжения 500 кВ, предназначенная для тестирования устройств релейной защиты на соответствие требованиям ГОСТ 70358-2022 «Требования к работе устройств релейной защиты линий электропередачи классом напряжения 110 кВ и выше в переходных режимах, сопровождающихся насыщением трансформаторов тока». Модель разработана в соответствии с приложением А4.2 указанного стандарта.

В составе примера также включён скрипт, который программно редактирует модель в соответствии с программой испытаний устройств релейной защиты. Программа испытаний приведена в пункте А4.3 ГОСТа. В примере демонстрируются по одному опыту для всех испытаний базовой кратности и апериодической составляющей.

Тестирование устройств релейной защиты проводится на устройствах моделирования в реальном времени. Но для ознакомления с примером вы можете запускать модель как в Engee, так и на КПМ РИТМ с подключением и настройкой тестируемого устройства.

Описание модели

Параметры и схема модели взяты из приложения А пункт 4.2 стандарта.

Снимок экрана 2026-01-19 162936.png Снимок экрана 2026-01-19 163056.png

Откроем модель энергосистемы:

In [ ]:
model_name = "gost_70358_model_A4.engee"
engee.open(model_name); # Открываем модель
model = engee.load(model_name); # Загрузим модель для быстрого доступа
path = engee.gcm().name; # Наименование модели

Инициализация параметров модели

Стандарт требует проводить тестирование на базовых параметрах и с изменением:

  • Постоянной времени затухания апериодической составляющей источников (.)
  • Кратности составляющей тока КЗ от источников ()

Для начала инициализируем базовые параметры модели.

In [ ]:
# Период дискретизации
SampleTime = 50e-6;
# Базовая ВАХ
V_base = [0 25 50 75 80 85 90 95 99 100 108];
I_base = [0 0.00215 0.0043 0.00675 0.0075 0.00868 0.011 0.02 0.044 0.05 10];
# Параметры трансформатора тока (ТТ)
I1 = 1000
I2 = 1
R2 = 5
# Относительное растояние до точки КЗ
k_line = 0.0001

# Базовые активные сопротивления системы
R1s1_base = 0.229;
R0s1_base = 0.574;
R1s2_base = 0.18;
R0s2_base = 0.403;
# Базовые индуктивные сопротивления системы
X1s1_base = 28.87;
X0s1_base = 72.16;
X1s2_base = 22.7;
X0s2_base = 50.59;

# Путь  для сохранения результатов в форматн COMTRADE
results_path = "COMTRADE/Испытание 1.1/Насыщение фазы A";
# Создаём каталог
mkpath(results_path);
results_path = results_path * "/AG";

Код ниже позволяет варьировать параметры энергосистем в соответствии с указаниями стандарта. Сейчас код задаёт параметры в соответствии с базовой моделью: кратность и .

In [ ]:
# --- Варьирование и передача в модель параметров системы ---
kl = 1; # кратность
# Варирование кратности тока от С1
R1s1 = R1s1_base * kl;
X1s1 = X1s1_base * kl;
R0s1 = R0s1_base * kl;
X0s1 = X0s1_base * kl;
# Варирование кратности тока от С2
R1s2 = R1s2_base * kl;
X1s2 = X1s2_base * kl;
R0s2 = R0s2_base * kl;
X0s2 = X0s2_base * kl;
In [ ]:
# --- Варирование апереодической составляющей относительно базовой модели ---
Tp = 400e-3;
kTp = 400e-3 / Tp;
w = 2 * pi * 50;

R1s1 = X1s1_base / (w * Tp);
R0s1 = X0s1_base / (w * Tp);
R1s2 = X1s2_base / (w * Tp);
R0s2 = X0s2_base / (w * Tp);

После выполнения ячеек выше модель готова к запуску.

Создание сценариев

Для удобства формирования сценариев в соответствии с программой испытаний реализован набор вспомогательных методов, собранных в файле ScenarioModule.jl. В этом же файле определены конструкторы специализированных структур, предназначенных для хранения параметров модели.

Ниже пример создания экземпляров этих структур:

In [ ]:
# Подгрузим модуль
include("ScenarioModule.jl")
# Создаём экземпляры структур
# Saturation_Characteristic хранит параметры для пересчёта ВАХ к каждому опыту
satur = ScenarioModule.Saturation_Characteristic(V_base, I_base, I1, I2, R2, 0.025);
# Scenario хранит информацию о текущем сценарии.
# При инициализации требует на вход экземпляр Saturation_Characteristic
scenario = ScenarioModule.Scenario(engee.gcs().path, "RITM 1", satur);

Так как короткое замыкание возникает в одном и том же временном промежутке (в зависимости от момента перехода напряжения через ноль), использование данных методов позволяет автоматически задавать остаточную намагниченность по фазам, в которых насыщение трансформатора тока не моделируется.

Так, при коротком замыкании в фазе A в двух остальных фазах задаётся остаточная намагниченность, равная , со знаком, противоположенным апериодической составляющей.

Внутри модуля содержится документация ко всем методам. Чтобы ознакомиться с описанием любого метода, вызовите справку непосредственно из кода:

In [ ]:
? ScenarioModule.set_fault_type!
Out[0]:

? ScenarioModule.set_fault_type!

Методы из ScenarioModule.jl будут использоваться в ходе создания сценариев испытаний.

Для передачи параметров сценария и пересчитанной вольт-амперной характеристики (ВАХ) в модель предусмотрен метод save_mode!(). Метод принимает на вход отредактированную структуру Scenario и сохраняет соответствующие параметры в модель.

In [ ]:
function save_mode!(s::ScenarioModule.Scenario)
    # Передача параметров точек КЗ
    engee.set_param!(s.path * "/K1", "type" => s.K1)
    engee.set_param!(s.path * "/K2_4", "type" => s.K2_4)
    engee.set_param!(s.path * "/K_delayed", "type" => s.K_delayed)
    # Передаётся задрежка КЗ
    if s.delay == 0
        engee.set_param!(s.path * "/K1_delay", "time_delay_off" => 2)
    else
        engee.set_param!(s.path * "/K1_delay", "time_delay_off" => s.delay)
    end
    engee.set_param!(s.path * "/K2_4_delay", "time_delay_on" => s.delay)
    # Передаётся скоректированной ВАХ
    engee.set_param!(s.path * "/CT", "V" => s.Vabc, 
                    "I" => s.Iabc, "V_strt" => s.V_strt)
    # Передаётся фаза контроля перехода напряжения через 0
    engee.set_param!(s.path * "/U_control/ctrl_phase", "Value" => s.controlled_phase)
    # Передаётся фаза в блок определения времени насыщения
    engee.set_param!(s.path * "/Определение времени насыщения", "phase" => s.controlled_phase)
end;

Запуск модели на КПМ РИТМ или в среде Engee

Модель подготовлена для запуска на КПМ РИТМ. Если вы запускаете модель на КПМ РИТМ, то предварительно необходимо установить пакеты для программного управления моделированием. Дальше в ходе испытаний запускайте модель не в Engee, а на подключенной машине РИТМ. Подробнее: начало работы и пример использования программного управления для работы с КПМ «РИТМ».

Для подключения РИТМ раскомментируйте блоки РИТМа в модели и выполните код ниже:

In [ ]:
# # Если требуется установите поддержку блоков РИТМ и пакет поддержки внешнего оборудования:
# engee.package.install("RITM-Engee-Blocks");
# engee.package.install("Engee-Device-Manager");
# engee.package.start("Engee-Device-Manager")
In [ ]:
# using Main.EngeeDeviceManager.Targets
# using Main.EngeeDeviceManager.Targets.RITM
# using Main.EngeeDeviceManager.Targets.RITM_API
# ritm = Targets.RITM.Ritm();
# ritm.set_url("http://192.168.56.3:8000/")

Для запуска моделирования на РИТМе смените среду среду расчёта c Engee на Target Hardware и запустите расчёт. Результаты моделирования отобразятся в Инспекторе данных и вкладке Визуализация сигналов.

Ошибки отображения графиков

Если у вас появляются ошибки при отображение результатов моделирования, уменьшите количество логируемых сигналов и проводите логирование через блок Rate Transition на большем шаге расчёта. Точные результаты вы всегда можете получить, выгрузив результаты в формате COMTRADE.

Также вы можете запустить моделирование, используя программное управление, например для последовательного запуска всех испытаний. Для этого воспользуйтесь командой ниже. Аргумент is_external_mode = true позволит выполнить расчёт в режиме интерактивного выполнения. Подробнее про режимы выполнения.

In [ ]:
# Targets.build_deploy_start(ritm, engee.gcm(), is_external_mode=true)

Если у вас не подключен РИТМ, то вы можете протестировать модель, используя среду Engee.

Проведение испытаний

Испытание 1

В испытание 1 местом КЗ является точка - К2. Установим соответствующие расстояние до КЗ в параметр k_line:

In [ ]:
k_line =  0.0001;
Испытание 1.1

Испытание направлено на проверку срабатывания защиты при всех типах коротких замыканий. Повреждения моделируются без переходного сопротивления. В ходе испытания последовательно перебираются все точки КЗ, а также все фазы, для которых предусмотрено моделирование насыщения трансформатора тока.

Для пересчёта вольт-амперной характеристики трансформатора тока при вызове метода set_controlled_phase!() необходимо передать величину постоянной апериодической составляющей и величину периодической составляющей тока КЗ . Для стандартной модели эти значения были вычислены заранее. Нагрузка на трансформатор тока составляет 5 Ом. Остаточная намагниченность для целевой фазы принимается равной нулю.

In [ ]:
# Сохраняем результаты моделирования в соответсвующем каталоге
results_path = "COMTRADE/Испытание 1.1/Насыщение фазы A"
# Создаём каталог
mkpath(results_path)
# Переменная, содержащая путь до каталога, передаётся в блок To COMTRADE
results_path = results_path * "/AG"

# Задаём тип КЗ в точку K2
ScenarioModule.set_fault_type!(scenario, "K2_4", "AG");
# Задаём контролируемую фазу (фаза с насыщением)
ScenarioModule.set_controlled_phase!(scenario, 6675, 0.4, phase='A', Rn=5, Kr=0.0);
# В этом испытание задержки отсувствуют (можно не задавать)
ScenarioModule.set_delay!(scenario, 0);
# Сохраняем полученный сценарий
save_mode!(scenario)

Примечание

При симуляции на КПМ РИТМ необходимо передавать полный путь файла, например,

results_path = joinpath("/home/ritm/build", engee.gcm().name, "build/AG")

После создания и передачи в модель сценария можем запустить моделирование.

In [ ]:
results = engee.run(model);

Примечание

В последующих испытаниях, приведённых в данном примере, расчёт модели может запускаться как с использованием программного управления, так и вручную.

Полученные результаты можно рассмотреть в самой модели через Визуализацию или Инспектор данных. Результаты моделирования также записаны в формате COMTRADE и сохранены в каталоге, который соответствует параметрам испытания.

In [ ]:
gr()
plot(
    results["I_TT"].time,
    reduce(hcat, results["I_TT"].value)',
    label = ["Фаза А" "Фаза В" "Фаза С"],
    xlabel = "t, c",
    ylabel = "I, А",
    title = "Испытание 1.1; Насыщение фазы A; Тип КЗ: AG",
    color = ["goldenrod" "green" "red"],
    size  = (1100, 400),
    xlimits = (0.95, 1.2),
    legend = :bottomright
)
Out[0]:
No description has been provided for this image
Испытание 1.2

Развивающиеся КЗ. Второе КЗ появляется с задержкой в 10 мс в точке K_delayed.

Так как второе КЗ появляется через пол периода после первого, значения остаточного намагничивания для фаз второй точки повреждения требуют зеркалирования (так как остаточная намагниченность должна быть противоположенного знака апериодической составляющей).

In [ ]:
# Сохраняем результаты моделирования в соответсвующем каталоге
results_path = "COMTRADE/Испытание 1.2/Насыщение фазы B"
mkpath(results_path)
results_path = results_path * "/BG + CAG"

ScenarioModule.set_delay!(scenario, 10);
# КЗ в двух точках
ScenarioModule.set_fault_type!(scenario, "K2_4", "BG", "K_delayed", "CAG");
ScenarioModule.set_controlled_phase!(scenario, 6675, 0.157, phase='B');
# Зеркалируем неповреждённые фазы
scenario.V_strt = [-scenario.V_strt[1], scenario.V_strt[2], -scenario.V_strt[3]];
# Сохраняем сценарий
save_mode!(scenario)
In [ ]:
engee.run(model); # Запуск симуляции
Испытание 1.3

Несимметричные КЗ. Оба КЗ возникают одновременно.

Проведём опыт с замыканием через переходное сопротивление. Для этого дополнительно передадим величину переходного сопротивления (в соответствии со стандартом - 2 Ом) во вторую точку КЗ.

In [ ]:
# Сохраняем результаты моделирования в соответсвующем каталоге
results_path = "COMTRADE/Испытание 1.3/Насыщение фазы C"
mkpath(results_path)
results_path = results_path * "/CG + ABG"

# Сбрасываем задержки
ScenarioModule.set_delay!(scenario, 0);
# КЗ в двух точках
ScenarioModule.set_fault_type!(scenario, "K2_4", "CG", "K_delayed", "ABG");
ScenarioModule.set_controlled_phase!(scenario, 9875, 0.292, phase='C');
# Сохраняем сценарий
save_mode!(scenario)
engee.set_param!(scenario.path * "/K_delayed", 
                "R_pn" => Dict("unit" => "Ohm", "value" => 2),
                "R_ng" => Dict("unit" => "Ohm", "value" => 2))
In [ ]:
engee.run(model); # Запуск симуляции

После проведения испытания вернём исходные значения переходных сопротивлений:

In [ ]:
engee.set_param!(scenario.path * "/K_delayed", 
                "R_pn" => Dict("unit" => "Ohm", "value" => 1e-3),
                "R_ng" => Dict("unit" => "Ohm", "value" => 1e-3))

Испытание 2

В испытание 2 местом КЗ является точка - К3.2. Опыты аналогичны испытанию 1.1. Ожидается срабатывание ДЗ и корректное определение фаз.

In [ ]:
# Точка К3.2
k_line = 0.85 * 0.9;

# Сохраняем результаты моделирования в соответсвующем каталоге
results_path = "COMTRADE/Испытание 2/Насыщение фазы A"
mkpath(results_path)
results_path = results_path * "/CAG"

# Задаём тип КЗ в точку K2_4
ScenarioModule.set_fault_type!(scenario, "K2_4", "CAG");
# Задаём контролируемую фазу (фаза с насыщением)
ScenarioModule.set_controlled_phase!(scenario, 7559, 0.147, phase='A');
# Сохраняем полученный сценарий
save_mode!(scenario)
In [ ]:
engee.run(model); # Запуск симуляции

Испытания 3

В испытание 3 выполняется проверка cрабатывания ТНЗНП. Набор опытов аналогичен испытанию 2. Точка КЗ - К3.1, расположение которой определяется по результатам настройки ТНЗНП.

Испытания 4

В испытание 4 местом КЗ является точка КЗ - К4. Ожидается отсутствие срабатывания первой ступени ДЗ, срабатывание ТУ ДЗ.

Испытание 4.1

Опыты аналогичны испытанию 1.1.

In [ ]:
# Точка К4
k_line = 0.85 * 1.1;

# Сохраняем результаты моделирования в соответсвующем каталоге
results_path = "COMTRADE/Испытание 4.1/Насыщение фазы C"
mkpath(results_path)
results_path = results_path * "/CA"

# Задаём тип КЗ в точку K2_4
ScenarioModule.set_fault_type!(scenario, "K2_4", "CA");
# Задаём контролируемую фазу (фаза с насыщением)
ScenarioModule.set_controlled_phase!(scenario, 6921, 0.136, phase='C');
# Сохраняем полученный сценарий
save_mode!(scenario)
In [ ]:
engee.run(model); # Запуск симуляции
Испытание 4.2

ДКЗ + ОКЗ, насыщение в одной из фаз ДКЗ.

In [ ]:
# Сохраняем результаты моделирования в соответсвующем каталоге
results_path = "COMTRADE/Испытание 4.2/Насыщение фазы B"
mkpath(results_path)
results_path = results_path * "/BC + AG"

# Задаём тип КЗ в точку K2_4
ScenarioModule.set_fault_type!(scenario, "K2_4", "BC", "K_delayed", "AG");
# Задаём контролируемую фазу (фаза с насыщением)
ScenarioModule.set_controlled_phase!(scenario, 6921, 0.136, phase='B');
# Сохраняем полученный сценарий
save_mode!(scenario)
In [ ]:
engee.run(model); # Запуск симуляции

Испытания 5

В испытание 5 местом КЗ является точка - К1. Ожидается отсутствие срабатывания защит и срабатывание логики реверса ТУ ДЗ и ТУ ТНЗНП.

Испытание проводится в отдельной модели, в которой присутствуют два блока КЗ в точке К1.

КЗ отключается выключателем Q1 через 100 мс. В блок константы Q1 Switch задано значение 1.0 для перевода переключателя Switcher на внутренний сигнал отключения.

Откроем модель:

In [ ]:
engee.open("test_5.engee"); # Открываем модель
scenario.path = engee.gcs().path; # В сценарии обновляем имя модели
Испытания 5.1

Опыты аналогичны испытанию 1.1. Через 100 мс после момента КЗ срабатывает Q1.

In [ ]:
# Сохраняем результаты моделирования в соответсвующем каталоге
results_path = "COMTRADE/Испытание 5.1/Насыщение фазы A"
mkpath(results_path)
results_path = results_path * "/ABC"

# Задаём тип КЗ в точку K1
ScenarioModule.set_fault_type!(scenario, "K1", "ABC");
# Задаём контролируемую фазу (фаза с насыщением)
ScenarioModule.set_controlled_phase!(scenario, 10000, 0.118, phase='A');
# КЗ за спиной (реверс мощности), поэтому значения остаточной 
# намагниченности необходимо зеркалировать.
# Фаза в которой моделируется насыщение остаётся прежней 
scenario.V_strt = [scenario.V_strt[1], -scenario.V_strt[2], -scenario.V_strt[3]];
# Сохраняем полученный сценарий
save_mode!(scenario)
In [ ]:
engee.run("test_5"); # Запуск симуляции
Испытания 5.2

Несимметричные КЗ в одно время. Через 100 мс после момента КЗ срабатывает Q1.

ОКЗ + ДКЗ на землю через переходное сопротивление с насыщением в фазе ОКЗ.

ДКЗ + ОКЗ c тем же повреждением, что и в одной из фаз ДКЗ с насыщением этой фазы.

In [ ]:
# Сохраняем результаты моделирования в соответсвующем каталоге
results_path = "COMTRADE/Испытание 5.2/Насыщение фазы A"
mkpath(results_path)
results_path = results_path * "/AB + AG"

# КЗ в двух точках
ScenarioModule.set_fault_type!(scenario, "K1", "AB", "K1_add", "AG");
ScenarioModule.set_controlled_phase!(scenario, 9113, 0.109, phase='A');
# КЗ за спиной (реверс мощности), поэтому значения остаточной 
# намагниченности необходимо зеркалировать.
# Фаза в которой моделируется насыщение остаётся прежней 
scenario.V_strt = [scenario.V_strt[1], -scenario.V_strt[2], -scenario.V_strt[3]];
# Сохраняем сценарий
save_mode!(scenario)
# КЗ в доп точке сохраянется отдельно
engee.set_param!(scenario.path * "/K1_add", "type" => scenario.K1_add)
In [ ]:
engee.run("test_5"); # Запуск симуляции

После проведения испытания переключаемся на основную модель.

In [ ]:
engee.open(model_name); # Переключаемся на основную модель
scenario.path = engee.gcs().path; # В сценарии обновляем имя модели

Испытания 6

В испытание 6 участвуют две точки КЗ - К1 и К2. Внешнее КЗ переходит во внутреннее. Ожидается срабатывание защит менее чем за 60 мс и правильное определение повреждённых фаз.

При переходе КЗ из К1 в К2, КЗ в К1 отключается. Для этого проводится переключение Switcher Start KZ на пропускание сигнала Start_KZ_add, который отключает КЗ через заданную выдержку времени.

In [ ]:
engee.set_param!(scenario.path * "/KZ Switch", "Value" => 0.0)
Испытание 6.1

Переход ОКЗ из внешнего во внутреннее.

In [ ]:
# Сохраняем результаты моделирования в соответсвующем каталоге
results_path = "COMTRADE/Испытание 6.1/Насыщение фазы B"
mkpath(results_path)
results_path = results_path * "/BG"

ScenarioModule.set_delay!(scenario, 100);
# КЗ в двух точках
ScenarioModule.set_fault_type!(scenario, "K1", "BG", "K_delayed", "BG");
ScenarioModule.set_controlled_phase!(scenario, 6675, 0.087, phase='B');
# Сохраняем сценарий
save_mode!(scenario)
In [ ]:
engee.run(model); # Запуск симуляции
Испытание 6.2

Переход ОКЗ из внешнего во внутреннее с КЗ на другой фазе.

Первое КЗ (внешнее) происходит в иной фазе, нежели фаза внутреннего КЗ. Насыщение моделируется для фазы внутреннего КЗ. Поэтому контроль перехода через ноль осуществляется для фазы внешнего КЗ, а остаточное намагниченность принимается как для внутреннего КЗ с поправкой на знак апериодической составляющей.

Для внутреннего КЗ в фазе C, знак остаточной намагниченности фазы B (внешнее КЗ) меняется на противоположенный.

Примечание

Для испытания 6.2 и последующих испытаний подсистема Определение времени насыщения не функционирует.

In [ ]:
# Сохраняем результаты моделирования в соответсвующем каталоге
results_path = "COMTRADE/Испытание 6.2/Насыщение фазы C"
mkpath(results_path)
results_path = results_path * "/BG + CG"

ScenarioModule.set_delay!(scenario, 35);
# КЗ в двух точках
ScenarioModule.set_fault_type!(scenario, "K1", "BG", "K_delayed", "CG");
ScenarioModule.set_controlled_phase!(scenario, 6675, 0.087, phase='C');
# Фаза контроля прехода U через ноль - повреждённая фаза внешнего КЗ
scenario.controlled_phase = 2;
scenario.V_strt = [scenario.V_strt[1], -scenario.V_strt[2], scenario.V_strt[3]];
# Сохраняем сценарий
save_mode!(scenario)
In [ ]:
engee.run(model); # Запуск симуляции

Обратное редактирование параметров после испытания:

In [ ]:
engee.set_param!(scenario.path * "/KZ Switch", "Value" => 1.0)

Испытания 7

В испытание 7 участвуют две точки КЗ - К1 и К2. Внутреннее КЗ на фоне внешнего. Ожидается срабатывание защит менее чем за 60 мс и правильное определение повреждённых фаз.

КЗ в к К2 возникает через задержку после К1.

Первое КЗ (внешнее) происходит в иной фазе, нежели фаза внутреннего КЗ. Насыщение моделируется для фазы внутреннего КЗ. Поэтому контроль перехода через ноль осуществляется для фазы внешнего КЗ, а остаточное намагниченность принимается как для внутреннего КЗ с поправкой на знак апериодической составляющей.

In [ ]:
# Сохраняем результаты моделирования в соответсвующем каталоге
results_path = "COMTRADE/Испытание 7/Насыщение фазы B"
mkpath(results_path)
results_path = results_path * "/AG + BG"

ScenarioModule.set_delay!(scenario, 105);
# КЗ в двух точках
ScenarioModule.set_fault_type!(scenario, "K1", "AG", "K_delayed", "BG");
ScenarioModule.set_controlled_phase!(scenario, 6675, 0.087, phase='B');
# Фаза контроля прехода U через ноль — повреждённая фаза внешнего КЗ
scenario.controlled_phase = 1;
scenario.V_strt = [-scenario.V_strt[1], scenario.V_strt[2], -scenario.V_strt[3]];
# Сохраняем сценарий
save_mode!(scenario)
In [ ]:
engee.run(model); # Запуск симуляции

Испытания 8

В испытание 8 точка КЗ - К1. Внешнее КЗ с насыщением ТТ в неповреждённой фазе. Ожидается несрабатывание защит.

Для испытания нужно внести следующие изменения в модель:

  • Изменить положение Switcher на отключение через выдержку в 100 мс

  • Включить сопротивление в нулевом проводе ТТ

  • Задать угол фазы A ноль градусов в S1

In [ ]:
engee.set_param!(scenario.path * "/Q1 Switch", "Value" => 1.0)
engee.set_param!(scenario.path * "/CT", "use_R0" => true)
engee.set_param!(scenario.path * "/S1", "shift" => Dict("unit" => "deg", "value" => 0.0))
In [ ]:
# Сохраняем результаты моделирования в соответсвующем каталоге
results_path = "COMTRADE/Испытание 8/Насыщение фазы A"
mkpath(results_path)
results_path = results_path * "/BCG"

ScenarioModule.set_delay!(scenario, 0);
# Задаём тип КЗ в точку K1
ScenarioModule.set_fault_type!(scenario, "K1", "BCG");
# Задаём контролируемую фазу (фаза с насыщением)
ScenarioModule.set_controlled_phase!(scenario, 8923, 0.108, phase='A', Kr=0.86);
# Сохраняем сценарий
save_mode!(scenario)
In [ ]:
engee.run(model); # Запуск симуляции

Обратное редактирование параметров после испытания:

In [ ]:
engee.set_param!(scenario.path * "/Q1 Switch", "Value" => 0.0)
engee.set_param!(scenario.path * "/CT", "use_R0" => false)
engee.set_param!(scenario.path * "/S1", "shift" => Dict("unit" => "deg", "value" => 6.86))

Заключение

В примере было рассмотрен ход тестирования устройства релейной защиты на соответствие требованиям ГОСТ-70358 в модели из приложения А4.2.

Вы можете дополнительно автоматизировать программу испытаний для вариации насыщаемых фаз, типов КЗ, кратностей токов и апериодических составляющих. Для моделирования насыщения предварительно потребуется собрать данные для пересчёта Вольт-Амперной характеристики ТТ.

Далее соберите все испытания в один скрипт, который с помощью цикла перебирает параметры модели в рамках испытаний и через программное управление запускает моделирование РИТМе.

Стандарт требует запись результатов испытаний в формате COMTRADE, в модели также представлены инструменты для записи результатов моделирования.