Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
425 changes: 425 additions & 0 deletions +SimplusGT/+Class/SynchronousMachineFullOrder.m

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions +SimplusGT/+Simulink/SimAddApparatus.m
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@
Name_Apparatus{i} = ['VSI-Droop' num2str(Bus)];
FullName_Apparatus{i} = [Name_Model '/' Name_Apparatus{i}];
add_block([Name_LibFile '/Grid-Forming Voltage-Source Inverter (dq-Frame System Object)'],FullName_Apparatus{i});
case 003
Name_Apparatus{i} = ['SM-Detailed' num2str(Bus)];
FullName_Apparatus{i} = [Name_Model '/' Name_Apparatus{i}];
add_block([Name_LibFile '/Synchronous Machine Full Order (dq-Frame System Object)'],FullName_Apparatus{i});
case 009
Name_Apparatus{i} = ['Inf-Bus' num2str(Bus)];
FullName_Apparatus{i} = [Name_Model '/' Name_Apparatus{i}];
Expand Down
39 changes: 35 additions & 4 deletions +SimplusGT/+Toolbox/ApparatusModelCreate.m
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
Para.wL;
Para.R;
Para.w0]; % (5)

% ### Grid-following inverter
case 1 % Type 10-19
if Type~=19
Expand Down Expand Up @@ -80,7 +80,38 @@
Para.fvdq;
Para.fidq;
Para.w0];


% ### Detailed synchronous generator
case 3 % Type 30-39
Apparatus = SimplusGT.Class.SynchronousMachineFullOrder('ApparatusType',Type);
Apparatus.Para = [Para.x_d;
Para.x_dd; % X_dd represents Xd'
Para.x_ddd;
Para.x_q;
Para.x_qd; % X_qd represents Xq'
Para.x_qdd;
Para.x_l; % or x_2, x_ls in some practical cases
Para.R_a;

Para.T_dd; % T_dd represents Td'
Para.T_ddd;
Para.T_qd;
Para.T_qdd;

Para.H; % Inertial constant

Para.SaturationA;
Para.SaturationB;
Para.SaturationN;

Para.D; % Damp constant
Para.SpeedPara; % simplified governor parameters
Para.K_A; % exciter parameters

Para.EnableSaturation; % Saturation setting
Para.wb;
]; % (21 parameters)

% ### Ac infinite bus
case 9
Apparatus = SimplusGT.Class.InfiniteBusAc;
Expand Down Expand Up @@ -142,8 +173,8 @@

%% Calculate the linearized state space model
Apparatus.ApparatusType = Type; % Apparatus type
Apparatus.Ts = Ts; % Samping period
Apparatus.PowerFlow = PowerFlow; % Power flow data
Apparatus.Ts = Ts; % Samping period
Apparatus.PowerFlow = PowerFlow; % Power flow data
Apparatus.SetString(Apparatus); % Set strings automatically
Apparatus.SetEquilibrium(Apparatus); % Calculate the equilibrium
[x_e,u_e,y_e,xi] = Apparatus.GetEquilibrium(Apparatus); % Get the equilibrium
Expand Down
2 changes: 1 addition & 1 deletion +SimplusGT/+Toolbox/BusTypeVIF.m
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
ibus = [];
fbus = [];
for i = 1:length(ApparatusType)
if ((ApparatusType{i} >= 0) && (ApparatusType{i} <= 9)) || (ApparatusType{i} == 90) || ((ApparatusType{i} >= 20) && (ApparatusType{i} <= 29))
if ((ApparatusType{i} >= 0) && (ApparatusType{i} <= 9)) || (ApparatusType{i} == 30) || (ApparatusType{i} == 90) || ((ApparatusType{i} >= 20) && (ApparatusType{i} <= 29))
vbus(l) = i;
l = l+1;
elseif ((ApparatusType{i} >= 10) && (ApparatusType{i} <= 19))
Expand Down
59 changes: 57 additions & 2 deletions +SimplusGT/+Toolbox/RearrangeListApparatus.m
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@
end

% Error check
if (ColumnMax_Apparatus>12)
if (ColumnMax_Apparatus>25)
error(['Error: Apparatus data overflow.']);
end

Expand Down Expand Up @@ -158,6 +158,36 @@
Para0020.fidq =600; % current control bandwidth
Para0020.w0 = W0;

% ======================================
% Detailed Synchronous generator
% ======================================
Para0030.x_d = 1.50;
Para0030.x_dd = 0.50; % X_dd represents Xd'
Para0030.x_ddd = 0.32;
Para0030.x_q = 1.00;
Para0030.x_qd = 1.00; % X_qd represents Xq'
Para0030.x_qdd = 0.45;
Para0030.x_l = 0.20; % or x_2, x_ls in some practical cases
Para0030.R_a = 0.02;

Para0030.T_dd = 9.00; % T_dd represents Td'
Para0030.T_ddd = 0.05;
Para0030.T_qd = 2.00;
Para0030.T_qdd = 0.09;

Para0030.H = 2.1028; % Inertial constant

Para0030.SaturationA = 1;
Para0030.SaturationB = 0.1030;
Para0030.SaturationN = 10.6599;

Para0030.D = 0.02056; % Damp constant
Para0030.SpeedPara = 200; % simplified governor parameters
Para0030.K_A = 20; % exciter parameters

Para0030.EnableSaturation = 0; % Saturation setting
Para0030.wb = W0;

% ======================================
% Ac infinite bus (short-circuit in small-signal)
% ======================================
Expand Down Expand Up @@ -224,7 +254,7 @@
case 2
ParaCell{i} = Para0020; % Grid-forming inverter
case 3
% Yue's Full-Order Machine
ParaCell{i} = Para0030; % Detailed synchronous machine
case 9
ParaCell{i} = Para0090; % Ac inifnite bus
case 10
Expand Down Expand Up @@ -297,6 +327,31 @@
otherwise
error(['Error: parameter overflow, bus ' num2str(AppBus) 'type ' num2str(AppType) '.']);
end
elseif floor(AppType/10) == 3 % Detailed Synchronous machine
switch SwitchFlag
case 1; ParaCell{row(i)}.x_d = UserValue;
case 2; ParaCell{row(i)}.x_dd = UserValue;
case 3; ParaCell{row(i)}.x_ddd = UserValue;
case 4; ParaCell{row(i)}.x_q = UserValue;
case 5; ParaCell{row(i)}.x_qd = UserValue;
case 6; ParaCell{row(i)}.x_qdd = UserValue;
case 7; ParaCell{row(i)}.x_l = UserValue;
case 8; ParaCell{row(i)}.R_a = UserValue;
case 9; ParaCell{row(i)}.T_dd = UserValue;
case 10; ParaCell{row(i)}.T_ddd = UserValue;
case 11; ParaCell{row(i)}.T_qd = UserValue;
case 12; ParaCell{row(i)}.T_qdd = UserValue;
case 13; ParaCell{row(i)}.H = UserValue;
case 14; ParaCell{row(i)}.SaturationA = UserValue;
case 15; ParaCell{row(i)}.SaturationB = UserValue;
case 16; ParaCell{row(i)}.SaturationN = UserValue;
case 17; ParaCell{row(i)}.D = UserValue;
case 18; ParaCell{row(i)}.SpeedPara = UserValue;
case 19; ParaCell{row(i)}.K_A = UserValue;
case 20; ParaCell{row(i)}.EnableSaturation = UserValue;
otherwise
error(['Error: parameter overflow, bus ' num2str(AppBus) 'type ' num2str(AppType) '.']);
end
elseif floor(AppType/10) == 101 % Grid-feeding buck
switch SwitchFlag
case 1; ParaCell{row(i)}.Vdc = UserValue;
Expand Down
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
/Library/SimplexPS.slx
/Library/SimplusPS.slx
/Library/SimplusGT.slx
/Library/SimplusGT.slx
/slprj
*.autosave
*.asv
Loading