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

Тестирование дистанционной защиты из COMTRADE файлов

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

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

Генерация COMTRADE файлов

Для генерации осциллограмм токов и напряжений используется модель энергосистемы с двухсторонним питанием и двухцепной воздушной линией (ВЛ), где первая цепь разделена на две части: Л1_1 и Л1_2. Их длина изменяется через переменные L1_1 и L1_2 тем самым точка КЗ К2 перемещается вдоль ВЛ относительно энергосистем. Также имеются точки КЗ К1 и К3 на шинах энергосистем С2 и С1 соответственно. Все КЗ трёхфазные. Время появления КЗ изменяется с помощью задания параметра Время воздействия в блоках с1, с2, с3, подключенных к управляющим портам блоков КЗ. Время срабатывания блока КЗ устанавливается равным 0,5 с, а для его отключения — 10 с. Поскольку время моделирования - 1.5 с, то при времени срабатывания 10 с блок КЗ не успеет включиться.

В начале ВЛ Л1_1 измеряется ток, на шинах энергосистемы С1 измеряется напряжение. Измеренные сигналы передаются в блок To COMTRADE. Более подробно про использование блока To COMTRADE описано в примере Запись событий в энергосистеме в COMTRADE файл. Предполагаемое место установки ДЗ - начало ВЛ Л1_1.

Схема энергосистемы:

image.png

Внешний вид модели:

Энергосистема--1768467162733.png

Параметры модели:

Параметры энергосистемы 1:
Активное сопротивление прямой последовательности – 0,393 Ом
Индуктивное сопротивление прямой последовательности – 4,276 Ом
Активное сопротивление нулевой последовательности – 0,494 Ом
Индуктивное сопротивление нулевой последовательности – 4,02 Ом
Эквивалентная ЭДС– 230 кВ
Фазовый угол ЭДС– 10°.

Параметры энергосистемы 2:
Активное сопротивление прямой последовательности– 4,85 Ом
Индуктивное сопротивление прямой последовательности – 25,604 Ом
Активное сопротивление нулевой последовательности – 10,607 Ом
Индуктивное сопротивление нулевой последовательности – 53,347 Ом
Эквивалентная ЭДС– 220 кВ
Фазовый угол ЭДС– 0°.

Параметры ВЛ:
Длина 100 км
Удельное сопротивление линии прямой последоват. 0,0958 + j 0,4038 Ом/км
Удельное сопротивление линии нулевой последоват. 0,3471 + j 1,2432 Ом/км
Удельная емкость прямой последовательности 8,411 нФ/км
Удельная емкость нулевой последовательности 6,745 нФ/км.

В модели выполняются следующие опыты:

  1. КЗ в точке К1 на шинах энергосистемы С2. Ожидается срабатывание только 2 ступени ДЗ.
  2. КЗ в точке К2 на ВЛ 1 в 10 км от шин энергосистемы С1. Ожидается срабатывание 1 и 2 ступеней ДЗ.
  3. КЗ в точке К2 на ВЛ 1 в 50 км от шин энергосистемы С1. Ожидается срабатывание 1 и 2 ступеней ДЗ.
  4. КЗ в точке К2 на ВЛ 1 в 90 км от шин энергосистемы С1. Ожидается срабатывание только 2 ступени ДЗ.
  5. КЗ в точке К3 на шинах энергосистемы С1. Ожидается несрабатывание ступеней ДЗ.

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

№ Опыта\ Параметр Время срабатывания КЗ №1, с Время срабатывания КЗ №2, с Время срабатывания КЗ №3, с Длина линии Л1_1, км Срабатывание 1 ступени ДЗ Срабатывание 2 ступени ДЗ
1 0,5 10 10 50 0 1
2 10 0,5 10 25 1 1
3 10 0,5 10 50 1 1
4 10 0,5 10 90 0 1
5 10 10 0,5 50 0 0

Файлы COMTRADE записываются в папку data которая создается в папке с данным скриптом. Генерация COMTRADE файлов:

