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



Teraz jest 21 cze 2025, o 03:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 18 maja 2025, o 16:53 
Offline
Nowy

Dołączył(a): 24 kwi 2025
Posty: 7
Pomógł: 0

Witam ponownie!
natrafiłem na problem z wykorzystaniem komponentu - wyskakuje mi błąd jak poniżej "range check error"

Obrazek

Poniżej fragment kodu (odczyt ciśnienia z czujnika wysyłanego przez sieć z wykorzystaniem UDP). Po rozpoznaniu P[7] wiem czy ciśnienie jest powyżej czy poniżej 1000hpa i odpowiednio wyświetlam to w aplikacji.
Wszystko jest ok jeśli w kodzie jest tylko jeden warunek if StrtoInt(P[7])= 0, dołożenie drugiego warunku
if StrtoInt(P[7])= 1 niestety powoduje wyświetlenie powyższego błędu i zupełnie nie rozumiem dlaczego - prośba o wsparcie.

Składnia: [ Pobierz ] [ Ukryj ]
język delphi
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2025, o 09:49 
Offline
Moderator
Avatar użytkownika

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

a to najnowsza wersja komponentu?

_________________
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 2025, o 17:12 
Offline
Nowy

Dołączył(a): 24 kwi 2025
Posty: 7
Pomógł: 0

Tak, to jest komponent z kompilacji sprzed miesiąca, pod Delphi 12CE



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2025, o 18:30 
Offline
Moderator
Avatar użytkownika

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

pokaż lepszy testowy kod bo z tego co pokazałeś to ja nawet nie wiem czy to ma coś wspólnego z MkUDPS - to kompletnie jakiś kod wyrwany z kontekstu, nie wiadomo jakie typy i jaki to ma styk z MkUDPS

_________________
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 2025, o 22:20 
Offline
Nowy

Dołączył(a): 24 kwi 2025
Posty: 7
Pomógł: 0

Ok, już załączam jakie typy danych i szerszy kontekst - całość jest umieszczona w procedurze GetPacketUDP

Składnia: [ Pobierz ] [ Ukryj ]
język delphi
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2025, o 06:56 
Offline
Moderator
Avatar użytkownika

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

Panie kochany to nie ma NIC a NIC wspólnego z MkUDPS ;)

robisz MEGA BABOLE w kodzie - podstawowym to jest brak sprawdzania tego co ci przyleciało w PacketUDP. Jeśli przyleciał pusty string albo za krótki albo nie zawierający cyfr to będziesz dostawał takie komunikaty które są normalne jak świat - bo jak może nie być range error gdy np masz string '123' a ty chcesz sprawdzić jego 7 element if P[7] = toż to nonsens

Ty sobie zakładasz że jak przyleci w P[2] literka P to na 100% w StrtoInt(P[7]) = 0 a jak string będzie krótszy to ci się wyrypie, jeśli w tym miejscu nie będzie cyfry tylko litera to kolejny błąd wywali StrToInt .... jak już to stosuj StrToIntDef( P[7], -1 ) ... który nie wywali błędu jeśli w P[7] będzie litera albo nawet pusty znak to podstawi ci np -1

Tak czy inaczej to jest kompletnie zła droga parsowania nadlatujących danych a testować to możesz sobie w byle buttonie - masz przykład ;) daj sobie raz P := '' a innym razem P := '5P' jak tu w kodzie - zobaczysz co się dzieje i że nie ma to nic wspólnego z MkUDPS, a taki komunikat widziałeś że to w MkUDPS i słusznie bo babola robiłeś w metodzie tego komponentu. Postaw sobie Button na formie ;)

Obrazek

i wklej jego kod jak niżej - dostaniesz to samo a może jeszcze czegoś się nauczysz - bo nie można sobie zakładać że zawsze ci przyleci to czego oczekujesz


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i weź formatuj te beginy tak - bo inaczej to masz tak rozstrzelony ten kod że nie dziwię, się że ciężko ci go nawet analizować

masz tu więc pięknie odtworzony twój błąd i wskazane przez co to się dzieje i dlaczego tak nie można podchodzić do parsowania danych, wystarczy że pusta linia przyleci bo wysłany został tylko CRLF którego komponent usunie i będziesz miał po :

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


zawartość P = '' i już się zburzy cała twoja układanka tym właśnie range check errorem

_________________
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: 20 maja 2025, o 17:44 
Offline
Nowy

Dołączył(a): 24 kwi 2025
Posty: 7
Pomógł: 0

Dzięki za obszerne wyjaśnienie, wszystko jasne!



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: 7 ] 

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO