Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.49 KB | None | 0 0
  1. import math
  2. import pandas
  3. import xlrd
  4. import sys
  5.  
  6. BCIcodesMoura = pandas.read_excel('./DimensionadorAGM.xlsm', sheet_name='BCIcodesMoura')
  7. BCIcodesMoura = BCIcodesMoura.to_dict('records')
  8.  
  9. BCIcodes = pandas.read_excel('./DimensionadorAGM.xlsm', sheet_name='BCIcodes')
  10. BCIcodes = BCIcodes.to_dict('records')
  11.  
  12. Placas = pandas.read_excel('./DimensionadorAGM.xlsm', sheet_name='Placas')
  13. Placas = Placas.to_dict('records')
  14.  
  15. Testes = pandas.read_excel('./DimensionadorAGM.xlsm', sheet_name='Testes')
  16. Testes = Testes.to_dict('records')
  17.  
  18.  
  19. def closest(lst, K):
  20.      
  21.     return lst[min(range(len(lst)), key = lambda i: abs(lst[i]-K))]
  22. def fplacas_mesmo_tipo_pos(placas, tipo_positiva, tipo_placa_positiva):
  23.     placas_pos_msm_tipo = []
  24.     for el in placas:
  25.         if (el["tipo"] == tipo_positiva and el["tipo placa"] == tipo_placa_positiva):
  26.             placas_pos_msm_tipo.append(el)
  27.     return placas_pos_msm_tipo
  28.  
  29. def fplacas_mesmo_tipo_neg(placas, tipo_negativa, tipo_placa_negativa):
  30.     placas_neg_msm_tipo = []
  31.     for el in placas:
  32.         if (el["tipo"] == tipo_negativa and el["tipo placa"] == tipo_placa_negativa):
  33.             placas_neg_msm_tipo.append(el)
  34.     return placas_neg_msm_tipo
  35.  
  36. def fdivisao_placas(num_placas, placa_unica):
  37.     if (num_placas%2 == 0):
  38.         num_placas_positivas = num_placas/2
  39.         num_placas_negativas = num_placas_positivas
  40.     else:
  41.         if (placa_unica == "Negativa"):
  42.             num_placas_positivas = (num_placas-1)/2
  43.             num_placas_negativas = (num_placas-1)/2 + 1
  44.         if(placa_unica == "Positiva"):
  45.             num_placas_positivas = (num_placas-1)/2 + 1
  46.             num_placas_negativas = (num_placas-1)/2
  47.     return [{"num_placas_positivas":num_placas_positivas,"num_placas_negativas":num_placas_negativas}]
  48.  
  49. def espessura_usar(num_placas_positivas, num_placas_negativas, espessura_placa_positiva, espessura_placa_negativa, tamanho_cuba, compressao):
  50.    
  51.     espessura_total_placas = espessura_placa_positiva*num_placas_positivas + espessura_placa_negativa*num_placas_negativas
  52.     espessura_disp = tamanho_cuba - espessura_total_placas
  53.    
  54.     #envelope individual positivo
  55.     espessura_separador_pos=espessura_disp/(2*num_placas_positivas)
  56.     espessura_separador_pos_usar = espessura_separador_pos/(1-compressao)
  57.     #envelope individual negativo
  58.     espessura_separador_neg=espessura_disp/(2*num_placas_negativas)
  59.     espessura_separador_neg_usar = espessura_separador_neg/(1-compressao)
  60.     #envelope duplo
  61.     espessura_separador_duplo=espessura_disp/(2*(num_placas_negativas+num_placas_positivas))
  62.     espessura_separador_duplo_usar = espessura_separador_duplo/(1-compressao)
  63.    
  64.     return [espessura_separador_pos_usar,espessura_separador_neg_usar,espessura_separador_duplo_usar]
  65.  
  66. def fdivisao_placas(num_placas, placa_unica):
  67.     if (num_placas%2 == 0):
  68.         num_placas_positivas = num_placas/2
  69.         num_placas_negativas = num_placas_positivas
  70.     else:
  71.         if (placa_unica == "Negativa"):
  72.             num_placas_positivas = (num_placas-1)/2
  73.             num_placas_negativas = (num_placas-1)/2 + 1
  74.         if(placa_unica == "Positiva"):
  75.             num_placas_positivas = (num_placas-1)/2 + 1
  76.             num_placas_negativas = (num_placas-1)/2
  77.     return {"num_placas_positivas":num_placas_positivas,"num_placas_negativas":num_placas_negativas}
  78.  
  79.  
  80.  
  81. print ("\n" * 130)
  82.  
  83. loc = ('./DimensionadorAGM.xlsm')
  84. wb = xlrd.open_workbook(loc)
  85. sheet = wb.sheet_by_name('Tabela De Montagem')
  86.  
  87. compressao = float(sheet.cell_value(17,3))
  88. poro_pos = float(sheet.cell_value(15,8))
  89. poro_neg = float(sheet.cell_value(15,9))
  90. alfa = float(sheet.cell_value(10,8))
  91. beta = float(sheet.cell_value(12,8))
  92. porosidade = float(sheet.cell_value(13,13))
  93.  
  94. altura_separador = float(sheet.cell_value(11,13))
  95. largura_separador = float(sheet.cell_value(11,14))
  96. saturacao_acido = float(sheet.cell_value(10,18))
  97. densidade_final = float(sheet.cell_value(12,18))
  98. densidade_enchimento = float(sheet.cell_value(14,18))
  99. perda_agua = float(sheet.cell_value(16, 18))
  100.  
  101. Icca_desejado = float(sheet.cell_value(15,3))
  102. capnom_cliente = float(sheet.cell_value(12,3))
  103. placa_unica = sheet.cell_value(17,8)
  104. norma = sheet.cell_value(15,4)
  105. BCI_conj_plast = sheet.cell_value(10,3)
  106.  
  107. valores_capnom = []
  108. relat_capnom_prox =[]
  109. relat_capnom = []
  110.  
  111. for item in Testes:
  112.     if ((item["norma"] == norma) and (item["resultado"] == "sim" and item['CodMoura']  == BCI_conj_plast)):
  113.         valores_capnom.append(item["capnom"])
  114.         relat_capnom.append(item)
  115. for item in relat_capnom:
  116.     if (item["capnom"] == closest(valores_capnom,capnom_cliente)):
  117.         relat_capnom_prox.append(item)
  118.  
  119. #pega relatorio com cca mais proximo
  120. valores_cca = []
  121. relat_cca_capnom_prox = []
  122.  
  123. for item in relat_capnom_prox:
  124.     valores_cca.append(item["cca"])
  125. for item in valores_cca:
  126.     if (item == closest(valores_cca,Icca_desejado)):
  127.         relat_cca_capnom_prox.append(relat_capnom_prox[valores_cca.index(item)])
  128.  
  129.  #relatorio a ser usado com menos placas
  130. relat_cca_capnom_menos_placas = {}
  131. relat_cca_capnom_menos_placas = relat_cca_capnom_prox[0]
  132. for el in relat_cca_capnom_prox:
  133.     if (el["num placas+"]+el["num placas-"]<=relat_cca_capnom_menos_placas["num placas+"]+relat_cca_capnom_menos_placas["num placas-"]):
  134.         relat_cca_capnom_menos_placas = el
  135.  
  136.  
  137. relat_uso = relat_cca_capnom_menos_placas
  138.  
  139.  
  140. #pega placas positivas e negativas utilizadas no teste
  141. for el in Placas:
  142.  
  143.     if el["nome"] == relat_uso["nome+"]:
  144.         placa_positiva_teste = el        
  145.     if el["nome"] == relat_uso["nome-"]:
  146.         placa_negativa_teste = el
  147.        
  148.  
  149. try:
  150.     placa_positiva_teste["altura"]
  151. except:
  152.     print("a placa ", relat_uso["nome+"]," nao foi encontrada no banco de placas")
  153.     input()
  154.  
  155. try:
  156.     placa_negativa_teste["altura"]
  157. except:
  158.     print("a placa ", relat_uso["nome-"]," nao foi encontrada no banco de placas")
  159.     input()
  160.  
  161. #retira areas positivas e negativas
  162. area_positiva = placa_positiva_teste["altura"]*placa_positiva_teste["largura"]
  163. area_negativa = placa_negativa_teste["altura"]*placa_negativa_teste["largura"]
  164.  
  165. #numero de areas do teste
  166. num_areas_teste = relat_uso["num placas+"]+relat_uso["num placas-"]-1
  167.  
  168. #numero de placas minimo
  169. area_total_desejada = (num_areas_teste*area_positiva*Icca_desejado/relat_uso["cca"])
  170. #num_placas_minimo = math.ceil(area_total_desejada/area_positiva) + 1
  171. num_placas_minimo = (area_total_desejada/area_positiva) + 1
  172. print("o numero de placas minimo calculado foi ", num_placas_minimo, ", insira o numero minimo de placas minimo:")
  173. num_placas_minimo = int(input())
  174.  
  175. #calculo da massa positiva e negativa a se utilizar
  176. massa_positiva = capnom_cliente*alfa
  177. massa_negativa = capnom_cliente*beta
  178.  
  179. #pega placas do msm tipo
  180. placas_mesmo_tipo_pos = fplacas_mesmo_tipo_pos(Placas, placa_positiva_teste["tipo"], placa_positiva_teste["tipo placa"])
  181. placas_mesmo_tipo_neg = fplacas_mesmo_tipo_neg(Placas, placa_negativa_teste["tipo"], placa_negativa_teste["tipo placa"])
  182.  
  183. numero_placas = num_placas_minimo
  184.  
  185. possiveis_conjuntos = []
  186. possivel_conjunto = {}
  187.  
  188.  
  189. for el in BCIcodesMoura:
  190.     if el['CodMoura'] == BCI_conj_plast:
  191.         conj_plast = el      
  192.  
  193. lista_final = []
  194. for placa_pos in placas_mesmo_tipo_pos:
  195.     for placa_neg in placas_mesmo_tipo_neg:
  196.         final = {}
  197.        
  198.         #num placas positivas e negativas
  199.         divisao_placas=fdivisao_placas(numero_placas, placa_unica)
  200.         ###OUTPUT espessura separador
  201.         espessuras = espessura_usar(divisao_placas['num_placas_positivas'], divisao_placas['num_placas_negativas'], placa_pos['espessura'], placa_neg['espessura'], conj_plast['cuba'], float(compressao))
  202.        
  203.         ##porosidade das placas
  204.         #positiva
  205.         vol_total_pos=(placa_pos['altura']*placa_pos['largura']*placa_pos['espessura']*divisao_placas['num_placas_positivas'])
  206.         vazio_placa_pos = (vol_total_pos - (placa_pos['massa grade']*divisao_placas['num_placas_positivas'])/(placa_pos['densidade chumbo da grade']/1000))*poro_pos
  207.         #negativa
  208.         vol_total_neg=(placa_neg['altura']*placa_neg['largura']*placa_neg['espessura']*divisao_placas['num_placas_negativas'])
  209.         vazio_placa_neg = (vol_total_neg - (placa_neg['massa grade']*divisao_placas['num_placas_negativas'])/(placa_neg['densidade chumbo da grade']/1000))*poro_neg
  210.        
  211.         #volume separadores
  212.         volume_separador = []
  213.         for i in range(len(espessuras)):
  214.             if i == 0:
  215.                 volume_separador.append(espessuras[i]*altura_separador*largura_separador*2*divisao_placas['num_placas_positivas'])
  216.             if i == 1:
  217.                 volume_separador.append(espessuras[i]*altura_separador*largura_separador*2*divisao_placas['num_placas_negativas'])
  218.             if i == 2:
  219.                 volume_separador.append(espessuras[i]*altura_separador*largura_separador*2*(divisao_placas['num_placas_negativas']+divisao_placas['num_placas_positivas']))
  220.  
  221.         #porosidade
  222.         volume_fibra = []
  223.         for el in volume_separador:
  224.             volume_fibra.append(el*(1-porosidade))
  225.            
  226.         #volume vazio
  227.         volume_vazio = []
  228.         for i in range(len(volume_separador)):
  229.             volume_vazio.append(volume_separador[i]*(1-compressao) - volume_fibra[i])
  230.        
  231.         #volume vazaio do separador
  232.         volume_vazio_separador = []
  233.         for el in volume_vazio:
  234.             volume_vazio_separador.append(el*saturacao_acido)
  235.        
  236.         #vazio total
  237.         vazio_total = []
  238.         for el in volume_vazio:
  239.             vazio_total.append(el + vazio_placa_pos + vazio_placa_neg)
  240.            
  241.         volume_enchimento = vazio_total[0]/1000 + perda_agua
  242.         massa_enchimento = volume_enchimento*densidade_enchimento
  243.        
  244.        
  245.         final['placa pos'] = placa_pos['nome']
  246.         final['placa neg'] = placa_neg['nome']
  247.         final['num placa pos'] = divisao_placas['num_placas_positivas']
  248.         final['num placa neg'] = divisao_placas['num_placas_negativas']
  249.         final['volume enchimento'] = volume_enchimento
  250.         final['massa enchimento'] = massa_enchimento
  251.         final['espessura separador envelope positivo'] = espessuras[0]
  252.         final['espessura separador envelope negativo'] = espessuras[1]
  253.         final['espessura separador envelope duplo'] = espessuras[2]
  254.         lista_final.append(final)
  255.                    
  256.            
  257.  
  258. df = pandas.DataFrame.from_dict(lista_final)
  259. writer = pandas.ExcelWriter('Resultados.xlsx', engine='xlsxwriter')
  260. df.to_excel(writer, sheet_name='Resultados')
  261. writer.save()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement