21
Universidade Federal de Uberlândia Faculdade de Engenharia Mecânica e Mecatrônica – FEMEC Simulação de Sistemas Automatizados – FEMEC 42083 Prof. Dr. Jean-Paul Z. De Souza Tavares RELATÓRIO DE SIMULAÇÃO DE SISTEMAS AUTOMATIZADOS Módulo 2: Simulação Computacional Brian de Lima Curtt 98770 Caio Eduardo Okimoto Ladislau 11011EMT02 3

Relatório 2 SSA

Embed Size (px)

DESCRIPTION

Segundo relatório de Simulação de Sistemas Automatizados

Citation preview

Page 1: Relatório 2 SSA

Universidade Federal de Uberlândia

Faculdade de Engenharia Mecânica e Mecatrônica – FEMEC

Simulação de Sistemas Automatizados – FEMEC 42083

Prof. Dr. Jean-Paul Z. De Souza Tavares

RELATÓRIO DE SIMULAÇÃO DE SISTEMAS

AUTOMATIZADOS

Módulo 2: Simulação Computacional

Brian de Lima Curtt 98770

Caio Eduardo Okimoto Ladislau 11011EMT023

Uberlândia, 24 de junho de 2014

Page 2: Relatório 2 SSA

Sumário1. Objetivos....................................................................................................................3

2. Introdução..................................................................................................................4

3. Fundamentos Teóricos...............................................................................................5

4. Materiais Utilizados...................................................................................................6

5. Procedimento Experimental.......................................................................................6

6. Conclusões.................................................................................................................7

2

Page 3: Relatório 2 SSA

1. Objetivos

Para o segundo módulo prático da disciplina de Simulação de Sistemas

Automatizados, foi trabalhado o conceito de modelos computacionais. Dois métodos

distintos de criação de modelos foram aplicados para um mesmo problema de simulação

de fila e atendimento: utilização de simulador e programação em linguagem de alto

nível. Uma comparação é feita entre os métodos, sendo, porém, o simulador mais

explorado.

3

Page 4: Relatório 2 SSA

2. Introdução

Figura 1: Processo de produção de parafusos e pinos.

O problema proposto para esse módulo é composto por três entidades de

“atendimento”, uma entrada e duas saídas. A primeira entidade que realiza algum

processo é o posto de Corte, que produz pinos para as duas outras entidades, Etapa 2 e

Etapa 3, ou como será aqui chamado, postos de Parafusos e Pinos, respectivamente. Isso

acarreta a possível formação de três filas nesse sistema, como é mostrado na figura 1.

A primeira fila é formada pela entrada de matéria-prima, cujo tempo entre

chegadas pode ser modelado por uma distribuição exponencial de média igual à 2,5

minutos, e o tempo de atendimento do posto de Corte, cuja atividade demora um tempo

normalmente distribuído com média de 2 minutos e desvio-padrão de 0,7 minutos.

Terminado a atividade de corte, são criados 100 cilindros para cada unidade de matéria-

prima.

Dos cilindros produzidos, 67% são encaminhados para o posto de Parafusos e

33% para o de Pinos. Essas são as entradas para as filas 2 e 3, respectivamente, onde os

pinos devem esperar para serem atendidos. Os dois postos possuem tempos de

atendimento normalmente distribuído, sendo que o de parafusos possui média de 4

minutos e desvio-padrão de 1 minuto, enquanto que o de pinos possui média de 2,6

minutos e desvio-padrão de 0,8 minutos.

Os parafusos e os pinos produzidos pelos dois postos são as saídas do sistema

estudado. A simulação deseja, assim, entender o comportamento do processo inteiro,

buscando estimativas de tamanhos de filas, estoques de produtos acabados e semi

4

Page 5: Relatório 2 SSA

acabados e taxas de utilização dos operários, por exemplo. Com essas informações, é

possível tomar decisões sobre como aumentar a eficiência do processo.

5

Page 6: Relatório 2 SSA

3. Fundamentos Teóricos

6

Page 7: Relatório 2 SSA

4. Materiais Utilizados

Os materiais utilizados para esse módulo prático foram:

O ambiente de desenvolvimento Matlab;

O simulador de processos Simul8.

5. Procedimento Experimental

5.1. Matlab

