You are on page 1of 26

Statecharts

Andrs Djordjalian <andres@indicart.com.ar>


Seminario de Sistemas Embebidos
Facultad de Ingeniera de la U.B.A.
15:43

1 de 26

Statecharts
Los diagramas de estado son particularmente tiles
para modelar sistemas embebidos porque estos
suelen ser reactivos
O sea, responden a eventos externos que no necesariamente
tienen orden o periodicidad

En 1987 Harel propone Statecharts, una evolucin


del lenguaje clsico de los diagramas de estados
D. Harel, Statecharts: A visual formalism for complex systems,
Science of Computer Programming, vol. 8 num. 3, pp. 231274,
junio de 1987

Para modelar sistemas medianamente complejos, los


Statecharts son ms compactos y claros que los
diagramas de estados clsicos
Principalmente porque incluyen jerarquas y concurrencia

Forman parte del UML y se usan extensivamente en


2 de 26
15:43 herramientas MDD para embebidos

Bibliografa recomendada
M. Samek, Practical UML
Statecharts in C/C++,
Captulo 2
Tambin est disponible
como artculo en lnea de
EE Times
Ver en nuestra pgina de
material de estudio

15:43

3 de 26

Para qu?
Samek arranca el
captulo con un
ejemplo: la
calculadora que
vena con Visual
Basic, que daba
error si uno tecleaba cosas como 2, -, -, -, =
Argumenta que, de haberla modelado con una
mquina de estados antes de sentarse a programar,
se podan haber evitado tantos errores
Al final del captulo disea ese modelo
usando bastante de la semntica extendida que provee
Statecharts por sobre un diagrama de estados clsico

15:43

4 de 26

Estados y transiciones
Reset

(Evento de) trigger


Accin
(o sea, entrada)
(o sea, salida)

Estados

Como el diagrama de estados de una mquina de


Mealy, pero usa rectngulos con esquinas
redondeadas para los estados y un crculo lleno para
el reset
15:43

Tambin pueden modelar mquinas de Moore, lo vemos ms


adelante
5 de 26

Mquinas de estados extendidas

Extendida debido al uso de la variable key_count


Los pseudoestados de decisin son otro agregado a la
semntica clsica de las mquinas de estado que usa
Statecharts
3 diapositivas atrs dijimos ms compactos y claros

15:43

6 de 26

Jerarquas

Lo que hicimos fue modelar el comportamiento


dentro de esperando con una mquina de estados
Este tipo de jerarquizacin permite, en muchos
casos, economizar transiciones, entre otras
simplificaciones
que clarifican el diagrama y reducen la cantidad de errores en su
edicin
15:43

7 de 26

Jerarquas

Notar que, en el ejemplo, la transicin que dispara


con puls empezar sale de ingresando tiempo
O sea que si el sistema est en idle, pulsar empezar no
cambia el estado
Al menos en lo que respecta al alcance de este diagrama

El comportamiento en ingresando tiempo


probablemente tambin sea til modelarlo con un
diagrama de estados
15:43

Podemos ponerlo all adentro o en hoja separada

8 de 26

Actividad

En mi microondas, si no se ingres un tiempo y se


presiona empezar, arranca con tiempo = 30s.
Cmo podemos modificar el diagrama de arriba para
incorporar ese comportamiento?

Pueden suponer que existe una variable tiempo que es


modificada en ingresando tiempo y tomada por el timer cuando
este arranca

Evalen diferentes maneras de resolverlo

Pueden usar sintaxis de C, separando sentencias con ;, y


poner acciones en las transiciones iniciales (o sea, resets)

15:43

Pero triggers en los resets no, por qu?

9 de 26

Concurrencia

Las dos sub-mquinas son independientes


Salvo la clusula en esperando en los triggers de abajo

Por eso, a la concurrencia comnmente se le dice ortogonalidad


15:43

10 de 26

Acciones Entry y Exit

15:43

11 de 26

Transiciones internas

Notar que son similares a transiciones que empiezan y terminan


en el mismo estado, salvo que no se ejecutan las acciones
entry y exit
A calentar normalmente se le dice actividad porque es un
tanto constante

