AZ ÉSZLELŐPROGRAM LEÍRÁSA
A program listája mellékletként megtalálható, valamint a lemezen is
szerepel forráskódban. Az ebben a fejezetben szereplő oldalszámok a
nyomtatott listára vonatkoznak.
Egy kész programot alakítottam át. Ez folyamatosan figyeli az ADC-ről
jövő jeleket, de nem tárolja mindet. Mivel az alapzajra nem vagyunk
kíváncsiak, csak egy bizonyos szint felett kezd el rögzíteni. Ennek
vizsgálata az Evaluation eljárásban történik (5. oldal).
A programnak kétfajta üzemmódja lehetséges. Az egyik esetben állandó
szinttől vág. A második esetben viszont átlagolja a beérkező jeleket, és a
vágási szintet ettől függően állítja be. A vágási szint az alapzajszint
2,5%-a. Ha az alapzajtól való eltérés ennél nagyobb, akkor kezd el
rögzíteni. Egy meteor jele légköri mozgások, és egyéb okok miatt többször is
felerősödhet. Emiatt a program egészen addig rögzít, míg a jel az átlagos
alá nem megy Előfordulhat, hogy emiatt két egymást követő meteort egynek
vesz, de ezt az adatok utólagos vizsgálatánál kiszűrhetjük.
Rögzítéskor a következő adatok kerülnek a winchesterre: a meteor sorszáma
(minden egyes adatnál), a mérés időpontja (perc, másodperc,
századmásodperc), a jelszint és az átlagtól való eltérés. Ez utóbbi két adat
esetében közvetlenül az ADC által szolgáltatott 12 bites egész számot
rögzítem (nem számolom át feszültségre).
Sajnos a DOS csak másodpercenként tizennyolcszor állítja a belső óráját,
így több adat azonos idővel szerepel. Gondoltam rá, hogy esetleg az
időadatokat utólag egyenletes időközökre "széthúzzam", de az adatok enélkül
is alkalmasak voltak a kiértékelésre.
A program óránként új fájlt nyit (OpenNewDataFile eljárás). Ez azért
célszerű, mert így, ha a program esetleg valami miatt leáll, csak az utolsó
óra adatai vesznek el. A fájl neve (pl. 07150322.dat) tartalmazza a
megnyitásának napját (7-ike), időpontját (15 óra 3 perc 22 másodperc). Ebből
tehát minden adat esetében tudjuk, melyik órában történt a rögzítése.
A program indításkor kiszámolja az első ezer észlelés átlagát. Ebből
számítja ki a vágás szintjét. Ezután a program az "s" billentyűvel
indítható. Az észlelés ideje alatt az autoexec.bat fájlba beírtam, hogy a
programot auto paraméterrel indítsa. Ilyenkor az észlelés az átlagszámítás
után automatikusan indul. Így a gép egy esetleges áramkimaradás után újra
indul.
A mentés idejének csökkentése érdekében a szokásos cache programok közül
az nwcache-t alkalmaztam.
A főprogram (6. old.) legelőször az Init eljárást (2. old.) hívja meg,
amely beállítja a változók kezdő értékeit, nullázza az átlagoláshoz használt
tömböt. A Form eljárás (3. oldal) megrajzolja a keretet, amibe azután az
adatokat írjuk. A képernyőkép kerete teljes egészében a 7. oldalon
található. A program további része egy végtelen ciklus (repeat ... until
False;). Ennek belső ciklusa gombnyomásig figyeli az ADC-ről jövő jeleket.
Gombnyomás esetén a leütött billentyűtől függően különböző változtatásokat
hajt végre. A program részletezését ezzel a résszel kezdem.
Ha "B"-t nyomtunk, a program BackGroundMes (Háttérmérés) eljárást (4.
oldal) hívja. Ez leállítja az adatok képernyőre való kiírását, a program
mindenféle visszajelzés nélkül működik. Ezt úgy éri el, hogy a BackGrnd
logikai változónak igaz értéket ad. Ugyanezzel a billentyűvel érhetjük el az
eredeti állapot visszaállítását.
Az észlelés ─ és egyben a program ─ leállítása a "Q" billentyű
lenyomásával lehetséges. Ekkor a program futása a ReallyQuit (4. old.)
eljárásra ugrik. Megkérdezi, hogy a felhasználó valóban be akarja-e fejezni
a mérést. Igenlő válasz esetén a program bezárja a megnyitott fájlt, és
Halt(0) utasítással kilép a programból. Más gomb nyomására a program
zavartalanul folytatódik.
Alapértelmezésben a program az utolsó 1000 adat átlagát számolja, ez az
alapzajszint. Az átlagolandók számát a program futása közben is
változtathatjuk 100 és 2000 között tízesével a + és a - gombokkal.
Állításkor a program a tömböt és az utolsó jelek összegét (SumSig) nullázza.
Emiatt az átlag ilyenkor nulláról fut fel. Ilyenkor tehát, amíg az átlag
ismét be nem áll az eredeti szintre, addig folyamatosan a vágási határ
felett lenne a mért jel, folyamatosan rögzítene. Hogy ezt elkerüljük
ilyenkor az Operated logikai változónak igaz értéket ad. Amíg ez igaz, addig
a program nem rögzíti az mért adatokat. A hamis értéket az Evaluation
eljárás állítja vissza, amikor a mért adat alapzajszinttől való eltérése
feleakkora mint a vágási határ.
Ha az észlelés folyamán valamilyen okból új fájlt szeretnénk nyitni, ezt
az "O" billentyű megnyomásával tehetjük meg. Ez az OpenNewDataFile eljárást
(2. oldal) hívja meg, amely bezárja az eredeti fájlt, leolvassa a DOS
óráját, ebből előállítja az adatfájl nevét.
A program indításkor a vágási szintet folyamatosan állítja. Ha át akarunk
térni állandó vágási szintre, az "A" gombot kell lenyomnunk. Ekkor az
AutoCut logikai változó értékét hamisra állítja. A vágási szint 10-re áll.
Az A gomb újabb megnyomása esetén az eredeti állapot visszaáll. Lehetőség
van állandó szintű vágás esetén a vágási szint állítására a "<" és ">"
gombokkal.
Ha még nem indult el az észlelés, az "S" billentyű lenyomásával
indíthatjuk el. Ekkor a Start eljárás (6. oldal) hajtódik végre. Ez a
Started logikai értékét igazra állítja. A dátumot és időpontot bekéri és
kiírja a képernyőre. Megnyitja az adatfájlt. A gombnyomás vizsgálata után a
program visszatér az adatok méréséhez.
Az adatok olvasását, rögzítését a főprogram belső ciklusa végzi (repeat
... until Keypressed;) Egymás után kétszer kér be adatot az ADC-ről, ezeket
átlagolja, a számunkra szükségtelen hirtelen változásokat kiszűrve ezzel. Az
ADC olvasását a ReadSignal függvény (3. oldal) végzi. Ez beállítja a mérés
csatornáját, trigger jelet küld ki. Megvárja míg a konverter kész nem lesz
az adattal. Ezután leolvassa az időt. Ha az észlelés elkezdődött és új óra
kezdődött (a perc 59-ről 0-ra váltott), a program új adatfájlt nyit.
Az Evaluation eljárás (5. oldal) végzi az adatok értékelését. Először az
utolsó 1000 adat összegét korrigálja. Az utolsó értékek összegéből levonja a
legrégebben tömbbe vitt adatot, majd hozzáadja az új jelet és ezt írja a
tömbbe a régi adat helyére. A tömb megfelelő elemére a WrPtr változó mutat.
Ezután az új átlagot számolja ki, majd a jel eltérését ettől. Kiszámolja a
vágási szintet. Amikor az eltérés ezt a szintet meghaladja, akkor kezd el
rögzíteni a program. Ha a program meteort észlelt, a vágási határt gyorsan
nullára csökkenti (minden ciklusban 0,3-mal szorozza). Csak azután fejezi be
a rögzítést, ha a meteorjel ez alá a csökkentett szint alá megy.
Az adatok rögzítését a GetMeteorData eljárás (5. oldal) végzi. Ha csak
most kezdett el rögzíteni a program, jelzi a képernyőn, hogy meteort talált.
Növeli az összes és az utolsó órában talált meteorok számát. A MeteorFound
változó értékét igazra álltja. A rögzítés ideje alatt a program nem számol
új vágási szintet. Ezt az AutoCut logikai változó hamisra állításával éri
el. Eredeti értékét a TMPBool őrzi, és a meteor eltűnte után innen íródik
vissza. Ezután a meteor adatait kiírja az adatfájlba a következő
formátumban:
FType = Record
Num : Word;
Min : Byte;
Sec : Byte;
TSec: Byte;
Value : Word;
Diff: Real;
End;
A főprogramba való visszatéréskor írja ki az adatokat a képernyőre
(Display eljárás; 3. oldal). A ciklus utolsó sora megvizsgálja, hogy a
program indításakor használtuk-e az auto paramétert. Ekkor a program a már
részletezett Start eljárással elindítja az észlelést, miután az átlagolás
megtörtént.