logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

MODBUS RTU - Komunikacja Modbus RTU sterownika GE FANUC PAC Systems RX3i

akinoMM 20 Sie 2014 13:59 6171 24
REKLAMA
  • #1 13892707
    akinoMM
    Poziom 9  
    Posty: 13
    Ocena: 1
    Witam,

    mam problem z komunikacją za pomocą protokołu MODBUS RTU (jako Master). Używam sterownika GE RX3i z jednostką centralną CPE310. Chcę skonfigurować połączenie z falownikiem (slave) za pomocą portu 2 ( RS485).

    poniżej przesyłam dane dotyczące komunikacji, którą chcę wykonać

    MODBUS RTU (Master)
    port 2 (RS485)
    szybkość trasnsmisji: 9600
    data bits: 8
    flow control: none
    parity: none
    stop bits: 1
    2-wire

    Korzystam z materiałów które dodałam w załączniku. Jest to przykład komunikacji dla portu 1 (rs232) , ja natomiast chcę komunikować się poprzez port 2 (rs485) i tutaj pojawia się problem, podczas kompilacji wyświetla się błąd. Dodam że połączenie sterownika z falownikiem jest prawidłowe. Wydaj mi się że błąd musi być ze strony programowej (podanie nieprawidłowych parametrów w bloku BLKMOV bądź CALL MB P1)


    Czy ktoś wie jak rozwiązać mój problem? Jakie parametry podać przy tej komunikacji?
    Proszę o pomoc.
    Załączniki:
    • Modbus_Master_for_PACSystems_Ver_101a.doc (428.5 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Quick_Start_PAC_Modbus_Master.doc (32.5 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • RX3i_M_Bus_QuickStart_Port1.zip (39.12 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 13893767
    Markos80

    Specjalista Automatyk
    Posty: 1860
    Pomógł: 474
    Ocena: 214
    akinoMM napisał:
    ja natomiast chcę komunikować się poprzez port 2 (rs485) i tutaj pojawia się problem, podczas kompilacji wyświetla się błąd.
    Wystarczy zmienić port na 2, w przykładzie (M_BUS rung 15) i w konfiguracji portu wybrać Serial I/O oraz wymagane parametry komunikacji. Zakładam, że rack masz 0 i slot 2 dla CPU.
    Jaki błąd masz podczas kompilacji?
    Może wrzuć swój fragment kodu to się zerknie.

    akinoMM napisał:
    Dodam że połączenie sterownika z falownikiem jest prawidłowe.
    Skąd ta pewność :D? Poprawnie przeszłaś z 4-wire na 2-wire?
    Konto firmowe:
    PUMPA
    Widok 7, Łuczyce, 32-010 | Tel.: 502XXXXXX (Pokaż) | Strona WWW: www.pumpa.pl
  • REKLAMA
  • #3 13895131
    akinoMM
    Poziom 9  
    Posty: 13
    Ocena: 1
    oczywiście zmieniłam port i parametry, jednak nie jestem pewna czy są one właściwe. W załączniku fragment kodu.

    Jeżeli chodzi o podłączenie do sterownika to zrobiłam przejściówkę według schematu (załącznik RS485.pdf str 7)
    Załączniki:
    • RS485.pdf (270.64 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Po_aktywacji_T00001.doc (373 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • po_zmianie_parametrow.doc (368.5 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Program_w_trybie_RUN.doc (360 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #4 13895295
    akinoMM
    Poziom 9  
    Posty: 13
    Ocena: 1
    Konfiguracja sterownika wygląda nastepująco:
    rack 0
    slot 0 dla CPU
  • #5 13895314
    Markos80

    Specjalista Automatyk
    Posty: 1860
    Pomógł: 474
    Ocena: 214
    Nie wiem, który zrzut bardziej aktualny, ale w jednym masz:
    Status z funkcji 4358, czyli 16#1106 - Bad Buffer offset – “C” block Input 5 not a good value need space for 150.
    W drugim offset poprawiony i błąd 261, 16#105, czyli Timeout – response was not received within timeout period.

    Jeśli timeout to sprawdziłbym:
    - parametry transmisji, ew. czy timeout 500ms nie jest za krótki,
    - adres falownika,
    - poprawność połączenia (A+A', B+B' mają dać odpowiednio A i B, nie wiem jaki falownik, ale różnie producenci oznaczają linie i nie zawsze prawidłowo, więc możesz spróbować zamienić A z B miejscami)
    - jeśli długi kabel lub zakłócenia to wstawiłbym rezystory na końcach,

    Czy próbowałaś się połączyć z falownikiem jakimś programem bezpośrednio np. z komputera przy użyciu Modbus Tester? Możliwe, że chcesz przeczytać za dużo rejestrów na raz lub akurat te potrzebują funkcji 4, a nie 3.
    Konto firmowe:
    PUMPA
    Widok 7, Łuczyce, 32-010 | Tel.: 502XXXXXX (Pokaż) | Strona WWW: www.pumpa.pl
  • REKLAMA
  • #6 13895416
    akinoMM
    Poziom 9  
    Posty: 13
    Ocena: 1
    Sprawdziłam parametry transmisji i poprawność połączenia.
    W załączniku Print Screen ustawień portów, moje pytanie brzmi czy port 1 może być tak ustawiony ?

    Nie próbowałam się połączyć z programem za pomocą Modbus Tester.
    Używam modułu ABB Drives Modbus Adapter Module RMBA-01 który ma mi umożliwić komunikację z ACS800


    Poza tym pojawił mi się błąd podczas startu programu : Reference memory address is out of range. Czy dobrze rozumiem, że błąd ten jest w rack 0 slot 0 (Loc 0.0) ?
    Załączniki:
    • Dok4.doc (408 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #7 13895446
    Markos80

    Specjalista Automatyk
    Posty: 1860
    Pomógł: 474
    Ocena: 214
    akinoMM napisał:
    W załączniku Print Screen ustawień portów, moje pytanie brzmi czy port 1 może być tak ustawiony ?
    Jeśli go do niczego nie używasz to nie ma znaczenia :D
    akinoMM napisał:
    Nie próbowałam się połączyć z programem za pomocą Modbus Tester.
    Polecam spróbować, bo wtedy wyeliminujesz przynajmniej jeden koniec połączenia.
    akinoMM napisał:
    Poza tym pojawił mi się błąd podczas startu programu : Reference memory address is out of range. Czy dobrze rozumiem, że błąd ten jest w rack 0 slot 0 (Loc 0.0) ?
    Dobrze rozumiesz. Prawdopodobnie b_offs = 9000 wyłazi Ci poza skonfigurowany rozmiar pamięci %R.
    Konto firmowe:
    PUMPA
    Widok 7, Łuczyce, 32-010 | Tel.: 502XXXXXX (Pokaż) | Strona WWW: www.pumpa.pl
  • #8 13895464
    akinoMM
    Poziom 9  
    Posty: 13
    Ocena: 1
    Rozmiar pamięci ustawiony mam na %R9999 więc to nie może być to.

    Ok spróbuję połączyć się wykorzystując Modbus Tester.
  • #9 13898107
    akinoMM
    Poziom 9  
    Posty: 13
    Ocena: 1
    Ok komunikacja działa poprawnie. Dostałam na wyjściu 16#0001 Succes.

    Teraz jak chcę odczytać wartości przesłane z napędu, np. prędkość, to wpisuję kod 40102 . Moje pytanie brzmi gdzie mam odczytać tą wartość? Domyślam się że jest to zapisywane do konkretnego rejestru , tylko którego ?

    Dodano po 1 [minuty]:

    odczytałam pierwsze 100 rejestrów i nie znalazłam wyniku który wyświetla mi częstotliwość
  • #10 13898165
    Markos80

    Specjalista Automatyk
    Posty: 1860
    Pomógł: 474
    Ocena: 214
    akinoMM napisał:
    Ok komunikacja działa poprawnie. Dostałam na wyjściu 16#0001 Succes.
    Gdzie był błąd?

    Adres 40102 jest to rejestr 102 odczytany przy użyciu funkcji 3, więc za mało rejestrów odczytałaś.
    Wg dokumentacji do karty, 40102 to jest Grupa 01 Parametr 02, co z kolei w dokumentacji falownika oznacza 01.02 Speed w %. Częstotliwość wyjściowa w Hz jest w 01.03 (z dokładnością 1Hz = 100).
    Konto firmowe:
    PUMPA
    Widok 7, Łuczyce, 32-010 | Tel.: 502XXXXXX (Pokaż) | Strona WWW: www.pumpa.pl
  • #11 13898504
    akinoMM
    Poziom 9  
    Posty: 13
    Ocena: 1
    Tak masz rację chodziło mi o prędkość 01.02. ale to i tak nie ma znaczenia, bo odczytałam 150 rejestrów a i tak nie mam tego co powinnam.

    W załączniku przesyłam print screen

    Wygląda tak że:
    W bloku BLKMOV w IN6 wpisuję adres rejestru gdzie ma być odczytana wartość, a w IN4 wpisuję liczbę odczytanych wartości ( jeżeli wpisuję 1 to jest ok, czyli czyta mi jedną wartość i przepisuje na rejestr %R201, ale jak wpiszę do IN4 liczbę 16 żeby czytało 16 wartości to występuje błąd) W załączniku jest przykład jak odczytuję 1 wartość przepisaną do rejestru %R201, wyświetla się wartość w rejestrze %R201 i %R202 ale te wartości nie są zgodne z danymi falownika, nawet próbowałam zmieniać z Hex na Dec ale to nie to
    Załączniki:
    • program1.JPG (249.71 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #12 13898772
    Markos80

    Specjalista Automatyk
    Posty: 1860
    Pomógł: 474
    Ocena: 214
    akinoMM napisał:
    bo odczytałam 150 rejestrów a i tak nie mam tego co powinnam
    Jakimś programem z komputera?
    akinoMM napisał:
    jak wpiszę do IN4 liczbę 16 żeby czytało 16 wartości to występuje błąd
    Jaki błąd?
    Podejrzewam, że falownik pozwala czytać tylko ciągłe obszary danych i zaczynające się od początku obszaru.
    Spróbuj powoli, zacząć od 1-2 rejestrów od adresu 100 lub 101.
    Ja jednak byłbym za przetestowaniem całości z Modbus tester'a i podglądnięcia ramek, a później w PLC już pójdzie łatwo.
    Konto firmowe:
    PUMPA
    Widok 7, Łuczyce, 32-010 | Tel.: 502XXXXXX (Pokaż) | Strona WWW: www.pumpa.pl
  • #13 13908583
    akinoMM
    Poziom 9  
    Posty: 13
    Ocena: 1
    Zastosowałam program ModBusView do komunikacji, udało mi się przepisać przykładowe sygnały (od 40101 do 40110 ) na rejestry %R201 do %R210. Okazało się po odczytaniu zadanych wartości że na rejestr %R201 jest przepisywana wartość syganłu 40102 a na rejestr %R202 sygnał 40101. Czyli dwa sygnały sąsiadujące ze sobą są odwrotnie zapisywane w programie (załącznik)
    W komunikacji tej korzystałam z portu 1 (Rs232) bo taki też miałam w komputerze. W tym przypadku program działa, jednak kiedy zamieniam port na port 2 aby komunikować się z falownikiem mogę odczytać tylko jeden sygnał, poza tym wartość tego sygnału nie jest zgodna z wartością zadaną na panelu falownika
    Załączniki:
    • modbustester.JPG (285.93 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #14 13910483
    Markos80

    Specjalista Automatyk
    Posty: 1860
    Pomógł: 474
    Ocena: 214
    akinoMM napisał:
    Czyli dwa sygnały sąsiadujące ze sobą są odwrotnie zapisywane w programie (załącznik)
    Spróbuj użyć komendy 8006 (DWORD swap) zamiast 8002.
    akinoMM napisał:
    kiedy zamieniam port na port 2 aby komunikować się z falownikiem mogę odczytać tylko jeden sygnał, poza tym wartość tego sygnału nie jest zgodna z wartością zadaną na panelu falownika
    Jaki jest wtedy status i state funkcji?
    Konto firmowe:
    PUMPA
    Widok 7, Łuczyce, 32-010 | Tel.: 502XXXXXX (Pokaż) | Strona WWW: www.pumpa.pl
  • #15 13910987
    akinoMM
    Poziom 9  
    Posty: 13
    Ocena: 1
    Mam ustawione na 8006.

    status: 16#0001
    state : 16#0000

    czyli jest Success, tak jak by wszystko było dobrze. Zastanawiam się nad komunikacją po kablu z falownikiem, bo jak zmieniam np. prędkość to dane odczytywane się nie zmieniają ( czyli odczytuje jakieś dane ale po zmianie parametrów nie ma reakcji)
  • #16 13911196
    Markos80

    Specjalista Automatyk
    Posty: 1860
    Pomógł: 474
    Ocena: 214
    akinoMM napisał:
    Mam ustawione na 8006.
    Na obrazkach, które podesłałaś masz 8002, więc już nie wiem, który wariant używasz.
    8002 - odczytuje rejestry jako liczby całkowite 16-bitowe (wg mnie tak też falownik przysyła i tak powinny być odczytywane)
    8006 - odczytuje rejestry jako liczby 32-bitowe z zamianą (używane do odczytywania rejestrów REAL lub DWORD)
    akinoMM napisał:
    jak zmieniam np. prędkość to dane odczytywane się nie zmieniają ( czyli odczytuje jakieś dane ale po zmianie parametrów nie ma reakcji)
    Po RS232 jest dobrze, a po RS485 się nie zmienia? Szczerze mówiąc, to się trochę pogubiłem w Twoich próbach i opisach.
    Konto firmowe:
    PUMPA
    Widok 7, Łuczyce, 32-010 | Tel.: 502XXXXXX (Pokaż) | Strona WWW: www.pumpa.pl
  • #17 13911208
    akinoMM
    Poziom 9  
    Posty: 13
    Ocena: 1
    Używam wariantu z 8006. Ale ok w takim razie muszę użyć 8002 tak jak piszesz.

    Port 1 (rs232) używałam do komunikacji z ModBusView, aby sprwdzić działanie programu.

    Port 2 (rs485) używam do komunikacji z falownikiem.

    Dodano po 3 [minuty]:

    Jeżeli zamienię na 8002 to występuje błąd : 3 4 , Bad CRC received
  • REKLAMA
  • #18 13911257
    Markos80

    Specjalista Automatyk
    Posty: 1860
    Pomógł: 474
    Ocena: 214
    Prawdopodobnie pojawiają się zakłócenia na linii.
    Jak długi jest kabel do falownika? Masz rezystory włączone na końcach linii?
    Jeśli posiadasz konwerter 485/232 to możesz podsłuchać transmisję PLC<>falownik, a dla porządku przetestować port 2 z ModBusView.
    Konto firmowe:
    PUMPA
    Widok 7, Łuczyce, 32-010 | Tel.: 502XXXXXX (Pokaż) | Strona WWW: www.pumpa.pl
  • #19 13911618
    akinoMM
    Poziom 9  
    Posty: 13
    Ocena: 1
    kabel do falownika ma 2 m . Nie mam rezystorów na końcach. Przetestowałam port 2 (rs485) z ModBusView podłączając sterownik(port 2 rs485) z komputerem (port rs232) poprzez konwerter rs232 na rs485. Komunikacja się powiodła, nie mam błędów. Ale wartości które wpisuję w programie ModBusView do odpowiednich rejestrów nie są przekazywane do sterownika. W rejestrach wyświetlane są takie same wartości jak w przypadku podłączenia do falownika. Wynika stąd że falownik nie przesyłał odpowiedzi na sygnały przeze mnie zadane
  • #20 13911746
    Markos80

    Specjalista Automatyk
    Posty: 1860
    Pomógł: 474
    Ocena: 214
    1) Zobacz czy przy podłączonej wtyczce tylko po stronie portu 2 PLC (a po drugiej całkiem rozłączone) przypadkiem nie będzie tak samo. Oznaczałoby to, że źle połączyłaś 4 na 2-wire i sterownik sam sobie odpowiada. Sprawdź też czy na pewno w konfiguracji portu jest 2-wire.
    2) Jak już masz konwerter to możesz przechwycić do pliku to, co wysyła sterownik i podglądnąć w hex czy ramka jest prawidłowa (np. HyperTerminal lub Putty).
    Konto firmowe:
    PUMPA
    Widok 7, Łuczyce, 32-010 | Tel.: 502XXXXXX (Pokaż) | Strona WWW: www.pumpa.pl
  • #21 13912007
    akinoMM
    Poziom 9  
    Posty: 13
    Ocena: 1
    Ok w konfiguracji portu miałam 4-wire i tu był mój błąd, ale po zamianie na 2-wire dostałam błąd 1 5 = Timeout. (to jest przy połączeniu rs485 (sterownik) z rs232 (komputer) )

    sprawdziłam połączenia port 1 (rs232) z komputerem (rs232) za pomocą ModbusView i wszystko działa prawidłowo.

    przy połączeniu port 1 (rs232) z falownikiem ( 2-wire) przy pomocy konwertera , komunikacja nie odpowiada błąd 1 5 =Timeout

    przy komunikacji : port 2 (rs485) z komputerem (rs232) za pomocą konwertera komunikacja kończy się sukcesem w przypadku kiedy mam ustawioną konfigurację portu : 4-wire. Zaznaczam że korzystam z konwertera rs-232 na 2-wire 485 więc powinien tu już być błąd.

    przy komunikacji port 2 (rs485) z falownikiem (2-wire) komunikacja konczy się sukcesem kiedy mam ustawione w konfiguracji 4-wire, kiedy zmieniam konfigurację na 2-wire wtedy dostaję błąd 1 5 =Timeout

    Podsumowując komunikacja jest prawidłowa i przepływ sygnałów również tylko w wypadku kiedy korzystam z portu 1 (rs232) i ModBusView
  • #22 13912078
    Markos80

    Specjalista Automatyk
    Posty: 1860
    Pomógł: 474
    Ocena: 214
    Tak jak już pisałem, wydaje mi się, że za dużo rzeczy próbujesz robić na raz i w efekcie nie eliminujesz poszczególnych składowych.

    1. Spróbuj nawiązać komunikację z falownikiem przy pomocy komputera, programu i konwertera 232/485 (będziesz mieć pewność, że falownik poprawnie skonfigurowany i poprawnie działający kabel RS485)

    2. Dopiero, gdy uda się 1) :D Podłącz układ do portu 1 sterownika (będziesz mieć pewność, że program poprawny)

    3. Dopiero, gdy uda się 2) :D Podłącz falownik do portu 2 (w tym miejscu problemem może być tylko konfiguracja portu 2 lub niepoprawnie zrobiona wtyczka po stronie PLC)
    Konto firmowe:
    PUMPA
    Widok 7, Łuczyce, 32-010 | Tel.: 502XXXXXX (Pokaż) | Strona WWW: www.pumpa.pl
  • #23 13951887
    akinoMM
    Poziom 9  
    Posty: 13
    Ocena: 1
    Witam,

    przepraszam za tak długą zwłokę czasową z odpowiedzią. Powodem był moduł CPU, który odmówił mi posłuszeństwa i musiałam czekać na wymianę jego w serwisie na nowy.
    Obecnie udało mi się nawiązać komunikację Modbus rtu poprzez port 2 (rs485) podłączony do komputera za pomocą konwertera rs485 - rs232.
    Problemem była prędkość transmisji danych, przy ustawieniu prędkości 19200 otrzymuję odpowiedź (jednak po długim czasie około 1 minuty) natomiast przy prędkości 38400 komunikacja lepsza (odpowiedź otrzymuję po 2-3 sekundach)
    Zaznaczam że komunikacja ta nie jest całkowicie bezbłędna, ponieważ w czasie kiedy czekam na odpowiedź (na przepisanie poszczególnych wartości na rejestry) program wysyła mi ciągle komunikat o błędach CRC (kod 0304) po czym następuje nadpisanie odpowiednich rejestrów itd.
    Po odczytaniu ramki danych modbus rtu również wartości wyświetlane w ramce nie są takie jak oczekiwane.

    Dziękuję za dotychczasową pomoc.

    Mam jeszcze takie pytanie do Pana : Czy udało się Panu w rzeczywistości przeprowadzić tego typu komunikację bezbłędnie ?
  • #24 13952259
    gervee
    Specjalista Automatyk
    Posty: 1077
    Pomógł: 100
    Ocena: 94
    Jeśli na 19200 otrzymujesz odpowiedź po ok 1 min. to masz coś źle.

    Jeśli masz jakiś sterownik z MODBUS i RS485/RS232 to użyj go do testów jako slave. W poszczególne rejestry, które chcesz odczytywać wpisz konkretne wartości (np. rej 100 -> 100, rej 101 -> 101 itd.). Odczytaj te wartości na komputerze z poziomu programu np. Modbus Tester - będziesz mieć pewność, że wiesz co i jak czytać ze slave (jeśli byś miała konwerter RS232/RS-485 to mogłabyś przetestować bezpośrednio komunikację ze slave po 485) .

    Następnie z poziomu "dużego" CPU poprzez RS485 mogłabyś sprawdzić sobie program komunikujący się ze slave. Jeśli działa to wtedy dopiero działać z falownikiem (ustawiając odpowiednie adresy w programie, prędkości, parzystości itp.)
  • #25 13953313
    Markos80

    Specjalista Automatyk
    Posty: 1860
    Pomógł: 474
    Ocena: 214
    Będę pewnie nudny, ale jeśli nie będziesz robić po małym kroku, to nie dojdziesz co jest źle :)

    Czy w konfiguracji RX jako master z portu 2 poprzez konwerter 485/232 do PC poprawna jest ramka z zapytaniem i co ile się wysyła? Jak już pisałem wcześniej:
    Markos80 napisał:
    ...możesz przechwycić do pliku to, co wysyła sterownik i podglądnąć w hex czy ramka jest prawidłowa (np. HyperTerminal lub Putty).

    akinoMM napisał:
    Czy udało się Panu w rzeczywistości przeprowadzić tego typu komunikację bezbłędnie ?
    Tak. Wiele razy.
    Konto firmowe:
    PUMPA
    Widok 7, Łuczyce, 32-010 | Tel.: 502XXXXXX (Pokaż) | Strona WWW: www.pumpa.pl

Podsumowanie tematu

✨ Użytkownik ma problem z komunikacją Modbus RTU jako Master przy użyciu sterownika GE RX3i z jednostką centralną CPE310, próbując nawiązać połączenie z falownikiem (slave) przez port RS485. Po wprowadzeniu odpowiednich parametrów komunikacji, takich jak prędkość transmisji 9600, 8 bitów danych, brak kontroli przepływu, brak parzystości i 1 bit stopu, występują błędy kompilacji oraz timeouty. Użytkownik otrzymuje różne błędy, w tym "Bad Buffer offset" oraz "Timeout". Po kilku próbach i zmianach w konfiguracji portu, w tym przejściu z 4-wire na 2-wire, udało się nawiązać komunikację, jednak występują problemy z odczytem wartości z falownika. Użytkownik testował również komunikację z komputerem przy użyciu Modbus Tester i ModBusView, co pomogło w identyfikacji błędów. Ostatecznie, po wymianie modułu CPU, komunikacja przez port 2 (RS485) została nawiązana, ale nadal występują błędy CRC i nieprawidłowe wartości odczytów.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA