ATNEL tech-forum
https://forum.atnel.pl/

Modbus RTU potrzebna biblioteka
https://forum.atnel.pl/topic24581.html
Strona 1 z 1

Autor:  motomichu30 [ 8 lis 2023, o 18:56 ]
Tytuł:  Modbus RTU potrzebna biblioteka

Cześć,
Poszukuje biblioteki do obsługi protokołu Modbus RTU, chcę wykorzystać ten typ komunikacji w swojej pracy magisterskiej.
Potrzebuję skomunikować kilka modułów, przesłać miedzy nimi kilka zmiennych(około 10) oraz kilka poleceń.
Widziałem rozwiązania np. na githubie https://github.com/liyanboy74/modbus. Ale nie potrafię sprowadzić ich do formy akceptowalnej przez kompilator gcc w eclipse. Posiadam wszystkie biblioteki Mirka, łącznie z tą do obsługi Uart.
Nie chcę żeby ktoś robił cokolwiek za mnie, kieruję się jedynie z pytaniem bo a nuż ktokolwiek z Was budował własny projekt i ma przetestowaną bibliotekę.
Z góry dziękuję za okazaną pomoc.
Pozdrawiam
Michał

Autor:  MichalXY [ 8 lis 2023, o 21:33 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Cześć,

Ze swojej strony polecam freeModbus, pamiętam że na studiach tej biblioteki używałem. Link do githuba: https://github.com/chrismerck/freemodbu ... r/demo/AVR
Jak będę miał chwilę to może uda mi się jakieś projekty wygrzebać które zrobiłem na bazie tej biblioteki.

Autor:  motomichu30 [ 9 lis 2023, o 00:36 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

MichalXY napisał(a):
Cześć,

Ze swojej strony polecam freeModbus, pamiętam że na studiach tej biblioteki używałem. Link do githuba: https://github.com/chrismerck/freemodbu ... r/demo/AVR
Jak będę miał chwilę to może uda mi się jakieś projekty wygrzebać które zrobiłem na bazie tej biblioteki.

Widziałem to, wygląda dobrze ale kod był kompilowany na starym kompilatorze. Eclipse nie chce mi tego skompilować. Jeśli miałbyś przerobiony kod pod eclipsa to z chęcią bym skorzystał.

Autor:  Slawek5791 [ 9 lis 2023, o 17:51 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Tu masz spakowany projekt pod eclipse magistrali MODBUS RTU. Testowałem na płytce UNO na 328p. i symulatorze modbus master.

Autor:  motomichu30 [ 10 lis 2023, o 20:51 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Cześć,
Podpowiedzcie proszę, co mogę robić źle.
Ustawienia portu com wyglądają następująco:
Obrazek
Ustawienia programu wyglądają tak:
Obrazek

A cały projekt jest żywcem z załącznika kolegi Slawek5791

Dioda na przejściówce miga, sprzętu bym się nie czepiał.
Próbowałem opcji read imput registers i read holding registers.
Niestety cały czas mam brak odpowiedzi.
Z góry dziękuję za pomoc.

Autor:  Slawek5791 [ 13 lis 2023, o 20:43 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Tak na szybko to adres startowy w terminalu masz ustawiony na 1000, a w programie na 1. Poza tym ważna jest ilość rejestrów do odpytania. Jak będzie w terminalu ustawione więcej niż w programie, to też się wykrzaczy (ale mniej może być).

Autor:  motomichu30 [ 14 lis 2023, o 00:31 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Cześć,
Miałeś rację, skorzystałem z arduino bo tylko tam miałem ATmege328.
Wszystko działa.
Podpowiedzcie proszę, jak przerobić program pod ATmege32.
W pliku event_timer.c zmieniałem poniższe linijki z:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


na:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


O ile na ATmedze 328p wszystko działa, tak na ATmedze32 już nie.

Autor:  JarekK [ 14 lis 2023, o 09:23 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

W MKEclipse wyrzuca jeszcze błędy dla złych nazw wektorów przerwań dla atmegi32
Proponuję dodać do port.h w części dotyczacej atmegi 32

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


lub podmienić właściwe nazwy dla atmegi32 bezpośrednio w ISR

Autor:  motomichu30 [ 14 lis 2023, o 18:21 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Cześć,
Dziękuję za podpowiedź, niestety nadal nie działa :(
Jeśli ktoś byłby chętny zerknąć na mój kod to przesyłam go w załączniku.

Autor:  JarekK [ 14 lis 2023, o 22:30 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Nie wiem czy to wystarczy, ale lepiej gdy usuniesz definicje wcześniej przeze mnie proponowane i może popraw bezpośrednio wpisy w ISR .
Źle przepisałeś TIMER0..... a kompilator tego nie zauważa.
Na próbę może warto też użyć kwarca 16 MHz , mimo że oczywiście 1159200 Hz jest lepszy.

Autor:  motomichu30 [ 15 lis 2023, o 13:44 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Czy takie przepisanie Timera0 jest poprawne?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Przy kwarcu 8mHz układ odbiera i próbuje coś nadać ale wygląda to tak:
Obrazek
Zaś przy 16mHz na linii Tx cisza więc układ nie rozumie co odbiera

Autor:  JarekK [ 15 lis 2023, o 14:00 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Wygląda, że błąd był jeszcze z UBRR.
Poprawiłem całość pod MKEclipse dla ATmega32A. Możesz sprawdzić, czy działa?

Autor:  motomichu30 [ 15 lis 2023, o 14:43 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Przy 16MHz rezultat następujący:
Obrazek
Przy 11,0592MHz i 8Mhz brak odpowiedzi.
Próbowałem też przeliczać, tak żeby wychodziło równo 10ms:
OCR0 = (F_CPU/1024UL)/156UL;
Odpowiednio dla każdego taktowania ale to nic nie dawało

Autor:  JarekK [ 15 lis 2023, o 16:26 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Może w pliku portserial.c zamienić fragment na:
#define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) \
( ( F_OSC + UART_BAUD_RATE*8UL ) / (16UL * UART_BAUD_RATE ) - 1 )
// ( ( F_OSC ) / ( ( UART_BAUD_RATE ) * 16UL ) - 1 )

Może wzór Mirka na ubr coś odczaruje.

Ponadto proponuje zakomentować:

#if defined (__AVR_ATmega168__)
UCSRC |= ucUCSRC;
#elif defined (__AVR_ATmega169__)
UCSRC |= ucUCSRC;
#elif defined (__AVR_ATmega8__)
UCSRC = _BV( URSEL ) | ucUCSRC;
#elif defined (__AVR_ATmega16__)
UCSRC = _BV( URSEL ) | ucUCSRC;
#elif defined (__AVR_ATmega32__)
UCSRC = _BV( URSEL ) | ucUCSRC;
#elif defined (__AVR_ATmega128__)
UCSRC |= ucUCSRC;
#endif

i wpisać :
UCSRC = _BV( URSEL ) | ucUCSRC;

Ewentualnie ustawić projekt na Atmega32 zamiast ATmega32A

Autor:  motomichu30 [ 15 lis 2023, o 17:54 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Bardzo dziękuję za pomoc ale nadal to nie działa, chyba po prostu przesiądę się na 644p. Mam nadzieje że tam zadziała tak jak na 328p. Kombinowałem z różnymi taktowaniami i cokolwiek odpowiada tylko przy 16MHz ale jednak głupoty.

Autor:  JarekK [ 15 lis 2023, o 19:14 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

To na koniec spróbuj po podmianie załączonego pliku.

Autor:  motomichu30 [ 15 lis 2023, o 19:26 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Niestety...
Nadal przesyłane są głupoty.
Zamówiłem 644p, dam znać jak to zadziała.
Niestety, to nie biblioteka naczelnego wodza Mirka, nie działa zawsze i wszędzie (;

Autor:  JarekK [ 15 lis 2023, o 19:36 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

No trudno, nie mam więcej pomysłów na tą chwilę. Wydaję mi się, że kiedyś na forum ktoś wspominał, że robił modbus rtu pod 644p.

Autor:  mirekk36 [ 15 lis 2023, o 19:37 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

przyjdzie czas że i ja w końcu będę musiał pierdyknąć taką bibliotekę - z uwagi na to że niedługo będę musiał dłubać w wielkim komercyjnym projekcie gdzie ModbusRTU to będzie podstawa a i będzie to musiało działać na różnych prockach nie tylko AVR ale i ESP

Autor:  motomichu30 [ 15 lis 2023, o 19:52 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Mirku, kiedy będziesz miał ją gotową przynajmniej na betatesty? :)
Albo czy już mogę zapisać się na jakiś preorder?

Autor:  JarekK [ 15 lis 2023, o 21:27 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Ostatnia wersja, najmniej pokombinowana. Należy wybrać ATmega32.

Autor:  Slawek5791 [ 15 lis 2023, o 21:38 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Ale przecież oryginalna biblioteka Freemodbus obsługuje natywnie:
ATmega168,
ATmega169,
ATmega8,
ATmega16,
ATmega32,
ATmega128,
a ja przerobiłem ją na AT328p, więc wystarczy pobrać oryginalną (trochę wykastrować z TCP) i masz obsługę na AT32.

Mam nadzieję, że powstanie nowa biblioteka modbus z obsługą master i slave, bo Freemodbus obsługuje tylko slave, więc trzeba mieć jeszcze mastera (w postaci PC+program lub jakiś PLC).
Pozdrawiam

Autor:  JarekK [ 16 lis 2023, o 08:17 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Jeśli oryginalna biblioteka Freemodbus radzi sobie dobrze z atmega32 to pozostaje jeszcze do sprawdzenia, czy kwarc 18,4320 Mhz coś pomoże. Może biblioteka EVENTtimer za bardzo przeciąża podstawowy rdzeń modbusa i się krzaczy. Czy nie warto coś pozmieniać w EVENTtimer, ustawić na próbę np. na 100ms?
Czy pod atmega328 działa poprawnie z kwarcem 12 MHz lub 11.0592 MHz?

Autor:  JarekK [ 16 lis 2023, o 12:47 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Ciekawa jest biblioteka uModbus na githubie.
Jak dla mnie jest bardziej czytelna niż rozbudowany freemodbus.
Kompiluje się z marszu pod atmega328P.
Autor nic nie wspomina o prawach autorskich ale skoro tam jest umieszczona to do celów prywatnych pewnie można używać.
https://github.com/jurekms/uMODBUS/tree/master

Autor:  Slawek5791 [ 16 lis 2023, o 17:55 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Przecież można wogule wyciąć softtimery. One tylko były mi potrzebne do sterowania diodą i nie biorą żadnego udziału w transmisji danych przez Modbus. Testowałem tą bibliotekę na AT8, AT32, AT328p, AT1284p i AT2560. W żadnym przypadku nic się nie blokowało po mimo dużego projektu z obsługą PWM, I2C, FT811 itp. z kwarcami 8MHz, 11.052, 16 i 18.432MHz. Więc coś robisz nie tak. W terminalu modbus trzeba ustawić prędkość ilość bitów stopu i parzystości. Trzeba podać adres układu, adres od którego odczytujesz i zapisujesz dane do rejestrów i prawidłowa ilość danych (jak w programie w AT 32 masz do wysłania 4 wartości to nie można odczytywać np 5 danych bo się w terminalu wykszaczy i będziesz miał takie błędy). Poza tym projekt tej biblioteki powstał w 2006r i był do 2018r poprawiany i rozbudowywany na różne platformy, więc nie sądzę żeby miał jakieś błędy dla AVR.

Autor:  JarekK [ 17 lis 2023, o 20:47 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Znalazłem chwilkę czasu, wygrzebałem i podłączyłem atmega 32 i wszystko działa bez problemu, przynajmniej z tą ostatnią wersją załączoną kilka postów powyżej, więc nie jest to problem po stronie moich propozycji modyfikacji, a późniejsze gdybania należy zignorować.
Obrazek

Autor:  motomichu30 [ 17 lis 2023, o 21:02 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Jarku...
Bardzo Ci dziękuję,
Program działa, kliknięcie "pomógł" chyba nie wystarczy,
Koledzy Slawek5791 oraz JarekK jeśli podacie numer paczkomatu to z chęcią bym Cię Wam odwdzięczył bo teraz pisanie pracy pójdzie z górki.
Jeszcze raz dziękuję!

Autor:  Slawek5791 [ 18 lis 2023, o 02:09 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Cześć
Nie zapomni tylko, że tak naprawdę omawiana biblioteka obsługuje tylko wersję slave i nie za bardzo nadaje się do komunikacji po między dwoma lub kilkoma Atmegami, gdyż jedna z nich musiała by pracować jako master (czego ta biblioteka nie ma). Ja testowałem ją z PLC S7-1200, gdzie ww pracował jako master na sieci, a AT328p jako slave.

Autor:  motomichu30 [ 18 lis 2023, o 10:40 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

Wiem to i będę szukał rozwiązania, może uda mi się przerobić bibliotekę slave na mastera. Jeśli już slave działa tak jak potrzebuje to jestem w połowie sukcesu. Zajmę sie teraz częścią sprzętową a w międzyczasie będę się rozglądał za obsługą mastera.

Autor:  JarekK [ 18 lis 2023, o 11:30 ]
Tytuł:  Re: Modbus RTU potrzebna biblioteka

To bez analizatora stanów logicznych i biblioteki Mirka MKmultiuart bin chyba się nie obejdzie. Spore wyzwanie.
Fajnie by było gdybyś się pochwalił końcowym efektem.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/