2012-07-03 3 views
0

Я пытаюсь загрузить шины в PSS/E, используя программу python. Поэтому я пытаюсь написать сценарий в python, где я могу менять нагрузки на разные значения между двумя шинами в PSS/E.Python и PSS/E

ответ

1

Вы можете использовать процедуру API под названием LOAD_CHNG_4 (поиск этой процедуры в документации API.pdf). Эта подпрограмма относится к набору функций спецификации данных нагрузки. Его можно использовать для изменения данных существующей нагрузки в рабочем режиме.

1

Посмотрите главу II Python API PSSE. Он полностью охватывает изменение данных о потоке мощности. На данные нагрузки можно ссылаться на номер шины и идентификатор нагрузки. Вы можете изменить все параметры, которые вы видите на паспортной табличке, когда вручную вводите сами данные загрузки. Используйте эту функцию ниже, чтобы изменить нагрузку:

ierr = psspy.load_chang(bus_number, load_id, intgar,realar) 

Дополнительную информацию см. На стр. 728 руководства по API.

1

Я написал этот класс для обработки грузов в PSSE ... Первоначально он послал с SQL алхимии, так что имеет некоторые дополнительные, которые я удалены:

class Load(): 

    def __init__(self,busnumber,loadID): 
     # Initialize the Branch Class Instance Variables to a Default 0; Except for the From,To and Circuit ID 
     self.bus = Bus(busnumber) 
     self.busI = busnumber 
     self.loadID = loadID 
     self.status = 0 
     self.Pload = 0.0 
     self.Qload = 0.0 

     self.errorList = [] 
     self.init() 
    def init(self): 
     # Setup the load from the case 
     # Check to see if bus exists 
     busOk = self.bus.init() 
     if not busOk[0]: 
      return (False,self.bus.number,"The bus number %d is invalid or does not exist..." % self.bus.number) 
     if psspy.loddt2(self.bus.number,self.loadID,'TOTAL','ACT')[0] != 0: 
      return (False,False) 
     Scomplex = self.check(psspy.loddt2(self.bus.number,self.loadID,'TOTAL','ACT'),'loddt2','ACT')    # Grab the S vector/phasor from the power flow case for the load specified at the BUS number 
     self.Pload = Scomplex.real 
     self.Qload = Scomplex.imag 
     self.status = self.check(psspy.lodint(self.bus.number,self.loadID,'STATUS'),'lodint','STATUS')    # Grab the Status of the Load 

     return (True,self.bus.number) 

    def check(self,tuple,funName,subFun): 
     # Define Error Messages that should be accesable by the end-user and developer 
     loddt2 = { 
      0:'No error; P and Q or CMPVAL returned', 
      1:'Bus not found; P and Q or CMPVAL unchanged.', 
      2:'Load not found; P and Q or CMPVAL unchanged.', 
      3:'Bus type code is not 1, 2 or 3; P and Q or CMPVAL returned.', 
      4:'Load out-of-service; P and Q or CMPVAL returned.', 
      5:'Invalid value of STRING1 or STRING2; P and Q or CMPVAL unchanged.' 
     } 

     lodint = { 
      0:'No error; IVAL returned.', 
      1:'Bus not found; IVAL unchanged.', 
      2:'Load not found; IVAL unchanged.', 
      3:'Bus type code is not 1, 2 or 3; IVAL returned.', 
      4:'Load out-of-service; IVAL returned.', 
      5:'Invalid value of STRING; IVAL unchanged.' 
     }  

     funDic = { 
      'loddt2':loddt2, 
      'lodint':lodint 
     } 

     # Retrieve the Right Error Message 
     list = funDic[funName] 
     msg = list[tuple[0]] 
     if tuple[0] > 0: 
      logging.debug("Function Name: %s Sub Function Name: %s Error Message: %s"%(funName,subFun,msg)) 

     return tuple[1] 

    def setLoad(self,loadP): 
     self.Pload = loadP 
    def updateCase(self): 

     # Setup Defaults 
     _i = psspy.getdefaultint() 
     _f = psspy.getdefaultreal() 
     cDef = psspy.getdefaultchar() 
     psspy.load_data_3(self.bus.number,self.loadID,[self.status,_i,_i,_i,_i],[self.Pload, self.Qload,_f,_f,_f,_f]) 

    # To String Method 
    def __repr__(self): 
     return "%d %s %d %d" %(self.bus.number,self.loadID,self.Pload,self.Qload) 

    # printf Statement that Dumps information to CMD line...Homeage to C and C++ 
    def printf(self): 
     print "\n Bus: %d \n Load ID: %s \n MW Value: %d \n MVAR Value: %d \n" % (self.bus.number,self.loadID,self.Pload,self.Qload) 

При вызове функции с именем «updateCase» это будет принимать значения, которые когда-либо сохраняются в загрузочном объекте, и обновлять регистр PSSE.