-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSecurityCertification.m
More file actions
71 lines (68 loc) · 3.75 KB
/
SecurityCertification.m
File metadata and controls
71 lines (68 loc) · 3.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
function [branchOff, flagVoltageViolation, voltageViolation, flagPowerViolation, powerViolation] = ...
SecurityCertification(filename, iBranch)
% 蜿よ焚蜷ォ荵
% 霎灘�蜿よ焚
% filename 逕オ鄂第焚謐ョ譁�サカ
% iBranch 譁ュ蠑謾ッ霍ッ郛門捷
% 霎灘�蜿よ焚
% branchOff 譁ュ蠑謾ッ霍ッ襍キ蟋玖鰍轤ケ郛門捷
% flagVoltageViolation 蛻、譁ュ譁ュ蠑謾ッ霍ッiBranch蜷守鳩蜴区弍蜷ヲ雜企剞�悟ヲよ棡雜企剞�悟�荳?�悟凄蛻吩クコ0
% voltageViolation 隶ー蠖戊カ企剞闃らせ逕オ蜴
% flagPowerViolation 蛻、譁ュ譁ュ蠑謾ッ霍ッiBranch蜷守コソ霍ッ蜉溽紫譏ッ蜷ヲ雜企剞�悟ヲよ棡雜企剞�悟�荳?�悟凄蛻吩クコ0
% powerViolation 隶ー蠖戊カ企剞郤ソ霍ッ蜉溽紫諠���梧焚謐ョ譬シ蠑丈クコ
% PowerViolation =
% 蜷��蜷ォ荵我クコ襍キ蟋玖鰍轤ケ?譛ォ遶ッ闃らせ縲∫コソ霍ッ鬥也ォッ豬∝髄譛ォ遶ッ隗�惠蜉溽紫?郤ソ霍ッ譛ォ遶ッ豬∝髄鬥也ォッ隗�惠蜉溽紫縲?
% 郤ソ霍ッ鬥也ォッ豬∝髄譛ォ遶ッ譛牙粥蜉溽紫縲∫コソ霍ッ鬥也ォッ豬∝髄譛ォ遶ッ譌蜉溷粥邇�?
% 郤ソ霍ッ譛ォ遶ッ豬∝髄鬥也ォッ譛牙粥蜉溽紫縲∫コソ霍ッ譛ォ遶ッ豬∝髄鬥也ォッ譌蜉溷粥邇?
% [4.0000 9.0000 16.5119 16.4341 16.4326 1.6161 -16.4326 -0.2195
% 4.0000 9.0000 31.3803 30.6433 30.5782 7.0496 -30.5782 -1.9961
% 逶ク驍サ荳、蛻玲髪霍ッ郛門捷�域ッ剰。悟燕荳、蛻暦シ臥嶌蜷鯉シ悟�蛻ォ荳コ譁ュ蠑?髪霍ッiBranch蜑崎カ企剞謾ッ霍ッ蜉溽紫迥カ蜀オ�悟?
% 譁ュ蠑iBranch蜷取髪霍ッ蜉溽紫迥カ蜀?
% 6.0000 11.0000 7.7175 7.6241 6.9120 3.4327 -6.8607 -3.3253
% 6.0000 11.0000 16.4393 16.0894 15.8367 4.4102 -15.6039 -3.9227]
[PQ, PV, REF, NONE, BUS_I, BUS_TYPE, PD, QD, GS, BS, BUS_AREA, VM, ...
VA, BASE_KV, ZONE, VMAX, VMIN, LAM_P, LAM_Q, MU_VMAX, MU_VMIN] = idx_bus;
[F_BUS, T_BUS, BR_R, BR_X, BR_B, RATE_A, RATE_B, RATE_C, ...
TAP, SHIFT, BR_STATUS, PF, QF, PT, QT, MU_SF, MU_ST, ...
ANGMIN, ANGMAX, MU_ANGMIN, MU_ANGMAX] = idx_brch;
[GEN_BUS, PG, QG, QMAX, QMIN, VG, MBASE, GEN_STATUS, PMAX, PMIN, ...
MU_PMAX, MU_PMIN, MU_QMAX, MU_QMIN, PC1, PC2, QC1MIN, QC1MAX, ...
QC2MIN, QC2MAX, RAMP_AGC, RAMP_10, RAMP_30, RAMP_Q, APF] = idx_gen;
% IEEE14 蛹�性20荳ェ謾ッ霍ッ�悟「槫刈荳?クェ謾ッ霍ッ
mpopt = mpoption('verbose', 0, 'out.all', 0); % 貎ョ豬∬ョ。邂嶺ク崎セ灘�扈捺?
% mpopt = mpoption;
rOrigin = runpf(filename, mpopt); % 蜴滓擂逕オ鄂第スョ豬∬ョ。邂
rOrigin.branch(iBranch, :) = [];
MPC = loadcase(filename);
branchOff = MPC.branch(iBranch, [F_BUS, T_BUS]);
MPC.branch(iBranch, :) = []; % 譁ュ蠑謾ッ霍ッiBranch
% savecase('my_case14_SC.m', MPC);
rNow = runpf(MPC, mpopt); % 譁ー逕オ鄂第スョ豬∬ョ。邂?
flagVoltageViolation = any(abs(rNow.bus(:, VM) - 1) > 0.5); % 蛻、譁ュ譁ュ蠑謾ッ霍ッ蜷守鳩鄂醍鳩蜴区弍蜷ヲ雜企?
voltageViolation = [];
for k = 1:size(MPC.bus)
if abs(rNow.bus(k, VM) - 1) > 0.5
voltageViolation = [voltageViolation; rNow.bus(k, [BUS_I, VM])];
end
end
branchPowerOrigin = rOrigin.branch(:, [PF, QF, PT, QT]);
% branchPowerOrigin(iBranch, :) = [];
branchApparentPowerOrigin = [sqrt(branchPowerOrigin(:, 1) .^ 2 + branchPowerOrigin(:, 2) .^ 2) ...
sqrt(branchPowerOrigin(:, 3) .^ 2 + branchPowerOrigin(:, 4) .^ 2)];
branchPowerNow = rNow.branch(:, [PF, QF, PT, QT]);
branchApparentPowerNow = [sqrt(branchPowerNow(:, 1) .^ 2 + branchPowerNow(:, 2) .^ 2) ...
sqrt(branchPowerNow(:, 3) .^ 2 + branchPowerNow(:, 4) .^ 2)];
powerViolationFlag = branchApparentPowerNow > 1.5 * branchApparentPowerOrigin;
flagPowerViolation = any(any(powerViolationFlag));
powerViolationBranch = [rNow.branch(:, [F_BUS, T_BUS]), powerViolationFlag];
powerViolation = [];
for j = 1:size(MPC.branch, 1)
if any(powerViolationBranch(j, 3:4) ~= 0)
% powerViolation = [powerViolation; powerViolationBranch(j, :), ...
% branchApparentPowerOrigin(j, :), branchApparentPowerNow(j, :)];
powerViolation = [powerViolation; rOrigin.branch(j, [F_BUS, T_BUS]), ...
branchApparentPowerOrigin(j, :), rOrigin.branch(j, [PF, QF, PT, QT]); ...
rNow.branch(j, [F_BUS, T_BUS]), branchApparentPowerNow(j, :), ...
rNow.branch(j, [PF, QF, PT, QT])];
end
end