In this part, we would demonstrate the codes with more detail explanations.
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;
}
}
}
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);
}
}
}
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);
}
}
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);
}
}