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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 12 cze 2025, o 11:39


    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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