Skip to main content

Większość programistów PLC stosuje graficzne języki programowania takie jak LAD czy FBD. Czwarta rewolucja przemysłowa stawia przed automatykami nowy wyzwania. Wiele aplikacji wymaga, aby obliczenia i przetwarzanie danych było wykonywane na najniższym poziomie w strukturze urządzeń przemysłowych, czyli przez sterownik PLC.

Aby tworzyć bardziej zaawansowane aplikacje, niezbędna jest znajomość tekstowego języka wysokiego poziomu jakim jest język SCL (Structured Control Language) dla sterowników Siemensa.

Języki programowania dla sterowników PLC

IEC 61131-3 to międzynarodowa norma dotycząca programowania w przemyśle automatyki. Została opracowana przez Międzynarodową Elektrotechniczną Komisję Normalizacyjną (IEC) i określa standardy dotyczące języków programowania, środowisk programistycznych i interfejsów użytkownika dla systemów automatyki przemysłowej. Norma ta zapewnia interoperacyjność różnych systemów automatyki poprzez ustanowienie wspólnych standardów dla programowania i komunikacji. Dzięki temu umożliwia łatwe tworzenie i integrację różnych systemów automatyki w jedną, spójną całość. Norma IEC 61131-3 jest szeroko stosowana w przemyśle automatyki przemysłowej na całym świecie.

Norma IEC 61131-3 określa pięć języków programowania dla systemów automatyki przemysłowej. Są to:

  • Język LD (Ladder Diagram), który umożliwia tworzenie programów za pomocą schematów drabinkowych. Jest to język popularny wśród elektryków i znany z jego prostoty i intuicyjności.
  • Język FBD (Function Block Diagram), który pozwala tworzyć programy za pomocą bloków funkcyjnych. Jest to język skierowany do inżynierów elektryków i elektroników.
  • Język SFC (Sequential Function Chart), który umożliwia tworzenie programów za pomocą diagramów sekwencyjnych. Jest to język skierowany do inżynierów procesów i automatyków.
  • Język ST (Structured Text), który pozwala tworzyć programy za pomocą strukturalnego języka tekstowego. Jest to język skierowany do programistów i inżynierów informatyków.
  • Język IL (Instruction List), który umożliwia tworzenie programów za pomocą list instrukcji. Jest to język skierowany do elektryków i elektroników.

Wszystkie te języki są zgodne z normą IEC 61131-3 i mogą być stosowane do programowania sterowników PLC w aplikacjach przemysłowych. Każdy z tych języków ma swoje własne zalety i wady, dlatego wybór odpowiedniego języka zależy od indywidualnych potrzeb i preferencji programisty.

Języki SCL a norma IEC 61131-3

Języki programowania sterowników PLC firmy Siemens są zgodne z normą IEC 61131-3, w tym język SCL. Język SCL jest odpowiednikiem języka ST dla sterowników PLC Siemens.

Składnia języka SCL

Składnia języka SCL opiera się na konstrukcjach języków proceduralnych, takich jak pętle i instrukcje warunkowe, co umożliwia tworzenie sprawnych i precyzyjnych algorytmów sterowania. Język SCL posiada również obsługę logiki boolowskiej, co pozwala na wykonywanie operacji na wartościach logicznych (prawda/fałsz) oraz porównywanie wartości logicznych za pomocą operatorów porównania (np. większy niż, mniejszy niż).

Operacje boolowskie w języku SCL

Język SCL oferuje instrukcje boolowskie, które umożliwiają wykonywanie operacji logicznych na wartościach boolowskich, czyli wartościach TRUE lub FALSE.

Przykładowe instrukcje boolowskie w języku SCL:

  • AND: Instrukcja AND pozwala na sprawdzenie, czy obie wartości boolowskie są równocześnie prawdziwe. Jeśli obie wartości są prawdziwe, instrukcja zwraca wartość TRUE, w przeciwnym razie zwraca wartość FALSE. Na przykład, instrukcja „A AND B” zwróci wartość TRUE, jeśli zarówno A jak i B są prawdziwe.
// Sprawdź, czy zarówno A jak i B są prawdziwe
IF (A AND B) THEN
    // Wykonaj instrukcje, jeśli A i B są prawdziwe
    ...
ELSE
    // Wykonaj inne instrukcje, jeśli A lub B jest fałszywe
    ...
END_IF
  • OR: Instrukcja OR pozwala na sprawdzenie, czy co najmniej jedna z wartości boolowskich jest prawdziwa. Jeśli co najmniej jedna wartość jest prawdziwa, instrukcja zwraca wartość TRUE, w przeciwnym razie zwraca wartość FALSE. Na przykład, instrukcja „A OR B” zwróci wartość TRUE, jeśli zarówno A jak i B są prawdziwe, albo tylko A jest prawdziwe, albo tylko B jest prawdziwe.
// Sprawdź, czy co najmniej jedna z wartości A lub B jest prawdziwa
IF (A OR B) THEN
    // Wykonaj instrukcje, jeśli co najmniej jedna z wartości A lub B jest prawdziwa
    ...
ELSE
    // Wykonaj inne instrukcje, jeśli obie wartości A i B są fałszywe
    ...
END_IF
  • NOT: Instrukcja NOT pozwala na negację wartości boolowskiej. Jeśli wartość jest prawdziwa, instrukcja zwraca wartość FALSE, w przeciwnym razie zwraca wartość TRUE. Na przykład, instrukcja „NOT A” zwróci wartość TRUE, jeśli A jest FALSE, a wartość FALSE, jeśli A jest TRUE.
// Neguj wartość zmiennej A
A := NOT A;

Instrukcje warunkowe IF… ELSE

Instrukcja warunkowa IF-ELSE w języku SCL umożliwia wykonywanie określonych instrukcji w zależności od spełnienia lub niespełnienia warunku. Składa się z trzech części: warunku w instrukcji IF, sekcji instrukcji wykonywanych w przypadku spełnienia warunku w instrukcji THEN, oraz sekcji instrukcji wykonywanych w przypadku niespełnienia warunku w instrukcji ELSE. Może też zawierać dodatkową instrukcję ELSE IF, która pozwala na sprawdzenie kolejnego warunku w przypadku niespełnienia warunku pierwotnego. Poniższy przykład ilustruje użycie instrukcji warunkowej IF-ELSE w języku SCL:

// Sprawdź, czy zmienna A jest większa od B
IF (A > B) THEN
    // Jeśli tak, to wykonaj instrukcje
    ...
// W przeciwnym razie sprawdź, czy zmienna A jest równa B
ELSIF (A = B) THEN
    // Jeśli tak, to wykonaj inne instrukcje
    ...
// W przeciwnym razie wykonaj instrukcje w sekcji ELSE
ELSE
    ...
END_IF

Instrukcja warunkowa IF-ELSE w języku SCL jest przydatna w implementacji różnorodnych algorytmów w sterownikach PLC, pozwalając na dynamiczne reagowanie na zmieniające się warunki w procesie sterowania.

Operatory porównania

Operatory porównania w języku SCL umożliwiają sprawdzanie relacji pomiędzy wartościami zmiennych lub wyrażeń. Operatory porównania zwracają wynik operacji w formie wartości BOOL – TRUE/FALSE.

Są to następujące operatory:

  • = operator równości, sprawdza, czy dwie wartości są równe
  • <> operator nierówności, sprawdza, czy dwie wartości są różne
  • < operator mniejszości, sprawdza, czy lewa wartość jest mniejsza od prawej wartości
  • > operator większości, sprawdza, czy lewa wartość jest większa od prawej wartości
  • <=operator mniejszości lub równości, sprawdza, czy lewa wartość jest mniejsza lub równa prawej wartości
  • >= operator większości lub równości, sprawdza, czy lewa wartość jest większa lub równa prawej wartości

Operatory porównania są często używane w instrukcjach warunkowych IF-ELSE w języku SCL w celu sprawdzenia, czy dane warunki są spełnione lub nie. Poniższy przykład ilustruje użycie operatorów porównania w języku SCL:

// Sprawdź, czy zmienna A jest większa od B
IF (A > B) THEN
    // Jeśli tak, to wykonaj instrukcje
    ...
ELSE
    // W przeciwnym razie wykonaj inne instrukcje
    ...
END_IF

Program do utrzymania poziomu cieczy w zbiorniku z cyfrowymi czujnikami poziomu

Poniższy program w języku SCL umożliwia sterowanie poziomem cieczy w zbiorniku za pomocą cyfrowych czujników poziomu dolnego i górnego oraz pompy 0-1. Program wykorzystuje instrukcję boolowską NOT oraz warunkową instrukcję IF-ELSE.

// Sprawdź, czy poziom cieczy jest poniżej poziomu dolnego
IF (NOT xPoziomDolny) THEN
    // Jeśli tak, to włącz pompę
    xPompa := TRUE;
// W przeciwnym razie sprawdź, czy poziom cieczy jest powyżej poziomu górnego
ELSIF (xPoziomGorny) THEN
    // Jeśli tak, to wyłącz pompę
    xPompa := FALSE;
END_IF

Zjawisko histerezy polega na tym, że pompa jest włączana dopiero po osiągnięciu poziomu cieczy poniżej poziomu dolnego, a wyłączana dopiero po osiągnięciu poziomu cieczy powyżej poziomu górnego. Dzięki temu unikamy sytuacji, w której pompa ciągle się włącza i wyłącza przy poziomach cieczy blisko poziomów dolnego i górnego, co mogłoby spowodować niepotrzebne zużycie energii i awarie. Wartości poziomów dolnego i górnego mogą być dostosowane do konkretnej aplikacji w celu uzyskania optymalnego działania systemu sterowania poziomem cieczy. Projekty tego typu zrealizujesz razem z nami w kursie Programowania Sterowników PLC Siemens S7-1200/1500 w języku SCL, sprawdź czy nie prowadzimy aktualnie zapisów pod tym linkiem –> https://www.controlbyte.pl/scl/

Program do utrzymania poziomu cieczy w zbiorniku z analogowym czujnikiem poziomu

Poniższy program w języku SCL umożliwia sterowanie poziomem cieczy w zbiorniku za pomocą analogowego czujnika poziomu oraz pompy 0-1. Program wykorzystuje instrukcję warunkową IF-ELSE oraz operatory porównania w celu sprawdzenia aktualnego poziomu cieczy i włączenia lub wyłączenia pompy w odpowiednim momencie.

// Przechowaj wartość zadaną poziomu dolnego i górnego w zmiennych 
rPoziomDolnyZad_mm := 500.0;
rPoziomGornyZad_mm := 1000.0;
 
// Sprawdź, czy aktualny poziom cieczy jest poniżej poziomu dolnego
IF (rPoziomAkt_mm < rPoziomDolnyZad_mm) THEN
   // Jeśli tak, to włącz pompę
   xPompa := TRUE;
// W przeciwnym razie sprawdź, czy aktualny poziom cieczy jest powyżej poziomu górnego
ELSE IF (rPoziomAkt_mm > rPoziomGornyZad_mm) THEN
   // Jeśli tak, to wyłącz pompę
   xPompa := FALSE;
END_IF

Ten program pozwala na kontrolowanie poziomu cieczy w zbiorniku za pomocą pompy, aby utrzymać go w odpowiednim zakresie pomiędzy poziomami dolnym i górnym. Można go dowolnie modyfikować i dostosować do konkretnych potrzeb, na przykład zmieniając parametryzację poziomów zadanych cieczy lub dodając dodatkowe instrukcje w celu uzyskania bardziej zaawansowanego działania systemu sterowania.

Podsumowując… do czego język SCL nadaje się idealnie?

SCL posiada bogaty zestaw operatorów matematycznych, umożliwiających wykonywanie podstawowych działań arytmetycznych, takich jak dodawanie, odejmowanie, mnożenie i dzielenie. Język ten umożliwia też wykonywanie bardziej zaawansowanych obliczeń, takich jak obliczanie pierwiastków, potęg czy logarytmów.

Składnia języka SCL pozwala na programowanie funkcji oraz bloków funkcyjnych przetwarzających dane w sposób niezwykle zwarty. Ten sam program w języku graficznych zająłby kilkanaście razy więcej przestrzeni w edytorze kodu.

Poniższy kod w języku SCL implementuje funkcję obliczającą pierwiastki równania kwadratowego o postaci ax^2 + bx + c = 0. Funkcja przyjmuje trzy argumenty: współczynniki a, b i c równania i zwraca dwie wartości – pierwiastki równania. W przypadku braku rozwiązań rzeczywistych funkcja zwraca NaN (Not-a-Number).

FUNCTION fcPierwiastkiRownKwad(REAL a, REAL b, REAL c, REAL rPierwiastek1, REAL rPierwiastek2)
VAR
    // Zmienne przechowujące pierwiastki równania
    rPierwiastek1, rPierwiastek2 : REAL;