In [ ]:
# импорт необходимых модулей
using Plots, DataFrames
model_name = "Энергосистема";
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
# данные для изменения условий опытов
exp_data = DataFrame(
    KZ1 = [0.5, 10, 10, 10, 10], # время появления КЗ №1
    KZ2 = [10, 0.5, 0.5, 0.5, 10], # время появления КЗ №2
    KZ3 = [10, 10, 10, 10, 0.5], # время появления КЗ №2
    L1 = [50, 25, 50, 90, 50], # длины левой части 1 цепи ВЛ
    result1 = [0, 1, 1, 0, 0], # ожидаемые результаты срабатываний 1 ступени 
    result2 = [1, 1, 1, 1, 0] # ожидаемые результаты срабатываний 2 ступени
)
# путь к данному скрипту
current_path = @__DIR__
# создание папки data если её нет, туда запишутся COMTRADE файлы
if !isdir("$(current_path)/data")
    mkdir("$(current_path)/data")
end
# цикл для генерации COMTRADE файлов
for i in 1:nrow(exp_data)
    # длина ВЛ 1_1
    L1_1 = exp_data[i, :L1]
    # длина ВЛ 1_2
    L1_2 = 100 .- exp_data[i, :L1]
    # передача в блок "c1" времени появления КЗ №1
    engee.set_param!(model_name*"/c1", "Time" => exp_data[i, :KZ1]);
    # передача в блок "c2" времени появления КЗ №2
    engee.set_param!(model_name*"/c2", "Time" => exp_data[i, :KZ2]);
    # передача в блок "c3" времени появления КЗ №3
    engee.set_param!(model_name*"/c3", "Time" => exp_data[i, :KZ3]);
    # передача в блок "COMTRADE" имён COMTRADE файлов в формате Exp_X
    engee.set_param!(model_name*"/COMTRADE", "files_path" => "\"$(current_path)/data/Exp_$i\"");
    # запуск модели
    engee.run(model_name);
end

Проверка алгоритма дистанционной защиты

Проверка алгоритма дистанционной защиты в данной примере выполняется с использованием осциллограмм токов и напряжений записанных в формате COMTRADE. Для этого аварийные режимы электрической сети и короткие замыкания предварительно смоделированы в отдельной модели энергосистемы Энергосистема.engee, после чего переходные процессы записаны в виде COMTRADE файлов. Полученные файлы используются в качестве входных воздействий для модели дистанционной защиты, реализованной в отдельной модели ДЗ.engee.

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

Кроме того, применение COMTRADE файлов обеспечивает повторяемость и наглядность проверки. Один и тот же набор осциллограмм может многократно использоваться для верификации алгоритма, анализа чувствительности и корректности срабатывания защиты при различных видах коротких замыканий, переходных сопротивлениях и местах повреждений. Такой подход позволяет сосредоточиться на оценке логики работы алгоритма защиты.

Для считывания файлов COMTRADE используется доработанный модуль из открытого репозитория. В данном модуле имеется всего одна функция read_comtrade. Она имеет один входной аргумент - абсолютный или относительный путь к файлу. Например "/user/data/Exp_1" или "Exp_1". Функция возвращает объект типа ComtradeData с полями:

  • filename::String - название фалов без расширения;
  • cfg::ComtradeCfg- данные конфигурации;
  • dat::DataFrame - таблица с данными где каждый канал это столбец;
  • hdr::String - содержимое .hdr файла;
  • inf::String - содержимое .inf файла.

Модуль поддерживает стандарты 1991, 1999 и 2013 годов. Расширение .cff введенное в 2013 году не поддерживается.

Из объекта ComtradeData данные осциллограмм токов и напряжений извлекаются в переменные V и I типа Matrix, где 1-й столбец содержит время, в 2-4 столбцах сигналы. В модель переменные загружаются через блок Из рабочей области. Внешний вид модели:

ДЗ-15.01.26 16_07_34.png

