% 单机-无穷大系统暂态稳定分析
clear; clc; close all;
%% 1. 系统参数定义
tc = 0.15; % 故障切除时间 (s)
H = 5; % 发电机惯性时间常数 (s)
P0 = 1.0; % 正常运行时机械功率 (标幺值)
delta0_deg = 19.47; % 初始功角 (度) <--- 已修改为 19.47
% 功率特性参数
P1_max = 3.0; % 故障前功率极限
P2_max = 0.8; % 故障中功率极限
P3_max = 2.5; % 故障切除后功率极限
% 角度单位转换 (计算统一使用弧度制)
delta0 = deg2rad(delta0_deg);
omega_N = 360; % 同步转速,取 360 度/秒 (对应 50Hz)
%% 2. 计算极限切除角 delta_c_limit (等面积定则)
% 故障后稳定平衡点 delta_III
delta_III = asin(P0 / P3_max);
% 故障后不稳定平衡点 delta_III_max (即 180度 - delta_III)
delta_III_max = pi - delta_III;
% 根据等面积定则: 加速面积 A_acc = 减速面积 A_dec
fun = @(dc) (P0*(dc - delta0) + P2_max*(cos(dc) - cos(delta0))) - ...
(P3_max*(cos(dc) - cos(delta_III_max)) - P0*(delta_III_max - dc));
% 在 [delta0, delta_III_max] 区间内寻找极限切除角
delta_c_limit_rad = fzero(fun, [delta0, delta_III_max]);
delta_c_limit_deg = rad2deg(delta_c_limit_rad);
fprintf('=== 等面积定则计算结果 ===\n');
fprintf('初始功角 delta_0: %.2f 度\n', delta0_deg);
fprintf('故障后稳定平衡点 delta_III: %.2f 度\n', rad2deg(delta_III));
fprintf('极限切除角 delta_c_limit: %.2f 度\n\n', delta_c_limit_deg);
%% 3. 时域仿真 - 求解 0.15s 时的实际功角
% 转子运动方程: d(delta)/dt = omega; d(omega)/dt = (omega_N / 2H) * (P0 - Pe)
ode_fault = @(t, y) [y(2); (omega_N / (2*H)) * (P0 - P2_max * sin(y(1)))];
% 初始状态 [delta0; 0]
y0 = [delta0; 0];
options = odeset('RelTol', 1e-8, 'AbsTol', 1e-8);
% 仿真 0 到 0.15s
[t_fault, y_fault] = ode45(ode_fault, [0, tc], y0, options);
% 提取 0.15s 时刻的状态
delta_tc_rad = y_fault(end, 1);
delta_tc_deg = rad2deg(delta_tc_rad);
omega_tc_deg = y_fault(end, 2); % 度/秒
fprintf('=== 暂态过程仿真结果 ===\n');
fprintf('故障切除时间 t_c = %.2f s\n', tc);
fprintf('0.15s时刻的实际功角 delta_tc: %.2f 度\n', delta_tc_deg);
fprintf('0.15s时刻的相对转速 omega_tc: %.2f 度/秒\n\n', omega_tc_deg);
% 稳定性判断
if delta_tc_deg < delta_c_limit_deg
fprintf('结论: delta_tc (%.2f°) < 极限切除角 (%.2f°),系统暂态稳定。\n', delta_tc_deg, delta_c_limit_deg);
else
fprintf('结论: delta_tc (%.2f°) >= 极限切除角 (%.2f°),系统暂态不稳定。\n', delta_tc_deg, delta_c_limit_deg);
end
%% 4. 绘制 delta-t 曲线
% 继续仿真故障切除后的过程 (假设切除后 Pe = P3_max * sin(delta))
ode_post = @(t, y) [y(2); (omega_N / (2*H)) * (P0 - P3_max * sin(y(1)))];
[t_post, y_post] = ode45(ode_post, [tc, 1.0], [delta_tc_rad; omega_tc_deg], options);
% 合并时间与角度
t_all = [t_fault; t_post(2:end)];
delta_all_deg = rad2deg([y_fault(:,1); y_post(2:end,1)]);
figure('Name', '暂态稳定分析', 'Color', 'w');
plot(t_all, delta_all_deg, 'b-', 'LineWidth', 2); hold on;
yline(delta0_deg, 'k--', 'LineWidth', 1.5, 'Label', '初始功角 \delta_0');
yline(delta_c_limit_deg, 'r--', 'LineWidth', 1.5, 'Label', '极限切除角 \delta_{c,limit}');
% 标出 0.15s 切除时刻的点
plot(tc, delta_tc_deg, 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'r');
text(tc + 0.02, delta_tc_deg - 5, sprintf('切除点 (%.2fs, %.2f°)', tc, delta_tc_deg), 'FontSize', 10);
xlabel('时间 t (s)', 'FontSize', 12);
ylabel('功角 \delta (度)', 'FontSize', 12);
title('单机-无穷大系统功角摇摆曲线 (\delta-t)', 'FontSize', 14);
grid on;
xlim([0, 1.0]);
ylim([0, 180]);
legend('实际功角曲线', '初始功角', '极限切除角', '切除时刻', 'Location', 'best');