#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''Pychemqt, Chemical Engineering Process simulator
Copyright (C) 2009-2023, Juan José Gómez Romera <jjgomera@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 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.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.'''
###############################################################################
# Module for pdf integration
# TODO: to improve studying reportlab library
###############################################################################
import os
from tools.qt import QtGui
from lib import config
from lib.utilities import representacion
if os.environ["reportlab"] == "True":
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
[docs]
class pdf():
[docs]
def __init__(self, titulo):
self.c = canvas.Canvas("datasheet.pdf", pagesize=A4)
self.c.setTitle(titulo)
[docs]
def dibujar(self):
self.c.showPage()
self.c.save()
[docs]
def marco(self, titulo):
# marco
self.c.setLineWidth(2)
self.c.line(3.5*cm, 2.5*cm, 19.5*cm,2.5*cm)
self.c.line(3.5*cm, 2.5*cm, 3.5*cm, 27.2*cm)
self.c.line(3.5*cm, 27.2*cm,19.5*cm,27.2*cm)
self.c.line(19.5*cm,2.5*cm,19.5*cm,27.2*cm)
# encabezado
self.c.setLineWidth(1)
self.c.line(3.5*cm, 660, 19.5*cm,660)
self.c.line(10*cm, 27.2*cm, 10*cm,660)
self.c.line(3.5*cm, 741, 19.5*cm,741)
self.c.setFont("Helvetica-Bold", 12)
self.c.drawCentredString(14.75*cm, 753, titulo)
self.c.setLineWidth(0.5)
self.c.line(3.5*cm, 676, 10*cm,676) #revisiones
self.c.line(3.5*cm, 692, 10*cm,692)
self.c.line(3.5*cm, 708, 10*cm,708)
self.c.line(3.5*cm, 724, 10*cm,724)
self.c.line(4.6*cm, 741, 4.6*cm, 660)
self.c.line(6.4*cm, 741, 6.4*cm, 660)
self.c.line(8.2*cm, 741, 8.2*cm, 660)
self.c.setFont("Helvetica", 10)
self.c.drawString(3.6*cm, 728.5, "Rev.")
self.c.drawRightString(4.3*cm, 712.5, "1")
self.c.drawRightString(4.3*cm, 696.5, "2")
self.c.drawRightString(4.3*cm, 680.5, "3")
self.c.drawRightString(4.3*cm, 664.5, "4")
self.c.drawCentredString(5.5*cm, 728.5, "Sustit por")
self.c.drawCentredString(7.3*cm, 728.5, "Fecha")
self.c.drawCentredString(9.1*cm, 728.5, "Sustit a")
self.c.line(10*cm, 714, 19.5*cm,714) #propietario
self.c.line(10*cm, 687, 19.5*cm,687)
self.c.line(13.17*cm, 741, 13.17*cm, 660)
self.c.line(16.33*cm, 741, 16.33*cm, 660)
self.c.drawString(10.1*cm, 731, "Cliente")
self.c.drawString(13.2*cm, 731, "Nº Equipo")
self.c.drawString(16.4*cm, 731, "Página")
self.c.drawString(10.1*cm, 705, "W.O.")
self.c.drawString(13.2*cm, 705, "Nº Requerimiento")
self.c.drawString(16.4*cm, 705, "Nº Especificación")
self.c.drawString(10.1*cm, 678, "Area")
self.c.drawString(13.2*cm, 678, "Suministrado por")
self.c.drawString(16.4*cm, 678, "Instalado por")
[docs]
def bomba(self, bomba):
titulo = "BOMBA CENTRÍFUGA"
nombre = "Bomba impulsión tubería 1A"
fluido = "Líquido madre"
necesarios = 1
tipo = "ANSI AABack PullOut"
situacion = "Interior"
fabricante = "Goulds"
modelo = "3196STD"
tamano = "1 x1-1/2 x8"
iscorrosivo = "No corrosivo"
corrosivos = "N/A"
solidos = "No"
peligros = ""
caudal_diseno = 50
caudal_normal = 50
temperatura = 95
presion = bomba.entrada.P
viscosidad = bomba.entrada.Liquido.mu
gravedad = 1.1
self.marco(titulo)
# General
self.c.setLineWidth(1)
self.c.line(3.5*cm, 640, 19.5*cm,640)
self.c.line(3.5*cm, 625, 19.5*cm,625)
self.c.setLineWidth(0.5)
self.c.line(3.5*cm, 610, 19.5*cm,610)
self.c.line(3.5*cm, 595, 19.5*cm,595)
self.c.line(3.5*cm, 580, 19.5*cm,580)
self.c.line(11.5*cm, 565, 11.5*cm,625)
self.c.drawCentredString(11.5*cm, 647, nombre)
self.c.drawCentredString(11.5*cm, 629, "General")
self.c.setFont("Helvetica", 8)
self.c.drawString(3.6*cm, 615, "Fluido: "+fluido)
self.c.drawString(3.6*cm, 600, "Bombas necesarias: "+ str(necesarios))
self.c.drawString(3.6*cm, 585, "Tipo: "+ tipo)
self.c.drawString(3.6*cm, 570, "Situación: "+ situacion)
self.c.drawString(11.6*cm, 615, "Fabricante: "+ fabricante)
self.c.drawString(11.6*cm, 600, "Modelo: "+ modelo)
self.c.drawString(11.6*cm, 585, "Tamaño: "+ tamano)
# Datos de proceso
self.c.setLineWidth(1)
self.c.line(3.5*cm, 565, 19.5*cm,565)
self.c.line(3.5*cm, 550, 19.5*cm,550)
self.c.setLineWidth(0.5)
self.c.line(3.5*cm, 535, 19.5*cm,535)
self.c.line(3.5*cm, 520, 19.5*cm,520)
self.c.line(3.5*cm, 505, 19.5*cm,505)
self.c.line(3.5*cm, 490, 19.5*cm,490)
self.c.line(11.5*cm, 475, 19.5*cm,475)
self.c.line(11.5*cm, 550, 11.5*cm,460)
self.c.setFont("Helvetica", 10)
self.c.drawCentredString(11.5*cm, 555, "Datos de proceso")
self.c.setFont("Helvetica", 8)
self.c.drawString(3.6*cm, 540, "Fluido: "+ fluido)
self.c.drawString(3.6*cm, 525, "Características: "+ iscorrosivo)
self.c.drawString(3.6*cm, 510, "Compuestos corrosivos: "+ corrosivos)
self.c.drawString(3.6*cm, 495, "Sólidos: "+ solidos)
self.c.drawString(3.6*cm, 480, "Peligros: "+ peligros)
self.c.drawString(11.6*cm, 540, "Caudal normal: "+ str(caudal_normal) + "gdm")
self.c.drawString(11.6*cm, 525, "Caudal de diseño: "+ str(caudal_diseno) + "gdm")
self.c.drawString(11.6*cm, 510, "Temperatura de bombeo: "+ str(temperatura) + "ºF")
self.c.drawString(11.6*cm, 495, "Presión de vapor @ T.B.: "+ representacion(presion) + config.Configuracion("Pressure").text())
self.c.drawString(11.6*cm, 480, "Viscosidad @ T.B.: "+ representacion(viscosidad) + config.Configuracion("Viscosity").text())
self.c.drawString(11.6*cm, 465, "Gravedad específica @ T.B.: "+ str(gravedad))
# Condiciones de bombeo
self.c.setLineWidth(1)
self.c.line(3.5*cm, 445, 19.5*cm,445)
self.c.line(3.5*cm, 460, 19.5*cm,460)
self.c.setLneWidth(0.5)
self.c.line(3.5*cm, 445, 19.5*cm,445)
self.c.line(3.5*cm, 430, 19.5*cm,430)
self.c.line(3.5*cm, 415, 19.5*cm,415)
self.c.line(3.5*cm, 400, 19.5*cm,400)
self.c.line(3.5*cm, 385, 19.5*cm,385)
self.c.line(3.5*cm, 370, 19.5*cm,370)
self.c.line(3.5*cm, 355, 19.5*cm,355)
self.c.line(3.5*cm, 340, 19.5*cm,340)
self.c.line(3.5*cm, 325, 19.5*cm,325)
self.c.line(3.5*cm, 310, 19.5*cm,310)
self.c.line(3.5*cm, 295, 19.5*cm,295)
self.c.line(3.5*cm, 280, 19.5*cm,280)
self.c.line(3.5*cm, 265, 19.5*cm,265)
self.c.line(8.5*cm, 445, 8.5*cm,250)
self.c.line(14*cm, 445, 14*cm,250)
self.c.setFont("Helvetica", 10)
self.c.drawCentredString(11.5*cm, 450, "Condiciones de bombeo")
self.c.setFont("Helvetica", 8)
self.c.drawCentredString(11.25*cm, 433, "Succión")
self.c.drawCentredString(16.75*cm, 433, "Impulsión")
self.c.drawString(3.6*cm, 420, "Presión, mmHg")
# Datos mecánicos
self.c.setLineWidth(1)
self.c.line(3.5*cm, 250, 19.5*cm,250)
self.c.line(3.5*cm, 235, 19.5*cm,235)
self.c.setLineWidth(0.5)
self.c.line(3.5*cm, 220, 19.5*cm,220)
self.c.line(3.5*cm, 205, 19.5*cm,205)
self.c.line(3.5*cm, 190, 19.5*cm,190)
self.c.line(3.5*cm, 175, 19.5*cm,175)
self.c.line(3.5*cm, 160, 19.5*cm,160)
self.c.line(3.5*cm, 145, 19.5*cm,145)
# Datos eléctricos
self.c.setLineWidth(1)
self.c.line(3.5*cm, 130, 19.5*cm,130)
self.c.line(3.5*cm, 115, 19.5*cm,115)
self.c.setLineWidth(0.5)
self.c.line(3.5*cm, 100, 19.5*cm,100)
self.c.line(3.5*cm, 85, 19.5*cm,85)
self.c.line(3.5*cm, 70, 19.5*cm,70)
[docs]
def ciclon(self, nombre, ciclon):
# numero, densidad_gas, densidad_solido, viscosidad, caudal, solidos_entrada, solidos_salida, rendimiento, delta_P, Dc, Bc, Hc, Jc, Lc, Zc, De, Sc, caudal_unitario, modelo, f_instal, indice, c_adqui, c_instal):
titulo = "CICLÓN"
self.marco(titulo)
# variables
temperatura = 45
fluido = "Aire"
solidos = "Polvo"
# General
self.c.setLineWidth(1)
self.c.line(3.5*cm, 640, 19.5*cm,640)
self.c.line(3.5*cm, 625, 19.5*cm,625)
self.c.setLineWidth(0.5)
self.c.line(3.5*cm, 610, 19.5*cm,610)
self.c.line(3.5*cm, 595, 19.5*cm,595)
self.c.line(3.5*cm, 580, 19.5*cm,580)
self.c.line(3.5*cm, 565, 19.5*cm,565)
self.c.line(3.5*cm, 550, 19.5*cm,550)
self.c.line(9*cm, 580, 9*cm,610)
self.c.line(14*cm, 580, 14*cm,610)
self.c.line(11.5*cm, 550, 11.5*cm,580)
self.c.drawCentredString(11.5*cm, 647, nombre)
self.c.drawCentredString(11.5*cm, 629, "General")
self.c.setFont("Helvetica", 8)
self.c.drawString(3.6*cm, 615, "Temperatura: " + representacion(ciclon.kwargs["entrada"].T.config()))
self.c.drawString(3.6*cm, 600, "Fluido: " + fluido)
self.c.drawString(3.6*cm, 585, "Sólidos: " + solidos)
self.c.drawString(9.2*cm, 600, "Densidad @ T.P.: " + representacion(ciclon.kwargs["entrada"].Gas.rho.config("DenGas")))
self.c.drawString(14.2*cm, 600, "Viscosidad @ T.P.: " + representacion(ciclon.kwargs["entrada"].Gas.mu.config()))
self.c.drawString(9.2*cm, 585, "Densidad @ T.P.: " + representacion(ciclon.kwargs["entrada"].solido.rho.config("DenLiq")))
self.c.drawString(3.6*cm, 570, "Caudal: " + representacion(ciclon.kwargs["entrada"].Q.config("QGas")))
# self.c.drawString(11.6*cm, 570, "Eficiencia: " + representacion(ciclon.rendimiento))
self.c.drawString(3.6*cm, 555, "Concentración sólidos entrada: " + representacion(ciclon.kwargs["entrada"].solido.caudal.config()))
# self.c.drawString(11.6*cm, 555, "Concentración sólidos salida: " + representacion(ciclon.salida[0].solido.caudal.config()))
# self.c.drawString(3.6*cm, 540, "Perdida de presión: " + representacion(ciclon.DeltaP.config()))
# dimensiones
self.c.setLineWidth(1)
self.c.line(3.5*cm, 535, 19.5*cm,535)
self.c.line(3.5*cm, 520, 19.5*cm,520)
self.c.setLineWidth(0.5)
self.c.setFont("Helvetica", 10)
self.c.drawCentredString(11.5*cm, 525, "Dimensiones")
self.c.setFont("Helvetica", 8)
# self.c.drawString(3.7*cm, 510, "Ciclones necesarios: " + str(ciclon.num_ciclones))
self.c.line(3.5*cm, 505, 10*cm,505)
self.c.line(3.5*cm, 490, 10*cm,490)
self.c.line(10*cm, 520, 10*cm,490)
# self.c.drawString(3.7*cm, 495, "Caudal Unitario: " + representacion(ciclon.kwargs["entrada"].Q.config("QGas")))
# self.c.drawString(6.8*cm, 465, "Dc: " + representacion(ciclon.Dc.config()))
# self.c.drawString(6.8*cm, 450, "Bc: " + representacion(ciclon.Bc.config()))
# self.c.drawString(6.8*cm, 435, "Hc: " + representacion(ciclon.Hc.config()))
# self.c.drawString(6.8*cm, 420, "Jc: " + representacion(ciclon.Jc.config()))
# self.c.drawString(6.8*cm, 405, "Lc: " + representacion(ciclon.Lc.config()))
# self.c.drawString(6.8*cm, 390, "Zc: " + representacion(ciclon.Zc.config()))
# self.c.drawString(6.8*cm, 375, "De: " + representacion(ciclon.De.config()))
# self.c.drawString(6.8*cm, 360, "Sc: " + representacion(ciclon.Sc.config()))
self.c.drawImage(os.environ["pychemqt"]+"/images/equip/ciclon_datasheet.gif", 11*cm, 260, width=180,preserveAspectRatio=True)
# Costes
self.c.setLineWidth(1)
self.c.line(3.5*cm, 300, 19.5*cm,300)
self.c.line(3.5*cm, 285, 19.5*cm,285)
self.c.setLineWidth(0.5)
self.c.setFont("Helvetica", 10)
self.c.drawCentredString(11.5*cm, 290, "Costes")
self.c.setFont("Helvetica", 8)
self.c.line(3.5*cm, 270, 19.5*cm,270)
self.c.line(3.5*cm, 255, 19.5*cm,255)
self.c.line(11.5*cm, 240, 11.5*cm,270)
# self.c.drawString(3.7*cm, 275, "Modelo: " + str(ciclon.tipoCosto))
# self.c.drawString(3.7*cm, 260, "Factor Instalación: " + str(ciclon.f_install))
# self.c.drawString(11.6*cm, 260, "Indice de costes: " + str(ciclon.Current_index))
# self.c.drawString(3.7*cm, 245, "Coste Adquisición: $" + str(ciclon.C_adqTotal))
# self.c.drawString(11.6*cm, 245, "Coste Instalación: $" + str(ciclon.C_instTotal))
# Notas
self.c.setLineWidth(1)
self.c.line(3.5*cm, 240, 19.5*cm,240)
self.c.setLineWidth(0.5)
self.c.setFont("Helvetica", 10)
self.c.drawString(3.6*cm, 225, "Notas:")
self.c.setFont("Helvetica", 8)
if __name__ == "__main__":
pdf = pdf("CICLÓN")
pdf.ciclon("Ciclon limpieza polvo", 12, 1.2, 1200, 1.84e-5, 126000, 93.6, 3.5, 99.56, 6500, 1, 0.2, 0.5, 0.375, 1.5, 2.5, 0.5, 0.5, 10.2, "Industrial", 1.4, 549.2, 157088, 219924)
pdf.dibujar()
#Si queremos abrirlo con algún visor de pdf
os.system("evince datasheet.pdf")