285{
286 switch (m_elementTypeText) {
287 case TYPE_NONE:
288 SetText(m_text);
289 break;
290 case TYPE_BUS: {
291 Bus* bus =
static_cast<Bus*
>(m_element);
292 if (bus) {
294 double baseVoltage = data.nominalVoltage;
296 double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
297
298 switch (m_dataType) {
299 case DATA_NAME: {
300 SetText(bus->GetElectricalData().name);
301 } break;
302 case DATA_VOLTAGE: {
303 double voltage = std::abs(data.voltage);
304 switch (m_unit) {
306 SetText(wxString::FromDouble(voltage, m_decimalPlaces) + " p.u.");
307 } break;
309 SetText(wxString::FromDouble(voltage * baseVoltage, m_decimalPlaces) + " V");
310 } break;
312 SetText(wxString::FromDouble(voltage * baseVoltage / 1e3, m_decimalPlaces) + " kV");
313 } break;
314 default:
315 break;
316 }
317 } break;
318 case DATA_ANGLE: {
319 double angle = std::arg(data.voltage);
320 switch (m_unit) {
322 SetText(wxString::FromDouble(angle, m_decimalPlaces) + " rad");
323 } break;
325 SetText(wxString::FromDouble(wxRadToDeg(angle), m_decimalPlaces) + (wxString)L'\u00B0');
326 } break;
327 default:
328 break;
329 }
330 } break;
331 case DATA_SC_CURRENT: {
332 double faultCurrent[3] = { std::abs(data.faultCurrent[0]), std::abs(data.faultCurrent[1]),
333 std::abs(data.faultCurrent[2]) };
334 switch (m_unit) {
336 wxString str =
337 "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
338 str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
339 str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
340 SetText(str);
341 } break;
343 wxString str =
344 "Ia = " + wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) +
345 " A";
346 str += "\nIb = " +
347 wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
348 str += "\nIc = " +
349 wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
350 SetText(str);
351 } break;
353 wxString str =
354 "Ia = " +
355 wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
356 str += "\nIb = " +
357 wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) +
358 " kA";
359 str += "\nIc = " +
360 wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) +
361 " kA";
362 SetText(str);
363 } break;
364 default:
365 break;
366 }
367 } break;
368 case DATA_SC_VOLTAGE: {
369 double faultVoltage[3] = { std::abs(data.faultVoltage[0]), std::abs(data.faultVoltage[1]),
370 std::abs(data.faultVoltage[2]) };
371 switch (m_unit) {
373 wxString str =
374 "Va = " + wxString::FromDouble(faultVoltage[0], m_decimalPlaces) + " p.u.";
375 str += "\nVb = " + wxString::FromDouble(faultVoltage[1], m_decimalPlaces) + " p.u.";
376 str += "\nVc = " + wxString::FromDouble(faultVoltage[2], m_decimalPlaces) + " p.u.";
377 SetText(str);
378 } break;
380 wxString str =
381 "Va = " + wxString::FromDouble(faultVoltage[0] * baseVoltage, m_decimalPlaces) +
382 " V";
383 str += "\nVb = " +
384 wxString::FromDouble(faultVoltage[1] * baseVoltage, m_decimalPlaces) + " V";
385 str += "\nVc = " +
386 wxString::FromDouble(faultVoltage[2] * baseVoltage, m_decimalPlaces) + " V";
387 SetText(str);
388 } break;
390 wxString str =
391 "Va = " +
392 wxString::FromDouble(faultVoltage[0] * baseVoltage / 1e3, m_decimalPlaces) + " kV";
393 str += "\nVb = " +
394 wxString::FromDouble(faultVoltage[1] * baseVoltage / 1e3, m_decimalPlaces) +
395 " kV";
396 str += "\nVc = " +
397 wxString::FromDouble(faultVoltage[2] * baseVoltage / 1e3, m_decimalPlaces) +
398 " kV";
399 SetText(str);
400 } break;
401 default:
402 break;
403 }
404 } break;
405 case DATA_SC_POWER: {
406 double scPower = data.scPower;
407 if (!data.isConnected) scPower = 0.0;
408 switch (m_unit) {
410 SetText(wxString::FromDouble(scPower, m_decimalPlaces) + " p.u.");
411 } break;
413 SetText(wxString::FromDouble(scPower * systemPowerBase, m_decimalPlaces) + " VA");
414 } break;
416 SetText(wxString::FromDouble(scPower * systemPowerBase / 1e3, m_decimalPlaces) +
417 " kVA");
418 } break;
420 SetText(wxString::FromDouble(scPower * systemPowerBase / 1e6, m_decimalPlaces) +
421 " MVA");
422 } break;
423 default:
424 break;
425 }
426 } break;
427 case DATA_PQ_THD: {
428 SetText(_("THD = ") + wxString::FromDouble(data.thd, m_decimalPlaces) + "%");
429 } break;
430 default:
431 break;
432 }
433 }
434 } break;
435 case TYPE_SYNC_GENERATOR: {
437 if (syncGenerator) {
439 double baseVoltage = syncGenerator->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
440 double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
441 bool busParentOnline = false;
443 if (parentList.size() == 1) {
444 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
445 if (busParent) busParentOnline = busParent->GetElectricalData().isConnected;
446 }
447 switch (m_dataType) {
448 case DATA_NAME: {
449 SetText(data.name);
450 } break;
451 case DATA_ACTIVE_POWER: {
452 double activePower = data.activePower;
453 if (!syncGenerator->
IsOnline() || !busParentOnline) activePower = 0.0;
454 switch (m_unit) {
456 SetText(wxString::FromDouble(activePower, m_decimalPlaces) + " p.u.");
457 } break;
459 SetText(wxString::FromDouble(activePower * systemPowerBase, m_decimalPlaces) + " W");
460 } break;
462 SetText(wxString::FromDouble(activePower * systemPowerBase / 1e3, m_decimalPlaces) +
463 " kW");
464 } break;
466 SetText(wxString::FromDouble(activePower * systemPowerBase / 1e6, m_decimalPlaces) +
467 " MW");
468 } break;
469 default:
470 break;
471 }
472 } break;
473 case DATA_REACTIVE_POWER: {
474 double reactivePower = data.reactivePower;
475 if (!syncGenerator->
IsOnline() || !busParentOnline) reactivePower = 0.0;
476 switch (m_unit) {
478 SetText(wxString::FromDouble(reactivePower, m_decimalPlaces) + " p.u.");
479 } break;
481 SetText(wxString::FromDouble(reactivePower * systemPowerBase, m_decimalPlaces) +
482 " var");
483 } break;
485 SetText(wxString::FromDouble(reactivePower * systemPowerBase / 1e3, m_decimalPlaces) +
486 " kvar");
487 } break;
489 SetText(wxString::FromDouble(reactivePower * systemPowerBase / 1e6, m_decimalPlaces) +
490 " Mvar");
491 } break;
492 default:
493 break;
494 }
495 } break;
496 case DATA_SC_CURRENT: {
497 double faultCurrent[3] = { std::abs(data.faultCurrent[0]), std::abs(data.faultCurrent[1]),
498 std::abs(data.faultCurrent[2]) };
499 switch (m_unit) {
501 wxString str =
502 "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
503 str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
504 str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
505 SetText(str);
506 } break;
508 wxString str =
509 "Ia = " + wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) +
510 " A";
511 str += "\nIb = " +
512 wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
513 str += "\nIc = " +
514 wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
515 SetText(str);
516 } break;
518 wxString str =
519 "Ia = " +
520 wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
521 str += "\nIb = " +
522 wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) +
523 " kA";
524 str += "\nIc = " +
525 wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) +
526 " kA";
527 SetText(str);
528 } break;
529 default:
530 break;
531 }
532 } break;
533 default:
534 break;
535 }
536 }
537 } break;
538 case TYPE_LINE: {
539 Line* line =
static_cast<Line*
>(m_element);
540 if (line) {
542 double baseVoltage = data.nominalVoltage;
544 double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
545 bool busParentOnline = false;
547 if (parentList.size() == 2) {
548 Bus* busParent1 =
dynamic_cast<Bus*
>(parentList[0]);
549 Bus* busParent2 =
dynamic_cast<Bus*
>(parentList[1]);
550 if (busParent1 && busParent2) {
551 if (busParent1->GetElectricalData().isConnected && busParent1->GetElectricalData().isConnected)
552 busParentOnline = true;
553 }
554 }
555 switch (m_dataType) {
556 case DATA_NAME: {
557 SetText(data.name);
558 } break;
559 case DATA_PF_ACTIVE: {
560 double activePF = std::real(data.powerFlow[m_direction]);
561 if (!line->
IsOnline() || !busParentOnline) activePF = 0.0;
562 switch (m_unit) {
564 SetText(wxString::FromDouble(activePF, m_decimalPlaces) + " p.u.");
565 } break;
567 SetText(wxString::FromDouble(activePF * systemPowerBase, m_decimalPlaces) + " W");
568 } break;
570 SetText(wxString::FromDouble(activePF * systemPowerBase / 1e3, m_decimalPlaces) +
571 " kW");
572 } break;
574 SetText(wxString::FromDouble(activePF * systemPowerBase / 1e6, m_decimalPlaces) +
575 " MW");
576 } break;
577 default:
578 break;
579 }
580 } break;
581 case DATA_PF_REACTIVE: {
582 double reactivePF = std::imag(data.powerFlow[m_direction]);
583 if (!line->
IsOnline() || !busParentOnline) reactivePF = 0.0;
584 switch (m_unit) {
586 SetText(wxString::FromDouble(reactivePF, m_decimalPlaces) + " p.u.");
587 } break;
589 SetText(wxString::FromDouble(reactivePF * systemPowerBase, m_decimalPlaces) + " var");
590 } break;
592 SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e3, m_decimalPlaces) +
593 " kvar");
594 } break;
596 SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e6, m_decimalPlaces) +
597 " Mvar");
598 } break;
599 default:
600 break;
601 }
602 } break;
603 case DATA_PF_LOSSES: {
604 double losses = std::abs(std::real(data.powerFlow[0]) + std::real(data.powerFlow[1]));
605 if (!line->
IsOnline() || !busParentOnline) losses = 0.0;
606 switch (m_unit) {
608 SetText(wxString::FromDouble(losses, m_decimalPlaces) + " p.u.");
609 } break;
611 SetText(wxString::FromDouble(losses * systemPowerBase, m_decimalPlaces) + " W");
612 } break;
614 SetText(wxString::FromDouble(losses * systemPowerBase / 1e3, m_decimalPlaces) + " kW");
615 } break;
617 SetText(wxString::FromDouble(losses * systemPowerBase / 1e6, m_decimalPlaces) + " MW");
618 } break;
619 default:
620 break;
621 }
622 } break;
623 case DATA_PF_CURRENT: {
624 double current = std::abs(data.current[m_direction]);
625 if (!line->
IsOnline() || !busParentOnline) current = 0.0;
626 switch (m_unit) {
628 SetText(wxString::FromDouble(current, m_decimalPlaces) + " p.u.");
629 } break;
631 SetText(wxString::FromDouble(current * baseCurrent, m_decimalPlaces) + " A");
632 } break;
634 SetText(wxString::FromDouble(current * baseCurrent / 1e3, m_decimalPlaces) + " kA");
635 } break;
636 default:
637 break;
638 }
639 } break;
640 case DATA_SC_CURRENT: {
641 double faultCurrent[3] = { std::abs(data.faultCurrent[m_direction][0]),
642 std::abs(data.faultCurrent[m_direction][1]),
643 std::abs(data.faultCurrent[m_direction][2]) };
644 if (!line->
IsOnline()) faultCurrent[0] = faultCurrent[1] = faultCurrent[2] = 0.0;
645 switch (m_unit) {
647 wxString str =
648 "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
649 str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
650 str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
651 SetText(str);
652 } break;
654 wxString str =
655 "Ia = " + wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) +
656 " A";
657 str += "\nIb = " +
658 wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
659 str += "\nIc = " +
660 wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
661 SetText(str);
662 } break;
664 wxString str =
665 "Ia = " +
666 wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
667 str += "\nIb = " +
668 wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) +
669 " kA";
670 str += "\nIc = " +
671 wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) +
672 " kA";
673 SetText(str);
674 } break;
675 default:
676 break;
677 }
678 } break;
679 default:
680 break;
681 }
682 }
683 } break;
684 case TYPE_TRANSFORMER: {
686 if (transformer) {
688 double baseVoltage[2] = { data.primaryNominalVoltage, data.secondaryNominalVoltage };
689 bool busParentOnline = false;
691 if (parentList.size() == 2) {
692 Bus* busParent1 =
dynamic_cast<Bus*
>(parentList[0]);
693 Bus* busParent2 =
dynamic_cast<Bus*
>(parentList[1]);
694 if (busParent1 && busParent2) {
695 if (busParent1->GetElectricalData().isConnected && busParent1->GetElectricalData().isConnected)
696 busParentOnline = true;
697 }
698 }
699
702
703 double baseCurrent[2] = { systemPowerBase / (std::sqrt(3.0) * baseVoltage[0]),
704 systemPowerBase / (std::sqrt(3.0) * baseVoltage[1]) };
705 switch (m_dataType) {
706 case DATA_NAME: {
707 SetText(data.name);
708 } break;
709 case DATA_PF_ACTIVE: {
710 double activePF = std::real(data.powerFlow[m_direction]);
711 if (!transformer->
IsOnline() || !busParentOnline) activePF = 0.0;
712 switch (m_unit) {
714 SetText(wxString::FromDouble(activePF, m_decimalPlaces) + " p.u.");
715 } break;
717 SetText(wxString::FromDouble(activePF * systemPowerBase, m_decimalPlaces) + " W");
718 } break;
720 SetText(wxString::FromDouble(activePF * systemPowerBase / 1e3, m_decimalPlaces) +
721 " kW");
722 } break;
724 SetText(wxString::FromDouble(activePF * systemPowerBase / 1e6, m_decimalPlaces) +
725 " MW");
726 } break;
727 default:
728 break;
729 }
730 } break;
731 case DATA_PF_REACTIVE: {
732 double reactivePF = std::imag(data.powerFlow[m_direction]);
733 if (!transformer->
IsOnline() || !busParentOnline) reactivePF = 0.0;
734 switch (m_unit) {
736 SetText(wxString::FromDouble(reactivePF, m_decimalPlaces) + " p.u.");
737 } break;
739 SetText(wxString::FromDouble(reactivePF * systemPowerBase, m_decimalPlaces) + " var");
740 } break;
742 SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e3, m_decimalPlaces) +
743 " kvar");
744 } break;
746 SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e6, m_decimalPlaces) +
747 " Mvar");
748 } break;
749 default:
750 break;
751 }
752 } break;
753 case DATA_PF_LOSSES: {
754 double losses = std::abs(std::real(data.powerFlow[0]) + std::real(data.powerFlow[1]));
755 if (!transformer->
IsOnline() || !busParentOnline) losses = 0.0;
756 switch (m_unit) {
758 SetText(wxString::FromDouble(losses, m_decimalPlaces) + " p.u.");
759 } break;
761 SetText(wxString::FromDouble(losses * systemPowerBase, m_decimalPlaces) + " W");
762 } break;
764 SetText(wxString::FromDouble(losses * systemPowerBase / 1e3, m_decimalPlaces) + " kW");
765 } break;
767 SetText(wxString::FromDouble(losses * systemPowerBase / 1e6, m_decimalPlaces) + " MW");
768 } break;
769 default:
770 break;
771 }
772 } break;
773 case DATA_PF_CURRENT: {
774 double current = std::abs(data.current[m_direction]);
775 if (!transformer->
IsOnline() || !busParentOnline) current = 0.0;
776 switch (m_unit) {
778 SetText(wxString::FromDouble(current, m_decimalPlaces) + " p.u.");
779 } break;
781 SetText(wxString::FromDouble(current * baseCurrent[m_direction], m_decimalPlaces) +
782 " A");
783 } break;
785 SetText(
786 wxString::FromDouble(current * baseCurrent[m_direction] / 1e3, m_decimalPlaces) +
787 " kA");
788 } break;
789 default:
790 break;
791 }
792 } break;
793 case DATA_SC_CURRENT: {
794 double faultCurrent[3] = { std::abs(data.faultCurrent[m_direction][0]),
795 std::abs(data.faultCurrent[m_direction][1]),
796 std::abs(data.faultCurrent[m_direction][2]) };
797 if (!transformer->
IsOnline()) faultCurrent[0] = faultCurrent[1] = faultCurrent[2] = 0.0;
798 switch (m_unit) {
800 wxString str =
801 "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
802 str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
803 str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
804 SetText(str);
805 } break;
807 wxString str =
808 "Ia = " +
809 wxString::FromDouble(faultCurrent[0] * baseCurrent[m_direction], m_decimalPlaces) +
810 " A";
811 str +=
812 "\nIb = " +
813 wxString::FromDouble(faultCurrent[1] * baseCurrent[m_direction], m_decimalPlaces) +
814 " A";
815 str +=
816 "\nIc = " +
817 wxString::FromDouble(faultCurrent[2] * baseCurrent[m_direction], m_decimalPlaces) +
818 " A";
819 SetText(str);
820 } break;
822 wxString str = "Ia = " +
823 wxString::FromDouble(faultCurrent[0] * baseCurrent[m_direction] / 1e3,
824 m_decimalPlaces) +
825 " kA";
826 str += "\nIb = " +
827 wxString::FromDouble(faultCurrent[1] * baseCurrent[m_direction] / 1e3,
828 m_decimalPlaces) +
829 " kA";
830 str += "\nIc = " +
831 wxString::FromDouble(faultCurrent[2] * baseCurrent[m_direction] / 1e3,
832 m_decimalPlaces) +
833 " kA";
834 SetText(str);
835 } break;
836 default:
837 break;
838 }
839 } break;
840 default:
841 break;
842 }
843 }
844 } break;
845 case TYPE_LOAD: {
846 Load* load =
static_cast<Load*
>(m_element);
847 if (load) {
849 std::complex<double> sPower(data.activePower, data.reactivePower);
850 if (data.loadType == CONST_IMPEDANCE && load->
IsOnline()) {
851 std::complex<double> v =
static_cast<Bus*
>(load->
GetParentList()[0])->GetElectricalData().voltage;
852 sPower = std::pow(std::abs(v), 2) * sPower;
853 }
854 bool busParentOnline = false;
856 if (parentList.size() == 1) {
857 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
858 if (busParent)
859 busParentOnline = busParent->GetElectricalData().isConnected;
860 }
861
862 if (!load->
IsOnline() || !busParentOnline) sPower = std::complex<double>(0.0, 0.0);
863 switch (m_dataType) {
864 case DATA_NAME: {
865 SetText(data.name);
866 } break;
867 case DATA_ACTIVE_POWER: {
868 switch (m_unit) {
870 SetText(wxString::FromDouble(sPower.real(), m_decimalPlaces) + " p.u.");
871 } break;
873 SetText(wxString::FromDouble(sPower.real() * systemPowerBase, m_decimalPlaces) + " W");
874 } break;
876 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e3, m_decimalPlaces) +
877 " kW");
878 } break;
880 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e6, m_decimalPlaces) +
881 " MW");
882 } break;
883 default:
884 break;
885 }
886 } break;
887 case DATA_REACTIVE_POWER: {
888 switch (m_unit) {
890 SetText(wxString::FromDouble(sPower.imag(), m_decimalPlaces) + " p.u.");
891 } break;
893 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase, m_decimalPlaces) +
894 " var");
895 } break;
897 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e3, m_decimalPlaces) +
898 " kvar");
899 } break;
901 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e6, m_decimalPlaces) +
902 " Mvar");
903 } break;
904 default:
905 break;
906 }
907 } break;
908 default:
909 break;
910 }
911 }
912 } break;
913 case TYPE_SYNC_MOTOR: {
915
916 if (syncMotor) {
918 bool busParentOnline = false;
920 if (parentList.size() == 1) {
921 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
922 if (busParent)
923 busParentOnline = busParent->GetElectricalData().isConnected;
924 }
925 std::complex<double> sPower(data.activePower, data.reactivePower);
926 if (!syncMotor->
IsOnline() || !busParentOnline) sPower = std::complex<double>(0.0, 0.0);
927 switch (m_dataType) {
928 case DATA_NAME: {
929 SetText(data.name);
930 } break;
931 case DATA_ACTIVE_POWER: {
932 switch (m_unit) {
934 SetText(wxString::FromDouble(sPower.real(), m_decimalPlaces) + " p.u.");
935 } break;
937 SetText(wxString::FromDouble(sPower.real() * systemPowerBase, m_decimalPlaces) + " W");
938 } break;
940 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e3, m_decimalPlaces) +
941 " kW");
942 } break;
944 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e6, m_decimalPlaces) +
945 " MW");
946 } break;
947 default:
948 break;
949 }
950 } break;
951 case DATA_REACTIVE_POWER: {
952 switch (m_unit) {
954 SetText(wxString::FromDouble(sPower.imag(), m_decimalPlaces) + " p.u.");
955 } break;
957 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase, m_decimalPlaces) +
958 " var");
959 } break;
961 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e3, m_decimalPlaces) +
962 " kvar");
963 } break;
965 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e6, m_decimalPlaces) +
966 " Mvar");
967 } break;
968 default:
969 break;
970 }
971 } break;
972 default:
973 break;
974 }
975 }
976 } break;
977 case TYPE_IND_MOTOR: {
979 if (indMotor) {
981 bool busParentOnline = false;
983 if (parentList.size() == 1) {
984 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
985 if (busParent)
986 busParentOnline = busParent->GetElectricalData().isConnected;
987 }
988 std::complex<double> sPower(data.activePower, data.reactivePower);
989 if (!indMotor->
IsOnline() || !busParentOnline) sPower = std::complex<double>(0.0, 0.0);
990 switch (m_dataType) {
991 case DATA_NAME: {
992 SetText(data.name);
993 } break;
994 case DATA_ACTIVE_POWER: {
995 switch (m_unit) {
997 SetText(wxString::FromDouble(sPower.real(), m_decimalPlaces) + " p.u.");
998 } break;
1000 SetText(wxString::FromDouble(sPower.real() * systemPowerBase, m_decimalPlaces) + " W");
1001 } break;
1003 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e3, m_decimalPlaces) +
1004 " kW");
1005 } break;
1007 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e6, m_decimalPlaces) +
1008 " MW");
1009 } break;
1010 default:
1011 break;
1012 }
1013 } break;
1014 case DATA_REACTIVE_POWER: {
1015 switch (m_unit) {
1017 SetText(wxString::FromDouble(sPower.imag(), m_decimalPlaces) + " p.u.");
1018 } break;
1020 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase, m_decimalPlaces) +
1021 " var");
1022 } break;
1024 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e3, m_decimalPlaces) +
1025 " kvar");
1026 } break;
1028 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e6, m_decimalPlaces) +
1029 " Mvar");
1030 }break;
1031 default:
1032 break;
1033 }
1034 } break;
1035 default:
1036 break;
1037 }
1038 }
1039 } break;
1040 case TYPE_CAPACITOR: {
1042 if (capacitor) {
1044 double reativePower = data.reactivePower;
1045
1046 bool busParentOnline = false;
1048 if (parentList.size() == 1) {
1049 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
1050 if (busParent)
1051 busParentOnline = busParent->GetElectricalData().isConnected;
1052 }
1053
1054 if (!capacitor->
IsOnline() || !busParentOnline)
1055 reativePower = 0.0;
1056 else {
1057 std::complex<double> v =
1058 static_cast<Bus*
>(capacitor->
GetParentList()[0])->GetElectricalData().voltage;
1059 reativePower *= std::pow(std::abs(v), 2);
1060 }
1061 switch (m_dataType) {
1062 case DATA_NAME: {
1063 SetText(data.name);
1064 } break;
1065 case DATA_REACTIVE_POWER: {
1066 switch (m_unit) {
1068 SetText(wxString::FromDouble(reativePower, m_decimalPlaces) + " p.u.");
1069 }break;
1071 SetText(wxString::FromDouble(reativePower * systemPowerBase, m_decimalPlaces) + " var");
1072 }break;
1074 SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e3, m_decimalPlaces) +
1075 " kvar");
1076 }break;
1078 SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e6, m_decimalPlaces) +
1079 " Mvar");
1080 }break;
1081 default:
1082 break;
1083 }
1084 } break;
1085 default:
1086 break;
1087 }
1088 }
1089 } break;
1090 case TYPE_INDUCTOR: {
1092 if (inductor) {
1094 double reativePower = data.reactivePower;
1095
1096 bool busParentOnline = false;
1098 if (parentList.size() == 1) {
1099 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
1100 if (busParent)
1101 busParentOnline = busParent->GetElectricalData().isConnected;
1102 }
1103
1104 if (!inductor->
IsOnline() || !busParentOnline)
1105 reativePower = 0.0;
1106 else {
1107 std::complex<double> v =
1108 static_cast<Bus*
>(inductor->
GetParentList()[0])->GetElectricalData().voltage;
1109 reativePower *= std::pow(std::abs(v), 2);
1110 }
1111 switch (m_dataType) {
1112 case DATA_NAME: {
1113 SetText(data.name);
1114 } break;
1115 case DATA_REACTIVE_POWER: {
1116 switch (m_unit) {
1118 SetText(wxString::FromDouble(reativePower, m_decimalPlaces) + " p.u.");
1119 }break;
1121 SetText(wxString::FromDouble(reativePower * systemPowerBase, m_decimalPlaces) + " var");
1122 }break;
1124 SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e3, m_decimalPlaces) +
1125 " kvar");
1126 }break;
1128 SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e6, m_decimalPlaces) +
1129 " Mvar");
1130 } break;
1131 default:
1132 break;
1133 }
1134 } break;
1135 default:
1136 break;
1137 }
1138 }
1139 } break;
1140 case TYPE_HARMCURRENT: {
1142 if (harmCurrent) {
1143 auto data = harmCurrent->GetElectricalData();
1144 switch (m_dataType) {
1145 case DATA_NAME: {
1146 SetText(data.name);
1147 } break;
1148 default:
1149 break;
1150 }
1151 }
1152 } break;
1153 }
1154}
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.