Методика параметризации синхронных машин
Автор
"""
convert_parameters(machine::Dict) -> Dict{Symbol, Float64}
Функция для расчета параметров блоков синхронной машины (Round Rotor и Salient Pole)
по данным справочника Неклепаева.
Поддерживаются:
- Турбогенераторы
- Гидрогенераторы
Источники и методика:
- Справочник Неклепаева
- Kimbark E.W. "Power System Stability", Vol. III
Все параметры возвращаются в относительных единицах (pu),
временные постоянные — в секундах.
"""
function convert_parameters(machine::Dict)
# Вспомогательная функция парсинга
parse_val(x) = parse(Float64, x)
# Общие номинальные параметры
params = Dict{Symbol, Float64}()
# Порядок как в конструкторе RoundRotor
# 1. Номинальные параметры
params[:S_rated] = parse_val(machine["S_rated"]) # MW
params[:V_rated] = parse_val(machine["V_rated"]) # kV
params[:f_rated] = parse_val(machine["f_rated"]) # Hz
params[:N_pole_pairs] = 60 * params[:f_rated] / parse_val(machine["w_rated"]) # p = 60f / n
# 2. Параметры цепи возбуждения
params[:I_fd_base] = parse_val(machine["I_fd_base"])
params[:V_fd_base] = parse_val(machine["V_fd_base"])
# 3. Основные реактансы
params[:X_d] = parse_val(machine["X_d"])
params[:X_q] = parse_val(machine["X_q"])
params[:X_l] = parse_val(machine["X_l"])
params[:X_0] = parse_val(machine["X_0"])
params[:R_a] = parse_val(machine["R_a"])
# 4. Переходные и сверхпереходные реактансы
params[:X_p_d] = parse_val(machine["X_p_d"])
params[:X_pp_d] = parse_val(machine["X_pp_d"])
# Реактивные сопротивления q-оси
X_q_val = parse_val(machine["X_q"])
params[:X_q] = X_q_val == 0 ? params[:X_d] : X_q_val # Для турбогенераторов Xq ≈ Xd
X_p_q = parse_val(machine["X_p_q"])
params[:X_p_q] = X_p_q == 0 ? (params[:X_p_d] + params[:X_q]) / 2 : X_p_q # Среднее значение
X_pp_q = parse_val(machine["X_pp_q"])
params[:X_pp_q] = X_pp_q == 0 ? params[:X_p_q] : X_pp_q # При отсутствии данных Xq'' принимается равным Xq'
# 5. Временные постоянные d-оси
params[:T_p_d0] = parse_val(machine["T_p_d0"]) # ХХ
params[:T_p_d] = parse_val(machine["T_p_d"]) # КЗ
params[:T_pp_d0] = parse_val(machine["T_pp_d0"]) # ХХ
params[:T_pp_d] = parse_val(machine["T_pp_d"]) # КЗ
# 6. Временные постоянные q-оси
T_p_q = parse_val(machine["T_p_q"])
T_p_q0 = parse_val(machine["T_p_q0"])
T_pp_q = parse_val(machine["T_pp_q"])
T_pp_q0 = parse_val(machine["T_pp_q0"])
if machine["machine_type"] == "Turbo"
# Турбогенератор
# Эмпирическое соотношение для турбогенераторов: Tq' ≈ 1.5 × Td'
if T_p_q == 0
params[:T_p_q] = 1.5 * params[:T_p_d]
else
params[:T_p_q] = T_p_q
end
# Для турбогенераторов Tq'' ≈ Td''
if T_pp_q == 0
params[:T_pp_q] = params[:T_pp_d]
else
params[:T_pp_q] = T_pp_q
end
# Переход от КЗ к ХХ для q-оси: Tq0' = Tq' × (Xq/Xq')
if T_p_q0 == 0
params[:T_p_q0] = params[:T_p_q] * (params[:X_q] / params[:X_p_q])
else
params[:T_p_q0] = T_p_q0
end
# Переход от КЗ к ХХ для q-оси: Tq0'' = Tq'' × (Xq'/Xq'')
if T_pp_q0 == 0
params[:T_pp_q0] = params[:T_pp_q] * (params[:X_p_q] / params[:X_pp_q])
else
params[:T_pp_q0] = T_pp_q0
end
# Корректировка T_pp_d0 если не задано: Td0'' = Td'' × (Xd'/Xd'')
# Классическое соотношение между постоянными времени КЗ и ХХ
if parse_val(machine["T_pp_d0"]) == 0
params[:T_pp_d0] = params[:T_pp_d] * (params[:X_p_d] / params[:X_pp_d])
end
else
# Гидрогенератор
# Источники: Kimbark E.W. "Power System Stability", Vol. III, Table 2, p. 40
# Установка значений по умолчанию для незаданных параметров
if params[:R_a] == 0
# Average value (0.015+0.030)/2 = 0.0225, принято 0.009 pu
# Kimbark E.W. Power System Stability. Volume III. Synchronous Machines, p 40
params[:R_a] = 0.009
end
if params[:X_l] == 0
# Среднее значение индуктивности рассеяния статора гидрогенераторов
# Kimbark E.W. Power System Stability. Volume III. Synchronous Machines, p 40
params[:X_l] = 0.32
end
if params[:X_0] == 0
# Average value (0.21+0.02)/2 = 0.115 pu
# Kimbark E.W. Power System Stability. Volume III. Synchronous Machines, p 40
params[:X_0] = 0.115
end
if params[:X_q] == 0
# Среднее значение синхронного реактанса по q-оси для гидрогенераторов
# Kimbark E.W. Power System Stability. Volume III. Synchronous Machines, p 40
params[:X_q] = 0.75
end
if params[:X_pp_q] == 0
# Среднее значение сверхпереходного реактанса по q-оси для гидрогенераторов
# Kimbark E.W. Power System Stability. Volume III. Synchronous Machines, p 40
params[:X_pp_q] = 0.34
end
if params[:T_p_d0] == 0
# Среднее значение переходной постоянной времени ХХ по d-оси
# Kimbark E.W. Power System Stability. Volume III. Synchronous Machines, p 40
params[:T_p_d0] = 5.6
end
if params[:T_pp_d0] == 0
# Среднее значение сверхпереходной постоянной времени ХХ по d-оси
# Kimbark E.W. Power System Stability. Volume III. Synchronous Machines, p 40
params[:T_pp_d0] = 0.125
end
# Переход от ХХ к КЗ: Td' = Td0' × (Xd'/Xd)
if params[:T_p_d] == 0
params[:T_p_d] = params[:T_p_d0] * (params[:X_p_d] / params[:X_d])
end
# Переход от ХХ к КЗ: Td'' = Td0'' × (Xd''/Xd')
if params[:T_pp_d] == 0
params[:T_pp_d] = params[:T_pp_d0] * (params[:X_pp_d] / params[:X_p_d])
end
# Для гидрогенератора Tq'' ≈ Td''
params[:T_pp_q] = params[:T_pp_d]
# Открытая цепь по q-оси: Tq0'' = Tq'' × (Xq/Xq'')
# Для явнополюсной машины Xq_p ≈ X_q
if T_pp_q0 == 0
params[:T_pp_q0] = params[:T_pp_q] * (params[:X_q] / params[:X_pp_q])
else
params[:T_pp_q0] = T_pp_q0
end
# Для гидрогенераторов T_p_q и T_p_q0 обычно не используются
# В явнополюсных машинах нет переходной обмотки по q-оси
params[:T_p_q] = 0.0
params[:T_p_q0] = 0.0
end
# Создаем упорядоченный словарь в порядке конструктора RoundRotor
ordered_params = Dict{Symbol, Float64}()
# Порядок как в конструкторе RoundRotor:
# 1. Номинальные параметры
ordered_params[:S_rated] = params[:S_rated]
ordered_params[:V_rated] = params[:V_rated]
ordered_params[:f_rated] = params[:f_rated]
ordered_params[:N_pole_pairs] = params[:N_pole_pairs]
# 2. Параметры возбуждения
ordered_params[:I_fd_base] = params[:I_fd_base]
ordered_params[:V_fd_base] = params[:V_fd_base]
# 3. Основные реактансы и сопротивление
ordered_params[:R_a] = params[:R_a]
ordered_params[:X_l] = params[:X_l]
ordered_params[:X_d] = params[:X_d]
ordered_params[:X_q] = params[:X_q]
ordered_params[:X_0] = params[:X_0]
# 4. Переходные и сверхпереходные реактансы
ordered_params[:X_p_d] = params[:X_p_d]
ordered_params[:X_pp_d] = params[:X_pp_d]
ordered_params[:X_p_q] = params[:X_p_q]
ordered_params[:X_pp_q] = params[:X_pp_q]
# 5. Временные постоянные d-оси
ordered_params[:T_p_d0] = params[:T_p_d0]
ordered_params[:T_p_d] = params[:T_p_d]
ordered_params[:T_pp_d0] = params[:T_pp_d0]
ordered_params[:T_pp_d] = params[:T_pp_d]
# 6. Временные постоянные q-оси
ordered_params[:T_p_q0] = params[:T_p_q0]
ordered_params[:T_p_q] = params[:T_p_q]
ordered_params[:T_pp_q0] = params[:T_pp_q0]
ordered_params[:T_pp_q] = params[:T_pp_q]
# Дополнительные параметры, которые могут потребоваться
ordered_params[:w_rated] = parse_val(machine["w_rated"])
ordered_params[:machine_type] = machine["machine_type"] == "Turbo" ? 1.0 : 2.0
return ordered_params
end