Memo

Aan: Matlab/Simulink gebruikers die iets meer willen weten van de Real Time Workshop

Van:

Will van Geest
Datum: 18-03-98
Onderwerp: Matlab, Simulink, Real-Time Workshop en Tornado

Wat is de Real-Time Workshop?

De Real-Time Workshop (RTW) is een uitbreiding op Simulink, waarmee het mogelijk is Simulink modellen om te zetten in een executable. Voor het uitvoeren van zo’n executable is Simulink of Matlab niet meer nodig. RTW kan zowel non-real-time executables voor Unix c.q. MSDOS maken als real-time executables voor Tornado en MSDOS. Non-real-time executables zijn meestal (veel) sneller dan simulatie in Simulink. Real-time executables zijn te gebruiken als "echte" regelaars. Sterke punten van de combinatie Simulink/RTW zijn:

Snelle ontwikkeling. Een in Simulink ontworpen systeem wordt door RTW snel en foutloos omgezet in een real-time programma, zodat programmeren en foutzoeken niet nodig zijn. De ontwikkelcyclus wordt zo veel korter.
Uitbreidbaar. RTW kan ook S-functies in C MEX files op nemen in de executable. Bovendien kan de code generator eenvoudig worden uitgebreid en aangepast. Met behulp hiervan wordt de simulatie nog sneller (bij non-real-time), of kan er meer worden gedaan in een vast interval (bij real-time).
Interactief. Simulink kan worden gebruikt om "on the fly" parameters van het Simulink model in de executable aan te passen voor het afregelen van het systeem. Parameters die de structuur van het model beïnvloeden, b.v. sample tijden, kunnen niet worden aangepast.

Beperkingen zijn dat RTW alleen fixed-step solvers voor continue systemen ondersteunt en dat RTW geen Matlab Function blokken kan omzetten. Er zijn nog geen aanwijzingen dat Mathworks bezig is deze beperkingen op te heffen.

Wat is Tornado?

Tornado is een omgeving voor het ontwikkelen van software voor dedicated real-time systems. Een dedicated system is een applicatie waarbij één computer in z’n geheel wordt gebruikt om het gestelde probleem op te lossen. De term real-time houdt in dit verband in dat het systeem "onmiddellijk" reageert op stimuli uit de buitenwereld, b.v. het verstrijken van een ingestelde tijd. Vaak is een dergelijke computer in een machine geïntegreerd en nauwlijks te herkennen als computer. Men spreekt dan van een embedded system. Tornado is o.a. gebruikt voor het ontwikkelen van de software voor de Mars Pathfinder van NASA.

In Tornado termen wordt het dedicated real-time system de target genoemd. Applicaties voor de target worden in de programmeertaal C ontwikkeld op een Unix systeem of Windows PC, de host. De applicatie bestaat uit een zeer simpel operating systeem, de kernel, en diverse tasks die ieder een bepaalde functie verzorgen. De kernel zorgt alleen voor de synchronisatie en communicatie tussen de verschillende tasks op de target. De tasks verzorgen o.a. het laden van files van de host via Ethernet, het opslaan van data op de host e.d. Bij het bouwen van de applicatie moet worden opgegeven welke tasks er in moeten worden opgenomen. Op deze manier kan een afweging worden gemaakt tussen mogelijkheden en overhead (minder taken, minder overhead, meer tijd voor "nuttig" werk).

In ons geval is de target opgebouwd rond een VME board met een PowerPC processor, geheugen & Ethernet en een VME board met analoge in- en uitgangen. Er zijn 4 analoge ingangen en 4 analoge uitgangen beschikbaar voor het aansluiten van een opstelling. Elk SUN/Solaris systeem van de vakgroep kan worden gebruikt als de host. Omdat er maar één target is, kan er slechts één Solaris systeem tegelijk als host worden gebruikt.

Voor het plotten van data is Tornado uitgebreid met Stethoscope. De data wordt door een Stethoscope task op de target verzameld en doorgegeven aan het Stethoscope programma op de host. Hiermee kunnen de gegevens op verschillende manier worden getoond, bewerkt en opgeslagen.

