@@ -434,8 +434,13 @@ function _psse2pm_transformer!(pm_data::Dict, pti_data::Dict, import_all::Bool)
434
434
else
435
435
br_r, br_x = transformer[" R1-2" ], transformer[" X1-2" ]
436
436
end
437
- br_r *= (transformer[" NOMV1" ]^ 2 / _get_bus_value (transformer[" I" ], " base_kv" , pm_data)^ 2 ) * (pm_data[" baseMVA" ] / transformer[" SBASE1-2" ])
438
- br_x *= (transformer[" NOMV1" ]^ 2 / _get_bus_value (transformer[" I" ], " base_kv" , pm_data)^ 2 ) * (pm_data[" baseMVA" ] / transformer[" SBASE1-2" ])
437
+ if isapprox (transformer[" NOMV1" ], 0.0 )
438
+ br_r *= (pm_data[" baseMVA" ] / transformer[" SBASE1-2" ])
439
+ br_x *= (pm_data[" baseMVA" ] / transformer[" SBASE1-2" ])
440
+ else
441
+ br_r *= (transformer[" NOMV1" ]^ 2 / _get_bus_value (transformer[" I" ], " base_kv" , pm_data)^ 2 ) * (pm_data[" baseMVA" ] / transformer[" SBASE1-2" ])
442
+ br_x *= (transformer[" NOMV1" ]^ 2 / _get_bus_value (transformer[" I" ], " base_kv" , pm_data)^ 2 ) * (pm_data[" baseMVA" ] / transformer[" SBASE1-2" ])
443
+ end
439
444
end
440
445
441
446
# Zeq scaling for tap2 (see eq (4.21b) in PROGRAM APPLICATION GUIDE 1 in PSSE installation folder)
@@ -448,8 +453,13 @@ function _psse2pm_transformer!(pm_data::Dict, pti_data::Dict, import_all::Bool)
448
453
br_r *= (transformer[" WINDV2" ]/ _get_bus_value (transformer[" J" ], " base_kv" , pm_data))^ 2
449
454
br_x *= (transformer[" WINDV2" ]/ _get_bus_value (transformer[" J" ], " base_kv" , pm_data))^ 2
450
455
else # "for off-nominal turns ratio in pu of nominal winding voltage, NOMV1, NOMV2 and NOMV3."
451
- br_r *= (transformer[" WINDV2" ]* (transformer[" NOMV2" ]/ _get_bus_value (transformer[" J" ], " base_kv" , pm_data)))^ 2
452
- br_x *= (transformer[" WINDV2" ]* (transformer[" NOMV2" ]/ _get_bus_value (transformer[" J" ], " base_kv" , pm_data)))^ 2
456
+ if isapprox (transformer[" NOMV2" ], 0.0 )
457
+ br_r *= transformer[" WINDV2" ]^ 2
458
+ br_x *= transformer[" WINDV2" ]^ 2
459
+ else
460
+ br_r *= (transformer[" WINDV2" ]* (transformer[" NOMV2" ]/ _get_bus_value (transformer[" J" ], " base_kv" , pm_data)))^ 2
461
+ br_x *= (transformer[" WINDV2" ]* (transformer[" NOMV2" ]/ _get_bus_value (transformer[" J" ], " base_kv" , pm_data)))^ 2
462
+ end
453
463
end
454
464
end
455
465
@@ -474,23 +484,31 @@ function _psse2pm_transformer!(pm_data::Dict, pti_data::Dict, import_all::Bool)
474
484
if sub_data[" rate_c" ] == 0.0
475
485
delete! (sub_data, " rate_c" )
476
486
end
477
-
487
+
478
488
if import_all
479
489
sub_data[" windv1" ] = transformer[" WINDV1" ]
480
490
sub_data[" windv2" ] = transformer[" WINDV2" ]
481
491
sub_data[" nomv1" ] = transformer[" NOMV1" ]
482
492
sub_data[" nomv2" ] = transformer[" NOMV2" ]
483
493
end
484
494
495
+ # Assumes CW = 1, namely, for off-nominal turns ratio in pu of windning bus base voltage
485
496
sub_data[" tap" ] = pop! (transformer, " WINDV1" ) / pop! (transformer, " WINDV2" )
486
497
sub_data[" shift" ] = pop! (transformer, " ANG1" )
487
498
488
499
# Unit Transformations
489
- if transformer[" CW" ] != 1 # NOT "for off-nominal turns ratio in pu of winding bus base voltage"
500
+ if transformer[" CW" ] == 1 # "for off-nominal turns ratio in pu of winding bus base voltage"
501
+ # do nothing
502
+ elseif transformer[" CW" ] == 2 # "for winding voltage in kv"
490
503
sub_data[" tap" ] *= _get_bus_value (transformer[" J" ], " base_kv" , pm_data) / _get_bus_value (transformer[" I" ], " base_kv" , pm_data)
491
- if transformer[" CW" ] == 3 # "for off-nominal turns ratio in pu of nominal winding voltage, NOMV1, NOMV2 and NOMV3."
492
- sub_data[" tap" ] *= transformer[" NOMV1" ] / transformer[" NOMV2" ]
504
+ elseif transformer[" CW" ] == 3 # "for off-nominal turns ratio in pu of nominal winding voltage, NOMV1, NOMV2 and NOMV3."
505
+ if ! iszero (transformer[" NOMV1" ]) && ! iszero (transformer[" NOMV2" ])
506
+ sub_data[" tap" ] *= (transformer[" NOMV1" ] / transformer[" NOMV2" ]) * (_get_bus_value (transformer[" J" ], " base_kv" , pm_data) / _get_bus_value (transformer[" I" ], " base_kv" , pm_data))
507
+ else
508
+ # do nothing
493
509
end
510
+ else
511
+ error (_LOGGER, " psse data parsing error, unsupported value for `CW` on transformer" )
494
512
end
495
513
496
514
if import_all
@@ -544,13 +562,29 @@ function _psse2pm_transformer!(pm_data::Dict, pti_data::Dict, import_all::Bool)
544
562
545
563
# Unit Transformations
546
564
if transformer[" CZ" ] != 1 # NOT "for resistance and reactance in pu on system MVA base and winding voltage base"
547
- br_r12 *= (transformer[" NOMV1" ] / _get_bus_value (bus_id1, " base_kv" , pm_data))^ 2 * (pm_data[" baseMVA" ] / transformer[" SBASE1-2" ])
548
- br_r23 *= (transformer[" NOMV2" ] / _get_bus_value (bus_id2, " base_kv" , pm_data))^ 2 * (pm_data[" baseMVA" ] / transformer[" SBASE2-3" ])
549
- br_r31 *= (transformer[" NOMV3" ] / _get_bus_value (bus_id3, " base_kv" , pm_data))^ 2 * (pm_data[" baseMVA" ] / transformer[" SBASE3-1" ])
565
+ if isapprox (transformer[" NOMV1" ], 0.0 )
566
+ br_r12 *= (pm_data[" baseMVA" ] / transformer[" SBASE1-2" ])
567
+ br_x12 *= (pm_data[" baseMVA" ] / transformer[" SBASE1-2" ])
568
+ else
569
+ br_r12 *= (transformer[" NOMV1" ] / _get_bus_value (bus_id1, " base_kv" , pm_data))^ 2 * (pm_data[" baseMVA" ] / transformer[" SBASE1-2" ])
570
+ br_x12 *= (transformer[" NOMV1" ] / _get_bus_value (bus_id1, " base_kv" , pm_data))^ 2 * (pm_data[" baseMVA" ] / transformer[" SBASE1-2" ])
571
+ end
550
572
551
- br_x12 *= (transformer[" NOMV1" ] / _get_bus_value (bus_id1, " base_kv" , pm_data))^ 2 * (pm_data[" baseMVA" ] / transformer[" SBASE1-2" ])
552
- br_x23 *= (transformer[" NOMV2" ] / _get_bus_value (bus_id2, " base_kv" , pm_data))^ 2 * (pm_data[" baseMVA" ] / transformer[" SBASE2-3" ])
553
- br_x31 *= (transformer[" NOMV3" ] / _get_bus_value (bus_id3, " base_kv" , pm_data))^ 2 * (pm_data[" baseMVA" ] / transformer[" SBASE3-1" ])
573
+ if isapprox (transformer[" NOMV2" ], 0.0 )
574
+ br_r23 *= (pm_data[" baseMVA" ] / transformer[" SBASE2-3" ])
575
+ br_x23 *= (pm_data[" baseMVA" ] / transformer[" SBASE2-3" ])
576
+ else
577
+ br_r23 *= (transformer[" NOMV2" ] / _get_bus_value (bus_id2, " base_kv" , pm_data))^ 2 * (pm_data[" baseMVA" ] / transformer[" SBASE2-3" ])
578
+ br_x23 *= (transformer[" NOMV2" ] / _get_bus_value (bus_id2, " base_kv" , pm_data))^ 2 * (pm_data[" baseMVA" ] / transformer[" SBASE2-3" ])
579
+ end
580
+
581
+ if isapprox (transformer[" NOMV3" ], 0.0 )
582
+ br_r31 *= (pm_data[" baseMVA" ] / transformer[" SBASE3-1" ])
583
+ br_x31 *= (pm_data[" baseMVA" ] / transformer[" SBASE3-1" ])
584
+ else
585
+ br_r31 *= (transformer[" NOMV3" ] / _get_bus_value (bus_id3, " base_kv" , pm_data))^ 2 * (pm_data[" baseMVA" ] / transformer[" SBASE3-1" ])
586
+ br_x31 *= (transformer[" NOMV3" ] / _get_bus_value (bus_id3, " base_kv" , pm_data))^ 2 * (pm_data[" baseMVA" ] / transformer[" SBASE3-1" ])
587
+ end
554
588
end
555
589
556
590
# See "Power System Stability and Control", ISBN: 0-07-035958-X, Eq. 6.72
@@ -600,11 +634,18 @@ function _psse2pm_transformer!(pm_data::Dict, pti_data::Dict, import_all::Bool)
600
634
sub_data[" shift" ] = pop! (transformer, " ANG$m " )
601
635
602
636
# Unit Transformations
603
- if transformer[" CW" ] != 1 # NOT "for off-nominal turns ratio in pu of winding bus base voltage"
637
+ if transformer[" CW" ] == 1 # "for off-nominal turns ratio in pu of winding bus base voltage"
638
+ # do nothing
639
+ elseif transformer[" CW" ] == 2 # "for winding voltage in kv"
604
640
sub_data[" tap" ] /= _get_bus_value (bus_id, " base_kv" , pm_data)
605
- if transformer[" CW" ] == 3 # "for off-nominal turns ratio in pu of nominal winding voltage, NOMV1, NOMV2 and NOMV3."
606
- sub_data[" tap" ] *= transformer[" NOMV$m " ]
641
+ elseif transformer[" CW" ] == 3 # "for off-nominal turns ratio in pu of nominal winding voltage, NOMV1, NOMV2 and NOMV3."
642
+ if ! iszero (transformer[" NOMV$m " ])
643
+ sub_data[" tap" ] *= transformer[" NOMV$m " ] / _get_bus_value (bus_id, " base_kv" , pm_data)
644
+ else
645
+ # do nothing
607
646
end
647
+ else
648
+ error (_LOGGER, " psse data parsing error, unsupported value for `CW` on transformer" )
608
649
end
609
650
610
651
if import_all
0 commit comments