Połączenie falownika Sinamics V20 z PLC Finder OPTA w Codesys (Modbus RTU)

controlbyte.pl 2 dni temu

Wprowadzenie

Modbus RTU to jeden z najpopularniejszych protokołów komunikacyjnych stosowanych w automatyce przemysłowej, głównie dzięki swojej prostocie, niezawodności oraz szerokiemu wsparciu przez różne urządzenia. W tym artykule przedstawimy krok po kroku, jak połączyć sterownik Finder OPTA programowany w środowisku Codesys z falownikiem Siemens Sinamics V20 dzięki protokołu Modbus RTU wykorzystując magistralę szeregową RS485.

Opisujemy podłączenie fizyczne urządzeń, konfigurację projektu Codesys, prosty przykładowy program sterujący oraz wskazujemy najczęstsze błędy i praktyczne wskazówki dotyczące uruchamiania komunikacji.

1. Podłączenie fizyczne przewodów RS485

Jednym z kluczowych kroków w uruchomieniu komunikacji między sterownikiem PLC Finder OPTA a falownikiem Sinamics V20 jest poprawne podłączenie magistrali RS-485.

Zarówno Finder OPTA, jak i Sinamics V20 wspierają komunikację szeregową poprzez ten standard, ale wymagają odpowiedniego połączenia przewodów oraz konfiguracji.

1.1. Przykładowy schemat

Poniższy fragment schematu pokazuje pełne połączenie:

Na podstawie schematu widzimy, że:

  • W sterowniku Finder OPTA linie RS485 są dostępne na złączu oznaczonym jako:
    • A(-) – linia A
    • B(+) – linia B
  • W falowniku Siemens Sinamics V20 linie RS485 oznaczone są jako:
    • P+ – linia dodatnia
    • N- – linia ujemna

Zalecane połączenie:

OPTA (moduł Modbus RS-485)Sinamics V20 (RS-485)
A(-)P+ (pin 6)
B(+)N- (pin 7)

Dodatkowo na schemacie możemy zauważyć, iż oba urządzenia mają wspólną masę 0V – ważne jest, aby również masa zasilania była wspólna dla zapewnienia poprawnej referencji napięć.

1.2. Przewody i zalecenia transmisyjne

Do połączenia wykorzystaj:

  • Skrętkę dwużyłową ekranowaną (np. LiYCY 2×0,5 mm²) – skrętka minimalizuje wpływ zakłóceń,
  • Długość przewodu: do 1000 m w standardzie RS-485 (zalecane: do 100 m bez rezystora terminującego),
  • Brak skrzyżowania przewodów A/B – A(-) zawsze do P+, B(+) do N-.

Wskazówka:
Jeśli magistrala ma tylko dwa urządzenia (1 master + 1 slave), rezystory terminujące nie są obowiązkowe, ale mogą poprawić stabilność. Zalecana wartość: 120 Ω między A i B na obu końcach linii.

1.3. Ustawienia parametrów transmisji

Aby komunikacja zadziałała, zarówno sterownik, jak i falownik muszą mieć takie same ustawienia portu RS-485.

W sterowniku Finder OPTA (w Codesys):

  • COM Port: COM2 (zależnie od wersji urządzenia)
  • Prędkość: 9600
  • Parzystość: None
  • Długość słowa: 8 bitów
  • Bity stopu: 1

W falowniku Siemens V20:

Ustaw z poziomu panelu falownika następujące parametry:

ParametrWartośćOpis
P20109600Baud rate
P20118Długość słowa
P20121Bity stopu
P20130Parzystość: brak
P20140Timeout watchdog – wyłączony na czas testów
P20211Adres slave (1 domyślnie)
P20231Tryb Modbus RTU

1.4. Przełączenie falownika w tryb zdalnego sterowania

Domyślnie Sinamics V20 może być ustawiony na sterowanie z zacisków wejściowych (np. DI1, DI2…). Aby przejść na tryb komunikacji Modbus, należy zmienić dwa najważniejsze parametry:

  • P0700 = 5 → sterowanie poprzez RS485 (źródło poleceń),
  • P1000 = 5 → zadawanie częstotliwości poprzez RS485 (źródło setpointu).

Można to też gwałtownie wykonać wybierając z poziomu panelu jedno z gotowych makr:

  • Cn011 – Modbus RTU – ustawia wszystkie potrzebne parametry automatycznie.

Po zapisaniu parametrów i restarcie falownik będzie gotowy do przyjęcia komend z poziomu sterownika przez Modbus.

2. Konfiguracja komunikacji Modbus RTU w Codesys

Po wykonaniu połączenia fizycznego konfigurujemy środowisko Codesys. Oto prosty proces:

Krok 1: Dodanie portu Modbus RTU (COM)

W drzewie projektu kliknij prawym na Device i wybierz Add Device. Dodaj urządzenie typu Modbus Serial COM.

Następnie skonfiguruj:

  • COM port: np. COM2 (zależnie od wersji Finder OPTA)
  • Baudrate: 9600
  • Data bits: 8
  • Parity: None
  • Stop bits: 1

Krok 2: Dodanie urządzenia Master i Slave (Client i Server)

Kliknij prawym na Modbus Serial COM, wybierz Add Device i dodaj Modbus Serial Client (jest to Master w terminologii Modbus). Następnie kliknij na Modbus Client, ponownie Add Device i dodaj Modbus Server (urządzenie slave – czyli falownik).

Dla Modbus Server ustaw Station address na wartość 1 (domyślny adres falownika Sinamics V20).

Krok 3: Dodanie kanałów (Channel) do komunikacji

Dodajemy kanały do zapisu oraz odczytu rejestrów w falowniku. Dla przykładu:

  • Zapis do rejestrów STW (słowo sterujące, offset 99) oraz HSW (częstotliwość zadana, offset 100):
    • Funkcja: 16 – Write Multiple Registers
    • Offset: 99
    • Ilość rejestrów: 2
  • Odczyt rejestru statusowego ZSW (offset 109):
    • Funkcja: 03 – Read Holding Registers
    • Offset: 109
    • Ilość rejestrów: 1

Te rejestry pozwalają na sterowanie falownikiem (start, stop, zmiana prędkości, zmiana kierunku) oraz monitorowanie jego statusu.

3. Przykład programu sterującego w języku ST (Structured Text)

Poniżej prezentujemy kompletny przykład programu w języku ST, który pozwala na sterowanie falownikiem Siemens Sinamics V20 z poziomu sterownika Finder OPTA poprzez Modbus RTU. Program działa zarówno w trybie automatycznym (zadana częstotliwość) jak i manualnym dzięki przycisków +/-).

