QT State Machine Framework: presentazione ed utilizzo in un sistema embedded

43
QT State Machine Framework: presentazione ed utilizzo in un sistema embedded Ceruti Simone Matteo Delcon Srl Better Embedded 2013 Ceruti Simone Matteo 1

description

QT State Machine Framework: presentazione ed utilizzo in un sistema embedded. Ceruti Simone Matteo Delcon S rl. Sommario. Definizione ed utilizzo di macchina a stati finiti Rappresentazione grafica Concetti e caratteristiche del framework Presentazione del sistema embedded - PowerPoint PPT Presentation

Transcript of QT State Machine Framework: presentazione ed utilizzo in un sistema embedded

Page 1: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 1

QT State Machine Framework: presentazione

ed utilizzo in un sistema embedded

Ceruti Simone MatteoDelcon Srl

Better Embedded 2013

Page 2: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 2

Sommario

• Definizione ed utilizzo di macchina a stati finiti

• Rappresentazione grafica

• Concetti e caratteristiche del framework

• Presentazione del sistema embedded

• Utilizzo di macchine a stati nel firmware

Better Embedded 2013

Page 3: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 3

Macchina stati finiti: distributore bibite

Better Embedded 2013

10c 30c

0c

0 cent

10 cents

0 cent

20c

10 cents

10 cents

0 cent

10 cents

0 cent

Page 4: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 4

Macchina stati finiti

• Sistema composto da un numero finiti di stati S• Insieme finito di simboli di ingresso I• Uno stato iniziale S0

• Insieme stati finali O (eventualmente vuoto)• Funzione di transizione associa lo stato

successivo allo stato attuale e all’ingresso f : S x I → S S(t+1) = f(S(t),I(t))

Better Embedded 2013

Page 5: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 5

Macchina stati finiti: esempi

• Protocolli di comunicazione• Software per progettazione di circuiti digitali• Unità di controllo digitale• Ricerca di parole chiave in un file o su web• Analizzatori di testo

– Compilatori di linguaggi– Interpreti di linguaggi

Better Embedded 2013

Page 6: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 6

Macchina stati finiti: riconoscitore di linguaggi

• Problema: decidere se una stringa s appartiene o meno ad un linguaggio L

• Esempi: – verificare se una stringa è un identificatore C– verificare se un numero binario è dispari

Better Embedded 2013

Page 7: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 7

Macchina stati finiti: riconoscitore di linguaggi

• Insieme finito di stati S• Insieme finito (alfabeto) di ingressi I• Insieme finito di stati di finali O• Funzione di transizione f: S x I S• Si applica la f a tutti i simboli della stringa da

riconoscere• Se termina in uno stato finale la stringa è

riconosciuta

Better Embedded 2013

Page 8: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 8

Riconoscitore di identificatori: riconosce una stringa alfanumerica che inizia con una lettera

Better Embedded 2013

S0

S1

lettera

lettera

cifra

S2

cifra

cifra/lettera

Macchina stati finiti: riconoscitore di linguaggi

Page 9: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 9

Riconoscitore di numeri binari dispari: riconosce numero binari che finiscono con un 1

Better Embedded 2013

0

S0 S1

11

0

Macchina stati finiti: riconoscitore di linguaggi

Page 10: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 10

Rappresentazione grafica

• Si utilizza un grafo orientato• Agli stati sono associati i nodi• Ad ogni coppia (S,I) in cui è definita t si associa

un arco• Lo stato iniziale viene caratterizzato dal nodo

con un arco entrante che non proviene da nodi• Lo stato finale da un nodo doppio

Better Embedded 2013

Page 11: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 11

Macchina stati finiti gerarchica

• Macchina a stati finiti• Uno stato può avere uno o più stati figli• Ogni stato figlio può avere stati figli…• Lo stato corrente è un insieme di stati• Se uno stato non può gestire la transizione la

può gestire il padre

Better Embedded 2013

Page 12: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 12Better Embedded 2013

Macchina stati finiti gerarchica

Connected

ReadData

ManageRxData

lpTcpSocket->newConnection

lpTcpSocket->disconnectedlpTcpSocket->error

WaitConnect

lpTcpSocket->readyRead

Page 13: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 13Better Embedded 2013

Macchina stati finiti gerarchica

Connected

ReadData

lpTcpSocket->newConnection Normal lpTcpSocket->disconnected

lpTcpSocket->error

WaitConnect

lpTcpSocket->readyRead

ManageRxData

Page 14: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 14

QStateMachine* lpSM = new QStateMachine();QState* lpWaitConnect = new QState(lpSM);QState* lpNormal = new QState(lpSM);QState* lpConnected = new QState(lpNormal);QState* lpReadData = new QState(lpNormal); QState* lpManageRxData = new QState(lpNormal);…lpNormal->addTransition(lpSocket,SIGNAL(disconnected()),lpWaitConnect); lpNormal->addTransition(lpSocket,SIGNAL(error()),lpWaitConnect);

