def __init__(self): print(ARGVS.fi) OlxAPILib.open_olrFile(ARGVS.fi, ARGVS.olxpath) # self.equipA = set() self.busA = set() # self.brs = OlxAPILib.BranchSearch(gui=0)
def getBusPK_RLGlikeBranch(self, hnd): # like bra = OlxAPILib.getEquipmentData([hnd], RG_nBranchHnd) for br1 in bra: bres = OlxAPILib.getBusByBranch(br1) self.busPK.update(bres) # e1 = OlxAPILib.getEquipmentData([br1], BR_nHandle)[0] self.equipPK.add(e1)
def getBusPK_RLG(self, hnd): br1 = OlxAPILib.getEquipmentData([hnd], RG_nBranchHnd)[0] ## br_res [] list of branch terminal ## bus_res [] list of terminal bus ## bus_resa [] list of all bus ## equip [] list of all equipement br_res, bus_res, bus_resa, equip = OlxAPILib.getRemoteTerminals( hndBr=br1, typeConsi=[]) self.busPK.update(bus_resa) self.equipPK.update(equip)
def run(): OlxAPILib.open_olrFile(ARGVS.fi, readonly=1) bs = OlxAPILib.BusSearch(gui=ARGVS.gui) # bs.setBusNumber(ARGVS.nu) bs.setBusNameKV(ARGVS.na, ARGVS.kv) # bhnd = bs.runSearch() # print(bs.stringResult())
def run(): OlxAPILib.open_olrFile(ARGVS.fi, readonly=1) bs = OlxAPILib.BranchSearch(gui=ARGVS.gui) # bs.setBusNum1(ARGVS.nu1) bs.setBusNameKV1(ARGVS.na1, ARGVS.kv1) bs.setBusNum2(ARGVS.nu2) bs.setBusNameKV2(ARGVS.na2, ARGVS.kv2) bs.setCktID(ARGVS.cid) # bhnd = bs.runSearch() # print(bs.string_result())
def get1(self, b1): busTerminal = set() abr = OlxAPILib.getBusEquipmentData([b1], TC_BRANCH)[0] for br1 in abr: inSer1 = OlxAPILib.getEquipmentData([br1], BR_nInService)[0] if inSer1 == 1: e1 = OlxAPILib.getEquipmentData([br1], BR_nHandle)[0] if e1 not in self.equipA: br_res, bus_res, bus_resa, ea1 = OlxAPILib.getRemoteTerminals( br1, typeConsi=[]) self.equipA.update(ea1) self.busA.update(bus_resa) busTerminal.update(bus_res) return busTerminal
def tielines(nParamCode, azNum, equiCode): """ Report tie branches by area or zone Args : nParamCode = BUS_nArea tie lines by AREA = BUS_nZone tie lines by ZONE azNum : area/zone number (if <=0 all area/zone) equiCode: code of equipement example: = [TC_LINE] => report tie lines = [NULL] => report tie branches = [TC_LINE, TC_SCAP] => report tie lines and Serie capacitor/reactor Returns: nC : number of tie branches sres: string result Raises: OlrxAPIException """ equiCode1 = equiCode if len(equiCode1) == 0: equiCode1 = [TC_LINE, TC_SCAP, TC_PS, TC_SWITCH, TC_XFMR, TC_XFMR3] # abr = {} for ec1 in equiCode1: eqa = OlxAPILib.getEquipementHandle(ec1) for ehnd1 in eqa: bus = OlxAPILib.getBusByEquipement(ehnd1, ec1) az = OlxAPILib.getEquipementData(bus, [nParamCode], VT_INTEGER)[0] # for i in range(len(bus)): for j in range(i + 1, len(bus)): if (az[i] != az[j]) and (azNum <= 0 or az[i] == azNum or az[j] == azNum): abr[ehnd1] = (min(az[i], az[j]), max(az[i], az[j])) # sort result sa = sorted(abr.items(), key=lambda kv: kv[1]) # get string result sres = "" for v1 in sa: ec1 = v1[0] a1 = v1[1][0] a2 = v1[1][1] sres += str(a1).ljust(8) + "," + str(a2).ljust( 8) + "," + OlxAPI.FullBranchName(ec1) + "\n" nC = len(sa) return nC, sres
def saveReportBusFile(self): ARGVS.fb = AppUtils.get_file_out(fo=ARGVS.fb, fi=ARGVS.fi, subf='', ad='_bus', ext='.txt') # sr = [] sr.append('App : ' + PY_FILE) sr.append('User: '******'Date: ' + time.asctime()) sr.append('\nBus report:') k = 0 for b1 in self.busA: k += 1 sb = OlxAPILib.fullBusName(b1) sr.append(str(k).ljust(5) + sb) if k == 0: sr.append('\tNo bus found') # AppUtils.saveArString2File(ARGVS.fb, sr) print('\nReport bus file had been saved in:\n"%s"' % ARGVS.fb) # if ARGVS.gui > 0 and ARGVS.ut == 0: AppUtils.launch_notepad(ARGVS.fb)
def getRemoteTerminals_str(br_res, bus_res): sres = "" for i in range(len(br_res)): sres += "\n" + str(i + 1).ljust( 5) + " Branch: " + OlxAPILib.fullBranchName(br_res[i]) + "\n" if len(bus_res[i]) == 0: sres += "\t" + str(len( bus_res[i])) + " remote terminal (branch out of service)\n" else: sres += "\t" + str(len(bus_res[i])) + " remote terminals:\n" for j in range(len(bus_res[i])): if len(bus_res[i]) > 1: sres += "\t\t" + str(j + 1) + " " + OlxAPILib.fullBusName( bus_res[i][j]) + "\n" else: sres += "\t\t" + OlxAPILib.fullBusName(bus_res[i][j]) + "\n" return sres
def unit_test(): sres = "\nUNIT TEST: " + PY_FILE + "\n" ARGVS.fi = os.path.join(PATH_FILE, "SAMPLE30_1.OLR") sres += "OLR file:" + os.path.basename(ARGVS.fi) + "\n" # OlxAPILib.open_olrFile(ARGVS.fi, readonly=1) # bs = OlxAPILib.BusSearch(gui=0) # bs.setBusNameKV("al", 32) bhnd = bs.runSearch() sres += "\n" + bs.stringResult() # bs.setBusNameKV("alz", 32) bhnd = bs.runSearch() sres += "\n\n" + bs.stringResult() # bs.setBusNameKV("etc", 100) bhnd = bs.runSearch() sres += "\n\n" + bs.stringResult() # bs.setBusNameKV("nhs", 33) bhnd = bs.runSearch() sres += "\n\n" + bs.stringResult() # bs.setBusNameKV("nhs", 132) bhnd = bs.runSearch() sres += "\n\n" + bs.stringResult() bs.setBusNameKV("jj", 0) bhnd = bs.runSearch() sres += "\n\n" + bs.stringResult() # bs.setBusNumber(25) bhnd = bs.runSearch() sres += "\n\n" + bs.stringResult() # bs.setBusNumber(250) bhnd = bs.runSearch() sres += "\n\n" + bs.stringResult() print(sres) # OlxAPILib.unit_test_compare(PATH_FILE, PY_FILE, sres)
def linez_fromBus(bsName, bsKV): bhnd = OlxAPI.FindBus(bsName, bsKV) allBr = OlxAPILib.getBusEquipmentData([bhnd], [TC_BRANCH], VT_INTEGER)[0][0] sres = "All lines from bus: " + OlxAPI.FullBusName(bhnd) sres += str("\nNo").ljust(6) + str(",Type ").ljust(15) sres += "," + str("Bus1").ljust(30) + "," + str("Bus2").ljust(30) + ",ID " sres += "," + "Z1".ljust(35) sres += "," + "Z0".ljust(35) sres += ",Length" # kd = 1 for hndBr in allBr: if OlxAPILib.branchIsLineComponent(hndBr): bra = OlxAPILib.lineComponents(hndBr) for bra1 in bra: s1 = getsImpedanceLine(kd, bra1) sres += s1 kd += 1 print(sres) return sres
def get_equipByBus(self, bus0): res = set() for i in range(len(bus0)): for j in range(len(bus0)): if i != j: self.brs.setBusHnd1(bus0[i]) self.brs.setBusHnd2(bus0[j]) br1 = self.brs.runSearch() # if br1 > 0: e1 = OlxAPILib.getEquipmentData([br1], BR_nHandle)[0] res.add(e1) return res
def unit_test(): sres = "\nUNIT TEST: " + PY_FILE + "\n" ARGVS.fi = os.path.join(PATH_FILE, "SAMPLE30_1.OLR") OlxAPILib.open_olrFile(ARGVS.fi, readonly=1) sres += "OLR file:" + os.path.basename(ARGVS.fi) # bs = OlxAPILib.BranchSearch(gui=0) # bs.setBusNameKV1("glen lyn", 132) bs.setBusNameKV2("claytor", 132) br = bs.runSearch() sres += "\n\n" + bs.string_result() # bs.setCktID("1") br = bs.runSearch() sres += "\n\n" + bs.string_result() # bs.setBusNum1(12) bs.setBusNum2(15) bs.setCktID("") br = bs.runSearch() sres += "\n\n" + bs.string_result() # bs.setCktID("2") br = bs.runSearch() sres += "\n\n" + bs.string_result() # bs.setNameBranch("/Nev") br = bs.runSearch() sres += "\n\n" + bs.string_result() # bs.setNameBranch("Nev/Araz") br = bs.runSearch() sres += "\n\n" + bs.string_result() # print(sres) OlxAPILib.unit_test_compare(PATH_FILE, PY_FILE, sres)
def getStrBus(ws, i): nBusNumber = int(ws.getVal(row=i, column=1)) sBusName = str(ws.getVal(row=i, column=2)) dBusKv = float(ws.getVal(row=i, column=3)) sbus = "'" + sBusName + "'," + str(round(dBusKv, 3)) # bhnd = OlxAPI.FindBus(sBusName, dBusKv) if bhnd > 0: print(sbus.ljust(25), ' : BUS FOUND') return sbus # if nBusNumber > 0: bhnd = OlxAPI.FindBusNo(nBusNumber) # if bhnd <= 0: print(sbus.ljust(25), ' : BUS NOT FOUND') return '' # name1 = OlxAPILib.getEquipmentData([bhnd], BUS_sName)[0] kv1 = OlxAPILib.getEquipmentData([bhnd], BUS_dKVnominal)[0] sbus = "'" + name1 + "'," + str(round(kv1, 3)) print(sbus.ljust(25), ' : BUS FOUND') return sbus
def getRemoteTerminals(bhnd): """ Purpose: Find all remote end of all branches (from a bus) All taps are ignored. Close switches are included =>a test function of OlxAPILib.getRemoteTerminals(hndBr) Args : bhnd : bus handle returns : bus_res [] list of terminal bus Raises: OlrxAPIException """ br_res = OlxAPILib.getBusEquipmentData([bhnd], [TC_BRANCH], VT_INTEGER)[0][0] bus_res = [] # for br1 in br_res: ba = OlxAPILib.getRemoteTerminals(br1) bus_res.append(ba) return br_res, bus_res
def runBoundaryEquivalent(self): # ARGVS.fo = AppUtils.get_file_out(fo=ARGVS.fo, fi=ARGVS.fi, subf='res', ad='_res', ext='.OLR') # opt = [ARGVS.opt1, ARGVS.opt2, ARGVS.opt3] OlxAPILib.BoundaryEquivalent(ARGVS.fo, list(self.busA), opt) # OlxAPI.CloseDataFile() if not os.path.isfile(ARGVS.fo): raise Exception(" Run BoundaryEquivalent") # if ARGVS.gui > 0 and ARGVS.ut == 0: AppUtils.launch_OneLiner(ARGVS.fo) print('\nOLR result file had been saved in:\n"%s"' % ARGVS.fo)
def do1busFlt(bhnd): sres = "" # all branch connected to bhnd bra = OlxAPILib.getBusEquipmentData([bhnd], TC_BRANCH)[0] # doFault fltConn = [1, 0, 1, 0] # 3LG, 1LG outageOpt = [1, 1, 0, 0] # one at a time, two at a time fltOpt = [1, 1] # Bus or Close-in, Bus or Close-in w/ outage outageLst = [] for br1 in bra: outageLst.append(br1) # fltR, fltX, clearPrev = 0, 0, 1 OlxAPILib.doFault(bhnd, fltConn, fltOpt, outageOpt, outageLst, fltR, fltX, clearPrev) # OlxAPILib.pick1stFault() NoFaults = 0 imax = 0 fdesmax = "" while True: NoFaults += 1 fdes = OlxAPILib.faultDescription() sres += "\n\n" + fdes sres += "\n " mag, ang = OlxAPILib.getSCCurrent(hnd=HND_SC, style=4) for i in range(3): sres += "," + (str(round(mag[i], 0)) + "@" + str(round(ang[i], 1))).ljust(15) if mag[i] > imax: imax = mag[i] fdesmax = fdes # if not OlxAPILib.pickNextFault(): break # sres += "\n\n" + str(NoFaults) + " Faults Simulated\n" sres += "\nMax fault current = " + str(round(imax, 0)) + "A found at:" sres += "\n" + fdesmax # return sres
def run_area_zone(self, ar, zo): # get all bus with area = area, zone = zone bus_az = set() equiCode1 = [TC_LINE, TC_SCAP, TC_PS, TC_SWITCH, TC_XFMR, TC_XFMR3] #TC_LINE, # for ec1 in equiCode1: eqa = OlxAPILib.getEquipmentHandle(ec1) for ehnd1 in eqa: bus = OlxAPILib.getBusByEquipment(ehnd1, ec1) # if len(zo) == 0: ar1 = OlxAPILib.getEquipmentData(bus, BUS_nArea) for i in range(len(bus)): if ar1[i] in ar: bus_az.add(bus[i]) if ec1 != TC_LINE: for j in range(len(bus)): if i != j: bus_az.add(bus[j]) break # for i # elif len(ar) == 0: zo1 = OlxAPILib.getEquipmentData(bus, BUS_nZone) for i in range(len(bus)): if zo1[i] in zo: bus_az.add(bus[i]) if ec1 != TC_LINE: for j in range(len(bus)): if i != j: bus_az.add(bus[j]) break # for i # else: ar1 = OlxAPILib.getEquipmentData(bus, BUS_nArea) zo1 = OlxAPILib.getEquipmentData(bus, BUS_nZone) for i in range(len(bus)): if (ar1[i] in ar) and (zo1[i] in zo): bus_az.add(bus[i]) if ec1 != TC_LINE: for j in range(len(bus)): if i != j: bus_az.add(bus[j]) break # for i # return bus_az
def run(): if not checkInput(): return print("Template file: " + ARGVS.ft) print("IEEE-1584 2018") # import xml.etree.ElementTree as ET # update file out ARGVS.fo = AppUtils.get_file_out(fo=ARGVS.fo, fi=ARGVS.fi, subf='', ad='', ext='.csv') # OlxAPILib.open_olrFile(ARGVS.fi, ARGVS.olxpath) # ws = AppUtils.ToolCSVExcell() ws.readFile(fi=ARGVS.ft, delim=',') # nSuccess = 0 # for i in range(7, 10000): if ws.getVal(row=i, column=1) == None: break # sbus = getStrBus(ws, i) if sbus != "": if str(ws.getVal( row=6, column=4)) == "Electrode config": # standardYear = 2018 data = ET.Element('ARCFLASHCALCULATOR2018') data.set('REPFILENAME', ARGVS.fo) # fo data.set('OUTFILETYPE', '2') # csv file if nSuccess == 0: data.set('APPENDREPORT', '0') else: data.set('APPENDREPORT', '1') # data.set('SELECTEDOBJ', sbus) # bus data.set('ELECTRODECFG', str(ws.getVal(row=i, column=4))) data.set('BOXH', str(ws.getVal(row=i, column=5))) data.set('BOXW', str(ws.getVal(row=i, column=6))) data.set('BOXD', str(ws.getVal(row=i, column=7))) data.set('CONDUCTORGAP', str(ws.getVal(row=i, column=8))) data.set('WORKDIST', str(ws.getVal(row=i, column=9))) data.set('BRKINTTIME', str(ws.getVal(row=i, column=10))) data.set('ARCDURATION', str(ws.getVal(row=i, column=11))) if str(ws.getVal(row=i, column=11)) == "FUSE": data.set('FUSECURVE', str(ws.getVal(row=i, column=12))) elif str(ws.getVal(row=i, column=11)) == "FIXED": data.set('ARCTIME', str(ws.getVal(row=i, column=12))) elif str(ws.getVal(row=i, column=11)) == "FASTEST": data.set('DEVICETIERS', str(ws.getVal(row=i, column=12))) #------------------------------------------------------------------- elif str(ws.getVal( row=6, column=4)) == "Equipment Category": # standardYear = 2012 raise Exception("Not yet support for standardYear = 2012") # else: raise Exception("Error Template File") # sInput = ET.tostring(data) # if OlxAPILib.run1LPFCommand(sInput): nSuccess += 1 # if nSuccess > 0: print("\nArc-flash calculation ran successfully on " + str(nSuccess) + " buses") print("Report file had been saved in:\n%s" % ARGVS.fo) # open res in Excel if ARGVS.ut == 0: AppUtils.launch_excel(ARGVS.fo) else: print( "Something was not right (no bus found). No arc flash calculation results." ) return 1
def __getsImpedanceLine(kd, bra): #[TC_LINE,TC_SWITCH,TC_SCAP] sres = "" typa = OlxAPILib.getEquipementData(bra, [BR_nType], VT_INTEGER)[0] # bus = OlxAPILib.getEquipementData([bra[0], bra[len(bra) - 1]], [BR_nBus1Hnd], VT_INTEGER) b1, b2 = bus[0][0], bus[0][1] # kV = OlxAPILib.getEquipementData([b1], [BUS_dKVnominal], VT_DOUBLE)[0][0] # if len(bra) == 2: # simple line br1 = bra[0] typ1 = typa[0] equi_hnd = OlxAPILib.getEquipementData([br1], [BR_nHandle], VT_INTEGER)[0][0] # if typ1 == TC_LINE: val = OlxAPILib.getEquipementData( [equi_hnd], [LN_dR, LN_dX, LN_dR0, LN_dX0, LN_dLength], VT_DOUBLE) r1, x1, r0, x0, length = val[0][0], val[1][0], val[2][0], val[3][ 0], val[4][0] # idBr = OlxAPILib.getEquipementData([equi_hnd], [LN_sID], VT_STRING)[0][0] # id line # sres += "\n" + str(kd).ljust(5) + str(",Line").ljust(15) + "," sres += str(OlxAPI.FullBusName(b1)).ljust(30) + "," sres += str(OlxAPI.FullBusName(b2)).ljust(30) + "," sres += str(idBr).ljust(4) + "," sres += OlxAPILib.printImpedance(r1, x1, kV).ljust(35) + "," sres += OlxAPILib.printImpedance(r0, x0, kV).ljust(35) + "," sres += "{0:.2f}".format(length) elif typ1 == TC_SWITCH: idBr = OlxAPILib.getEquipementData([equi_hnd], [SW_sID], VT_STRING)[0][0] # id switch # sres += "\n" + str(kd).ljust(5) + str(",Switch").ljust(15) + "," sres += str(OlxAPI.FullBusName(b1)).ljust(30) + "," sres += str(OlxAPI.FullBusName(b2)).ljust(30) + "," sres += str(idBr).ljust(4) + "," elif typ1 == TC_SCAP: val = OlxAPILib.getEquipementData([equi_hnd], [SC_dR, SC_dX, SC_dR0, SC_dX0], VT_DOUBLE) r1, x1, r0, x0 = val[0][0], val[1][0], val[2][0], val[3][0] # idBr = OlxAPILib.getEquipementData([equi_hnd], [SC_sID], VT_STRING)[0][0] # id switch # sres += "\n" + str(kd).ljust(5) + str(",SerieCap").ljust(15) + "," sres += str(OlxAPI.FullBusName(b1)).ljust(30) + "," sres += str(OlxAPI.FullBusName(b2)).ljust(30) + "," sres += str(idBr).ljust(4) + "," sres += OlxAPILib.printImpedance(r1, x1, kV).ljust(35) + "," sres += OlxAPILib.printImpedance(r0, x0, kV).ljust(35) + "," else: #Line with Tap bus r1a, x1a, r0a, x0a, lengtha = 0, 0, 0, 0, 0 for i in range(len(bra) - 1): br1 = bra[i] typ1 = typa[i] bus = OlxAPILib.getEquipementData([br1], [BR_nBus1Hnd, BR_nBus2Hnd], VT_INTEGER) b1i, b2i = bus[0][0], bus[1][0] # equi_hnd = OlxAPILib.getEquipementData([br1], [BR_nHandle], VT_INTEGER)[0][0] if typ1 == TC_LINE: val = OlxAPILib.getEquipementData( [equi_hnd], [LN_dR, LN_dX, LN_dR0, LN_dX0, LN_dLength], VT_DOUBLE) r1, x1, r0, x0, length = val[0][0], val[1][0], val[2][0], val[ 3][0], val[4][0] r1a, x1a, r0a, x0a, lengtha = r1a + r1, x1a + x1, r0a + r0, x0a + x0, lengtha + length # idBr = OlxAPILib.getEquipementData([equi_hnd], [LN_sID], VT_STRING)[0][0] # id line # sres += "\n" + str("").ljust(5) + str(", Line_seg").ljust( 15) + "," sres += str(OlxAPI.FullBusName(b1i)).ljust(30) + "," sres += str(OlxAPI.FullBusName(b2i)).ljust(30) + "," sres += str(idBr).ljust(4) + "," sres += OlxAPILib.printImpedance(r1, x1, kV).ljust(35) + "," sres += OlxAPILib.printImpedance(r0, x0, kV).ljust(35) + "," sres += "{0:.2f}".format(length) elif typ1 == TC_SWITCH: idBr = OlxAPILib.getEquipementData( [equi_hnd], [SW_sID], VT_STRING)[0][0] # id switch # sres += "\n" + str("").ljust(5) + str(", Switch_seg").ljust( 15) + "," sres += str(OlxAPI.FullBusName(b1i)).ljust(30) + "," sres += str(OlxAPI.FullBusName(b2i)).ljust(30) + "," sres += str(idBr).ljust(4) + "," elif typ1 == TC_SCAP: val = OlxAPILib.getEquipementData( [equi_hnd], [SC_dR, SC_dX, SC_dR0, SC_dX0], VT_DOUBLE) r1, x1, r0, x0 = val[0][0], val[1][0], val[2][0], val[3][0] r1a, x1a, r0a, x0a = r1a + r1, x1a + x1, r0a + r0, x0a + x0 # idBr = OlxAPILib.getEquipementData( [equi_hnd], [SC_sID], VT_STRING)[0][0] # id switch # sres += "\n" + str("").ljust(5) + str(", SerieCap_seg").ljust( 15) + "," sres += str(OlxAPI.FullBusName(b1i)).ljust(30) + "," sres += str(OlxAPI.FullBusName(b2i)).ljust(30) + "," sres += str(idBr).ljust(4) + "," sres += OlxAPILib.printImpedance(r1, x1, kV).ljust(35) + "," sres += OlxAPILib.printImpedance(r0, x0, kV).ljust(35) + "," #summary sres += "\n" + str(kd).ljust(5) + str(",Line_sum").ljust(15) + "," sres += str(OlxAPI.FullBusName(b1)).ljust(30) + "," sres += str(OlxAPI.FullBusName(b2)).ljust(30) + "," sres += str("").ljust(4) + "," sres += OlxAPILib.printImpedance(r1a, x1a, kV).ljust(35) + "," sres += OlxAPILib.printImpedance(r0a, x0a, kV).ljust(35) + "," sres += "{0:.2f}".format(lengtha) return sres + "\n"
def run(): """ Check phase shift of all 2-winding transformers with wye-delta connection. When a transformer with high side lagging the low side is found, this function converts it to make the high side lead. Args : None Returns: string result OLR corrected file Raises: OlrxAPIException """ # if not AppUtils.checkInputOLR(ARGVS.fi, PY_FILE, PARSER_INPUTS): return # OlxAPILib.open_olrFile_1(ARGVS.olxpath, ARGVS.fi, readonly=1) s1 = "" # get all xfmr x2a = OlxAPILib.getEquipmentHandle(TC_XFMR) kd = 0 for x1 in x2a: configA = OlxAPILib.getEquipmentData([x1], XR_sCfg1)[0] configB = OlxAPILib.getEquipmentData([x1], XR_sCfg2)[0] tapA = OlxAPILib.getEquipmentData([x1], XR_dTap1)[0] tapB = OlxAPILib.getEquipmentData([x1], XR_dTap2)[0] # test = False # low - hight => low - hight # G - D G - E if (tapA < tapB) and configA == "G" and configB == "D": test = True # set OlxAPILib.setData(x1, XR_sCfg2, "E") # validation OlxAPILib.postData(x1) # low - small => low - small # G - E G - D if (tapA > tapB) and configA == "G" and configB == "E": test = True # set OlxAPILib.setData(x1, XR_sCfg2, "D") # validation OlxAPILib.postData(x1) # if test: kd += 1 s1 += '\n' + str(kd).ljust(5) + OlxAPILib.fullBranchName(x1) # if kd > 0: s2 = "Fixed (" + str( kd ) + ") wye-delta transformers to make the high side lead the low side:" else: s2 = "All wye-delta transformers in this OLR file have the correct phase shift of the high-side leading the low-side." # print(s2 + s1) # if kd > 0: ARGVS.fo = AppUtils.get_file_out(fo=ARGVS.fo, fi=ARGVS.fi, subf='', ad='_res', ext='.OLR') # OlxAPILib.saveAsOlr(ARGVS.fo) if ARGVS.ut == 0: print("The modified network had been saved as:\n" + ARGVS.fo) AppUtils.launch_OneLiner(ARGVS.fo) # return s2 + s1
def run(): if not AppUtils.checkInputOLR(ARGVS.fi, PY_FILE, PARSER_INPUTS): return if not AppUtils.checkInputPK(ARGVS.pk, 'Relay Group', PY_FILE, PARSER_INPUTS): return # OlxAPILib.open_olrFile(ARGVS.fi, ARGVS.olxpath) # bhnd, tc = OlxAPILib.FindObj1LPF(ARGVS.pk[0]) if tc != TC_RLYGROUP: s = "\nNo Relay Group is selected: " + str( ARGVS.pk) + "\nUnable to continue." return AppUtils.FinishCheck(PY_FILE, s, PARSER_INPUTS) # br1 = OlxAPILib.getEquipmentData([bhnd], RG_nBranchHnd)[0] b1 = OlxAPILib.getEquipmentData([br1], BR_nBus1Hnd)[0] nTap1 = OlxAPILib.getEquipmentData([b1], BUS_nTapBus)[0] inSer1 = OlxAPILib.getEquipmentData([br1], BR_nInService)[0] sLocal = "Local Relay Group: " + OlxAPILib.fullBranchName(br1) if nTap1 > 0: s = '\n' + sLocal + "\n\tis located at a TAP bus. Unable to continue." return AppUtils.FinishCheck(PY_FILE, s, None) # if inSer1 != 1: s = '\n' + sLocal + "\n\tis located on out-of-service branch. Unable to continue." return AppUtils.FinishCheck(PY_FILE, s, None) # kr = 0 sres = "" bres = OlxAPILib.getOppositeBranch( hndBr=br1, typeConsi=[] ) # consider all type [TC_LINE,TC_SWITCH,TC_SCAP,TC_PS,TC_XFMR,TC_XFMR3] # for bri in bres: rg1 = -1 try: rg1 = OlxAPILib.getEquipmentData([bri], BR_nRlyGrp1Hnd)[0] except: pass # if rg1 > 0: kr += 1 sres += "\n\t" + OlxAPILib.fullBranchName(bri) # s0 = 'App: ' + PY_FILE s0 += '\nUser: '******'\nDate: ' + time.asctime() s0 += '\nOLR file: ' + ARGVS.fi s0 += '\n\nSelected Relay Group:' + str(ARGVS.pk[0]) if kr > 1: s0 += "\nRemote groups (" + str(kr) + "):" else: s0 += "\nRemote group (" + str(kr) + "):" # ARGVS.fo = AppUtils.get_file_out(fo=ARGVS.fo, fi=ARGVS.fi, subf='res', ad='_res', ext='.txt') # AppUtils.saveString2File(ARGVS.fo, s0 + sres) print("\nReport file had been saved in:\n" + ARGVS.fo) if ARGVS.ut == 0: AppUtils.launch_notepadpp(ARGVS.fo) return 1
def do1busFlt1(bhnd): # fltConn = [1,1,1,1] # fltOpt = [0]*15 fltOpt[0] = 1 # Bus or Close-in OlxAPILib.doFault(bhnd,fltConn, fltOpt, outageOpt=[], outageLst=[], fltR=0, fltX=0, clearPrev=1) OlxAPILib.pick1stFault() # nRound = 2 sres = '' while True: sres += "\n"+ OlxAPILib.faultDescription() # mag,ang = OlxAPILib.getSCCurrent(hnd=HND_SC,style=4) # for i in range(3): sres += "," + str(round(mag[i],nRound)) +"@" + str(round(ang[i],nRound)) # r0 = OlxAPILib.getEquipmentData([HND_SC],FT_dRZt)[0] r1 = OlxAPILib.getEquipmentData([HND_SC],FT_dRPt)[0] r2 = OlxAPILib.getEquipmentData([HND_SC],FT_dRNt)[0] # x0 = OlxAPILib.getEquipmentData([HND_SC],FT_dXZt)[0] x1 = OlxAPILib.getEquipmentData([HND_SC],FT_dXPt)[0] x2 = OlxAPILib.getEquipmentData([HND_SC],FT_dXNt)[0] # xr = OlxAPILib.getEquipmentData([HND_SC],FT_dXR)[0] # R0+jX0, R1+jX1, R2+jX2, X/R sres += "," + str(round(r0,nRound)) +"+j" + str(round(x0,nRound)) sres += "," + str(round(r1,nRound)) +"+j" + str(round(x1,nRound)) sres += "," + str(round(r2,nRound)) +"+j" + str(round(x2,nRound)) sres += "," + str(round(xr,nRound)) if not OlxAPILib.pickNextFault(): break # return sres