Тестирование дистанционной защиты из 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.
Схема энергосистемы:
Внешний вид модели:
Параметры модели:
Параметры энергосистемы 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 на шинах энергосистемы С2. Ожидается срабатывание только 2 ступени ДЗ.
- КЗ в точке К2 на ВЛ 1 в 10 км от шин энергосистемы С1. Ожидается срабатывание 1 и 2 ступеней ДЗ.
- КЗ в точке К2 на ВЛ 1 в 50 км от шин энергосистемы С1. Ожидается срабатывание 1 и 2 ступеней ДЗ.
- КЗ в точке К2 на ВЛ 1 в 90 км от шин энергосистемы С1. Ожидается срабатывание только 2 ступени ДЗ.
- КЗ в точке К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 файлов:
# импорт необходимых модулей
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 столбцах сигналы. В модель переменные загружаются через блок Из рабочей области. Внешний вид модели:
Расчёт параметров ДЗ в соответствии с Методическими указаниями по расчету и выбору параметров настройки дистанционных защит линий электропередачи 110 кВ и выше:
-
Сопротивление срабатывания первой ступени ДЗ отстраивается от полного сопротивления защищаемой линии (пункт 4.3.2.3):
-
Вторая ступень ДЗ надёжно охватывает защищаемую линию (пункт 5.3.3.7.):
где
– коэффициент отстройки;
– коэффициент, учитывающий сокращение зоны ступени ДЗ, с которой производится согласование;
– коэффициент токораспределения, равный отношению первичного тока в защите 1 к первичному току в защите, с которой проводится согласование в режиме каскада. По результатам расчёта в модели ;
– сопротивление срабатывания первой ступени защиты 10 от междуфазных КЗ;
– определяется согласно (4.5) в случае круговой характеристики. -
Угол максимальной чувствительности реле сопротивления берётся равным углу линии (пункт 3.2.):
-
1 ступень срабатывает без выдержки времени. Собственное время срабатывания 1 ступени - 0,02 с
-
Время срабатывания 2 ступени (выражение 4.19):
Проверка алгоритма дистанционной защиты с помощью записанных COMTRADE файлов:
# подключение модуля чтения 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
Обработка результатов тестирования, сравнение фактических результатов и ожидаемых действий защиты:
# проверка есть ли в сигналах Сраб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.