Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Modelo de Especificação Formal
Redes de Petri Modelo de Especificação Formal Alessandra Guaracy de Oliveira Patrick Henrique da Silva Brito
2
Sumário Introdução Variantes de Redes de Petri Ferramentas disponíveis
Estudo de Caso (Elevador) Conclusões
3
Referências Bibliográficas
Maciel, Lins e Cunha. Introdução às Redes de Petri, 10ª Escola de Computação, 1996 Petri Nets Tool Database - Barros, João Paulo M. P. Introdução à Modelagem de Sistemas utilizando Redes de Petri, Disponível em
4
Definição “Redes de Petri é uma técnica de especificação de sistemas que possibilita uma representação matemática e possui mecanismos de análise poderosos, que permitem a verificação de propriedades e verificação da corretude do sistema especificado.”
5
Estrutura das Redes de Petri
Lugar Transição Arco Marca Arco Inibidor 1 2 2 1
6
Características Redes de Petri
Não-determinísticas Podem ser mapeadas em máquinas de estados Várias formas de representação: Gráfica Bag (conjuntos e funções matemáticas) Matrizes Definição por relações
7
Variantes de Redes de Petri
Rede Temporal, Rede Hierárquica; Rede Colorida d c b a Marcas Cores t1 t0 <a> <c> <[a,b]> t1 t0 <a> <c> <[a,b]> Após o disparo transição t1
8
Propriedades das Redes de Petri
Alcançabilidade (Reachability) Limitação (Boundedness) Liveness Cobertura
9
Ferramentas Ferramentas para verificação da corretude do modelo (checa deadlock) ferramenta utilizada HPSim Ferramentas para checar propriedades das redes de Petri (alcançabilidade, cobertura) INA (
10
HPSim Suporte a redes lugar-transição (sem marcas coloridas), redes com lugares com diferentes capacidades e rede temporal.
11
Problema do Elevador Rede de Petri Temporal e com arco inibidor
12
Modelagem utilizando Rede Colorida
nova_dir dir muda_dir (dir,lista) Subir|descer (dir,nova_lista) Lista de paradas Lista subidas Lista descidas andar v (novo_mov,novo_u) (mov,u) pos i subir|descer|parado
13
Funções e Variáveis Os pedidos são mantidos em quatro listas: lista_subida, lista_subida_prox (ordenadas em ordem crescente), lista_descida e lista_descida_prox (ordenadas em ordem descrecente). n - (número de andares) pos {0,...,n-1} posição do elevador andar {0,...,n-1} (botões pressionados dentro do elevador) bot_sub,bot_des {0,...,n-1}
14
Funções e Variáveis dir {subir, descer, parado}
ordena_sub(par,lista) | ordena_des(par,lista) coloca o valor par na lista em ordem crescente|descrente, respectivamente
15
Lógica - Movimento Subida
(dir == subir) ^ (andar > pos) lista_subida = ordena_sub(andar,lista_subida) (andar < pos) lista_descida_prox = ordena_des(andar, lista_descida_prox) (bot_sub > pos) lista_subida = ordena_sub(bot_sub,lista_subida) (bot_sub < pos) lista_subida_prox = ordena_sub(bot_sub,lista_subida_prox) (bot_des != pos) lista_descida_prox = ordena_des(bot_des,lista_descida_prox)
16
Lógica - Movimento Descida
(dir == descer) ^ (andar < pos) lista_descida = ordena_des(andar,lista_descida) (andar > pos) lista_subida_prox = ordena_sub(andar, lista_subida_prox) (bot_des < pos) lista_descida = ordena_des(bot_des,lista_descida) (bot_des > pos) lista_descida_prox = ordena_des(bot_des,lista_descida_prox) (bot_sub != pos) lista_subida_prox = ordena_sub(bot_sub,lista_subida_prox)
17
Mudando direção quando está subindo e lista_subida fica vazia
(dir == subir) ^empty(lista_subida) ^ not_empty(lista_descida_prox) ^ (head(lista_descida_prox) > pos) { lista_subida = cons(head(lista_descida_prox) > pos),lista_subida) lista_descida_prox = tail(lista_descida_prox) }
18
Mudando direção quando está subindo e lista_subida fica vazia
(dir == subir) ^empty(lista_subida) ^ not_empty(lista_descida_prox) ^ (head(lista_descida_prox) <= pos) { dir = descer; lista_descida = lista_descida_prox; clear(lista_descida_prox); }
19
Mudando direção quando está subindo e lista_subida fica vazia
(dir == subir) ^empty(lista_subida) ^ empty(lista_descida_prox) ^ not_empty(lista_subida_prox) { dir = descer; lista_descida = cons(head(lista_subida_prox),lista_descida); }
20
Mudando direção quando está subindo e lista_subida fica vazia
(dir == subir) ^empty(lista_subida) ^ empty(lista_descida_prox) ^empty(lista_subida_prox) dir = parado;
21
Mudando direção quando está descendo e lista_descida fica vazia
(dir == descer) ^ empty(lista_descida) ^ not_empty(lista_subida_prox) ^(head(lista_subida_prox) <= pos) { lista_descida = cons(head(lista_subida_prox),lista_descida); lista_subida_prox = tail(lista_subida_prox); }
22
Mudando direção quando está descendo e lista_descida fica vazia
(dir == descer) ^ empty(lista_descida) ^ empty(lista_subida_prox) ^ not_empty(lista_descida_prox) { dir = subir; lista_subida = cons(head(lista_descida_prox),lista_subida); lista_descida_prox = tail(lista_descida_prox); }
23
Mudando direção quando está descendo e lista_descida fica vazia
(dir == descer) ^ empty(lista_descida) ^ empty(lista_subida_prox) ^empty(lista_descida_prox) dir = parado;
24
Atualizando a lista de subida durante o movimento de subida
(dir == subir) { if (head(lista_subida) == pos) lista_subida = tail(lista_subida); pos = pos + 1; }
25
Atualizando a lista de descida durante o movimento de descida
(dir == descer) { if (head(lista_descida) == pos) lista_descida = tail(lista_descida); pos = pos - 1; }
26
Conclusões Rede de Petri é um modelo dinâmico, não-determinístico e seu formalismo possibilita a verificação da existência de deadlocks A rede de Petri simples possui muitas limitações, como por exemplo: não permite passagem de parâmetros e eventos temporais (Solução: uso de variantes do modelo)
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.