15:43

12 de 26

Transiciones locales y externas

En las externas se
ejecutan la acciones
exit (porque sale) y
entry (porque
vuelve a entrar), en las
locales no
15:43

13 de 26

Pseudoestados
Son lugares que parecen estados pero no lo son, porque el
sistema no puede estar en ellos

Sirven para simplificar el diagrama e incorporarle algunas funciones

Tipos:

Inicial (reset)
Se indican con un crculo lleno negro

Condicin (o choice u opcin)

Se indican con un diamante, un circulo vaco o uno que contiene una C


Lo usamos en la Diapositiva 6

Junturas

Se indican con un punto negro


Sirven para juntar o bifurcar transiciones cuando tienen partes en comn

Historia

Se indican con un crculo que contiene una H


Si se entra en una transicin que termina en este pseudoestado, el prximo
estado pasa a ser el ltimo estado que tena la (sub) mquina en cuestin

Fork / Join

Misma notacin y propsito que las transiciones de las redes de Petri


Con un fork se abre una transicin para que pueda terminar en estados de
mquinas concurrentes. Join hace lo contrario.

Final

Se indica con un crculo que contiene una T


15:43

14 de 26

Ejemplo

Tomado de B.P. Douglass,


UML Statecharts,
<http://citeseerx.ist.psu.
edu/viewdoc/summary?d
oi=10.1.1.104.3629>
15:43

15 de 26

Transiciones, con ms detalle


Forma general del rtulo de una transicin:
nombre_del_evento(parmetros) [condicin] / acciones

Todos los campos son optativos


Las acciones pueden ser salidas hacia el exterior, o eventos que
otra parte del modelo usa como trigger

Tipos de eventos:
Seal

La recepcin de una seal (asincrnica)


Es el tipo de evento ms comn

Tiempo

Se cumpli cierto tiempo desde la llegada al estado


Se escribe (ej.) after 200ms o tambin tm(200ms)

Llamada

Disparado por otra parte del sistema sincrnicamente (o sea, esa


otra parte del sistema espera hasta que la llamada es atendida)

Cambio

Cierta expresin condicional pasa a ser cierta


Se indica con when seguido de la expresin
15:43

16 de 26

Transiciones, con ms detalle


Forma general del rtulo de una transicin:
nombre_del_evento(parmetros) [condicin] / acciones

La condicin

La transicin se dispara slo si esa expresin es verdadera


Puede incluir (ej.) in(nombre_de_un_estado), para
condicionar la transicin a que una mquina concurrente con
esta est en cierto estado
como vimos en varios de los ejemplos anteriores

Ejemplos

15:43

evCaenPinos / GenerarRuido()
evLlegBola / cantBolas++;print(Lleg)
evCaenPinos(n)[n>=10] / MarcarChuza()
/ Inicializar()
[cantidad % 10 == 0]
after 10ms / InformarTimeout();AbrirPuerta()
when cantidad % 10 == 0 / foo++;bar++
Puls_Empezar[in(Puerta_Cerrada)] / Arrancar
17 de 26

Preguntas

15:43

Actividad

18 de 26

Statechart + requisitos de tiempo


real

Notas con requermientos


de temporizacin y de
calidad de servicio (quality
of service o QoS)

B.P.Douglass; Capturing Real-Time


Requirements
<http://www.embedded.com/story/OEG20011
016S0126>

15:43

19 de 26

Actividades

Dibujar el statechart de un dispenser de caf y leche:

El dispenser puede estar desactivado (por ejemplo para ser llenado) o


activado, para lo cual se utiliza un pulsador ON/OFF.
Estando activado, se sirve caf manteniendo presionando un pulsador
CAF y se detiene ese chorro soltando el pulsador. Lo mismo ocurre con
la leche y su pulsador LECHE.
Hacer dos versiones del statechart: una en donde slo pueda servirse una
de las bebidas a la vez, otra en donde las dos bebidas puedan servirse
simultneamente.

Dibujar el statechart de un calefactor con termostato:


El dispositivo cuenta con los siguientes pulsadores: ON/OFF, CALENTAR,
ESPERAR, TERMOSTATO, TEMP+, TEMP-.
Con ON/OFF se enciende y apaga. Al ser encendido, entra en un estado
espera.
Cuando el usuario presiona el pulsador CALENTAR, el calefactor calienta.
Cuando presiona TERMOSTATO, entra en un estado en donde calienta
slo si la temperatura del ambiente, medida mediante un sensor, es menor
que un valor prefijado regulable con los pulsadores TEMP+ y TEMP-.
En el diagrama anterior, agregar otro modo de operacin que se activa al
presionar un pulsador SLEEP. En este nuevo modo, el calefactor calienta
durante 10 minutos y vuelve al estado espera.

15:43

20 de 26

Cmo codificar un Statechart?


Una posibilidad es crear un gran switch case,
donde cada estado corresponda a un case

15:43

21 de 26

Cmo codificar un Statechart?

15:43

B.P. Douglass, State Machines and Statecharts,


<http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.40.1095> 22 de 26

Cmo codificar un Statechart?


El programa puede ser un ciclo infinito conteniendo
ese switch case
Para implementar:

Concurrencia: varios switch case en secuencia


Jerarquas: switch case anidados

El problema es que eso va a ocupar al 100% al procesador por


ms que no tenga nada real que hacer porque an no llegan
estmulos
En ciencias de la computacin, esta condicin se llama busy wait
Igualmente, para ciertas aplicaciones es una solucin aceptable
En otras, el consumo que esto conlleva no lo es

Si el procesador tiene otro cdigo de qu ocuparse


tambin, puede ir despus del switch case,
dentro del ciclo infinito
Esto modera el problema del busy wait, pero puede atentar
contra el cumplimiento de requerimientos de tiempo real
15:43

23 de 26

Idea
Poner al procesador en modo sleep despus del
switch case?
Sleep es un modo de bajo consumo donde el microcontrolador
no procesa instrucciones pero s funcionan sus perifricos y es
capaz de detectar interrupciones
Los microcontroladores normalmente ofrecen varios de estos
modos, que se diferencian por las funciones que permanecen
activadas y el retardo en volver al modo de ejecucin normal

Si se puede, se hace que del modo sleep salga al detectar el


estmulo que acta de trigger en la mquina de estados
Si no se puede, consideremos ponerlo x tiempo (usando un timer),
siempre que no comprometa los requerimientos de tiempo real

15:43

24 de 26

Maneras ms avanzadas de
codificarlo
En lugar de case para cada estado (hardcodeado),
poner los datos del Statechart en un array y usar
una librera
Tengan en cuenta que se pueden guardar punteros a funciones
que contengan las condiciones y las acciones
Si el switch case quedaba intrincado, esto puede
simplificarlo
Adems, la librera puede proveer funciones avanzadas para
resolver el tema del busy wait
El libro de Samek presenta una librera as

Programar el Statechart bajo un RTOS


Usar una herramienta MDD

Como IBM Rational Rhapsody o el Real-Time Workshop para


Simulink de Mathworks

15:43

Funcionan con varios RTOS populares


25 de 26

Conclusiones
Los Statecharts son un lenguaje de creciente
popularidad en embebidos

Extienden el lenguaje clsico de las mquinas de estados, en


una forma que resulta muy prctica para el modelado de
software

Existen diferentes maneras de implementarlos

Cada una tiene pros y contras en cuanto a su complejidad,


consumo, tiempo de respuesta y necesidad de software de base

Sirven para detallar las ideas antes de


implementarlas, lo que nos sirve para:

Ordenar las ideas, ponernos de acuerdo con colegas y


documentar
Ejecutarlos (o sea, simularlos) para corregir errores y explorar
alternativas
Traducirlos automticamente a C u otro lenguaje de
programacin, si contamos con una herramienta MDD apropiada
Dentro de estas, normalmente se puede elegir la versin de C, de
las libreras y de RTOS (si usamos uno); y se puede trabajar sobre
el cdigo resultante

15:43

26 de 26