Skip to main content

Sterowniki PLC zwykle kojarzą się z wejściami i wyjściami cyfrowymi, jednak w praktyce bardzo często potrzebujemy obsłużyć także sygnały analogowe. Dzięki nim możliwe jest płynne sterowanie procesem – na przykład regulacja prędkości silnika.

W tym artykule pokażę Ci, jak w sterowniku Finder Opta wykorzystać moduł rozszerzeń analogowych, aby odczytywać sygnał z potencjometru i sterować falownikiem w zakresie 0–10 V.

👉 Pełne omówienie znajdziesz również w filmie na YouTube:

1. Stanowisko testowe i schemat podłączeń

Do testów przygotowałem:

  • sterownik Finder Opta,
  • moduł rozszerzeń Analog Expansion,
  • potencjometr 10 kΩ podający napięcie 0–10 V,
  • falownik sterujący silnikiem trójfazowym.

Wejście analogowe AI1 odbiera sygnał z potencjometru, natomiast wyjście analogowe O1 przekazuje napięcie sterujące do falownika. Dzięki temu możemy płynnie regulować prędkość obrotową silnika.


2. Konfiguracja wejść i wyjść analogowych w CODESYS

Po dodaniu modułu rozszerzeń w drzewie projektu CODESYS:

  • wejścia ustawiamy jako Analog Input 0–10 V,
  • wyjścia ustawiamy jako Analog Output 0–10 V.

Dzięki temu potencjometr generuje sygnał wejściowy, który jest przetwarzany i przekazywany do falownika.

3. Program w języku LAD

Na początku przygotowałem prosty program w LAD. Zawiera on klasyczny układ start-stop z podtrzymaniem oraz przeniesienie wartości z potencjometru na wyjście analogowe.

Dzięki temu uzyskujemy prosty układ, który pozwala uruchomić i zatrzymać silnik oraz sterować jego prędkością potencjometrem.

4. Skalowanie wartości analogowych – kod w ST

Wartość z potencjometru w CODESYS ma zakres 0–10000 (odpowiadający napięciu 0–10 V). Aby ułatwić interpretację, napisałem prosty blok funkcyjny FB_AnalogScaling w języku ST.

FUNCTION_BLOCK FB_AnalogScaling
VAR_INPUT
    dwRawValue      : DWORD;    // Surowa wartość z wejścia analogowego
    fInputMin       : REAL;     // Minimalna wartość wejściowa (np. 0)
    fInputMax       : REAL;     // Maksymalna wartość wejściowa (np. 10000)
    fOutputMin      : REAL;     // Minimalna wartość wyjściowa (np. 0.0)
    fOutputMax      : REAL;     // Maksymalna wartość wyjściowa (np. 100.0)
    bEnable         : BOOL;     // Włączenie skalowania
END_VAR
VAR_OUTPUT
    fRawValue       : REAL;     // Wartość surowa jako REAL
    fVoltageValue   : REAL;     // Wartość napięcia (0-10V)
    fScaledValue    : REAL;     // Przeskalowana wartość (np. 0-100%)
    wRawValueWord   : WORD;     // Wartość surowa jako WORD
    bError          : BOOL;     // Flaga błędu
    sErrorMsg       : STRING;   // Komunikat błędu
END_VAR
VAR
    fInputRange     : REAL;     // Zakres wejścia
    fOutputRange    : REAL;     // Zakres wyjścia
END_VAR

Wewnątrz bloku przeliczamy wartość surową na procenty lub na wolty:

// Reset błędów
bError := FALSE;
sErrorMsg := '';

// Konwersja DWORD na REAL (zawsze)
fRawValue := DWORD_TO_REAL(dwRawValue);
wRawValueWord := DWORD_TO_WORD(dwRawValue);

// Sprawdzenie czy skalowanie jest włączone
IF NOT bEnable THEN
    fScaledValue := fOutputMin;
    fVoltageValue := 0.0;
    RETURN;
END_IF

// Obliczenie zakresów
fInputRange := fInputMax - fInputMin;
fOutputRange := fOutputMax - fOutputMin;

// Sprawdzenie poprawności parametrów
IF fInputRange <= 0 THEN
    bError := TRUE;
    sErrorMsg := 'Błędny zakres wejścia (InputMax <= InputMin)';
    fScaledValue := fOutputMin;
    fVoltageValue := 0.0;
END_IF

// Przeskalowanie liniowe: y = (x - x_min) * (y_max - y_min) / (x_max - x_min) + y_min
fScaledValue := (fRawValue - fInputMin) * fOutputRange / fInputRange + fOutputMin;

// Ograniczenie do zakresu wyjściowego
fScaledValue := LIMIT(fOutputMin, fScaledValue, fOutputMax);

// Konwersja na wartość napięcia (0-10V)
fVoltageValue := (fRawValue - fInputMin) * 10.0 / fInputRange;
fVoltageValue := LIMIT(0.0, fVoltageValue, 10.0);

Dzięki temu możemy łatwo korzystać z wartości w procentach (np. 0–100%) lub w Voltach (0–10 V).

5. Szablon projektu do pobrania

Żebyś mógł od razu uruchomić ten przykład u siebie, przygotowałem pełny projekt w CODESYS, który zawiera:

  • program w LAD z obsługą start/stop i przeniesieniem wartości,
  • blok funkcyjny FB_AnalogScaling w ST,
  • przykładową deklarację zmiennych,
  • konfigurację wejść i wyjść analogowych,
  • schemat połączeń.

📂 Pobierz szablon projektu CODESYS:

6. Podsumowanie

Dzięki wejściom i wyjściom analogowym w sterowniku Finder Opta możesz w prosty sposób zrealizować płynną regulację prędkości silnika. Wystarczy:

  • podłączyć potencjometr i falownik,
  • skonfigurować moduł analogowy w CODESYS,
  • wykorzystać prosty program w LAD,
  • dodać blok skalowania w ST dla czytelnych wartości.

Zachęcam Cię do pobrania szablonu i samodzielnego przetestowania działania.

👉 A cały proces krok po kroku możesz obejrzeć w filmie:

O autorze

Szymon Adamek

Author Szymon Adamek

Automatyk, Manager ds. klienta w ControlByte

Więcej postów tego autora Szymon Adamek