Efektem prawie każdego doświadczenia w laboratorium IBW są pliki z pomiarami. Program DAQUIS zapisuje pomierzone wartości w plikach binarnych o formacie INT. Ten format ma już ponad 20 lat i znacząco zmieniał się w przeciągu tych lat. Istotą tego formatu było przechowywanie danych pomiarowych w formacie danych dostarczanych przez kartę pomiarową. Jedyny wyjątek dotyczył kart pomiarowych, które nie obsługiwały wartości ze znakiem (w kodzie uzupełnienia do 2). Jeśli 12-bitowa karta pomiarowa przekazywała wartości 0 do 4095 (np. dla napięć -5V od +5V) to program odbierający dane z karty pomiarowej, odejmował od nich wartość 2048 i w pliku były zapisywane wartości w zakresie -2048 do 2047 w 16-bitowym kodzie uzupełnienia do 2. Ostatnio została zakupiona 16-bitowa karta pomiarowa firmy Advantech (PCI-1747U) i pliki pomiarowe INT zarejestrowane tą kartą będą miały wartości w zakresie -32768 do 32767.
Wspólną cechą wszystkich formatów INT jest brak wartości czasu. Te pliki zakładają stały krok czasowy a początek pomiaru zawsze w chwli czasu t=0s. Każdy plik w format INT składa się z nagłówka i danych pomiarowych. Pierwszy format INT miał bardzo prosty nagłówek:
0 | double | Fp | częstotliwość próbkowania w Hz |
8 | unsigned char | Nc | liczba pomierzonych kanałów |
9 | unsigned char | Type | znacznik typu pliku zawsze równy 0 |
10 | unsigned int | Ns | liczba pomierzonych próbek w każdym kanale |
14 | 16 x double | Fact | 16 współczyników kalibracyjnych (po jednym na kanał) |
Potem następują dane pomiarowe: kanał pierwszy od próbki pierwszej do Ns-tej, kanał drugi od próbki 1 do N-tej itd. aż do kanału o numerze Nc. Każda próbka zajmowałą 2 bajty. Bardzo łatwo było oczacować wielkość pliku w bajtach: 142 + 2*Nc*Ns. Wartość rzeczywistą pomierzonego parametry otrzymywało się mnożąc wartość próbki przez współczynnik Fact w danym kanale. Teoretycznie ten format może przechować 256 kanałów po 4294967296 próbek (plik miał by wielkość 2TB).
Następny format INT miał dane pomiarowe przechowywane w identyczny sposób. Zmienił się tylko nagłówek. Zostały dodane nagłówki poszczególnych kanałów:
0 | double | Fp | częstotliwość próbkowania w Hz |
8 | unsigned char | Nc | liczba pomierzonych kanałów |
9 | unsigned char | Type | znacznik typu pliku zawsze równy 2 |
10 | unsigned int | Ns | liczba pomierzonych próbek w każdym kanale |
14 | unsigned int | DateTime | zakodowana data i czas pomiaru z dokładnością do dwóch sekund |
18 | unsigned char | TitleLen | liczba znaków w tytule pomiary |
19 | 60 x char | Title | tytuł pomiaru, niewykorzystane znaki mają wartość nieokreśloną |
79 | double | Fact(1) | współczynik kalibracyjnych pierwszego kanału |
87 | unsigned char | UnitLen(1) | liczba znaków w nazwie jednostki |
88 | 7 x char | Unit(1) | nazwa jednostki |
95 | unsigned char | ChannelLen(1) | liczba znaków w nazwie kanałów |
96 | 40 x char | Channel(1) | nazwa nakału |
136 | double | User1(1) | pierwszy parametr użytkownika |
144 | double | User2(1) | drugi parametr użytkownika |
152 | double | User3(1) | trzeci parametr użytkownika |
160 | double | User4(1) | czwarty parametr użytkownika |
168 | double | User5(1) | piąty parametr użytkownika |
176 | double | Fact(2) | współczynik kalibracyjnych drugiego kanału |
184 | unsigned char | UnitLen(2) | liczba znaków w nazwie jednostki |
185 | 7 x char | Unit(2) | nazwa jednostki |
192 | unsigned char | ChannelLen(2) | liczba znaków w nazwie kanałów |
193 | 40 x char | Channel(2) | nazwa nakału |
233 | double | User1(2) | pierwszy parametr użytkownika |
241 | double | User2(2) | drugi parametr użytkownika |
249 | double | User3(2) | trzeci parametr użytkownika |
257 | double | User4(2) | czwarty parametr użytkownika |
265 | double | User5(2) | piąty parametr użytkownika |
273 | double | Fact(3) | współczynik kalibracyjnych trzeciego kanału |
... | ... | ... | ... |
Potem następują dane pomiarowe: kanał pierwszy od próbki pierwszej do Ns-tej, kanał drugi od próbki 1 do N-tej itd. aż do kanału o numerze Nc. Każda próbka zajmowałą 2 bajty. Aby oczacować wielkość pliku w bajtach należy wykonać działanie: 79 + 97*Nc + 2*Nc*Ns. Wartość rzeczywistą pomierzonego parametry otrzymywało się mnożąc wartość próbki przez współczynnik Fact(i) w danym kanale.
Krótko po opracowaniu tego formatu okazało się konieczne wzbogacenie współczynnika kalibracyjnego o wartość stałego przesunięcia. Aby nie zmieniać nagłówka wykorzystano liczbę User1 na wartość przesunięcia:
0 | double | Fp | częstotliwość próbkowania w Hz |
8 | unsigned char | Nc | liczba pomierzonych kanałów |
9 | unsigned char | Type | znacznik typu pliku zawsze równy 3 |
10 | unsigned int | Ns | liczba pomierzonych próbek w każdym kanale |
14 | unsigned int | DateTime | zakodowana data i czas pomiaru z dokładnością do dwóch sekund |
18 | unsigned char | TitleLen | liczba znaków w tytule pomiary |
19 | 60 x char | Title | tytuł pomiaru, niewykorzystane znaki mają wartość nieokreśloną |
79 | double | Fact(1) | współczynik kalibracyjnych pierwszego kanału |
87 | unsigned char | UnitLen(1) | liczba znaków w nazwie jednostki |
88 | 7 x char | Unit(1) | nazwa jednostki |
95 | unsigned char | ChannelLen(1) | liczba znaków w nazwie kanałów |
96 | 40 x char | Channel(1) | nazwa nakału |
136 | double | Const(1) | stałe przesunięcia dla kanału pierwszego |
144 | double | User1(1) | pierwszy parametr użytkownika |
152 | double | User2(1) | drugi parametr użytkownika |
160 | double | User3(1) | trzeci parametr użytkownika |
168 | double | User4(1) | czwarty parametr użytkownika |
176 | double | Fact(2) | współczynik kalibracyjnych drugiego kanału |
184 | unsigned char | UnitLen(2) | liczba znaków w nazwie jednostki |
185 | 7 x char | Unit(2) | nazwa jednostki |
192 | unsigned char | ChannelLen(2) | liczba znaków w nazwie kanałów |
193 | 40 x char | Channel(2) | nazwa nakału |
233 | double | Const(2) | stałe przesunięcia dla kanału drugiego |
241 | double | User1(2) | pierwszy parametr użytkownika |
249 | double | User2(2) | drugi parametr użytkownika |
257 | double | User3(2) | trzeci parametr użytkownika |
265 | double | User4(2) | czwarty parametr użytkownika |
273 | double | Fact(3) | współczynik kalibracyjnych trzeciego kanału |
... | ... | ... | ... |
Potem następują dane pomiarowe: kanał pierwszy od próbki pierwszej do Ns-tej, kanał drugi od próbki 1 do N-tej itd. aż do kanału o numerze Nc. Każda próbka zajmowałą 2 bajty. Aby oczacować wielkość pliku w bajtach należy wykonać działanie: 79 + 97*Nc + 2*Nc*Ns. Wartość rzeczywistą pomierzonego parametry otrzymywało się mnożąc wartość próbki przez współczynnik Fact(i) i dodając wartość Const(i) w danym kanale.
W miarę rozwoju stanowisk pomiarowych okazało się, że zamiana kolejności próbek z danymi okazała się uciążliwa i czasochłonna. Wszystkie karty pomiarowe przekazują próbki w kolejności ich mierzenia, czyli Nc pomiarów w kolejnych kanałach, potem następna seria Nc pomiarów w kolejnych kanałach i tak dalej aż do serii Ns. Tą zmianę kolejności można przyrównać do transpozycji macierzy. W nagłówku pliku INT zmienił się tylko znacznik typu:
0 | double | Fp | częstotliwość próbkowania w Hz |
8 | unsigned char | Nc | liczba pomierzonych kanałów |
9 | unsigned char | Type | znacznik typu pliku zawsze równy 4 |
10 | unsigned int | Ns | liczba pomierzonych próbek w każdym kanale |
14 | unsigned int | DateTime | zakodowana data i czas pomiaru z dokładnością do dwóch sekund |
18 | unsigned char | TitleLen | liczba znaków w tytule pomiary |
19 | 60 x char | Title | tytuł pomiaru, niewykorzystane znaki mają wartość nieokreśloną |
79 | double | Fact(1) | współczynik kalibracyjnych pierwszego kanału |
87 | unsigned char | UnitLen(1) | liczba znaków w nazwie jednostki |
88 | 7 x char | Unit(1) | nazwa jednostki |
95 | unsigned char | ChannelLen(1) | liczba znaków w nazwie kanałów |
96 | 40 x char | Channel(1) | nazwa nakału |
136 | double | Const(1) | stałe przesunięcia dla kanału pierwszego |
144 | double | User1(1) | pierwszy parametr użytkownika |
152 | double | User2(1) | drugi parametr użytkownika |
160 | double | User3(1) | trzeci parametr użytkownika |
168 | double | User4(1) | czwarty parametr użytkownika |
176 | double | Fact(2) | współczynik kalibracyjnych drugiego kanału |
184 | unsigned char | UnitLen(2) | liczba znaków w nazwie jednostki |
185 | 7 x char | Unit(2) | nazwa jednostki |
192 | unsigned char | ChannelLen(2) | liczba znaków w nazwie kanałów |
193 | 40 x char | Channel(2) | nazwa nakału |
233 | double | Const(2) | stałe przesunięcia dla kanału drugiego |
241 | double | User1(2) | pierwszy parametr użytkownika |
249 | double | User2(2) | drugi parametr użytkownika |
257 | double | User3(2) | trzeci parametr użytkownika |
265 | double | User4(2) | czwarty parametr użytkownika |
273 | double | Fact(3) | współczynik kalibracyjnych trzeciego kanału |
... | ... | ... | ... |
Potem następują dane pomiarowe: pierwsza seria pomiarów w kanałach od 1 do Nc, druga seria pomiarów w kanałach od 1 do Nc itd. aż do serii o numerze Ns. Każda próbka zajmowała 2 bajty. Aby oczacować wielkość pliku w bajtach należy wykonać działanie: 79 + 97*Nc + 2*Nc*Ns. Wartość rzeczywistą pomierzonego parametry otrzymywało się mnożąc wartość próbki przez współczynnik Fact(i) i dodając wartość Const(i) w danym kanale.
Program pomiarowy DAQUIS zapisuje pliki pomiarowe wyłącznie w tym ostatnim formacie INT. Na potrzeby programu WINFI32 zostały opracowane jeszcze dwa formaty danych. Mimo, że mają one rozszerzenie INT to nie przechowują wartości typu całkowitego, a wartości zmiennoprzecinkowe pojedynczej precyzji. W nagłówku pliku INT zmienił się tylko znacznik typu oraz pola Frac(i) i Const(i):
0 | double | Fp | częstotliwość próbkowania w Hz |
8 | unsigned char | Nc | liczba pomierzonych kanałów |
9 | unsigned char | Type | znacznik typu pliku zawsze równy 5 |
10 | unsigned int | Ns | liczba pomierzonych próbek w każdym kanale |
14 | unsigned int | DateTime | zakodowana data i czas pomiaru z dokładnością do dwóch sekund |
18 | unsigned char | TitleLen | liczba znaków w tytule pomiary |
19 | 60 x char | Title | tytuł pomiaru, niewykorzystane znaki mają wartość nieokreśloną |
79 | double | Fact(1) | współczynik kalibracyjnych pierwszego kanału zawsze równy 1.0 |
87 | unsigned char | UnitLen(1) | liczba znaków w nazwie jednostki |
88 | 7 x char | Unit(1) | nazwa jednostki |
95 | unsigned char | ChannelLen(1) | liczba znaków w nazwie kanałów |
96 | 40 x char | Channel(1) | nazwa nakału |
136 | double | Const(1) | stałe przesunięcia dla kanału pierwszego zawsze równy 0.0 |
144 | double | User1(1) | pierwszy parametr użytkownika |
152 | double | User2(1) | drugi parametr użytkownika |
160 | double | User3(1) | trzeci parametr użytkownika |
168 | double | User4(1) | czwarty parametr użytkownika |
176 | double | Fact(2) | współczynik kalibracyjnych drugiego kanału zawsze równy 1.0 |
184 | unsigned char | UnitLen(2) | liczba znaków w nazwie jednostki |
185 | 7 x char | Unit(2) | nazwa jednostki |
192 | unsigned char | ChannelLen(2) | liczba znaków w nazwie kanałów |
193 | 40 x char | Channel(2) | nazwa nakału |
233 | double | Const(2) | stałe przesunięcia dla kanału drugiego zawsze równy 0.0 |
241 | double | User1(2) | pierwszy parametr użytkownika |
249 | double | User2(2) | drugi parametr użytkownika |
257 | double | User3(2) | trzeci parametr użytkownika |
265 | double | User4(2) | czwarty parametr użytkownika |
273 | double | Fact(3) | współczynik kalibracyjnych trzeciego kanału zawsze równy 1.0 |
... | ... | ... | ... |
Potem następują dane pomiarowe: pierwsza seria próbek w kanałach od 1 do Nc, druga seria próbek w kanałach od 1 do Nc itd. aż do serii o numerze Ns. Każda próbka zajmowała 4 bajty. Aby oczacować wielkość pliku w bajtach należy wykonać działanie: 79 + 97*Nc + 4*Nc*Ns. W tym pliku są przechowywane wartości rzeczywiste i nie trzeba ich przez nic mnożyć i niczego dodawać.
Ostatni format INT różni się tylko o poprzedniego typem przechowywanych wartości. zamiast liczb rzeczywistych pojedynczej precyzji przechowuje liczby zespolone pojedynczej precyzji. W nagłówku pliku INT zmienił się tylko znacznik typu:
0 | double | Fp | częstotliwość próbkowania w Hz |
8 | unsigned char | Nc | liczba pomierzonych kanałów |
9 | unsigned char | Type | znacznik typu pliku zawsze równy 6 |
10 | unsigned int | Ns | liczba pomierzonych próbek w każdym kanale |
14 | unsigned int | DateTime | zakodowana data i czas pomiaru z dokładnością do dwóch sekund |
18 | unsigned char | TitleLen | liczba znaków w tytule pomiary |
19 | 60 x char | Title | tytuł pomiaru, niewykorzystane znaki mają wartość nieokreśloną |
79 | double | Fact(1) | współczynik kalibracyjnych pierwszego kanału zawsze równy 1.0 |
87 | unsigned char | UnitLen(1) | liczba znaków w nazwie jednostki |
88 | 7 x char | Unit(1) | nazwa jednostki |
95 | unsigned char | ChannelLen(1) | liczba znaków w nazwie kanałów |
96 | 40 x char | Channel(1) | nazwa nakału |
136 | double | Const(1) | stałe przesunięcia dla kanału pierwszego zawsze równy 0.0 |
144 | double | User1(1) | pierwszy parametr użytkownika |
152 | double | User2(1) | drugi parametr użytkownika |
160 | double | User3(1) | trzeci parametr użytkownika |
168 | double | User4(1) | czwarty parametr użytkownika |
176 | double | Fact(2) | współczynik kalibracyjnych drugiego kanału zawsze równy 1.0 |
184 | unsigned char | UnitLen(2) | liczba znaków w nazwie jednostki |
185 | 7 x char | Unit(2) | nazwa jednostki |
192 | unsigned char | ChannelLen(2) | liczba znaków w nazwie kanałów |
193 | 40 x char | Channel(2) | nazwa nakału |
233 | double | Const(2) | stałe przesunięcia dla kanału drugiego zawsze równy 0.0 |
241 | double | User2(2) | pierwszy parametr użytkownika |
249 | double | User3(2) | drugi parametr użytkownika |
257 | double | User4(2) | trzeci parametr użytkownika |
265 | double | User5(2) | czwarty parametr użytkownika |
273 | double | Fact(3) | współczynik kalibracyjnych trzeciego kanału zawsze równy 1.0 |
... | ... | ... | ... |
Potem następują dane pomiarowe: pierwsza seria próbek w kanałach od 1 do Nc (pary realis i imaginaris), druga seria próbek w kanałach od 1 do Nc (pary realis i imaginaris) itd. aż do serii o numerze Ns. Każda próbka zajmowała 8 bajtów. Aby oczacować wielkość pliku w bajtach należy wykonać działanie: 79 + 97*Nc + 8*Nc*Ns. W tym pliku są przechowywane wartości rzeczywiste i nie trzeba ich przez nic mnożyć i niczego dodawać.
Program WINFI32 potrafi odczytać i zapisać jeszcze dwa inne formaty danych: format tekstowy i format M11.
Format tekstowy jest to plik tekstowy z pomiarami zapisanymi w kolumnach. W pierwszej kolumnie musi być zapisany czas, w drugiej i kolejnych, pomierzone wartości. Separatorem kolumn musi być znak tabulatora. Liczby rzeczywiste muszą mieć kropkę jako separator dziesiętny bez względu na bieżące ustawienia regionalne w komputerze. Pierwsza kolumna (z czasem) w rzeczywistości nie jest czytana z wyjątkiem dwóch pierwszych wartości. Ich rónica jest przyjmowana za krok czasowy i na tej podstawie jest przyjmowana częstotliwość próbkowania. Liczby są traktowane jako liczby rzeczywiste. Po przeczytaniu pliku, części urojone wszystkich liczb są równe zero.
Format pliku M11 jest potrzebny do generowania fali w kanale falowym. Tłok faloroba jest sterowany przez program WS, który akceptuje tylko pliki w formacie M11. Bufowa tego pliku jest rekordowa.Każdy rekord ma stałą długość 122 bajtów. Każdy rekord ma znacznik typu. Nagłówek pliku składa się z czterech rekordów o typach: 2, 5, 5, 0. Po nim następują po 3 rekordy opisujące każdy kanał (typy: 1, 3, 4). Na końcu są rekordy z danymi (po 15 wartości w każdym rekordzie). Pliki sterujące ruchem tłoka muszą mieć jeden kanał. Ogólna budowa rekordu jest następująca
0 | unsigned char | Type | znacznik typu rekordu |
1 | 120 x unsigned char | Data | dane zależne od typu |
121 | unsigned char | End | znacznik końca rekordu zawsze równy 127 |
Pierwszy rekord o typie 2 przechowuje informacje o długości pomiaru i kroku czasowym:
0 | unsigned char | Type | wartość 2 |
1 | unsigned char | wartość 1 | |
2 | 67 x unsigned char | zarezerwowane | |
69 | unsigned char | wartość 2 | |
70 | 11 x unsigned char | zarezerwowane | |
81 | double | Ns | liczba próbek |
89 | double | wartość 0,0444375 | |
97 | double | t0 | czas pierwszej pórbki w sekundach (powinno być 0.0) |
105 | double | dt | krok czasowy w sekundach |
113 | 8 x unsigned char | zarezerwowane | |
121 | unsigned char | End | wartość 127 |
Drugi rekord o typie 5 przechowuje nazwę pomiaru:
0 | unsigned char | Type | wartość 5 |
1 | 68 x char | Name | nazwa pomiaru uzupełniona na końcu zerami |
69 | unsigned char | wartość 2 | |
70 | 51 x unsigned char | zarezerwowane | |
121 | unsigned char | End | wartość 127 |
Trzeci rekord o typie 5 przechowuje nazwę jednostki czasu:
0 | unsigned char | Type | wartość 5 |
1 | 68 x char | Name | nazwa jednostki czasu uzupełniona na końcu zerami, powinno być "Sec" |
69 | unsigned char | wartość 2 | |
70 | 51 x unsigned char | zarezerwowane | |
121 | unsigned char | End | wartość 127 |
Czwarty rekord o typie 0 przechowuje numer typu pliku i nazwę pomiaru:
0 | unsigned char | Type | wartość 0 |
1 | unsigned short | Object | typ obiektu dla sterowania klapą musi być 30000 |
3 | 66 x char | Name | nazwa pomiaru uzupełniona na końcu zerami |
69 | unsigned char | wartość 2 | |
70 | 51 x unsigned char | zarezerwowane | |
121 | unsigned char | End | wartość 127 |
Pierwszy rekord opisujący kanał o typie 1 przechowuje nazwę i statystykę sygnału zapisanego w tym kanale:
0 | unsigned char | Type | wartość 1 |
1 | unsigned short | Object | typ obiektu dla sterowania klapą musi być 30000 |
3 | unsigned short | wartość 1 | |
5 | 41 x char | Name | nazwa kanału uzupełniona na końcu zerami |
46 | double | Min | wartość minimalna |
54 | double | MinPos | numer próbki, która ma wartość minimalną |
62 | double | Max | wartość maksymalna |
70 | double | MaxPos | numer próbki, która ma wartość maksymalną |
78 | unsigned char | wartość 2 | |
79 | 9 x unsigned char | zarezerwowane | |
88 | double | Mean | wartość średnia |
96 | double | Var | wariancja |
104 | double | Acor | autokorelacja |
112 | 9 x unsigned char | zarezerwowane | |
121 | unsigned char | End | wartość 127 |
Drugi rekord opisujący kanał o typie 2 jest niewykorzystany w plikach sterowania tłokiem:
0 | unsigned char | Type | wartość 2 |
1 | 77 x unsigned char | zarezerwowane | |
78 | unsigned char | wartość 2 | |
79 | 42 x unsigned char | zarezerwowane | |
121 | unsigned char | End | wartość 127 |
Trzeci rekord opisujący kanał o typie 3 przechowuje tylko skalę czasu:
0 | unsigned char | Type | wartość 3 |
1 | double | TimeScale | skala czasu, zawsze powinno być 1.0 |
9 | 112 x unsigned char | zarezerwowane | |
121 | unsigned char | End | wartość 127 |
Rekordy z danymi mają typ 7:
0 | unsigned char | Type | wartość 3 |
1 | 15 x double | Data | 15 kolejnych wartości sygnału |
121 | unsigned char | End | wartość 127 |