211{
213
214 data.name = m_textCtrlName->GetValue();
215 data.baseVoltage = m_choiceBaseVoltage->GetSelection();
216
217 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlNominalPower->GetValue(), data.nominalPower,
218 _("Value entered incorrectly in the field \"Nominal power\".")))
219 return false;
220 switch (m_choiceNominalPower->GetSelection()) {
221 case 0: {
222 data.nominalPowerUnit = ElectricalUnit::UNIT_VA;
223 } break;
224 case 1: {
225 data.nominalPowerUnit = ElectricalUnit::UNIT_kVA;
226 } break;
227 case 2: {
228 data.nominalPowerUnit = ElectricalUnit::UNIT_MVA;
229 } break;
230 }
231
232 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlResistance->GetValue(), data.resistance,
233 _("Value entered incorrectly in the field \"Resistance\".")))
234 return false;
235 switch (m_choiceResistance->GetSelection()) {
236 case 0: {
237 data.resistanceUnit = ElectricalUnit::UNIT_PU;
238 } break;
239 case 1: {
240 data.resistanceUnit = ElectricalUnit::UNIT_OHM;
241 } break;
242 }
243
244 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlReactance->GetValue(), data.indReactance,
245 _("Value entered incorrectly in the field \"Indutive reactance\".")))
246 return false;
247 switch (m_choiceReactance->GetSelection()) {
248 case 0: {
249 data.indReactanceUnit = ElectricalUnit::UNIT_PU;
250 } break;
251 case 1: {
252 data.indReactanceUnit = ElectricalUnit::UNIT_OHM;
253 } break;
254 }
255
256 switch (m_choiceConnection->GetSelection()) {
257 case 0: {
258 data.connection = GWYE_GWYE;
259 } break;
260 case 1: {
261 data.connection = WYE_GWYE;
262 } break;
263 case 2: {
264 data.connection = GWYE_WYE;
265 } break;
266 case 3: {
267 data.connection = WYE_WYE;
268 } break;
269 case 4: {
270 data.connection = DELTA_GWYE;
271 } break;
272 case 5: {
273 data.connection = DELTA_WYE;
274 } break;
275 case 6: {
276 data.connection = GWYE_DELTA;
277 } break;
278 case 7: {
279 data.connection = WYE_DELTA;
280 } break;
281 case 8: {
282 data.connection = DELTA_DELTA;
283 } break;
284 }
285
286 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlTurnRatio->GetValue(), data.turnsRatio,
287 _("Value entered incorrectly in the field \"Turns ratio\".")))
288 return false;
289
290 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlPhaseShift->GetValue(), data.phaseShift,
291 _("Value entered incorrectly in the field \"Phase shift\".")))
292 return false;
293
294 data.useTransformerPower = m_checkUseTransformerPower->GetValue();
295
296 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlZeroResistance->GetValue(), data.zeroResistance,
297 _("Value entered incorrectly in the field \"Zero sequence resistance\".")))
298 return false;
299
301 m_parent, m_textCtrlZeroReactance->GetValue(), data.zeroIndReactance,
302 _("Value entered incorrectly in the field \"Zero sequence indutive reactance\".")))
303 return false;
304
305 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlPrimResistance->GetValue(), data.primaryGrndResistance,
306 _("Value entered incorrectly in the field \"Primary ground resistance\".")))
307 return false;
308
309 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlPrimReactance->GetValue(), data.primaryGrndReactance,
310 _("Value entered incorrectly in the field \"Primary ground reactance\".")))
311 return false;
312
313 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlSecResistance->GetValue(), data.secondaryGrndResistance,
314 _("Value entered incorrectly in the field \"Secondary ground resistance\".")))
315 return false;
316
317 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlSecReactance->GetValue(), data.secondaryGrndReactance,
318 _("Value entered incorrectly in the field \"Secondary ground reactance\".")))
319 return false;
320
321 data.hasTapChanger = m_checkEnableTapChanger->GetValue();
322 if (data.hasTapChanger) {
323 data.oltcControlledBus = (m_choiceControlledBus->GetSelection() == 0) ? 0 : 1;
324
325 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlTargetVoltage->GetValue(), data.oltcTargetVoltage,
326 _("Value entered incorrectly in the field \"Target voltage\".")))
327 return false;
328 if (data.oltcTargetVoltage <= 0.0) {
329 wxMessageBox(_("Target voltage must be greater than 0."), _("Error"), wxOK | wxICON_ERROR, m_parent);
330 return false;
331 }
332
333 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlDeadband->GetValue(), data.oltcVoltageDeadband,
334 _("Value entered incorrectly in the field \"Voltage deadband\".")))
335 return false;
336 if (data.oltcVoltageDeadband < 0.0) {
337 wxMessageBox(_("Voltage deadband cannot be negative."), _("Error"), wxOK | wxICON_ERROR, m_parent);
338 return false;
339 }
340
341 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlMinTap->GetValue(), data.oltcMinTap,
342 _("Value entered incorrectly in the field \"Minimum tap\".")))
343 return false;
344 if (data.oltcMinTap <= 0.0) {
345 wxMessageBox(_("Minimum tap must be greater than 0."), _("Error"), wxOK | wxICON_ERROR, m_parent);
346 return false;
347 }
348
349 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlMaxTap->GetValue(), data.oltcMaxTap,
350 _("Value entered incorrectly in the field \"Maximum tap\".")))
351 return false;
352 if (data.oltcMaxTap < data.oltcMinTap) {
353 wxMessageBox(_("Maximum tap must be greater than or equal to minimum tap."), _("Error"), wxOK | wxICON_ERROR, m_parent);
354 return false;
355 }
356
357 data.oltcIsDiscrete = m_checkDiscreteTap->GetValue();
358
359 if (!m_transformer->
DoubleFromString(m_parent, m_textCtrlTapStep->GetValue(), data.oltcTapStep,
360 _("Value entered incorrectly in the field \"Tap step size\".")))
361 return false;
362 if (data.oltcTapStep < 0.0) {
363 wxMessageBox(_("Tap step size cannot be negative."), _("Error"), wxOK | wxICON_ERROR, m_parent);
364 return false;
365 }
366
367
368 data.turnsRatio = std::clamp(data.turnsRatio, data.oltcMinTap, data.oltcMaxTap);
369
370
371 if (data.oltcIsDiscrete && data.oltcTapStep > 1e-4) {
372 data.turnsRatio = 1.0 + std::round((data.turnsRatio - 1.0) / data.oltcTapStep) * data.oltcTapStep;
373 data.turnsRatio = std::clamp(data.turnsRatio, data.oltcMinTap, data.oltcMaxTap);
374 }
375 }
376 data.nominalTurnsRatio = data.turnsRatio;
377
378 m_transformer->SetElectricaData(data);
379 return true;
380}
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.