La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Ceruti Simone Matteo Delcon Srl

Presentazioni simili


Presentazione sul tema: "Ceruti Simone Matteo Delcon Srl"— Transcript della presentazione:

1 Ceruti Simone Matteo Delcon Srl
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
0 cent 10 cents 20c Better Embedded 2013 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 Macchina stati finiti: riconoscitore di linguaggi
Riconoscitore di identificatori: riconosce una stringa alfanumerica che inizia con una lettera S0 S1 lettera cifra S2 cifra/lettera Better Embedded 2013 Ceruti Simone Matteo

9 Macchina stati finiti: riconoscitore di linguaggi
Riconoscitore di numeri binari dispari: riconosce numero binari che finiscono con un 1 S0 S1 1 Better Embedded 2013 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

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

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

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

15 Macchina stati finiti gerarchica
D b A a A a B b g B d g b C C d Better Embedded 2013 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) QAbstractTransition QEventTransition QKeyEventTransition QMouseEventTransition QSignalTransition Better Embedded 2013 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())); S1 S2 tr Better Embedded 2013 Ceruti Simone Matteo

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

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

21 Interazione tra macchine a stati
Medical Device Server Eth/rs485/WiFi Better Embedded 2013 Ceruti Simone Matteo

22 Interazione tra macchine a stati
Connected->addTransition(MSExec,SIGNAL(SendCodeS()),ParseCode)) ReadCode->addTransition(MSComm,SIGNAL(StartPrgS()),StartPrg)) MSExec MSComm Init WaitConnect EndInitS ConnectedS emit SendCodeS() ReadCode Connected EndPrgS StartPrgS EndParseS SendCodeS emit StartPrgS() StartPrg ParseCode Better Embedded 2013 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)
ReadCode StartPrg Init StartPrgS EndInitS EndPrgS Standby StandbyS S2 S1 S3 Better Embedded 2013 Ceruti Simone Matteo

25 Salvataggio e ripristino stato corrente (QHistoryState)
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. Better Embedded 2013 Ceruti Simone Matteo

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

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

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

29 Macchine a stati e Proprietà
NoFindState FindState NoEmptyText EmptyText buttonNext: enabled  false buttonPrev: enabled  false buttonNext: enabled  true buttonPrev: enabled  true Better Embedded 2013 Ceruti Simone Matteo

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

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

32 Macchine a stati e Proprietà: es. calcolatrice
Standard Std_S Sc_S Scientifica decimale gradi Dec_S Gradi_S Radianti_S Scientifica decimale radianti Bin_S Hex_S Binaria Esadecimale Better Embedded 2013 Ceruti Simone Matteo

33 Macchine a stati e Animazioni
Transizione  Animazione QAbstractTransition  QAbstractAnimation QAbstractAnimation QVariantAnimation QAnimationGroup QPropertyAnimation QParallelAnimationGroup QSequentialAnimationGroup Better Embedded 2013 Ceruti Simone Matteo

34 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) Better Embedded 2013 Ceruti Simone Matteo

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

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

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

38 Sistema embedded 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 Ceruti Simone Matteo

39 Sistema embedded ...... SERVER Applicazione Client 1 Dispositivo 1
Ethernet Applicazione Client 1 Dispositivo 1 Applicazione Server RS485 / Ethernet / Wi-Fi Applicazione Client 2 Dispositivo 2 Servizio Demone Applicazione Client 3 Dispositivo 3 DBMS ……. ...... Dispositivo n Applicazione Client m SERVER Better Embedded 2013 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 Sistema embedded: utilizzo di macchine a stati finiti
Utilizzo QHistoryState Gestione Stand-by Modifiche run-time di alcuni parametri ricevuti dal server Exec1 UpdVar Exec2 Update EndUpd H Exec3 Better Embedded 2013 Ceruti Simone Matteo

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

43 Grazie a tutti Ceruti Simone Matteo matteo.ceruti@delcon.it
Better Embedded 2013 Ceruti Simone Matteo


Scaricare ppt "Ceruti Simone Matteo Delcon Srl"

Presentazioni simili


Annunci Google