Code specification
In this part, we would demonstrate the codes with more detail explanations.
Areas and Interchange
Here is sample codes about mapping areas and interchange data from BPA to ODM;
if(str.trim().startsWith("A")||str.trim().startsWith("AC")){ // read the "A" or "AC" card data;
PSSNetworkXmlType.AreaList.Area area=parser.addNewBaseCaseArea(); // add a new area record under areaList;
final String areaType=strAry[0];
if(!strAry[1].equals("")){
final String modCode=strAry[1];
}
String areaName="";
if(!strAry[2].equals("")){
areaName=strAry[2];
area.setAreaName(areaName); // use Java API to set the area name;
}
String slackBusId;
double ratedVoltage;
if(!strAry[3].equals("")){
slackBusId=strAry[3];
area.addNewSwingBusId().setName(slackBusId); // use Java API to set the slack bus Id;
}
if(!strAry[4].equals("")){
ratedVoltage =new Double(strAry[4]).doubleValue();
area.addNewRatedVoltage().setVoltage(ratedVoltage); // use Java API to set the rated voltage and unit;
area.getRatedVoltage().setUnit(VoltageXmlType.Unit.KV);
}
double exchangeMW=0.0;
if(!strAry[5].equals("")){
ODMData2XmlHelper.setPowerData(area.addNewTotalExchangePower(),
exchangeMW, 0, PowerXmlType.Unit.MVA); // set the interchanged MW between areas;
}
if(!strAry[6].trim().equals("")){ // set zones within each area;
area.addNewZoneList();
int Str6length=strAry[6].length();
final String[] s= new String[20];
int cnt=0, i=0;
while((!strAry[6].substring(i, i+2).equals(""))&& i+2<=Str6length){
s[cnt]=strAry[6].trim().substring(i, i+2);
PSSNetworkXmlType.AreaList.Area.ZoneList.Zone zone= area.getZoneList().addNewZone();
zone.setZoneName(s[cnt]);
if(i+2==Str6length){
break;
}
i=i+3;
cnt=cnt+1;
}
}
}
Bus
final String[] strAry = getBusDataFields(str, adapter); //get the original data in BPA format;
...............
...............
//Name
final String busName = strAry[3];
final String busId = strAry[3];
adapter.getLogger().fine("Bus data loaded, busName: " + busId);
busRec.setId(busId);
busRec.setName(busName); // use Java API to set the bus name
//basekv
double baseKv=100.0;
if(!strAry[4].equals("")){
baseKv= new Double(strAry[4]).doubleValue();
}
ODMData2XmlHelper.setVoltageData(busRec.addNewBaseVoltage(), baseKv, VoltageXmlType.Unit.KV);
// use Java API to set the base Voltage
if(loadMw != 0.0 || loadMvar != 0.0||pGen!=0.0||qGenOrQGenMax!=0.0
||vMinOrAngDeg!=0.0||pGenMax!=0.0){
LoadflowBusDataXmlType busData = busRec.addNewLoadflowBusData();
if (g != 0.0 || b != 0.0) {
ODMData2XmlHelper.setYData(busData.addNewShuntY(), g, b, // use Java API set G B
YXmlType.Unit.MHO);
}
// set load
if (loadMw != 0.0 || loadMvar != 0.0) {
ODMData2XmlHelper.setLoadData(busData,
LoadflowBusDataXmlType.LoadData.Code.CONST_P, loadMw,// use Java API set load
loadMvar, PowerXmlType.Unit.MVA);
}
if(busType==swingBus){ // convert swing bus data;
// set bus voltage
if(vpu!=0.0){
if(vpu>10){
vpu=vpu/1000;
}
ODMData2XmlHelper.setVoltageData(busData.addNewVoltage(), vpu,
VoltageXmlType.Unit.PU);
}
// set bus angle
ODMData2XmlHelper.setAngleData(busData.addNewAngle(), vMinOrAngDeg, // set bus angle
AngleXmlType.Unit.DEG);
//set gen data
if(pGen!=0.0||qGenOrQGenMax!=0.0){
ODMData2XmlHelper.setGenData(busData,
LoadflowBusDataXmlType.GenData.Code.SWING, pGen, 0.0, // use Java API set Generation MW and Mvar
PowerXmlType.Unit.MVA);
}
// set Q limit
if(qGenOrQGenMax!=0.0||qGenMin!=0.0){
ODMData2XmlHelper.setGenQLimitData(busData.getGenData(),
qGenOrQGenMax, qGenMin, GenDataXmlType.QGenLimit.QLimitUnit.MVAR); // use Java API set generator limits
}
// set P limit
if(pGenMax!=0.0){
if(busData.getGenData().getGen()
.getPGenLimit()==null){
busData.getGenData().getGen().addNewPGenLimit();
}
ODMData2XmlHelper.setLimitData(busData.getGenData().getGen()
.getPGenLimit().addNewPLimit(), pGenMax, 0);
}
}else if(busType==pqBus){ // convert pq bus data
if(pGen!=0.0||qGenOrQGenMax!=0.0){
ODMData2XmlHelper.setGenData(busData,
LoadflowBusDataXmlType.GenData.Code.PQ, pGen, qGenOrQGenMax,
PowerXmlType.Unit.MVA);
}
if(vpu!=0 ||vMinOrAngDeg!=0){
if(busData.getGenData()==null){
busData.addNewGenData().addNewGen().addNewVGenLimit();
}else if(busData.getGenData().getGen()==null){
busData.getGenData().addNewGen().addNewVGenLimit();
}else if(busData.getGenData().getGen().getVGenLimit()==null){
busData.getGenData().getGen().addNewVGenLimit();
}
busData.getGenData().getGen().getVGenLimit();
ODMData2XmlHelper.setLimitData(busData.getGenData().getGen().getVGenLimit() // set V limit
.addNewVLimit(), vpu, vMinOrAngDeg);
}
}else if(busType==pvBus){ // convert pv Bus data
// set bus voltage
if(vpu!=0.0){
if(vpu>10){
vpu=vpu/1000;
}
ODMData2XmlHelper.setVoltageData(busData.addNewVoltage(), vpu, // set bus voltage
VoltageXmlType.Unit.PU);
}
// set gen data
if(pGen!=0.0||qGenOrQGenMax!=0.0){
ODMData2XmlHelper.setGenData(busData,
LoadflowBusDataXmlType.GenData.Code.PV, pGen, 0.0,
PowerXmlType.Unit.MVA);
}
if(qGenOrQGenMax!=0.0||qGenMin!=0.0){
ODMData2XmlHelper.setGenQLimitData(busData.getGenData(),
qGenOrQGenMax, qGenMin, GenDataXmlType.QGenLimit.QLimitUnit.MVAR); // set Q limit
}
if(pGenMax!=0.0){
if(busData.getGenData().getGen()
.getPGenLimit()==null){
busData.getGenData().getGen()
.addNewPGenLimit();
}
ODMData2XmlHelper.setLimitData(busData.getGenData().getGen() // set P limit
.getPGenLimit().addNewPLimit(), pGenMax, 0);
}
}
//for BG and BX, controlled bus name and voltage
// desired bus voltage is specified in strAry[14], equals to vpu
final String controlledBus= strAry[16];
double controlledBusRatedVol=0.0;
if(!strAry[17].equals("")){
controlledBusRatedVol= new Double(strAry[17]).doubleValue();
}
if(strAry[0].equals("BG")||strAry[0].equals("BX")){
if(!controlledBus.equals("")){
busData.getGenData().getGen().addNewDesiredRemoteVoltage(); // set remote controled bus data
busData.getGenData().getGen().getDesiredRemoteVoltage().
getRemoteBus().setIdRef(controlledBus);
ODMData2XmlHelper.setVoltageData(busData.getGenData().getGen()
.getDesiredRemoteVoltage().addNewDesiredVoltage(),
vpu, VoltageXmlType.Unit.PU);
}
}
}
Branch
if(str.startsWith("L")){ //processing symetry branch data
final String[] strAry = getBranchDataFields(str,adapter);
// symetry branch
final String branchType=strAry[0];
final String modCode =strAry[1];
final String owner=strAry[2];
final String fid = strAry[3];
final String tid = strAry[6];
adapter.getLogger().fine("Branch data loaded, from-Bus, to-Bus: " + fid + ", " + tid);
if(!fid.equals("")){
branchRec.addNewFromBus().setIdRef(fid); //set "from" bus id
}
if(!tid.equals("")){
branchRec.addNewToBus().setIdRef(tid); // set "to" bus id
}
double fVol=0.0;
double tVol=0.0;
if(!strAry[4].equals("")){
fVol= new Double(strAry[4]).doubleValue(); // set "from" trun base voltage
}
if(!strAry[7].equals("")){
tVol= new Double(strAry[4]).doubleValue(); // set "to" turn base voltage
}
// measure location for power interchange, 1--from side, 2- to side
//set transfer power measured location in tie line data
int measureLocation=0;
if(!strAry[5].equals("")){ // specify the metered location, either at the from turn bus or the end turn bus
measureLocation= new Integer(strAry[5]).intValue();
try{
if(measureLocation==1){
PSSNetworkXmlType.TieLineList.Tieline tieLine=parser.addNewBaseCaseTieline();
// set tieline data
tieLine.addNewMeteredBus().setName(fid);
tieLine.addNewNonMeteredBus().setName(tid);
BusRecordXmlType busRecFrom=ODMData2XmlHelper.getBusRecord(fid, baseCaseNet);
busRecFrom.getZone();
PSSNetworkXmlType.AreaList.Area areaFrom=ODMData2XmlHelper.
getAreaRecordByZone(busRecFrom.getZone(), baseCaseNet);
tieLine.setMeteredArea(areaFrom.getAreaName());
BusRecordXmlType busRecTo=ODMData2XmlHelper.getBusRecord(tid, baseCaseNet);
busRecTo.getZone();
PSSNetworkXmlType.AreaList.Area areaTo=ODMData2XmlHelper.
getAreaRecordByZone(busRecTo.getZone(), baseCaseNet);
tieLine.setNonMeteredArea(areaTo.getAreaName());
// to do: set area number
}else{
PSSNetworkXmlType.TieLineList.Tieline tieLine=parser.addNewBaseCaseTieline();
tieLine.addNewMeteredBus().setName(tid);
tieLine.addNewNonMeteredBus().setName(fid);
ODMData2XmlHelper.getBusRecord(fid, baseCaseNet).getZone();
BusRecordXmlType busRecFrom=ODMData2XmlHelper.getBusRecord(tid, baseCaseNet);
busRecFrom.getZone();
PSSNetworkXmlType.AreaList.Area areaFrom=ODMData2XmlHelper.
getAreaRecordByZone(busRecFrom.getZone(), baseCaseNet);
tieLine.setMeteredArea(areaFrom.getAreaName());
BusRecordXmlType busRecTo=ODMData2XmlHelper.getBusRecord(fid, baseCaseNet);
busRecTo.getZone();
PSSNetworkXmlType.AreaList.Area areaTo=ODMData2XmlHelper.
getAreaRecordByZone(busRecTo.getZone(), baseCaseNet);
tieLine.setNonMeteredArea(areaTo.getAreaName());
}
}catch (final Exception e){
e.printStackTrace();
}
}
// set cirId, if not specified, set to 1
String cirId="";
if(!strAry[8].equals("")){
cirId = strAry[8];
}else{
cirId="1";
}
branchRec.setCircuitId(cirId); // set circuid id
branchRec.addNewLoadflowBranchData();
branchRec.setId(ODMData2XmlHelper.formBranchId(fid, tid, cirId));
branchRec.getLoadflowBranchData().setCode(LoadflowBranchDataXmlType.Code.LINE); // set branch to be a semetry line
String multiSectionId="";
if(!strAry[9].equals("")){
multiSectionId = strAry[9];
//set multiSection data if necessary
}
//if currentRating!=0.0,set rated current
double currentRating=0.0;
if(!strAry[10].equals("")){
currentRating = new Double(strAry[10]).doubleValue(); // set branch current rating limit
ODMData2XmlHelper.setBranchRatingLimitData(branchRec.getLoadflowBranchData(),
currentRating, LoadflowBranchDataXmlType.RatingLimit.CurrentRatingUnit.AMP);
}
double rpu=0.0, xpu=0.0001, halfGpu=0.0, halfBpu=0.0;
if(!strAry[12].equals("")){
rpu = new Double(strAry[12]).doubleValue();
if(rpu>10.0){
rpu=rpu/100000;
}
//rpu=StringUtil.getNumberFormat(rpu);
}
if(!strAry[13].equals("")){
xpu = new Double(strAry[13]).doubleValue();
if(xpu>10.0){
xpu=xpu/100000;
}
//xpu=StringUtil.getNumberFormat(xpu);
}
if(!strAry[14].equals("")){
halfGpu = new Double(strAry[14]).doubleValue();
if(halfGpu>10.0){
halfGpu=halfGpu/100000;
}
}
if(!strAry[15].equals("")){
halfBpu = new Double(strAry[15]).doubleValue();
if(halfBpu>10.0){
halfBpu=halfBpu/100000;
}
}
if(rpu!=0.0||xpu!=0.0||halfGpu!=0.0||halfBpu!=0.0){ // set branch shunt mva
ODMData2XmlHelper.setLineData(branchRec.getLoadflowBranchData(), rpu, xpu,
ZXmlType.Unit.PU, 2*halfGpu, 2*halfBpu, YXmlType.Unit.PU);
}
//branch length
double length=0.0;
if(!strAry[16].equals("")){
branchRec.getLoadflowBranchData().getLineData(). // set branch length
addNewLength().setLength(length);
branchRec.getLoadflowBranchData().getLineData().
getLength().setUnit(LengthXmlType.Unit.MILE);
}
// if there is a description, set
String desc= "";
if(!strAry[17].equals("")){ // set branch description if there is any
desc= strAry[17];
NameValuePairXmlType nvPair = branchRec.getLoadflowBranchData().getLineData().
addNewNvPairList().addNewNvPair();
nvPair.setName("branch description");
nvPair.setValue(desc);
}
}
Transformer:
if(strAry[0].startsWith("T")){ //processing transformer data
dataType=transformer;
}else if(strAry[0].startsWith("TP")){
dataType=phaseShiftXfr;
}
branchRec.addNewLoadflowBranchData();
if(dataType==transformer){
branchRec.getLoadflowBranchData().setCode(LoadflowBranchDataXmlType.Code.TRANSFORMER);
branchRec.getLoadflowBranchData().addNewXformerData(); // add a new transformer data in loadflow data record
}else {
branchRec.getLoadflowBranchData().setCode(LoadflowBranchDataXmlType.Code.PHASE_SHIFT_XFORMER);
branchRec.getLoadflowBranchData().addNewPhaseShiftXfrData();
}
final String modCode =strAry[1];
final String owner=strAry[2];
final String fid = strAry[3];
final String tid = strAry[6];
adapter.getLogger().fine("Branch data loaded, from-bus, to-bus: " + fid + ", " + tid);
branchRec.addNewFromBus().setIdRef(fid); // set from end and to end bus id and base voltage
branchRec.addNewToBus().setIdRef(tid);
final double fVol= new Double(strAry[4]).doubleValue();
final double tVol= new Double(strAry[7]).doubleValue();
// set tieline data, measure location for power interchange, 1--from side, 2- to side
int measureLocation=0;
if(!strAry[5].equals("")){
measureLocation= new Integer(strAry[5]).intValue();
try{
if(measureLocation==1){ // set measured location, either at the from-turn or at the end-turn;
PSSNetworkXmlType.TieLineList.Tieline tieLine=parser.addNewBaseCaseTieline();
tieLine.addNewMeteredBus().setName(fid);
tieLine.addNewNonMeteredBus().setName(tid);
BusRecordXmlType busRecFrom=ODMData2XmlHelper.getBusRecord(fid, baseCaseNet);
PSSNetworkXmlType.AreaList.Area areaFrom=ODMData2XmlHelper.
getAreaRecordByZone(busRecFrom.getZone(), baseCaseNet);
tieLine.setMeteredArea(areaFrom.getAreaName());
BusRecordXmlType busRecTo=ODMData2XmlHelper.getBusRecord(tid, baseCaseNet);
PSSNetworkXmlType.AreaList.Area areaTo=ODMData2XmlHelper.
getAreaRecordByZone(busRecTo.getZone(), baseCaseNet);
tieLine.setNonMeteredArea(areaTo.getAreaName());
}else{
PSSNetworkXmlType.TieLineList.Tieline tieLine=parser.addNewBaseCaseTieline();
tieLine.addNewMeteredBus().setName(tid);
tieLine.addNewNonMeteredBus().setName(fid);
ODMData2XmlHelper.getBusRecord(fid, baseCaseNet).getZone();
BusRecordXmlType busRecFrom=ODMData2XmlHelper.getBusRecord(tid, baseCaseNet);
busRecFrom.getZone();
PSSNetworkXmlType.AreaList.Area areaFrom=ODMData2XmlHelper.
getAreaRecordByZone(busRecFrom.getZone(), baseCaseNet);
tieLine.setMeteredArea(areaFrom.getAreaName());
BusRecordXmlType busRecTo=ODMData2XmlHelper.getBusRecord(fid, baseCaseNet);
busRecTo.getZone();
PSSNetworkXmlType.AreaList.Area areaTo=ODMData2XmlHelper.
getAreaRecordByZone(busRecTo.getZone(), baseCaseNet);
tieLine.setNonMeteredArea(areaTo.getAreaName());
}
}catch (final Exception e) {
e.printStackTrace();
}
}
String cirId="1";
if(!strAry[8].equals("")){
cirId = strAry[8];
}
branchRec.setCircuitId(cirId); // set curcuit identifier
branchRec.setId(ODMData2XmlHelper.formBranchId(fid, tid, cirId));
final String multiSectionId = strAry[9];
//set rated current
double MwRating=0.0;
if(!strAry[11].equals("")){
MwRating = new Integer(strAry[11]).intValue();
}
// set xfr rating data
if(dataType==transformer){
ODMData2XmlHelper.setXfrRatingData(branchRec.getLoadflowBranchData().getXformerData(),
fVol, tVol,VoltageXmlType.Unit.KV, MwRating, PowerXmlType.Unit.MVA);
}else {
ODMData2XmlHelper.setXfrRatingData(branchRec.getLoadflowBranchData().getPhaseShiftXfrData(),
fVol, tVol,VoltageXmlType.Unit.KV, MwRating, PowerXmlType.Unit.MVA);
}
double rpu=0.0, xpu=0.0001, Gpu=0.0, Bpu=0.0;
if(!strAry[12].equals("")){
rpu = new Double(strAry[12]).doubleValue();
if(rpu>10.0){
rpu=rpu/100000;
}
}
if(!strAry[13].equals("")){
xpu = new Double(strAry[13]).doubleValue();
if(xpu>10.0){
xpu=xpu/100000;
}
}
if(!strAry[14].equals("")){
Gpu = new Double(strAry[14]).doubleValue();
if(Gpu>10.0){
Gpu=Gpu/100000;
}
}
if(!strAry[15].equals("")){
Bpu = new Double(strAry[15]).doubleValue();
if(Bpu>10.0){
Bpu=Bpu/100000;
}
}
if(rpu!=0.0||xpu!=0.0){ // set transformer R and X
if(dataType==transformer){
ODMData2XmlHelper.setZValue(branchRec.getLoadflowBranchData().getXformerData().addNewZ(),
rpu, xpu, ZXmlType.Unit.PU);
}else{
ODMData2XmlHelper.setZValue(branchRec.getLoadflowBranchData().getPhaseShiftXfrData().addNewZ(),
rpu, xpu, ZXmlType.Unit.PU);
}
}
if(Gpu!=0.0||Bpu!=0.0){ //set g b, g, b---> from side
if(dataType==transformer){
ODMData2XmlHelper.setYData(branchRec.getLoadflowBranchData().getXformerData().addNewFromShuntY(),
Gpu, Bpu, YXmlType.Unit.PU);
}else{
ODMData2XmlHelper.setYData(branchRec.getLoadflowBranchData().getPhaseShiftXfrData().addNewFromShuntY(),
Gpu, Bpu, YXmlType.Unit.PU);
}
}
double fromTurnRatedVolOrAngDeg=0.0, toTurnRatedVolOrZero=0.0; // tap1 tap2 or angle for phase shift
if(!strAry[16].equals("")){
fromTurnRatedVolOrAngDeg = new Double(strAry[16]).doubleValue();
}
if(!strAry[17].equals("")){
toTurnRatedVolOrZero = new Double(strAry[17]).doubleValue();
}
double fRatio=1.0, tRatio=1.0;
if (dataType==transformer){ // set transformer ratio and phaseshiftxfr angle
//to see what is the input data format, specified or not.
if(fromTurnRatedVolOrAngDeg>=2*fVol){
fromTurnRatedVolOrAngDeg=fromTurnRatedVolOrAngDeg/100;
fRatio=fromTurnRatedVolOrAngDeg/fVol;
}
branchRec.getLoadflowBranchData().getXformerData()
.setFromTurnRatio(fRatio);
if(toTurnRatedVolOrZero>=2*tVol){
toTurnRatedVolOrZero=toTurnRatedVolOrZero/100;
tRatio=toTurnRatedVolOrZero/tVol;
}
branchRec.getLoadflowBranchData().getXformerData()
.setToTurnRatio(tRatio);
}else {
ODMData2XmlHelper.setAngleData(branchRec.getLoadflowBranchData().getPhaseShiftXfrData().
addNewFromAngle(), fromTurnRatedVolOrAngDeg, AngleXmlType.Unit.DEG);
ODMData2XmlHelper.setAngleData(branchRec.getLoadflowBranchData().getPhaseShiftXfrData().
addNewToAngle(), 0, AngleXmlType.Unit.DEG);
}
}
public static void processXfrAdjustData(final String str, // processing transformer adjustment data
final PSSNetworkXmlType baseCaseNet,BPAAdapter adapter){
final String[] strAry = getXfrAdjustDataFields(str,adapter);
int dataType=0;
int angleAdjustment=1;
int tapAdjustment=2;
int adjustType=3;
int tapVoltageAdjustment=4;
int tapVarAdjustment=5;
int pAngleAdjustment=6;
int mAngleAdjustment=7;
if(strAry[0].equals("RP")||strAry[0].equals("RM")){
dataType=angleAdjustment;
if(strAry[0].equals("RP")){
adjustType=pAngleAdjustment;
}else{
adjustType=mAngleAdjustment;
}
}else{
dataType=tapAdjustment;
if(strAry[0].equals("R")||strAry[0].equals("RV")){
adjustType=tapVoltageAdjustment;
}else {
adjustType=tapVarAdjustment;
}
}
//adjustType: R or RV---remote bus control
final String modCode = strAry[1];
final String owner = strAry[2];
final String fromBus =strAry[3];
final double fromTurnRatedV = new Double(strAry[4]).doubleValue();
final String toBus = strAry[6];
final double toTurnRatedV = new Double(strAry[7]).doubleValue();
BranchRecordXmlType branchRec= ODMData2XmlHelper.getXfrBranchRecord(fromBus,
toBus, baseCaseNet);
String controlBusId = "";
final String adjBus =strAry[8];
final String adjVol =strAry[9];
// set tapAdjSide
int tapAdjSide = 0;
if(!strAry[5].equals("")){
tapAdjSide=new Integer(strAry[5]).intValue();
}
double stepSize=0.0,maxVoltPQ = 0.0, minVoltPQ = 0.0, totalTap=0.0;
double max=0.0, min=0.0;
// Minimum MVAR or MW limit [F]
// Maximum MVAR or MW limit [F]
if(!strAry[10].equals("")){
max = new Double(strAry[10]).doubleValue();
}
if(!strAry[11].equals("")){
min = new Double(strAry[11]).doubleValue();
}
if(!strAry[12].equals("")){
totalTap = new Double(strAry[12]).doubleValue();
}
if(!strAry[13].equals("")){
maxVoltPQ = new Double(strAry[13]).doubleValue();
}
if(!strAry[14].equals("")){
minVoltPQ = new Double(strAry[14]).doubleValue();
}
// calculate stepsize
if (totalTap!=0.0){
stepSize =(max-min)/totalTap;
}
// scheduled Q for RQ
double scheduleQ=0.0;
if(!strAry[13].equals("")){
scheduleQ = new Double(strAry[13]).doubleValue();
}
if(dataType==tapAdjustment){
TransformerDataXmlType.TapAdjustment tapAdj = branchRec.getLoadflowBranchData().
getXformerData().addNewTapAdjustment();
if(tapAdjSide==1){
tapAdj.setTapAdjOnFromSide(true);
if(max>=2*fromTurnRatedV){
max=max/100;
}
max=max/fromTurnRatedV;
if(min>=2*fromTurnRatedV){
min=min/100;
}
min=min/fromTurnRatedV;
}else{
tapAdj.setTapAdjOnFromSide(false);
if(max>=2*toTurnRatedV){
max=max/100;
}
max=max/toTurnRatedV;
if(min>=2*toTurnRatedV){
min=min/100;
}
min=min/toTurnRatedV;
}
// save result to two digits after .
NumberFormat ddf1=NumberFormat.getNumberInstance() ;
ddf1.setMaximumFractionDigits(2);
max= new Double(ddf1.format(max)).doubleValue() ;
min= new Double(ddf1.format(min)).doubleValue() ;
if(tapAdjSide==2){
tapAdj.setTapAdjOnFromSide(false);
controlBusId=toBus;
}else{
tapAdj.setTapAdjOnFromSide(true);
controlBusId=fromBus;
}
ODMData2XmlHelper.setLimitData(tapAdj.addNewTapLimit(), max,
min);
tapAdj.setTapAdjStepSize(stepSize);
if (adjustType==tapVoltageAdjustment ){ // voltage control
TransformerDataXmlType.TapAdjustment.VoltageAdjData voltTapAdj = tapAdj
.addNewVoltageAdjData();
voltTapAdj.addNewAdjVoltageBus().setIdRef(controlBusId);
voltTapAdj
.setAdjBusLocation((adjBus == toBus ? TransformerDataXmlType.TapAdjustment.VoltageAdjData.AdjBusLocation.NEAR_TO_BUS
: TransformerDataXmlType.TapAdjustment.VoltageAdjData.AdjBusLocation.NEAR_FROM_BUS));
voltTapAdj.setMode(AdjustmentDataXmlType.Mode.RANGE_ADJUSTMENT);
if(maxVoltPQ!=0.0||minVoltPQ!=0.0){
ODMData2XmlHelper.setLimitData(voltTapAdj.addNewDesiredRange(),
maxVoltPQ, minVoltPQ);
}
} else if (adjustType==tapVarAdjustment) { // var control
TransformerDataXmlType.TapAdjustment.MvarFlowAdjData mvarTapAdj = tapAdj
.addNewMvarFlowAdjData();
ODMData2XmlHelper.setLimitData(mvarTapAdj.addNewDesiredRange(),
maxVoltPQ, minVoltPQ);
mvarTapAdj.setMode(AdjustmentDataXmlType.Mode.RANGE_ADJUSTMENT);
mvarTapAdj.setMvarMeasuredOnFormSide(true);
}
} else if(dataType==angleAdjustment){ // angle adjustment
PhaseShiftXfrDataXmlType.AngleAdjustment angAdj = branchRec.getLoadflowBranchData().
getPhaseShiftXfrData().addNewAngleAdjustment();
ODMData2XmlHelper.setLimitData(angAdj.addNewAngleDegLimit(), max,
min);
ODMData2XmlHelper.setLimitData(angAdj.addNewDesiredRange(), maxVoltPQ,
minVoltPQ);
angAdj.setMode(AdjustmentDataXmlType.Mode.RANGE_ADJUSTMENT);
angAdj.setDesiredMeasuredOnFromSide(true);
}
}