opamp napisał: Witam
Mam plobrem z odpaleniem w pełni możliwości programu z płyty DVD naszego kolegi pana Mirka. Plobrem polega na tym po naciśnięci klawisza na module ATB nie przychodzi informacja do programu TestyUDP. Obsługa LCD LED i Test portów daje transmisje 2 kierunkową.
-Po naciśnięciu klawisza zapala się kontrolka na karcie ENC RX/TX.
- Zapora i antywirus wyłączone; System XP , Połączenie przez router z wyłączoną zaporą.
- IP komputera 192.168.0.10 - statyczne
- Brama 192.168.0.1
Zaloguj się, aby zobaczyć kod
w tej funkcji nie ma żadnego, nawet najmniejszego błędu i działa ona w 100% poprawnie. Wykorzystywany jest tu mechanizm "UDP CLIENT" i warto sobie prześledzić chociaż raz i zrozumieć jak to działa od podstaw, żeby posługiwać się sprawnie na przyszłość tymi funkcjami ze stosu TCP, którego omawiam w książce.
Problem że nie widać komunikacji zwrotnej w postaci dowolnie wygenerowanej ramki u autora tematu nie występuje tylko w przypadku tej funkcji którą przytoczył, jest jeszcze jedno miejsce w całym programie, w którym następuje użycie klienta UDP. Chodzi o odpowiedź na wysłanie zapytania na jeden z portów sterownika - poniżej fragment:
Zaloguj się, aby zobaczyć kod
W programie na PC pojawia się na pewno tylko jeden z napisów widocznych powyżej czyli:
Zaloguj się, aby zobaczyć kod
ale już nie pojawia się spontanicznie wysłana kolejna ramka:
Zaloguj się, aby zobaczyć kod
i ma to dokładnie to samo podłoże z tym co dzieje się w tych funkcjach wywoływanych z obsługi klawiszy.
ROZWIĄZANIE: jest proste - kolega autor nie ustawił w programie adresu swojego komputera PC, który przecież dla wysyłania żądań klienta UDP jest potrzebny. A procek wysyła ramki do konkretnego IP a nie na adres rozgłoszeniowy. Chodzi o te linijki podstawowej konfiguracji, które są przecież omawiane w książce wyraźnie, ale i z komentarzy też widać mniej więcej o co chodzi, oto te linijki w programie:
Zaloguj się, aby zobaczyć kod
przecież widać, że tworzymy jakąś przykładową tablicę dla wywołań klienckich, w których podajemy adresy IP innych urządzeń z którymi będziemy chcieli się komunikować po UDP w tym także za pomocą klienta UDP. A typ wyliczeniowy
Zaloguj się, aby zobaczyć kod
jasno sugeruje, że akurat w tym miejscu ustawiłem czy ustawiamy adres IP własnego komputera w sieci lokalnej z którym za pomocą kilenta UDP czyli od początku preparowanych ramek, będziemy się komunikować.
dlatego żeby działało to wszystko poprawnie z testowym programem na PC to trzeba przecież podać w pierwszym elemencie tej tablicy adres IP komputera na którym odpalony jest program testowy:
Cytat: static uint8_t farip[2][4] = { {192,168,0,10}, {192,168,0,180} };
i wtedy bez żadnych zmian czy poprawek w programie (bo są niepotrzebne) - wszystko zacznie działać. Można sprawdzić.