def readStatefromJSON(self, state): """Load instance parameter from saved file""" self.L = unidades.Length(state["L"]) self.rho = unidades.Density(state["rho"]) self.mu = unidades.Viscosity(state["mu"]) self.material = state["material"] self.Dn = state["Dn"] self.rugosidad = unidades.Length(state["rugosidad"]) self.De = unidades.Length(state["De"]) self.w = unidades.Length(state["w"]) self.Di = unidades.Length(state["Di"]) self.eD = unidades.Dimensionless(state["eD"]) self.seccion = unidades.Area(state["seccion"]) self.A = unidades.Area(state["A"]) self.V = unidades.Speed(state["V"]) self.Re = unidades.Dimensionless(state["Re"]) self.K = unidades.Dimensionless(state["K"]) self.DeltaP_h = unidades.DeltaP(state["DeltaP_h"]) self.DeltaP_ac = unidades.DeltaP(state["DeltaP_ac"]) self.f = unidades.Dimensionless(state["f"]) self.DeltaP_f = unidades.DeltaP(state["DeltaP_f"]) self.DeltaP_v = unidades.DeltaP(state["DeltaP_v"]) self.DeltaP = unidades.DeltaP(state["DeltaP"]) self.DeltaP_100ft = unidades.Dimensionless(state["DeltaP_100ft"]) self.Tout = unidades.Temperature(state["Tout"]) self.Heat = unidades.Power(state["Heat"]) self.Pin = unidades.Pressure(state["Pin"]) self.Pout = unidades.Pressure(state["Pout"]) self.statusCoste = state["statusCoste"] if self.statusCoste: self.C_adq = unidades.Currency(state["C_adq"]) self.C_inst = unidades.Currency(state["C_inst"]) self.salida = [None]
def calculo(self): self.entrada = self.kwargs["entrada"] self.L = unidades.Length(self.kwargs["l"]) if self.entrada.x == 0: self.rho = self.entrada.Liquido.rho self.mu = self.entrada.Liquido.mu else: self.rho = self.entrada.Gas.rho self.mu = self.entrada.Gas.mu self.material = self.kwargs["material"][0] + " " + self.kwargs[ "material"][1] self.Dn = self.kwargs["material"][3] self.rugosidad = unidades.Length(self.kwargs["material"][2], "mm") self.De = unidades.Length(self.kwargs["material"][6], "mm") self.w = unidades.Length(self.kwargs["material"][5], "mm") self.Di = unidades.Length((self.De - 2 * self.w)) self.eD = unidades.Dimensionless(self.rugosidad / self.Di) self.seccion = unidades.Area(pi / 4 * self.Di**2) self.A = unidades.Area(pi * self.De * self.L) self.V = unidades.Speed(self.entrada.Q / self.seccion) self.Re = Re(self.Di, self.V, self.rho, self.mu) K = 0 for accesorio in self.kwargs["accesorios"]: K += accesorio[2] * accesorio[3] self.K = unidades.Dimensionless(K) self.DeltaP_h = unidades.Pressure(g * self.kwargs["h"] * self.rho) self.DeltaP_ac = unidades.Pressure(self.K * self.V**2 / 2 * self.rho) self.f = f_friccion(self.Re, self.eD) self.DeltaP_f = self.__DeltaP_friccion() #TODO: self.DeltaP_v = unidades.Pressure(0) self.DeltaP = unidades.Pressure(self.DeltaP_f + self.DeltaP_ac + self.DeltaP_h) self.DeltaP_100ft = self.DeltaP * 100 / self.L.ft self.Pout = unidades.Pressure(self.entrada.P - self.DeltaP) if self.kwargs["thermal"] == 0: self.Tout = self.entrada.T self.Heat = unidades.Power(0) else: cambiador = Heat_Exchanger() cambiador.calculo(entrada=self.entrada, modo=self.kwargs["thermal"], Heat=self.kwargs["Q"], deltaP=self.DeltaP, A=self.A, U=self.kwargs["U"], Text=self.kwargs["Text"]) self.Tout = cambiador.salida[0].T self.Heat = cambiador.Heat self.salida = [self.entrada.clone(T=self.Tout, P=self.Pout)] self.Pin = self.entrada.P self.Pout = self.salida[0].P
def __init__(self, entrada=None, parent=None): """entrada: Parametro opcional de clase corriente que indica la corriente de entrada""" super(UI_equipment, self).__init__(Baghouse, entrada=False, parent=parent) self.entrada = entrada #Pestaña entrada self.Entrada = UI_corriente.Ui_corriente(entrada) self.Entrada.Changed.connect(self.cambiar_entrada) self.tabWidget.insertTab( 0, self.Entrada, QtWidgets.QApplication.translate("equipment", "Entrada", None)) #Pestaña definición rendimientos self.Rendimientos = QtWidgets.QTableWidget(1, 2) self.Rendimientos.setItemDelegateForColumn(1, CellEditor(self)) self.Rendimientos.setSelectionBehavior( QtWidgets.QAbstractItemView.SelectRows) self.Rendimientos.verticalHeader().hide() self.Rendimientos.setEditTriggers( QtWidgets.QAbstractItemView.AllEditTriggers) if self.entrada: self.rellenarTablaRendimientos() self.rendimientos = [] self.Rendimientos.cellChanged.connect(self.cambiarRendimientos) self.tabWidget.insertTab( 1, self.Rendimientos, QtWidgets.QApplication.translate("equipment", "Rendimientos", None)) #Cálculo gridLayout_Calculo = QtWidgets.QGridLayout(self.tabCalculo) gridLayout_Calculo.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("equipment", "Tipo de cálculo:", None)), 1, 1, 1, 1) self.TipoCalculo = QtWidgets.QComboBox() self.TipoCalculo.addItem( QtWidgets.QApplication.translate("equipment", "Calcular caída de presión", None)) self.TipoCalculo.addItem( QtWidgets.QApplication.translate("equipment", "Calcular tiempo de filtración", None)) self.TipoCalculo.addItem( QtWidgets.QApplication.translate("equipment", "Calcular número de filtros", None)) self.TipoCalculo.currentIndexChanged.connect(self.tipoCalculoCambiado) gridLayout_Calculo.addWidget(self.TipoCalculo, 1, 2, 1, 4) gridLayout_Calculo.addItem( QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed), 2, 1, 1, 6) gridLayout_Calculo.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("equipment", "Nº de filtros:", None)), 3, 1, 1, 1) self.numFiltros = Entrada_con_unidades(int, spinbox=True, step=1, width=50, resaltado=True, min=1, start=1) self.numFiltros.valueChanged.connect(self.calculo) gridLayout_Calculo.addWidget(self.numFiltros, 3, 2, 1, 1) gridLayout_Calculo.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("equipment", "Tiempo de filtración:", None)), 4, 1, 1, 1) self.tiempo = Entrada_con_unidades(unidades.Time, resaltado=True) self.tiempo.valueChanged.connect(self.calculo) gridLayout_Calculo.addWidget(self.tiempo, 4, 2, 1, 1) gridLayout_Calculo.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("equipment", "Pérdida de presión:", None)), 5, 1, 1, 1) self.deltaP = Entrada_con_unidades(unidades.Pressure, retornar=False, readOnly=True) self.deltaP.valueChanged.connect(self.calculo) gridLayout_Calculo.addWidget(self.deltaP, 5, 2, 1, 1) gridLayout_Calculo.addItem( QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed), 6, 1, 1, 6) gridLayout_Calculo.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("equipment", "Membranas por filtro:", None)), 7, 1, 1, 1) self.MembranaCelda = Entrada_con_unidades(int, spinbox=True, step=1, width=70, value=78, min=1) self.MembranaCelda.valueChanged.connect(self.calculo) gridLayout_Calculo.addWidget(self.MembranaCelda, 7, 2, 1, 1) gridLayout_Calculo.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("equipment", "Diametro de membrana:", None)), 8, 1, 1, 1) self.Diametro = Entrada_con_unidades(unidades.Length, value=unidades.Length(0.5, "ft")) self.Diametro.valueChanged.connect(self.calculo) gridLayout_Calculo.addWidget(self.Diametro, 8, 2, 1, 1) gridLayout_Calculo.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("equipment", "Area por membrana:", None)), 9, 1, 1, 1) self.Area = Entrada_con_unidades(unidades.Area, value=unidades.Area(16, "ft2")) self.Area.valueChanged.connect(self.calculo) gridLayout_Calculo.addWidget(self.Area, 9, 2, 1, 1) gridLayout_Calculo.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("equipment", "Resistencia filtro:", None)), 7, 4, 1, 1) self.resistenciaFiltro = Entrada_con_unidades(float, spinbox=True, step=0.01, width=70, value=0.84, min=0) self.resistenciaFiltro.valueChanged.connect(self.calculo) gridLayout_Calculo.addWidget(self.resistenciaFiltro, 7, 5, 1, 1) gridLayout_Calculo.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("equipment", "Resistencia torta:", None)), 8, 4, 1, 1) self.resistenciaTorta = Entrada_con_unidades(float, spinbox=True, step=0.01, width=70, value=0.1, min=0) self.resistenciaTorta.valueChanged.connect(self.calculo) gridLayout_Calculo.addWidget(self.resistenciaTorta, 8, 5, 1, 1) gridLayout_Calculo.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("equipment", "Filtros en limpieza:", None)), 9, 4, 1, 1) self.Limpieza = Entrada_con_unidades(int, spinbox=True, step=1, width=70, value=1, min=0) self.Limpieza.valueChanged.connect(self.calculo) gridLayout_Calculo.addWidget(self.Limpieza, 9, 5, 1, 1) gridLayout_Calculo.addItem( QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 10, 1, 1, 6) self.groupBox_Calculo = QtWidgets.QGroupBox( QtWidgets.QApplication.translate("equipment", "Datos calculados", None)) gridLayout_Calculo.addWidget(self.groupBox_Calculo, 11, 1, 1, 5) self.gridLayout_1 = QtWidgets.QGridLayout(self.groupBox_Calculo) self.gridLayout_1.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("equipment", "V<sub>gas</sub>:", None)), 0, 1, 1, 1) self.Vgas = Entrada_con_unidades(unidades.Speed, retornar=False, readOnly=True) self.gridLayout_1.addWidget(self.Vgas, 0, 2, 1, 1) self.gridLayout_1.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("equipment", "Rendimiento:", None)), 1, 1, 1, 1) self.rendimientoCalculado = Entrada_con_unidades(float, readOnly=True) self.gridLayout_1.addWidget(self.rendimientoCalculado, 1, 2, 1, 1) self.gridLayout_1.addWidget( QtWidgets.QLabel( QtWidgets.QApplication.translate("equipment", "Superficie:", None)), 2, 1, 1, 1) self.superficie = Entrada_con_unidades(unidades.Area, readOnly=True) self.gridLayout_1.addWidget(self.superficie, 2, 2, 1, 1) gridLayout_Calculo.addItem( QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding), 12, 1, 1, 6) #Salidas self.SalidaGas = UI_corriente.Ui_corriente(readOnly=True) self.SalidaSolido = UI_corriente.Ui_corriente(readOnly=True) self.Salida.addTab( self.SalidaGas, QtWidgets.QApplication.translate("equipment", "Gas filtrado", None)) self.Salida.addTab( self.SalidaSolido, QtWidgets.QApplication.translate("equipment", "Sólidos recogidos", None)) self.tabWidget.setCurrentIndex(0)