La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "QT State Machine Framework: presentazione ed utilizzo in un sistema embedded Ceruti Simone Matteo Delcon Srl Better Embedded 2013Ceruti Simone Matteo1."— Transcript della presentazione:

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

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 2013Ceruti Simone Matteo2

3 Macchina stati finiti: distributore bibite Better Embedded 2013Ceruti Simone Matteo3 10 c 30 c 0c0c 0 cent 10 cents 0 cent 20 c 10 cents 0 cent 10 cents 0 cent

4 Macchina stati finiti Sistema composto da un numero finiti di stati S Insieme finito di simboli di ingresso I Uno stato iniziale S 0 Insieme stati finali O (eventualmente vuoto) Funzione di transizione associa lo stato successivo allo stato attuale e allingresso f : S x I S S(t+1) = f(S(t),I(t)) Better Embedded 2013Ceruti Simone Matteo4

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 2013Ceruti Simone Matteo5

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 2013Ceruti Simone Matteo6

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 2013Ceruti Simone Matteo7

8 Riconoscitore di identificatori: riconosce una stringa alfanumerica che inizia con una lettera Better Embedded 2013Ceruti Simone Matteo8 S0S0 S1S1 lettera cifra S2S2 cifra/lettera Macchina stati finiti: riconoscitore di linguaggi

9 Riconoscitore di numeri binari dispari: riconosce numero binari che finiscono con un 1 Better Embedded 2013Ceruti Simone Matteo9 0 S0S0 S1S Macchina stati finiti: riconoscitore di linguaggi

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 2013Ceruti Simone Matteo10

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 2013Ceruti Simone Matteo11

12 Better Embedded 2013Ceruti Simone Matteo12 Macchina stati finiti gerarchica Connected ReadData ManageRxData lpTcpSocket->newConnection lpTcpSocket->disconnected lpTcpSocket->error WaitConnect lpTcpSocket->readyRead

13 Better Embedded 2013Ceruti Simone Matteo13 Macchina stati finiti gerarchica Connected ReadData lpTcpSocket->newConnection Normal lpTcpSocket->disconnected lpTcpSocket->error WaitConnect lpTcpSocket->readyRead ManageRxData

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 2013Ceruti Simone Matteo14 Macchina stati finiti gerarchica: dichiarazione

15 Better Embedded 2013Ceruti Simone Matteo15 Macchina stati finiti gerarchica A C B A C B D

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 2013Ceruti Simone Matteo16

17 Definizione di transizione Funzione di transizione t : S x I S QState* di ingresso (stato sorgente) QState* di uscita (stato destinazione) Better Embedded 2013Ceruti Simone Matteo17 QAbstractTransition QEventTransition QKeyEventTransitionQMouseEventTransition QSignalTransition

18 State Machine Framework: classi principali S 1 emette segnale exited quando avviene transizione S 2 emette segnale entered quando avviene transizione connect(S2,SIGNAL(entered()),this,SLOT(S2Entered())); Better Embedded 2013Ceruti Simone Matteo18 S1S1 S2S2 tr

19 Interazione tra macchine a stati Si utilizzano QSignalTransition Stato iniziale Stato finale Emettitore segnale Segnale stesso Emettitore è figlio QObject Better Embedded 2013Ceruti Simone Matteo19 S1-> addTransition ( Socket,SIGNAL(error())S2,)

20 Interazione tra macchine a stati Emettitore QStateMachine Better Embedded 2013Ceruti Simone Matteo20 QObject QAbstractState QState QStateMachine

21 Interazione tra macchine a stati Better Embedded 2013Ceruti Simone Matteo21 Eth/rs485/WiFi Medical DeviceServer

22 Interazione tra macchine a stati Better Embedded 2013Ceruti Simone Matteo22 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))

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 2013Ceruti Simone Matteo23

24 Salvataggio e ripristino stato corrente (QHistoryState) Better Embedded 2013Ceruti Simone Matteo24 ReadCode StartPrg Init StartPrgS EndInitS EndPrgS Standby StandbyS S2 S1 S3

