Konwersja z hex na dec

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
y4r0
Posty: 33
Rejestracja: 24 sty 2007 00:00

Konwersja z hex na dec

Post autor: y4r0 »

Witam.
Mam taki string:

Kod: Zaznacz cały

2011R00,00F1000A31Dr
Chciałbym wyciąć z niego to:

Kod: Zaznacz cały

00F1
i przedstawić w postaci liczby dec. Wiecie może jak to zrobić? Ja to zrobiłem tak jak na rysunku, ale nie działa to tak jak bym chciał. Znalazłem w przykładowych kodach na stronie LabVIEW inny program do tego (na rysunku) ale albo ja coś źle liczę, albo ten program, bo: 00F1 (hex) = 0 * 4096 + 0 * 256 + 15 * 16 + 1 * 1 = 241 (dec) A znaleziony program pokazuje mi, że 00F1 (hex) = 61696 (dec)
:? . Możecie mi to wytłumaczyć i ewentualnie podpowiedzieć jak to mam zrobić w LabVIEW?
PS Ten temat jest kontynuacją innego tematu który założyłem, ale to już inny problem więc postanowiłem założyć nowy wątek
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: Konwersja z hex na dec

Post autor: wino »

prosze
y4r0
Posty: 33
Rejestracja: 24 sty 2007 00:00

Re: Konwersja z hex na dec

Post autor: y4r0 »

Dziękuję bardzo :) .

Żeby uzyskać to co chciałem zrobiłem tak jak na obrazku. Teraz pytanie, czy da się to jakoś uprościć? Domyślam się, że można wykorzystać tablice, ale czy to będzie bardziej uproszczony zapis to nie jestem pewien. Chodzi mi bardziej o to czy istnieje jakiś klocek który by to za mnie robił?
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: Konwersja z hex na dec

Post autor: wino »

no ale nie możesz zrobić tak, jak ci podesłałem...nie rozumiem...
y4r0
Posty: 33
Rejestracja: 24 sty 2007 00:00

Re: Konwersja z hex na dec

Post autor: y4r0 »

wino pisze:no ale nie możesz zrobić tak, jak ci podesłałem...nie rozumiem...
Robiłem tak, ale źle wychodziło.
Tym sposobem wychodziło tak:
00D9 (hex) = 55552 (dec)
A powinno być 217 (dec), czyli taka sama wartość jak na regulatorze, z którego odczytuję dane.
Jak zobaczyłem ten wynik (tzn. 55552) to zacząłem się zastanawiać czy ja to dobrze liczę, no ale skoro tym moim sposobem wychodzi mi tak jak na wyświetlaczu regulatora, to chyba dobrze. Chyba, że to zaś wynik mojej niewiedzy :? . Jeśli tak to proszę mnie uświadomić ;).
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: Konwersja z hex na dec

Post autor: wino »

to musisz źle robić, bo algorytm który ci podałem jest najprostszy. pokaż swój kod to ci może pomoge
y4r0
Posty: 33
Rejestracja: 24 sty 2007 00:00

Re: Konwersja z hex na dec

Post autor: y4r0 »

wino pisze:to musisz źle robić, bo algorytm który ci podałem jest najprostszy. pokaż swój kod to ci może pomoge
Kod w załączniku. Jeszcze tylko podam kilka istotnych informacji. Ramka odpowiedzi regulatora na zapytanie z komputera wygląda tak:

Kod: Zaznacz cały

|
R
0
0
|
,
0
0
1
E
|
0
0
7
8
|
.............
|
0
0
0
3
|
Poszczególne części informacji oddzieliłem pionową kreską. Pierwsza część, czyli to "R00" to kod odpowiedzi na komendę czytania. Druga część to pierwsza dana, trzecia druga dana, ostatnia część to piąta dana. Mnie interesuje tylko ta część, która zawiera w przykładzie ",001E", czyli pierwsza dana.
Teraz np mam taką odpowiedź z regulatora:

Kod: Zaznacz cały

2011R00,00EB000A32Dr
Czyli ta dana która mnie interesuje to ",00EB". Sposobem który mi podałeś wychodzi 60160 (dec).
Nie wiem po co jest ten przecinek na początku, ale jak go pominę i sobie policzę: 00EB (hex) = 0 * 4096 + 0 + 256 + 16 * 14 + 1 * 11 = 235 (dec) Jak to teraz podzielę przez 10 to mam temperaturę taką jak na regulatorze, czyli 23,5 C.
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: Konwersja z hex na dec

Post autor: wino »

rada poniżej. Może sposób wybierania liczby z ciągu jest zły.
y4r0
Posty: 33
Rejestracja: 24 sty 2007 00:00

Re: Konwersja z hex na dec

Post autor: y4r0 »

Faktycznie źle wybierał liczbę. Offset ma być ustawiony na 8 a nie na 10.

Wielkie dzięki :).
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: Konwersja z hex na dec

Post autor: wino »