O algoritmo elaborado para a resolução do problema proposto é similar ao

apresentado na apostila deste módulo, alterando-se, apenas, o número de eventos que

podem ocorrer durante o processo. A chegada da matéria-prima, a atividade de corte em

cilindros, a atividade de produção de parafusos e a de pinos são os eventos que causam

mudanças nos estados nos insumos, em seus vários estágios, devendo ser tratados pelo

código.

Desse modo, as seguintes variáveis são necessárias para a simulação:

t_max: delimita o tempo da simulação, sendo para esse problema de 12960

minutos, equivalente a 27 dias de 8 horas;

relógio: como no exemplo da apostila, indica o tempo corrente de simulação;

tempo_p_chegada_mp: indica o tempo em que ocorrerá a próxima chegada de

matéria-prima;

tempo_p_corte: indica o tempo em que se iniciará a próxima atividade de corte;

tempo_p_parafuso: indica o tempo em que se iniciará a próxima atividade de

fabricação de parafusos;

tempo_p_pino: indica o tempo em que se iniciará a próxima atividade de

fabricação de pinos.

Os postos das atividades de corte, parafusos e pinos podem estar em dois

estados: ocupados ou desocupados. Para representar isso, usam-se:

status_corte;

status_parafuso;

status_pino.

Durante o processo produtivo, a chegada de insumos a um dos postos de

atividades leva duas ações possíveis, dependendo do estado do posto. Caso ele esteja

desocupado, o insumo entra no posto, a atividade é iniciada e o posto fica bloqueado

durante esse meio tempo. Já caso esteja ocupado, o insumo deve entrar em uma fila para

esperar até que o posto se desocupe para o atende. Essas filas são:

7

Page 8: Relatório 2 SSA

n_fila_1: formada pela matéria-prima a espera de ser transformada em cilindros;

n_fila_2: formada pelos cilindros destinados para a fabricação de parafusos;

n_fila_3: formada pelos cilindros destinados para a fabricação de pinos.

Para simplificar o algoritmo codificado, foram considerados que os lotes de 100

cilindros produzidos pelo posto de corte possuíam 67% de serem encaminhados para o

posto de Parafusos e 33% de irem para o de Pinos. Isso foi conseguido gerando um

número randômico (distribuição uniforme) entre 0 e 1. Caso o valor fosse menor que

0,67, os 100 cilindros iriam para o posto de parafuso e, caso contrário, iriam para o

posto de pinos.

Para registrar a quantidades de produtos acabados e os tempos de atendimento

totais durante o tempo de simulação, foram usadas as variáveis:

soma_cil: quantidade total de cilindros produzidos;

soma_par: quantidade total de parafusos produzidos;

soma_pin: quantidade total de pinos produzidos;

soma_1: somatória dos tempos de todos os atendimentos efetuados pelo posto de

corte;

soma_2: somatória dos tempos de todos os atendimentos efetuados pelo posto de

parafusos;

soma_3: somatória dos tempos de todos os atendimentos efetuados pelo posto de

pinos.

Essas são as variáveis principais do código elaborado. O algoritmo de simulação

em si ocorre em um laço que dura até o tempo de simulação se esgote. Para cada

execução do laço, é avaliado qual evento deve ocorrer naquela volta do código, sendo

isso conseguido de forma da seguinte forma:

if tempo_p_chegada_mp <= tempo_p_corte && tempo_p_chegada_mp <=

tempo_p_parafuso && tempo_p_chegada_mp <= tempo_p_pino %Trata Eventos

de Chegada

relogio=tempo_p_chegada_mp;

...

Assim, avalia-se qual evento deve ocorrer primeiro e avança-se a simulação para

aquele instante. Comandos análogos são utilizados para os outros eventos. Dentro do

código do evento, a atividade esperada pela entidade é realizada, ocorrendo, em geral, a

retirada de elementos de uma fila para outra ou para outro posto diretamente. Após isso,

8

Page 9: Relatório 2 SSA

determina-se quando esse evento ocorrerá novamente e as variáveis com os tempos de

próximos eventos são atualizadas.

Esses tempos são determinados utilizando as distribuições correspondentes. Por

exemplo, para o tempo de atendimento do posto de corte, tem-se:

t_corte=normrnd(2,0.7);

Para a automatização da repetição da simulação, um novo laço de repetição foi

acrescentado ao programa. Os valores relevantes, já explicitados, são armazenados em

cada laço e, ao final, são calculados valores de média, desvio-padrão, máximo e mínimo

para essas variáveis. Essa é a explicação da lógica geral do programa, sendo que o

código em si pode ser encontrado em anexo a esse relatório juntamente com o seu

fluxograma para um estudo mais aprofundado.

Resultados

Os resultados das simulações realizadas pelo código Matlab são resumidas na

tabela 1. Como citado anteriormente, o tempo simulado corresponde a um mês de

trabalho com 27 dias úteis de 8 horas, sendo a simulação repetida 10 vezes.

Tabela 1: Síntese dos resultados da simulação via algoritmo codificado em Matlab.

MédiaDesvio-

padrãoMáximo Mínimo

Número de

atendimento

Cilindros 5155 75 5290 5064

Parafuso

s3224 9 3248 3212

Pinos 1709 54 1826 1642

Taxa de

utilização

Cilindros 79,66 1,04 81,53 78,60

Parafuso

s99,66 0,31 100,00 99,19

Pinos 34,34 0,31 36,06 33,24

Número de

elementos

nas filas

Cilindros 3 4 11 0

Parafuso

s22120 4334 28700 15500

Pinos 10 32 100 0

Número de Cilindros 515510 7525 529000 506400

9

Page 10: Relatório 2 SSA

elementos

produzidos

Parafuso

s322440 930 324800 321200

Pinos 170940 5446 182600 164200

10

Page 11: Relatório 2 SSA

6. Conclusões

11

Page 12: Relatório 2 SSA

Anexo AAlgoritmo utilizado para resolução do problema estudado.

12

Page 13: Relatório 2 SSA

Código elaborado no Matlab para simulação do problema estudado.

clc

13

Page 14: Relatório 2 SSA

close allclear all atendimento = zeros(10,3);tx_ut= zeros(10,3);n_fila = zeros(10,3);soma_elementos = zeros(10,3); for cont = 1:100 t_max=27*8*60; %tempo máximo de simulação status_corte=0; status_parafuso=0; status_pino=0; relogio=0; tempo_p_chegada_mp=0; tempo_p_corte=t_max+1; tempo_p_parafuso=t_max+1; tempo_p_pino=t_max+1; n_fila_1=0; n_fila_2=0; n_fila_3=0; soma_cil=0; soma_par=0; soma_pin=0; soma_1=0; soma_2=0; soma_3=0; atendimento_1=0; atendimento_2=0; atendimento_3=0; while relogio <= t_max if tempo_p_chegada_mp <= tempo_p_corte && tempo_p_chegada_mp <= tempo_p_parafuso && tempo_p_chegada_mp <= tempo_p_pino %Trata Eventos de Chegada relogio=tempo_p_chegada_mp; %fprintf('Nova Chegada de matéria-prima= %4.2f\n', relogio); if status_corte == 0 % se atendente disponivel %fprintf('Novo corte = %4.2f\n', relogio); status_corte=1; soma_cil = soma_cil + 100; t_corte=normrnd(2,0.7); % Número aleatorio da distribuição normal com média 2 soma_1=soma_1+t_corte; atendimento_1=atendimento_1+1; tempo_p_corte=relogio+t_corte; teste = rand();

14

Page 15: Relatório 2 SSA

if(teste <= 2/3) if status_parafuso == 0 % se atendente disponivel %fprintf('Novo parafuso = %4.2f\n', relogio); status_parafuso=1; soma_par=soma_par+100; t_parafuso=normrnd(4,1); % Número aleatorio da distribuição normal com média 2 soma_2=soma_2+t_parafuso; atendimento_2=atendimento_2+1; tempo_p_parafuso=tempo_p_corte+t_parafuso; else n_fila_2=n_fila_2+100; %fprintf('Fila de parafusos = %d\n', n_fila_2); end else if status_pino == 0 % se atendente disponivel %fprintf('Novo pino = %4.2f\n', relogio); status_pino=1; soma_pin=soma_pin+100; t_pino=normrnd(2.6,0.8); % Número aleatorio da distribuição normal com média 2 soma_3=soma_3+t_pino; atendimento_3=atendimento_3+1; tempo_p_pino=tempo_p_corte+t_pino; else n_fila_3=n_fila_3+100; %fprintf('Fila de pinos = %d\n', n_fila_3); end end else n_fila_1=n_fila_1+1; %fprintf('Estoque de cilindros = %d\n', n_fila_1); end tec_mp=exprnd(2.5,1);% tempo entre chegadas sucessivas tempo_p_chegada_mp=relogio+tec_mp; elseif tempo_p_corte < tempo_p_chegada_mp && tempo_p_corte <= tempo_p_parafuso && tempo_p_corte <= tempo_p_pino %Trata Eventos de Chegada relogio=tempo_p_corte; if n_fila_1 > 0; %fprintf('Novo corte = %4.2f\n',relogio) n_fila_1=n_fila_1-1; t_corte=normrnd(2,0.7); % Número aleatorio da distribuição normal com média 2 soma_1=soma_1+t_corte; atendimento_1=atendimento_1+1; tempo_p_corte=relogio+t_corte; soma_cil=soma_cil+100;

15

Page 16: Relatório 2 SSA

teste = rand(); if(teste <= 2/3) if status_parafuso == 0 % se atendente disponivel %fprintf('Novo parafuso = %4.2f\n', relogio); status_parafuso=1; soma_par=soma_par+100; t_parafuso=normrnd(4,1); % Número aleatorio da distribuição normal com média 2 soma_2=soma_2+t_parafuso; atendimento_2=atendimento_2+1; tempo_p_parafuso=relogio+t_parafuso; else n_fila_2=n_fila_2+100; %fprintf('Fila de parafusos = %d\n', n_fila_2); end else if status_pino == 0 % se atendente disponivel %fprintf('Novo pino = %4.2f\n', relogio); status_pino=1; soma_pin=soma_pin+100; t_pino=normrnd(2.6,0.8); % Número aleatorio da distribuição normal com média 2 soma_3=soma_3+t_pino; atendimento_3=atendimento_3+1; tempo_p_pino=relogio+t_pino; else n_fila_3=n_fila_3+100; %fprintf('Fila de pinos = %d\n', n_fila_3); end end else status_corte=0; tempo_p_corte=t_max+1; end elseif tempo_p_parafuso < tempo_p_chegada_mp && tempo_p_parafuso < tempo_p_corte && tempo_p_parafuso <= tempo_p_pino %Trata Eventos de Chegada relogio=tempo_p_parafuso; if n_fila_2 > 0; %fprintf('Novo parafuso = %4.2f\n',relogio) n_fila_2=n_fila_2-100; %fprintf('Fila de parafusos = %d\n', n_fila_2); soma_par=soma_par+100; t_parafuso=normrnd(4,1); % Número aleatorio da distribuição normal com média 2 soma_2=soma_2+t_parafuso;

16

Page 17: Relatório 2 SSA

atendimento_2=atendimento_2+1; tempo_p_parafuso=relogio+t_parafuso; else status_parafuso=0; tempo_p_parafuso=t_max+1; end elseif tempo_p_pino < tempo_p_chegada_mp && tempo_p_pino < tempo_p_corte && tempo_p_pino < tempo_p_parafuso %Trata Eventos de Chegada relogio=tempo_p_pino; if n_fila_3 > 0; %fprintf('Novo pino = %4.2f\n',relogio) soma_pin=soma_pin+100; n_fila_3=n_fila_3-100; %fprintf('Fila de pinos = %d\n', n_fila_3); t_pino=normrnd(2.6,0.8); % Número aleatorio da distribuição normal com média 2 soma_3=soma_3+t_pino; atendimento_3=atendimento_3+1; tempo_p_pino=relogio+t_pino; else status_pino=0; tempo_p_pino=t_max+1; end end end tx_utilizacao_1=100*(soma_1/t_max); % Tx. Utilização Atendente tx_utilizacao_2=100*(soma_2/t_max); % Tx. Utilização Atendente tx_utilizacao_3=100*(soma_3/t_max); % Tx. Utilização Atendente fprintf('\n\n#######################################################################\n'); fprintf('\n\nNúmero de Atendimentos cilindros = %1.0f\n', atendimento_1); fprintf('Número de Atendimentos parafusos = %1.0f\n', atendimento_2); fprintf('Número de Atendimentos pinos = %1.0f\n', atendimento_3); fprintf('\nTaxa de Utilização do Atendente de cilindros = %4.2f\n', tx_utilizacao_1) fprintf('Taxa de Utilização do Atendente de parafusos = %4.2f\n', tx_utilizacao_2) fprintf('Taxa de Utilização do Atendente de pinos = %4.2f\n', tx_utilizacao_3) fprintf('\nNúmero de matéria prima na Fila = %1.0f\n', n_fila_1) fprintf('Número de cilindros na Fila para parafusos = %1.0f\n', n_fila_2)

