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



Teraz jest 28 mar 2024, o 17:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 62 ]  Przejdź na stronę 1, 2, 3  Następna strona
Autor Wiadomość
 Tytuł: MODBUS - RS485
PostNapisane: 30 cze 2016, o 17:32 
Offline
Użytkownik

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

Cześć Wszystkim!

Ostatnio pracuję nad pracą inżynierską w której wykorzystuję sieć RS485 opartej o mikrokontolery AVR działającej z protokołem MODBUS. Ogólnie z samym protokołem problemu nie było kiedy używałem RS232.
Problemy się zaczęły gdy usiadłem do tego właśnie od strony magistrali RS485. Dla testów podłączyłem ATmege32 do konwertera RS485-TTL(takowy otrzymałem od mojego promotora: http://i01.i.aliimg.com/wsphoto/v0/3229 ... oducts.jpg ) wg. poniższego schematu(jest on uproszczony ponieważ dla testów korzystam z gotowych modułów a schemat odwzorowuje jak podłączyłęm mikrokontoler z układem MAX485:

Obrazek

Masterem w sieci jest komputer(docelowo będzie to RaspberryPI 3) który komunikuję się z układem(docelowo będą to przynajmniej 2 układy) poprzez ATB-USB-RS232 który pracuje w trybie przejściówki USB/RS485.

Po wgraniu poniższego kodu:

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



i uruchomieniu programu Mbpool otrzymuje komunikat: Illegal Data Value - wyczytałem że dzieje się tak gdy chcę odczytać za duże liczbę rejestrów na raz przy czym ten sam kod działa przy wykorzystania RS232. Przetestowałem również kod z tego wątku: topic1523.html#p81297 i również działa przy RS485.

Testując ową magistralę załączyłem w pliku port.h kontrolę kierunku danych tj. #define RTS_ENABLE.

Wyprzedzając pytania czy w ogóle działa magistrala RS485 odpowiadam że tak ponieważ sprawdzałem to z kodem z BB tj. odbiór i nadawanie danych.

Ogólnie jestem załamany bo już któryś dzień z rzędu się męczę z tym i nic nie wychodzi :( .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 17:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 sie 2013
Posty: 795
Lokalizacja: Poznań
Pomógł: 59

pytanie - czy podglądałeś transmisję na rs485? Albo wepnij analizator albo weź jakiś procek najlepiej z 2xuart i na jednym tylko odbieraj rs485 i wyświetlaj drugim do komputera. Mi to pomogło kiedyś.

Zapomnialem - ft232 z konwerterem też może być - ja nie miałem wtedy. Pamiętaj żeby tylko odbierać :-)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 18:51 
Offline
Użytkownik

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

Podłączyłem drugą przejściówkę USB/RS485 i to co otrzymuje mnie mocno zastanawia ponieważ gdy odpalam implementacje modbusa to
mbpool daje komunikat illegal data value a na terminalu do którego jest podłączona druga przejściówka dostaje śmieci a jak odpalam zwykłe wysyłanie danych po UART z RS485 dostaje na obu terminalach te same łańcuchy tekstowe które ATmega mi wysyła do komputera.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 19:09 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

A jak wygląda sprawa z terminatorami , bo na schemacie nie ma?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 19:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

problemem może być tu wlasnie ten mbpoll.

też miałem problemy z komunikacją między nim a atmegą. Nie pamiętam co bylo nie tak ale było.... Nestety było to dość dawno temu. Spróbuj z modbusMAT się dogadać.

A najlepiej podłącz sie jeszcze rs232 pod piny procka. najpierw pod RX, potem TX. Zobacz na terminalu co lata po liniach. Bedziesz widział gdzie się sypie, czy procek dostaje ramkę i jak na nią odpowiada.

aha, pamiętaj że w mbpoll adres podajesz w dec, a uC w hex.

pisz jak bedą problemy. musi działać.


Autor postu otrzymał pochwałę

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 19:16 
Offline
Użytkownik

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

krish - ehh zapomniałem dodać na schemacie - jest jeden rezystor 120 Ohm i przy ATB-USB-RS232 jest również zapięty terminator.

skalarro - zaraz sprawdzę ale ten sam błąd miałem przy QModMasterze, ale tak jak mówisz jeszcze sprawdzę z ModbusMAT.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 19:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

aha, i wypier...tnz odłącz te pullupy od MAXa, nie mówiąc już o tym, że RE/DE masz podwojnie podciągnięty ;]


ok, widzę teraz że to fabryczne rozwiazanie...


Autor postu otrzymał pochwałę

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Ostatnio edytowano 30 cze 2016, o 19:24 przez skalarro, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 19:21 
Offline
Użytkownik

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

skalarro - rozumiem że mam wywalić wszystkie rezystory podciągające, bez wyjątku?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 19:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

jak to jest konstrukcja fabtyczna to nie wiem ale dziwnie to wyglada. to wszystko masz juz załatwione w programie.

ale podpowiem Tobie, że kiedys zrobiłem takie urządzonko z modbusem i działało. Wsytarczyło podłączyć leda pod linię rx i już było po komunikacji. Led oczywiście z rezystorem, prąd ograniczony był do kilku mA a i tak się sypało./

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


Autor postu otrzymał pochwałę

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 19:50 
Offline
Użytkownik

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

skalarro - oczywście że mam tak w pliku port.h.

Ogólnie zrobiłem to o czym mówiłeś tj. wywaliłem wszystkie rezystory podciągające i jest to samo :( sprawdzałem na programie Modbuspool oraz QModMaster . Jeszcze sprawdziłem czy nie wysłałem maxa do krainy wielkich impedancji ale wszystko jest ok tj. zwykłe wysyłanie danych po rs485 do komputera działa. Niestety nie ma możliwości sprawdzenia na programie Modbus MAT bo nie mogę go znaleźć a wiem że kiedyś miałem na starym komputerze jak testowałem modbusa po rs232.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 19:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

ok, zaraz znajde i zapodam prog,

Do tematu wrócimy jutro bo teraz jest wiemy co.........

POOOOLSSKKAAAAAA!!!!!!!!!


Autor postu otrzymał pochwałę

Załączniki:

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

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 20:02 
Offline
Użytkownik

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

Dzięki śliczne. Ja teraz też mecz oglądam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 15:09 
Offline
Użytkownik

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

skalarro - sprawdziłem programem ModbusMAT i niestety jest to samo.

1Yokoon - tak powinno być w ostrych nawiasach ale to akurat jest wzięte z dema biblioteki FreeModbus.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 15:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

No to patrz co sie dzieje u mnie...

i to na Twoim wsadzie...

ObrazekObrazek

wszystko działa.

ZAUWAŻ, ze jest pewien myk, o którym wczoraj pisałem.... tylko nie pamiętałem o co chodziło.
mbpoll zawyża adres o 1. Tak więc jeżeli odczytujesz cała tablicę to możesz sie nie mieścić i dostajesz w/w błędy jak Illegal Data Value

ale ma modbus mat wszystko powinno byc ok, więc coś jeszzce jest nie tak.

Napisz jakie wpisujesz wszystkie parametry w programie - adres, zakresy prędkości funkcje - WSZYSTKO


Autor postu otrzymał pochwałę

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 15:39 
Offline
Użytkownik

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

Parametry transmisji
- prędkość: 9600
- parzystość: even
- 1 bit stopu

Parametry do odczytu danych:

Obrazek

Na chwilę przełączyłem połączenie do RS232 i wszystko działało a na RS485 taki błąd jak wyżej



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 15:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

Spróbuj dla 31 rejestrów albo jeszcze mniej.

Nie, to nie to. U mnie 32 tez czyta.

przełącz na zakładkę comm monitor i pokaż co tam się dzieje


Autor postu otrzymał pochwałę

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 15:55 
Offline
Użytkownik

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

Zmieniłem konwerter RS485(ten sam model) i zaczęło działać... Trochę jest to dziwne bo gdyby tamten konwerter był walnięty to by najzwyklejsza transmisja RS485 nie powinna działać...
No nic teraz biorę się za podłączenie kolejnego układu do sieci i czuje że będzie jazda bez trzymanki.

skalarro i icer_cmg dzięki serdeczne za pomoc w temacie.

Jeżeli będę miał problemy z wieloma slave'ami na w sieci to na pewno się odezwę bo może komuś innemu się to przyda.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 16:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

Jak co to wal śmiało, pomożemy ;]

Jazdy nie będzie, Modbus to bardzo wdzięczny protokół.


Autor postu otrzymał pochwałę

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2016, o 11:24 
Offline
Użytkownik

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

Jednak jest jazda... Jako że uporałem się z jednym układem podłączonym do RS485 to zabrałem się za podłączenie drugiego układu i przez powiedzmy 10 minut działało to wszystko bardzo stabilnie tj. ModbusMAT odpytywałem jednego slave'a(układ o adresie 10) a drugiego(układ o adresie 9) zostawiłem w spokoju(był cały czas podłączony do sieci).

Oba układy podłączyłem wg. poniższego schematu(jest to schemat uproszczony ponieważ korzystam z gotowych modułów)

Obrazek

W pierwszym układzie znajduje się poniższy program:

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




W drugim układzie znajduje się poniższy program:

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


Jedyną modyfikacją jaką zastosowałem w konwerterach to to że zwarłem ze sobą linie DE oraz RE aby móc sterować kierunkiem danych jednym pinem.
Oba układy zasilam zasilaczem 5V o wydajności prądowej 3.1A .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2016, o 11:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

Napisz jeszcze co się dzieje?


Autor postu otrzymał pochwałę

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2016, o 11:28 
Offline
Użytkownik

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

Najważniejszego zapomniałem... Po jakimś czasie dostaje komunikaty: illegal data value albo Timeout. Dodam jeszcze że jak układy osobną działają to wszystko jest ok. Takie cuda dzieją się jak są dwa układy podłączone.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2016, o 11:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

Wieczorem będę przy komputerze to pomyślimy



1. rezystory terminujące jak już je dajesz (prawidłowo), to mają być tylko na obu końcach magistrali. Mam nadzieję, że przy przejściówce do kompa nie masz trzeciego... A najlepiej jakby był tylko przy kompie i przy ostatnim slav'ie

2. jak wygląda i ile trwa odczyt czujników temperatury. co robifunkcja set_mb_regs(); ?

3. Jak często odpytujesz układy?? Jeżeli odpytujesz drugi jak pierwszy jeszcze nadaje, będą cuda...

--------------
i teraz tak:
1. na próbę daj sobie spokój z odczytem temperatur, przypisz stałe wartości rejestrom, najlepiej kolejne wartości abyć widział czy odczyty są ok.
2. spróbuj podkręcić prędkość transmisji do 19200 a najlepiej do 57600 lub 115200. 9600 to baaardzo wolno.
3. ostatecnie wywal pooling z pętli głównej i spróbuj go umieścić w przerwaniu od timera. zobacz czy będzie jakiś efekt....

Daj znać jak teraz się zachowuje, będziemy szukać dalej


Autor postu otrzymał pochwałę

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2016, o 19:20 
Offline
Użytkownik

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

skalarro już odpowiadam na twoje pytania:

1. No właśnie jak testowałem na przejściówce miałem zapięty rezystor terminujący
2. Odczyt temperatur realizuje funkcja set_mb_regs i tak wygląda:

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


3. Odpytuje tylko układ z termometrami, tamten jest podłączony ale nie jest odpytywany.

Teraz testuję wg. takiego schematu:

- odpięty rezystor terminujący na przejściówce przy komputerze
- układ nie odczytuje temperatur tylko wysyła kolejne liczby do komputera



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2016, o 19:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

MichalXY napisał(a):
Teraz testuję wg. takiego schematu:

i jakie efekty??

odpytuj oba ale bez temperatur na razie. co ile czasu wysylasz zapytanie?? ja odpytuje co 10ms 25 slave'ów i z kazdego pobieram od 6 do 20 HoldingRegisters i się wyrabiają czasowo.


Autor postu otrzymał pochwałę

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2016, o 19:32 
Offline
Użytkownik

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

Póki co jest ok, ale pewność to ja uzyskam jak układ podziała jeszcze 2 h. minimum. Jutro jak z pracy wrócę puszczę go na 8h. Tylko teraz pytanie jak temat będzie wyglądał jak zacznę odpytywać drugi układ, co się wtedy będzie działo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2016, o 19:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

nie ma co czekać myślę. puszczej od razu odpytywanie obu układów. i obciaz trochę magistrale.... Daj odpyt ze 20-30 Holding w każdym, puść to na 57600kbps i patrz co się dzieje. Nie napisałeś jak często odpytujeszc slejwy

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2016, o 19:37 
Offline
Użytkownik

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

Co 1s. ale docelowo to będzie 5s.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2016, o 19:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

uu to malutko, myślałem że układy się z prędkością nie wyrabiają ale przy 1/s to nie to. ja pytam moje 100 razy na sekundę wszystkie po kolei. zrób jak pisałem wyżej.
tylko z komputera nie odpytasz obu układów po kolei chyba... ale zobacz jak odpowiada co 10ms lub nawet 5ms, oczywiście bez temperatur i oba wipęte w magistralę


Autor postu otrzymał pochwałę

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2016, o 19:57 
Offline
Użytkownik

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

Przy odczycie co 10 ms dostaje komunikat o błędzie CRC w odebranej ramce, ale jeszcze musze zwiększyć prędkość transmisji to może będzie lepiej.

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Zwiększyłem prędkość do 57600 i dostaje te same komunikaty(nie zawsze, bo daje rade odebrać ramkę ale się pojawiają)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2016, o 20:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

uprość jak tylko się da wsady do procków. wywal wszelkie timery, przerwania, odczyty. zapisz przed pętlą główną rejestry a w pętli tylko pooling. Nic więcej. będziesz wiedział czy wina wsadu proca czy może komputera??masz jakąś wolną przejściówkę 232 żeby się podłączyć terminalem i "posłuchać" trochę co tam się dzieje?


Autor postu otrzymał pochwałę

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



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: 62 ]  Przejdź na stronę 1, 2, 3  Następna strona

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