Power System Platform  2026w10a-beta
Loading...
Searching...
No Matches
TransformerForm.cpp
1/*
2 * Copyright (C) 2017 Thales Lima Oliveira <thales@ufu.br>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17
18#include "TransformerForm.h"
19#include "SwitchingForm.h"
20#include "../elements/powerElement/Transformer.h"
21
22TransformerForm::TransformerForm(wxWindow* parent, Transformer* transformer) : TransformerFormBase(parent)
23{
24 m_choiceResistance->SetString(1, L'\u03A9');
25 m_choiceReactance->SetString(1, L'\u03A9');
26
27 // Reset connections choice labels (to be translated)
28 m_choiceConnection->SetString(0, _("Grounded Wye - Grounded Wye"));
29 m_choiceConnection->SetString(1, _("Wye - Grounded Wye"));
30 m_choiceConnection->SetString(2, _("Grounded Wye - Wye"));
31 m_choiceConnection->SetString(3, _("Wye - Wye"));
32 m_choiceConnection->SetString(4, _("Delta - Grounded Wye"));
33 m_choiceConnection->SetString(5, _("Delta - Wye"));
34 m_choiceConnection->SetString(6, _("Grounded Wye - Delta"));
35 m_choiceConnection->SetString(7, _("Wye - Delta"));
36 m_choiceConnection->SetString(8, _("Delta - Delta"));
37
38 SetSize(GetBestSize());
39 Layout();
40
41 m_parent = parent;
42 m_transformer = transformer;
43
44 TransformerElectricalData data = transformer->GetElectricalData();
45
46 m_textCtrlName->SetValue(data.name);
47
48 wxString primVoltStr = Transformer::StringFromDouble(data.primaryNominalVoltage);
49 switch(data.primaryNominalVoltageUnit) {
51 primVoltStr += " V";
52 } break;
54 primVoltStr += " kV";
55 } break;
56 default:
57 break;
58 }
59 wxString secVoltStr = Transformer::StringFromDouble(data.secondaryNominalVoltage);
60 switch(data.secondaryNominalVoltageUnit) {
62 secVoltStr += " V";
63 } break;
65 secVoltStr += " kV";
66 } break;
67 default:
68 break;
69 }
70 m_staticTextNominalVoltageValue->SetLabel(wxString::Format("%s / %s", primVoltStr, secVoltStr));
71
72 m_choiceBaseVoltage->SetString(0, primVoltStr);
73 m_choiceBaseVoltage->SetString(1, secVoltStr);
74 m_choiceBaseVoltage->SetSelection(data.baseVoltage);
75
76 m_textCtrlNominalPower->SetValue(Transformer::StringFromDouble(data.nominalPower));
77 switch(data.nominalPowerUnit) {
79 m_choiceNominalPower->SetSelection(0);
80 } break;
82 m_choiceNominalPower->SetSelection(1);
83 } break;
85 m_choiceNominalPower->SetSelection(2);
86 } break;
87 default:
88 break;
89 }
90
91 m_textCtrlResistance->SetValue(Transformer::StringFromDouble(data.resistance));
92 switch(data.resistanceUnit) {
94 m_choiceResistance->SetSelection(0);
95 } break;
97 m_choiceResistance->SetSelection(1);
98 } break;
99 default:
100 break;
101 }
102
103 m_textCtrlReactance->SetValue(Transformer::StringFromDouble(data.indReactance));
104 switch(data.indReactanceUnit) {
106 m_choiceReactance->SetSelection(0);
107 } break;
109 m_choiceReactance->SetSelection(1);
110 } break;
111 default:
112 break;
113 }
114
115 m_choiceConnection->SetSelection(data.connection);
116
117 m_textCtrlTurnRatio->SetValue(Transformer::StringFromDouble(data.turnsRatio));
118 m_textCtrlPhaseShift->SetValue(Transformer::StringFromDouble(data.phaseShift));
119
120 m_checkUseTransformerPower->SetValue(data.useTransformerPower);
121
122 m_textCtrlZeroResistance->SetValue(Transformer::StringFromDouble(data.zeroResistance));
123 m_textCtrlZeroReactance->SetValue(Transformer::StringFromDouble(data.zeroIndReactance));
124 m_textCtrlPrimResistance->SetValue(Transformer::StringFromDouble(data.primaryGrndResistance));
125 m_textCtrlPrimReactance->SetValue(Transformer::StringFromDouble(data.primaryGrndReactance));
126 m_textCtrlSecResistance->SetValue(Transformer::StringFromDouble(data.secondaryGrndResistance));
127 m_textCtrlSecReactance->SetValue(Transformer::StringFromDouble(data.secondaryGrndReactance));
128}
129
130TransformerForm::~TransformerForm() {}
131void TransformerForm::OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
132void TransformerForm::OnOKButtonClick(wxCommandEvent& event)
133{
134 if(ValidateData()) EndModal(wxID_OK);
135}
136void TransformerForm::OnStabilityButtonClick(wxCommandEvent& event)
137{
138 if(ValidateData()) {
139 SwitchingForm swForm(m_parent, m_transformer);
140 swForm.SetTitle(_("Transfomer: Switching"));
141 swForm.ShowModal();
142 EndModal(wxID_OK);
143 }
144}
145
146bool TransformerForm::ValidateData()
147{
148 TransformerElectricalData data = m_transformer->GetElectricalData();
149
150 data.name = m_textCtrlName->GetValue();
151 data.baseVoltage = m_choiceBaseVoltage->GetSelection();
152
153 if(!m_transformer->DoubleFromString(m_parent, m_textCtrlNominalPower->GetValue(), data.nominalPower,
154 _("Value entered incorrectly in the field \"Nominal power\".")))
155 return false;
156 switch(m_choiceNominalPower->GetSelection()) {
157 case 0: {
158 data.nominalPowerUnit = ElectricalUnit::UNIT_VA;
159 } break;
160 case 1: {
161 data.nominalPowerUnit = ElectricalUnit::UNIT_kVA;
162 } break;
163 case 2: {
164 data.nominalPowerUnit = ElectricalUnit::UNIT_MVA;
165 } break;
166 }
167
168 if(!m_transformer->DoubleFromString(m_parent, m_textCtrlResistance->GetValue(), data.resistance,
169 _("Value entered incorrectly in the field \"Resistance\".")))
170 return false;
171 switch(m_choiceResistance->GetSelection()) {
172 case 0: {
173 data.resistanceUnit = ElectricalUnit::UNIT_PU;
174 } break;
175 case 1: {
176 data.resistanceUnit = ElectricalUnit::UNIT_OHM;
177 } break;
178 }
179
180 if(!m_transformer->DoubleFromString(m_parent, m_textCtrlReactance->GetValue(), data.indReactance,
181 _("Value entered incorrectly in the field \"Indutive reactance\".")))
182 return false;
183 switch(m_choiceReactance->GetSelection()) {
184 case 0: {
185 data.indReactanceUnit = ElectricalUnit::UNIT_PU;
186 } break;
187 case 1: {
188 data.indReactanceUnit = ElectricalUnit::UNIT_OHM;
189 } break;
190 }
191
192 switch(m_choiceConnection->GetSelection()) {
193 case 0: {
194 data.connection = GWYE_GWYE;
195 } break;
196 case 1: {
197 data.connection = WYE_GWYE;
198 } break;
199 case 2: {
200 data.connection = GWYE_WYE;
201 } break;
202 case 3: {
203 data.connection = WYE_WYE;
204 } break;
205 case 4: {
206 data.connection = DELTA_GWYE;
207 } break;
208 case 5: {
209 data.connection = DELTA_WYE;
210 } break;
211 case 6: {
212 data.connection = GWYE_DELTA;
213 } break;
214 case 7: {
215 data.connection = WYE_DELTA;
216 } break;
217 case 8: {
218 data.connection = DELTA_DELTA;
219 } break;
220 }
221
222 if(!m_transformer->DoubleFromString(m_parent, m_textCtrlTurnRatio->GetValue(), data.turnsRatio,
223 _("Value entered incorrectly in the field \"Turns ratio\".")))
224 return false;
225
226 if(!m_transformer->DoubleFromString(m_parent, m_textCtrlPhaseShift->GetValue(), data.phaseShift,
227 _("Value entered incorrectly in the field \"Phase shift\".")))
228 return false;
229
230 data.useTransformerPower = m_checkUseTransformerPower->GetValue();
231
232 if(!m_transformer->DoubleFromString(m_parent, m_textCtrlZeroResistance->GetValue(), data.zeroResistance,
233 _("Value entered incorrectly in the field \"Zero sequence resistance\".")))
234 return false;
235
236 if(!m_transformer->DoubleFromString(
237 m_parent, m_textCtrlZeroReactance->GetValue(), data.zeroIndReactance,
238 _("Value entered incorrectly in the field \"Zero sequence indutive reactance\".")))
239 return false;
240
241 if(!m_transformer->DoubleFromString(m_parent, m_textCtrlPrimResistance->GetValue(), data.primaryGrndResistance,
242 _("Value entered incorrectly in the field \"Primary ground resistance\".")))
243 return false;
244
245 if(!m_transformer->DoubleFromString(m_parent, m_textCtrlPrimReactance->GetValue(), data.primaryGrndReactance,
246 _("Value entered incorrectly in the field \"Primary ground reactance\".")))
247 return false;
248
249 if(!m_transformer->DoubleFromString(m_parent, m_textCtrlSecResistance->GetValue(), data.secondaryGrndResistance,
250 _("Value entered incorrectly in the field \"Secondary ground resistance\".")))
251 return false;
252
253 if(!m_transformer->DoubleFromString(m_parent, m_textCtrlSecReactance->GetValue(), data.secondaryGrndReactance,
254 _("Value entered incorrectly in the field \"Secondary ground reactance\".")))
255 return false;
256
257 m_transformer->SetElectricaData(data);
258 return true;
259}
static bool DoubleFromString(wxWindow *parent, wxString strValue, double &value, wxString errorMsg)
Get a double value from a string. Show a error message if the conversion fail.
Definition Element.cpp:505
static wxString StringFromDouble(double value, int minDecimal=1, int maxDecimals=13)
Convert a double value to string.
Definition Element.cpp:533
Form to edit the switching data of power elements for electromechanical transient studies.
Two-winding transformer power element.
Definition Transformer.h:84