Mogelijkheden van de combinatie Real-Time Workshop en Tornado

RTW genereert een complete applicatie die gebruik maakt van Tornado’s low-level faciliteiten zoals semaforen, timers e.d. Deze faciliteiten zijn niet beschikbaar vanuit het Simulink model. Hoewel het mogelijk is om de applicatie te veranderen, wordt dit niet herkend door Simulink en gaan de veranderingen verloren bij het opnieuw genereren van de applicatie. Met RTW zijn alleen de mogelijkheden van Simulink beschikbaar, niets meer. Onder andere is het niet mogelijk om twee aparte Simulink modellen samen te laten werken.

Een door RTW gegenereerde applicatie is opgebouwd uit een aantal tasks. Voor elk deel van het Simulink model met een eigen sample-time is er een aparte task. Tasks met een kortere sample-time hebben een hogere prioriteit. Snellere tasks kunnen dus langzamer tasks onderbreken. Verder is er een task voor het starten en stoppen van de run en eventueel het opslaan van data op de host. In de applicatie kan ondersteuning voor Stethoscope en/of Simulink communicatie worden opgenomen. Er worden dan nog aparte tasks gestart voor communicatie met resp. Stethoscope en Simulink op de host. Deze tasks leveren meer overhead op en laten dus minder tijd beschikbaar voor het doorrekenen van het model.

Het gebruik onder Tornado voor real-time executables.

Voor het omzetten van het model moeten eerst de parameters bij "Tools->RTW Options…->RTW" worden ingesteld. Het veld "System target file" moet worden "tornado.tlc" en het veld "Template makefile" moet worden "tornado.tmf". Aan het veld "Make command" kunnen de volgende opties worden toegevoegd:

EXT_MODE=1 maakt communicatie tussen Simulink en de target mogelijk. In de executable wordt extra code opgenomen en bij het starten van de run op de target wordt er een extra task gestart.
STETHOSCOPE=1 maakt het real-time plotten van data op de host mogelijk. In de executable wordt extra code opgenomen en bij het starten van de run op de target worden er twee extra tasks gestart.
MAT_FILE=1 bewaart de workspace in de file "~/modelname.mat". In de workspace zijn de waarden van "To Workspace" blokken opgenomen. Bij "Tools->RTW Options…->Workspace I/O->Save to workspace" kunnen nog meer blokken worden opgegeven om op te slaan. De file wordt pas na afloop van de run gemaakt, tijdens de run worden de gegeven in het geheugen bewaard. Hoeveel samples er bewaard worden, is in te stellen met "Tools->RTW Options…->Workspace I/O->Limit rows to last". In de executable wordt extra code opgenomen.
DOWNLOAD=no voorkomt het starten van de Tornado utilities en het laden van de executable in de target. Default wordt de executable in de target geladen en de WindSh en Stethoscope user interfaces gestart op de host (als die nog niet draaien). De executable wordt nog niet gestart!

Na het aanpassen van de instellingen, kan de executable worden gebouwd met "Tools->RTW Build". Als de executable in de target is geladen, kan de run gestart worden in het WindSh window. Het commando is:

rt_main(model, "end-time", "blocks-for-stethoscope", full-names)

waarbij de parameters betekenen:

model De naam van het Simulink model.
end-time Het aantal seconden dat de run moet draaien, tussen aanhalingstekens! De waarde 0 betekent dat de run niet moet stoppen, bij "-1" wordt de tijd gebruikt die bij Simulink is opgegeven.
blocks-for-stethoscope De beginletters van de bloknamen die naar Stethoscope op de host gestuurd moeten worden, tussen aanhalingstekens. De waarde "*" geeft aan dat alle blokken via Stethoscope beschikbaar moeten zijn.
full-names Het gebruik van de complete namen. De waarde 0 geeft aan dat alleen de bloknaam gebruikt moet worden, de waarde 1 zorgt ervoor dat de volledige naam, inclusief (sub)subsysteemnamen wordt gebruikt.

