Multiplekser/sniffer/arbiter modbus

Apr 05, 2023 Last reply: 3 years ago 30 Replies

Robią dla przeciętnego użyszkodnika, a nie dla fanów open source. I pewnie im się sprzedaje.

W sumie taki arbiter to prosta rzecz - niewiele więcej niż np. konwerter prędkości RS (sam robiłem na Atmega164, więc platforma na bogato - ale choć wygląda to prosto, to trzeba było do różnych systemów dodawać różne sztuczki, żeby dobrze działało - a najlepszą w tym temacie rzeźbę widziałem na dwóch AT89C2051 - a może nawet to było AT89C1051U - które odebrane bajty przekazywały sobie równolegle 8-bitowym portem ;) poza, jak zwykle, "jedną raną stanowczo śmiertelną" - bo wracamy do tematu "gotowca", czyli tego, jak zrobić interefejs do niewiadomego. Czy ten arbiter ze strony powiedzmy TCP ma wyglądać jak abstrakcyjny model pieca? Może oprogramowania HA mają takie "abstrakcyjne" modele - nigdy nie wnikałem, więc kto wie, sam robiłem abstrakcyjny model źródła promieniowania laserowego...

Arbiter w ogóle nic by nie wiedział o typie urządzenia.

Wykrywał by ramkę modbusa, buforował i odsyłał na inny interfejs w/g jakiegoś prostackiego priorytetowania. Może nawet ze zmianą parametrów transmisji, jak ktoś się uprze.

Coś w rodzaju switcha ethernet store&forward.

Uniwersalność jest od osiągnięcia.

Uniwersalny oznacza zwykle "do niczego konkretnego się nie nadający" (dziś wyczytałem, że kacapy wymyśliły "uniwersalny" reaktor jądrowy VVER-TOI - no to będzie znowu źle...).

Bo wciąż pytam o to, jaki chcesz mieć interfejs po TCP. Czy:

- konwerter TCP<->RS485

- wysyłacz/odbieracz ramek modbus

- abstrakcja urządzenia wg schematu używanego przez jakiś system HA

No i jeszcze jedno mi przyszło do głowy - co z ramkami wysyłanymi przez y, czyli piec? Przecież na 100% nie wiadomo, komu odpowiada. Wysyłać do obu masterów? Do tego, który ostatnio nadał ramkę? Pamiętać, o co który pytał?

Moze od razu poprosic o kod na wybrany uC ? :-)

I to jest przykład z powyzszego archiwum, czy GPT napisal sam ?

J.

Abitera nie widziałem. Gotowych urządzeń implementujących raw RTU jest od groma.

Niektóre idą dalej w tym szlaleństwie i są wersje UDP zamiast TCP.

Ta abstrakcja do niczego nie jest potrzebna w przypadku arbitera. Była by uzyteczna, gdybym robił coś w rodzaju proxy. Ale nie wydaje mi się, aby było to niezbędne. Arbiter jest ok, pod warunkiem, że przerwy w komunikacji są statystycznie znacznie dłuższe niż transmisjie. U mnie tak jest.

Python był jako wyznacznik minimum. Raczej narzęźbię to na C++.

Jestem raczej z daleka od "gotowców" o uproszczonej budowie. Skrajnym przykładem jest LabView. Kolega w tym pracował zawodowo, robiąc bardzo poważne rzeczy. Jego największym problemem refaktoringu nie było programowanie, tylko jak przemieścić D'n'D kilka tysięcy elementów aby dało się zmieścić pętlę i kilka drutów. Programowanie graficzne uważam za znakomity żart, choc niewątpliwie wygląda świetnie na prezentacjach.

Innymi słowy, jesli to narzeźbię, to prawodpowodobnie na ESP8266 (ale on ma niestety 1 i 1/2 uartu) albo ESP32. Tu nie ma wielkiego wyboru z powodu komunikacji po wifi.

Swoją drogą: podobne urządzenie (do PV, ale tam są inne wymagania) od kilku lat działa mi na teminalu Wyse Cx0 (normalny pecet wielkości 2 paczek papierosów) który kosztował mnie 20zł.

Jakieś 25 lat temu coś podobnego się rzeźbiło w pierwszej pracy po studiach, kto wie może jeszcze jakiś ostatni egzemplarz gdzieś działa? (szukać głównie w branży ciepłowniczej, w okolicach Bydgoszczy) Zwało się to konwerter protokołów, najbardziej rozbudowana wersja miała aż 6 portów szeregowych (izolowanych i konfigurowalnych RS232/485). W tym 4 porty master (multipleksowane z 1 UART-a, bo poczwórny był za drogi) i 2 porty slave (niezależne UART-y), działało to nieco inaczej bo asynchronicznie - porty master wysyłały skonfigurowane zapytania w swoim rytmie (można było określać zakresy rejestrów i częstotliwość odpytywania) i zapisywały dane w pamięci, a z tej samej pamięci można było odczytywać przez porty slave (reagujące na te same adresy przypisane urządzeniom na portach master - chyba że odpytywane urządzenie nie odpowiadało, to my też nie odpowiadaliśmy nadrzędnemu pytani o jego adres, ale mieliśmy też swój niezależnym z dostępem do całej pamięci). Monitorowane procesy były wolnozmienne (jak to w ciepłownictwie) więc taka asynchroniczna praca nie była problemem, Modbus RTU był domyślnym protokołem ale były też na zamówienie implementowane różne inne (jakieś dziwne własne różnych liczników ciepła, albo np. sterowniki PLC marki GE - to była moja praca dyplomowa, a zaraz potem oni i tak dorobili Modbus :). Firmy w Gdańsku już dawno nie ma (została przejęta przez stocznię która potem też padła), budynki chyba nadal te same stoją i są tam jakieś inne firmy. Procesor był 16-bitowy x86 (188) programowany pod Borland C (ale bez DOS-a, z jakimś małym RTOS robionym przez kogoś z PG, choć w sieci nie jestem w stanie znaleźć żadnych śladów po tym). Nowością wtedy był soft w pamięci Flash 128KB zamiast EPROM-u z okienkiem. Wcześniejsza generacja była na DS80C320 (taki szybszy '51) rzeźbiona w asemblerze. Dorabiało się po godzinach robiąc zasilacze impulsowe (6 izolowanych wyjść) do tego. Nawet przechodziło jakieś badania EMC, choć CE jeszcze u nas nie obowiązywało. Ech, pionierskie czasy...

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required