Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Komunikacja Modbus RTU S7 1200 ATV320

29 Lip 2019 13:34 153 4
  • Poziom 13  
    Cześć.
    Może ktoś z was walczył z problemem.
    Mam spięte w sieć 2 falowniki ATV320 , chcę do komunikacji użyć wbudowanych w falowniki portów RJ45.
    Skonfigurowałem prędkość transmisji itp.
    W sterowniku S7 1200 użyłem karty CB1241 .
    Komunikacja działa jest odpowiedź z falownika.
    Problem pojawia się w związku z portami oraz danymi.
    Mam dziwny efekt
    Użyłem MB_MASTER , czytam rejstry adresując 412741 długość danych 4 .
    Czyli zwrócone powinny być wartości word o adresach :
    412741 - status word
    412742 - acual speed
    412743 - nie ustawiłem nic
    412744 - nie ustawiałem nic

    Efekt jest taki iż w odczytanych wartościach powinno być :
    412741 - wartość powinna być 3 lub 4 , ready to switch on lub switched on ( nie rozgryzłem tego jeszcze do końca.
    412742 - wartość powinna być 0 , falownik nie wysterowuje silnika więc actual speed powinno być 0.
    kolejne rejestry powinny mieć również wartości zero i tak faktycznie jest.
    W rzeczywistości w odczytanych danych mam:
    412741 - 16#8000 która nie klei mi się w żaden sposób z słowem statusu
    412742 - wartość 16#0233 podobnie jak powyżej.
    Dopiero rejestr zaadresowany 412743 ma wartość 0

    Próbowałem też zamienić bajty starszy z młodszym, również wartości mi się nie zgadzają.
    Czytając inne rejestry zauważyłem jedną prawidłowość.
    Odczytane dany były przesunięte o jedno słowo.
    Czytając dla przykładu rejestry adresując od 412701 dostałem efekt :
    Pierwszy odczytany rejestr bzdurna wartość 16#8000
    Drugi odczytany rejestr 16#0C81 czyli w zapisie dziesiętnym prawidłowa wartość 3201 ale rejestru o adresie 12701
    Trzeci odczytany rejestr 16#219C czyli w zapisie dziesiętnym prawidłowa wartość 8604 ale rejestru o adresie 12701

    Jeśli zaadresuje rejestry wedle instrukcji Schneider bez dodawania "4" na początku adresu rejestru MB_MASTER zwraca błąd 8381 "Function code not supported"

    Ktoś to może rozgryzał i może podpowiedzieć w czym problem ?
    Skąd przesunięcie danych ?
    Jak w takim razie powinienem wysłać dane do falownika ?

    Ps. Dal testu program odpaliłem z innymi urządzeniami komunikującymi się przez modbus RTU, odczyty były prawidłowe bez przesunięcia.
  • Poziom 23  
    Odnośnie przesunięcia adresacji - zwróć uwagę na zdjęcie które załączyłem (to jest oczywiście tabela całkiem z innego urządzenia). Kolumna 'Adres Modbus' i kolumna np. 'Adres Dec'. Różnica miedzy tymi adresami jest właśnie 'jeden'. Różni producenci różnie podają adresy. Niektórzy w standardzie Modbus gdzie nie istnieje rejestr o numerze 'zero', inni jako adres fizyczny gdzie adresowanie rozpoczyna się od rejestru 'zero'.

    Spotyka się oba typy adresowania i trzeba po prostu sprawdzać przed ich użyciem albo przeszukać całą tabelę adresową i sprawdzić czy adresacja zaczyna się od 'zero' czy od 'jeden'.
    Komunikacja Modbus RTU S7 1200 ATV320



    ...
    Odnośnie tych wartości to spróbuj wykorzystać funkcję '3' zamiast '4' do odczytu tych wartości (czyli zamiast adresów 412741-412744 czytaj adresy 312741-312744).
    Poniżej cytat z instrukcji ATV320:

    Cytat:
    In our example, the application manages 2 requests:- A read request of 4 words starting at Modbus address 12741 (16#31C5). It is the address of the first word of the input scanner of the drive [Com Scan In1 val.] (nM1). Modbus function #3. The information is sent from the PLC to the drive. The table ATV32_NM is used. The 2 first words are mapped by default.



    ...
    Odnośnie rejestru '12741':
    Komunikacja Modbus RTU S7 1200 ATV320
    skąd wziąłeś informacje że ma tam być wartość 3 lub 4 ?
    'Ready to Switch ON' - to jest bit 0 rejestru;
    'Switched ON' - to jest bit 1 rejestru;
    Pozostałe bity też mogą być w jakimś stanie nie koniecznie '0'.

    Przyjmując że odczytałeś z tego rejestry wartość '16#0233' gdzie na bity rozbijając masz '0000 0010 0011 0011' wychodzi że masz ustawione bity: 0, 1, 4, 5, i 9. Analizując stan tych bitów wg powyższej tabeli to masz:
    bit 0 - Ready to Switch ON
    bit 1 - Switched ON
    bit 4 - Voltage enabled
    bit 5 - Quick stop
    bit 9 - Remote
    czyli wg mnie wygląda że jest prawidłowo, chociaż nie wiem w jakim stanie znajduje się falownik u Ciebie.
  • Poziom 13  
    Hej.
    Dzięki za podpowiedzi.
    Na razie na szybko stestowałem odczyt adresując 312741 , funkcja MB_MASTER zwraca błąd 8189 czyli Invalid data address value.

    Co do słowa statusu nie klei mi się
    bit 0 - Ready to Switch ON
    bit 1 - Switched ON
    No i tu mi się nie zgadza bo powinno być albo ready to switch on albo switched on.
    Potestuję jeszcze jutro.
  • Poziom 23  
    Tą wartość '16#0233' wziąłem z Twoich odczytów ale nie koniecznie jest to wartość odczytana z prawidłowej komórki więc nie bierz tego jako pewnik.
    W pierwszej kolejności postaraj się odczytać z falownika jakąś wartość której jesteś na 100% pewien.

    Ja bym np. próbował odczytać napięcie na szynie DC porównując wartość odczytaną z wartością wyświetlaną na lokalnym panelu falownika. W taki sposób dojdziesz czy masz przesunięcie o jeden czy nie oraz jakim sposobem to odczytywać. Odczytują rejestr np. od prędkości bieżącej który w danej chwili jest równy 'zero' nie jesteś pewien czy to jest prawidłowy odczyt konkretnego rejestru z tego powodu że rejestrów o wartości 'zero' jest zapewne więcej niż jeden, a podejrzewam że kilkadziesiąt. Wartość napięcia na szynie DC będzie wartością RACZEJ niepowtarzalną, chociaż tego też na 100% nigdy pewien nie będziesz. W każdym bądź razie jest mniejsze prawdopodobieństwo pomyłki.
    Gdybyś z jakiegoś powodu miał falownik bez panela to możesz napięcie DC odczytać z programu 'SoMove' a nawet mierząc miernikiem bezpośrednio na wyprowadzonej szynie DC falownika.
  • Poziom 21  
    Najpierw program typu "Modbus poll", a dopiero kiedy dojdziesz ze zmiennymi do ładu można przenieść uzyskaną wiedzę do PLC.

    Z Modbus poll można zrobić wszystko włącznie z uruchomieniem falownika i jest to dużo efektywniejsze czasowo jeśli się dany model implementuje pierwszy raz.

    Nie wiem jak Schneider, w ABB uruchomienie wymaga sekwencji pięciu kroków ze spełnieniem różnych warunków po drodze, zatrzymanie dwóch.