Você está na página 1de 18

Universidade Federal de Uberlndia

Faculdade de Engenharia Mecnica e Mecatrnica FEMEC


Simulao de Sistemas Automatizados FEMEC 42083
Prof. Dr. Jean-Paul Z. De Souza Tavares

RELATRIO DE SIMULAO DE SISTEMAS AUTOMATIZADOS

Mdulo 2: Simulao Computacional

Brian de Lima Curtt


Caio Eduardo Okimoto Ladislau

98770
11011EMT023

Uberlndia, 24 de junho de 2014

Sumrio
1.

Objetivos....................................................................................................................3

2.

Introduo..................................................................................................................4

3.

Fundamentos Tericos................................................................................................5

4.

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

5.

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

6.

Concluses.................................................................................................................7

1. Objetivos
Para o segundo mdulo prtico da disciplina de Simulao de Sistemas
Automatizados, foi trabalhado o conceito de modelos computacionais. Dois mtodos
distintos de criao de modelos foram aplicados para um mesmo problema de simulao
de fila e atendimento: utilizao de simulador e programao em linguagem de alto
nvel. Uma comparao feita entre os mtodos, sendo, porm, o simulador mais
explorado.

2. Introduo

Figura 1: Processo de produo de parafusos e pinos.

O problema proposto para esse mdulo composto por trs entidades de


atendimento, uma entrada e duas sadas. 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 possvel formao de trs filas nesse sistema, como mostrado na figura 1.
A primeira fila formada pela entrada de matria-prima, cujo tempo entre
chegadas pode ser modelado por uma distribuio exponencial de mdia igual 2,5
minutos, e o tempo de atendimento do posto de Corte, cuja atividade demora um tempo
normalmente distribudo com mdia de 2 minutos e desvio-padro de 0,7 minutos.
Terminado a atividade de corte, so criados 100 cilindros para cada unidade de matriaprima.
Dos cilindros produzidos, 67% so encaminhados para o posto de Parafusos e
33% para o de Pinos. Essas so 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 distribudo, sendo que o de parafusos possui mdia de 4
minutos e desvio-padro de 1 minuto, enquanto que o de pinos possui mdia de 2,6
minutos e desvio-padro de 0,8 minutos.
Os parafusos e os pinos produzidos pelos dois postos so as sadas do sistema
estudado. A simulao deseja, assim, entender o comportamento do processo inteiro,
buscando estimativas de tamanhos de filas, estoques de produtos acabados e semi
4

acabados e taxas de utilizao dos operrios, por exemplo. Com essas informaes,
possvel tomar decises sobre como aumentar a eficincia do processo.

3. Fundamentos Tericos

4. Materiais Utilizados
Os materiais utilizados para esse mdulo prtico foram:

O ambiente de desenvolvimento Matlab;

O simulador de processos Simul8.

5. Procedimento Experimental
5.1.

Matlab

O algoritmo elaborado para a resoluo do problema proposto similar ao


apresentado na apostila deste mdulo, alterando-se, apenas, o nmero de eventos que
podem ocorrer durante o processo. A chegada da matria-prima, a atividade de corte em
cilindros, a atividade de produo de parafusos e a de pinos so os eventos que causam
mudanas nos estados nos insumos, em seus vrios estgios, devendo ser tratados pelo
cdigo.
Desse modo, as seguintes variveis so necessrias para a simulao:

t_max: delimita o tempo da simulao, sendo para esse problema de 12960


minutos, equivalente a 27 dias de 8 horas;

relgio: como no exemplo da apostila, indica o tempo corrente de simulao;

tempo_p_chegada_mp: indica o tempo em que ocorrer a prxima chegada de


matria-prima;

tempo_p_corte: indica o tempo em que se iniciar a prxima atividade de corte;

tempo_p_parafuso: indica o tempo em que se iniciar a prxima atividade de


fabricao de parafusos;

tempo_p_pino: indica o tempo em que se iniciar a prxima atividade de


fabricao 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 aes possveis, 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 so:

n_fila_1: formada pela matria-prima a espera de ser transformada em cilindros;


n_fila_2: formada pelos cilindros destinados para a fabricao de parafusos;
n_fila_3: formada pelos cilindros destinados para a fabricao de pinos.
Para simplificar o algoritmo codificado, foram considerados que os lotes de 100

