Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 27 lis 2024, o 10:01


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 18 maja 2015, o 11:45 
Offline
Nowy

Dołączył(a): 01 sty 2015
Posty: 5
Pomógł: 0

Witam umiem już odbierać dane z PC jako normalny string UTF-8. Natomiast nijak nie mogę pojąć jak mam odebrać łańcuch znaków hex i wydobyć z nich dane. Dodatkowo utrudnieniem jest, że dane z PC nie są wysyłane z chr(13) tylko po kolei ja muszę rozkodować po drugim znaku Hex(wartość) jak długi jest łańcuch znaków oraz wiem czym się kończy np. hex(01) lub hex(02). Na razie udało mi się tylko odebrać znaki z buffora zakończone enterem. Przykładowo wiem, że łańcuch ma 80 znaków hex wiem, że zaczyna się literą A ,a kończy znakiem hex (B1). Będę wdzięczny za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 21:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 kwi 2013
Posty: 62
Lokalizacja: Częstochowa
Pomógł: 5

Skoro umiesz odbierać dane jako normalny string (nie do końca rozumiem - znaczy ciąg ascii?), to czym różni się odbieranie danych binarnych (hex)? Odbierasz je po kolei, drugiego używasz do określenia ile bajtów odebrać. Rozumiem, że dane z tego urządzenia odbierasz jakbyś czytał z portu szeregowego?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 22:06 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27313
Lokalizacja: Szczecin
Pomógł: 1041

Może sobie obejrzyj to:

https://www.youtube.com/watch?v=1tAXqCt5vVQ

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2015, o 16:25 
Offline
Nowy

Dołączył(a): 01 sty 2015
Posty: 5
Pomógł: 0

Nie no odbieram ciąg ale jak se je wyswietlam to sa krzaki a ja chce widziec te wartosci hex ewentualnie zrobic z nich integer zmienna



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2015, o 18:55 
Offline
Nowy

Dołączył(a): 29 gru 2014
Posty: 3
Pomógł: 1

Do konwersji na hex'a używam funkcji ByteConverter, zamiana na integer przez Bit.ParseInt
Kod:
Sub Process_Globals
  Dim conv As ByteConverter
  ...
End Sub
Sub Globals
  Dim strumien As String
  Dim ints(76) As Int
  ...
nd Sub
....
Sub AStreams_NewData (Buffer() As Byte)
  Dim noweDane As String
  ...
  noweDane = conv.HexFromBytes(Buffer)
  ...
  strumien = strumien & noweDane
  ...
  wyswietlDane(strumien)
  ...
End Sub
Sub wyswietlDane(txtBlock As Sring)
  Dim i As Int
  For i = 0 To txtBlock.Length/2 - 2
    ints(i) = Bit.ParseInt(txtBlock.SubString2((i*2), (i*2+2)), 16)
  Next
  ...
End Sub



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2015, o 20:56 
Offline
Nowy

Dołączył(a): 01 sty 2015
Posty: 5
Pomógł: 0

Wszystko rozumiem do punktu sub wyswietldane nie rozumiem dlaczego tak to musi wygladac?Czy móglbys mi to nakreslic blizej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2015, o 07:55 
Offline
Nowy

Dołączył(a): 29 gru 2014
Posty: 3
Pomógł: 1

Przedstawiony kod pochodzi z programu odczytujacego transmisję z ładowarki modelarskiej Accucell-6 (klon iMax6), czyta z USB i Bluetooth'a.
Dana strumien jest typu string czyli pamięta ciąg znaków np. "1245AB8C" by zamienić na hex musimy wysupłać po dwa znaki np. "12", "45", "AB" (w przypadku wartości 8-bitowych) stąd polecenie SubString2(poczatek As Int, koniec As Int).
Natomiast ParseInt(tekst As String, radix As Int), gdzie radix od 2 do 36, zamienia powyższe hex-y na wartość integer o zadanej podstawie radix, u mnie 16.
W programie zapis wartości inetger jest do tabeli ints() by później łatwo odczytywać z określonych pozycji po każdym odczytanym pakiecie danych przesłanych z ładowarki, 152 znaki czyli 76 danych typu hex.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2015, o 18:12 
Offline
Nowy

Dołączył(a): 01 sty 2015
Posty: 5
Pomógł: 0

czyli gdy przekonwertowałem już na string o dwóch znakach i odpowiednio zapisałem w tablicy który jest który. To tworze SubString2(poczatek As Int, koniec As Int). Jakoś jeszcze tego nie łapię;/ jak mam wyznaczyć początek i koniec.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2015, o 19:26 
Offline
Nowy

Dołączył(a): 29 gru 2014
Posty: 3
Pomógł: 1

Funkcja SubString2 ma odczytać ze zmiennej strumien po dwa znaki składające się na wartość hex która jest przetwarzana na wartość integer.
O ile masz odbierany ciąg 80 wartości hex to Twoja zmienna strumien ma 160 znaków, gdzie wartości hex są na pozycjach: 0-1, 2-3, 4-5, 6-7, ...., 158-159. Ponieważ SubString2 nie czyta znaku na pozycji koniec więc czytając 2 znaki koniec musi być +1,czyli:
1-szy hex SubString2(0, 2)
2-gi hex SubString2(2,4)
3-ci hex SubString2(4,6)
......
80-ty hex SubString2(158, 160)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO