/* * @(#)IEEECDF_ODMTest.java * * Copyright (C) 2008 www.interpss.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * @Author Stephen Hou * @Version 1.0 * @Date 02/01/2008 * * Revision History * ================ * */ package org.ieee.odm.psse; import static org.junit.Assert.assertTrue; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; import org.ieee.odm.adapter.IODMAdapter; import org.ieee.odm.adapter.psse.PSSEAdapter; import org.ieee.odm.adapter.psse.PSSEAdapter.PsseVersion; import org.ieee.odm.model.aclf.AclfModelParser; import org.ieee.odm.model.aclf.AclfParserHelper; import org.ieee.odm.schema.BranchBusSideEnumType; import org.ieee.odm.schema.LFGenCodeEnumType; import org.ieee.odm.schema.LineBranchXmlType; import org.ieee.odm.schema.LoadflowBusXmlType; import org.ieee.odm.schema.LoadflowGenDataXmlType; import org.ieee.odm.schema.LoadflowNetXmlType; import org.ieee.odm.schema.XfrBranchXmlType; import org.junit.Test; public class PSSEV30_ODMTest { @Test public void testCase1() throws Exception { final LogManager logMgr = LogManager.getLogManager(); Logger logger = Logger.getLogger("IEEE ODM Logger"); logger.setLevel(Level.INFO); logMgr.addLogger(logger); IODMAdapter adapter = new PSSEAdapter(PsseVersion.PSSE_30); assertTrue(adapter.parseInputFile("testdata/psse/PSSE_5Bus_Test.raw")); // System.out.println(adapter.getModel().toString()); AclfModelParser parser = (AclfModelParser)adapter.getModel(); parser.stdout(); LoadflowNetXmlType net = parser.getNet(); assertTrue(net.getBasePower().getValue() == 100.0); /* <aclfBus id="Bus1" areaNumber="1" zoneNumber="1" number="1" offLine="false" name="UNO-U1 "> <ownerList id="1"> <ownership unit="PU" value="1.0"/> </ownerList> <baseVoltage unit="KV" value="13.8"/> <voltage unit="PU" value="1.0"/> <angle unit="DEG" value="0.0"/> <genData code="Swing"> <contributeGen id="1" offLine="false" name="Gen:1(1)"> <desc>PSSE Generator 1 at Bus 1</desc> <ownerList id="1"> <ownership unit="PU" value="1.0"/> </ownerList> <power unit="MVA" re="22.546" im="15.854"/> <desiredVoltage unit="PU" value="1.0"/> <desiredAngle unit="RAD" value="0.0"/> <qLimit unit="MVAR" max="35.0" min="-35.0"/> <pLimit unit="MW" max="45.0" min="15.0"/> <mvaBase unit="MVA" value="68.24"/> <sourceZ unit="PU" re="0.0" im="0.229"/> <mvarVControlParticipateFactor>1.0</mvarVControlParticipateFactor> </contributeGen> </genData> <loadData/> <shuntYData> <equivY im="0.0"/> </shuntYData> </aclfBus> */ LoadflowBusXmlType bus = parser.getBus("Bus1"); assertTrue(bus.getBaseVoltage().getValue() == 13.8); LoadflowGenDataXmlType defaultGen = AclfParserHelper.getDefaultGen(bus.getGenData()); assertTrue(bus.getGenData().getCode() == LFGenCodeEnumType.SWING); assertTrue(defaultGen.getDesiredVoltage().getValue() == 1.0); LoadflowGenDataXmlType Gen1= bus.getGenData().getContributeGen().get(0).getValue(); assertTrue(Gen1.getPLimit().getMax() == 45.0); assertTrue(Gen1.getPLimit().getMin() == 15.0); assertTrue(Gen1.getQLimit().getMax() == 35.0); assertTrue(Gen1.getQLimit().getMin() == -35.0); /* <aclfBus id="Bus2" areaNumber="1" zoneNumber="1" number="2" offLine="false" name="UNO-230 "> <ownerList id="1"> <ownership unit="PU" value="1.0"/> </ownerList> <baseVoltage unit="KV" value="230.0"/> <voltage unit="PU" value="0.97352"/> <angle unit="DEG" value="-2.2818"/> <genData code="NoneGen"/> <loadData/> <shuntYData> <equivY im="0.0"/> </shuntYData> </aclfBus> */ bus = parser.getBus("Bus2"); assertTrue(bus.getLoadData().getContributeLoad().size() == 0); assertTrue(bus.getGenData().getCode() == LFGenCodeEnumType.NONE_GEN); /* <aclfBus id="Bus5" areaNumber="1" zoneNumber="1" number="5" offLine="false" name="UNO-U2 "> <ownerList id="1"> <ownership unit="PU" value="1.0"/> </ownerList> <baseVoltage unit="KV" value="13.8"/> <voltage unit="PU" value="1.0"/> <angle unit="DEG" value="-0.0047"/> <genData code="PV"> <contributeGen id="1" offLine="false" name="Gen:1(5)"> <desc>PSSE Generator 1 at Bus 5</desc> <ownerList id="1"> <ownership unit="PU" value="1.0"/> </ownerList> <power unit="MVA" re="22.5" im="15.852"/> <desiredVoltage unit="PU" value="1.0"/> <desiredAngle unit="RAD" value="0.0"/> <qLimit unit="MVAR" max="35.0" min="-35.0"/> <pLimit unit="MW" max="45.0" min="15.0"/> <mvaBase unit="MVA" value="68.24"/> <sourceZ unit="PU" re="0.0" im="0.229"/> <mvarVControlParticipateFactor>1.0</mvarVControlParticipateFactor> </contributeGen> </genData> <loadData/> <shuntYData> <equivY im="0.0"/> </shuntYData> </aclfBus> */ bus = parser.getBus("Bus5"); assertTrue(bus.getGenData().getCode() == LFGenCodeEnumType.PV); Gen1= bus.getGenData().getContributeGen().get(0).getValue(); assertTrue(Gen1.getPower().getRe() == 22.5); assertTrue(Gen1.getPower().getIm() == 15.852); assertTrue(Gen1.getDesiredVoltage().getValue() == 1.0); assertTrue(Gen1.getPLimit().getMax() == 45.0); assertTrue(Gen1.getPLimit().getMin() == 15.0); assertTrue(Gen1.getQLimit().getMax() == 35.0); assertTrue(Gen1.getQLimit().getMin() == -35.0); /* <branchList> <branch id="Bus2_to_Bus3_cirId_1" circuitId="1" offLine="false"> <ownerList> <owner id="1" ownership="1.0"/> </ownerList> <fromBus idRef="Bus2"/> <toBus idRef="Bus3"/> <loadflowData code="Line"> <z re="0.0015" im="0.0085" unit="PU"/> <totalShuntY re="0.0" im="0.0164" unit="PU"/> <meterLocation>FromSide</meterLocation> <branchRatingLimit> <mva rating1="300.0" rating2="330.0" rating3="0.0" unit="MVA"/> </branchRatingLimit> </loadflowData> </branch> */ LineBranchXmlType line = parser.getLineBranch("Bus2", "Bus3", "1"); assertTrue(line.getZ().getRe() == 0.0015); assertTrue(line.getZ().getIm() == 0.0085); assertTrue(line.getTotalShuntY().getRe() == 0.0); assertTrue(line.getTotalShuntY().getIm() == 0.0164); assertTrue(line.getMeterLocation() == BranchBusSideEnumType.FROM_SIDE); assertTrue(line.getRatingLimit().getMva().getRating1() == 300.0); assertTrue(line.getRatingLimit().getMva().getRating2() == 330.0); assertTrue(line.getRatingLimit().getMva().getRating3() == 0.0); /* <branch id="Bus2_to_Bus1_cirId_1" circuitId="1" name="T1 " offLine="false"> <ownerList> <owner id="1" ownership="1.0"/> </ownerList> <fromBus idRef="Bus2"/> <toBus idRef="Bus1"/> <loadflowData code="Transformer"> <z re="0.0" im="0.17191" unit="PU"/> <fromTap value="1.0" unit="PU"/> <toTap value="1.0" unit="PU"/> <meterLocation>ToSide</meterLocation> <xfrInfo> <ratedPower value="100.0" unit="MVA"/> <dataOnSystemBase>true</dataOnSystemBase> </xfrInfo> <branchRatingLimit> <mva rating1="79.0" rating2="118.5" rating3="0.0" unit="MVA"/> </branchRatingLimit> </loadflowData> </branch> */ XfrBranchXmlType xfr = parser.getXfrBranch("Bus2", "Bus1", "1"); assertTrue(xfr.getZ().getRe() == 0.0); assertTrue(xfr.getZ().getIm() == 0.17191); assertTrue(xfr.getFromTurnRatio().getValue() == 1.0); assertTrue(xfr.getToTurnRatio().getValue() == 1.0); assertTrue(xfr.getMeterLocation() == BranchBusSideEnumType.TO_SIDE); assertTrue(xfr.getMeterLocation() == BranchBusSideEnumType.TO_SIDE); assertTrue(xfr.getXfrInfo().getRatedPower().getValue() == 100.0 ); assertTrue(xfr.getXfrInfo().isDataOnSystemBase()); assertTrue(xfr.getRatingLimit().getMva().getRating2() == 118.5); assertTrue(xfr.getRatingLimit().getMva().getRating3() == 0.0); } }