Descargar

Toolbox Stateflow

Enviado por hernando299


    1. Stateflow
    2. Elementos gráficos
    3. Estados
    4. Uniones
    5. Eventos
    6. Ejemplo
    7. Observaciones

    Stateflow

    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.

    Elementos gráficos

    Los elementos gráficos de son

    • Estados
    • Transiciones
    • Uniones

    Mientras que los elementos de texto son

    • Datos
    • Eventos

    Estados

    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.

    Transiciones

    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.

    Uniones

    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.

    Eventos

    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.

    Ejemplo

    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.

    Observaciones

    • 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