É comum precisarmos de múltiplas etapas para finalizarmos a produção de um produto. Na produção de uma calça, por exemplo, de uma forma simplificada, precisamos cortar o tecido de acordo com o molde, costurar , colocar os botões e o zíper , e por último, empacotar. E assim cada produto tem a sua ordem de processos que são necessários para a sua finalização. Nesse exemplo vamos construir um modelo que usa list para rotear itens de acordo com as etapas necessárias para a sua finalização em um modelo simples de chão de fábrica.
Passo 1. Construir layout
Para fazermos o exemplo precisaremos de um layout com 8 processors, 1 source e uma queue. Adicione esses objetos no seu modelo e os renomeie conforme Figura 1.
Figura 1- Layout exemplo 1
Como a Figura 1 mostra, existem basicamente 4 tipos de operações:
- Alpha – 2 estações;
- Beta – 2 estações;
- Gamma – 2 estações;
- Delta – 2 estações.
Passo 2. Adicionar lists
Para adicionar a lógica é preciso criar item list. Em Toolbox> > Global list> Item list(Figura 2).
Figura 2- Adicionar Item List
Ao clicar em Item list irá abrir janela de propriedades da lista (Figura 3), por agora apenas fechar a aba. A sua lista está nomeada como ItemList1.
Figura 3- Janela de propriedades Itemlist
Passo 3. Adicionar Global table
Nesse modelo nós vamos ter 3 diferentes tipos de produtos classificados por tipo de item (item type). Cada tipo de produto tem uma sequência única para ser executada nesse item até que esse esteja pronto. A Tabela 1 mostra a sequência de passos de manufatura que cada tipo de produto requesita.
Tabela 1- Sequência de passos por produto
Em Toolbox> >Global table. Em Global table modificar o número de linhas(rows) para 8 e de colunas(columns) para 3. Renomeie as linhas e as colunas conforme Figura 4.
Figura 4- Global Table
Para colocarmos a sequência, é necessário configurar a tabela para uma tabela que aceita palavras. Selecione todas as células > Clique no botão direito> Assign String Data (Figura 5). Agora podemos digitar palavras.
Figura 5- Permitir palavras como dados
Renomear a global table para Steps, e acrescentar a sequência necessária para cada tipo (Figura 6).
Figura 6- Global table preenchida
Passo 4. Configurar Source
Para voltarmos para o modelo clique sobre a aba Model no canto superior esquerdo
Dê duplo clique sobre o source. Configure o inter-arrival time em exponencial (0,30,0), como pode-se observar na Figura 7.
Figura 7- Configuração source
Agora na aba Flow, em Send to port (barra de rolagem)> Use list> Push to item list (Figura 8).
Figura 8- Selecionar método puxado de uma lista
Ao clicar em Push to Item List, uma janela irá abrir com o nome da list selecionada. Verifique se o nome da lista é IGUAL ao da lista que você criou (Figura 9).
Figura 9- Verificar nome da lista
Em Triggers, On Creation adicione as triggers Set Label com a label relacionada ao objeto ITEM e chamada “stepRow” e valor igual a 1, e Set the Itemtype and Color como duniforme (1, 3).
Figura 10- Triggers source
Passo 5. Definir list
Em Toolbox, dê duplo clique sobre o ItemList1, quando abrir a janela de propriedades observe que há algumas expression field já adicionadas. Mas nesse modelo nós devemos usar apenas 3 fields.
- stepRow: Esse campo irá referenciar a atual setRow label no item. Nós vamos utiliza-la para priorizar itens que estão avançados nos seus processos;
- step: Esse campo vai referenciar o nome do atual passo que o item está. Por exemplo, Alpha,Beta,Gamma, ou delta. Nós vamos usar isso para direcionar para a próxima etapa que vai puxar da lista;
- itemType- Esse campo não será utilizado em nenhuma consulta. Apesar disso, ele irá ser usado para facilitar a visualização dos itens que estão na lista.
Dessa forma, exclua todas as fields EXCETO a ItemType. Dessa forma, deve-se criar mais duas fields.
1.Adicionar uma label field chamada stepRow.
2.Adicionar uma Expression field colocar a seguinte expressão
Na expressão você vai usar "value" para acessar o valor primário da lista. Essa expressão pega um valor da tabela dos passos (gettablestr("steps", ... ) , onde a linhá é o atual valor do steprow (getlabel(value, "steprow")), e a coluna é o tipo de item (getitemtype(value)).
No final desses passos a janela de propriedades da lista deve se parecer com a Figura 11.
Figura 11- Propriedades preenchidas do itemlist
DETALHE: Lembre-se que se vc nomeou a tabela, ou a label de forma diferente é preciso que nesse momento elas sejam citadas como foram nomeadas.
** Teste rápido**
Para verificar se até aqui as coisas estão funcionando da maneira correta. Vamos fazer um test rápido. Nas propriedades do ItemList1, vá na aba General e clique no botão a esquerda “ View entries”. Coloque o modelo para rodar, após a primeira chegada o tempo vai expirar e a tela do list deve se parecer com a Figura 12.
Figura 12- Visualização das entradas na list
Passo 6. Configurar processos
Passo 6.1. Adicionar label aos processos
Clique sobre Alpha 1 e na aba Labels> > Add String Label (Figura 13).
Figura 13- Adcionar uma label ao processo
Em newstringlabel nomear como operation e o valor colocar como Alpha conforme mostra a Figura 14.
Figura 14- Label operation
Passo 6.2. Criar lógica de fluxo de saída
Ainda nas propriedades do Alpha 1, na aba Flow , na opção Sento to port, pressione a lista de opções escolha Use List> Push to item list (Figura 15). Ao clicar em Push to Item list aparecerá uma janela com o nome da lista, confira se o nome da lista coincide com a lista que criamos (ItemList1).
Figura 15- Puxar da lista
Passo 6.3. Criar lógica de fluxo de entrada
Ainda na aba Flow, na subárea Input, escolha a opção pull e depois em Pull Strategy abra a lista de opções , em Use list escolha Pull from the Item List (Figura 16).
Figura 16- Criar estratégia de entrada
Verifica se o nome da lista e o nome da lista que você adicionou conferem. E defina Query como:
WHERE step == Puller.operation ORDER BY steprow DESC
Essa expressão vai fazer com que o processo puxe somente os itens da lista cujo o step field corresponde a label do processo. Ela também cria uma regra de priorização de itens com o maior stepRow label, ou seja, itens que estão em passos mais adiantados dos seus processos (Figura 17).
Figura 17- Query
OBS : Se atende aos detalhes da fórmula do QUERY, não esqueça do ponto. E não se preocupe do operation e do steprow não aparecerem como opção de lista. É normal! Apenas se certifique que a está escrito exatamente como escrito na fórmula acima.
Passo 6.4. Criar lógica de atualização da label
Na aba Triggers, vá em OnProcessFinish > Adicionar > Data > Set Label (Figura 18).
Figura 18- Adicionar nova label no final do processo
Como precisamos atualizar a label para que ela siga a entidade até que essa finalize todos os seus passos até o fim do seu processo. É preciso configurar a label para o OBJETO item, a label stepRow com um valor de getlabel(item,”stepRow”)+1. A Figura 19 mostra como deve ficar a tela da label.
Figura 19- Atualização da label
Passo 6.5. Replicar propriedades para os outros processos.
Para os outros processos nós devemos repetir 6.1 ao 6.4,sendo que no 6.1 é necessário mudar o nome da label operation de acordo com a Tabela 2.
Tabela 2- Como renomear as labels por processo
Ou nós podemos copiar todas as propriedades do Alpha 1 para todos os outros processos e depois adicionar as labels operation de acorda com cada categoria.
Passo 7. Configurar finish queue
Passo 7.1. Adicionar label no processo
Clique na finish queue , vá na aba labels adicione uma String label, com o nome de operation e com o value de Finish (Figura 20).
Figura 20- Label finish
Passo 7.2. Criar lógica do fluxo
Na aba flow , na subárea Input, escolha a opção pull e depois em Pull Strategy abra a lista de opções , em Use list escolha Pull from the Item List. Defina o pull query como
Where step == puller.operation. Nesse caso não há necessidade de priorizar, já que a fila é nesse caso o fim da operação.
Salve seu modelo e coloque para simular!