1 / 43

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

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

joshua
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

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

More Related