En mi caso modelaré el funcionamiento básico de un cajero automático. Para ello tengo que definir los estádos de la máquina y las transiciones entre estados.
Para poder definir los estados y transiciones definire en palabras simples como actua la máquina:
- El cajero se encuentra en espera de que se introduzca una tarjeta.
- Una vez introducida se procede a pedir el NIP.
- Si el NIP es incorrecto se le vuelve a pedir, de ser correcto entonces continua.
- La siguiente es la pantalla de transacciones donde se elige el tipo de transacción (efectivo, cheques, etc).
- Se procede a la selección de cantidad para la transacción.
- Se realiza la transaccion en la que se entrega el efectivo, el tiquet, etc.
- Se pregunta al usuario si desea realizar otra transacción, de ser así se regresa a la pantalla de selección de tipo de transacción, de no ser así se regresa al estado de espera.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from snakes.nets import * | |
from snakes.data import * | |
import snakes.plugins | |
snakes.plugins.load('gv', 'snakes.nets', 'nets') | |
from nets import * | |
cajero = PetriNet("Cajero") | |
# Estados del cajero | |
cajero.add_place(Place('STB', [0])) | |
cajero.add_place(Place('P NIP', [1])) | |
cajero.add_place(Place('NIP Correcto', [2])) | |
cajero.add_place(Place('NIP Incorrecto', [3])) | |
cajero.add_place(Place('P Transaccion', [4])) | |
cajero.add_place(Place('Donacion', [5])) | |
cajero.add_place(Place('P Cantidad', [6])) | |
cajero.add_place(Place('Transaccion', [7])) | |
cajero.add_place(Place('Nueva Transaccion', [8])) | |
# Transiciones del Cajero | |
cajero.add_transition(Transition('Lectura')) | |
cajero.add_transition(Transition('Val NIP')) | |
cajero.add_transition(Transition('NIP Mal')) | |
cajero.add_transition(Transition('NIP Bien')) | |
cajero.add_transition(Transition('Donar?')) | |
cajero.add_transition(Transition('Tipo Trans')) | |
cajero.add_transition(Transition('Selec Cantidad')) | |
cajero.add_transition(Transition('Otra Trans?')) | |
cajero.add_input('STB', 'Lectura', Variable('Tarjeta')) # Se introduce una tarjeta en modo espera. | |
cajero.add_output('P NIP', 'Lectura', Expression('Tarjea == True')) # Se lee los datos | |
cajero.add_input('P NIP', 'Val NIP', Variable('NIP')) # Se introduce un NIP | |
cajero.add_output('NIP Correcto','Val NIP',Expression('NIP == NIP_Cuenta')) # El NIP es correcto | |
cajero.add_output('NIP Incorrecto','Val NIP',Expression('NIP == Error')) # El NIP no es correcto | |
cajero.add_input('NIP Correcto', 'NIP Bien', Variable('NIP_Cuenta')) # Si es correcto continua | |
cajero.add_input('NIP Incorrecto', 'NIP Mal', Variable('NIP')) # Si no lo es regresa | |
cajero.add_output('P NIP','NIP Mal',Expression('Tarjea == True')) # Se validan de nuevo los datos si esta mal el NIP | |
cajero.add_output('P Transaccion','NIP Bien',Expression('NIP_Cuenta == Trans')) # Pantalla de Transacciones si esta bien el NIP | |
cajero.add_input('P Transaccion','Donar?',Variable('Donar')) # Desea donar? | |
cajero.add_output('Donacion','Donar?',Expression('Donar == True')) # Cuanto desea donar? | |
cajero.add_input('Donacion','Tipo Trans',Variable('TipoTrans')) # Continua con la Transaccion | |
cajero.add_input('P Transaccion','Tipo Trans',Variable('TipoTrans')) # Continua con la Transaccion | |
cajero.add_output('P Cantidad', 'Tipo Trans', Expression('TipoTrans == SelecTipoTrans'))# Se elige el tipo de Transaccion | |
cajero.add_input('P Cantidad','Selec Cantidad',Variable('Monto')) # Se procede a seleccionar el monto | |
cajero.add_input('Nueva Transaccion','Tipo Trans',Variable('TipoTrans')) # Nueva Transaccion | |
cajero.add_output('Transaccion', 'Selec Cantidad', Expression('Monto == SelecMonto')) # Se selecciona el monto y continua | |
cajero.add_input('Transaccion','Otra Trans?',Variable('OtraTrans')) # Desea otra transaccion? | |
cajero.add_output('Nueva Transaccion', 'Otra Trans?', Expression('OtraTrans == True')) # Se ingresa una nueva Transaccion | |
cajero.add_output('STB', 'Otra Trans?', Expression('OtraTrans == False')) # Entra en modo espera | |
cajero.draw('cajero.png') |
Pues, no tiene nada paralelo, pero está bien el componente que hiciste. Te pongo 7 pts.
ResponderBorrarAlguien. Hace la red de petri para un cajero automático
ResponderBorrar