def run_OpenDSS(dss_debug, solverFlag): # SET SOURCEBUS # VsourceClass.sourcebus = vsourceobj.id[1] dssObj = win32com.client.Dispatch( 'OpenDSSEngine.DSS') # OPENDSS COMPORT dssObj.AllowForms = False dssText = dssObj.Text dssCkt = dssObj.ActiveCircuit dssSolution = dssCkt.Solution dssActvElem = dssCkt.ActiveCktElement dssActvBus = dssCkt.ActiveBus dssText.Command = 'Clear' dssText.Command = 'Set DataPath=\'C:\\Users\\' + os_username + '\\Documents\\OpenDSS' dssText.Command = 'Set DefaultBaseFrequency=60' for object in object_list: object.createAllDSS(dssText, {}, dss_debug) set_voltagebase = set() for object in object_list: set_voltagebase = set_voltagebase | object.voltagesToSets() dssText.Command = 'Set VoltageBases={}'.format(list(set_voltagebase)) dssText.Command = 'CalcVoltageBases' dssText.Command = 'Solve BaseFrequency=60 MaxIter=300' variant_buses = automation.VARIANT() variant_voltages_mag = automation.VARIANT() variant_voltages_pu = automation.VARIANT() variant_currents = automation.VARIANT() variant_powers = automation.VARIANT() for object in object_list: object.readAllDSSOutputs(dssCkt, dssActvElem, dssActvBus, variant_buses, variant_voltages_mag, variant_voltages_pu, variant_currents, variant_powers) if solverFlag == False: dssText.Command = 'Save Circuit' dssText.Command = 'Export Summary (summary.csv)' dssText.Command = 'Export Currents (currents.csv)' dssText.Command = 'Export Voltages (voltages.csv)' dssText.Command = 'Export Overloads (overloads.csv)' dssText.Command = 'Export Powers kVA (powers.csv)' losses = dssCkt.Losses return float(losses[0]) * 0.001, float(losses[1]) * 0.001 # kW, kVar
def browseableMessage(message, title=None, isHtml=False): """Present a message to the user that can be read in browse mode. The message will be presented in an HTML document. @param message: The message in either html or text. @type message: str @param title: The title for the message. @type title: str @param isHtml: Whether the message is html @type isHtml: boolean """ htmlFileName = os.path.join(globalVars.appDir, 'message.html') if not os.path.isfile(htmlFileName): raise LookupError(htmlFileName) moniker = POINTER(IUnknown)() windll.urlmon.CreateURLMonikerEx(0, htmlFileName, byref(moniker), URL_MK_UNIFORM) if not title: # Translators: The title for the dialog used to present general NVDA messages in browse mode. title = _("NVDA Message") isHtmlArgument = "true" if isHtml else "false" dialogString = u"{isHtml};{title};{message}".format(isHtml=isHtmlArgument, title=title, message=message) dialogArguements = automation.VARIANT(dialogString) gui.mainFrame.prePopup() windll.mshtml.ShowHTMLDialogEx(gui.mainFrame.Handle, moniker, HTMLDLG_MODELESS, addressof(dialogArguements), DIALOG_OPTIONS, None) gui.mainFrame.postPopup()
def Get_Circuit_AllBusVmagPu(self): """ Método que retorna uma lista com as tensões nodais em pu de todos os nós do circuito""" # Declarando um ponteiro para uma variável do tipo "variant" variant_pointer = ctypes.pointer(automation.VARIANT()) self.dssObj.CircuitV(ctypes.c_int(9), variant_pointer, ctypes.c_int32(0)) return variant_pointer.contents.value
def Get_Circuit_AllNodeNames(self): """ Método que retorna uma lista com os nomes de todas os nós do circuito""" # Declarando um ponteiro para uma variável do tipo "variant" variant_pointer = ctypes.pointer(automation.VARIANT()) self.dssObj.CircuitV(ctypes.c_int(10), variant_pointer, ctypes.c_int32(0)) return variant_pointer.contents.value
def get_Circuit_AllBusNames(self): """ Método que get os nomes das barras""" variant_pointer = ctypes.pointer(automation.VARIANT()) self.dssObj.CircuitV(ctypes.c_int32(7), variant_pointer, ctypes.c_int32(0)) return variant_pointer.contents.value
def get_Circuit_AllBusVMagPu(self): """ Método que retorna as tensões das barras em pu""" variant_pointer = ctypes.pointer(automation.VARIANT()) self.dssObj.CircuitV(ctypes.c_int32(9), variant_pointer, ctypes.c_int32(0)) return variant_pointer.contents.value
def get_Transformer_AllNames(self): """ Método que retorna os nomes dos transformeres""" variant_pointer = ctypes.pointer(automation.VARIANT()) self.dssObj.TransformersV(ctypes.c_int(0), variant_pointer) return variant_pointer.contents.value
def get_CktElement_BusNames(self): """ Método que retorna os nomes das barras do elemento ativo""" variant_pointer = ctypes.pointer(automation.VARIANT()) self.dssObj.CktElementV(ctypes.c_int32(0), variant_pointer) return variant_pointer.contents.value
def get_Load_AllNames(self): """ Método que retorna o nome de todas as cargas""" variant_pointer = ctypes.pointer(automation.VARIANT()) self.dssObj.DSSLoadsV(ctypes.c_int32(0), variant_pointer) return variant_pointer.contents.value
def get_VSource_AllNames(self): """ Método que retorna o nome de todas as fontes""" variant_pointer = ctypes.pointer(automation.VARIANT()) self.dssObj.VsourcesV(ctypes.c_int32(0), variant_pointer) return variant_pointer.contents.value
def Get_Transformer_AllNames(self): """ Método que retorna uma lista com os nomes de todos os Transformadores""" # Declarando um ponteiro para uma variável do tipo "variant" variant_pointer = ctypes.pointer(automation.VARIANT()) self.dssObj.TransformersV(ctypes.c_int(0), variant_pointer) return variant_pointer.contents.value
def Get_CktElement_BusNames(self): """ Método que retorna uma lista com o nome das barras à qual o elemento ativo se conecta""" # Declarando um ponteiro para uma variável do tipo "variant" variant_pointer = ctypes.pointer(automation.VARIANT()) self.dssObj.CktElementV(ctypes.c_int(0), variant_pointer) return variant_pointer.contents.value
def Get_Loads_AllNames(self): """ Método que retorna uma lista com os nomes de todas as cargas do circuito""" # Declarando um ponteiro para uma variável do tipo "variant" variant_pointer = ctypes.pointer(automation.VARIANT()) self.dssObj.DSSLoadsV(ctypes.c_int(0), variant_pointer) return variant_pointer.contents.value
def Get_Meters_RegisterValues(self): """ Método que retorna uma lista com os valores do registros do medidor ativo""" # Declarando um ponteiro para uma variável do tipo "variant" variant_pointer = ctypes.pointer(automation.VARIANT()) self.dssObj.MetersV(ctypes.c_int(2), variant_pointer) return variant_pointer.contents.value
def Get_Meters_AllNames(self): """ Método que retorna uma lista com o nome de todos os medidores do circuito""" # Declarando um ponteiro para uma variável do tipo "variant" variant_pointer = ctypes.pointer(automation.VARIANT()) self.dssObj.MetersV(ctypes.c_int(0), variant_pointer) return variant_pointer.contents.value
def run_OpenDSS(dss_debug, solverFlag): # SET SOURCEBUS # VsourceClass.sourcebus = vsourceobj.id[1] dssObj = win32com.client.Dispatch( 'OpenDSSEngine.DSS') # OPENDSS COMPORT dssObj.AllowForms = False dssText = dssObj.Text dssCkt = dssObj.ActiveCircuit dssSolution = dssCkt.Solution dssActvElem = dssCkt.ActiveCktElement dssActvBus = dssCkt.ActiveBus dssText.Command = 'Clear' dssText.Command = 'Set DataPath=\'C:\\Users\\' + os_username + '\\Documents\\OpenDSS' dssText.Command = 'Set DefaultBaseFrequency=60' for object in object_list: object.createAllDSS(dssText, interconn_dict, dss_debug) set_voltagebase = set() for object in object_list: set_voltagebase = set_voltagebase | object.voltagesToSets() dssText.Command = 'Set VoltageBases={}'.format(list(set_voltagebase)) dssText.Command = 'CalcVoltageBases' dssText.Command = 'Solve BaseFrequency=60 MaxIter=300' variant_buses = automation.VARIANT() variant_voltages_mag = automation.VARIANT() variant_voltages_pu = automation.VARIANT() variant_currents = automation.VARIANT() variant_powers = automation.VARIANT() for object in object_list: object.readAllDSSOutputs(dssCkt, dssActvElem, dssActvBus, variant_buses, variant_voltages_mag, variant_voltages_pu, variant_currents, variant_powers) if solverFlag == False: # dssText.Command = 'Save Circuit' # dssText.Command = 'Export Summary (summary.csv)' # dssText.Command = 'Export Currents (currents.csv)' # dssText.Command = 'Export Voltages (voltages.csv)' # dssText.Command = 'Export Overloads (overloads.csv)' # dssText.Command = 'Export Powers kVA (powers.csv)' input_list_continuous = [] input_list_categorical = [] input_tensor_continuous = np.empty([0, 0], dtype=np.float64).flatten() input_tensor_categorical = np.empty([0, 0], dtype=np.float64).flatten() for object in object_list: list_continuous, list_categorical, tensor_continuous, tensor_categorical = object.convertToInputTensor( ) input_list_continuous = input_list_continuous + list_continuous input_list_categorical = input_list_categorical + list_categorical input_tensor_continuous = np.concatenate( (input_tensor_continuous, tensor_continuous), axis=0) input_tensor_categorical = np.concatenate( (input_tensor_categorical, tensor_categorical), axis=0) output_list = [] output_tensor = np.empty([0, 0], dtype=np.float64).flatten() for object in object_list: o_list, o_tensor = object.convertToOutputTensor() output_list = output_list + o_list output_tensor = np.concatenate((output_tensor, o_tensor), axis=0) return input_list_continuous, input_list_categorical, output_list, input_tensor_continuous, input_tensor_categorical, output_tensor else: losses = dssCkt.Losses return float(losses[0]) * 0.001 # kW