/*
* @(#)BPADynamicRecord.java
*
* Copyright (C) 2006-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 Hau
* @Version 1.0
* @Date 02/11/2008
*
* Revision History
* ================
*
*/
package org.ieee.odm.adapter.bpa.dynamic;
import org.ieee.odm.adapter.bpa.lf.BPABusRecord;
import org.ieee.odm.common.ODMException;
import org.ieee.odm.common.ODMLogger;
import org.ieee.odm.model.base.BaseDataSetter;
import org.ieee.odm.model.base.ODMModelStringUtil;
import org.ieee.odm.model.dstab.DStabModelParser;
import org.ieee.odm.model.dstab.DStabParserHelper;
import org.ieee.odm.schema.DStabBusXmlType;
import org.ieee.odm.schema.DStabGenDataXmlType;
import org.ieee.odm.schema.PssBPADualInputXmlType;
import org.ieee.odm.schema.PssBpaSgTypeXmlType;
import org.ieee.odm.schema.PssBpaSpTypeXmlType;
import org.ieee.odm.schema.PssBpaSsTypeXmlType;
import org.ieee.odm.schema.StabilizerInputSignalEnumType;
public class BPADynamicPSSRecord {
public static void processPSSData(String str, DStabModelParser parser) throws ODMException {
final String[] strAry= getPSSDataFields(str);
String busId = BPABusRecord.getBusId(strAry[1]);
DStabBusXmlType bus = parser.getDStabBus(busId);
//DStabGenDataXmlType dynGen = (DStabGenDataXmlType)bus.getGenData().getEquivGen().getValue();
DStabGenDataXmlType dynGen = DStabParserHelper.getDefaultGen(bus.getGenData());
//machine Id
String macId="1";
if(!strAry[3].equals("")){
macId=strAry[3];
}
if(str.substring(0, 3).trim().equals("SS")){
PssBpaSsTypeXmlType pss = DStabParserHelper.createPssBPASsXmlType(dynGen);
pss.setDesc("BPA SS type PSS, machine Id-" + macId);
// QV block is rarely used.
//KQV
double KQV=ODMModelStringUtil.getDouble(strAry[4], 0.0);
if(!strAry[4].contains(".")) KQV/=1000;
pss.setKQV(KQV);// since the sign of QV block is opposite to that of IEE2ST
//TQV
double TQV=ODMModelStringUtil.getDouble(strAry[5], 0.0);
if(!strAry[5].contains(".")) TQV/=1000;
pss.setTQV(BaseDataSetter.createTimeConstSec(TQV));
//KQS
double KQS= ODMModelStringUtil.getDouble(strAry[6], 0.0);
if(!strAry[6].contains(".")) KQS/=1000;
pss.setKQS(KQS);
//TQS
double TQS= ODMModelStringUtil.getDouble(strAry[7], 0.0);
if(!strAry[7].contains(".")) TQS/=1000;
pss.setTQS(BaseDataSetter.createTimeConstSec(TQS));
//TQ
double TQ= ODMModelStringUtil.getDouble(strAry[8], 0.0);
if(!strAry[8].contains(".")) TQ/=100;
pss.setTQ(BaseDataSetter.createTimeConstSec(TQ));
// TQ1
double TQ1= ODMModelStringUtil.getDouble(strAry[9], 0.0);
if(!strAry[9].contains(".")) TQ1/=1000;
pss.setTQ1(BaseDataSetter.createTimeConstSec(TQ1));
//TQ11
double TQ11= ODMModelStringUtil.getDouble(strAry[10], 0.0);
if(!strAry[10].contains(".")) TQ11/=1000;
pss.setT1Q1(BaseDataSetter.createTimeConstSec(TQ11));
//TQ2
double TQ2= ODMModelStringUtil.getDouble(strAry[11], 0.0);
if(!strAry[11].contains(".")) TQ2/=1000;
pss.setTQ2(BaseDataSetter.createTimeConstSec(TQ2));
// TQ21
double TQ21= ODMModelStringUtil.getDouble(strAry[12], 0.0);
if(!strAry[12].contains(".")) TQ21/=1000;
pss.setT1Q2(BaseDataSetter.createTimeConstSec(TQ21));
//TQ3
double TQ3=ODMModelStringUtil.getDouble(strAry[13], 0.0);
if(!strAry[13].contains(".")) TQ3/=1000;
pss.setTQ3(BaseDataSetter.createTimeConstSec(TQ3));
//TQ31
double TQ31=ODMModelStringUtil.getDouble(strAry[14], 0.0);
if(!strAry[14].contains(".")) TQ31/=1000;
pss.setT1Q3(BaseDataSetter.createTimeConstSec(TQ31));
//VSMAX
double vsmax=ODMModelStringUtil.getDouble(strAry[15], 0.0);
if(!strAry[15].contains(".")) vsmax/=1000;
pss.setVSMAX(vsmax);
//VCUTOFF
double vcut=ODMModelStringUtil.getDouble(strAry[16], 0.0);
if(!strAry[16].contains(".")) vcut/=1000;
pss.setVCUTOFF(vcut);
//VSLOW
double vsmin=0.0;
double Vslow=ODMModelStringUtil.getDouble(strAry[17], 0.0);
if(!strAry[17].contains(".")) Vslow/=100;
if(Vslow<=0){
vsmin=-vsmax;
}else {
vsmin=-Vslow;
}
pss.setVSMIN(vsmin);
//TODO there is no corresponding element in IEE2ST model
// //KQS MVAbase for SP SG
// double kqsMvaBase=ModelStringUtil.getDouble(strAry[19], 0.0);
}
else if(str.substring(0, 3).trim().equals("SP")){
PssBpaSpTypeXmlType pss = DStabParserHelper.createPssBPASpXmlType(dynGen);
pss.setDesc("BPA SP type PSS, machine Id-" + macId);
// QV block is rarely used.
//KQV
double KQV=ODMModelStringUtil.getDouble(strAry[4], 0.0);
if(!strAry[5].contains(".")) KQV/=1000;
pss.setKQV(KQV);// since the sign of QV block is opposite to that of IEE2ST
//TQV
double TQV=ODMModelStringUtil.getDouble(strAry[5], 0.0);
if(!strAry[5].contains(".")) TQV/=1000;
pss.setTQV(BaseDataSetter.createTimeConstSec(TQV));
//KQS
double KQS= ODMModelStringUtil.getDouble(strAry[6], 0.0);
if(!strAry[6].contains(".")) KQS/=1000;
pss.setKQS(KQS);
//TQS
double TQS= ODMModelStringUtil.getDouble(strAry[7], 0.0);
if(!strAry[7].contains(".")) TQS/=1000;
pss.setTQS(BaseDataSetter.createTimeConstSec(TQS));
//TQ
double TQ= ODMModelStringUtil.getDouble(strAry[8], 0.0);
if(!strAry[8].contains(".")) TQ/=100;
pss.setTQ(BaseDataSetter.createTimeConstSec(TQ));
// TQ1
double TQ1= ODMModelStringUtil.getDouble(strAry[9], 0.0);
if(!strAry[9].contains(".")) TQ1/=1000;
pss.setTQ1(BaseDataSetter.createTimeConstSec(TQ1));
//TQ11
double TQ11= ODMModelStringUtil.getDouble(strAry[10], 0.0);
if(!strAry[10].contains(".")) TQ11/=1000;
pss.setT1Q1(BaseDataSetter.createTimeConstSec(TQ11));
//TQ2
double TQ2= ODMModelStringUtil.getDouble(strAry[11], 0.0);
if(!strAry[11].contains(".")) TQ2/=1000;
pss.setTQ2(BaseDataSetter.createTimeConstSec(TQ2));
// TQ21
double TQ21= ODMModelStringUtil.getDouble(strAry[12], 0.0);
if(!strAry[12].contains(".")) TQ21/=1000;
pss.setT1Q2(BaseDataSetter.createTimeConstSec(TQ21));
//TQ3
double TQ3=ODMModelStringUtil.getDouble(strAry[13], 0.0);
if(!strAry[13].contains(".")) TQ3/=1000;
pss.setTQ3(BaseDataSetter.createTimeConstSec(TQ3));
//TQ31
double TQ31=ODMModelStringUtil.getDouble(strAry[14], 0.0);
if(!strAry[14].contains(".")) TQ31/=1000;
pss.setT1Q3(BaseDataSetter.createTimeConstSec(TQ31));
//VSMAX
double vsmax=ODMModelStringUtil.getDouble(strAry[15], 0.0);
if(!strAry[15].contains(".")) vsmax/=1000;
pss.setVSMAX(vsmax);
//VCUTOFF
double vcut=ODMModelStringUtil.getDouble(strAry[16], 0.0);
if(!strAry[16].contains(".")) vcut/=1000;
pss.setVCUTOFF(vcut);
//VSLOW
double vsmin=0.0;
double Vslow=ODMModelStringUtil.getDouble(strAry[17], 0.0);
if(!strAry[17].contains(".")) Vslow/=100;
if(Vslow<=0){
vsmin=-vsmax;
}else {
vsmin=-Vslow;
}
pss.setVSMIN(vsmin);
// //KQS MVAbase for SP SG
// double kqsMvaBase=ModelStringUtil.getDouble(strAry[19], 0.0);
}
else if(str.substring(0, 3).trim().equals("SG")){
PssBpaSgTypeXmlType pss = DStabParserHelper.createPssBPASgXmlType(dynGen);
pss.setDesc("BPA SP type PSS, machine Id-" + macId);
// QV block is rarely used.
//KQV
double KQV=ODMModelStringUtil.getDouble(strAry[4], 0.0);
if(!strAry[5].contains(".")) KQV/=1000;
pss.setKQV(KQV);// since the sign of QV block is opposite to that of IEE2ST
//TQV
double TQV=ODMModelStringUtil.getDouble(strAry[5], 0.0);
if(!strAry[5].contains(".")) TQV/=1000;
pss.setTQV(BaseDataSetter.createTimeConstSec(TQV));
//KQS
double KQS= ODMModelStringUtil.getDouble(strAry[6], 0.0);
if(!strAry[6].contains(".")) KQS/=1000;
pss.setKQS(KQS);
//TQS
double TQS= ODMModelStringUtil.getDouble(strAry[7], 0.0);
if(!strAry[7].contains(".")) TQS/=1000;
pss.setTQS(BaseDataSetter.createTimeConstSec(TQS));
//TQ
double TQ= ODMModelStringUtil.getDouble(strAry[8], 0.0);
if(!strAry[8].contains(".")) TQ/=100;
pss.setTQ(BaseDataSetter.createTimeConstSec(TQ));
// TQ1
double TQ1= ODMModelStringUtil.getDouble(strAry[9], 0.0);
if(!strAry[9].contains(".")) TQ1/=1000;
pss.setTQ1(BaseDataSetter.createTimeConstSec(TQ1));
//TQ11
double TQ11= ODMModelStringUtil.getDouble(strAry[10], 0.0);
if(!strAry[10].contains(".")) TQ11/=1000;
pss.setT1Q1(BaseDataSetter.createTimeConstSec(TQ11));
//TQ2
double TQ2= ODMModelStringUtil.getDouble(strAry[11], 0.0);
if(!strAry[11].contains(".")) TQ2/=1000;
pss.setTQ2(BaseDataSetter.createTimeConstSec(TQ2));
// TQ21
double TQ21= ODMModelStringUtil.getDouble(strAry[12], 0.0);
if(!strAry[12].contains(".")) TQ21/=1000;
pss.setT1Q2(BaseDataSetter.createTimeConstSec(TQ21));
//TQ3
double TQ3=ODMModelStringUtil.getDouble(strAry[13], 0.0);
if(!strAry[13].contains(".")) TQ3/=1000;
pss.setTQ3(BaseDataSetter.createTimeConstSec(TQ3));
//TQ31
double TQ31=ODMModelStringUtil.getDouble(strAry[14], 0.0);
if(!strAry[14].contains(".")) TQ31/=1000;
pss.setT1Q3(BaseDataSetter.createTimeConstSec(TQ31));
//VSMAX
double vsmax=ODMModelStringUtil.getDouble(strAry[15], 0.0);
if(!strAry[15].contains(".")) vsmax/=1000;
pss.setVSMAX(vsmax);
//VCUTOFF
double vcut=ODMModelStringUtil.getDouble(strAry[16], 0.0);
if(!strAry[16].contains(".")) vcut/=1000;
pss.setVCUTOFF(vcut);
//VSLOW
double vsmin=0.0;
double Vslow=ODMModelStringUtil.getDouble(strAry[17], 0.0);
if(!strAry[17].contains(".")) Vslow/=100;
if(Vslow<=0){
vsmin=-vsmax;
}else {
vsmin=-Vslow;
}
pss.setVSMIN(vsmin);
// //TODO KQS MVAbase for SP SG
double kqsMvaBase=ODMModelStringUtil.getDouble(strAry[19], 0.0);
if(kqsMvaBase>0.0){
double newKqs=pss.getKQS()*kqsMvaBase/dynGen.getMvaBase().getValue();
pss.setKQS(newKqs);
}
}
else if(str.substring(0, 3).trim().equals("SI")){
PssBPADualInputXmlType dualPss= DStabParserHelper.createPssBPADualInputXmlType(dynGen);
dualPss.setDesc("BPA SI Type Dual Input Pss model,machine Id-" + macId);
//TRW
double Trw=ODMModelStringUtil.getDouble(strAry[4], 0.0);
if(!strAry[4].contains(".")) Trw/=10000;
dualPss.setTrw(BaseDataSetter.createTimeConstSec(Trw));
//T5
double T5=ODMModelStringUtil.getDouble(strAry[5], 0.0);
if(!strAry[5].contains(".")) T5/=1000;
dualPss.setT5(BaseDataSetter.createTimeConstSec(T5));
//T6
double T6=ODMModelStringUtil.getDouble(strAry[6], 0.0);
if(!strAry[6].contains(".")) T6/=1000;
dualPss.setT6(BaseDataSetter.createTimeConstSec(T6));
//T7
double T7=ODMModelStringUtil.getDouble(strAry[7], 0.0);
if(!strAry[7].contains(".")) T7/=1000;
dualPss.setT7(BaseDataSetter.createTimeConstSec(T7));
//KR
double Kr= ODMModelStringUtil.getDouble(strAry[8], 0.0);
if(!strAry[8].contains(".")) Kr/=10000;
dualPss.setKr(Kr);
// TRP
double Trp=ODMModelStringUtil.getDouble(strAry[9], 0.0);
if(!strAry[9].contains(".")) Trp/=10000;
dualPss.setTrp(BaseDataSetter.createTimeConstSec(Trp));
//TW
double Tw=ODMModelStringUtil.getDouble(strAry[10], 0.0);
if(!strAry[10].contains(".")) Tw/=1000;
dualPss.setTW(BaseDataSetter.createTimeConstSec(Tw));
//TW1
double Tw1=ODMModelStringUtil.getDouble(strAry[11], 0.0);
if(!strAry[11].contains(".")) Tw1/=1000;
dualPss.setTW1(BaseDataSetter.createTimeConstSec(Tw1));
// TW2
double Tw2=ODMModelStringUtil.getDouble(strAry[12], 0.0);
if(!strAry[12].contains(".")) Tw2/=1000;
dualPss.setTW2(BaseDataSetter.createTimeConstSec(Tw2));
//KS
double Ks= ODMModelStringUtil.getDouble(strAry[13], 0.0);
if(!strAry[13].contains(".")) Ks/=100;
dualPss.setKS(Ks);
//T9
double T9=ODMModelStringUtil.getDouble(strAry[14], 0.0);
if(!strAry[14].contains(".")) T9/=1000;
dualPss.setT9(BaseDataSetter.createTimeConstSec(T9));
//T10
double T10=ODMModelStringUtil.getDouble(strAry[15], 0.0);
if(!strAry[15].contains(".")) T10/=1000;
dualPss.setT10(BaseDataSetter.createTimeConstSec(T10));
//T12
double T12=ODMModelStringUtil.getDouble(strAry[16], 0.0);
if(!strAry[16].contains(".")) T12/=1000;
dualPss.setT12(BaseDataSetter.createTimeConstSec(T12));
//INP input signal:0 for speed deviation(delta_w) and generator accelerating power(delta_Pg),
//1 for only delta_w, 2 for only delta_pg
int INP=ODMModelStringUtil.getInt(strAry[17], 0);
if(INP==0){
dualPss.setFirstInputSignal(StabilizerInputSignalEnumType.ROTOR_SPEED_DEVIATION );
dualPss.setSecondInputSignal(StabilizerInputSignalEnumType.GENERATOR_ACCELERATING_POWER);
}else if(INP==1){
dualPss.setFirstInputSignal(StabilizerInputSignalEnumType.ROTOR_SPEED_DEVIATION );
}else if(INP==2){
dualPss.setSecondInputSignal(StabilizerInputSignalEnumType.GENERATOR_ACCELERATING_POWER);
}
}
// SI+ is to store the rest data of DualInputPss Model
else if(str.substring(0, 3).trim().equals("SI+")){
PssBPADualInputXmlType dualPss=(PssBPADualInputXmlType) dynGen.getStabilizer().getValue();
//KP
double Kp= ODMModelStringUtil.getDouble(strAry[4], 0.0);
if(!strAry[4].contains(".")) Kp/=1000;
dualPss.setKp(Kp);
//T1
double T1=ODMModelStringUtil.getDouble(strAry[5], 0.0);
if(!strAry[5].contains(".")) T1/=1000;
dualPss.setT1(BaseDataSetter.createTimeConstSec(T1));
//T2
double T2=ODMModelStringUtil.getDouble(strAry[6], 0.0);
if(!strAry[6].contains(".")) T2/=1000;
dualPss.setT2(BaseDataSetter.createTimeConstSec(T2));
//T13
double T13=ODMModelStringUtil.getDouble(strAry[7], 0.0);
if(!strAry[7].contains(".")) T13/=1000;
dualPss.setT13(BaseDataSetter.createTimeConstSec(T13));
//T14
double T14=ODMModelStringUtil.getDouble(strAry[8], 0.0);
if(!strAry[8].contains(".")) T14/=1000;
dualPss.setT14(BaseDataSetter.createTimeConstSec(T14));
// T3
double T3=ODMModelStringUtil.getDouble(strAry[9], 0.0);
if(!strAry[9].contains(".")) T3/=1000;
dualPss.setT3(BaseDataSetter.createTimeConstSec(T3));
//T4
double T4=ODMModelStringUtil.getDouble(strAry[10], 0.0);
if(!strAry[10].contains(".")) T4/=1000;
dualPss.setT4(BaseDataSetter.createTimeConstSec(T4));
//VSMAX
double vsmax= ODMModelStringUtil.getDouble(strAry[11], 0.0);
if(!strAry[11].contains(".")) vsmax/=10000;
dualPss.setVSMAX(vsmax);
// VSMIN
double vsmin=ODMModelStringUtil.getDouble(strAry[12], 0.0);
if(!strAry[12].contains(".")) vsmin/=10000;
dualPss.setVSMIN(vsmin);
//krBaseMVA-- the base MVA for the Kr parameter
//TODO still don't know how this parameter is used in the dynamic analysis
double krBaseMVA=ODMModelStringUtil.getDouble(strAry[13], 0.0);
if(krBaseMVA==0.0){
krBaseMVA=dynGen.getMvaBase().getValue();
}
dualPss.setKrBaseMVA(krBaseMVA);
}
}
private static String[] getPSSDataFields(String str){
final String[] strAry= new String[20];
strAry[0]=ODMModelStringUtil.getStringReturnEmptyString(str,1, 2).trim();
//to process the Chinese characters first, if any.
int chineseCharNum=ODMModelStringUtil.getChineseCharNum(str.substring(3,10).trim());
//Columns 6-13 busName
strAry[1] = ODMModelStringUtil.getStringReturnEmptyString(str,4, 11-chineseCharNum).trim();
str=chineseCharNum==0?str:ODMModelStringUtil.replaceChineseChar(str);
try{
if(str.substring(0, 3).trim().equals("SS")||str.substring(0, 3).trim().equals("SP")
||str.substring(0, 3).trim().equals("SG")){
//strAry[0]=ModelStringUtil.getStringReturnEmptyString(str,1, 2).trim();
//busId
//strAry[1]=ModelStringUtil.getStringReturnEmptyString(str,4, 11).trim();
//bus Voltage
strAry[2]=ODMModelStringUtil.getStringReturnEmptyString(str,12, 15).trim();
//excId
strAry[3]=ODMModelStringUtil.getStringReturnEmptyString(str,16, 16).trim();
//KQV
strAry[4]=ODMModelStringUtil.getStringReturnEmptyString(str,17, 20).trim();
//TQV
strAry[5]=ODMModelStringUtil.getStringReturnEmptyString(str,21, 23).trim();
//KQS
strAry[6]=ODMModelStringUtil.getStringReturnEmptyString(str,24, 27).trim();
//TQS
strAry[7]=ODMModelStringUtil.getStringReturnEmptyString(str,28, 30).trim();
//TQ
strAry[8]=ODMModelStringUtil.getStringReturnEmptyString(str,31, 34).trim();
// TQ1
strAry[9]=ODMModelStringUtil.getStringReturnEmptyString(str,35, 38).trim();
//TQ11
strAry[10]=ODMModelStringUtil.getStringReturnEmptyString(str,39, 42).trim();
//TQ2
strAry[11]=ODMModelStringUtil.getStringReturnEmptyString(str,43, 46).trim();
// TQ21
strAry[12]=ODMModelStringUtil.getStringReturnEmptyString(str,47, 50).trim();
//TQ3
strAry[13]=ODMModelStringUtil.getStringReturnEmptyString(str,51, 54).trim();
//TQ31
strAry[14]=ODMModelStringUtil.getStringReturnEmptyString(str,55, 58).trim();
//VSMAX
strAry[15]=ODMModelStringUtil.getStringReturnEmptyString(str,59, 62).trim();
//VCUTOFF
strAry[16]=ODMModelStringUtil.getStringReturnEmptyString(str,63, 66).trim();
//VSLOW
strAry[17]=ODMModelStringUtil.getStringReturnEmptyString(str,67, 68).trim();
//REMOTE BUS
strAry[18]=ODMModelStringUtil.getStringReturnEmptyString(str,69, 76).trim();
//REMOTE VOLTAGE, KQS MVAbase for SP SG
strAry[19]=ODMModelStringUtil.getStringReturnEmptyString(str,77, 80).trim();
}else if(str.substring(0, 3).trim().equals("SI")){
//strAry[0]=ModelStringUtil.getStringReturnEmptyString(str,1, 2).trim();
//busId
//strAry[1]=ModelStringUtil.getStringReturnEmptyString(str,4, 11).trim();
//bus Voltage
strAry[2]=ODMModelStringUtil.getStringReturnEmptyString(str,12, 15).trim();
//excId
strAry[3]=ODMModelStringUtil.getStringReturnEmptyString(str,16, 16).trim();
//TRW
strAry[4]=ODMModelStringUtil.getStringReturnEmptyString(str,17, 20).trim();
//T5
strAry[5]=ODMModelStringUtil.getStringReturnEmptyString(str,21, 25).trim();
//T6
strAry[6]=ODMModelStringUtil.getStringReturnEmptyString(str,26, 30).trim();
//T7
strAry[7]=ODMModelStringUtil.getStringReturnEmptyString(str,31, 35).trim();
//KR
strAry[8]=ODMModelStringUtil.getStringReturnEmptyString(str,36, 41).trim();
// TRP
strAry[9]=ODMModelStringUtil.getStringReturnEmptyString(str,42, 45).trim();
//TW
strAry[10]=ODMModelStringUtil.getStringReturnEmptyString(str,46, 50).trim();
//TW1
strAry[11]=ODMModelStringUtil.getStringReturnEmptyString(str,51, 55).trim();
// TW2
strAry[12]=ODMModelStringUtil.getStringReturnEmptyString(str,56, 60).trim();
//KS
strAry[13]=ODMModelStringUtil.getStringReturnEmptyString(str,61, 64).trim();
//T9
strAry[14]=ODMModelStringUtil.getStringReturnEmptyString(str,65, 69).trim();
//T10
strAry[15]=ODMModelStringUtil.getStringReturnEmptyString(str,70, 74).trim();
//T12
strAry[16]=ODMModelStringUtil.getStringReturnEmptyString(str,75, 79).trim();
//INP input signal:0for w and Pg, 1 for w, 2for pg
strAry[17]=ODMModelStringUtil.getStringReturnEmptyString(str,80, 80).trim();
}else if(str.substring(0, 3).trim().equals("SI+")){
//strAry[0]=ModelStringUtil.getStringReturnEmptyString(str,1, 3).trim();
//busId
//strAry[1]=ModelStringUtil.getStringReturnEmptyString(str,4, 11).trim();
//bus Voltage
strAry[2]=ODMModelStringUtil.getStringReturnEmptyString(str,12, 15).trim();
//excId
strAry[3]=ODMModelStringUtil.getStringReturnEmptyString(str,16, 16).trim();
//KP
strAry[4]=ODMModelStringUtil.getStringReturnEmptyString(str,17, 21).trim();
//T1
strAry[5]=ODMModelStringUtil.getStringReturnEmptyString(str,22, 26).trim();
//T2
strAry[6]=ODMModelStringUtil.getStringReturnEmptyString(str,27, 31).trim();
//T13
strAry[7]=ODMModelStringUtil.getStringReturnEmptyString(str,32, 36).trim();
//T14
strAry[8]=ODMModelStringUtil.getStringReturnEmptyString(str,37, 41).trim();
// T3
strAry[9]=ODMModelStringUtil.getStringReturnEmptyString(str,42, 46).trim();
//T4
strAry[10]=ODMModelStringUtil.getStringReturnEmptyString(str,47, 51).trim();
//VSMAX
strAry[11]=ODMModelStringUtil.getStringReturnEmptyString(str,52, 57).trim();
// VSMIN
strAry[12]=ODMModelStringUtil.getStringReturnEmptyString(str,58, 63).trim();
//KMVA, MVAbase for kr in SI
strAry[13]=ODMModelStringUtil.getStringReturnEmptyString(str,77, 80).trim();
}
}catch (Exception e){
ODMLogger.getLogger().severe(e.toString());
}
return strAry;
}
}