ComposeReal4 (10024)

1) Przeznaczenie bloku
ComposeReal4 służy do złożenia 32-bitowej liczby rzeczywistej (Real4 / 32-bit float) z dwóch wartości 16-bitowych (dwóch „słów” po 16 bitów).
Blok wykonuje „sklejenie bitów” bez przeliczania wartości:
low wnosi młodsze 16 bitów (bity 0…15),
high wnosi starsze 16 bitów (bity 16…31),
a następnie utworzona liczba Real4 jest konwertowana do typu Real w Simultusie, czyli do 8-bajtowej liczby rzeczywistej o podwójnej precyzji (double).
2) Interfejs bloku (wejścia/wyjście)
Wejścia
low
dolne słowo (LSW – młodsze 16 bitów) składanego Real4
high
górne słowo (MSW – starsze 16 bitów) składanego Real4
Wyjście
out
wynik: R (Real) – liczba rzeczywista typu Real w Simultusie (double, 8 bajtów) utworzona na podstawie złożonej wartości Real4.
Na symbolu wyjścia widać literę R, co w Simultusie oznacza typ rzeczywisty Real (double, 8-bajtowy).
3) Zasada działania (bit po bicie)
Blok najpierw składa 32 bity wzorca Real4 wprost z dwóch słów 16-bitowych:
-
real4_bits[15:0] = low[15:0] -
real4_bits[31:16] = high[15:0]
W zapisie operacyjnym (na poziomie bitów – typowy sposób składania):
-
bits32 = (high << 16) OR (low & 0xFFFF) -
tmp = interpretacja(bits32) jako Real4
Następnie blok wykonuje konwersję:
-
out = konwersja(tmp) do Real (double, 8 bajtów)
Kluczowe: ComposeReal4 nie “liczy” wartości w sensie matematycznym podczas składania bitów, tylko interpretuje złożony wzorzec bitowy jako liczbę typu Real4, a potem konwertuje ją do Real (double).
4) Co wynika z faktu, że to Real4
Liczba Real4 jest kodowana w 4 bajtach. W praktyce oznacza to, że:
-
jeden bit odpowiada za znak,
-
część bitów opisuje wykładnik,
-
część bitów opisuje mantysę.
Dla użytkownika bloku najważniejsze są dwie konsekwencje praktyczne:
-
Jeśli low/high są niepoprawne (np. pomylona kolejność), wyjdzie „losowa” wartość, często bardzo duża, bardzo mała albo nielogiczna.
-
Nie wolno „zamieniać” tych słów bez sprawdzenia, bo Real4 jest bardzo wrażliwy na układ bitów.
Dodatkowo: mimo że na wyjściu jest Real (double), to źródłowa informacja pochodzi z Real4, więc dokładność wejściowa jest ograniczona do pojedynczej precyzji.
5) Kolejność słów (najważniejsza uwaga praktyczna)
Blok zakłada jednoznacznie:
low = młodsze słowo (LSW)
high = starsze słowo (MSW)
W systemach zewnętrznych (np. rejestry komunikacyjne 16-bit) kolejność bywa różna. Jeśli po złożeniu wartość jest błędna:
-
w pierwszej kolejności należy sprawdzić, czy źródło danych nie podaje słów w odwrotnej kolejności,
-
testowo zamienić podłączenia low ↔ high i porównać wynik z wartością oczekiwaną.
6) Procedura użycia krok po kroku
Ustal, które 16 bitów w Twoim źródle odpowiada młodszemu słowu, a które starszemu.
Podłącz:
młodsze słowo → low
starsze słowo → high
Odczytaj wynik na out jako Real (32-bit).
Jeżeli wynik nie ma sensu:
zweryfikuj kolejność słów (zamiana low/high),
zweryfikuj, czy źródło na pewno przesyła Real4 w dwóch słowach 16-bit.
7) Przykład na konkretnych liczbach
Przykład pokazuję na poziomie bitów/hex, bo to jest jedyny pewny sposób w dokumentacji takiego bloku.
Załóżmy, że źródło danych dostarcza dwie wartości 16-bit:
high = 0x3F80
low = 0x0000
Składanie:
bits32 = 0x3F80 << 16 OR 0x0000
bits32 = 0x3F800000
Następnie:
-
tmpjest interpretacją wzorca bitowego0x3F800000jako Real4, -
outjest wartością typu Real (double, 8 bajtów) powstałą przez konwersję tej wartości Real4 do formatu Real w Simultusie.
Ten przykład pokazuje dokładnie mechanikę działania bloku: z dwóch słów powstaje 4-bajtowy wzorzec Real4, a wynik na wyjściu jest jego wartością w typie Real (double).
8) Jak można wykorzystać blok ComposeReal4
Blok ComposeReal4 wykorzystasz, gdy:
-
masz wartość Real4 (4-bajtowa, pojedyncza precyzja) rozbitą na dwa rejestry/słowa 16-bitowe,
-
i chcesz uzyskać w Simultusie jedną zmienną typu Real (double, 8 bajtów).
Typowe zastosowania:
-
składanie wartości analogowych przesyłanych w dwóch rejestrach 16-bit (np. z komunikacji),
-
odczyt parametrów procesowych, które urządzenie udostępnia jako Real4, ale w dwóch słowach.