View
43
Download
0
Category
Preview:
DESCRIPTION
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() { - PowerPoint PPT Presentation
Citation preview
Introduzione al RTWIntroduzione al RTW
Corso Meccatronica anno 2008/09
Paolo Tripicchio
Real-Time WorkshopReal-Time Workshop
Esecuzione di ModelloEsecuzione di Modello
Interfaccia run-time + modello eseguibile
• ModelInizialize• ModelOutputs• ModelUpdate• ModelDerivatives• ModelTerminate
Modello Single-TaskingModello Single-Tasking rtOneStep(){Controllo interrupt overflowAttivazione 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
continuiModelDerivativesDo 0 o Più
ModelOutputsModelDerivatives
EndDo (Il numero di iterazioni dipende dal solutore.)Calcolo derivate per aggiornare stati continui.
EndIntegrate}
Modello Single-TaskingModello Single-Taskingmain(){Initializzazione (inclusa istallazione di rtOneStep comeinterrupt service routine, ISR, per un clock real-time).While(tempo < tempo finale)
Esecuzione processi in Background.EndWhileMask interrupts (Disattiva rtOneStep dall’esecuzione.)Completa tutti i Processi in Background.Shutdown}
Modello Multi-TaskingModello Multi-TaskingrtOneStep(){Controllo interrupt overflowAttivazione interrupt "rtOneStep"ModelOutputs(tid=0)LogTXY ModelUpdate(tid=0) Integrate
ModelDerivativesDo 0 o Pi`u
ModelOutputs(tid=0)ModelDerivatives
EndDo Calcolo derivate per aggiornare stati continui.
EndIntegrate….
….For i=1:NumTasks
If (hit in task i)ModelOutputs(tid=i)ModelUpdate(tid=i)
EndIfEndFor}
Modelli Multi RateModelli Multi Rate
• Continui e discreti, diversi rateTc multipli del base Ts
• Assegnamento priorità dei processi freq. maggiore priorità maggiore
• Assegnamento priorità blocchi asincroni• Transizioni nella frequenza di
campionamento
Problemi di trasferimento datiProblemi 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
Blocco Rate TransitionBlocco Rate Transition
• 3 differenti modalità– Zero Order Hold– Unit Delay
• Inserzione automatica
S-FunctionsS-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
S-FunctionsS-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
Blocchi asincroniBlocchi asincroni
• Meccanismo function call tramite ISR– Sottosistema triggered con enable fnc_call
Blocchi asincroniBlocchi asincroni
• Approccio dual-model vs single-model
RTW Embedded CoderRTW 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
• 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)
RTW Embedded CoderRTW Embedded Coder
Codice Stand-AloneCodice Stand-Alone
main(){Inizializzazione (include l’installazione di rt_OneStep comeinterrupt service routine per un clock real-time)Inizializza e avvia timer hardwareAttiva interruptsWhile(not Error) and (time < final time)
Background taskEndWhileDisattiva interrupts (Disattiva rt_OneStep)Completa tutti i background tasksShutdown}
Codice Stand-AloneCodice Stand-Alone
• Single-Tasking
rt_OneStep(){Controlla overflow dell’Interrupt o altri erroriAttiva "rt_OneStep" (timer) interruptModel_Step() -- Passo temporale con output,logging,update}
Codice Stand-AloneCodice Stand-Alone• Multi-tasking multi-rate
rt_OneStep(){Controlla base-rate interrupt overrunAttiva "rt_OneStep" interruptDetermina quali rates devono eseguire in questo passoModel_Step0() -- esegui codice con il passo base-rateFor N=1:NumTasks-1 -- itera i sub-rate tasks
If (sub-rate task N `e schedulato)Controlla sub-rate interrupt overrunModel_StepN() -- esegui codice passo sub-rate
EndIfEndFor}
Ottimizzazioni Fixed-PointOttimizzazioni Fixed-Point
• Molte famiglie di Micro hanno solo ALU• Ridurre consumo RAM , ROM, tempo
esecuzione• Rappresentazione Slope , [Slope Bias]
V = S*Q + B
Ottimizzazioni Fixed-PointOttimizzazioni Fixed-Point
• Scelta del punto binario (range vs risoluzione)
• Metodo di arrotondamento– Floor , Ceiling , Zero , Nearest
• Gestione overflow– Wrap , Saturate
Recommended