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



Teraz jest 18 cze 2019, o 14:44


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 26 ] 
Autor Wiadomość
PostNapisane: 1 maja 2019, o 15:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 142
Pomógł: 2

Cześć, mam kłopot z komunikacją rs485, nigdy wcześniej jej nie używałem.
Obejrzałem wszystkie poradniki z kanału p. Mirka o rs485, podłączyłem na zestawie atb 1.04 wg poradnika.
Potrzebuje skomunikować ze sobą falownik afc200 i zestaw atb tak aby móc odczytać wybrane przeze mnie parametry.
Używam buforów cyklicznych - nadawczy wysyła wartość, w odbiorczym nigdy nic nie ma. Jest to najprawdopodobniej związane z błędnie używaną przez mnie komunikacją. Czy ktoś ma jakieś doświadczenie w tym temacie ? Podsyłam mój kod i zrzut z manuala dotyczący falownika.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Obrazek

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Ostatnio edytowano 1 maja 2019, o 16:44 przez Lex_, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 maja 2019, o 16:09 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 484
Pomógł: 117

Nie analizowałem dokładnie programu, ale na początek chciałem o coś spytać.
Lex_ napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Mógłbyś wytłumaczyć, co linijka ISR( USART_RXC_vect ); robi wewnątrz funkcji main()?

_________________
Miksowanie kodu C i ASM przy użyciu GCC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 maja 2019, o 16:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 142
Pomógł: 2

Niepotrzebnie się tam znalazła, mój błąd.
Zakomentowałem aby nie było wątpliwości.

Dorzucam funkcję inicjalizacji usart. Korzystam z konwertera znajdującego się na płytce - RS232 <-> RS485
Podejrzewam że wszystko rozbija się o CRC, ale wolałbym zapytać kogoś kto ma jakieś doświadczenie.

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

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 maja 2019, o 05:56 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 1807
Pomógł: 83

Najpierw spróbuj sie skomunikować z PC'ta (terminal lub symulator Modbusa - Modbus Poll) a jak już zaczniesz coś czytać to wtedy dopiero zacznij komunikację z AVR.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 maja 2019, o 06:39 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 134
Pomógł: 13

Może takie trywialne pytanie, czy ustawiłeś prędkość UARTA ?
(w nocie katalogowej masz dwie prędkości 9600 i 19200)
To po pierwsze.
Po drugie.
Warto by było podłączyć się do RS485 przejściówką RS485>USB i na PC podejrzeć czy coś na linii hula.
W zasadzie to każda zabawa z RS powinna się zacząć od "przyjęcia" choćby jednego bajta na terminal odpalony na PC.
Wtedy masz pewność że od strony mikrokontrolera wszystko jest ustawione dobrze.

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 maja 2019, o 10:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 142
Pomógł: 2

W falowniku mam wszystko ustawione - zezwolenie na komunikacje, prędkość 9600 itp.
Pewnie spróbuje przez atb jako przejściówkę połączyć falownik z PC za radą kolegów. Jeżeli będę miał jeszcze jakieś problemy albo pytania to podeśle je tutaj. Na razie dziękuję za pomoc.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 maja 2019, o 13:01 
Offline
Użytkownik
Avatar użytkownika

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

Kolego,
Komunikacja Modbus to niestety nie jest zwykłe wysłanie paru bajtów po kabelku i radosne oczekiwanie na odpowiedź. Poczytaj sobie o tym protokole bo jest fajny, popularny dość, przydatny i warto go znać.
Po pierwsze- prawidłowa ramka modbus składa się z: adresu slave'a+funkcji+nr rejestru+ilosc danych+CRC.
Co chciałeś uzyskać swoim: char send_p[] = {'2', '3', '4', '4', '0', '0', '0', '3', '\0'}; // dane wysyłane do pobrania parametru.
Możesz spróbować złożyć "na piechotę" prawidłową ramkę i wysłać to na RS. Może sterownik coś odpowie... Ustal jaki masz adres falownika, dane spod jakiego adresu chcesz pobrać? Potem trzeba policzyć crc. Masz podpowiedź od producenta: Falownik obsługuje tylko funkcje 03 i 06, i podaje tylko jeden adres w jednym zapytaniu.

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 maja 2019, o 17:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 142
Pomógł: 2

Póki co używałem już ze dwa programy na PC chcąc się skomunikować i poległy, zero odpowiedzi. Adres falownika sobie ustawiłem, znam go, to samo parametry transmisji. To że komunikacja nie jest taka prosta jak początkowo sądziłem już wiem. Zastanawia mnie natomiast to dlaczego nie mogę się połączyć przez przejściówkę z atb i program na PC - podłączam wszystko wg instrukcji, widzę jak dioda nadawcza miga, ale nic nie jestem w stanie odebrać. Musze znaleźć program, w którym widzę format ramki. Doczytałem w instrukcji że jeżeli wartość CRC się nie zgadza to falownik w ogóle nie odpowiada, ale jaki ja mam wpływ na CRC poprzez program PC ? Pracuje jeszcze nad przerobieniem biblioteki freemodbus ma atmege 32 i próbować to odpalić.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 maja 2019, o 17:57 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 1807
Pomógł: 83

Jakich software użyłeś na PC to prób?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 maja 2019, o 18:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 142
Pomógł: 2

Dokładnie mówiąc:
- Radzio Modbus Master Simulator
- Modscan64
- Modbus Poll

Rozumiem że CRC jest wbudowane w ramke i nie mam tam ingerencji. Prawda jednak taka że transmisje znam słabo bo używam pierwszy raz.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 maja 2019, o 18:07 
Offline
Użytkownik
Avatar użytkownika

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

Lex_ napisał(a):
CRC jest wbudowane w ramke i nie mam tam ingerencji

Jeżeli używasz programu an PC lub biblioteki master Modbus na AVR to tak. CRC to suma kontrolna wyliczana na podstawie całej ramki. Biblioteka liczy crc, dokłada na oniec ramki i wysyła. Slave odbiera ramkę, liczy swoje CRC i porównuje. Jak się nie zgadza to olewa ramkę i czeka na następną. Jak CRC jest ok to sprawdza pierwszy bajt ramki czy ona dotyczy jego. Jeżeli nie, to znów olewa. Jeżeli jest jego adres, sprawdza nr funkcji itd.

Użyj programu modbusPoll na pc. Idzie tam obejrzeć jak wygląda wysyłana ramka i jej CRC. Ewentualnie spróbuj zagadać z falownikiem bezpośrednio z PC. Potrzebujesz przejściówki RS485 na COM lub USB. Pamiętaj, że adres często podawany w urządzeniach jest w hex - idzie się przejechać na tym

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 maja 2019, o 18:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 142
Pomógł: 2

Jest możliwość wykonania jakiegoś echo na linii transmisyjnej RS485 aby urządzenia podłączone odpowiedziały ? Adres rozgłoszeniowy zdaje się być 0 (zero).
Adres urządzenia ustawiłem sobie na wartość 5 (domyślnie był 12 czyli w hex 'C'). Jeżeli będzie bez efektów to muszę sprawdzić na innej przejściówce właśnie - np USB - RS485.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2019, o 20:27 
Offline
Użytkownik
Avatar użytkownika

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

Nie bardzo rozumiem jakie echo ty chcesz uruchomić.??
Na adres rozgłoszeniowy chyba też raczej żadne urządzenie Ci nie powinno odpowiedzieć. Owszem, jest takie coś ale chyba w innym celu. Co chciałbyś otrzymać wysyłając coś na adres 0?
Przeanalizuj sobie jak powinna wyglądać prawodłowa ramka jakiej oczekuje falownik, jaki adres chcesz odczytać i kombinuj. Na początek przez przejściówkę np usb-rs485 z komputera a jeżeli nie masz takiej to za pomocą programu w kompie "policz sobie crc dla ramki i ją zbuduj, a potem wyślij z procka przez uart. Nie myśl też, że to już prawidłowa obsługa modbusa - do tego jeszcze daleeeeka droga.

załóżmy, że Twój falownik ma adres tak jak pisałeś '5' a adres rejestru odczytywanego niech będzie 2.12. Wiesz też, że użyć musisz funkcji 03 więc rejestry holding registers mają zakres od 4xxxx

Prawidłowa ramka to:
AA BB CC CC DD DD EE EE
AA - adres faalownika
BB - funkcja
CC - nr rejestru
DD ilość danych
EE - CRC
Twoja ramka powinna wyglądać tak:

[05][03][07][DC][00][01][45][00]

i nie ma bata - falownik musi na to odpowiedzieć.
Pisz jak coś. Napisz jak efekty i jakim sprzętem dysponujesz do gadania z falownikiem

------------------------ [ Dodano po: 18 minutach ]

aa i jeszcze jedno:
Lex_ napisał(a):
Adres urządzenia ustawiłem sobie na wartość 5

jak tego dokonałeś??
Rzuciłem okiem na instrukcję i adres to 12 czylo 0C w HEX. Jak go zmieniłeś nie mając działającej komunikacji Z falownikiem?ą

Weź przeczytaj całą instrukcję (masz po polsku wiec chyba nie jest to trudne) zastanów się co jak działa i co chcesz osiągnąć i kombinuj. Potem napisz z którym etapem masz problem.

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2019, o 21:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 142
Pomógł: 2

Cytuj:
Weź przeczytaj całą instrukcję (masz po polsku wiec chyba nie jest to trudne) zastanów się co jak działa i co chcesz osiągnąć i kombinuj


Kolego @skalarro spokojnie, opanuje to, nowa rzecz, uczę się, mam pytania to je zadaje. Za objaśnienia dzięki, na pewno się przydadzą.
Dziś załatwiłem sobie porządny przewód pod RS485 - ekranowany, dwie skręcone żyły itp, nie ma mnie jednak w domu i go dziś nie sprawdzę.

Cytuj:
jak tego dokonałeś??
Rzuciłem okiem na instrukcję i adres to 12 czylo 0C w HEX. Jak go zmieniłeś nie mając działającej komunikacji Z falownikiem?ą


Dokonałem bo mam fizyczny dostęp do falownika - przecież można odczytać poszczególne parametry falownika na wyświetlaczu i je zmienić za pomocą przycisków na falowniku.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2019, o 21:10 
Offline
Użytkownik
Avatar użytkownika

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

Lex_ napisał(a):
przecież można odczytać poszczególne parametry falownika na wyświetlaczu i je zmienić za pomocą przycisków na falowniku

A widzisz... tego z kolei ja nie doczytałem.

Lex_ napisał(a):
porządny przewód pod RS485 - ekranowany, dwie skręcone żyły itp

Wierz mi, to nie jest konieczne do testów. Nie mówie, że takie kable są zbędne, ale komunikacja na niewielkie odległości, z małym baudrate i w środowisku bez ekstremalnych zakłóceń to na kablu od tostera pójdzie.

Pobaw się na spokojnie, a jak coś to pytaj śmiało

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2019, o 21:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 142
Pomógł: 2

Cytuj:
Wierz mi, to nie jest konieczne do testów. Nie mówie, że takie kable są zbędne, ale komunikacja na niewielkie odległości, z małym baudrate i w środowisku bez ekstremalnych zakłóceń to na kablu od tostera pójdzie.

Może i tak ale muszę coś wyeliminować, dlatego zmieniłem przewód aby mieć 100% pewności.
Jutro dalsze testy. Na razie in touch.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 maja 2019, o 21:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 142
Pomógł: 2

Obrazek

Ruszyło. Zmieniłem przewód, podpiąłem wszystko jak należy i układ zaczął gadać. Dla potomnych:
Obrazek

Zostało opanować kod na avr. Jeżeli to możliwe to proszę tematu jeszcze nie zamykać panie admin.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 maja 2019, o 22:30 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 1807
Pomógł: 83

No to teraz możesz się zabrać za kodowanko :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2019, o 12:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 142
Pomógł: 2

Tak jest, trzeba teraz opracować komunikację z avr a potem z stm32 bo docelowo prawdopodobnie ten układ będzie zastosowany. Akurat do mojego projektu muszę zastosować RS485 Modbus RTU bo taki sposób transmisji ma falownik, ale z doświadczenia wiem że jest on mega wygodny ponieważ miałem styczność z systemem klimatyzacji w obiekcie na dużym terenie (szpital) gdzie temperaturę zadaną zmienia się zdalnie z jednego miejsca na komputerze PC dla ponad 20 jednostek w różnych miejscach.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2019, o 16:41 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 1807
Pomógł: 83

Po to właśnie zostały wymyślone takie rozwiązania :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2019, o 18:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 142
Pomógł: 2

ObrazekObrazek

Modbus zaczął wyrzucać dane, muszę teraz dobrać się do odpowiedniego rejestru i odczytywać dane. Zauważyłem dzięki programowi Modbus Poll że dane są w postaci 16 bitowej i wartość w rejestrze zapisana jest w starszej części (np. adres urządzenia). Tak czy siak najtrudniejsze za mną. Dziękuję za pomoc. Gdyby była potrzeba to zrobię jakiś poradnik jak uruchomić coś takiego we własnym zakresie - wystarczy napisać pod postem jeżeli kogoś to interesuje. Kodu udostępnić nie mogę bo posłuży m. in. do mojej pracy inżynierskiej.

Pozdrawiam.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2019, o 20:04 
Offline
Użytkownik

Dołączył(a): 13 paź 2015
Posty: 141
Lokalizacja: Rybnik
Pomógł: 5

Cześć Lex_,
Fajnie, że Ci się udało uruchomić Modbus. Oczywiście jestem zainteresowany takim poradnikiem.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2019, o 20:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 142
Pomógł: 2

Ok, postaram się coś skleić w wolnym czasie ;)

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2019, o 23:49 
Offline
Nowy

Dołączył(a): 03 gru 2014
Posty: 21
Pomógł: 2

Super jeśli uda Ci się opisać. Będzie to duże ułatwienie przy stawianiu pierwszych kroków z modbusem

Wysłane z mojego SM-G900F przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 maja 2019, o 07:58 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 832
Lokalizacja: Kraków
Pomógł: 68

Ja też chcę opis :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2019, o 13:00 
Offline
Użytkownik

Dołączył(a): 11 kwi 2014
Posty: 195
Lokalizacja: Sandomierz
Pomógł: 0

Hej,

Lex_, jaką bibliotekę do modbus użyłeś ? Ja ostatnio mordowałem modbus na STM32, niektóre procki mają ciekawą opcjonalność w module USART - receive timeout. Polega ona wykrywaniu przez usart ciszy na linii RX. Dzięki czemu całkowicie odszedłem od odbioru i wysyłania danych przez CPU. Wszystko leci przez DMA. Jak doleci ramka, na linii zapanuje cisza USART zgłasza przerwanie, w którym analizuję odebraną ramkę.



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: 26 ] 

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