PROGRAM PLC_PRG VAR wSTW_V20 AT %QW0: WORD; (* Control Word - do V20 *) wHSW_V20 AT %QW1: WORD; (* Frequency Word - częstotliwość do V20 *) wZSW_V20 AT %IW0: WORD; (* Status Word - z V20 *) wTest: WORD; wFreq: WORD; aMotorData AT %IW1: ARRAY [0..2] OF WORD; (* Przyciski sterujące *) xStart: BOOL := FALSE; xStop: BOOL := FALSE; xManual_Mode: BOOL := FALSE; xMOP_Higher: BOOL := FALSE; xMOP_Lower: BOOL := FALSE; xReverse: BOOL := FALSE; (* Zmienne MOP *) wMOP_Frequency: WORD := 1500; (* Aktualna częstotliwość MOP (15.00 Hz) *) wMOP_Step: WORD := 1000; (* Krok zmiany (1.00 Hz) *) wMOP_Min: WORD := 0; (* Min 0.00 Hz *) wMOP_Max: WORD := 5000; (* Max 50.00 Hz *) (* Detekcja flanki dla MOP *) xMOP_Higher_Old: BOOL := FALSE; xMOP_Lower_Old: BOOL := FALSE; // Przeskalowane wartości rzeczywiste rFrequency : REAL; // Częstotliwość wyjściowa [Hz] - ze znakiem rFrequency_Abs : REAL; // Częstotliwość bezwzględna [Hz] rSpeed : REAL; // Prędkość [RPM] - ze znakiem rSpeed_Abs : REAL; // Prędkość bezwzględna [RPM] rCurrent : REAL; // Prąd [A] // Pomocnicze zmienne do konwersji diSpeedRaw : DINT; // Surowa wartość prędkości jako DINT diFreqRaw : DINT; // Surowa wartość częstotliwości jako DINT END_VAR (* Obsługa MOP - zmiana częstotliwości na flankę *) IF xManual_Mode THEN (* Zwiększanie częstotliwości na flankę narastającą *) IF xMOP_Higher AND NOT xMOP_Higher_Old THEN wMOP_Frequency := wMOP_Frequency + wMOP_Step; END_IF (* Zmniejszanie częstotliwości na flankę narastającą *) IF xMOP_Lower AND NOT xMOP_Lower_Old THEN wMOP_Frequency := wMOP_Frequency - wMOP_Step; END_IF END_IF (* Zapamiętanie poprzednich stanów *) xMOP_Higher_Old := xMOP_Higher; xMOP_Lower_Old := xMOP_Lower; (* Sterowanie Control Word *) IF xStop THEN wTest := 1134; (* STOP *) ELSIF xManual_Mode THEN IF xMOP_Higher THEN wTest := 45055; (* Manual + MOP Higher *) ELSIF xMOP_Lower THEN wTest := 53247; (* Manual + MOP Lower *) ELSE wTest := 36863; (* Manual Mode Only *) END_IF ELSIF xStart THEN IF xReverse THEN wTest := 3199; (* RUN REVERSE *) ELSE wTest := 1151; (* RUN FORWARD *) END_IF ELSE wTest := 1278; (* STANDBY *) END_IF (* Sterowanie częstotliwością *) IF xManual_Mode THEN wFreq := wMOP_Frequency; (* Użyj częstotliwości z MOP *) ELSE wFreq := 2500; (* 25.00 Hz w trybie auto *) END_IF // ===== SKALOWANIE CZĘSTOTLIWOŚCI WYJŚCIOWEJ ===== // Parametr 40024 (r0024) - zakres: -327.68 do +327.67 Hz // Współczynnik skalowalności: 100 // UWAGA: Wartość jest w formacie WORD ale reprezentuje wartości ze znakiem! // Konwersja WORD na DINT (interpretacja ze znakiem) IF aMotorData[0] > 32767 THEN // Wartość ujemna - konwersja z dopełnienia do dwóch diFreqRaw := WORD_TO_DINT(aMotorData[0]) - 65536; ELSE // Wartość dodatnia diFreqRaw := WORD_TO_DINT(aMotorData[0]); END_IF // Przypisanie częstotliwości ze znakiem i skalowanie rFrequency := DINT_TO_REAL(diFreqRaw) / 100.0; // Częstotliwość bezwzględna (bez znaku) rFrequency_Abs := ABS(rFrequency); // ===== SKALOWANIE PRĘDKOŚCI ===== // Parametr 40025 (r0022) - zakres: -16250 do +16250 RPM // Współczynnik skalowalności: 1 // UWAGA: Wartość jest w formacie WORD ale reprezentuje wartości ze znakiem! // Konwersja WORD na DINT (interpretacja ze znakiem) IF aMotorData[1] > 32767 THEN // Wartość ujemna - konwersja z dopełnienia do dwóch diSpeedRaw := WORD_TO_DINT(aMotorData[1]) - 65536; ELSE // Wartość dodatnia diSpeedRaw := WORD_TO_DINT(aMotorData[1]); END_IF // Przypisanie prędkości ze znakiem rSpeed := DINT_TO_REAL(diSpeedRaw); // Prędkość bezwzględna (bez znaku) rSpeed_Abs := ABS(rSpeed); // ===== SKALOWANIE PRĄDU ===== // Parametr 40026 (r0027) - współczynnik skalowalności: 100 rCurrent := WORD_TO_REAL(aMotorData[2]) / 100.0; (* Przypisanie do wyjść *) wHSW_V20 := wFreq; wSTW_V20 := wTest; wZSW_V20; aMotorData;