Als Stethoscope is gestart, kan met de opties uit het "View" menu de data worden getoond. Met de opties uit het "Signals" menu kan de data-collectie (op de target) en de data opslag (op de host) worden bestuurd.

Als bij het bouwen van de executable de optie "EXT_MODE=1" is opgegeven kan Simulink aan de run op de target worden gekoppeld. Daarvoor moet eerst "Simulation->External" worden aangeklikt. Daarna moet bij "Tools->RTW Options…->RTW External->MEX-file arguments" de naam "dimrill" worden ingevuld tussen single quotes, dit is de Ethernet naam van de target. Vervolgens moet de run worden gestart op de target (met rt_main). Tenslotte moet de koppeling worden gemaakt door "Simulation->Start". Als de executable op de target klaar is, moet Simulink worden gestopt met "Simulation->Stop".

Het gebruik onder Solaris voor non-real-time executables.

Met RTW kunnen ook non-real-time executables worden gemaakt voor Solaris. Deze mogelijkheid is nuttig voor het versnellen van een simulatie. Eest moeten de parameters bij "Tools->RTW Options…->RTW" worden ingesteld. Het veld "System target file" moet worden "grt.tlc" en het veld "Template makefile" moet worden "grt_unix.tmf". De executable wordt gegenereerd d.m.v. de menu-keuze "Tools->RTW Build". Deze kan gestart worden door "!modelname" in te typen achter de Matlab prompt. De variabelen die bij Simulink worden opgenomen in de workspace, worden bij een Solaris executable opgeslagen in "modelname.mat". Deze kan na de run weer in Matlab worden verwerkt. Het is niet mogelijk om tijdens de run gegevens vanuit de executable te krijgen. Ook beschikken we niet over analoge I/O mogelijkheden onder Solaris

Om tijdens de run parameters te kunnen aanpassen moet er wat meer werk worden verricht. Aan "Tools->RTW Options…->RTW->Make command" moet worden toe gevoegd: "EXT_MODE=1", waarna de executable opnieuw gebouwd moet worden. Daarna moet "Simulation->External" worden aangeklikt. De executable moet dan gestart worden in de background met "!modelname &". Tenslotte kan Simulink aan de executable worden gekoppeld door "Simulation->Start". Let erop dat de executable weleens heel snel klaar zou kunnen zijn! Omdat de resultaten van parameter veranderingen niet direct zichtbaar zijn, is het nut van deze mogelijkheid op zijn minst twijfelachtig te noemen.

Bijlage: Metingen aan Tornado en Stethoscope

Host:

Ultra 1/140
Solaris 2.5.1
Tornado 1.0
Stethoscope 4.3
Matlab 5.1
Simulink 2.1
Real-Time Workshop 2.1

Target:

PowerPC 604 100Mz
CPU board MVME 1601
32 Mbyte geheugen
Greenspring IP-Precision ADC (16 analoog in, 12 bit)
Greenspring IP-DAC (6 analoog uit, 12 bit)
Greenspring IP-Dual PI/T (32 bit digitale I/O)

Display:

Chicon DX4/100
WindowNT 4.0/SP3
Exceed 5.1.3



Maximaal instelbare sample frequentie (bepaald door hardware):
5 kHz (0.2 ms)
Minimaal instelbare sample frequentie (bepaald door hardware):
Er moet minstens één Simulink blok zijn met deze (of hogere) frequentie,
andere blokken mogen dan een lagere frequentie gebruiken.
40 Hz (25 ms)
Werkbare frequentie voor continue PID regelaar met Euler solver:
(inclusief datacollectie voor Stethoscope, maar geen display)
2 kHz (0.5 ms)
Werkbare frequentie voor discrete PID regelaar:
(inclusief datacollectie voor Stethoscope, maar geen display)
4 kHz (0.25 ms)
Maximaal haalbare frequentie voor Stethoscope display:
(min of meer onafhankelijk van het aantal te tonen kanalen)
0.5kHz (2 ms)