Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- import pandas
- import xlrd
- import sys
- BCIcodesMoura = pandas.read_excel('./DimensionadorAGM.xlsm', sheet_name='BCIcodesMoura')
- BCIcodesMoura = BCIcodesMoura.to_dict('records')
- BCIcodes = pandas.read_excel('./DimensionadorAGM.xlsm', sheet_name='BCIcodes')
- BCIcodes = BCIcodes.to_dict('records')
- Placas = pandas.read_excel('./DimensionadorAGM.xlsm', sheet_name='Placas')
- Placas = Placas.to_dict('records')
- Testes = pandas.read_excel('./DimensionadorAGM.xlsm', sheet_name='Testes')
- Testes = Testes.to_dict('records')
- def closest(lst, K):
- return lst[min(range(len(lst)), key = lambda i: abs(lst[i]-K))]
- def fplacas_mesmo_tipo_pos(placas, tipo_positiva, tipo_placa_positiva):
- placas_pos_msm_tipo = []
- for el in placas:
- if (el["tipo"] == tipo_positiva and el["tipo placa"] == tipo_placa_positiva):
- placas_pos_msm_tipo.append(el)
- return placas_pos_msm_tipo
- def fplacas_mesmo_tipo_neg(placas, tipo_negativa, tipo_placa_negativa):
- placas_neg_msm_tipo = []
- for el in placas:
- if (el["tipo"] == tipo_negativa and el["tipo placa"] == tipo_placa_negativa):
- placas_neg_msm_tipo.append(el)
- return placas_neg_msm_tipo
- def fdivisao_placas(num_placas, placa_unica):
- if (num_placas%2 == 0):
- num_placas_positivas = num_placas/2
- num_placas_negativas = num_placas_positivas
- else:
- if (placa_unica == "Negativa"):
- num_placas_positivas = (num_placas-1)/2
- num_placas_negativas = (num_placas-1)/2 + 1
- if(placa_unica == "Positiva"):
- num_placas_positivas = (num_placas-1)/2 + 1
- num_placas_negativas = (num_placas-1)/2
- return [{"num_placas_positivas":num_placas_positivas,"num_placas_negativas":num_placas_negativas}]
- def espessura_usar(num_placas_positivas, num_placas_negativas, espessura_placa_positiva, espessura_placa_negativa, tamanho_cuba, compressao):
- espessura_total_placas = espessura_placa_positiva*num_placas_positivas + espessura_placa_negativa*num_placas_negativas
- espessura_disp = tamanho_cuba - espessura_total_placas
- #envelope individual positivo
- espessura_separador_pos=espessura_disp/(2*num_placas_positivas)
- espessura_separador_pos_usar = espessura_separador_pos/(1-compressao)
- #envelope individual negativo
- espessura_separador_neg=espessura_disp/(2*num_placas_negativas)
- espessura_separador_neg_usar = espessura_separador_neg/(1-compressao)
- #envelope duplo
- espessura_separador_duplo=espessura_disp/(2*(num_placas_negativas+num_placas_positivas))
- espessura_separador_duplo_usar = espessura_separador_duplo/(1-compressao)
- return [espessura_separador_pos_usar,espessura_separador_neg_usar,espessura_separador_duplo_usar]
- def fdivisao_placas(num_placas, placa_unica):
- if (num_placas%2 == 0):
- num_placas_positivas = num_placas/2
- num_placas_negativas = num_placas_positivas
- else:
- if (placa_unica == "Negativa"):
- num_placas_positivas = (num_placas-1)/2
- num_placas_negativas = (num_placas-1)/2 + 1
- if(placa_unica == "Positiva"):
- num_placas_positivas = (num_placas-1)/2 + 1
- num_placas_negativas = (num_placas-1)/2
- return {"num_placas_positivas":num_placas_positivas,"num_placas_negativas":num_placas_negativas}
- print ("\n" * 130)
- loc = ('./DimensionadorAGM.xlsm')
- wb = xlrd.open_workbook(loc)
- sheet = wb.sheet_by_name('Tabela De Montagem')
- compressao = float(sheet.cell_value(17,3))
- poro_pos = float(sheet.cell_value(15,8))
- poro_neg = float(sheet.cell_value(15,9))
- alfa = float(sheet.cell_value(10,8))
- beta = float(sheet.cell_value(12,8))
- porosidade = float(sheet.cell_value(13,13))
- altura_separador = float(sheet.cell_value(11,13))
- largura_separador = float(sheet.cell_value(11,14))
- saturacao_acido = float(sheet.cell_value(10,18))
- densidade_final = float(sheet.cell_value(12,18))
- densidade_enchimento = float(sheet.cell_value(14,18))
- perda_agua = float(sheet.cell_value(16, 18))
- Icca_desejado = float(sheet.cell_value(15,3))
- capnom_cliente = float(sheet.cell_value(12,3))
- placa_unica = sheet.cell_value(17,8)
- norma = sheet.cell_value(15,4)
- BCI_conj_plast = sheet.cell_value(10,3)
- valores_capnom = []
- relat_capnom_prox =[]
- relat_capnom = []
- for item in Testes:
- if ((item["norma"] == norma) and (item["resultado"] == "sim" and item['CodMoura'] == BCI_conj_plast)):
- valores_capnom.append(item["capnom"])
- relat_capnom.append(item)
- for item in relat_capnom:
- if (item["capnom"] == closest(valores_capnom,capnom_cliente)):
- relat_capnom_prox.append(item)
- #pega relatorio com cca mais proximo
- valores_cca = []
- relat_cca_capnom_prox = []
- for item in relat_capnom_prox:
- valores_cca.append(item["cca"])
- for item in valores_cca:
- if (item == closest(valores_cca,Icca_desejado)):
- relat_cca_capnom_prox.append(relat_capnom_prox[valores_cca.index(item)])
- #relatorio a ser usado com menos placas
- relat_cca_capnom_menos_placas = {}
- relat_cca_capnom_menos_placas = relat_cca_capnom_prox[0]
- for el in relat_cca_capnom_prox:
- if (el["num placas+"]+el["num placas-"]<=relat_cca_capnom_menos_placas["num placas+"]+relat_cca_capnom_menos_placas["num placas-"]):
- relat_cca_capnom_menos_placas = el
- relat_uso = relat_cca_capnom_menos_placas
- #pega placas positivas e negativas utilizadas no teste
- for el in Placas:
- if el["nome"] == relat_uso["nome+"]:
- placa_positiva_teste = el
- if el["nome"] == relat_uso["nome-"]:
- placa_negativa_teste = el
- try:
- placa_positiva_teste["altura"]
- except:
- print("a placa ", relat_uso["nome+"]," nao foi encontrada no banco de placas")
- input()
- try:
- placa_negativa_teste["altura"]
- except:
- print("a placa ", relat_uso["nome-"]," nao foi encontrada no banco de placas")
- input()
- #retira areas positivas e negativas
- area_positiva = placa_positiva_teste["altura"]*placa_positiva_teste["largura"]
- area_negativa = placa_negativa_teste["altura"]*placa_negativa_teste["largura"]
- #numero de areas do teste
- num_areas_teste = relat_uso["num placas+"]+relat_uso["num placas-"]-1
- #numero de placas minimo
- area_total_desejada = (num_areas_teste*area_positiva*Icca_desejado/relat_uso["cca"])
- #num_placas_minimo = math.ceil(area_total_desejada/area_positiva) + 1
- num_placas_minimo = (area_total_desejada/area_positiva) + 1
- print("o numero de placas minimo calculado foi ", num_placas_minimo, ", insira o numero minimo de placas minimo:")
- num_placas_minimo = int(input())
- #calculo da massa positiva e negativa a se utilizar
- massa_positiva = capnom_cliente*alfa
- massa_negativa = capnom_cliente*beta
- #pega placas do msm tipo
- placas_mesmo_tipo_pos = fplacas_mesmo_tipo_pos(Placas, placa_positiva_teste["tipo"], placa_positiva_teste["tipo placa"])
- placas_mesmo_tipo_neg = fplacas_mesmo_tipo_neg(Placas, placa_negativa_teste["tipo"], placa_negativa_teste["tipo placa"])
- numero_placas = num_placas_minimo
- possiveis_conjuntos = []
- possivel_conjunto = {}
- for el in BCIcodesMoura:
- if el['CodMoura'] == BCI_conj_plast:
- conj_plast = el
- lista_final = []
- for placa_pos in placas_mesmo_tipo_pos:
- for placa_neg in placas_mesmo_tipo_neg:
- final = {}
- #num placas positivas e negativas
- divisao_placas=fdivisao_placas(numero_placas, placa_unica)
- ###OUTPUT espessura separador
- espessuras = espessura_usar(divisao_placas['num_placas_positivas'], divisao_placas['num_placas_negativas'], placa_pos['espessura'], placa_neg['espessura'], conj_plast['cuba'], float(compressao))
- ##porosidade das placas
- #positiva
- vol_total_pos=(placa_pos['altura']*placa_pos['largura']*placa_pos['espessura']*divisao_placas['num_placas_positivas'])
- vazio_placa_pos = (vol_total_pos - (placa_pos['massa grade']*divisao_placas['num_placas_positivas'])/(placa_pos['densidade chumbo da grade']/1000))*poro_pos
- #negativa
- vol_total_neg=(placa_neg['altura']*placa_neg['largura']*placa_neg['espessura']*divisao_placas['num_placas_negativas'])
- vazio_placa_neg = (vol_total_neg - (placa_neg['massa grade']*divisao_placas['num_placas_negativas'])/(placa_neg['densidade chumbo da grade']/1000))*poro_neg
- #volume separadores
- volume_separador = []
- for i in range(len(espessuras)):
- if i == 0:
- volume_separador.append(espessuras[i]*altura_separador*largura_separador*2*divisao_placas['num_placas_positivas'])
- if i == 1:
- volume_separador.append(espessuras[i]*altura_separador*largura_separador*2*divisao_placas['num_placas_negativas'])
- if i == 2:
- volume_separador.append(espessuras[i]*altura_separador*largura_separador*2*(divisao_placas['num_placas_negativas']+divisao_placas['num_placas_positivas']))
- #porosidade
- volume_fibra = []
- for el in volume_separador:
- volume_fibra.append(el*(1-porosidade))
- #volume vazio
- volume_vazio = []
- for i in range(len(volume_separador)):
- volume_vazio.append(volume_separador[i]*(1-compressao) - volume_fibra[i])
- #volume vazaio do separador
- volume_vazio_separador = []
- for el in volume_vazio:
- volume_vazio_separador.append(el*saturacao_acido)
- #vazio total
- vazio_total = []
- for el in volume_vazio:
- vazio_total.append(el + vazio_placa_pos + vazio_placa_neg)
- volume_enchimento = vazio_total[0]/1000 + perda_agua
- massa_enchimento = volume_enchimento*densidade_enchimento
- final['placa pos'] = placa_pos['nome']
- final['placa neg'] = placa_neg['nome']
- final['num placa pos'] = divisao_placas['num_placas_positivas']
- final['num placa neg'] = divisao_placas['num_placas_negativas']
- final['volume enchimento'] = volume_enchimento
- final['massa enchimento'] = massa_enchimento
- final['espessura separador envelope positivo'] = espessuras[0]
- final['espessura separador envelope negativo'] = espessuras[1]
- final['espessura separador envelope duplo'] = espessuras[2]
- lista_final.append(final)
- df = pandas.DataFrame.from_dict(lista_final)
- writer = pandas.ExcelWriter('Resultados.xlsx', engine='xlsxwriter')
- df.to_excel(writer, sheet_name='Resultados')
- writer.save()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement