Skocz do zawartości

ESP - IDF odczyt licznika energii za pomocą MODBUS RTU


Pomocna odpowiedź

Gość
5 godzin temu, ethanak napisał:

Kiedyś musiałem poprawić jakis kod gdzie nie tylko komentarze, ale i wszystkie nazwy były po turecku

To gorzej niż kooperacyjne zmienne pomocnicze (obliczeniowe) typu d, a, t itp. które fajnie się sprawują w krótkich funkcjach. 

1 godzinę temu, rafal220 napisał:

gorzej niż kooperacyjne zmienne pomocnicze (obliczeniowe) typu d, a, t

Wybacz... ale co Ty wiesz o kooperacyjnym programowaniu w C/C++?

Gość
40 minut temu, ethanak napisał:

Wybacz... ale co Ty wiesz o kooperacyjnym programowaniu w C/C++?

Pisałem o zmiennych kooperacyjnych. Czyli takich których nazwy możesz do woli powtarzać w funkcjach. Przyśpiesza to analizę tego co się dzieje w funkcjach. Uważam, że nielogicznym jest wymyślanie egzotycznych nazw do wszystkich zmiennych we wszystkim. 

Gość

@ethanak Tak wiem. A jak się inaczej mówi na zmienną lokalną której nawa powtarza się w n funkcjach np. "a" chociaż w różnych funkcjach pełni różną rolę?  Używasz jej tylko do samych działań w funkcjach. Lokalna zmienna kooperacyjna? 

Zmienna lokalna nie istnieje poza funkcją. Mam nadzieję że wiesz co to przestrzeń nazw a jak nie to najwyższy czas się dowiedzieć - choćby po to, aby nie śmiecić w wątkach dotyczących tematów których nue rozumiesz.

A jak Twoja funkcja przekroczy pierwszy tysiąc instrukcji to wtedy pogadamy na temat nazw.

Gość
4 minuty temu, ethanak napisał:

A jak Twoja funkcja przekroczy pierwszy tysiąc instrukcji to wtedy pogadamy na temat nazw.

w poradniku czytałem, aby nie tworzyć drugich funkcji, tylko o ile to możliwe jak najkrótsze funkcje, albo dzieląc dłuższe funkcje na mniejsze. Zgodnie z tymi zaleceniami nie powinno się tworzyć aż tak długich funkcji na 1000 linijek kodu. 

6 minut temu, ethanak napisał:

Zmienna lokalna nie istnieje poza funkcją

Dlatego daje to fizyczną możliwość stosowania tzw. dubli takich samych nazw zmiennych które nazwałem kooperacyjnymi albo obliczeniowymi czy też pomocniczymi. To jest taki typ zmiennych dla których wymyślanie azjatyckich nazw jest po prostu bez sensu. 

No dobra starczy tego offtopu. 

 

36 minut temu, rafal220 napisał:

No dobra starczy tego offtopu.

Jestem tego samego zdania 

@_LM_ szkoda że późno przeczytałem, kilka miesięcy temu robiłem modbus RTU na USB CDC ACM. Co prawda na STM ale, też zdałem sobie sprawę że biblioteki są zbyt przekombinowane. 

U mnie skończyło się to na przeczytaniu jak działa najpierw modbus ASCII, a później RTU. Ramka danych jest bardzo prosta do wypełnienia, ewentualnie policzenie CRC może być trudniejsze. Później obsługa kilku kodów funkcji i zrobione. Ta strona była przy tym bardzo pomocna https://ozeki.hu/p_5878-mobdbus-function-code-3-read-multiple-holding-registers.html

  • Pomogłeś! 1
(edytowany)

@Gieneq dzięki, link się przyda 🙂 ogólnie komunikację uruchomiłem. Mam jeszcze problem z konfiguracją deskryptora gdyż żeby nie wpisywać każdego cida osobno chcę pogrupować parametry. Np: trzy pierwsze rekordy to napięcia poszczególnych faz, następne - prądy itd. To się odczytuje na co wskazują dane z analizatora stanów logicznych. Problem jest z dostępem do tych danych z poziomu funkcji. Jak nic nie wymyślę w rozsądnym czasie to będę dopytywał dalej co z tym zrobić 

Edytowano przez _LM_
(edytowany)

Trochę się z tego worklog robi 😄 poniżej kolejne odczyty
 

[No.: 4  ]********************************
VALUE: 0  238.835693   	// U L1 - N (V)
VALUE: 1  0.000000		// U L2 - N (V) 
VALUE: 2  0.000000		// U L3 - N (V)
VALUE: 3  0.543229     	// I L1		(A)
VALUE: 4  0.000000     	// I L2		(A)
VALUE: 5  0.000000		// I L3		(A)
VALUE: 6  100.351387   	// P L1		(W)
VALUE: 7  0.000000		// P L2		(W)
VALUE: 8  0.000000		// P L3		(W)
VALUE: 9  129.742355	// S L1		(VA)	
VALUE: 10  0.000000		// S L2		(VA)
VALUE: 11  0.000000		// S L3		(VA)

Podłączona ładowarka i lutownica transformatorowa 100W Zostaje opakować wyniki w jakiś strawny format (JSON?) i wysłać w świat 🙂

Edytowano przez _LM_
  • Lubię! 1

Dzisiaj dostałem nowe zadanie: odczyt parametrów kompensatora mocy biernej. Choć tam jest dostępny CAN może łatwiej by było skorzystać 🤔

(edytowany)

Ogólnie problem z MODBUS to, to że mimo iż jest standard, to ilu producentów tyle jego implementacji. Każdy robi to praktycznie po swojemu. Czasami programowanie to 5 minut, innym razem rozgryzienie co miał producent na myśli to 2 godziny. Tak naprawdę wszystko rozbija się o to jak dobra mamy dokumentacje od producenta.

Niby tylko standardowy MODBUS, a ile opcji.

47757002_Nibymodbus.thumb.jpg.8490c0f11a53cf7002d147a14cf8340c.jpg

Edytowano przez BlackJack
  • Lubię! 2

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...