Panowie pytanko bo nie znalazłem odpowiedzi na moj problem w internecie.
Chciałem się dowiedzieć w jaki sposób node-red rozwiązuje zapytanie przez jeden port usb-rs485 do kilku urządzeń o różnym id lub do tego samego ale kilka razy po ileś danych. Jak to w czasie wygląda??? Nie wiem jak to pytanie zadać inaczej ale może powiem na przykładzie.
Posiadam licznik energii z którego odczytuje dane przez USB-rs485, ale nie mogę całej tablicy odczytać bo sam licznik mi to blokuje, ale moge zapytać tylko o tablice wielkosci 80 no tak ale kolejne dane są np. w tablicy 110 i ich dlugość ma kolejne np 20. Przez co odpytuje licznik dwa razy. Ten sam konwerter co odczytuje licznik odczytuje też inne urządzenia które podobnie musze odczytywać jak wy wyżej. Nooo i teraz nie wiem jak zbudować poprawnie taką forme odczytu. Obecnie mam zbudowanych przeżutnik który liczy i co sekunde uruchamia kolejną komende odpytywania.
Przychodzą mi do głowy jeszcze dwa inne sposoby, jednak poza zmianami kosmetycznymi nic nie wnoszą. Więc jeśli działa Ci to poprawnie to tak zostaw.
No tak ale wydaje mi się to mało poprawne … Bo co jeśli miał bym 20…40 urządzeń do odpytania. To aktualizacja danych była by co 40s??? Coś jest nie tak.
modbus ma ponad 40 lat, więc to co kiedyś było kosmicznie szybkie dziś jest ślimaczo wolne.
Ale ja nie o tym chciałem wspomnieć.
Jeśli nie potrzebujesz komunikacji na duże odległości, a jednocześnie chcesz przesyłać szybko dużą ilość danych, to skonfiguruj porty szeregowe w urządzeniach do tak wysokiej prędkości transmisji jaka będzie zadowalająca (i jednocześnie będzie nadal działać).
Szybkim wyznacznikiem jaką najwyższą prędkość możesz wybrać jest urządzenie, które jest najwolniejsze.
Problemem nie jest protokół, bo modbus ma mały narzut na ilość danych.
Przesyłany są tylko wymagane bajty + suma kontrolna. Bez ustanawiania połączenia i jakiś specjalnych potwierdzeń, więc przesyłane jest absolutne minimum (mnie już się nie da). Do synchronizacji wymagane jest 3.5bajta ciszy na magistrali co jest potencjalną “stratą czasu”
Wąskim gardłem jest sam uart i najsłabsze urządzenie.
Pewną optymalizacją jest wysyłanie do kolejki noda modbus zapytań w różnych interwałach. Część danych nie zmienia się na tyle szybko aby odczytywać je np. co 1sek.
Przy tym sposobie każdą funkcję możesz wywołać w dowolnej chwili, zostanie ona umieszczona w kolejce i wykonana natychmiast po ukończeniu poprzedniej.
Praktycznie więc nie ma czasu bezczynności.
Trudnością jest jednak konieczność identyfikacji źródła ramki z odpowiedzią.
… tak po krótce tyle można wycisnąć.
Można również stosować urządzenia z wbudowanym modbusTCP (ale nie konwerter rs485<>lan). Należ do tematu podejść z rozsądkiem i ograniczyć własne chciejstwo.
Dziękuje za ciekawy pomysł.
Może tylko doprecysuje swoje pytanie. Jest wiele wątków i przykładów w necie odnosnie modbus-a dla nod-reda. Ale jak dla mnie są bardzo chaotyczne nikt sie nie przejmuje o optymalizacji zapytania i poprawnym sterowaniu ruchu po lini danych. Widziałem że zapytania się pokrywały lub byly wysyłane w czasie odpowiedzi innego urządzenia.Co wprowazało błędy w komunikacji. Absolutnie nie chodzi też o “chciejstwo”. Moim pomysłem było zbudowanie takiego bolku odpytywania po modbus ale wielu urządzeń by komunikacja była niezachwiana, czasy odpytwania , odpowiedzi nie pokrywaly sie z kolejnymi zapytaniami pozostałych urzadzeń. To co mam teraz pozwala mi odczytywać dane w miare płynnie z róznych urządzeń bo wiadomości są kolejkowane a raczej ich zapytania. Rozumieć mam że podobnie jak ja wysyłasz wszystkie zapytania ale do jednego węzła komunikacyjnego i tam dostajesz odpowiedzi wszystkie skolejkowane ale nie wiesz które urządzenie odpowiedziało piersze które w innym czasie i dane są pomieszane? a przed blokami read też masz jakiś przeżutnik?
W tym przypadku wpisuje wszystko na raz, to nod dba o to w jakiej kolejności wysyła i aby nie było kolizji. Nic nie stoi na przeszkodzie aby te funkcje uruchamiać w dowolnym dogodnym czasie. Nawet gdy wpiszesz jednocześnie nic złego się nie stanie.
Specjalnie obciąłem lewą stronę aby niczego nie sugerować.
Chaosu z odczytem nie ma bo każda odpowiedź jest oznaczona od kogo pochodzi. komplikuje się tylko strona obróbki danych.
Rozumiem że tylko w twoim przykładzie wrzucenie wszystkich zapytań na raz nie stanowi problemu ale jeżeli bym zrobił kilka węzłów i w każdym z nich osobno chciał odpytywać modbasa To dla notreda to już byłby problem?
Nie rozumiem… jeśli wszystko trafi do jedynego “modbus flexible read” to nie będzie problemu.
Nie znam wszystkich ograniczeń biblioteki i nie będę teoretyzował - może się coś wydarzyć gdy przesadzisz …?
Nie wyczytasz tego, musisz spróbować.
Oki ale dziękuje za informacje. Dobrze poznać czyjeś zdanie i pomysł na rozwiązanie zagadnienia.