Better Embedded 2013

Macchina stati finiti gerarchica: dichiarazione

Page 15: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 15Better Embedded 2013

Macchina stati finiti gerarchica

A

C

B

b

b

a

dg

A

C

B

a

d

gb

D

Page 16: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 16

State Machine Framework: classi principali

• QStateMachine: macchina a stati finiti gerarchica• QState: stato generico per QStateMachine• QAbstractTransition: transizione tra QState

– QSignalTransition: basata su Qt signal– QEventTransition: basata su Qt event

• QMouseEventTransition• QKeyEventTransition

Better Embedded 2013

Page 17: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 17

Definizione di transizione

• Funzione di transizione t : S x I → S• QState* di ingresso (stato sorgente)• QState* di uscita (stato destinazione)

Better Embedded 2013

QAbstractTransition

QEventTransition

QKeyEventTransition QMouseEventTransition

QSignalTransition

Page 18: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 18

State Machine Framework: classi principali

• S1 emette segnale exited quando avviene transizione

• S2 emette segnale entered quando avviene transizione • connect(S2,SIGNAL(entered()),this,SLOT(S2Entered()));

Better Embedded 2013

S1 S2tr

Page 19: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 19

Interazione tra macchine a stati

• Si utilizzano QSignalTransition• • Stato iniziale• Stato finale• Emettitore segnale• Segnale stesso• Emettitore è figlio QObject

Better Embedded 2013

S1->addTransition(Socket,SIGNAL(error()) S2, )

Page 20: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 20

Interazione tra macchine a stati

Emettitore QStateMachine

Better Embedded 2013

QObject

QAbstractState

QState

QStateMachine

Page 21: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 21

Interazione tra macchine a stati

Better Embedded 2013

Eth/rs485/WiFi

Medical Device Server

Page 22: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 22

Interazione tra macchine a stati

Better Embedded 2013

Connected->addTransition(MSExec,SIGNAL(SendCodeS()),ParseCode))

SendCodeS

Connected

ParseCode

WaitConnect

ConnectedS

EndParseS

ReadCode

StartPrg

Init

StartPrgS

EndInitS

EndPrgS

MSCommMSExec

emit SendCodeS()

emit StartPrgS()

ReadCode->addTransition(MSComm,SIGNAL(StartPrgS()),StartPrg))

Page 23: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 23

Salvataggio e ripristino stato corrente (QHistoryState)

• MS esecuzione su sistema embedded • Stato inizializzazione• Stato lettura codice• Stato di esecuzione programma• In tutti gli stati è richiesta interazione utente• Sistema può restare in attesa Standby• Uscito dallo standby deve tornare ultimo stato

Better Embedded 2013

Page 24: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 24

Salvataggio e ripristino stato corrente (QHistoryState)

Better Embedded 2013

ReadCode

StartPrg

Init

StartPrgS

EndInitS

EndPrgS

Standby

StandbyS

StandbyS

StandbyS

S2

S1

S3

Page 25: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 25

Salvataggio e ripristino stato corrente (QHistoryState)

Better Embedded 2013

QHistoryState è uno pseudo-stato che

rappresenta lo stato figlio in cui era il padre

prima dell’esecuzione della transizione che fa

uscire da tale stato padre.

Page 26: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 26

Salvataggio e ripristino stato corrente (QHistoryState)

Better Embedded 2013

ReadCode

StartPrg

Init

StartPrgS

EndInitS

EndPrgS

Standby

Normal

H

StandbyS

ExitStandbyS

Page 27: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 27

Salvataggio e ripristino stato corrente: dichiarazione

Better Embedded 2013

lpInit = new  QState(lpStateNormal); lpReadCode = new  QState(lpStateNormal); lpStartPrg = new  QState(lpStateNormal); lpStandby = new  QState(this);lpStandbySave = new  QHistoryState(lpStateNormal);lpInit->addTransition(this,SIGNAL(EndInitS()),lpReadCode)lpReadCode->addTransition(this,SIGNAL(StartPrgS()),lpStartPrg)lpStartPrg->addTransition(this,SIGNAL(EndPrgS()),lpReadCode)lpStateNormal->addTransition(this,SIGNAL(StandbyS()),lpStandby)lpStandby->addTransition(this,SIGNAL(ExitStandbyS()),lpStandbySave)

Page 28: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 28

• Esempio "Find"• Ad ogni stato si può assegnare un insieme di

triple (QObject, proprietà, valore)• Quando entra nello stato la proprietà del

QObject assume il valore assegnato

Better Embedded 2013

Macchine a stati e Proprietà

Page 29: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 29Better Embedded 2013

Macchine a stati e Proprietà

NoFindState

FindState

NoEmptyText EmptyText

buttonNext: enabled falsebuttonPrev: enabled false

buttonNext: enabled truebuttonPrev: enabled true

Page 30: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 30Better Embedded 2013

Macchine a stati e Proprietà

