Está en la página 1de 44

Tema 4: Diseo de aplicaciones para uC. REDES DE PETRI.

21/12/2004

SED: Tema 4. Redes de Petri.

INTRODUCCION

Ejemplo: Carros que van y vienen sincronizados Al pulsar M ambos carros se desplazan a la derecha. El regreso lo hacen simultneamente cuando ambos carros se encuentren en el extremo derecho.
C 1 MAC

l1 A T1

r1 B r2 T2 D

M C

l2

Autmata:
2 B r2 3 D 5 6 A l2 r1 , r2 D 4 B l1 , l2 C l1 7 r1

21/12/2004

SED: Tema 4. Redes de Petri.

INTRODUCCION
Tres carros
1 MACE 2 B D

r1 , r
F

,r

3 D F

r2 , r

3 B

4 F

r1 , r

3 B

5 D

r1 , r

r3
F D

r2
B

r1
A C E

9 A C

l1 , l
E

,l

10 C E

l2 , l

3 A

11

l1 , l
E

3 A

12 C

l1 , l

13

l3

14

l2

15

l1

21/12/2004

SED: Tema 4. Redes de Petri.

INTRODUCCION

Para N carros 2N+1 - 1 estados


Problemas del modelado con autmatas de estados finitos de sistemas con evoluciones paralelas (sistemas concurrentes):
conduce a descripciones complejas (gran nmero de estados) no permite modificaciones locales del comportamiento del sistema poca flexibilidad (Ej.: uno de los carros vuelve sin sincronizarse)

21/12/2004

SED: Tema 4. Redes de Petri.

INTRODUCCION

Una red de Petri (RdP) es un grafo orientado con dos clases de nodos: lugares (circunferencias) y transiciones (barras). Los arcos unen un lugar con una transicin o viceversa. Un lugar puede contener un nmero positivo o nulo de marcas. Distribucin de marcas en los lugares, marcado estado de la RdP. Se asocian entradas y salidas a lugares y transiciones (p.e.: salida p lugar marcado; entrada transicin)
1

t1 p2 p3

t2

t3

p4

p5 t4

21/12/2004

SED: Tema 4. Redes de Petri.

INTRODUCCION

Evolucin de una RdP:


Una transicin est sensibilizada si todos sus lugares de entrada estn marcados Transicin sensibilizada => puede dispararse Disparo => evolucin del estado: Retirada de una marca de cada lugar de entrada, depsito de una marca en cada lugar de salida
t1 t2 t3

t1

t2

t3

21/12/2004

SED: Tema 4. Redes de Petri.

INTRODUCCION

Ejemplo: Carros que van y vienen sincronizados

r1 B

r2 D

2 carros

r1 B

r2 D

r3 F

3 carros

l1 A

l2 C

l1 A

l2 C

l3 E

21/12/2004

SED: Tema 4. Redes de Petri.

FORMALIZACION Y CLASIFICACION

Red de Petri (RdP): es una cudrupla R = {P, T, , } tal que


P es un conjunto finito y no vaco de lugares T es un conjunto finito y no vaco de transiciones PT= :P x T N es la funcin de incidencia previa :T x P N es la funcin de incidencia posterior

RdP marcada: es un par {R, Mo}, donde R es una RdP y Mo es un marcado inicial.

21/12/2004

SED: Tema 4. Redes de Petri.

FORMALIZACION Y CLASIFICACION

Representacin grfica
Arco de pi a tj (pi,tj) 0 Arco de tk a pi (tk,pi) 0 Arcos etiquetados con un peso = (pi,tj) (tk,pi)

Representacin matricial
Matriz de incidencia previa: C- = [cij-] donde cij- = (pi,tj) Matriz de incidencia posterior: C+ = [cij+] donde cij+ = (tj,pi) Matriz de incidencia: C = C+ - Cp
1

p1 1 0 1 p2 1 0 1 C= p3 2 1 0 p4 0 1 2
21/12/2004 SED: Tema 4. Redes de Petri.

t1

p p2

t2 p4 t3
2

INTERPRETACION

Entradas (eventos discretos, condiciones lgicas externas), salidas (eventos discretos, salidas a nivel), cdigo asociado a las transiciones.
Acc. impulsionales asociadas a transiciones => disparo instantneo