cilindros produzidos pelo posto de corte possuam 67% de serem encaminhados para o
posto de Parafusos e 33% de irem para o de Pinos. Isso foi conseguido gerando um
nmero randmico (distribuio uniforme) entre 0 e 1. Caso o valor fosse menor que
0,67, os 100 cilindros iriam para o posto de parafuso e, caso contrrio, iriam para o
posto de pinos.
Para registrar a quantidades de produtos acabados e os tempos de atendimento
totais durante o tempo de simulao, foram usadas as variveis:

soma_cil: quantidade total de cilindros produzidos;


soma_par: quantidade total de parafusos produzidos;
soma_pin: quantidade total de pinos produzidos;
soma_1: somatria dos tempos de todos os atendimentos efetuados pelo posto de

corte;
soma_2: somatria dos tempos de todos os atendimentos efetuados pelo posto de

parafusos;
soma_3: somatria dos tempos de todos os atendimentos efetuados pelo posto de
pinos.
Essas so as variveis principais do cdigo elaborado. O algoritmo de simulao

em si ocorre em um lao que dura at o tempo de simulao se esgote. Para cada


execuo do lao, avaliado qual evento deve ocorrer naquela volta do cdigo, 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 avana-se a simulao para
aquele instante. Comandos anlogos so utilizados para os outros eventos. Dentro do
cdigo 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. Aps isso,

determina-se quando esse evento ocorrer novamente e as variveis com os tempos de


prximos eventos so atualizadas.
Esses tempos so determinados utilizando as distribuies correspondentes. Por
exemplo, para o tempo de atendimento do posto de corte, tem-se:
t_corte=normrnd(2,0.7);

Para a automatizao da repetio da simulao, um novo lao de repetio foi


acrescentado ao programa. Os valores relevantes, j explicitados, so armazenados em
cada lao e, ao final, so calculados valores de mdia, desvio-padro, mximo e mnimo
para essas variveis. Essa a explicao da lgica geral do programa, sendo que o
cdigo em si pode ser encontrado em anexo a esse relatrio juntamente com o seu
fluxograma para um estudo mais aprofundado.

Resultados
Os resultados das simulaes realizadas pelo cdigo Matlab so resumidas na
tabela 1. Como citado anteriormente, o tempo simulado corresponde a um ms de
trabalho com 27 dias teis de 8 horas, sendo a simulao repetida 10 vezes.
Tabela 1: Sntese dos resultados da simulao via algoritmo codificado em Matlab.

Mdia
Nmero de
atendimento
Taxa de
utilizao
Nmero de
elementos
nas filas
Nmero de
elementos
produzidos

Cilindros
Parafuso

Desvio-

5155

padro
75

Mximo

Mnimo

5290

5064

s
Pinos
Cilindros
Parafuso

3224

3248

3212

1709
79,66

54
1,04

1826
81,53

1642
78,60

s
Pinos
Cilindros
Parafuso

99,66

0,31

100,00

99,19

34,34
3

0,31
4

36,06
11

33,24
0

22120

4334

28700

15500

10
515510

32
7525

100
529000

0
506400

322440

930

324800

321200

170940

5446

182600

164200

s
Pinos
Cilindros
Parafuso
s
Pinos

6. Concluses

10

Anexo A
Algoritmo utilizado para resoluo do problema estudado.

11

Cdigo elaborado no Matlab para simulao do problema estudado.


clc

12

close all
clear 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 mximo de simulao
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;

relogio);

%fprintf('Nova Chegada de matria-prima= %4.2f\n',

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); % Nmero aleatorio da
distribuio normal com mdia 2
soma_1=soma_1+t_corte;
atendimento_1=atendimento_1+1;
tempo_p_corte=relogio+t_corte;

13

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); % Nmero aleatorio da
distribuio normal com mdia 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); % Nmero aleatorio da
distribuio normal com mdia 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
end

n_fila_1=n_fila_1+1;
%fprintf('Estoque de cilindros = %d\n', n_fila_1);

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); % Nmero aleatorio da
distribuio normal com mdia 2
soma_1=soma_1+t_corte;

14

atendimento_1=atendimento_1+1;
tempo_p_corte=relogio+t_corte;
soma_cil=soma_cil+100;
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); % Nmero aleatorio da
distribuio normal com mdia 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); % Nmero aleatorio da


distribuio normal com mdia 2
soma_3=soma_3+t_pino;
atendimento_3=atendimento_3+1;
tempo_p_pino=relogio+t_pino;
else
end

n_fila_3=n_fila_3+100;
%fprintf('Fila de pinos = %d\n', n_fila_3);

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);

15

