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.