abc

a b c evento

seal set(s) s

Cdigo/actividades en transiciones => disparo no instantneo

abc
---------- w -------

a b c

21/12/2004

SED: Tema 4. Redes de Petri.

EJEMPLOS DE MODELADO

Ejemplo: Carros con va comn

MA LA

lA A

rA WA G WB

lB
B

rB MU U

MB

LB

Dos carros A y B transportan cierto material desde los puntos de carga LA y LB, respectivamente, hasta el punto de descarga U. Los diferentes movimientos son controlados mediante las seales lA, lB, rA, rB. Si A est en LA y el pulsador MA est oprimido, comienza un ciclo LA-U-LA:
espera eventual en WA hasta que la zona comn a los dos carros est libre, con el fin de evitar colisiones; espera obligatoria en U hasta MU (pulsador de fin de descarga).

El carro B tiene un funcionamiento similar pero, en caso de demanda simultnea de la va comn, B es prioritario. El recorrido WA-U o WB-U se establece por un cambio de agujas controlado por la accin G.
SED: Tema 4. Redes de Petri.

21/12/2004

EJEMPLOS DE MODELADO
Transiciones -> entradas de sensores Lugares -> seales de salida

1 MA 14 rA WA 4 W
B

2 M
B

rB 15 WB 3 5

MA LA

lA A

rA ,G

rB U

rA WA G WB

lB
B

rB MU U
WA

U G MU l A , G 10 11 8 9

MU l 13 lB L
B B

MB

LB

W 12 lA LA

21/12/2004

SED: Tema 4. Redes de Petri.

EJEMPLOS DE MODELADO

Ejemplo: Lectores-redactores Dos conjuntos de usuarios (lectores y redactores) tienen que coordinarse para acceder a unos datos comunes:
los lectores slo inspeccionan, y por lo tanto pueden acceder simultneamente a los datos los redactores actualizan los datos y su trabajo debe estar en exclusin mutua con el resto de usuarios

Cada usuario puede estar en uno de los siguientes estados: activo, espera y reposo.
MODELAR EL SISTEMA PARA 2 LECTORES Y 2 REDACTORES

Interpretacin: lugares --> actividades

21/12/2004

SED: Tema 4. Redes de Petri.

EJEMPLOS DE MODELADO

X1 RL 1 DL 1 EL 1 CL 1 AL 1 FL 1 RL 2 DL 2 EL 2 CL 2 AL 2 FL 2

X2 RR 1 DR 1 ER 1 CR 1 AR 1 FR 1 RR 2 DR 2 ER 2 CR 2 AR 2 FR 2

1 letra: R = reposo 2 letra: Li = i-simo lector E = espera Rj = j-simo redactor A = activo D = demanda de recurso C = comienzo operacin F = fin de operacin
21/12/2004 SED: Tema 4. Redes de Petri.

EJEMPLOS DE MODELADO

Ejemplo: Productor-consumidor Se desea disear un sistema de transmisin de datos con las siguientes caractersticas:
El sistema recibe datos (8 bits) de un puerto paralelo .Cada dato es procesado e introducido en un buffer con capacidad para 8 datos Los datos son sacados del buffer con poltica FIFO y enviados por lnea serie (SCI) mediante un sencillo protocolo con reenvo

STRB PORTCL DATO SCI STRA ACK/NACK T

21/12/2004

SED: Tema 4. Redes de Petri.

EJEMPLOS MODELADO

P1 TP1 llegada_dato leer() P2 TP2 procesar()

NACK TC51 llegada_caracter

C5

ACK TC52

TC4 C4 enviar() TC3 C3

P3 TP3 H sacar() P4 TP4 meter() O MUTEX

TC2 C2

TC1 C1

21/12/2004

SED: Tema 4. Redes de Petri.

ANALISIS

Propiedades de una RdP Vivacidad: Una transicin t es viva para un marcado inicial M0 dado existe una secuencia de disparos a partir de cualquier marcado M, sucesor de M0, que comprenda a t:
M M ( R, M 0 ) : M ] > M ' t

Una RdP es viva para M0 todas sus transiciones son vivas para M0
ausencia de bloqueos: el sistema o un subsistema no se bloquea (deja de funcionar)

