2014. október hónap bejegyzései

Szimulációk automatizált futtatása

Gyakori eset, hogy egy tudományos kérdés vizsgálatára számos szimulációt kell futtatni különböző paraméterekkel. A szimulációk egyenkénti futtatása nem a legkényelmesebb, hiszen egy-egy szimuláció órákig is eltarthat, és figyelni kell, mikor indíthatjuk a következőt. Jobb megoldás az automatizált végrehajtás, ekkor a szimulációk paraméterezését nem feltétlenül triviális úgy végrehajtani, hogy közben karbantartható maradjon a kód. Éppen ezért fejlesztettem ki egy olyan környezetet szimulációk automatizált futtatására, mely a korábban ismertetett paraméterezésen alapul.

Az egymás után futtatandó szimulációkat egyszerűen, egy táblázatban lehet paraméterezni, ahol az egymás utáni oszlopok tartalmazzák az egymás utáni paramétereket. A szimulációt végrehajtó VI-t dinamikusan lehet betölteni. A VI-nak megadott be és kimenetekkel (is) kell rendelkeznie ahhoz, hogy a rendszerbe integrálható legyen, a szimulációt végrehajtó kódba viszont csak néhány subVI-t kell beilleszteni. Ezzel a megoldással könnyű olyan szimulációkat írni, melyek futtatását a keretprogrammal kényelmesen végre lehet hajtani.

A környezet a következő fő funkciókkal rendelkezik:

  • Szimulációk egyszerű konfigurálhatósága
  • Munkakönyvtár meghatározása
  • Szimulációk dinamikus betöltése (a VI front panelje is követhető)
  • Hátralévő iterációk és idő előrejelzése
  • Félbehagyott szimulációk folytatása

A környezet továbbfejlesztését is tervezem többek között a következő funkciókkal:

  • Egy futtatás során különböző szimulációs VI-ok betöltése
  • Konfigurációs fájlok betöltése az egyes iterációkhoz
  • Szimulációk futtatása több gépen, párhuhamosan

A következő képeken bemutatok néhány képernyőképet és a feladatok végrehajtását VI-t.

Feladatok végrehajtása

Feladatok végrehajtása

A szimulációt végrehajtó VI front panelje futtatás közben

A szimulációt végrehajtó VI front panelje futtatás közben

A keretprogram diagramja

A keretprogram diagramja

A program még fejlesztés alatt áll, de kérésre bárkinek elküldöm a forrásokat.

Szimulációk paraméterezése LabVIEW-ban, karbantartható módon

LabVIEW szimulációk késztésekor gyakori probléma, hogy az egyes programokat, illetve subVI-kat folyamatosan bővítjük új funkciókkal, így nehéz egy olyan szimulációs környezetet létrehozni az adott problémára, mely jól átlátható és jól karbantartható.

Amennyiben nem használunk subVI-okat, akkor minden egyes új funkció hozzáadásával programunk egyre inkább hasonlítani fog egy spagetti VI-ra. Ezen a problémán a subVI-ok bevezetése sem fog önmagában segíteni, ugyanis egyre több paraméter kell az egyes subVI-okba bekötni. A paraméterek számának növekedését jól lehet kezelni clusterekkel. Amennyiben várható, hogy egy-egy ilyen clustert egynél több helyen használunk, azonnal célszerű belőle típusdefiníciót készíteni. Így a kódot később is jól karban tudjuk majd tartani, az egyes típusdefiníciókat ugyanis később át tudjuk szerkeszteni, a változást pedig a projekt összes VI-a köveni fogja.

A típusdefiníciók használata általában egy jól követhető és karbantartható kódot eredményez. Azonban, főleg szimulációk kötegelt futtatásánál, rengeteg paramétert kell jól kézben tarthatóan kezelni, erre pedig a sok-sok, beálltásokat tartalmazó cluster nem feltétlenül a legjobb megoldás. Számos próbálkozás után arra jutottam, hogy a legtöbb feladatot jól meg lehet oldani, hogy ha a paramétereket egy 2D táblázatban tárolom el. A táblázat első oszlopa tartalmazza a paraméterek nevét. A második oszloptól kezdve pedig az egyes iterációkban felhasználandó paraméterértékek vannak. Ha egy paraméter értéke nem változik, akkor annak értékét elég a második oszlopban feltűntetni. A következő ábrán egy példa látható a paraméterekre. A LoopCount határozza meg az iterációk számát. Az éppen változtatott paraméter az R-Wire, a többi paraméter állandó a szimuláció során.

Minta konfigurációs táblázatra

Minta konfigurációs táblázatra

A következő ábrákon a szimulációs program blokkdiagramja látható. Minden egyes iterációban egy-egy oszlop van kiválasztva a konfigurációs táblázatból, ez van átadva a szimulációt végző VI-nak. A konfigurációs beálltások minden egyes subVI-hoz eljutnak. Amennyiben egy új funkcióval bővül a szimuláció, elegendő csak a táblázatot módosítani, valamint az éppen érintett subVI-t.

Szimulációs program mely oszloponként olvassa ki a konfigurációs paramétereket

Szimulációs program mely oszloponként olvassa ki a konfigurációs paramétereket

Szimulációt végrehajtó subVI - 1 szint

Szimulációt végrehajtó subVI - 1. szint

Szimulációt végrehajtó subVI 2. szint

Szimulációt végrehajtó subVI 2. szint

Szimulációt végrehajtó subVI 3. szint

Szimulációt végrehajtó subVI 3. szint

A konfigurációs fájlok kezelésére egy saját függvénykönyvtárat késztettem, kérés esetén ezt szívesen rendelkezésre bocsájtom (jelenleg még szerkesztés alatt van). A konfigurációs adatok mentésére és betöltésére két lehetőség is van: maga a fő VI is felkészthető az adatok betöltésére és mentésére (főleg, ha egyéb ok miatt eleve szükség van eseményvezérelt programozásra), de egy külső VI-n keresztül is elérhetjük a konfigurációs táblázatot.

Konfigurációs táblázat szerkeztése

Segédprogram a konfigurációs táblázat szerkeztésére

Megjelent: Bithibák a KLJN biztonságos kulcsmegosztó protokolban

A Hot-PI konferencián Kish László által előadott eredmények megjelentek a konferenciakötetben is. A eredeti, angol nyelvű cím: ”Bit Errors in the Kirchhoff-Law-Johnson-Noise Secure Key Exchange”

Az absztrakt magyarul:

A cikkben osztályozzunk és megvizsgáljuk a bit hibákat feszültség és áramerősség mérési üzemmódokban a KLJN biztonságos kulcsmegosztó rendszerben. Mindkét mérési módban, adott sávszélesség mellett, a hiba valószínűsége exponenciálisan csökken, ahogy nő a bitcsere időtartama. Ugyancsak bemutatunk egy hibacsökkentő módszert, mely a feszültség és áramerősség alapú módszer kombinációján alapul. A módszer lényegesen pontosabb és lényegesen kevesebb hibás bit-et okoz mint a korábbi módszerek, valamint szintén exponenciális függést mutat a bitcsere időtartamával.

A teljes cikket itt lehet elérni: http://www.worldscientific.com/doi/abs/10.1142/S2010194514603676  (International Journal of Modern Physics: Conference Series, Volume 33, 2004)