Główne funkcje programu:

  • Wysyłanie słowa sterującego wSTW_V20 oraz zadanej częstotliwości wHSW_V20 do falownika,
  • Odczyt słowa statusowego wZSW_V20 oraz parametrów pracy silnika (częstotliwość, prędkość, prąd),
  • Obsługa przycisków Start, Stop, Reverse, Reset,
  • Tryb ręczny MOP (Manual Operation Panel) do zwiększania i zmniejszania częstotliwości.

Zmienne wejściowe i wyjściowe

Zmienne z mapowania I/O Modbus:

  • wSTW_V20 – słowo sterujące (adres 40100),
  • wHSW_V20 – słowo częstotliwości (adres 40101),
  • wZSW_V20 – słowo statusowe (adres 40110),
  • aMotorData – tablica odczytów: częstotliwość, prędkość, prąd (adresy kolejno 23, 24, 25).

Zmienne lokalne:

  • xStart, xStop, xReverse – przyciski,
  • xManual_Mode – aktywacja trybu MOP,
  • xMOP_Higher, xMOP_Lower – przyciski „+” i „−”,
  • wMOP_Frequency – aktualna częstotliwość w trybie MOP,
  • wTest, wFreq – zmienne pomocnicze dla wyjść,
  • rFrequency, rSpeed, rCurrent – wartości skalowane rzeczywiste.

Tryb manualny

Jeśli aktywny jest tryb ręczny (xManual_Mode), użytkownik może zwiększać lub zmniejszać częstotliwość falownika przyciskami xMOP_Higher i xMOP_Lower. Program wykrywa zbocza narastające tych przycisków:

  • Jeżeli przycisk „+” jest wciśnięty i wcześniej nie był, częstotliwość zwiększa się o wMOP_Step.
  • Jeżeli przycisk „−” jest wciśnięty i wcześniej nie był, częstotliwość zmniejsza się o wMOP_Step.

Wartość ta jest ograniczana przez zakres wMOP_MinwMOP_Max (np. od 0 do 5000, co odpowiada 0–50 Hz).

Wysyłanie słowa sterującego (STW)

W zależności od trybu i stanu przycisków, do falownika wysyłane są odpowiednie komendy:

  • 1278 – standby/reset,
  • 1151 – start do przodu,
  • 3199 – start do tyłu,
  • 1134 – stop,
  • 36863 – manual mode bez zmiany częstotliwości,
  • 45055 – manual mode + zwiększanie częstotliwości,
  • 53247 – manual mode + zmniejszanie częstotliwości.

Dzięki temu możliwe jest pełne sterowanie napędem zarówno w trybie automatycznym, jak i ręcznym.

Skalowanie odczytów z falownika

Falownik Sinamics V20 udostępnia rejestry zawierające dane o rzeczywistej częstotliwości, prędkości i prądzie. Są one w formacie WORD, ale często ze znakiem i w specyficznej skali. Program przelicza te dane:

  • Częstotliwość (adres 23) – zakres: -327.68 do +327.67 Hz, skala: 0.01 Hz/jednostkę,
  • Prędkość (adres 24) – zakres: -16250 do +16250 RPM, skala: 1:1,
  • Prąd (adres 25) – zakres bez znaku, skala: 0.01 A/jednostkę.

W programie zastosowano konwersję WORD→DINT z interpretacją znaku i skalowanie do zmiennych typu REAL. Dodatkowo program oblicza wartość bezwzględną rFrequency_Abs oraz rSpeed_Abs, przydatne np. do logiki porównawczej czy wizualizacji.

Gotowy program do pobrania w Codesys

Pobierz gotowy projekt w LAD i ST tutaj:

Finder OPTA Modbus RTU VFDPobierz

Sprawdź pełny materiał wideo gdzie pokazujemy również program w języku Ladder oraz szczegółowo omawiamy program.

Idź do oryginalnego materiału