25 Salvataggio e ripristino stato corrente (QHistoryState) Better Embedded 2013Ceruti Simone Matteo25 QHistoryState è uno pseudo-stato che rappresenta lo stato figlio in cui era il padre prima dellesecuzione della transizione che fa uscire da tale stato padre.

26 Salvataggio e ripristino stato corrente (QHistoryState) Better Embedded 2013Ceruti Simone Matteo26 ReadCode StartPrg Init StartPrgS EndInitS EndPrgS Standby Normal H StandbyS ExitStandbyS

27 Salvataggio e ripristino stato corrente: dichiarazione Better Embedded 2013Ceruti Simone Matteo27 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)

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 2013Ceruti Simone Matteo28 Macchine a stati e Proprietà

29 Better Embedded 2013Ceruti Simone Matteo29 Macchine a stati e Proprietà NoFindState FindState NoEmptyTextEmptyText buttonNext: enabled false buttonPrev: enabled false buttonNext: enabled true buttonPrev: enabled true

30 Better Embedded 2013Ceruti Simone Matteo30 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);...

31 Better Embedded 2013Ceruti Simone Matteo31 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(); }

32 Better Embedded 2013Ceruti Simone Matteo32 Macchine a stati e Proprietà: es. calcolatrice Standard Scientifica decimale gradi Scientifica decimale radianti BinariaEsadecimale Sc_S Radianti_SGradi_S Hex_SBin_S Dec_S Std_S

33 Better Embedded 2013Ceruti Simone Matteo33 Macchine a stati e Animazioni Transizione Animazione QAbstractTransition QAbstractAnimation QAbstractAnimation QVariantAnimation QPropertyAnimation QAnimationGroup QParallelAnimationGroupQSequentialAnimationGroup

34 Better Embedded 2013Ceruti Simone Matteo34 Macchine a stati e Animazioni QPropertyAnimation – Gestisce lanimazione della proprietà di un QObject – [Valore iniziale] (valore attuale) – Valore finale [valori intermedi] – [Durata animazione] (250 msec) – [Curva di animazione] (lineare)

35 Better Embedded 2013Ceruti Simone Matteo35 Macchine a stati e Animazioni Start "Find" hideExtraWidgetsState showExtraWidgetsState hideExtra showExtra widget: size (w,h) … widget: size (w,h * 2) …

36 Better Embedded 2013Ceruti Simone Matteo36 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)));...

37 Better Embedded 2013Ceruti Simone Matteo37 Macchine a stati e Animazioni void FindDialog::showOrHide(bool on) { if (on) emit showExtra(); else emit hideExtra(); }

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 2013Ceruti Simone Matteo38 Sistema embedded

39 Better Embedded 2013Ceruti Simone Matteo39 Applicazione Client 1 Dispositivo 1 Dispositivo 2 Dispositivo 3 Dispositivo n RS485 / Ethernet / Wi-Fi Servizio Demone Applicazione Client 2 Applicazione Client 3 Applicazione Client m ……. Sistema embedded DBMS Applicazione Server Ethernet SERVER

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 2013Ceruti Simone Matteo40

41 Utilizzo QHistoryState – Gestione Stand-by – Modifiche run-time di alcuni parametri ricevuti dal server Better Embedded 2013Ceruti Simone Matteo41 Exec2 Exec3 Exec1 Update H UpdVar EndUpd Sistema embedded: utilizzo di macchine a stati finiti

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 2013Ceruti Simone Matteo42 Sistema embedded: utilizzo di macchine a stati finiti

43 Ceruti Simone Matteo Better Embedded 2013Ceruti Simone Matteo43 Grazie a tutti


Scaricare ppt "QT State Machine Framework: presentazione ed utilizzo in un sistema embedded Ceruti Simone Matteo Delcon Srl Better Embedded 2013Ceruti Simone Matteo1."

Presentazioni simili


Annunci Google