Расчёт параметров ДЗ в соответствии с Методическими указаниями по расчету и выбору параметров настройки дистанционных защит линий электропередачи 110 кВ и выше:

  1. Сопротивление срабатывания первой ступени ДЗ отстраивается от полного сопротивления защищаемой линии (пункт 4.3.2.3):

  2. Вторая ступень ДЗ надёжно охватывает защищаемую линию (пункт 5.3.3.7.):

    где
    – коэффициент отстройки;
    – коэффициент, учитывающий сокращение зоны ступени ДЗ, с которой производится согласование;
    – коэффициент токораспределения, равный отношению первичного тока в защите 1 к первичному току в защите, с которой проводится согласование в режиме каскада. По результатам расчёта в модели ;
    – сопротивление срабатывания первой ступени защиты 10 от междуфазных КЗ;
    – определяется согласно (4.5) в случае круговой характеристики.

  3. Угол максимальной чувствительности реле сопротивления берётся равным углу линии (пункт 3.2.):

  4. 1 ступень срабатывает без выдержки времени. Собственное время срабатывания 1 ступени - 0,02 с

  5. Время срабатывания 2 ступени (выражение 4.19):

Проверка алгоритма дистанционной защиты с помощью записанных COMTRADE файлов:

In [ ]:
# подключение модуля чтения COMTRADE при первом запуске
if !isdefined(Main, :COMTRADE)
    include("$(@__DIR__)/COMTRADE.jl")
end
# добавление модуля COMTRADE
using .COMTRADE, Plots
# переменная с путем к скрипту
current_path = @__DIR__
# название модели с алгоритмом ДЗ
model_rz = "ДЗ";
model_rz in [m.name for m in engee.get_all_models()] ? engee.open(model_rz) : engee.load( "$(@__DIR__)/$(model_rz).engee");
# получение списка файлов в папке data
files = readdir("$(current_path)/data")
# получение уникальных имён файлов без расширения
unique_names = unique(map(f -> splitext(f)[1], files))
# инициализация матрицы для результатов моделирования
results = Matrix{Any}(undef, length(unique_names), 2)
for i in 1:length(unique_names)
    # чтение COMTRADE файлов
    data = read_comtrade("$(@__DIR__)/data/$(unique_names[i])")
    # передача данных из COMTRADE в переменные
    global V = Matrix(data.dat[:, [:time, :Va, :Vb, :Vc]])
    global I = Matrix(data.dat[:, [:time, :Ia, :Ib, :Ic]])
    # запуск модели
    result = engee.run(model_rz);
    # сохрание сигналов срабатывания ступеней ДЗ
    Сраб1 = result["Сраб1"].value;
    Сраб2 = result["Сраб2"].value
    results[i,1] = Сраб1
    results[i,2] = Сраб2
end

Обработка результатов тестирования, сравнение фактических результатов и ожидаемых действий защиты:

In [ ]:
# проверка есть ли в сигналах Сраб1 и Сраб2 логические единицы
Сраб1_bool = [any(results[i,1]) for i in 1:size(results)[1]]
Сраб2_bool = [any(results[i,2]) for i in 1:size(results)[1]]
# сравнение фактических срабатываний и ожидаемых результатов
Сраб1_vector = Сраб1_bool .== exp_data[:, :result1]
Сраб2_vector = Сраб2_bool .== exp_data[:, :result2]
# проверка, что фактические результаты совпадают с ожидаемыми
if all(Сраб1_vector) & all(Сраб2_vector)
    println("Всё опыты прошли успешно")
else
    if any(.!Сраб1_vector)
        print("Первая ступень сработала неправильно в опытах №:\n")
        println(findall(!, Сраб1_vector))
    end
    if any(.!Сраб2_vector)
        print("Вторая ступень сработала неправильно в опытах №:\n")
        println(findall(!, Сраб2_vector))
    end
end

Вывод

В данном примере было показано тестирование алгоритма дистанционной защиты с помощью COMTRADE файлов. COMTRADE файлы предварительно генерируются в модели энергосистемы где происходят различные КЗ. Считывание COMTRADE файлов осуществляется с использованием доработанного модуля для работы с COMTRADE.