295{
296 switch (m_elementTypeText) {
297 case TYPE_NONE:
298 SetText(m_text);
299 break;
300 case TYPE_BUS: {
301 Bus* bus =
static_cast<Bus*
>(m_element);
302 if (bus) {
304 double baseVoltage = data.nominalVoltage;
305 if (data.nominalVoltageUnit == ElectricalUnit::UNIT_kV) baseVoltage *= 1e3;
306 double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
307
308 switch (m_dataType) {
309 case DATA_NAME: {
310 SetText(bus->GetElectricalData().name);
311 } break;
312 case DATA_VOLTAGE: {
313 double voltage = std::abs(data.voltage);
314 switch (m_unit) {
315 case ElectricalUnit::UNIT_PU: {
316 SetText(wxString::FromDouble(voltage, m_decimalPlaces) + " p.u.");
317 } break;
318 case ElectricalUnit::UNIT_V: {
319 SetText(wxString::FromDouble(voltage * baseVoltage, m_decimalPlaces) + " V");
320 } break;
321 case ElectricalUnit::UNIT_kV: {
322 SetText(wxString::FromDouble(voltage * baseVoltage / 1e3, m_decimalPlaces) + " kV");
323 } break;
324 default:
325 break;
326 }
327 } break;
328 case DATA_ANGLE: {
329 double angle = std::arg(data.voltage);
330 switch (m_unit) {
331 case ElectricalUnit::UNIT_RADIAN: {
332 SetText(wxString::FromDouble(angle, m_decimalPlaces) + " rad");
333 } break;
334 case ElectricalUnit::UNIT_DEGREE: {
335 SetText(wxString::FromDouble(wxRadToDeg(angle), m_decimalPlaces) + (wxString)L'\u00B0');
336 } break;
337 default:
338 break;
339 }
340 } break;
341 case DATA_SC_CURRENT: {
342 double faultCurrent[3] = { std::abs(data.faultCurrent[0]), std::abs(data.faultCurrent[1]),
343 std::abs(data.faultCurrent[2]) };
344 switch (m_unit) {
345 case ElectricalUnit::UNIT_PU: {
346 wxString str =
347 "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
348 str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
349 str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
350 SetText(str);
351 } break;
352 case ElectricalUnit::UNIT_A: {
353 wxString str =
354 "Ia = " + wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) +
355 " A";
356 str += "\nIb = " +
357 wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
358 str += "\nIc = " +
359 wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
360 SetText(str);
361 } break;
362 case ElectricalUnit::UNIT_kA: {
363 wxString str =
364 "Ia = " +
365 wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
366 str += "\nIb = " +
367 wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) +
368 " kA";
369 str += "\nIc = " +
370 wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) +
371 " kA";
372 SetText(str);
373 } break;
374 default:
375 break;
376 }
377 } break;
378 case DATA_SC_VOLTAGE: {
379 double faultVoltage[3] = { std::abs(data.faultVoltage[0]), std::abs(data.faultVoltage[1]),
380 std::abs(data.faultVoltage[2]) };
381 switch (m_unit) {
382 case ElectricalUnit::UNIT_PU: {
383 wxString str =
384 "Va = " + wxString::FromDouble(faultVoltage[0], m_decimalPlaces) + " p.u.";
385 str += "\nVb = " + wxString::FromDouble(faultVoltage[1], m_decimalPlaces) + " p.u.";
386 str += "\nVc = " + wxString::FromDouble(faultVoltage[2], m_decimalPlaces) + " p.u.";
387 SetText(str);
388 } break;
389 case ElectricalUnit::UNIT_V: {
390 wxString str =
391 "Va = " + wxString::FromDouble(faultVoltage[0] * baseVoltage, m_decimalPlaces) +
392 " V";
393 str += "\nVb = " +
394 wxString::FromDouble(faultVoltage[1] * baseVoltage, m_decimalPlaces) + " V";
395 str += "\nVc = " +
396 wxString::FromDouble(faultVoltage[2] * baseVoltage, m_decimalPlaces) + " V";
397 SetText(str);
398 } break;
399 case ElectricalUnit::UNIT_kV: {
400 wxString str =
401 "Va = " +
402 wxString::FromDouble(faultVoltage[0] * baseVoltage / 1e3, m_decimalPlaces) + " kV";
403 str += "\nVb = " +
404 wxString::FromDouble(faultVoltage[1] * baseVoltage / 1e3, m_decimalPlaces) +
405 " kV";
406 str += "\nVc = " +
407 wxString::FromDouble(faultVoltage[2] * baseVoltage / 1e3, m_decimalPlaces) +
408 " kV";
409 SetText(str);
410 } break;
411 default:
412 break;
413 }
414 } break;
415 case DATA_SC_POWER: {
416 double scPower = data.scPower;
417 if (!data.isConnected) scPower = 0.0;
418 switch (m_unit) {
419 case ElectricalUnit::UNIT_PU: {
420 SetText(wxString::FromDouble(scPower, m_decimalPlaces) + " p.u.");
421 } break;
422 case ElectricalUnit::UNIT_VA: {
423 SetText(wxString::FromDouble(scPower * systemPowerBase, m_decimalPlaces) + " VA");
424 } break;
425 case ElectricalUnit::UNIT_kVA: {
426 SetText(wxString::FromDouble(scPower * systemPowerBase / 1e3, m_decimalPlaces) +
427 " kVA");
428 } break;
429 case ElectricalUnit::UNIT_MVA: {
430 SetText(wxString::FromDouble(scPower * systemPowerBase / 1e6, m_decimalPlaces) +
431 " MVA");
432 } break;
433 default:
434 break;
435 }
436 } break;
437 case DATA_PQ_THD: {
438 SetText(_("THD = ") + wxString::FromDouble(data.thd, m_decimalPlaces) + "%");
439 } break;
440 default:
441 break;
442 }
443 }
444 } break;
445 case TYPE_SYNC_GENERATOR: {
447 if (syncGenerator) {
449 double baseVoltage = syncGenerator->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
450 double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
451 bool busParentOnline = false;
453 if (parentList.size() == 1) {
454 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
455 if (busParent) busParentOnline = busParent->GetElectricalData().isConnected;
456 }
457 switch (m_dataType) {
458 case DATA_NAME: {
459 SetText(data.name);
460 } break;
461 case DATA_ACTIVE_POWER: {
462 double activePower = data.activePower;
463 if (!syncGenerator->
IsOnline() || !busParentOnline) activePower = 0.0;
464 switch (m_unit) {
465 case ElectricalUnit::UNIT_PU: {
466 SetText(wxString::FromDouble(activePower, m_decimalPlaces) + " p.u.");
467 } break;
468 case ElectricalUnit::UNIT_W: {
469 SetText(wxString::FromDouble(activePower * systemPowerBase, m_decimalPlaces) + " W");
470 } break;
471 case ElectricalUnit::UNIT_kW: {
472 SetText(wxString::FromDouble(activePower * systemPowerBase / 1e3, m_decimalPlaces) +
473 " kW");
474 } break;
475 case ElectricalUnit::UNIT_MW: {
476 SetText(wxString::FromDouble(activePower * systemPowerBase / 1e6, m_decimalPlaces) +
477 " MW");
478 } break;
479 default:
480 break;
481 }
482 } break;
483 case DATA_REACTIVE_POWER: {
484 double reactivePower = data.reactivePower;
485 if (!syncGenerator->
IsOnline() || !busParentOnline) reactivePower = 0.0;
486 switch (m_unit) {
487 case ElectricalUnit::UNIT_PU: {
488 SetText(wxString::FromDouble(reactivePower, m_decimalPlaces) + " p.u.");
489 } break;
490 case ElectricalUnit::UNIT_var: {
491 SetText(wxString::FromDouble(reactivePower * systemPowerBase, m_decimalPlaces) +
492 " var");
493 } break;
494 case ElectricalUnit::UNIT_kvar: {
495 SetText(wxString::FromDouble(reactivePower * systemPowerBase / 1e3, m_decimalPlaces) +
496 " kvar");
497 } break;
498 case ElectricalUnit::UNIT_Mvar: {
499 SetText(wxString::FromDouble(reactivePower * systemPowerBase / 1e6, m_decimalPlaces) +
500 " Mvar");
501 } break;
502 default:
503 break;
504 }
505 } break;
506 case DATA_SC_CURRENT: {
507 double faultCurrent[3] = { std::abs(data.faultCurrent[0]), std::abs(data.faultCurrent[1]),
508 std::abs(data.faultCurrent[2]) };
509 switch (m_unit) {
510 case ElectricalUnit::UNIT_PU: {
511 wxString str =
512 "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
513 str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
514 str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
515 SetText(str);
516 } break;
517 case ElectricalUnit::UNIT_A: {
518 wxString str =
519 "Ia = " + wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) +
520 " A";
521 str += "\nIb = " +
522 wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
523 str += "\nIc = " +
524 wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
525 SetText(str);
526 } break;
527 case ElectricalUnit::UNIT_kA: {
528 wxString str =
529 "Ia = " +
530 wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
531 str += "\nIb = " +
532 wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) +
533 " kA";
534 str += "\nIc = " +
535 wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) +
536 " kA";
537 SetText(str);
538 } break;
539 default:
540 break;
541 }
542 } break;
543 default:
544 break;
545 }
546 }
547 } break;
548 case TYPE_LINE: {
549 Line* line =
static_cast<Line*
>(m_element);
550 if (line) {
552 double baseVoltage = data.nominalVoltage;
553 if (data.nominalVoltageUnit == ElectricalUnit::UNIT_kV) baseVoltage *= 1e3;
554 double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
555 bool busParentOnline = false;
557 if (parentList.size() == 2) {
558 Bus* busParent1 =
dynamic_cast<Bus*
>(parentList[0]);
559 Bus* busParent2 =
dynamic_cast<Bus*
>(parentList[1]);
560 if (busParent1 && busParent2) {
561 if (busParent1->GetElectricalData().isConnected && busParent1->GetElectricalData().isConnected)
562 busParentOnline = true;
563 }
564 }
565 switch (m_dataType) {
566 case DATA_NAME: {
567 SetText(data.name);
568 } break;
569 case DATA_PF_ACTIVE: {
570 double activePF = std::real(data.powerFlow[m_direction]);
571 if (!line->
IsOnline() || !busParentOnline) activePF = 0.0;
572 switch (m_unit) {
573 case ElectricalUnit::UNIT_PU: {
574 SetText(wxString::FromDouble(activePF, m_decimalPlaces) + " p.u.");
575 } break;
576 case ElectricalUnit::UNIT_W: {
577 SetText(wxString::FromDouble(activePF * systemPowerBase, m_decimalPlaces) + " W");
578 } break;
579 case ElectricalUnit::UNIT_kW: {
580 SetText(wxString::FromDouble(activePF * systemPowerBase / 1e3, m_decimalPlaces) +
581 " kW");
582 } break;
583 case ElectricalUnit::UNIT_MW: {
584 SetText(wxString::FromDouble(activePF * systemPowerBase / 1e6, m_decimalPlaces) +
585 " MW");
586 } break;
587 default:
588 break;
589 }
590 } break;
591 case DATA_PF_REACTIVE: {
592 double reactivePF = std::imag(data.powerFlow[m_direction]);
593 if (!line->
IsOnline() || !busParentOnline) reactivePF = 0.0;
594 switch (m_unit) {
595 case ElectricalUnit::UNIT_PU: {
596 SetText(wxString::FromDouble(reactivePF, m_decimalPlaces) + " p.u.");
597 } break;
598 case ElectricalUnit::UNIT_var: {
599 SetText(wxString::FromDouble(reactivePF * systemPowerBase, m_decimalPlaces) + " var");
600 } break;
601 case ElectricalUnit::UNIT_kvar: {
602 SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e3, m_decimalPlaces) +
603 " kvar");
604 } break;
605 case ElectricalUnit::UNIT_Mvar: {
606 SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e6, m_decimalPlaces) +
607 " Mvar");
608 } break;
609 default:
610 break;
611 }
612 } break;
613 case DATA_PF_LOSSES: {
614 double losses = std::abs(std::real(data.powerFlow[0]) + std::real(data.powerFlow[1]));
615 if (!line->
IsOnline() || !busParentOnline) losses = 0.0;
616 switch (m_unit) {
617 case ElectricalUnit::UNIT_PU: {
618 SetText(wxString::FromDouble(losses, m_decimalPlaces) + " p.u.");
619 } break;
620 case ElectricalUnit::UNIT_W: {
621 SetText(wxString::FromDouble(losses * systemPowerBase, m_decimalPlaces) + " W");
622 } break;
623 case ElectricalUnit::UNIT_kW: {
624 SetText(wxString::FromDouble(losses * systemPowerBase / 1e3, m_decimalPlaces) + " kW");
625 } break;
626 case ElectricalUnit::UNIT_MW: {
627 SetText(wxString::FromDouble(losses * systemPowerBase / 1e6, m_decimalPlaces) + " MW");
628 } break;
629 default:
630 break;
631 }
632 } break;
633 case DATA_PF_CURRENT: {
634 double current = std::abs(data.current[m_direction]);
635 if (!line->
IsOnline() || !busParentOnline) current = 0.0;
636 switch (m_unit) {
637 case ElectricalUnit::UNIT_PU: {
638 SetText(wxString::FromDouble(current, m_decimalPlaces) + " p.u.");
639 } break;
640 case ElectricalUnit::UNIT_A: {
641 SetText(wxString::FromDouble(current * baseCurrent, m_decimalPlaces) + " A");
642 } break;
643 case ElectricalUnit::UNIT_kA: {
644 SetText(wxString::FromDouble(current * baseCurrent / 1e3, m_decimalPlaces) + " kA");
645 } break;
646 default:
647 break;
648 }
649 } break;
650 case DATA_SC_CURRENT: {
651 double faultCurrent[3] = { std::abs(data.faultCurrent[m_direction][0]),
652 std::abs(data.faultCurrent[m_direction][1]),
653 std::abs(data.faultCurrent[m_direction][2]) };
654 if (!line->
IsOnline()) faultCurrent[0] = faultCurrent[1] = faultCurrent[2] = 0.0;
655 switch (m_unit) {
656 case ElectricalUnit::UNIT_PU: {
657 wxString str =
658 "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
659 str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
660 str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
661 SetText(str);
662 } break;
663 case ElectricalUnit::UNIT_A: {
664 wxString str =
665 "Ia = " + wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) +
666 " A";
667 str += "\nIb = " +
668 wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
669 str += "\nIc = " +
670 wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
671 SetText(str);
672 } break;
673 case ElectricalUnit::UNIT_kA: {
674 wxString str =
675 "Ia = " +
676 wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
677 str += "\nIb = " +
678 wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) +
679 " kA";
680 str += "\nIc = " +
681 wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) +
682 " kA";
683 SetText(str);
684 } break;
685 default:
686 break;
687 }
688 } break;
689 default:
690 break;
691 }
692 }
693 } break;
694 case TYPE_TRANSFORMER: {
696 if (transformer) {
698 double baseVoltage[2] = { data.primaryNominalVoltage, data.secondaryNominalVoltage };
699 bool busParentOnline = false;
701 if (parentList.size() == 2) {
702 Bus* busParent1 =
dynamic_cast<Bus*
>(parentList[0]);
703 Bus* busParent2 =
dynamic_cast<Bus*
>(parentList[1]);
704 if (busParent1 && busParent2) {
705 if (busParent1->GetElectricalData().isConnected && busParent1->GetElectricalData().isConnected)
706 busParentOnline = true;
707 }
708 }
709
710 if (data.primaryNominalVoltageUnit == ElectricalUnit::UNIT_kV) baseVoltage[0] *= 1e3;
711 if (data.secondaryNominalVoltageUnit == ElectricalUnit::UNIT_kV) baseVoltage[1] *= 1e3;
712
713 double baseCurrent[2] = { systemPowerBase / (std::sqrt(3.0) * baseVoltage[0]),
714 systemPowerBase / (std::sqrt(3.0) * baseVoltage[1]) };
715 switch (m_dataType) {
716 case DATA_NAME: {
717 SetText(data.name);
718 } break;
719 case DATA_PF_ACTIVE: {
720 double activePF = std::real(data.powerFlow[m_direction]);
721 if (!transformer->
IsOnline() || !busParentOnline) activePF = 0.0;
722 switch (m_unit) {
723 case ElectricalUnit::UNIT_PU: {
724 SetText(wxString::FromDouble(activePF, m_decimalPlaces) + " p.u.");
725 } break;
726 case ElectricalUnit::UNIT_W: {
727 SetText(wxString::FromDouble(activePF * systemPowerBase, m_decimalPlaces) + " W");
728 } break;
729 case ElectricalUnit::UNIT_kW: {
730 SetText(wxString::FromDouble(activePF * systemPowerBase / 1e3, m_decimalPlaces) +
731 " kW");
732 } break;
733 case ElectricalUnit::UNIT_MW: {
734 SetText(wxString::FromDouble(activePF * systemPowerBase / 1e6, m_decimalPlaces) +
735 " MW");
736 } break;
737 default:
738 break;
739 }
740 } break;
741 case DATA_PF_REACTIVE: {
742 double reactivePF = std::imag(data.powerFlow[m_direction]);
743 if (!transformer->
IsOnline() || !busParentOnline) reactivePF = 0.0;
744 switch (m_unit) {
745 case ElectricalUnit::UNIT_PU: {
746 SetText(wxString::FromDouble(reactivePF, m_decimalPlaces) + " p.u.");
747 } break;
748 case ElectricalUnit::UNIT_var: {
749 SetText(wxString::FromDouble(reactivePF * systemPowerBase, m_decimalPlaces) + " var");
750 } break;
751 case ElectricalUnit::UNIT_kvar: {
752 SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e3, m_decimalPlaces) +
753 " kvar");
754 } break;
755 case ElectricalUnit::UNIT_Mvar: {
756 SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e6, m_decimalPlaces) +
757 " Mvar");
758 } break;
759 default:
760 break;
761 }
762 } break;
763 case DATA_PF_LOSSES: {
764 double losses = std::abs(std::real(data.powerFlow[0]) + std::real(data.powerFlow[1]));
765 if (!transformer->
IsOnline() || !busParentOnline) losses = 0.0;
766 switch (m_unit) {
767 case ElectricalUnit::UNIT_PU: {
768 SetText(wxString::FromDouble(losses, m_decimalPlaces) + " p.u.");
769 } break;
770 case ElectricalUnit::UNIT_W: {
771 SetText(wxString::FromDouble(losses * systemPowerBase, m_decimalPlaces) + " W");
772 } break;
773 case ElectricalUnit::UNIT_kW: {
774 SetText(wxString::FromDouble(losses * systemPowerBase / 1e3, m_decimalPlaces) + " kW");
775 } break;
776 case ElectricalUnit::UNIT_MW: {
777 SetText(wxString::FromDouble(losses * systemPowerBase / 1e6, m_decimalPlaces) + " MW");
778 } break;
779 default:
780 break;
781 }
782 } break;
783 case DATA_PF_CURRENT: {
784 double current = std::abs(data.current[m_direction]);
785 if (!transformer->
IsOnline() || !busParentOnline) current = 0.0;
786 switch (m_unit) {
787 case ElectricalUnit::UNIT_PU: {
788 SetText(wxString::FromDouble(current, m_decimalPlaces) + " p.u.");
789 } break;
790 case ElectricalUnit::UNIT_A: {
791 SetText(wxString::FromDouble(current * baseCurrent[m_direction], m_decimalPlaces) +
792 " A");
793 } break;
794 case ElectricalUnit::UNIT_kA: {
795 SetText(
796 wxString::FromDouble(current * baseCurrent[m_direction] / 1e3, m_decimalPlaces) +
797 " kA");
798 } break;
799 default:
800 break;
801 }
802 } break;
803 case DATA_SC_CURRENT: {
804 double faultCurrent[3] = { std::abs(data.faultCurrent[m_direction][0]),
805 std::abs(data.faultCurrent[m_direction][1]),
806 std::abs(data.faultCurrent[m_direction][2]) };
807 if (!transformer->
IsOnline()) faultCurrent[0] = faultCurrent[1] = faultCurrent[2] = 0.0;
808 switch (m_unit) {
809 case ElectricalUnit::UNIT_PU: {
810 wxString str =
811 "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
812 str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
813 str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
814 SetText(str);
815 } break;
816 case ElectricalUnit::UNIT_A: {
817 wxString str =
818 "Ia = " +
819 wxString::FromDouble(faultCurrent[0] * baseCurrent[m_direction], m_decimalPlaces) +
820 " A";
821 str +=
822 "\nIb = " +
823 wxString::FromDouble(faultCurrent[1] * baseCurrent[m_direction], m_decimalPlaces) +
824 " A";
825 str +=
826 "\nIc = " +
827 wxString::FromDouble(faultCurrent[2] * baseCurrent[m_direction], m_decimalPlaces) +
828 " A";
829 SetText(str);
830 } break;
831 case ElectricalUnit::UNIT_kA: {
832 wxString str = "Ia = " +
833 wxString::FromDouble(faultCurrent[0] * baseCurrent[m_direction] / 1e3,
834 m_decimalPlaces) +
835 " kA";
836 str += "\nIb = " +
837 wxString::FromDouble(faultCurrent[1] * baseCurrent[m_direction] / 1e3,
838 m_decimalPlaces) +
839 " kA";
840 str += "\nIc = " +
841 wxString::FromDouble(faultCurrent[2] * baseCurrent[m_direction] / 1e3,
842 m_decimalPlaces) +
843 " kA";
844 SetText(str);
845 } break;
846 default:
847 break;
848 }
849 } break;
850 case DATA_TRANSFORMER_TAP: {
851 double tap = data.turnsRatio;
852 if (m_unit == ElectricalUnit::UNIT_NONE)
853 SetText(_("Tap = ") + wxString::FromDouble(tap, m_decimalPlaces));
854 else
855 SetText(_("Tap = ") + wxString::FromDouble(tap, m_decimalPlaces) + " p.u.");
856 } break;
857 default:
858 break;
859 }
860 }
861 } break;
862 case TYPE_LOAD: {
863 Load* load =
static_cast<Load*
>(m_element);
864 if (load) {
866 std::complex<double> sPower(data.activePower, data.reactivePower);
867 if (data.loadType == CONST_IMPEDANCE && load->
IsOnline()) {
868 std::complex<double> v =
static_cast<Bus*
>(load->
GetParentList()[0])->GetElectricalData().voltage;
869 sPower = std::pow(std::abs(v), 2) * sPower;
870 }
871 bool busParentOnline = false;
873 if (parentList.size() == 1) {
874 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
875 if (busParent)
876 busParentOnline = busParent->GetElectricalData().isConnected;
877 }
878
879 if (!load->
IsOnline() || !busParentOnline) sPower = std::complex<double>(0.0, 0.0);
880 switch (m_dataType) {
881 case DATA_NAME: {
882 SetText(data.name);
883 } break;
884 case DATA_ACTIVE_POWER: {
885 switch (m_unit) {
886 case ElectricalUnit::UNIT_PU: {
887 SetText(wxString::FromDouble(sPower.real(), m_decimalPlaces) + " p.u.");
888 } break;
889 case ElectricalUnit::UNIT_W: {
890 SetText(wxString::FromDouble(sPower.real() * systemPowerBase, m_decimalPlaces) + " W");
891 } break;
892 case ElectricalUnit::UNIT_kW: {
893 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e3, m_decimalPlaces) +
894 " kW");
895 } break;
896 case ElectricalUnit::UNIT_MW: {
897 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e6, m_decimalPlaces) +
898 " MW");
899 } break;
900 default:
901 break;
902 }
903 } break;
904 case DATA_REACTIVE_POWER: {
905 switch (m_unit) {
906 case ElectricalUnit::UNIT_PU: {
907 SetText(wxString::FromDouble(sPower.imag(), m_decimalPlaces) + " p.u.");
908 } break;
909 case ElectricalUnit::UNIT_var: {
910 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase, m_decimalPlaces) +
911 " var");
912 } break;
913 case ElectricalUnit::UNIT_kvar: {
914 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e3, m_decimalPlaces) +
915 " kvar");
916 } break;
917 case ElectricalUnit::UNIT_Mvar: {
918 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e6, m_decimalPlaces) +
919 " Mvar");
920 } break;
921 default:
922 break;
923 }
924 } break;
925 default:
926 break;
927 }
928 }
929 } break;
930 case TYPE_SYNC_MOTOR: {
932
933 if (syncMotor) {
935 bool busParentOnline = false;
937 if (parentList.size() == 1) {
938 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
939 if (busParent)
940 busParentOnline = busParent->GetElectricalData().isConnected;
941 }
942 std::complex<double> sPower(data.activePower, data.reactivePower);
943 if (!syncMotor->
IsOnline() || !busParentOnline) sPower = std::complex<double>(0.0, 0.0);
944 switch (m_dataType) {
945 case DATA_NAME: {
946 SetText(data.name);
947 } break;
948 case DATA_ACTIVE_POWER: {
949 switch (m_unit) {
950 case ElectricalUnit::UNIT_PU: {
951 SetText(wxString::FromDouble(sPower.real(), m_decimalPlaces) + " p.u.");
952 } break;
953 case ElectricalUnit::UNIT_W: {
954 SetText(wxString::FromDouble(sPower.real() * systemPowerBase, m_decimalPlaces) + " W");
955 } break;
956 case ElectricalUnit::UNIT_kW: {
957 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e3, m_decimalPlaces) +
958 " kW");
959 } break;
960 case ElectricalUnit::UNIT_MW: {
961 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e6, m_decimalPlaces) +
962 " MW");
963 } break;
964 default:
965 break;
966 }
967 } break;
968 case DATA_REACTIVE_POWER: {
969 switch (m_unit) {
970 case ElectricalUnit::UNIT_PU: {
971 SetText(wxString::FromDouble(sPower.imag(), m_decimalPlaces) + " p.u.");
972 } break;
973 case ElectricalUnit::UNIT_var: {
974 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase, m_decimalPlaces) +
975 " var");
976 } break;
977 case ElectricalUnit::UNIT_kvar: {
978 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e3, m_decimalPlaces) +
979 " kvar");
980 } break;
981 case ElectricalUnit::UNIT_Mvar: {
982 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e6, m_decimalPlaces) +
983 " Mvar");
984 } break;
985 default:
986 break;
987 }
988 } break;
989 default:
990 break;
991 }
992 }
993 } break;
994 case TYPE_IND_MOTOR: {
996 if (indMotor) {
998 bool busParentOnline = false;
1000 if (parentList.size() == 1) {
1001 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
1002 if (busParent)
1003 busParentOnline = busParent->GetElectricalData().isConnected;
1004 }
1005 std::complex<double> sPower(data.activePower, data.reactivePower);
1006 if (!indMotor->
IsOnline() || !busParentOnline) sPower = std::complex<double>(0.0, 0.0);
1007 switch (m_dataType) {
1008 case DATA_NAME: {
1009 SetText(data.name);
1010 } break;
1011 case DATA_ACTIVE_POWER: {
1012 switch (m_unit) {
1013 case ElectricalUnit::UNIT_PU: {
1014 SetText(wxString::FromDouble(sPower.real(), m_decimalPlaces) + " p.u.");
1015 } break;
1016 case ElectricalUnit::UNIT_W: {
1017 SetText(wxString::FromDouble(sPower.real() * systemPowerBase, m_decimalPlaces) + " W");
1018 } break;
1019 case ElectricalUnit::UNIT_kW: {
1020 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e3, m_decimalPlaces) +
1021 " kW");
1022 } break;
1023 case ElectricalUnit::UNIT_MW: {
1024 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e6, m_decimalPlaces) +
1025 " MW");
1026 } break;
1027 default:
1028 break;
1029 }
1030 } break;
1031 case DATA_REACTIVE_POWER: {
1032 switch (m_unit) {
1033 case ElectricalUnit::UNIT_PU: {
1034 SetText(wxString::FromDouble(sPower.imag(), m_decimalPlaces) + " p.u.");
1035 } break;
1036 case ElectricalUnit::UNIT_var: {
1037 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase, m_decimalPlaces) +
1038 " var");
1039 } break;
1040 case ElectricalUnit::UNIT_kvar: {
1041 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e3, m_decimalPlaces) +
1042 " kvar");
1043 } break;
1044 case ElectricalUnit::UNIT_Mvar: {
1045 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e6, m_decimalPlaces) +
1046 " Mvar");
1047 }break;
1048 default:
1049 break;
1050 }
1051 } break;
1052 default:
1053 break;
1054 }
1055 }
1056 } break;
1057 case TYPE_CAPACITOR: {
1059 if (capacitor) {
1061 double reativePower = data.reactivePower;
1062
1063 bool busParentOnline = false;
1065 if (parentList.size() == 1) {
1066 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
1067 if (busParent)
1068 busParentOnline = busParent->GetElectricalData().isConnected;
1069 }
1070
1071 if (!capacitor->
IsOnline() || !busParentOnline)
1072 reativePower = 0.0;
1073 else {
1074 std::complex<double> v =
1075 static_cast<Bus*
>(capacitor->
GetParentList()[0])->GetElectricalData().voltage;
1076 reativePower *= std::pow(std::abs(v), 2);
1077 }
1078 switch (m_dataType) {
1079 case DATA_NAME: {
1080 SetText(data.name);
1081 } break;
1082 case DATA_REACTIVE_POWER: {
1083 switch (m_unit) {
1084 case ElectricalUnit::UNIT_PU: {
1085 SetText(wxString::FromDouble(reativePower, m_decimalPlaces) + " p.u.");
1086 }break;
1087 case ElectricalUnit::UNIT_var: {
1088 SetText(wxString::FromDouble(reativePower * systemPowerBase, m_decimalPlaces) + " var");
1089 }break;
1090 case ElectricalUnit::UNIT_kvar: {
1091 SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e3, m_decimalPlaces) +
1092 " kvar");
1093 }break;
1094 case ElectricalUnit::UNIT_Mvar: {
1095 SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e6, m_decimalPlaces) +
1096 " Mvar");
1097 }break;
1098 default:
1099 break;
1100 }
1101 } break;
1102 default:
1103 break;
1104 }
1105 }
1106 } break;
1107 case TYPE_INDUCTOR: {
1109 if (inductor) {
1111 double reativePower = data.reactivePower;
1112
1113 bool busParentOnline = false;
1115 if (parentList.size() == 1) {
1116 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
1117 if (busParent)
1118 busParentOnline = busParent->GetElectricalData().isConnected;
1119 }
1120
1121 if (!inductor->
IsOnline() || !busParentOnline)
1122 reativePower = 0.0;
1123 else {
1124 std::complex<double> v =
1125 static_cast<Bus*
>(inductor->
GetParentList()[0])->GetElectricalData().voltage;
1126 reativePower *= std::pow(std::abs(v), 2);
1127 }
1128 switch (m_dataType) {
1129 case DATA_NAME: {
1130 SetText(data.name);
1131 } break;
1132 case DATA_REACTIVE_POWER: {
1133 switch (m_unit) {
1134 case ElectricalUnit::UNIT_PU: {
1135 SetText(wxString::FromDouble(reativePower, m_decimalPlaces) + " p.u.");
1136 }break;
1137 case ElectricalUnit::UNIT_var: {
1138 SetText(wxString::FromDouble(reativePower * systemPowerBase, m_decimalPlaces) + " var");
1139 }break;
1140 case ElectricalUnit::UNIT_kvar: {
1141 SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e3, m_decimalPlaces) +
1142 " kvar");
1143 }break;
1144 case ElectricalUnit::UNIT_Mvar: {
1145 SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e6, m_decimalPlaces) +
1146 " Mvar");
1147 } break;
1148 default:
1149 break;
1150 }
1151 } break;
1152 default:
1153 break;
1154 }
1155 }
1156 } break;
1157 case TYPE_HARMCURRENT: {
1159 if (harmCurrent) {
1160 auto data = harmCurrent->GetElectricalData();
1161 switch (m_dataType) {
1162 case DATA_NAME: {
1163 SetText(data.name);
1164 } break;
1165 default:
1166 break;
1167 }
1168 }
1169 } break;
1170 }
1171}
Node for power elements. All others power elements are connected through this.
Shunt capactior power element.
virtual std::vector< Element * > GetParentList() const
Get the parent list.
bool IsOnline() const
Checks if the element is online or offline.
Shunt Harmonic Corrent Source.
Induction motor power element.
Inductor shunt power element.
Loas shunt power element.
Synchronous generator power element.
Synchronous motor (synchronous compensator) power element.