NesC programok szimulációja
TOSSIM
Egy nesC-ben írt TinyOS programot többféle eszközre is telepíteni tudunk (a fordítás során meg kell adnunk ennek az eszköznek az osztályát). Azonban előfordulhat, hogy nem tudunk elérni ilyen eszközöket. Ekkor azt tehetjük, hogy a pc-re fordítjuk le a programunkat. A kapott futtatható állományt TOSSIM-nak nevezik (TinyOS Simulator). Ez egy egyszerű „konzol alkalmazás” lesz. Alapjában véve úgy működik, mintha egy valós eszközön lenne, csak a működéséről az outputra folyamatosan kiírja az információkat. Nagy előnye, hogy futásidőben tudjuk meghatározni, hogy milyen információkat írjon ki az outputra.
A következőkben STARTDIR-nek fogjuk a C:\tinyos\cygwin\opt\tinyos-1.x\ könyvtárat [Windowsra installálva a TinyOS-t], azaz a TinyOS könyvtárát. Ehhez viszonyítva (azaz ezen belül) fogjuk megnevezni a többi szóbakerülő könyvtárat.
A TOSSIM-ot a CntToLedsAndRfm alkalmazáson keresztül mutatjuk be. Ezt a STARTDIR/apps/CntToLedsAndRfm könyvtárban találjuk meg. Ez az alkalmazás annyit csinál hogy 4Hz –es sebességgel elküld egy bájtot, az égőit (led) pedig az elküldött bájt utolsó három bitje szerint állítja be. A TOSSIM létrehozásához lépjünk be a STARTDIR/apps/CntToLedsAndRfm könyvtárba, majd adjuk ki a make pc parancsot. Ez a parancs létrehozza a STARTDIR/apps/CntToLedsAndRfm/build/pc/main.exe futtatható állományt , ami maga a TOSSIM. A build/pc/main.exe –help paranccsal segítséget kaphatunk a parancssori használathoz.
A TOSSIM –nak paraméterként csak azt kell megadnunk, hogy hány csomóponttal (node, azaz a virtuális eszközök száma.) fusson a szimuláció. Futtassuk a build/pc/main.exe 1 parancsot.
Alapértelmezett esetben a TOSSIM minden információt kiír az outputra. Így az ember számára feldolgozhatatlan információt kapunk. A DBG környezeti változó beállításával azonban ki tudjuk választani, hogy mely információkra vagyunk kíváncsiak. Állítsuk be a DBG-t úgy, hogy csak a LED és az AM (active message) csomagokat írja ki. Ezt az export DBG=am,led paranccsal tehetjük meg.
Most futtassuk újra a build/pc/main.exe 1 parancsot.
A kapott outputot [persze csak egy kis ideig futott a tesztelés, aztán Ctrl-C-vel leállítottam]:
Az első néhány sor:
0: LEDS: Red off.
0: LEDS: Yellow off.
0: LEDS: Green off.
0: LEDS: Red on.
0: LEDS: Green off.
0: LEDS: Yellow off.
0: Sending message: ffff, 4
ff ff 04 7d 08 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0: LEDS: Red off.
0: LEDS: Green on.
0: LEDS: Yellow off.
0: Sending message: ffff, 4
ff ff 04 7d 08 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 dd 40 00 00 00 00 80 bb 00 00
0: LEDS: Red on.
0: LEDS: Green on.
0: LEDS: Yellow off.
0: Sending message: ffff, 4
ff ff 04 7d 08 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 a8 88 00 00 00 00 2a 67 00 00
...
Az elküldött üzenet hatodik bájtja (ezek ki vannak emelve) tartalmazza a valódi üzenetet.
Ezek hexadecimális számokként vannak kiírva az outputra. Látható, hogy ezeknek a bájtoknak az utolsó három bitjét határozzák meg az égők (Yellow, Green, Red) sorrendben, azaz a Red az utolsó bit.
A sorok elején található „0: „ azt jelöli, hogy az outputra írt üzenet a 0 csomóponttól származik.
Ha a build/pc/main.exe 2 parancsot futtatjuk, akkor már megjelenik egy 1-es csomópont is.
A különböző DBG módokról szintén a build/pc/main.exe –help paranccsal kaphatunk információkat.
TinyViz: a TOSSIM felhasználói felülete
Ez egy Java alkalmazás, amely a TOSSIM által szolgáltatott adatokat vizualizálja.
Ha a rendszerünk (azaz a TinyOS) újonnan volt telepítve, akkor ezt az alkalmazást még le kell fordítani.
Ehhez egyszerűen lépjünk a STARTDIR/tools/java/net/tinyos/sim könyvtárba, majd hajtsuk végre a make parancsot.
Ez létrehozza a tinyviz.jar java fájlt, amit az ugyanebben a könyvtárban található tinyviz szripttel futtatni tudunk.
Érdemes beállítani ehhez a könyvtárhoz az elérési utat: PATH=$PATH:/opt/tinyos-1.x/tools/java/net/tinyos/sim
A TinyViz –t a TestTinyViz alkalmazással mutatjuk be, amely a STARTDIR/apps/TestTinyViz könyvtárban taláható.
Fordítsuk le a TOSSIM-et a már megismert módon:make pc.
Ezután állítsuk be a DBG-t: export DBG=usr1
Majd adjuk ki a tinyviz -run build/pc/main.exe 30 parancsot.
A plugins menűből válogathatjuk ki, hogy milyen plugin-ok legyenek aktívak.
Ezek a pluginok egymástól teljesen függetlenül futnak. Mi is tudunk ilyet készíteni.
Feladatuk az, hogy egy-egy adatcsomagot vizualizálnak A TinyViz ablak jobb oldalán láthatjuk a pluginok füleit.
Csak azokba tudunk beletekinteni, amelyek éppen aktívak. Ekkor az ezekhez tartozó fülek kijelölődnek.
Nézzünk meg néhány fontosabb plugin-t:
- Debug messages: ez a plugin listázza a debug üzeneteket. Tudunk az üzenetek között szelektálni és ki is tudunk jelölni kifejezéseket.
- Set breakpoint: meghatároz egy töréspontot, amikor a szimuláció leáll. Ez a töréspont jelenleg kétféle lehet: vagy egy debug üzenetben van valamilyen minta, vagy egy rádióüzenetben. Több töréspontot is fel lehet állítani és mindegyiket könnyen aktiválni, illetve passziválni lehet.
- Sent radio packets: minden rádióüzenetet listáz.
- Radio links: ez az egyik leg látványosabb eleme a TinyViz-nek. Ha egy csomópont szétsugároz (broadcast) egy üzenetet, akkor ezt a TinyViz úgy jeleníti meg, hogy egy kört rajzol a csomópont köré, ha egy csomópont egy másik csomóponthoz küld üzenetet, akkor ezt egy nyíl jelzi. Teljesen mindegy, hogy sikeres volt-e az üzenetátadás, a vizualizáláson ez mindenképp megjelenik.
- Radio model: alapvetően kétféle beépített modellt lehet szimulálni jelenleg a TinyViz-ben:
- „Empirical” : Egy RFM1000 rádió gyakorlatban megfigyelt közvetítő erejét szimulánja
- „Fixed radius” : Egy adott sugáron belül minden üzenet hibátlanul megérkezik, különben pedig elvész.
A skálázási faktorral egyszerűen csak valahányszorosára tudjuk állítani a csomópontok közötti távolságokat.
Állítsuk át, majd klikkeljünk az update gombra. Ezután egy ideig várnunk kell, majd elindul a szimuláció az új távolságokkal.
Amit klikkelgetéssel be tudunk állítani a TinyViz-ben azt egyszerűen meg tudjuk adni egy szkriptben is.
Ilyen szkript például a TestTinyViz könytárában található sample.autorun szkript:
# This is a sample TinyViz autorun file. To use it, run
# tinyviz -autorun sample.autorun
# Set the layout
layout gridrandom
# Enable some plugins
plugin DebugMsgPlugin
plugin RadioLinkPlugin
plugin RadioModelPlugin
# Total number of simulated seconds to run
numsec 10
# Name of the executable file
executable build/pc/main.exe
# DBG messages to include
dbg usr1
# The radio model and scaling factor to use
radiomodel disc100
radioscaling 5
# Number of motes
nummotes 20
# Command to run before starting
precmd echo "This is a command that will run before the simulation"
# File to log all DBG messages to
logfile logfile-20.txt
# The blank line above indicates that we are starting another simulation
# This time run with a different number of motes
nummotes 30
logfile logfile-30.txt
Ez a fájl kétféle szimulációt definiál: az egyet 20 csomóponttal, egy másikat 30-al. Mindkettő debug üzenetei külön logfájlba archiválódnak.
Futtatás: tinyviz -autorun sample.autorun
Hibák
Sajnos a TinyViz nem tökéletes. Nem mindig működik úgy, ahogyan logikus lenne.
Volt, hogy a
tinyviz -run build/pc/main.exe 30 parancsot nem megfelelően hajtotta végre, egyszerűen a csomópontok leálltak.
Úgy viszont hajlandó volt végrehajtani, hogy:
DBG= tinyviz -run build/pc/main.exe 30. Ez számomra kicsit érthetetlen.
A
tinyviz -autorun sample.autorun parancsnál is gondok akadtak. Itt azt írta ki, hogy nem tudja felvenni a kapcsolatot a csomópontokkal, mivel nem találja a cygwin1.ddl-t.
Megnéztem az útvonalban és elérhető volt onnan. Aztán újratelepítettem az egész TinyOS-t, de nem segített. Nem tudom, mi lehet a hiba. 3-4 óra keresgélés után feladtam.
Valószínűleg én ronthattam el valamit. A legfurcsább, hogy az első telepítés után minden tökéletesen működött.