Ciclicidad: Se dice que una RdP posee un comportamiento globalmente cclico para M0 si existe una secuencia de disparos que permite alcanzar el marcado inicial M0 a partir de cualquier marcado M sucesor de M0: M M ( R, M ) M ] > M
0 0

21/12/2004

SED: Tema 4. Redes de Petri.

ANALISIS

Limitacin: Un lugar p es k-limitado para M0 existe un nmero entero k tal que M(p) k para cualquier marcado M M(R,M0). k se denomina lmite del lugar. Una RdP es k-limitada para M0 todos sus lugares son klimitados para M0:
Ejemplo: un lugar representa el nmero de mensajes en un buffer, su lmite es el nmero mximo de mensajes que tiene que poder almacenar

p P M M ( R, M0 ), M ( p ) k

Exclusin mutua: Se dice que dos lugares de una RdP estn en exclusin mutua para M0 si no pueden estar marcados simultneamente en los marcados alcanzables desde M0
actividades excluyentes (Ejemplo: lectores-redactores)

21/12/2004

SED: Tema 4. Redes de Petri.

IMPLEMENTACION

Implementacin programada de una RdP: Es un programa o algoritmo que simula el disparo de transiciones de la RdP, respetando la reglas de evolucin del modelo terico. Disparo de una transicin:
Instantneo e indivisible No hay cdigo asociado a la transicin Ni instantneo ni indivisible Existe un cdigo asociado a la transicin => Varias fases en el disparo: Retirada de marcas de los lugares de entrada Ejecucin del cdigo asociado Depsito de marcas en los lugares de salida ESTADO RdP:= marcado + transiciones en disparo

21/12/2004

SED: Tema 4. Redes de Petri.

IMPLEMENTACION

Entradas
Eventos -> espera a su llegada para que evolucione el sistema Muestreo Interrupcin Entradas de nivel Lectura asncrona Las entradas se leen conforme se vayan necesitando en el tratamiento PB: aleatoriedades Lectura sncrona Se leen todas las entradas a la vez Memoria Imagen

21/12/2004

SED: Tema 4. Redes de Petri.

IMPLEMENTACION

Salidas
Impulsionales o acciones Asociadas al disparo de transiciones De nivel o mantenidas Asociadas a lugares marcados Generacin En el instante en que se calculan (asncrona) Todas al final del tratamiento (sncrona)
T1 s1,s2 T2 s1 T3 T3/desactivar(s1) T2/desactivar(s2) T1/activar(s1,s2)

21/12/2004

SED: Tema 4. Redes de Petri.

IMPLEMENTACION

Cdigo
Disparo de transiciones Disparo no instantneo Lugares Lugar marcado => cdigo en ejecucin Transicin descendiente: Fin de ejecucin

Comienzo CODIGO CODIGO ... ... ... Ejecucin CODIGO Fin CODIGO

21/12/2004

SED: Tema 4. Redes de Petri.

IMPLEMENTACION

Tipos de Implementaciones: INTERPRETADA: La estructura de la RdP y su marcado se codifican en estructuras de datos de las cuales uno o varios programas extraen la informacin para hacer evolucionar la RdP.
INTEPRETES (independientes de la RdP)

COMPILADA: Se generan uno o varios programas cuyos flujos de control repreducen el comportamiento de la RdP

21/12/2004

SED: Tema 4. Redes de Petri.

IMPLEMENTACION

SECUENCIAL: Un nico proceso ejecuta la RdP


Si hay cdigo asociado a las transiciones => secuencializacin en su ejecucin Importancia del orden de disparo Pb: monopolios, retrasos

t1 puede retrasar a t2 y t3

t1 100

t2

t3

CONCURRENTE: Varios procesos comunicantes ejecutan la RdP


1 procesador => no secuencializacin, s entrelazado

21/12/2004

SED: Tema 4. Redes de Petri.

IMPLEMENTACION

CENTRALIZADA: El algoritmo que ejecuta la RdP se implementa como un nico proceso que acta sobre la totalidad de la red. DESCENTRALIZADA: El algoritmo que ejecuta la RdP se distribuye en varios procesos, cada uno de ellos encargado de hacer evolucionar una cierta parte de la red localmente. SINCRONA: La RdP es ejecutada en pasos ("steps"). Se disparan todas las transiciones concurrentemente disparables para un marcado M y no se considera ningn otro disparo hasta haber alcanzado el sucesor de M. ASINCRONA: Cuando el disparo de una transicin ha concluido se actualiza el marcado lo que puede posibilitar nuevos disparos sin espera alguna.

21/12/2004

SED: Tema 4. Redes de Petri.

VERIFICACION EXHAUSTIVA
typedef unsigned char MARCADO[NUMLUG+1] ; MARCADO M ; MARCADO Sig_M = {0,1,1,1,0, ...} ; ... void main (void) { Inicializacion () ; while (TRUE) { memcpy (&M, &Sig_M, sizeof(M)) ; Generacion_Salidas (M) ; Lectura_Entradas (&MA, &MB, ...) ; /* T1 */ if (M[1] >= 1) { if (MA) { Sig_M[1] -= 1 ; Sig_M[14] += 1 ; } } /* T2 */ ... /* T3 */ if ((M[4] >= 1) && (M[3] >= 1)) { if (~WB) { Sig_M[4] -= 1 ; Sig_M[3] -= 1 ; M[3] -= 1 ; /* conflicto? */ Sig_M[6] += 1 ; } } /* T4 */ ... } }

Ejemplo: Carros con va comn


1 aproximacin
1 MA 14 rA WA 4 W
B

2 M
B

rB 15 WB 3 5

rA ,G U G MU

rB U

9 MU 11 l 13 lB L
B B

l A , G 10 WA 12 lA LA

21/12/2004

SED: Tema 4. Redes de Petri.

VERIFICACION EXHAUSTIVA

Caractersticas de la primera aproximacin:


Compilada Se genera un programa cuyo flujo de control reproduce el comportamiento de la RdP Sncrona Actualizacin sncrona del marcado Secuencial Un solo proceso

Problemas
En cada ciclo de tratamiento se verifican todas las transiciones Slo unas pocas estn sensibilizadas Mucho cdigo Cambio en la red => cambio en el cdigo

21/12/2004

SED: Tema 4. Redes de Petri.

VERIFICACION EXHAUSTIVA

Ejemplo: Carros con va comn


Implementacin interpretada
1 MA 14 rA WA 4 WB rA ,G U G MU l A , G 10 WA 12 lA LA LB 13 lB 8 9 MU 11 l B WB 6 7 rB U 3 MB rB 15 WB 5 2

#define NUMLUG 15 #define NUMTRANS 14 ... unsigned char M[NUMLUG+1] = {0,1,1,1,0, ...} ; /*Estructura de datos que codifica la RdP */ ... void main (void) { Inicializacion () ; while (TRUE) { Lectura_Entradas (&MA, &MB, ...); for (T=1;T <= NUMTRANS; T++) { if (Sensibilizada(T)) { if (Condicion(T)) { Actualiza_Marcado(M,T) Accion(T) ;} } } Generacion_Salidas(M); } }

21/12/2004

SED: Tema 4. Redes de Petri.

VERIFICACION EXHAUSTIVA

Caractersticas:
Interpretada Sncrona Secuencial El ciclo de tratamiento es independiente de: la estructura de datos que codifique la red la red concreta que se implemente => cdigo genrico La ocupacin en memoria y prestaciones dependern en gran medida de la estructura de datos utilizada para codificar la RdP

21/12/2004

SED: Tema 4. Redes de Petri.

VERIFICACION EXHAUSTIVA

Matriz de incidencia

p0 t0
1

char C [][] = {{-1, 0, 1}, { 1, 0,-1}, { 2,-1, 0}, { 0, 1,-2}} ; BOOLEAN Sensibilizada (unsigned char T) { BOOLEAN Sensib = TRUE ; int P ;

p 2
3

p 1

t1 p 3
2

for (P=0; P<NUMLUG; P++) { if (C[P][T] < 0) { if (M[P] < - C[P][T]) Sensib = FALSE ; } } void Actualiza_Marcado (MARCADO M, unsigned char T) { return Sensib ; } for (P=0; P<NUMLUG; P++) { M[P] += C[P][T] ; } SED: Tema 4. Redes de Petri. }

t2

21/12/2004

VERIFICACION EXHAUSTIVA

Mejoras sobre la representacin


Disminucin de la ocupacin en memoria C es una matriz con muchos elementos nulos Representacin basada en listas Disminucin del tiempo de ejecucin Representacin con listas => slo se recorren los elementos no nulos C- para la sensibilizacin C- y C+ para la actualizacin del marcado

Manejo de listas Memoria dinmica: basada en punteros rutinas de librera de manejo de memoria dinmica (malloc,free) difcil de poner a punto Memria esttica: basada en vectores mayores prestaciones ms compacto

21/12/2004

SED: Tema 4. Redes de Petri.

VERIFICACION EXHAUSTIVA

Un ejemplo de estructura de datos basada en listas implementadas en memoria esttica

typedef struct { unsigned char Lugar ; unsigned char Peso ; } ARCO ; typedef struct { CONST ARCO *Lugares_Entrada ; CONST ARCO *Lugares_Salida ; void (*Accion) (void); char (*Condicion)(char entrada[]); } T_TRAN ;

void Accion1 (void); char Condiccion1(char entrada[]); ... CONST CONST CONST CONST CONST CONST ARCO ARCO ARCO ARCO ARCO ARCO T1_In[]={{1,1},{0,0}} ; T1_Out[]={{2,1},{3,2},{0,0}} ; T2_In[]={{3,1},{0,0}}; T2_Out[]={{4,1},{0,0}} ; T3_In[]={{2,1},{4,2},{0,0}}; T3_Out[]={{1,1},{0,0}} ;

p1 t
1

/* 0 1 2 3 4 */ static unsigned char M[NLUGARES+1] ={0,1,0,0,0}; static unsigned char Sig_M[NLUGARES+1]={0,1,0,0,0}; CONST T_TRAN TRAN[NUMTRANS+1] = {{T1_In, T1_Out, Accion1, Condiccion1} {T1_In, T1_Out, Accion1, Condiccion1} {...} ...} ;

p p
2

p4 t
2
3

21/12/2004

SED: Tema 4. Redes de Petri.

VERIFICACION EXHAUSTIVA

El algoritmo de interpretacin

void main (void) { Inicializacion () ; while (TRUE) { memcpy (M, Sig_M, sizeof(M)) ; Generacion_Salidas (M) ; (*Lectura_Entradas)(&entrada) ; for(t=1; t<= NUMTRANS; t++){ if(Sensibilizada(Trans[t],M) && (*Trans[t].Condicion)(entrada)){ Retirar_Marcas(Trans[t],Sig_M) ; /* Retirar_Marcas(Trans[t],M) ; Si existen conflictos efectivos */ (*Trans[t].Accion)(); Poner_Marcas(Trans[t],Sig_M); } }/* fin if disparo de una transicion*/ }/* fin for que recorre las transiciones }/*fin bucle interpretacin de la red } 21/12/2004 SED: Tema 4. Redes de Petri.

VERIFICACION EXHAUSTIVA
Manejo estructura
char Sensibilizada(T_TRAN Tran, const unsigned char M[]){ int p; char Sensib = 1; p=0; while((Tran.Lugares_Entrada[p].Lugar !=0) && Sensib==1){ if (M[Tran.Lugares_Entrada[p].Lugar] < Tran.Lugares_Entrada[p].Peso) Sensib = 0; void Retirar_Marcas(T_TRAN Tran, unsigned char M[]) { p++; int p; } return Sensib ; p=0; } while((Tran.Lugares_Entrada[p].Lugar !=0)){ M[Tran.Lugares_Entrada[p].Lugar] -= Tran.Lugares_Entrada[p].Peso; p++; } } void Poner_Marcas(T_TRAN Tran, unsigned char M[]) { ... M[Tran.Lugares_Salida[p].Lugar] += Tran.Lugares_Salida[p].Peso; ... }

21/12/2004

SED: Tema 4. Redes de Petri.

VERIFICACION EXHAUSTIVA

Redes con arcos unitarios (RdP ordinarias)

void Accion1 (void); char Condiccion1(char entrada[]); ... CONST CONST CONST CONST CONST CONST char char char char char char T1_In[]={1,0} ; T1_Out[]={2,3,0} ; T2_In[]={3,0}; T2_Out[]={4,0} ; T3_In[]={2,4,0}; T3_Out[]={1,0} ;

typedef struct { CONST char *Lugares_Entrada ; CONST char *Lugares_Salida ; void (*Accion) (void); char (*Condicion)(char entrada[]); } T_TRAN ;

p1 t1 p3 p2 t2 p4 t3

/* 0 1 2 3 4 */ static unsigned char M[NLUGARES+1] ={0,1,0,0,0}; static unsigned char Sig_M[NLUGARES+1]={0,1,0,0,0}; CONST T_TRAN TRAN[NUMTRANS+1] = {{T1_In, T1_Out, Accion1, Condiccion1} {T1_In, T1_Out, Accion1, Condiccion1} {...} ...} ; 21/12/2004 SED: Tema 4. Redes de Petri.

VERIFICACION EXHAUSTIVA
Manejo estructura
char Sensibilizada(T_TRAN Tran, const unsigned char M[]){ int p; char Sensib = 1; p=0; while((Tran.Lugares_Entrada[p].Lugar !=0) && Sensib==1){ if (M[Tran.Lugares_Entrada[p].Lugar] < 1) Sensib = 0; void Retirar_Marcas(T_TRAN Tran, unsigned char M[]) { p++; int p; } return Sensib ; p=0; }
while((Tran.Lugares_Entrada[p].Lugar !=0)){ M[Tran.Lugares_Entrada[p].Lugar] -- ; p++; } } void Poner_Marcas(T_TRAN Tran, unsigned char M[]) { ... M[Tran.Lugares_Salida[p].Lugar] ++ ; ... }

21/12/2004

SED: Tema 4. Redes de Petri.

VERIFICACION EXHAUSTIVA
p
1

#define #define #define #define

NUMLUG 5 NUMTRANS 4 TRUE 1 FALSE 0


p
2

t1 p

typedef unsigned char BOOLEAN ; typedef unsigned char MARCADO ; typedef unsigned char COLUMNA ; MARCADO M_neg ; MARCADO Sig_M_neg = 0x8F ; unsigned char T ;

t3

/* 01111_111 */

p5 t
4

COLUMNA F[4] = { 0xE0, 0x50, 0x28, 0x98} ; /* 11100, 01010, 00101, 10011 */ COLUMNA E[4] = { 0x80, 0x40, 0x20, 0x80} ; /* 10000, 01000, 00100, 00011 */ BOOLEAN Sensibilizada (unsigned char T, MARCADO M_negado) { return !(E[T-1] & M_negado) ; } void Actualiza_Marcado (unsigned char T, MARCADO *M_negado) { *M_negado ^= F[T-1] ; }

21/12/2004

SED: Tema 4. Redes de Petri.

IMP. DIRIGIDA POR EL MARCADO


Resolucin del problema de la verificacin exhaustiva de la sensibilizacin de transiciones


VERIFICACION SELECTIVA Slo son tratadas aquellas transiciones con posibilidad de estar sensibilizadas IMPLEMENTACION DIRIGIDA POR EL MARCADO

Mtodo de los lugares representantes marcados

Cada transicin es representada por uno de sus lugares de entrada Slo aquellas transiciones cuyo lugar representante est marcado se consideran candidatas al disparo Un lugar de entrada a una transicin y que no sea su representante se denomina lugar de sincronizacin Fase previa: obtencin del conjunto de lugares representantes y de sincronizacin SED: Tema 4. Redes de Petri. 21/12/2004

IMP. DIRIGIDA POR EL MARCADO


Eleccin de lugares representantes


Representantes esenciales Particin representantes/sincronizacin?
r1 B r2 D

p1

p2

t1 p3 t4

t2 p4 t5

t3 p5 t6

l1 A

l2 C

M
21/12/2004 SED: Tema 4. Redes de Petri.

IMP. DIRIGIDA POR EL MARCADO


Una primera aproximacin (suponiendo RdP ordinaria)


Escrutacin del vector de marcado Interpretada: ED con la estructura / Vector de marcado
typedef unsigned char ARCO; /* Lugar origen o destino del ARCO */ typedef struct{ CONST unsigned char Trans ; /* 0 si no mas transiciones */ CONST ARCO *Lugares_Sincronizacion ; CONST ARCO *Lugares_Salida; void (*Accion) (void); char (*Condiccion)(char entrada[]); }T_TRAN; typedef T_TRAN *T_REPRESENTANTE ;

unsigned char M[NLUGARES+1]={0,1,0,0,1,1}; unsigned char Sig_M[NLUGARES+1]={0,1,0,0,1,1}; 21/12/2004 SED: Tema 4. Redes de Petri.

IMP. DIRIGIDA POR EL MARCADO


Un ejemplo

p4

p1

p5

void Accion1 (void); char Condiccion1(char entrada[]); ...

t1
CONST ARCO T1_Lugares_Sinc[] ={4,0}; CONST ARCO T1_Lugares_Salida[]={2,0}; CONST ARCO T2_Lugares_Sinc[] ={5,0}; CONST ARCO T2_Lugares_Salida[]={3,0}; CONST T_TRAN LR1[3] = {{1, T1_Lugares_Sinc, T1_Lugares_Salida, Accion1, Condiccion1}, {2, T2_Lugares_Sinc, T2_Lugares_Salida, Accion2, Condiccion2}, {0,...}}; ... CONST T_TRAN LR2[2] = ... ; ... CONST T_TRAN LR3[2] = ... ; CONST T_REPRESENTANTE Lug[NREPRESENTANTES+1] = {Null, LR1, LR2, LR3} ; 21/12/2004 SED: Tema 4. Redes de Petri.

t2 p2 p3

t3

t4

IMP. DIRIGIDA POR EL MARCADO


El intrprete

void Interpretar_RdP(const T_REPRESENTANTE Lug[], unsigned char M[],unsigned char Sig_M[], int nLugares, int nRepresentantes, void (*Leer_Entrada)(char entrada[])) { T_TRAN T ;... unsigned char p ; unsigned char i ; while(1){ memcpy (M, Sig_M, nLugares+1) ; (*Leer_Entrada)(entrada); for(p=1; p<=nRepresentantes; p++){ if (M[p] != 0) { i = 0 ; T = Lug[p][i] ; while (T.Trans != 0) { if (Sensibilizada(T,M)&&(*T.Condiccion)(entrada)){ Retirar_Marcas(T,Sig_M) ; Sig_M[p] -- ; Retirar_Marcas(T,M) ; M[p] -- ; (*T.Accion)(); Poner_Marcas(T,Sig_M); } i ++ ; T = Lug[p][i] ; } } } } }

21/12/2004

SED: Tema 4. Redes de Petri.

IMP. DIRIGIDA POR EL MARCADO


Optimizaciones al mtodo
Redes de Petri binarias Marcado variables booleanas Aumento eficiencia Disminucin ocupacin en memoria Particin de los lugares en Representantes y de Sincronizacin Representacin por separado No duplicidad Lista de lugares representantes marcados Se evita recorrer el vector de marcado (pocos lugares marcados)

21/12/2004

SED: Tema 4. Redes de Petri.

IMP. DIRIGIDA POR EL MARCADO


... while(1){ memcpy (M_Sinc, Sig_M_Sinc, nLugaresSinc+1) ; (*Leer_Entrada)(entrada); while (Hay_Reprentante(P_Tratamiento)){ P = Desapila (P_Tratamiento) ; i = 0 ; T = Lug[p][i] ; while (T.Trans != 0) { if (Sensibilizada(T,M_Sinc) && (*T.Condiccion)(entrada)){ Retirar_Marcas(T,Sig_M_Sinc); Retirar_Marcas(T,M_Sinc); (*T.Accion)(); Poner_Marcas(...); } else Apilar (P_Formacion, P) ; i ++ ; T = Lug[p][i] ; } } Intercambia (P_Tratamiento, P_Formacion) ; } 21/12/2004 SED: Tema 4. Redes de Petri.

p4

p1

p5

t1 p2

t2 p3

t3

t4

p4 true p5 true (M_Sinc)

1 (P_Tratamiento)