MP Load — Estudo rápido de carga
O MP-Load faz um estudo rápido de carga. O “MP” é em homenagem a Max Planck, um físico do século XX.
O estudo de carga simplificado é baseado em duas hipóteses:
- A bobina vai de pé
- Há somente um tipo de bobina
E testa dois padrões:
Há dois elementos, a bobina de papel e o contêiner
O mais legal é que usa apenas geometria de segundo grau, baseado em contas espertas.
O primeiro padrão é o retangular:
Este tem uma solução muito simples.
Número de bobinas na linha e colunas:
- N_comp = arrend.baixo (ComprimentoC / Dext)
- N_larg= arrend.baixo (LarguraC / Dext)
- Ntotal = N_comp * N_larg
O segundo padrão é o zig zag, que pode ou não ser melhor que a configuração retangular.
Dois parâmetros cruciais a serem calculados são o d e o c, que comandarão a disposição das bobinas.
No extremo, c será igual ao Raio (metade do Dext)
Note também que temos um triângulo retângulo, d² + c² = Dext²
Outra definição é o das linhas pares e ímpares:
Por convenção, a linha par começa com a bobina no canto superior esquerdo, e a linha ímpar é a que vai no meio das bobinas pares.
Primeiro cálculo: estimar quantas linhas pares e ímpares cabem no contêiner
Arrendondamos para cima o valor (Largura contêiner / dextB), para fazer caber uma fileira a mais, em relação à configuração retangular:
nl_larg = WF.RoundUp(LarguraC / dextB, 0) ‘Número de linhas total
Número de linhas par e ímpar
nl_largOdd = WF.RoundUp(nl_larg / 2, 0) ‘Number odd rows
nl_largEven = WF.RoundDown(nl_larg / 2, 0) ‘Number even rows
Note que o parâmetro c pode ser calculado a partir da Largura do contêiner.
Tiro um diâmetro externo e uma fileira, e o que restar é múltiplo do valor de c:
dextB + (nl_larg — 1) *c = LargC
Portanto:
c = (LarguraC — dextB) / (nl_larg — 1)
d = Math.Sqr(dextB * dextB — c * c) ‘Por Pitágoras
A observação anterior é válida também para casos em que c é maior que o raio, como o abaixo
A partir dos valores calculados c e d, é possível calcular quantas bobinas entram no comprimento do contêiner
Sub-caso: d> Dext / 2:
nl_compOdd = WF.RoundDown((ComprimentoC — dextB) / (2 * d), 0) + 1
nl_compEven = WF.RoundDown((ComprimentoC — dextB — d) / (2 * d), 0) + 1
Sub-caso: d <= Dext / 2:
nl_compOdd = WF.RoundDown((ComprimentoC — dextB) / (dextB), 0) + 1
nl_compEven = WF.RoundDown((ComprimentoC — dextB — dextB / 2) / (dextB), 0) + 1
Altura. Para calcular o número de camadas de bobinas que cabem no contêiner, consideramos que uma bobina será empilhada sobre outra, e a conta é arrendondar para baixo AlturaC / LargB
nl_alt = WF.RoundDown(AlturaC / largB)
N. Bobinas Total
Será calculado como número de camadas da altura * (núm linhas pares *núm bobinas nas linhas pares + núm linhas ímpares *núm bobinas nas linhas ímpares)
n_reels = nl_alt * (nl_largOdd * nl_compOdd + nl_largEven * nl_compEven)
Limite por peso
Há também a possibilidade do limite ser o peso, e não o número de bobinas, mesmo sendo geometricamente possível caber mais carga no contêiner. O algoritmo verifica se o número máximo de bobinas para restringir pelo peso.
Algoritmo completo
O algoritmo completo (escrito em VBA) tem uma série de checagens e outros detalhes de implementação,
e pode ser encontrado na função MaxPlanck_loader do arquivo Excel abaixo.
MaxPlanck_loader(AlturaC As Long, LarguraC As Long, ComprimentoC As Long, MaxCargaC As Double, dextB As Long, largB As Long, pesounitB As Double, resultados As Variant) As Boolean
Versão para download pode ser encontrada em: https://1drv.ms/x/s!Aumr1P3FaK7joGEmWAJLQiqcslZz?e=agdxJQ
Vale notar também que este não é um estudo de carga completo, que considera diferentes tamanhos de carga e outras restrições.
Veja também:
Originally published at http://ferramentasexcelvba.wordpress.com on December 21, 2022.