Stateflow es una librera (toolbox) de Matlab que permite
modelar sistemas de
eventos
discretos dentro de Simulink, utilizando cartas de
estado
(statecharts). Las cartas de estado fueron introducidas por David
Harel (Harel, 1987) y son una generalización de las
maquinas de estados.
La librera de Stateflow posee un único elemento o
bloque, denominado Chart, que sirve para representar un sistema de
eventos discretos. El bloque Chart se puede conectar con otros
bloques de Simulink, de tiempo
continuo o discreto, para formar modelos de
sistemas híbridos que pueden ser muy útiles en la
investigación del comportamiento
de tales sistemas mediante simulación.
Una carta de estados
(statechart) es un grafico formado por elementos gráficos sobre los que van escritos ciertos
elementos de texto escritos
en un lenguaje
especial. Entre ellos, hay unos elementos de texto especiales que
son los datos y los
eventos. La carta es como
la hoja de papel en la que se representan los elementos. Cada
carta representa un sistema de eventos discretos y constituye un
bloque de Simulink que puede conectarse con otras cartas o con
otros bloques de Simulink.
Los elementos gráficos de son
- Estados
- Transiciones
- Uniones
Mientras que los elementos de texto son
- Datos
- Eventos
Los estados tienen forma de rectángulo con los
bordes redondeados y representan estados (a veces llamados modos
o fases) del sistema de eventos discretos. No debemos confundir
estos estados con los estados del clásico modelo de
estado de un sistema de control. Los
estados aquí considerados representan los modos o formas
de evolución del sistema al reaccionar frente
a los eventos.
Junto a la esquina superior izquierda, cada
rectángulo lleva un texto con un nombre que
idéntica al estado. Tras el nombre del estado y el
separador opcional /", pueden aparecer otros textos indicando
las acciones que
llevara a cabo el sistema cuando este en ese estado. La sintaxis
de Stateflow permite especificar el instante en que se iniciara
la acción
y la duración de esta:
- entry: la acción se inicia al entrar en
este estado. - exit: la acción se inicia al salir de
este estado.
during: la acción se inicia al entrar en
este estado y permanece activa durante el tiempo que dura
el
estado.
on event e : La acción se inicia si,
estando en este estado, se produce el evento e. Posibles
acciones son cambiar el valore de una salida o efectuar una
llamada a una función de
Matlab.
Un estado puede contener otros estados, o subestados,
dentro de s. Entonces dicho estado se llama estado padre, o
súper estado, y los subestados se llaman estados hijos.
Hay dos posibles formas de descomposición de un estado
(padre) en subestados (hijos). Un estado (padre) tiene
descomposición AND si los estados hijos se activan
simultáneamente al activarse el estado padre y entonces
los estados hijos se marcan con línea
discontinua.
Un estado (padre) tiene descomposición OR
(exclusiva) si únicamente puede estar activo uno de los
estados hijos al activarse el estado padre y entonces los estados
hijos se marcan Con línea continua.
Las transiciones tienen forma de echa y representan las
transiciones o saltos entre estados, Asociados a eventos, que se
producen en el sistema de eventos discretos. Cada
transición representa un evento e del sistema y se dibuja
como una echa que va desde el borde de Un estado S1 hasta el
borde de otro estado S2. Sí el sistema esta en el estado
S1 y sé Produce el evento e, entonces el sistema pasa al
estado S2. El disparo de una transición Puede implicar la
ejecución de una o más acciones.
Una transición especial es la llamada
transición por defecto (default-transition), que sirve
para señalar el estado inicial del sistema es decir, el
primer estado en el que entrara él Sistema al iniciar su
evolución, y también el estado hijo inicial dentro
de un estado padre.
Se reconoce por su forma ya que en el extremo opuesto a
la derecha lleva un pequeño círculo
Negro.
Cada transición puede tener un texto escrito
junto a ella que indica el evento que ha de producirse para que
se dispare la transición así como las acciones que
entonces el sistema Emprenderá. Este texto se divide en
tres partes, todas ellas opcionales:
e (en donde e es el nombre de un evento): la
transición se dispara al producirse el evento
e en el sistema. Si no hay nombre de evento
entonces la transición se disparara ante Cualquier evento
del sistema.
[C] (en donde c es una condición): la
transición se dispara sí la condición c
(expresión booleana) es verdadera y se produce el evento
e. Si esta parte no existe, se asume que C es cierta. Si la parte
e del texto no existe, se disparara, bajo la misma
condición, Siempre y cuando se produzca un evento
cualquiera en el sistema.
Fag (en donde a es una acción): al
producirse transición el sistema lleva a cabo la
acción
a. Si la transición no lleva ningún
texto, entonces se disparara automáticamente, siempre y
Cuando se produzca un evento cualquiera en el sistema.
Las uniones tienen forma de pequeño circulo. Hay
dos tipos de uniones: uniones conectivas (connective junctions) y
uniones de historia (history
junctions).
Las uniones conectivas son puntos de bifurcación
de la carta de estados y representan Puntos de decisión
del sistema de eventos discretos. Permiten conectar una
transición de Entrada con varias transiciones de salida.
Su empleo puede a
veces simplicar la carta de estados y hacer que el código
generado sea más eficiente.
Al entrar en una unión conectiva, el sistema, a
través de una condición, selecciona una de las
transiciones de salida para su evolución.
Las uniones de tipo historia se utilizan en estados que
han sido divididos por una
descomposición OR. Si en el estado padre se pone
el símbolo H entonces cada vez que se active el estado
padre, el primer estado que se activara será el estado
hijo que estuvo activo por última vez.
- Entrada de Simulink
CREACION DE UN MODELO CON STATEFLOW {SIMULINK
}
- Salida de Simulink
- Local
- Constante
- Temporal
- Workspace
Los datos declarados como entrada o salida de Simulink
generan automáticamente una entrada o una salida en el
bloque Chart creado por Stateflow en Simulink. Los de los tipos
local, constante y temporal pueden definirse para toda la carta o
dentro de un estado individual. Los datos temporales son solo
validos mientras el estado padre sé esta ejecutando y son
reinicializados cada vez que este se activa. El tipo workspace es
una construcción especial que permite utilizar
el entorno de trabajo
(workspace) de Matlab para compartir datos a través de
toda la simulación. Los datos por defecto, se almacenan en
memoria en
formato double de C pero se puede cambiar a otros formatos. Cada
dato tiene asociado un valor inicial
y un intervalo de posibles valores.
Estos elementos representan los eventos del sistema.
Pueden ser de los tipos:
- Entrada de Simulink
- Salida de Simulink
- Local
Para los eventos que son entradas o salidas de Simulink,
Stateflow crea automáticamente un único puerto de
entrada{salida de eventos en el bloque Chart de Simulink, de
forma que todos los eventos entran o salen, formando un vector de
eventos, por el mismo puerto.
Cada evento lleva asociado un índice que requiere
la posición del evento en el vector. La forma de producir
un evento en Simulink para que entre en el bloque Chart es a
través de cambio brusco
(ancho) de alguna señal. Al declarar el evento en
Stateflow, se puede elegir entre:
- Flanco de subida
- Flanco de bajada
- Flanco indiferente
Creación de un modelo con Stateflow
Simulink
Tras arrancar el programa Matlab,
creamos un modelo nuevo (new-model) de Simulink y colocamos en el
mismo, con el ratón, el bloque Chart de
Stateflow.
Con el editor grafico se pueden crear cartas Stateflow,
de modo interactivo, simplemente picando con el ratón en
cada elemento y arrastrándolo a la ventana de dibujo.
Una vez colocados varios estados, podemos crear
transiciones picando con el ratón en un estado y
arrastrándolo hasta otro estado. Se etiquetan los estados
y las transiciones indicando las acciones que van a ocurrir
durante la ejecución y bajo que condiciones se
harán las transiciones. Finalmente se añade el
historial, uniones, y estados en paralelo para detallar las
operaciones
del modelo.
Se pueden utilizar sub-cartas (una carta dentro de otra
carta) para dotar de jerarquía al diseño.
Se permite crear transiciones entre objetos que residen en
diferentes sub-cartas al mismo nivel o a diferentes niveles en la
carta superior. Las sub-cartas permiten reducir una carta
complicada a un conjunto de diagramas
organizados jerárquicamente. Con ello se consigue que la
carta sea mas fácil de entender y de mantener sin cambiar
para nada su semántica.
Los pasos a seguir para una aplicación completa
son:
- Crear la carta Stateflow
- Utilizar el Explorer de Stateflow
- Definir un interfase de bloques de
Stateflow - Ejecutar la simulación
- Generar el código
La generación de código depende de la
maquina en donde se vaya a implementar la aplicación y no
se hace hasta la ultima fase del diseño. El código
generado por defecto es ANSI C pero existen programas que a
partir del modelo de Stateflow generan código para otros
lenguajes. Entre ellos cabe citar el programa sf2vhld, que es un
traductor de Stateflow a VHLD, y el programa sf2plc que genera
código para programar algunos autómatas
programables.
Un sistema de seguridad muy
antiguo del ferrocarril son las barreras que se colocan en los
cruces entre la va férrea y las carreteras o caminos. Como
todos sabemos, el funcionamiento de una de estas barreras como la
de la figura 2 es muy sencillo: se abre y se cierra para evitar
que los coches choquen con los trenes. El problema que se plantea
es diseñar un sistema de control automático que sea
capaz de cerrar la barrera cuando se aproxime un tren y de
cerrarla cuando el tren haya pasado.
Supondremos en principio que la va férrea es de
un solo sentido.
Estamos ante un sistema de eventos discretos ya que la
presencia y la ausencia del tren son eventos que pueden
aprovecharse para abrir y cerrar la barrera.
Para medir desplazamientos consideraremos una recta, eje
x, dispuesta a lo largo de la va y con origen 0 en el punto en
que esta colocada la barrera, siendo el sentido positivo el de
salida del tren.
Los componentes necesarios para montar el sistema pueden
ser: una barrera accionada por un motor-reductor,
dos sensores de
presencia s1 y s2, un sistema digital y relees y elementos
auxiliares de conexión.
Cada sensor de presencia se instalara junto al final de
la va de tal forma que al pasar el tren emita una señal.
Colocaremos el sensor s1 en un punto x1 en el sentido de llegada
del tren y alejado lo suficiente del cruce como para que de
tiempo a bajar la barrera. El sensor s2 será colocado en
otro punto x2 en el sentido de partida del tren, en otro lugar
próximo al cruce. De este modo podremos utilizar las
señales
de los sensores como eventos indicativos de la presencia del tren
dentro del intervalo [x1; x2].
La operación de la barrera debe ser: cuando el
sensor s1 se activa, la barrera debe
cerrarse; cuando el sensor s2 se activa la barrera puede
abrirse.
Para realizar el modelo del sistema de control de
eventos discretos vamos a emplear las posibilidades de
división en paralelo (paralelismo) y de trasmisión
de eventos de que disponen las cartas de estado.
Los interruptores Sw1 y Sw2 indicados en la figura 3 son
elementos de tipo Manual
Switch de Simulink y sirven de modelos de los sensores
de llegada y de salida del tren.
Una transición de 0 a 1 del interruptor Sw1
(ancho de subida) indicara que llega el tren y una
transición de 1 a 0 del interruptor Sw2 (ancho de bajada)
indicara que el tren se ha ido.
La carta de estados de Stateflow se compone de dos
estados que evolucionan en paralelo, denominados Tren y Barrera,
con dos hijos cada uno. El estado Barrera representa el estado de
la barrera y tiene dos hijos denominados Abrir y Cerrar. El
estado Tren representa el estado del tren y tiene dos hijos
denominados Fuera y Dentro.
La carta de estados tiene como entrada (multiplexada)
las señales generadas por los interruptores Sw1 y Sw2. En
el estado Tren, un ancho de subida en la entrada de Sw1 es el
evento preciso para disparar la transición s1 mientras que
un ancho de bajada la entrada de Sw2 lo es para la s2. A su vez
las transiciones s1 y s2 transmiten eventos
locales al estado Barrera para disparar las transiciones
e1 y e2.
Supondremos que inicialmente el tren esta lejos y la
barrera esta abierta. Por tanto, los estados iniciales del
sistema son Fuera y Abrir.
La proximidad de un tren se simula accionando de 0 a 1
el interruptor Sw1. Entonces el estado Tren cambiara de Fuera a
Dentro y antes de que se termine la transición s1, el
evento local e1 será transmitido. El evento e1 accionara
entonces la transición dentro del estado Barrera de Abrir
a Cerrar.
- Si la simulación va a ser larga se puede
adoptar un tiempo de simulación "infinito" Poniendo el
parámetro de simulación Stop time =
inf. - Para que se inicie la simulación el sistema
necesita un primer evento, como de
arranque. Esto en ocasiones puede resultar molesto
porque suele requerir que usuario produzca ese evento inicial de
forma no muy ortodoxa. Esto puede evitarse marcando X en la
casilla con el texto Execute (enter) Chart At Initialization"
que aparece en el menú File ! Chart Properties de la
ventana Chart de Stateflow.
POR :
RIGOBERTO HERNANDO OLARTE
ING Mecatronico.
BUCARAMANGA – SANTANDER –
COLOMBIA
Renberto Pérez Urea
Juan Manuel Bayona