ja proponuje znaleźć inny sposób wybierania. Może spróbujesz bloczka Match Pattern. Zastanów się. Postaraj się znaleźć jakieś szczególne znaki tej ramki i je wykorzystać. Może ten przecinek będzie wyznacznikiem.
y4r0
Posty: 33
Rejestracja: 24 sty 2007 00:00

Re: Konwersja z hex na dec

Post autor: y4r0 »

W takim razie popróbuję z tym co mi podałeś, bo właśnie też mnie zastanawiało co z tym przecinkiem.
Według instrukcji ten przecinek w stringu oznacza, że został wstawiony nagłówek danych.
y4r0
Posty: 33
Rejestracja: 24 sty 2007 00:00

Re: Konwersja z hex na dec

Post autor: y4r0 »

wino pisze:ja proponuje znaleźć inny sposób wybierania. Może spróbujesz bloczka Match Pattern. Zastanów się. Postaraj się znaleźć jakieś szczególne znaki tej ramki i je wykorzystać. Może ten przecinek będzie wyznacznikiem.
Możesz to trochę rozwinąć? Tzn. co rozumiesz przez szczególne znaki? Bo tak patrzę na tą ramkę i nie wiem jak by można było ten przecinek wstawić. Dzielenie przez 10 (które zastosowałem) jest złym rozwiązaniem, bo wyświetlacz na dokładność do 3 znaków po przecinku. Może mi wyświetlić np. 0.001, a w labVIEW 0.1
:? . Ja spróbuję opisać dokładnie tą ramkę, może ktoś będzie wiedział co z tym zrobić.
Format odpowiedzi

Kod: Zaznacz cały

STX
|
0
1
|
1
|
R
|
0
0
|
,****
|
ETX
|
3
C
|
CR
| (1)

(2)


(3)
 (4)

 (5)


(6)


 (7)

 (8)

 (9)
(1) Znak startu. (2) Adres maszyny. (3) Sub-adres. (4) Typ komendy. (5) Kod odpowiedzi. (6) Dane. (7) Znak końca tekstu. (8) Dane BCC (wykrywanie błędu). (9) Znak końca.
To jest rozwinięcie (6):

Kod: Zaznacz cały

R
|
0
0
|
,
0
0
1
E
|
0
0
7
8
|
...........
|
0
0
0
3
| (a)

(b)



 (c)  (d)




 (e)





 (f)
(a) Informacja że jest to odpowiedź na komendę czytania. (b) Kod odpowiedzi, wskazuje że jest to normalna odpowiedĹş na komendę czytania. (c) Pierwsza dana, początek z <, (2CH)> wskazuje że został wstawiony nagłówek danych. (d)
Druga dana. (e) Następne dane (trzecia i czwarta). (f) Piąta dana.
Ja teraz otrzymuję z regulatora taką odpowiedĹş:

Kod: Zaznacz cały

2011R00,00F434Fr
Czyli moją pierwszą pierwszą daną (i ostatnią, bo tyle chciałem w ramce wysyłanej do regulatora) jest 00F4 (hex) czyli 244 (dec) podczas gdy na regulatorze jest temperatura 24.4 C.
W instrukcji do regulatora znalazłem informację o części dziesiętnej, ale ta informacja nie wiele mi mówi
:?. Dołączyłem ten fragment jako załącznik.
Wiecie może jak to przedstawić, żeby wynik był normalnie przedstawiany?
darekc
Posty: 77
Rejestracja: 29 mar 2007 00:00
Lokalizacja: Gliwice

Re: Konwersja z hex na dec

Post autor: darekc »

Znak , (kod ASCII 2Ch) jest używany do oznaczenia początku obszaru danych w komunikacie z regulatora.
Liczba cyfr po kropce dziesiętnej w wyniku pomiaru zależy od ustawionych: jednostki (adres 0704) oraz zakresu pomiarowego (adres 0705), strony 22-23 w instrukcji. Jak sądzę
- przy zakresie np. -199.9 ~ 200.0 (kod 9, temperatura w skali Celsjusza) mamy 1 cyfrę po kropce, liczbę otrzymaną na wyjściu obiektu Hexadecimal String to Number trzeba podzielić przez 10, - przy zakresie np. 0 ~ 600 (kod 8, temperatura w skali Celsjusza) część ułamkowa nie występuje, zatem nie wykonujemy dzielenia.
Liczbę cyfr części ułamkowej wyświetlanych przez wyświetlacz można ustawić.
y4r0
Posty: 33
Rejestracja: 24 sty 2007 00:00

Re: Konwersja z hex na dec

Post autor: y4r0 »

I wszystko jasne. Jakoś mi to umknęło jak czytałem instrukcję ;).
Dokładność jaka jest wymagana w moim projekcie, to dokładność jednego miejsca po przecinku, czyli zastosuję dzielenie przez 10 wyniku i bedzie dobrze.

Wielkie dzieki za wyjaśnienie i za pomoc.
ODPOWIEDZ