BEGIN
    // Oblicz deltę
    rDelta := b * b - 4 * a * c;

    // Jeśli delta jest większa lub równa 0, to oblicz pierwiastki
    IF (rDelta >= 0) THEN
        // Oblicz pierwszy pierwiastek
        rPierwiastek1 := (-b + SQRT(rDelta)) / (2 * a);

        // Oblicz drugi pierwiastek
        rPierwiastek2 := (-b - SQRT(rDelta)) / (2 * a);
    ELSE
        // Jeśli delta jest mniejsza od 0, to brak rozwiązań rzeczywistych
        rPierwiastek1 := NaN;
        rPierwiastek2 := NaN;
    END_IF

END_FUNCTION

Kamil Biedulski

Dowiedz się więcej na temat programowania sterowników PLC w języku tekstowym SCL przerabiając nasz kurs –> https://www.controlbyte.pl/scl/

Komentarz

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.

<iframe src=”https://player.vimeo.com/video/757198505?h=0e10f23dac” width=”640″ height=”564″ frameborder=”0″ allow=”autoplay; fullscreen” allowfullscreen></iframe>

Mailing kursu programowania

Inteligentny DOM

Zapisując się na listę kursu otrzymasz:
– merytoryczne materiały z kursu, dzięki którym sprawdzisz, czy ten kurs jest dla Ciebie
– informacje o otwarciu zapisów [activecampaign form=62 css=1]

Zapisując się na listę zgadzasz się z naszą polityką prywatności
https://kursy.controlbyte.pl/polityka-prywatnosci/
a my zapewniamy, że Twoje dane są bezpieczne.

Mailing kursu programowania MINIKURS

Siemens Simatic S7-1200/S7-1500
w języku LAD/FBD

Zapisując się na listę kursu otrzymasz:
– merytoryczne materiały z kursu, dzięki którym sprawdzisz, czy ten kurs jest dla Ciebie
– informacje o otwarciu zapisów [activecampaign form=56 ]

Zapisując się na listę zgadzasz się z naszą polityką prywatności
https://kursy.controlbyte.pl/polityka-prywatnosci/
a my zapewniamy, że Twoje dane są bezpieczne.

MINI KURS MAILOWY

PROGRAMOWANIA

CODESYS w języku ST

 

Zapisując się na mini kurs mailowy otrzymasz:
-codziennie jedną wiadomość e-mail przez okres tygodnia
-materiały dzięki którym rozpoczniesz programować
w Codesys i języku ST

 

[activecampaign form=22]

Zapisując się na listę zgadzasz się z naszą polityką prywatności
https://kursy.controlbyte.pl/polityka-prywatnosci/
a my zapewniamy, że Twoje dane są bezpieczne.

Mailing dla programistów

ControlByte

Zapisując się na listę mailową otrzymasz:
– merytoryczne materiały z naszych kursów
– informacje o otwarciu zapisów na szkolenia programowania
– informacje o naszych webinarch na żywo [activecampaign form=3]

Zapisując się na listę zgadzasz się z naszą polityką prywatności
https://kursy.controlbyte.pl/polityka-prywatnosci/
a my zapewniamy, że Twoje dane są bezpieczne.

Mailing kursu programowania

Codesys w języku ST

Zapisując się na listę kursu otrzymasz:
– merytoryczne materiały z kursu, dzięki którym sprawdzisz, czy ten kurs jest dla Ciebie
– informacje o otwarciu zapisów [activecampaign form=20]

Zapisując się na listę zgadzasz się z naszą polityką prywatności
https://kursy.controlbyte.pl/polityka-prywatnosci/
a my zapewniamy, że Twoje dane są bezpieczne.

Mailing kursu programowania

Siemens Simatic S7-1200/S7-1500
w języku LAD/FBD + HMI

Zapisując się na listę kursu otrzymasz:
– merytoryczne materiały z kursu, dzięki którym sprawdzisz, czy ten kurs jest dla Ciebie
– informacje o otwarciu zapisów [activecampaign form=14 css=1]

Zapisując się na listę zgadzasz się z naszą polityką prywatności
https://kursy.controlbyte.pl/polityka-prywatnosci/
a my zapewniamy, że Twoje dane są bezpieczne.

Mailing kursu programowania

Siemens S7-1200, S7-1500

w języku SCL

Zapisując się na listę kursu otrzymasz:
– merytoryczne materiały z kursu, dzięki którym sprawdzisz, czy ten kurs jest dla Ciebie
– informacje o otwarciu zapisów [activecampaign form=18 css=1]

Zapisując się na listę zgadzasz się z naszą polityką prywatności
https://kursy.controlbyte.pl/polityka-prywatnosci/
a my zapewniamy, że Twoje dane są bezpieczne.