275{
276 switch (m_elementTypeText) {
277 case TYPE_NONE:
278 SetText(m_text);
279 break;
280 case TYPE_BUS: {
281 Bus* bus =
static_cast<Bus*
>(m_element);
282 if (bus) {
284 double baseVoltage = data.nominalVoltage;
286 double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
287
288 switch (m_dataType) {
289 case DATA_NAME: {
290 SetText(bus->GetElectricalData().name);
291 } break;
292 case DATA_VOLTAGE: {
293 double voltage = std::abs(data.voltage);
294 switch (m_unit) {
296 SetText(wxString::FromDouble(voltage, m_decimalPlaces) + " p.u.");
297 } break;
299 SetText(wxString::FromDouble(voltage * baseVoltage, m_decimalPlaces) + " V");
300 } break;
302 SetText(wxString::FromDouble(voltage * baseVoltage / 1e3, m_decimalPlaces) + " kV");
303 } break;
304 default:
305 break;
306 }
307 } break;
308 case DATA_ANGLE: {
309 double angle = std::arg(data.voltage);
310 switch (m_unit) {
312 SetText(wxString::FromDouble(angle, m_decimalPlaces) + " rad");
313 } break;
315 SetText(wxString::FromDouble(wxRadToDeg(angle), m_decimalPlaces) + (wxString)L'\u00B0');
316 } break;
317 default:
318 break;
319 }
320 } break;
321 case DATA_SC_CURRENT: {
322 double faultCurrent[3] = { std::abs(data.faultCurrent[0]), std::abs(data.faultCurrent[1]),
323 std::abs(data.faultCurrent[2]) };
324 switch (m_unit) {
326 wxString str =
327 "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
328 str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
329 str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
330 SetText(str);
331 } break;
333 wxString str =
334 "Ia = " + wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) +
335 " A";
336 str += "\nIb = " +
337 wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
338 str += "\nIc = " +
339 wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
340 SetText(str);
341 } break;
343 wxString str =
344 "Ia = " +
345 wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
346 str += "\nIb = " +
347 wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) +
348 " kA";
349 str += "\nIc = " +
350 wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) +
351 " kA";
352 SetText(str);
353 } break;
354 default:
355 break;
356 }
357 } break;
358 case DATA_SC_VOLTAGE: {
359 double faultVoltage[3] = { std::abs(data.faultVoltage[0]), std::abs(data.faultVoltage[1]),
360 std::abs(data.faultVoltage[2]) };
361 switch (m_unit) {
363 wxString str =
364 "Va = " + wxString::FromDouble(faultVoltage[0], m_decimalPlaces) + " p.u.";
365 str += "\nVb = " + wxString::FromDouble(faultVoltage[1], m_decimalPlaces) + " p.u.";
366 str += "\nVc = " + wxString::FromDouble(faultVoltage[2], m_decimalPlaces) + " p.u.";
367 SetText(str);
368 } break;
370 wxString str =
371 "Va = " + wxString::FromDouble(faultVoltage[0] * baseVoltage, m_decimalPlaces) +
372 " V";
373 str += "\nVb = " +
374 wxString::FromDouble(faultVoltage[1] * baseVoltage, m_decimalPlaces) + " V";
375 str += "\nVc = " +
376 wxString::FromDouble(faultVoltage[2] * baseVoltage, m_decimalPlaces) + " V";
377 SetText(str);
378 } break;
380 wxString str =
381 "Va = " +
382 wxString::FromDouble(faultVoltage[0] * baseVoltage / 1e3, m_decimalPlaces) + " kV";
383 str += "\nVb = " +
384 wxString::FromDouble(faultVoltage[1] * baseVoltage / 1e3, m_decimalPlaces) +
385 " kV";
386 str += "\nVc = " +
387 wxString::FromDouble(faultVoltage[2] * baseVoltage / 1e3, m_decimalPlaces) +
388 " kV";
389 SetText(str);
390 } break;
391 default:
392 break;
393 }
394 } break;
395 case DATA_SC_POWER: {
396 double scPower = data.scPower;
397 if (!data.isConnected) scPower = 0.0;
398 switch (m_unit) {
400 SetText(wxString::FromDouble(scPower, m_decimalPlaces) + " p.u.");
401 } break;
403 SetText(wxString::FromDouble(scPower * systemPowerBase, m_decimalPlaces) + " VA");
404 } break;
406 SetText(wxString::FromDouble(scPower * systemPowerBase / 1e3, m_decimalPlaces) +
407 " kVA");
408 } break;
410 SetText(wxString::FromDouble(scPower * systemPowerBase / 1e6, m_decimalPlaces) +
411 " MVA");
412 } break;
413 default:
414 break;
415 }
416 } break;
417 case DATA_PQ_THD: {
418 SetText(_("THD = ") + wxString::FromDouble(data.thd, m_decimalPlaces) + "%");
419 } break;
420 default:
421 break;
422 }
423 }
424 } break;
425 case TYPE_SYNC_GENERATOR: {
427 if (syncGenerator) {
429 double baseVoltage = syncGenerator->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
430 double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
431 bool busParentOnline = false;
433 if (parentList.size() == 1) {
434 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
435 if (busParent) busParentOnline = busParent->GetElectricalData().isConnected;
436 }
437 switch (m_dataType) {
438 case DATA_NAME: {
439 SetText(data.name);
440 } break;
441 case DATA_ACTIVE_POWER: {
442 double activePower = data.activePower;
443 if (!syncGenerator->
IsOnline() || !busParentOnline) activePower = 0.0;
444 switch (m_unit) {
446 SetText(wxString::FromDouble(activePower, m_decimalPlaces) + " p.u.");
447 } break;
449 SetText(wxString::FromDouble(activePower * systemPowerBase, m_decimalPlaces) + " W");
450 } break;
452 SetText(wxString::FromDouble(activePower * systemPowerBase / 1e3, m_decimalPlaces) +
453 " kW");
454 } break;
456 SetText(wxString::FromDouble(activePower * systemPowerBase / 1e6, m_decimalPlaces) +
457 " MW");
458 } break;
459 default:
460 break;
461 }
462 } break;
463 case DATA_REACTIVE_POWER: {
464 double reactivePower = data.reactivePower;
465 if (!syncGenerator->
IsOnline() || !busParentOnline) reactivePower = 0.0;
466 switch (m_unit) {
468 SetText(wxString::FromDouble(reactivePower, m_decimalPlaces) + " p.u.");
469 } break;
471 SetText(wxString::FromDouble(reactivePower * systemPowerBase, m_decimalPlaces) +
472 " var");
473 } break;
475 SetText(wxString::FromDouble(reactivePower * systemPowerBase / 1e3, m_decimalPlaces) +
476 " kvar");
477 } break;
479 SetText(wxString::FromDouble(reactivePower * systemPowerBase / 1e6, m_decimalPlaces) +
480 " Mvar");
481 } break;
482 default:
483 break;
484 }
485 } break;
486 case DATA_SC_CURRENT: {
487 double faultCurrent[3] = { std::abs(data.faultCurrent[0]), std::abs(data.faultCurrent[1]),
488 std::abs(data.faultCurrent[2]) };
489 switch (m_unit) {
491 wxString str =
492 "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
493 str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
494 str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
495 SetText(str);
496 } break;
498 wxString str =
499 "Ia = " + wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) +
500 " A";
501 str += "\nIb = " +
502 wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
503 str += "\nIc = " +
504 wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
505 SetText(str);
506 } break;
508 wxString str =
509 "Ia = " +
510 wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
511 str += "\nIb = " +
512 wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) +
513 " kA";
514 str += "\nIc = " +
515 wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) +
516 " kA";
517 SetText(str);
518 } break;
519 default:
520 break;
521 }
522 } break;
523 default:
524 break;
525 }
526 }
527 } break;
528 case TYPE_LINE: {
529 Line* line =
static_cast<Line*
>(m_element);
530 if (line) {
532 double baseVoltage = data.nominalVoltage;
534 double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
535 bool busParentOnline = false;
537 if (parentList.size() == 2) {
538 Bus* busParent1 =
dynamic_cast<Bus*
>(parentList[0]);
539 Bus* busParent2 =
dynamic_cast<Bus*
>(parentList[1]);
540 if (busParent1 && busParent2) {
541 if (busParent1->GetElectricalData().isConnected && busParent1->GetElectricalData().isConnected)
542 busParentOnline = true;
543 }
544 }
545 switch (m_dataType) {
546 case DATA_NAME: {
547 SetText(data.name);
548 } break;
549 case DATA_PF_ACTIVE: {
550 double activePF = std::real(data.powerFlow[m_direction]);
551 if (!line->
IsOnline() || !busParentOnline) activePF = 0.0;
552 switch (m_unit) {
554 SetText(wxString::FromDouble(activePF, m_decimalPlaces) + " p.u.");
555 } break;
557 SetText(wxString::FromDouble(activePF * systemPowerBase, m_decimalPlaces) + " W");
558 } break;
560 SetText(wxString::FromDouble(activePF * systemPowerBase / 1e3, m_decimalPlaces) +
561 " kW");
562 } break;
564 SetText(wxString::FromDouble(activePF * systemPowerBase / 1e6, m_decimalPlaces) +
565 " MW");
566 } break;
567 default:
568 break;
569 }
570 } break;
571 case DATA_PF_REACTIVE: {
572 double reactivePF = std::imag(data.powerFlow[m_direction]);
573 if (!line->
IsOnline() || !busParentOnline) reactivePF = 0.0;
574 switch (m_unit) {
576 SetText(wxString::FromDouble(reactivePF, m_decimalPlaces) + " p.u.");
577 } break;
579 SetText(wxString::FromDouble(reactivePF * systemPowerBase, m_decimalPlaces) + " var");
580 } break;
582 SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e3, m_decimalPlaces) +
583 " kvar");
584 } break;
586 SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e6, m_decimalPlaces) +
587 " Mvar");
588 } break;
589 default:
590 break;
591 }
592 } break;
593 case DATA_PF_LOSSES: {
594 double losses = std::abs(std::real(data.powerFlow[0]) + std::real(data.powerFlow[1]));
595 if (!line->
IsOnline() || !busParentOnline) losses = 0.0;
596 switch (m_unit) {
598 SetText(wxString::FromDouble(losses, m_decimalPlaces) + " p.u.");
599 } break;
601 SetText(wxString::FromDouble(losses * systemPowerBase, m_decimalPlaces) + " W");
602 } break;
604 SetText(wxString::FromDouble(losses * systemPowerBase / 1e3, m_decimalPlaces) + " kW");
605 } break;
607 SetText(wxString::FromDouble(losses * systemPowerBase / 1e6, m_decimalPlaces) + " MW");
608 } break;
609 default:
610 break;
611 }
612 } break;
613 case DATA_PF_CURRENT: {
614 double current = std::abs(data.current[m_direction]);
615 if (!line->
IsOnline() || !busParentOnline) current = 0.0;
616 switch (m_unit) {
618 SetText(wxString::FromDouble(current, m_decimalPlaces) + " p.u.");
619 } break;
621 SetText(wxString::FromDouble(current * baseCurrent, m_decimalPlaces) + " A");
622 } break;
624 SetText(wxString::FromDouble(current * baseCurrent / 1e3, m_decimalPlaces) + " kA");
625 } break;
626 default:
627 break;
628 }
629 } break;
630 case DATA_SC_CURRENT: {
631 double faultCurrent[3] = { std::abs(data.faultCurrent[m_direction][0]),
632 std::abs(data.faultCurrent[m_direction][1]),
633 std::abs(data.faultCurrent[m_direction][2]) };
634 if (!line->
IsOnline()) faultCurrent[0] = faultCurrent[1] = faultCurrent[2] = 0.0;
635 switch (m_unit) {
637 wxString str =
638 "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
639 str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
640 str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
641 SetText(str);
642 } break;
644 wxString str =
645 "Ia = " + wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) +
646 " A";
647 str += "\nIb = " +
648 wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
649 str += "\nIc = " +
650 wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
651 SetText(str);
652 } break;
654 wxString str =
655 "Ia = " +
656 wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
657 str += "\nIb = " +
658 wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) +
659 " kA";
660 str += "\nIc = " +
661 wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) +
662 " kA";
663 SetText(str);
664 } break;
665 default:
666 break;
667 }
668 } break;
669 default:
670 break;
671 }
672 }
673 } break;
674 case TYPE_TRANSFORMER: {
676 if (transformer) {
678 double baseVoltage[2] = { data.primaryNominalVoltage, data.secondaryNominalVoltage };
679 bool busParentOnline = false;
681 if (parentList.size() == 2) {
682 Bus* busParent1 =
dynamic_cast<Bus*
>(parentList[0]);
683 Bus* busParent2 =
dynamic_cast<Bus*
>(parentList[1]);
684 if (busParent1 && busParent2) {
685 if (busParent1->GetElectricalData().isConnected && busParent1->GetElectricalData().isConnected)
686 busParentOnline = true;
687 }
688 }
689
692
693 double baseCurrent[2] = { systemPowerBase / (std::sqrt(3.0) * baseVoltage[0]),
694 systemPowerBase / (std::sqrt(3.0) * baseVoltage[1]) };
695 switch (m_dataType) {
696 case DATA_NAME: {
697 SetText(data.name);
698 } break;
699 case DATA_PF_ACTIVE: {
700 double activePF = std::real(data.powerFlow[m_direction]);
701 if (!transformer->
IsOnline() || !busParentOnline) activePF = 0.0;
702 switch (m_unit) {
704 SetText(wxString::FromDouble(activePF, m_decimalPlaces) + " p.u.");
705 } break;
707 SetText(wxString::FromDouble(activePF * systemPowerBase, m_decimalPlaces) + " W");
708 } break;
710 SetText(wxString::FromDouble(activePF * systemPowerBase / 1e3, m_decimalPlaces) +
711 " kW");
712 } break;
714 SetText(wxString::FromDouble(activePF * systemPowerBase / 1e6, m_decimalPlaces) +
715 " MW");
716 } break;
717 default:
718 break;
719 }
720 } break;
721 case DATA_PF_REACTIVE: {
722 double reactivePF = std::imag(data.powerFlow[m_direction]);
723 if (!transformer->
IsOnline() || !busParentOnline) reactivePF = 0.0;
724 switch (m_unit) {
726 SetText(wxString::FromDouble(reactivePF, m_decimalPlaces) + " p.u.");
727 } break;
729 SetText(wxString::FromDouble(reactivePF * systemPowerBase, m_decimalPlaces) + " var");
730 } break;
732 SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e3, m_decimalPlaces) +
733 " kvar");
734 } break;
736 SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e6, m_decimalPlaces) +
737 " Mvar");
738 } break;
739 default:
740 break;
741 }
742 } break;
743 case DATA_PF_LOSSES: {
744 double losses = std::abs(std::real(data.powerFlow[0]) + std::real(data.powerFlow[1]));
745 if (!transformer->
IsOnline() || !busParentOnline) losses = 0.0;
746 switch (m_unit) {
748 SetText(wxString::FromDouble(losses, m_decimalPlaces) + " p.u.");
749 } break;
751 SetText(wxString::FromDouble(losses * systemPowerBase, m_decimalPlaces) + " W");
752 } break;
754 SetText(wxString::FromDouble(losses * systemPowerBase / 1e3, m_decimalPlaces) + " kW");
755 } break;
757 SetText(wxString::FromDouble(losses * systemPowerBase / 1e6, m_decimalPlaces) + " MW");
758 } break;
759 default:
760 break;
761 }
762 } break;
763 case DATA_PF_CURRENT: {
764 double current = std::abs(data.current[m_direction]);
765 if (!transformer->
IsOnline() || !busParentOnline) current = 0.0;
766 switch (m_unit) {
768 SetText(wxString::FromDouble(current, m_decimalPlaces) + " p.u.");
769 } break;
771 SetText(wxString::FromDouble(current * baseCurrent[m_direction], m_decimalPlaces) +
772 " A");
773 } break;
775 SetText(
776 wxString::FromDouble(current * baseCurrent[m_direction] / 1e3, m_decimalPlaces) +
777 " kA");
778 } break;
779 default:
780 break;
781 }
782 } break;
783 case DATA_SC_CURRENT: {
784 double faultCurrent[3] = { std::abs(data.faultCurrent[m_direction][0]),
785 std::abs(data.faultCurrent[m_direction][1]),
786 std::abs(data.faultCurrent[m_direction][2]) };
787 if (!transformer->
IsOnline()) faultCurrent[0] = faultCurrent[1] = faultCurrent[2] = 0.0;
788 switch (m_unit) {
790 wxString str =
791 "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
792 str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
793 str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
794 SetText(str);
795 } break;
797 wxString str =
798 "Ia = " +
799 wxString::FromDouble(faultCurrent[0] * baseCurrent[m_direction], m_decimalPlaces) +
800 " A";
801 str +=
802 "\nIb = " +
803 wxString::FromDouble(faultCurrent[1] * baseCurrent[m_direction], m_decimalPlaces) +
804 " A";
805 str +=
806 "\nIc = " +
807 wxString::FromDouble(faultCurrent[2] * baseCurrent[m_direction], m_decimalPlaces) +
808 " A";
809 SetText(str);
810 } break;
812 wxString str = "Ia = " +
813 wxString::FromDouble(faultCurrent[0] * baseCurrent[m_direction] / 1e3,
814 m_decimalPlaces) +
815 " kA";
816 str += "\nIb = " +
817 wxString::FromDouble(faultCurrent[1] * baseCurrent[m_direction] / 1e3,
818 m_decimalPlaces) +
819 " kA";
820 str += "\nIc = " +
821 wxString::FromDouble(faultCurrent[2] * baseCurrent[m_direction] / 1e3,
822 m_decimalPlaces) +
823 " kA";
824 SetText(str);
825 } break;
826 default:
827 break;
828 }
829 } break;
830 default:
831 break;
832 }
833 }
834 } break;
835 case TYPE_LOAD: {
836 Load* load =
static_cast<Load*
>(m_element);
837 if (load) {
839 std::complex<double> sPower(data.activePower, data.reactivePower);
840 if (data.loadType == CONST_IMPEDANCE && load->
IsOnline()) {
841 std::complex<double> v =
static_cast<Bus*
>(load->
GetParentList()[0])->GetElectricalData().voltage;
842 sPower = std::pow(std::abs(v), 2) * sPower;
843 }
844 bool busParentOnline = false;
846 if (parentList.size() == 1) {
847 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
848 if (busParent)
849 busParentOnline = busParent->GetElectricalData().isConnected;
850 }
851
852 if (!load->
IsOnline() || !busParentOnline) sPower = std::complex<double>(0.0, 0.0);
853 switch (m_dataType) {
854 case DATA_NAME: {
855 SetText(data.name);
856 } break;
857 case DATA_ACTIVE_POWER: {
858 switch (m_unit) {
860 SetText(wxString::FromDouble(sPower.real(), m_decimalPlaces) + " p.u.");
861 } break;
863 SetText(wxString::FromDouble(sPower.real() * systemPowerBase, m_decimalPlaces) + " W");
864 } break;
866 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e3, m_decimalPlaces) +
867 " kW");
868 } break;
870 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e6, m_decimalPlaces) +
871 " MW");
872 } break;
873 default:
874 break;
875 }
876 } break;
877 case DATA_REACTIVE_POWER: {
878 switch (m_unit) {
880 SetText(wxString::FromDouble(sPower.imag(), m_decimalPlaces) + " p.u.");
881 } break;
883 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase, m_decimalPlaces) +
884 " var");
885 } break;
887 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e3, m_decimalPlaces) +
888 " kvar");
889 } break;
891 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e6, m_decimalPlaces) +
892 " Mvar");
893 } break;
894 default:
895 break;
896 }
897 } break;
898 default:
899 break;
900 }
901 }
902 } break;
903 case TYPE_SYNC_MOTOR: {
905
906 if (syncMotor) {
908 bool busParentOnline = false;
910 if (parentList.size() == 1) {
911 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
912 if (busParent)
913 busParentOnline = busParent->GetElectricalData().isConnected;
914 }
915 std::complex<double> sPower(data.activePower, data.reactivePower);
916 if (!syncMotor->
IsOnline() || !busParentOnline) sPower = std::complex<double>(0.0, 0.0);
917 switch (m_dataType) {
918 case DATA_NAME: {
919 SetText(data.name);
920 } break;
921 case DATA_ACTIVE_POWER: {
922 switch (m_unit) {
924 SetText(wxString::FromDouble(sPower.real(), m_decimalPlaces) + " p.u.");
925 } break;
927 SetText(wxString::FromDouble(sPower.real() * systemPowerBase, m_decimalPlaces) + " W");
928 } break;
930 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e3, m_decimalPlaces) +
931 " kW");
932 } break;
934 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e6, m_decimalPlaces) +
935 " MW");
936 } break;
937 default:
938 break;
939 }
940 } break;
941 case DATA_REACTIVE_POWER: {
942 switch (m_unit) {
944 SetText(wxString::FromDouble(sPower.imag(), m_decimalPlaces) + " p.u.");
945 } break;
947 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase, m_decimalPlaces) +
948 " var");
949 } break;
951 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e3, m_decimalPlaces) +
952 " kvar");
953 } break;
955 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e6, m_decimalPlaces) +
956 " Mvar");
957 } break;
958 default:
959 break;
960 }
961 } break;
962 default:
963 break;
964 }
965 }
966 } break;
967 case TYPE_IND_MOTOR: {
969 if (indMotor) {
971 bool busParentOnline = false;
973 if (parentList.size() == 1) {
974 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
975 if (busParent)
976 busParentOnline = busParent->GetElectricalData().isConnected;
977 }
978 std::complex<double> sPower(data.activePower, data.reactivePower);
979 if (!indMotor->
IsOnline() || !busParentOnline) sPower = std::complex<double>(0.0, 0.0);
980 switch (m_dataType) {
981 case DATA_NAME: {
982 SetText(data.name);
983 } break;
984 case DATA_ACTIVE_POWER: {
985 switch (m_unit) {
987 SetText(wxString::FromDouble(sPower.real(), m_decimalPlaces) + " p.u.");
988 } break;
990 SetText(wxString::FromDouble(sPower.real() * systemPowerBase, m_decimalPlaces) + " W");
991 } break;
993 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e3, m_decimalPlaces) +
994 " kW");
995 } break;
997 SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e6, m_decimalPlaces) +
998 " MW");
999 } break;
1000 default:
1001 break;
1002 }
1003 } break;
1004 case DATA_REACTIVE_POWER: {
1005 switch (m_unit) {
1007 SetText(wxString::FromDouble(sPower.imag(), m_decimalPlaces) + " p.u.");
1008 } break;
1010 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase, m_decimalPlaces) +
1011 " var");
1012 } break;
1014 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e3, m_decimalPlaces) +
1015 " kvar");
1016 } break;
1018 SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e6, m_decimalPlaces) +
1019 " Mvar");
1020 }break;
1021 default:
1022 break;
1023 }
1024 } break;
1025 default:
1026 break;
1027 }
1028 }
1029 } break;
1030 case TYPE_CAPACITOR: {
1032 if (capacitor) {
1034 double reativePower = data.reactivePower;
1035
1036 bool busParentOnline = false;
1038 if (parentList.size() == 1) {
1039 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
1040 if (busParent)
1041 busParentOnline = busParent->GetElectricalData().isConnected;
1042 }
1043
1044 if (!capacitor->
IsOnline() || !busParentOnline)
1045 reativePower = 0.0;
1046 else {
1047 std::complex<double> v =
1048 static_cast<Bus*
>(capacitor->
GetParentList()[0])->GetElectricalData().voltage;
1049 reativePower *= std::pow(std::abs(v), 2);
1050 }
1051 switch (m_dataType) {
1052 case DATA_NAME: {
1053 SetText(data.name);
1054 } break;
1055 case DATA_REACTIVE_POWER: {
1056 switch (m_unit) {
1058 SetText(wxString::FromDouble(reativePower, m_decimalPlaces) + " p.u.");
1059 }break;
1061 SetText(wxString::FromDouble(reativePower * systemPowerBase, m_decimalPlaces) + " var");
1062 }break;
1064 SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e3, m_decimalPlaces) +
1065 " kvar");
1066 }break;
1068 SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e6, m_decimalPlaces) +
1069 " Mvar");
1070 }break;
1071 default:
1072 break;
1073 }
1074 } break;
1075 default:
1076 break;
1077 }
1078 }
1079 } break;
1080 case TYPE_INDUCTOR: {
1082 if (inductor) {
1084 double reativePower = data.reactivePower;
1085
1086 bool busParentOnline = false;
1088 if (parentList.size() == 1) {
1089 Bus* busParent =
dynamic_cast<Bus*
>(parentList[0]);
1090 if (busParent)
1091 busParentOnline = busParent->GetElectricalData().isConnected;
1092 }
1093
1094 if (!inductor->
IsOnline() || !busParentOnline)
1095 reativePower = 0.0;
1096 else {
1097 std::complex<double> v =
1098 static_cast<Bus*
>(inductor->
GetParentList()[0])->GetElectricalData().voltage;
1099 reativePower *= std::pow(std::abs(v), 2);
1100 }
1101 switch (m_dataType) {
1102 case DATA_NAME: {
1103 SetText(data.name);
1104 } break;
1105 case DATA_REACTIVE_POWER: {
1106 switch (m_unit) {
1108 SetText(wxString::FromDouble(reativePower, m_decimalPlaces) + " p.u.");
1109 }break;
1111 SetText(wxString::FromDouble(reativePower * systemPowerBase, m_decimalPlaces) + " var");
1112 }break;
1114 SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e3, m_decimalPlaces) +
1115 " kvar");
1116 }break;
1118 SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e6, m_decimalPlaces) +
1119 " Mvar");
1120 } break;
1121 default:
1122 break;
1123 }
1124 } break;
1125 default:
1126 break;
1127 }
1128 }
1129 } break;
1130 case TYPE_HARMCURRENT: {
1132 if (harmCurrent) {
1133 auto data = harmCurrent->GetElectricalData();
1134 switch (m_dataType) {
1135 case DATA_NAME: {
1136 SetText(data.name);
1137 } break;
1138 default:
1139 break;
1140 }
1141 }
1142 } break;
1143 }
1144}
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.