Upload
cosima-rossetti
View
229
Download
0
Embed Size (px)
Citation preview
Ceruti Simone Matteo 1
QT State Machine Framework: presentazione
ed utilizzo in un sistema embedded
Ceruti Simone Matteo
Delcon Srl
Better Embedded 2013
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
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
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
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
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
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
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
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
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
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
Ceruti Simone Matteo 12Better Embedded 2013
Macchina stati finiti gerarchica
Connected
ReadData
ManageRxData
lpTcpSocket->newConnection
lpTcpSocket->disconnectedlpTcpSocket->error
WaitConnect
lpTcpSocket->readyRead
Ceruti Simone Matteo 13Better Embedded 2013
Macchina stati finiti gerarchica
Connected
ReadData
lpTcpSocket->newConnection
Normal lpTcpSocket->disconnectedlpTcpSocket->error
WaitConnect
lpTcpSocket->readyRead
ManageRxData
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
Ceruti Simone Matteo 15Better Embedded 2013
Macchina stati finiti gerarchica
A
C
B
b
b
a
dg
A
C
B
a
d
gb
D
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
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
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
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, )
Ceruti Simone Matteo 20
Interazione tra macchine a stati
Emettitore QStateMachine
Better Embedded 2013
QObject
QAbstractState
QState
QStateMachine
Ceruti Simone Matteo 21
Interazione tra macchine a stati
Better Embedded 2013
Eth/rs485/WiFi
Medical Device Server
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))
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
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
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.
Ceruti Simone Matteo 26
Salvataggio e ripristino stato corrente (QHistoryState)
Better Embedded 2013
ReadCode
StartPrg
Init
StartPrgS
EndInitS
EndPrgS
Standby
Normal
H
StandbyS
ExitStandbyS
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)
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à
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
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);...
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();
}
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
Ceruti Simone Matteo 33Better Embedded 2013
Macchine a stati e Animazioni
• Transizione Animazione• QAbstractTransition QAbstractAnimation
QAbstractAnimation
QVariantAnimation
QPropertyAnimation
QAnimationGroup
QParallelAnimationGroup QSequentialAnimationGroup
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)
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)…
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)));...
Ceruti Simone Matteo 37Better Embedded 2013
Macchine a stati e Animazioni
void FindDialog::showOrHide(bool on){
if (on) emit showExtra();
elseemit hideExtra();
}
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
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
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
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
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
Ceruti Simone Matteo 43
• Ceruti Simone Matteo• [email protected]• [email protected]
Better Embedded 2013
Grazie a tutti