Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 30 gru 2024, o 15:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 30 ] 
Autor Wiadomość
PostNapisane: 8 lis 2023, o 18:56 
Offline
Użytkownik

Dołączył(a): 12 paź 2014
Posty: 32
Pomógł: 0

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ł



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2023, o 21:33 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lis 2023, o 00:36 
Offline
Użytkownik

Dołączył(a): 12 paź 2014
Posty: 32
Pomógł: 0

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ł.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lis 2023, o 17:51 
Offline
Nowy

Dołączył(a): 27 lut 2015
Posty: 19
Pomógł: 2

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


Autor postu otrzymał pochwałę

Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2023, o 20:51 
Offline
Użytkownik

Dołączył(a): 12 paź 2014
Posty: 32
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2023, o 20:43 
Offline
Nowy

Dołączył(a): 27 lut 2015
Posty: 19
Pomógł: 2

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ć).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2023, o 00:31 
Offline
Użytkownik

Dołączył(a): 12 paź 2014
Posty: 32
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2023, o 09:23 
Offline
Użytkownik

Dołączył(a): 13 lut 2012
Posty: 173
Pomógł: 10

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2023, o 18:21 
Offline
Użytkownik

Dołączył(a): 12 paź 2014
Posty: 32
Pomógł: 0

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.


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2023, o 22:30 
Offline
Użytkownik

Dołączył(a): 13 lut 2012
Posty: 173
Pomógł: 10

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2023, o 13:44 
Offline
Użytkownik

Dołączył(a): 12 paź 2014
Posty: 32
Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2023, o 14:00 
Offline
Użytkownik

Dołączył(a): 13 lut 2012
Posty: 173
Pomógł: 10

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


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2023, o 14:43 
Offline
Użytkownik

Dołączył(a): 12 paź 2014
Posty: 32
Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2023, o 16:26 
Offline
Użytkownik

Dołączył(a): 13 lut 2012
Posty: 173
Pomógł: 10

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2023, o 17:54 
Offline
Użytkownik

Dołączył(a): 12 paź 2014
Posty: 32
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2023, o 19:14 
Offline
Użytkownik

Dołączył(a): 13 lut 2012
Posty: 173
Pomógł: 10

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


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2023, o 19:26 
Offline
Użytkownik

Dołączył(a): 12 paź 2014
Posty: 32
Pomógł: 0

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 (;



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2023, o 19:36 
Offline
Użytkownik

Dołączył(a): 13 lut 2012
Posty: 173
Pomógł: 10

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2023, o 19:37 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27322
Lokalizacja: Szczecin
Pomógł: 1041

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

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2023, o 19:52 
Offline
Użytkownik

Dołączył(a): 12 paź 2014
Posty: 32
Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2023, o 21:27 
Offline
Użytkownik

Dołączył(a): 13 lut 2012
Posty: 173
Pomógł: 10

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


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2023, o 21:38 
Offline
Nowy

Dołączył(a): 27 lut 2015
Posty: 19
Pomógł: 2

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2023, o 08:17 
Offline
Użytkownik

Dołączył(a): 13 lut 2012
Posty: 173
Pomógł: 10

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?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2023, o 12:47 
Offline
Użytkownik

Dołączył(a): 13 lut 2012
Posty: 173
Pomógł: 10

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2023, o 17:55 
Offline
Nowy

Dołączył(a): 27 lut 2015
Posty: 19
Pomógł: 2

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lis 2023, o 20:47 
Offline
Użytkownik

Dołączył(a): 13 lut 2012
Posty: 173
Pomógł: 10

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lis 2023, o 21:02 
Offline
Użytkownik

Dołączył(a): 12 paź 2014
Posty: 32
Pomógł: 0

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ę!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2023, o 02:09 
Offline
Nowy

Dołączył(a): 27 lut 2015
Posty: 19
Pomógł: 2

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2023, o 10:40 
Offline
Użytkownik

Dołączył(a): 12 paź 2014
Posty: 32
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2023, o 11:30 
Offline
Użytkownik

Dołączył(a): 13 lut 2012
Posty: 173
Pomógł: 10

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 30 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO