You are on page 1of 16

Disseny de sistemes encastats:

modelatge,
simulació i
introducció a la implementació
Lluís Ribas Xirgo
102791 Sistemes Encastats
Universitat Autònoma de Barcelona
Màquines d’estat com a controladors
• Controlador
– Sistema controlat (caixa negra)
– Sistema de control

Controlador

Sistema que es controla


Màquines d’estat com a controladors
• Sistema de control amb màquines d’estat
– Entrades:
Estat del sistema controlat
– Sortides:
Accions sobre el sistema controlat
• Mètode de control
– Portar el sistema controlat a un estat desitjat
 portar al controlador a un estat desitjat
Màquines d’estat com a controladors
• Cas d’exemple
OBRIR/TANCAR
Sistema Controlador
que es
controla
PLE/NO_PLE
TANCADA PLE
/ TANCAR

NO_PLE

PLE
OBERTA
/ OBRIR

NO_PLE

http://shades.uab.cat/ribas/edu/books/FC
Problema 1: Especificació
• Sistema ESTACIÓ DE SERVEI %
d’avís { APAGAR_TIMBRE (0) ,
ACTIVAR_TIMBRE (1) }
d’entrada
de vehicles vehicle

en una
estació de
pols segon pols,
servei pols de pas
per banda d’activació
del timbre
sense
efecte

timbre

vehicle

clk

Temps

http://shades.uab.cat/ribas/edu/books/FC
Problema 1: Model
• Màquina d’estats finits del controlador de
l’alarma pols de pas
per banda
pols
d’activació
del timbre
segon pols,
sense
efecte

timbre

VEHICLE vehicle

clk
estat
/ acció acció = 0 (APAGAR_TIMBRE) Temps
acció = 1 (ACTIVAR_TIMBRE)

INACTIU 1 POLS_1 0 ACTIU x ESPERA 1 POLS_2


/0 /0 /1 /0 /0
0 1 0 1

http://shades.uab.cat/ribas/edu/books/FC
Controladors en hardware
• Arquitectura HW d’una FSM

m m n n
- Entrades Estat A
m–1 SORTIDES
- ESTAT SEGÜENT R

m–2 n k
-
-
load E clear
1 reset k–1
m–3 REG (ESTAT)
- -
clk
S
m–4 k–2
- n -

http://shades.uab.cat/ribas/edu/books/FC
Problema 1: Descripció HW
• Implementació amb portes lògiques i registres
v

+ -

load E clear
1 reset
REG (ESTAT)
clk
S

3
- -

1 2

http://shades.uab.cat/ribas/edu/books/FC
Controladors en software
• Preparació o setup
• Superbucle o super-loop
– Lectura d’entrades
– Lògica de control
– Escriptura de sortides

• Referència bàsica:
– Michael J. Pont (2002). Embedded C. Addison-
Wesley (Pearson Education Ltd.), GB. [Capítol 1]
Patró bàsic d’una màquina d’estats
en Lua, seguint el problema 1
-- Preparació:
INACTIU=0; POLS_1=1; ACTIU=2; ESPERA=3; POLS_2=4; ATURADA=-1
state = INACTIU
v = nil; t = false
while state ~= ATURADA do -- ATURADA només per simulació
v = get_vehicle_sensor()-- Lectura d’entrades
if v == nil then state = ATURADA end -- Cas especial d’aturada
-- Lògica de control:
if state == INACTIU then

else -- Estat d’aturada o no reconegut


end -- if chain
set_alarm( t ) –- Escriptura de sortides
end -- while

io.write( "Program exited!\n" )


Problema 1: Entrada/sortida
-- Entrada/sortida simulada: Interacció amb l’usuari

-- Entrada:
function get_vehicle_sensor()
io.write( " v = " )
local x = io.read("*n")
if x == nil or x < 0 or x > 1 then
x = nil
else
if x > 0 then x = true else x = false end
end -- if
return x
end -- function get_vehicle_sensor()

-- Sortida:
function set_alarm( t )
if t then io.write( " t = 1\n" ) else io.write( " t = 0\n" ) end
end -- function set_alarm()
Problema 1:
Observació, monitoratge

function monitor(state)
if state == INACTIU then io.write( "state = INACTIU " )
elseif state == POLS_1 then io.write( "state = POLS_1 " )
elseif state == ACTIU then io.write( "state = ACTIU " )
elseif state == ESPERA then io.write( "state = ESPERA " )
elseif state == POLS_2 then io.write( "state = POLS_2 " )
elseif state == ATURADA then io.write( "state = ATURADA " )
else io.write( "state = ERROR! " )
end -- if chain
end -- function monitor(state)
Exercici 1:
Reconeixement de marques laterals
• Especificació
– Generar un esdeveniment (mark) cada cop que es detecti una marca.
– La detecció de la marca es fa detectant seqüències de 11, 01, ... 01, 11
en els sensors laterals superior i inferior, respectivament
Exercici 1:
Reconeixement de marques laterals
• Mòdul de detecció de marques laterals
– Entrades (top, bottom)
Sensors d’infrarojos superior i inferior
– Sortides (mark)
Succés o ‘event’ que s’activi en el moment en què
s’ha reconegut una marca
• Etapes
– Disseny de la màquina d’estats del reconeixedor
– Programació en Lua
Exercici 1.a:
Reconeixement de “marques”
• Disseny de la màquina d’estats del reconeixedor

entrades
{top, bottom}

exemple
indicador
d’estat estat
inicial state REPÒS
/ mark / 0 11

sortides
Exercici 1.b:
Reconeixement de “marques”
• Programació en Lua
function read_IRsensors()
io.write( " top(0/1), bottom(0/1) [xx] = " )
local s = io.read()
local t, b = nil, nil -- multiple value assignment (!)
if string.sub( s, 1, 1 ) == '0' then t = false end
if string.sub( s, 1, 1 ) == '1' then t = true end
if string.sub( s, 2, 2 ) == '0' then b = false end
if string.sub( s, 2, 2 ) == '1' then b = true end
return t, b -- returning multiple values,
-- must be assigned to variables, like above
end -- function read_IRsensors()

function warn( m )
if m then io.write( " mark = 1\n" ) else io.write( " mark = 0\n" ) end
end -- function warn()

-- SETUP

-- MAIN LOOP

You might also like