TCP/IP - problem z otwieraniem i zamykaniem połączenia

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.
tomekk
Posty: 6
Rejestracja: 17 cze 2021 20:38
Wersja środowiska: LabVIEW 2018

TCP/IP - problem z otwieraniem i zamykaniem połączenia

Post autor: tomekk » 28 cze 2021 18:02

Cześć,
tworzę aplikację umożliwiającą wysyłanie i odbieranie danych po TCP/IP z wykorzystaniem notyfikatorów. Niestety w momencie wysłania danych teoretycznie dane zostają wysłane, ale połączenie ulega zamknięciu (error 66 - connection closed). Próbowałem rozwiązać problem poprzez dodanie opóźnienia w pętli "TCP sender", które pozwoli na odebranie danych przed zamknięciem połączenia.
Poniżej zamieszczam kod.
Czy problem wynika z tego, że próbuję zbyt wcześnie zamknąć połączenie zanim dane zostaną odebrane?
Wszelkie podpowiedzi mile widziane :)
Pozdrawiam
Załączniki
tcp.png

Awatar użytkownika
Lesiu93
Posty: 9
Rejestracja: 21 kwie 2021 22:01
Wersja środowiska: LabVIEW 2019
Been thanked: 1 time
Kontakt:

Re: TCP/IP - problem z otwieraniem i zamykaniem połączenia

Post autor: Lesiu93 » 28 cze 2021 21:30

Cześć, trop masz dobry. Owszem błąd pojawia się przez to, że połączenie zostaje zamknięte w trakcie działania tej funkcji TCP Read w dolnej pętli. Dlaczego tak się dzieje pomimo, że dodałeś opóźnienie ? Otóż Twoja funkcja read działa w trybie Standard (tryb ustawiamy tym enumem podpiętym do funkcji) i w tym trybie funkcja czeka aż nadejdzie zadeklarowana ilość bajtów lub minie czas tzw.timeout, który również możemy zadeklarować. W tym wypadku nie ma deklaracji i jest to domyślnie 25 sekund. Dlatego Twoje 2 sekundowe opóźnienie nic nie dało. Oczywiście możesz zmienić timeout w TCP Read na krótszy jednak w tym trybie możesz mieć ciągle błąd związany z nieodczytaniem wszystkich bajtów. Deklarujesz ich do oczytania 80 a ile wysyłasz nie wiemy ale zakładam, że nie taką ilość ;)

Najprościej zmienić tryb funkcji TCP Read na Immediate i wtedy program powinien zadziałać. Mam jednak obawy co do całej konstrukcji - czy koniecznym warunkiem jest zestawianie połączenia za każdym razem kiedy chcesz coś wysłać ? :-? Pewne funkcje można by wyrzucić poza pętle i trochę zmienić "architekturę". Jeżeli masz jeszcze jakieś pytania lub chciałbyś coś tu przebudować to dawaj znać !
Paweł Lesiak
Obrazek
Zapraszam na mój kanał na YT ;)
https://www.youtube.com/channel/UCbMwXA ... PMVjfFAXuA

tomekk
Posty: 6
Rejestracja: 17 cze 2021 20:38
Wersja środowiska: LabVIEW 2018

Re: TCP/IP - problem z otwieraniem i zamykaniem połączenia

Post autor: tomekk » 28 cze 2021 22:31

Dzięki, rzeczywiście zmiana na tryb Immediate pomogła. :)
Masz rację, każdorazowe ustanawianie połączenia jest nadmiarowe. Będę musiał zmodyfikować architekturę :)

tomekk
Posty: 6
Rejestracja: 17 cze 2021 20:38
Wersja środowiska: LabVIEW 2018

Re: TCP/IP - problem z otwieraniem i zamykaniem połączenia

Post autor: tomekk » 29 cze 2021 12:29

Mam taką zagwostkę. Chciałbym, aby praca pętli była podtrzymana nawet w przypadku zamknięcia połączenia. Czy ma ktoś pomysł lub może zetknął się z problemem? Jakiś mechanizm umożliwiający podtrzymanie działania pętli mimo wystąpienia błędu dotyczącego zamknięcia połączenia?
Pozdrawiam

Awatar użytkownika
Lesiu93
Posty: 9
Rejestracja: 21 kwie 2021 22:01
Wersja środowiska: LabVIEW 2019
Been thanked: 1 time
Kontakt:

Re: TCP/IP - problem z otwieraniem i zamykaniem połączenia

Post autor: Lesiu93 » 29 cze 2021 18:27

Spróbuj użyć funkcji Clear Error. Tutaj masz pełne kompendium wiedzy na ten temat:
https://knowledge.ni.com/KnowledgeArtic ... AS&l=pl-PL
Paweł Lesiak
Obrazek
Zapraszam na mój kanał na YT ;)
https://www.youtube.com/channel/UCbMwXA ... PMVjfFAXuA

tomekk
Posty: 6
Rejestracja: 17 cze 2021 20:38
Wersja środowiska: LabVIEW 2018

Re: TCP/IP - problem z otwieraniem i zamykaniem połączenia

Post autor: tomekk » 30 cze 2021 10:22

W sprawie przebudowy programu. Chciałbym stworzyć bufor, który umożliwia podjęcie decyzji czy transmisja ma się odbyć czy nie. Czy ma ktoś pomysł w jaki sposób taki bufor można zrobić?
Pozdrawiam

ODPOWIEDZ