...lpNoFindState = new QState(findStateMachine);lpNoFindState->assignProperty(buttonNext, "enabled", false);lpNoFindState->assignProperty(buttonPrev, "enabled", false);lpToFindState = new QState(findStateMachine);lpToFindState->assignProperty(buttonNext, "enabled", true);lpToFindState->assignProperty(buttonPrev, "enabled", true);lpNoFindState->addTransition(this,SIGNAL(NoEmptyText()),lpToFindState);lpToFindState->addTransition(this,SIGNAL(EmptyText()),lpNoFindState);...

Page 31: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 31Better Embedded 2013

Macchine a stati e Proprietà

...connect(lineEdit,SIGNAL(textEdited(const QString&)),

lpFindDialog,SLOT(textChanged(const QString&))); ...void FindDialog::textChanged(const QString& text) {

if (text.isEmpty()) emit NoEmptyText();

else emit EmptyText();

}

Page 32: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 32Better Embedded 2013

Macchine a stati e Proprietà:es. calcolatrice

Standard

Scientifica decimale gradi

Scientifica decimale radianti

Binaria Esadecimale

Sc_S

Radianti_SGradi_S

Hex_SBin_S

Dec_S

Std_S

Page 33: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 33Better Embedded 2013

Macchine a stati e Animazioni

• Transizione Animazione• QAbstractTransition QAbstractAnimation

QAbstractAnimation

QVariantAnimation

QPropertyAnimation

QAnimationGroup

QParallelAnimationGroup QSequentialAnimationGroup

Page 34: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 34Better Embedded 2013

Macchine a stati e Animazioni

• QPropertyAnimation– Gestisce l’animazione della proprietà di un QObject– [Valore iniziale] (valore attuale)– Valore finale [valori intermedi]– [Durata animazione] (250 msec)– [Curva di animazione] (lineare)

Page 35: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 35Better Embedded 2013

Macchine a stati e Animazioni

• Start "Find"

hideExtraWidgetsState

showExtraWidgetsState

hideExtrashowExtra

widget: size (w,h)…

widget: size (w,h * 2)…

Page 36: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 36Better Embedded 2013

Macchine a stati e Animazioni

...QSignalTransition* tr1 = hideExtraWidgetsState->addTransition( this,SIGNAL(showExtra()),showExtraWidgetsState);QSignalTransition* tr2 = showExtraWidgetsState->addTransition( this,SIGNAL(hideExtra()),hideExtraWidgetsState);QPropertyAnimation* animSize = new QPropertyAnimation(widget,"size");animSize->setDuration(3000);int w = size().width();int h = size().height()*2;animSize->setEndValue(QSize(w,h));tr1->addAnimation(animSize);connect(moreButton,SIGNAL(toggled(bool)),this,SLOT(showOrHide(bool)));...

Page 37: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 37Better Embedded 2013

Macchine a stati e Animazioni

void FindDialog::showOrHide(bool on){

if (on) emit showExtra();

elseemit hideExtra();

}

Page 38: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 38

• Dispositivi embedded con Linux embedded• Server gestione dati (Linux / Windows)• Clients collegati con server (Linux /Windows)• Dispositivi connessi con Server tramite

Rs485-Ethernet-WiFi• Clients connessi con server tramite ethernet

Better Embedded 2013

Sistema embedded

Page 39: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 39Better Embedded 2013

ApplicazioneClient 1

Dispositivo 1

Dispositivo 2

Dispositivo 3

Dispositivo n

......

RS485 / Ethernet / Wi-Fi

Servizio Demone

ApplicazioneClient 2

ApplicazioneClient 3

ApplicazioneClient m

…….

Sistema embedded

DBMS

Applicazione Server

Ethernet

SERVER

Page 40: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 40

Sistema embedded: utilizzo di macchine a stati finiti

• Su ogni dispositivo due macchine a stati• MS-Comm per comunicazione con server• MS-Exec per esecuzione lavorazione• Comunicazione tra le due MS tramite segnali• MS-Comm: utilizzo del concetto di gerarchia

per gestire errore connessione

Better Embedded 2013

Page 41: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 41

• Utilizzo QHistoryState– Gestione Stand-by

– Modifiche run-time di alcuni parametri ricevuti dal server

Better Embedded 2013

Exec2

Exec3

Exec1

Update

H

UpdVar

EndUpd

Sistema embedded: utilizzo di macchine a stati finiti

Page 42: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 42

• Utilizzo QProperty e QPropertyAnimation– Widget "animati" durante tx/rx dati– Gestione stato abilitazioni widget input– Suddivisione gestione interfaccia grafica da

logica di funzionamento

Better Embedded 2013

Sistema embedded: utilizzo di macchine a stati finiti

Page 43: QT  State Machine Framework: presentazione ed utilizzo in un sistema  embedded

Ceruti Simone Matteo 43

• Ceruti Simone Matteo• [email protected][email protected]

Better Embedded 2013

Grazie a tutti