QT State Machine Framework: presentazione ed utilizzo in un sistema embedded - PowerPoint PPT Presentation

joshua
qt state machine framework presentazione ed utilizzo in un sistema embedded n.
Skip this Video
Loading SlideShow in 5 Seconds..
QT State Machine Framework: presentazione ed utilizzo in un sistema embedded PowerPoint Presentation
Download Presentation
QT State Machine Framework: presentazione ed utilizzo in un sistema embedded

play fullscreen
1 / 43
Download Presentation
QT State Machine Framework: presentazione ed utilizzo in un sistema embedded
144 Views
Download Presentation

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. QT State Machine Framework: presentazione ed utilizzo in un sistema embedded Ceruti Simone Matteo DelconSrl 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 Ceruti Simone Matteo

  3. Macchina stati finiti: distributore bibite 0 cent 0c 10 cents 0 cent 10c 30c 0 cent 10 cents 10 cents 20c 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) • Funzionedi transizione associa lo stato successivo allo stato attuale e all’ingresso • f : S x I → S • S(t+1) = f(S(t),I(t)) 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 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 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 Ceruti Simone Matteo

  8. Macchina stati finiti: riconoscitore di linguaggi Riconoscitore di identificatori: riconosce una stringa alfanumerica che inizia con una lettera lettera S0 lettera S1 cifra S2 cifra/lettera cifra Ceruti Simone Matteo

  9. Macchina stati finiti: riconoscitore di linguaggi Riconoscitore di numeri binari dispari: riconosce numero binari che finiscono con un 1 1 1 S0 S1 0 0 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 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 Ceruti Simone Matteo

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

  13. Macchina stati finiti gerarchica WaitConnect lpTcpSocket->newConnection lpTcpSocket->disconnected lpTcpSocket->error Normal Connected lpTcpSocket->readyRead ReadData ManageRxData 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 = newQState(lpNormal); QState* lpReadData = new QState(lpNormal); QState* lpManageRxData = new QState(lpNormal); … lpNormal->addTransition(lpSocket,SIGNAL(disconnected()),lpWaitConnect); lpNormal->addTransition(lpSocket,SIGNAL(error()),lpWaitConnect); Ceruti Simone Matteo

  15. Macchina stati finiti gerarchica D b A a A a B b B g g d b C C 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 Qtsignal • QEventTransition: basata su Qtevent • QMouseEventTransition • QKeyEventTransition 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 • QSignalTransition • QKeyEventTransition • QMouseEventTransition Ceruti Simone Matteo

  18. State Machine Framework: classi principali • S1 emette segnale exitedquando avviene transizione • S2emette segnale enteredquando avviene transizione • connect(S2,SIGNAL(entered()),this,SLOT(S2Entered())); S1 S2 tr Ceruti Simone Matteo

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

  20. Interazione tra macchine a stati Emettitore  QStateMachine • QObject • QAbstractState • QState • QStateMachine Ceruti Simone Matteo

  21. Interazione tra macchine a stati Medical Device Server Eth/rs485/WiFi 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 emitSendCodeS() ReadCode Connected EndPrgS StartPrgS EndParseS SendCodeS emitStartPrgS() StartPrg ParseCode 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 Ceruti Simone Matteo

  24. Salvataggio e ripristino stato corrente (QHistoryState) StandbyS Init S1 EndInitS StandbyS Standby ReadCode S2 EndPrgS StartPrgS S3 StartPrg StandbyS 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. Ceruti Simone Matteo

  26. Salvataggio e ripristino stato corrente (QHistoryState) Normal Init EndInitS StandbyS Standby ReadCode ExitStandbyS H EndPrgS StartPrgS StartPrg 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) 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 Ceruti Simone Matteo

  29. Macchine a stati e Proprietà buttonNext:enabled  false buttonPrev:enabled  false NoFindState NoEmptyText EmptyText FindState buttonNext:enabled  true buttonPrev:enabled  true 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); ... Ceruti Simone Matteo

  31. Macchine a stati e Proprietà ... connect(lineEdit,SIGNAL(textEdited(constQString&)), lpFindDialog,SLOT(textChanged(constQString&))); ... voidFindDialog::textChanged(constQString& text) { if (text.isEmpty()) emitNoEmptyText(); else emitEmptyText(); } 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 Ceruti Simone Matteo

  33. Macchine a stati e Animazioni • Transizione  Animazione • QAbstractTransition  QAbstractAnimation • QAbstractAnimation • QVariantAnimation • QAnimationGroup • QPropertyAnimation • QParallelAnimationGroup • QSequentialAnimationGroup 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) Ceruti Simone Matteo

  35. Macchine a stati e Animazioni • Start "Find" widget:size  (w,h) … hideExtraWidgetsState showExtra hideExtra widget:size  (w,h * 2) … showExtraWidgetsState 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); intw = size().width(); inth = size().height()*2; animSize->setEndValue(QSize(w,h)); tr1->addAnimation(animSize); connect(moreButton,SIGNAL(toggled(bool)),this,SLOT(showOrHide(bool))); ... Ceruti Simone Matteo

  37. Macchine a stati e Animazioni voidFindDialog::showOrHide(boolon) { if(on) emitshowExtra(); else emithideExtra(); } 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 Ceruti Simone Matteo

  39. Sistema embedded Ethernet Applicazione Client 1 Dispositivo 1 Applicazione Server Applicazione Client 2 RS485 / Ethernet / Wi-Fi Dispositivo 2 Servizio Demone Applicazione Client 3 Dispositivo 3 DBMS ……. ...... Dispositivo n Applicazione Client m 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 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 Update Exec2 EndUpd H Exec3 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 Ceruti Simone Matteo

  43. Grazie a tutti • Ceruti Simone Matteo • matteo.ceruti@delcon.it • teo.cer@tiscali.it Ceruti Simone Matteo