Case sobre Automação de Programação da Produção em Indústria Química utilizando Python
Recebemos do PCP (departamento de Planejamento e Controle da Produção) o desafio de automatizar o sequenciamento das ordens de produção (OP’s) em uma indústria química.
Eram algumas centenas de OP’s para algumas dezenas de recursos (equipamentos produtivos – no caso eram tanques e tachos), que precisavam ser sequenciadas todos os dias. O que permitia uma visão de aprox. 45 dias de produção e entregas. A sequência de produção nessa empresa era a seguinte: dispersão, moagem, completagem, teste de laboratório e envase. No total levava em torno de 5 a 8 dias úteis.
O problema era o tempo que demorava para se montar um cenário: algo em torno de algumas horas de trabalho.
Várias restrições precisavam ser consideradas:
- Datas acordadas com os clientes – pelo Comercial. Nessa data o produto deveria estar pronto para entrega e servia como ordem de prioridade.
- O recurso no qual a OP seria produzida.
- Se a matéria-prima estava disponível ou se precisava aguardar a chegada.
- Restrição de capacidade de alguns processos (quantidade de completagens por dia e envazes por dia).
Uma reunião de situação ou um email de algum departamento poderiam levar ao programador do PCP a refazer o sequenciamento. Na prática as datas de conclusão das OP’s acabavam sendo mais estimadas do que calculadas por falta de tempo.
Ferramentas para Automação
Após observarmos como era feito o trabalho e qual era a necessidade ficou claro que não seria possível fazer tudo em uma planilha no Excel.
Optamos por utilizar a planilha como uma base de dados e em uma linguagem de programação faríamos o sequenciamento. No caso, optamos pelo Python.
A Automação
Das planilhas no Excel o Python carregava:
Lista de OP’s.
Datas do comercial.
O recurso em que a OP seria feita.
Datas de chegada da MP, caso não estivesse disponível.
Capacidade por dia (dos processos Completagem e Envaze)
Lista de dias trabalhados para cada recurso
Em um cenário livre de restrições as OP’s seriam sequenciadas seguindo o recurso e a ordem das datas do Comercial, ou seja, assim que uma OP em um determinado recurso fosse concluída logo em seguida entraria a próxima. Os recursos nunca ficariam parados e as datas de conclusão sempre seriam anteriores às datas do Comercial.
Só que não.
Quando a matéria-prima não está disponível a programação faz a próxima OP’s passar na frente até que a matéria-prima chegue.
Após este primeiro sequenciamento conferimos se a capacidade de completagem e envaze foi ultrapassada. Nas datas em que se ultrapassa a capacidade do processo as OP’s, seguindo a prioridade das datas do Comercial – quanto mais para o futuro menor a prioridade –, vai sendo adicionado 1 dia trabalhado. E esta rotina entra em looping até que em nenhum dia a capacidade seja ultrapassada. Ou seja, as OP’s de menor prioridade vão tendo seu leadtime de produção aumentado.
As datas trabalhadas servem para que todas as datas geradas no sequenciamento sejam datas válidas. Ou seja, realmente existem aquelas datas disponíveis para trabalhar.
Após concluído todas essas etapas adicionamos um texto “parado” para os dias em que a OP teve seu tempo de produção aumentado. Por ex.: se o envaze precisou esperar 3 dias aparece o texto “parado” no lugar do processo “envaze”.
No final a programação exporta uma tabela em formato de planilha (xlsx) para que o PCP possa confrontar as datas de término das OP’s com as datas do Comercial e assim fornecer um cenário mais realista. Com a vantagem de poder ser feito diversos cenários – alterando os parâmetros na planilha – em minutos.
A programação em Python foi convertida em um executável (exe) para que pudesse entrar em produção.
Adicionamos uma tela de conclusão no final da programação.
Ficou assim:
Muito obrigado por ler o artigo
Até o próximo!