1 / 20

Introduzione al RTW

Introduzione al RTW. Corso Meccatronica anno 2008/09 Paolo Tripicchio. Real-Time Workshop. Esecuzione di Modello. Interfaccia run-time + modello eseguibile ModelInizialize ModelOutputs ModelUpdate ModelDerivatives ModelTerminate. Modello Single-Tasking. rtOneStep() {

levia
Télécharger la présentation

Introduzione al RTW

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. Introduzione al RTW Corso Meccatronica anno 2008/09 Paolo Tripicchio

  2. Real-Time Workshop

  3. Esecuzione di Modello Interfaccia run-time + modello eseguibile • ModelInizialize • ModelOutputs • ModelUpdate • ModelDerivatives • ModelTerminate

  4. Modello Single-Tasking rtOneStep() { Controllo interrupt overflow Attivazione interrupt "rtOneStep" ModelOutputs -- passo temporale maggiore. LogTXY -- Log Tempo, stati e porte di uscita. ModelUpdate -- passo temporale maggiore. Integrate -- Integrazione nei passi temporali minori per gli stati continui ModelDerivatives Do 0 o Più ModelOutputs ModelDerivatives EndDo (Il numero di iterazioni dipende dal solutore.) Calcolo derivate per aggiornare stati continui. EndIntegrate }

  5. Modello Single-Tasking main() { Initializzazione (inclusa istallazione di rtOneStep come interrupt service routine, ISR, per un clock real-time). While(tempo < tempo finale) Esecuzione processi in Background. EndWhile Mask interrupts (Disattiva rtOneStep dall’esecuzione.) Completa tutti i Processi in Background. Shutdown }

  6. Modello Multi-Tasking …. For i=1:NumTasks If (hit in task i) ModelOutputs(tid=i) ModelUpdate(tid=i) EndIf EndFor } rtOneStep() { Controllo interrupt overflow Attivazione interrupt "rtOneStep" ModelOutputs(tid=0) LogTXY ModelUpdate(tid=0) Integrate ModelDerivatives Do 0 o Pi`u ModelOutputs(tid=0) ModelDerivatives EndDo Calcolo derivate per aggiornare stati continui. EndIntegrate ….

  7. Modelli Multi Rate • Continui e discreti, diversi rate Tc multipli del base Ts • Assegnamento priorità dei processi freq. maggiore priorità maggiore • Assegnamento priorità blocchi asincroni • Transizioni nella frequenza di campionamento

  8. Problemi di trasferimento dati • Integrità dei dati (preemption) • Trasferimento dati protetto • Trasferimento dati non protetto • Determinismo (predicibilità) • Disponibilità dati • Rates di campionamento dei blocchi • Tempo di ritardo blocco in ricezione

  9. Blocco Rate Transition • 3 differenti modalità • Zero Order Hold • Unit Delay • Inserzione automatica

  10. S-Functions • Estendono funzionalità di Simulink • Interfaccia per il codice hand-written • Interfaccia per l’hardware • Scrittura codice embedded ottimizzato l’API S-function genera overhead

  11. S-Functions • Non mi interessa l’efficienza • Non-Inlined S-function • Voglio interfacciare il mio codice • Wrapper S-function • Voglio implementare un algoritmo altamente ottimizzato • Fully Inlined S-function

  12. Blocchi asincroni • Meccanismo function call tramite ISR • Sottosistema triggered con enable fnc_call

  13. Blocchi asincroni • Approccio dual-model vs single-model

  14. RTW Embedded Coder • Utilizzo di memoria, Velocità esecuzione, Leggibilità paragonabile al codice scritto a mano • Partizione efficiente codice multi-rate • La struttura dati rtModel contiene esclusivamente le informazioni richieste dal modello

  15. RTW Embedded Coder • Generazione programmi stand-alone senza necessità di utilizzare RTOS • Funzioni modello Embedded • model_initialize • model_step(tid) • model_output(tid) • model_update(tid) • model_terminate (opzionale)

  16. Codice Stand-Alone main() { Inizializzazione (include l’installazione di rt_OneStep come interrupt service routine per un clock real-time) Inizializza e avvia timer hardware Attiva interrupts While(not Error) and (time < final time) Background task EndWhile Disattiva interrupts (Disattiva rt_OneStep) Completa tutti i background tasks Shutdown }

  17. Codice Stand-Alone • Single-Tasking rt_OneStep() { Controlla overflow dell’Interrupt o altri errori Attiva "rt_OneStep" (timer) interrupt Model_Step() -- Passo temporale con output,logging,update }

  18. Codice Stand-Alone • Multi-tasking multi-rate rt_OneStep() { Controlla base-rate interrupt overrun Attiva "rt_OneStep" interrupt Determina quali rates devono eseguire in questo passo Model_Step0() -- esegui codice con il passo base-rate For N=1:NumTasks-1 -- itera i sub-rate tasks If (sub-rate task N `e schedulato) Controlla sub-rate interrupt overrun Model_StepN() -- esegui codice passo sub-rate EndIf EndFor }

  19. Ottimizzazioni Fixed-Point • Molte famiglie di Micro hanno solo ALU • Ridurre consumo RAM , ROM, tempo esecuzione • Rappresentazione Slope , [Slope Bias] V = S*Q + B

  20. Ottimizzazioni Fixed-Point • Scelta del punto binario (range vs risoluzione) • Metodo di arrotondamento • Floor , Ceiling , Zero , Nearest • Gestione overflow • Wrap , Saturate

More Related