Washer.xsn
Modelagem de uma máquina de lavar roupas Automática
Neste Exemplo o que tentamos é modelar o procedimento de uma máquina de lavar roupas, que faz automaticamente funções como colocação de água, sabão, alvejante etc, como passamos a descrever.
Funcionamento da Máquina:
O funcionamento idealizado para esta modelagem é o seguinte:
Passo 1 – A máquina recebe, água, sabão e alvejante.
Fixou-se como valores uma unidade de alvejante, duas unidades de sabão e cinco unidade de água. No modelo este ciclo se completa depois de cinco interações, já que cada interação assimila uma unidade.
Passo 2 – A máquina recebe roupa suja.
Como no passo anterior fixou-se cinco unidade de roupa por procedimento.
Passo 3 – A máquina joga fora a água suja.
Passo 4 – A máquina fornece a roupa limpa.
Definição dos lugares
Na modelagem criou-se nove lugares onde se tem, os lugares dos produtos iniciais que são respectivamente:
P1 – Soap – Sabão P2 – Water – Água
P3 – Bleach – Alvejante P4 – DurtyClothes – Roupa suja
O lugar onde esta o semion responsável pelo controle e operação da maquina.
P5 – Drum – Tambor da máquina de lavar
Dois lugares intermediários criados para facilitar a visualização que fariam parte do Tambor:
P7 – WashObject - recebe a água, sabão e alvejante.
P8 – WetClothes – recebe a Roupa suja apartir de então denominada roupa molhada WetClothes.
Dois lugares finais:
P6 – DurtyWater – recebe a água suja no final do processo.
P9 – CleanClothes – recebe a roupa limpa.
Inicialização do modelo:
A inicialização do modelo foi feita com valores suficientes para que o processo se repita por três vezes, com valores :
Soap = 7, Bleach = 4, Water =15 e DurtyClothes = 15 conforme o código abaixo :
Init code in Main
for (int i=0; i<15; i++){
getPlace("p2").putObject(new Water());
}
for (int i=0;i<15;i++){
getPlace("p5").putObject(new DurtyClothes());
}
for (int i=0; i<7; i++)
getPlace("p1").putObject(new Soap());
for (int i=0;i<4; i++)
getPlace("p3").putObject(new Bleach());
getPlace("p4").putObject(new Drum());
Definição das funções
Para realização da modelagem foi utilizada algumas variáveis de controle que são inicializadas conforme o código abaixo:
DRUM code - Init
setMaxFireCount(100);
Int countWater = new Int(0);
put_countWater(countWater);
Int countSoap = new Int(0);
put_countSoap(countSoap);
Int countBleach = new Int(0);
put_countBleach(countBleach);
Int countDurtyClothes = new Int(0);
put_countDurtyClothes(countDurtyClothes);
Int full = new Int(0);
put_full(full);
Int fullClothes = new Int(0);
put_fullClothes(fullClothes);
Int empty = new Int(1);
put_empty(empty);
Função de admição de produtos
A função toFill é a responsável pela entrada dos produtos de limpeza e foi implementada conforme código abaixo.
toFill perform
if (read_full().getValue() == 0){
if (read_countWater().getValue() < 5) {
get_in2();
put_out1(new WashObject());
read_countWater().setValue(read_countWater().getValue()+1);
}
if (read_countSoap().getValue() < 2) {
get_in1();
read_countSoap().setValue(read_countSoap().getValue()+1);
}
if (read_countWater().getValue() == 5)
read_full().setValue(1);
if (read_countBleach().getValue() < 1) {
get_in3();
read_countBleach().setValue(read_countBleach().getValue()+1);
}
}
toFill Match
if (read_full().getValue() ==0 && read_empty().getValue() == 1){
if (read_countSoap().getValue() < 2) {
setBid(1.0);
access_in1(Action.CONSUMPTION);
}
if (read_countWater().getValue() < 5 ) {
setBid (1.0);
access_in2(Action.CONSUMPTION);
}
if (read_countBleach().getValue() < 1) {
setBid(1.0);
access_in3(Action.CONSUMPTION);
}
}
A função getClothes é a responsável pela admissão das peças de roupa e é implementada comforme abaixo:
getClothes perform
if (read_full().getValue() == 1) {
if (read_countDurtyClothes().getValue() < 5) {
get_in4();
put_out3(new WetClothes());
read_countDurtyClothes().setValue(read_countDurtyClothes().getValue()+1);
}
if (read_countDurtyClothes().getValue() == 5)
read_fullClothes().setValue(1);
}
getClothes match
if (read_full().getValue() == 1 && read_empty().getValue() == 1) {
if (read_countDurtyClothes().getValue() < 5 ) {
setBid (1.0);
access_in4(Action.CONSUMPTION);
}
}
Despejo de resíduos
A função responsável pelo despejo de resíduos é a waterOut implementada como abaixo:
waterOut perform
if (read_full().getValue() == 1 | read_fullClothes().getValue() == 1) {
get_in5();
put_out2(new DurtyWater());
read_countWater().setValue(read_countWater().getValue()-1);
if (read_countWater().getValue() == 0) {
read_full().setValue(0);
read_empty().setValue(0);
}
}
waterOut match
if (read_full().getValue() == 1 && read_fullClothes().getValue() == 1) {
setBid(1.0);
access_in5(Action.CONSUMPTION);
}
Procedimento final
Como encerramento do procedimento temos a função clothesOut que simula a entrega da roupa lavada e foi implementada da seguinte forma:
clothesOut perform
get_in6();
put_out4(new CleanClothes());
read_countDurtyClothes().setValue(read_countDurtyClothes().getValue()-1);
if (read_countDurtyClothes().getValue() == 0) {
read_empty().setValue(1);
read_countSoap().setValue(0);
read_countBleach().setValue(0);
read_full().setValue(0);
read_fullClothes().setValue(0);
}
clothesOut match
if (read_empty().getValue() == 0) {
setBid(1.0);
access_in6(Action.CONSUMPTION);
}
Considerações
Como dito anteriormente a inicialização dos valores permite que o processo se repita três vezes completas. Com a modificação de valores podemos, ou alterar o número de processos ou modificar a eficiência colocando por exemplo dois ou mais sêmions no lugar denominado Drum .
Podemos imaginar ainda, outras modelagens para o mesmo problema, como por exemplo detalhando melhor o processo de lavagem, passando pelo enxágüe e centrifugação, mas estas são possibilidades para se experimentar futuramente.