Zawieszanie się "Serial request node". Jak zrestartować flow?

Witam,
Słuchajcie, mam mały problem z komunikacją po RS485 na konwerterze USB.
Spójrzcie:
pv101
Pętla działa dobrze do czasu, gdy nie odłącze fizycznie konwertera RS485 z gniazda USB terminala na którym mam postawiony HA.
Po odłączeniu konwertera mam:
pv102
Gdy podłącze konwerter ponownie do USB, pojawia się “Connected” ale pętla stoi. Uruchamiam ponownie pętle ręcznie naciskając “Inject node” i pojawia się:
pv103
Problem w tym że cały czas jest “Waiting”…
Potrafię wykryć poszczególne stany “Not connected”, “Waiting” itp. i chce zrobić automatyczny reset po okreslonym czasie, gdy zostanie wykryte, ze połączenie się zawiesiło, i w przypadku konwertera sieciowego ETH i komunikacji po “TCP” restart petli pomaga, jednak tu w przypadku komunikacji “Serial” i konwertera USB jedyną możliwością jest “Restart flow”:
pv104
Jest jakaś mozliwość zresetowania połączenia “Serial” po USB z poziomu nodów, albo chociaż zrebienie tego “Restart flow” z poziomu któegoś noda? Chce zautomatyzować procedurę restartu połączenia, a nie, że za każdym razem, muszę wchodzić i recznie naciskać “Restart flow”.

No jak ma nie stać, jak sie zatrzymała i nie ma co ją ponownie ruszyć.
Zerwij pętle i ustaw inject co 4s, jak wróci connected i ruszy ponownie
Po co ta pętla?

No tak, zatrzymuje się, ale nawet gdy wywołam “Inject node” ponownie to zawiesza się znów na pierwszym “Serial request node” i cały czas mam “Waiting” (pętla rusza, ale zawiesza się na “Serial”).
To się dzieje tylko gdy odłącze w trakcie pracy pętli, konwerter USB. Mimo że podłącze konwerter ponownie i uruchomie pętle ponownie to jest jakiś problem z połączeniem z tym konwerterem, jak by połączenie nie mogło ponownie być zrealizowane i dopiero “Restart flow” pomaga i wtedy zaczyna wszystko działać poprawnie.
Pętla służy mi do odczytywania danych z regulatora grzałek. Chodzi o to żeby naprzemiennie wysyłać do regulatora znak ASCII “a” i “S”.

Pokaż co masz w tym nodzie USB


Z tego co widzę, problem jest na tapecie i na razie bez rozwiązania:

@bartik22… on ma jeszcze starą wersję bez autoreconnect.
Czas split input powinien być krótszy od timeout - przy prędkości 9600 to do odebrania tych kilkunastu bajtów wystarczy 150 - 200 ms.
Napis waiting sugeruje, że czeka na odpowiedź, przy równych czasach może być hazard i timeout może kasować odebrane bajty.
Poza tym takie podłączanie USB “w trakcie” sypie śmieciami i nie wiadomo jak zachowa się sam sterownik i tak naprawdę nie wiadomo co się wiesza.

@linuksowiec… dziwny masz ten proces. Zrób tak jak pisał @bartik22 - inject co 4 sek. i na początek wysyłaj tylko jedną komendę.

Mam wrażenie, że już komuś na forum zrobiłem działający do tego dekoder - jakie to urządzenie?

Zrobiłem najprościej jak się da:


Inject co 4 sek.
Split input 300ms
Default response timeout 2000ms

Odłaczam konwerter z gniazda USB i mam przez chwile:

Po czym Inject ponownie uruchamia proces i na przemian jest:

Czyli narazie jest ok.

Ale… ponownie podłączam konwerter do gniazda USB i…
Na moment wyświetla się:

Po czym następuje:

I cały czas mam “Waiting”. Inject ponownie wywołuje proces i dalej jest “Waiting”, żadnych timeout’ów, tylko “Waiting”. Tak jak by zawieszał się na tym nodzie “Serial”.

Nie wydaje mi się żeby problemem był regulator.
Bo to się dzieje tylko wtedy gdy odłącze i ponownie podłącze konwerter do USB.
Jeśli nie ruszam konwertera tylko będę odłączał sam regulator (na lini konwerter → regulator) to moge do woli, w dowolnym momencie odłączać i podłączać i proces wznawia bez problemu odczyty. Żadnych problemów.

Regulator to EL-CAR MEGA PWM MPPT 3kW 13A

Komunikacja prymitywna ale mam zrobiony program na konwerterze RS485 ETH i działa wszystko poprawnie, żadnych błędów, odporność na odłączanie regulatora i konwertera.
Teraz próbuje przerobić ten program i zmusić go do współpracy z konwerterem RSR485 USB i ogólnie działa wszystko poprawnie, ale program jest nieodporny na odłączenie konwertera z gniazda USB. Taki właśnie problem występuje jak powyżej opisałem.

Być może ale nikt nie przewidział, że będzie używany w taki sposób :wink:

Zrób jeszcze taką samą próbę tylko transmisję inicjuj z “palca”. Po ponownym podłączeniu USB odczekaj chwilę i daj czas aby urządzenia się “ustawiły”.
W sumie to nie wiem co ma dać wynik takiej próby… ale spróbuj :wink:

Powtórz to samo z odłączonym regulatorem.

Ale teraz głowimy się bo będziesz sobie odłączać i podłączać konwerter z USB?
Po co w ogóle miałbyś to robić, jaka w tym kryje się logika?

@RobinI30 Nic to nie daje. Tylko “restart flows” pomaga.

@bartik22 Może nie tyle o logikę chodzi, ale o uodpornienie programu na wszelkie możliwe interakcje, ze strony użytkownika.
Ja często coś zmieniam, przełączam, coś dokładam. Caly czas rozbudowywuje swoją automatykę, testuje, zmieniam i ok, sytuacja w której odepnę konwerter będzie bardzo sporadyczna, ale jednak może się zdarzyć i fajnie by było gdyby po takiej akcji program sam wstał i podjął komunikację. Żebym nie musiał pamiętać że trzeba wejść, zrobić “restart flows”.
Nie da się to trudno, nie jest to jakoś bardzo istotny problem, ale miałem nadzieję, że może sprawa jest prosta, a ja o czymś nie wiem, coś robię źle, dlatego napisałem.

A tak zapytam jeszcze… Jest jakiś sposób żeby wywołać z poziomu noda “restart Flow”, np. z noda “exec”?