17

Page 18: Relatório 2 SSA

fprintf('Número de cilindros na Fila para pinos = %1.0f\n', n_fila_3) fprintf('\nNúmero de cilindros produzidos = %4.2f\n', soma_cil) fprintf('Número de parafusos produzidos = %4.2f\n', soma_par) fprintf('Número de pinos produzidos = %4.2f\n', soma_pin) fprintf('Verificação = %4.2f\n', soma_cil-(soma_par+soma_pin+n_fila_2+n_fila_3)) atendimento(cont, 1:end) = [atendimento_1 atendimento_2 atendimento_3]; tx_ut(cont, 1:end) = [tx_utilizacao_1 tx_utilizacao_2 tx_utilizacao_3]; n_fila(cont, 1:end) = [n_fila_1 n_fila_2 n_fila_3]; soma_elementos(cont, 1:end) = [soma_cil soma_par soma_pin];end fprintf('\n\n#######################################################################\n');fprintf('\n\n#######################################################################\n'); fprintf('\nMédia de Número de Atendimentos: cilindros = %1.0f; parafusos = %1.0f; pinos = %1.0f\n', mean(atendimento));fprintf('Média de Taxa de Utilização do Atendente: cilindros = %4.2f; parafusos = %4.2f; pinos = %4.2f\n', mean(tx_ut))fprintf('Média de Número de elementos na Fila: cilindros = %1.0f; parafusos = %1.0f; pinos = %1.0f\n', mean(n_fila))fprintf('Média de Número de elementos produzidos: cilindros = %4.2f; parafusos = %4.2f; pinos = %4.2f\n', mean(soma_elementos)) fprintf('\n\nDesvio de Número de Atendimentos: cilindros = %1.0f; parafusos = %1.0f; pinos = %1.0f\n', std(atendimento));fprintf('Desvio de Taxa de Utilização do Atendente: cilindros = %4.2f; parafusos = %4.2f; pinos = %4.2f\n', std(tx_ut))fprintf('Desvio de Número de elementos na Fila: cilindros = %1.0f; parafusos = %1.0f; pinos = %1.0f\n', std(n_fila))fprintf('Desvio de Número de elementos produzidos: cilindros = %4.2f; parafusos = %4.2f; pinos = %4.2f\n', std(soma_elementos)) fprintf('\n\nMáximo de Número de Atendimentos: cilindros = %1.0f; parafusos = %1.0f; pinos = %1.0f\n', max(atendimento));fprintf('Máximo de Taxa de Utilização do Atendente: cilindros = %4.2f; parafusos = %4.2f; pinos = %4.2f\n', max(tx_ut))fprintf('Máximo de Número de elementos na Fila: cilindros = %1.0f; parafusos = %1.0f; pinos = %1.0f\n', max(n_fila))fprintf('Máximo de Número de elementos produzidos: cilindros = %4.2f; parafusos = %4.2f; pinos = %4.2f\n', max(soma_elementos)) fprintf('\n\nMínimo de Número de Atendimentos: cilindros = %1.0f; parafusos = %1.0f; pinos = %1.0f\n', min(atendimento));fprintf('Mínimo de Taxa de Utilização do Atendente: cilindros = %4.2f; parafusos = %4.2f; pinos = %4.2f\n', min(tx_ut))fprintf('Mínimo de Número de elementos na Fila: cilindros = %1.0f; parafusos = %1.0f; pinos = %1.0f\n', min(n_fila))fprintf('Mínimo de Número de elementos produzidos: cilindros = %4.2f; parafusos = %4.2f; pinos = %4.2f\n', min(soma_elementos))

18

Page 19: Relatório 2 SSA

19