soma_par=soma_par+100;
t_parafuso=normrnd(4,1); % Nmero aleatorio da
distribuio normal com mdia 2
soma_2=soma_2+t_parafuso;
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);
distribuio normal com mdia 2

% Nmero aleatorio da

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. Utilizao Atendente
tx_utilizacao_2=100*(soma_2/t_max); % Tx. Utilizao Atendente
tx_utilizacao_3=100*(soma_3/t_max); % Tx. Utilizao Atendente

fprintf('\n\n#########################################################
##############\n');
fprintf('\n\nNmero de Atendimentos cilindros = %1.0f\n',
atendimento_1);
fprintf('Nmero de Atendimentos parafusos = %1.0f\n',
atendimento_2);
fprintf('Nmero de Atendimentos pinos = %1.0f\n', atendimento_3);

16

fprintf('\nTaxa de Utilizao do Atendente de cilindros =


%4.2f\n', tx_utilizacao_1)
fprintf('Taxa de Utilizao do Atendente de parafusos = %4.2f\n',
tx_utilizacao_2)
fprintf('Taxa de Utilizao do Atendente de pinos = %4.2f\n',
tx_utilizacao_3)
fprintf('\nNmero de matria prima na Fila = %1.0f\n', n_fila_1)
fprintf('Nmero de cilindros na Fila para parafusos = %1.0f\n',
n_fila_2)
fprintf('Nmero de cilindros na Fila para pinos = %1.0f\n',
n_fila_3)
fprintf('\nNmero de cilindros produzidos = %4.2f\n', soma_cil)
fprintf('Nmero de parafusos produzidos = %4.2f\n', soma_par)
fprintf('Nmero de pinos produzidos = %4.2f\n', soma_pin)
fprintf('Verificao = %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('\nMdia de Nmero de Atendimentos: cilindros = %1.0f;
parafusos = %1.0f; pinos = %1.0f\n', mean(atendimento));
fprintf('Mdia de Taxa de Utilizao do Atendente: cilindros = %4.2f;
parafusos = %4.2f; pinos = %4.2f\n', mean(tx_ut))
fprintf('Mdia de Nmero de elementos na Fila: cilindros = %1.0f;
parafusos = %1.0f; pinos = %1.0f\n', mean(n_fila))
fprintf('Mdia de Nmero de elementos produzidos: cilindros = %4.2f;
parafusos = %4.2f; pinos = %4.2f\n', mean(soma_elementos))
fprintf('\n\nDesvio de Nmero de Atendimentos: cilindros = %1.0f;
parafusos = %1.0f; pinos = %1.0f\n', std(atendimento));
fprintf('Desvio de Taxa de Utilizao do Atendente: cilindros = %4.2f;
parafusos = %4.2f; pinos = %4.2f\n', std(tx_ut))
fprintf('Desvio de Nmero de elementos na Fila: cilindros = %1.0f;
parafusos = %1.0f; pinos = %1.0f\n', std(n_fila))
fprintf('Desvio de Nmero de elementos produzidos: cilindros = %4.2f;
parafusos = %4.2f; pinos = %4.2f\n', std(soma_elementos))
fprintf('\n\nMximo de Nmero de Atendimentos: cilindros = %1.0f;
parafusos = %1.0f; pinos = %1.0f\n', max(atendimento));
fprintf('Mximo de Taxa de Utilizao do Atendente: cilindros = %4.2f;
parafusos = %4.2f; pinos = %4.2f\n', max(tx_ut))
fprintf('Mximo de Nmero de elementos na Fila: cilindros = %1.0f;
parafusos = %1.0f; pinos = %1.0f\n', max(n_fila))

17

fprintf('Mximo de Nmero de elementos produzidos: cilindros = %4.2f;


parafusos = %4.2f; pinos = %4.2f\n', max(soma_elementos))
fprintf('\n\nMnimo de Nmero de Atendimentos: cilindros = %1.0f;
parafusos = %1.0f; pinos = %1.0f\n', min(atendimento));
fprintf('Mnimo de Taxa de Utilizao do Atendente: cilindros = %4.2f;
parafusos = %4.2f; pinos = %4.2f\n', min(tx_ut))
fprintf('Mnimo de Nmero de elementos na Fila: cilindros = %1.0f;
parafusos = %1.0f; pinos = %1.0f\n', min(n_fila))
fprintf('Mnimo de Nmero de elementos produzidos: cilindros = %4.2f;
parafusos = %4.2f; pinos = %4.2f\n', min(soma_elementos))

18