Język Python wspiera programowanie PLC w Codesys

135

Dowiedz się, jak budować skrypty wspomagające programowanie PLC z użyciem języka Python i środowiska Codesys.

Zawartość wpisu

Bedrock Automation posiada dedykowane i darmowe środowisko programowania – BEDROCK IDE używane w celu budowy kompletnych projektów dla PLC. Oparto je na popularnym oprogramowaniu – Codesys. Co więcej, BEDROCK IDE oferuje wiele funkcji pozwalających na efektywne zarządzanie produktami od BEDROCK Automation.

Ten wpis powstał, aby przybliżyć jedną z bardziej wszechstronnych funkcjonalności środowisk z tej rodziny. Po jego lekturze dowiesz się, w jaki sposób używać skryptów pisanych w języku Python do poszerzenia właściwości programów dla PLC projektowanych w Codesys.

Jeśli BEDROCK IDE jest dla Ciebie zupełnie nowym oprogramowaniem, możesz cofnąć się do naszych wcześniejszych wpisów. Znajdziesz tam wskazówki, w jaki sposób rozpocząć pracę z tym środowiskiem od zupełnych podstaw.

Wstęp do języka Python

Python jest przykładem języka wysokopoziomowego. Oznacza to mniej więcej tyle, że jego składnia ma za zadanie być jak najbardziej przejrzystą dla człowieka. W rezultacie, w bibliotekach tego języka możemy odnaleźć komendy wykonujące na raz wiele złożonych operacji, które skutkują osiągnięciem zamierzonego celu. Komendy te uwalniają operatora od konieczności zajmowania się pewnymi podstawowymi aspektami programowania, jak na przykład zarządzaniem pamięcią.

Język ten wspiera różne wzorce programowania, takie jak:

  • imperatywny – program składa się z szeregu instrukcji wykonujących określone zadania;
  • obiektowy – program to zbiór obiektów komunikujących się ze sobą w celu wykonania zamierzonego zadania;
  • funkcyjny – podstawową jednostką programowania jest funkcja (nie będzie tu poruszany).

To, co wyróżnia ten język od innego tekstowego języka obecnego w standardzie IEC 61131-3 jakim jest Structured Text (ST), to jego dynamiczność. Dynamiczność oznacza między innymi, że zmienne używane w programie nie posiadają statycznie przypisanego typu przed wykonaniem programu. Innymi słowy, operator nie określa, czy dana zmienna jest typu całkowitego lub tekstowego. Typ zmiennej wynika z wartości, którą ona przechowuje w danej chwili działania programu.

Jak wywołać skrypt Python w Codesys

Przygodę z każdym językiem trzeba rozpocząć do klasycznego programu drukującego na ekran (lub do konsoli) słowa „Hello World!”. Tak też będzie tym razem.

Pierwszym krokiem jest utworzenie, w dowolnej lokalizacji na dysku, pliku z rozszerzeniem „.py”, który zawiera odpowiedni kod. W tym przypadku, będzie to jedna linijka o następującej treści.

print("Hello World!")

Teraz należy otworzyć okno programu BEDROCK IDE i wywołać skrypt za pomocą odpowiednich opcji (pokazanych na zdjęciu niżej).

BEDROCK IDE, jako oprogramowanie wywodzące się z rodziny Codesys, posiada analogiczny do niego układ opcji. Tak więc, może być z powodzeniem stosowane do prezentacji poruszanego tematu.

Wykonywanie skryptu Python w środowisku programowania PLC opartym na Codesys
Wykonywanie skryptu Python w środowisku programowania PLC opartym na Codesys

Po wyszukaniu odpowiedniego skryptu w eksploratorze plików oraz jego wybraniu, zawarte w nim polecenia wykonają się automatycznie. Wynik działania tego skryptu będzie natomiast widoczny w polu „Messages” w BEDROCK IDE.

Wynik działania skryptu
Wynik działania skryptu

Jest to oczywiście prosty przykład, który nie realizuje żadnego praktycznego zadania. W dalszej części wpisu omówiono natomiast zastosowanie skryptów Python do interakcji ze standardowymi programami dla PLC.

Współpraca Codesys i Python

Teraz, gdy już przedstawiliśmy w namacalny sposób, jak może odbywać się wywołanie (póki co bardzo prostego) skryptu Python w Codesys, warto powiedzieć kilka słów o tym mechanizmie.

Dzięki funkcji skryptów w Codesys, można zautomatyzować polecenia lub złożone operacje programu, które w przeciwnym razie musiałyby być wykonywane ręcznie. Skrypty te można uruchomić z interfejsu użytkownika Codesys (jako polecenie lub skonfigurowany pasek narzędzi) lub z linii poleceń Windows.

Język skryptowy Codesys jest modułowy i oparty o IronPython – implementację Python’a na platformie .NET. Komponent BEDROCK IDE „ScriptEngine” łączy interpreter IronPython ze środowiskiem programistycznym Codesys. Następnie, można skorzystać z rozbudowanych bibliotek framework’ów Pythona, które zawierają wiele dodatkowych funkcjonalności.

BEDROCK IDE nie posiada jeszcze własnego edytora Pythona. Tak więc, skrypty należy tworzyć za pomocą dowolnego edytora tekstu lub środowiska dla Python.

Język skryptowy IronPython umożliwia dostęp do API skryptowych Codesys w celu kontrolowania operacji wykonywanych przez BEDROCK IDE. Ponadto, pozwala użytkownikom efektywnie stosować zarówno standardową bibliotekę Pythona, jak również biblioteki framework’ów .NET pochodzące z dowolnego źródła.

Architektura wykonywania skryptów Python w Codesys
Architektura wykonywania skryptów Python w Codesys

Integracja skryptów Python z programem dla PLC

W internecie krąży wiele poradników oraz kursów wprowadzających do języka Python. Z tego też powodu, w tym artykule skupiono się jedynie na konkretnych przykładach pokazujących, w jaki sposób integrować pisane skrypty z programami w BEDROCK IDE. Lekcje pokazujące krok po kroku, jak używać tego języka w ogólnych przypadkach, można znaleźć na przykład pod poniższym linkiem.

Zapis urządzeń z drzewa projektu do pliku tekstowego

Pierwszym przykładem będzie skrypt pozwalający na automatyczne przepisanie nazw urządzeń z drzewa projektu w BEDROCK IDE. Przepisanie nastąpi zarówno do okna „Messages”, jak i pliku tekstowego w zadanej lokalizacji. Co więcej, skrypt zapisuje nazwy urządzeń z zachowaniem ich hierarchii (poprzez dodawanie odpowiednich wcięć).

Tak więc, należy otworzyć program BEDROCK IDE oraz dodać przykładowy projekt, wyglądający na przykład jak na zdjęciu poniżej.

Przykładowy projekt BEDROCK IDE
Przykładowy projekt BEDROCK IDE

Czerwonymi podkreśleniami wyróżniono obiekty interpretowane jako urządzenia, które w konsekwencji zapisuje się do pliku tekstowego.

Wiele podobnych przykładów skryptów (w tym ten opisywany tutaj) znajduje się w plikach „Help” programu BEDROCK IDE. Na potrzeby tego wpisu, odpowiedni skrypt opatrzono jedynie linijkami kodu odpowiedzialnymi za zapis do pliku.

Odpowiedni kod znajduje się pod poniższym linkiem. Kliknij, aby wyświetlić go w nowej karcie.

Po wywołaniu tego kodu, w sposób analogiczny jak to zaprezentowano na początku wpisu, można obserwować zawartość wskazanego pliku tekstowego.

Zawartość pliku tekstowego z listą urządzeń
Zawartość pliku tekstowego z listą urządzeń

W tym samym czasie, okno „Messages” w BEDROCK IDE uzupełnia się jak poniżej.

Wynik działa skrytpu w BEDROCK IDE
Wynik działania skrytpu w BEDROCK IDE

Porównując kod źródłowy skryptu (dostępny pod powyższym linkiem) oraz wynik działania aplikacji, można rozeznać się, które linie kodu odpowiadają za poszczególne etapy działania podprogramu.

Odczyt wartości zmiennej ze sterownika PLC z zapisem do pliku

Skrypty Python można wykorzystywać w środowisku Codesys również do dynamicznego odczytywania wartości zmiennych z PLC. Również i w tym przypadku, odpowiednie przykłady można znaleźć w plikach pomocy tego środowiska.

Prezentowane tutaj rozwiązanie urozmaica nieco standardowe przykłady o obsługę graficznego interfejsu użytkownika w Codesys.

Skrypt działa w taki sposób, że najpierw pyta użytkownika, w którym pliku tekstowym należy zapisać wartości próbek. W tym celu udostępnia on okno Eksploratora Windows, aby wybór pliku mógł nastąpić w wygodny graficzny sposób. Następnie, użytkownik podaje nazwę pożądanej zmiennej w programie oraz liczbę jej próbek, które mają zostać pozyskane.

Po zebraniu danych wejściowych skrypt:

  • zamyka aktualnie otwarte projekty w Codesys, jeśli istnieją;
  • otwiera wskazany (w tym przypadku statycznie – w kodzie programu) docelowy projekt;
  • ustawia projekt w stan aktywny, loguje się do odpowiedniego urządzenia (sterownika PLC) i uruchamia aplikację (jeśli jest ona zatrzymana);
  • zapisuje potrzebną ilość próbek i zamyka projekt, a następnie – plik tekstowy.

Również tym przypadku, kod programu jest dostępny pod poniższym linkiem.

Działanie skryptu przedstawia poniższy krótki film.

Zapis wartości zmiennej z programu sterownika do pliku tekstowego

Oczywiście powyższy program można dużo szerzej uogólnić. W sposób analogiczny do istniejącej już części kodu, można dodać komendy, które pozwolą np. na wskazanie docelowego pliku projektu w Eksploratorze oraz ręczne wprowadzenie nazwy modułu programowego, w którym zadeklarowano zmienną.

Wywołanie skryptu za pomocą własnych ikon w Codesys

W środowiskach z rodziny Codesys możliwe jest skonfigurowanie do 32 własnych ikon wywołujących skrypty Python, które integrują się z Twoimi programami PLC. Aby wykonać to zadanie, potrzeba utworzyć:

  • plik zawierający ikonę – rozszerzenie „.ico”;
  • skrypt Python, jak w przykładach powyżej;
  • plik konfiguracyjny config.json w folderze instalacyjnym Codesys (domyślnie jest to: C:\Program Files (x86)\Bedrock IDE 1.10\CODESYS\Script Commands).

Prawdopodobnie, folder „Script Commands” musisz utworzyć ręcznie.

Plik konfiguracyjny wymieniony wyżej zawiera informacje opisujące poszczególne opcje należące do paska narzędzi. Są to:

  • Name” – nazwa opcji widoczna później po najechaniu na nią;
  • „Desc” – (opcjonalna) opis opcji – póki co, niewidoczne w UI;
  • „Icon” – ścieżka do pliku z ikoną opcji stworzoną przez użytkownika;
  • „Path” – ścieżka do pliku ze skryptem;
  • „Params”– (opcjonalna) dodatkowe parametry dla skryptów.

Dalsze kroki przedstawiają działania podjęte, w celu dodania dwóch opcji do paska narzędzi BEDROCK IDE. Opcje te wywołują dwa opisane wyżej skrypty.

Pierwszym krokiem jest przeniesienie czterech plików z kodami skryptów oraz ikonami do wspomnianej wyżej lokalizacji. Dzięki temu, jako parametr „Path” oraz „Icon” będzie można podać jedynie nazwę odpowiedniego pliku. Należy również utworzyć plik config.json.

Lokalizacja dla skryptów Python oraz pliku konfiguracyjnego Codesys
Lokalizacja dla skryptów Python oraz pliku konfiguracyjnego Codesys

Kolejny etap to właściwe uzupełnienie pliku konfiguracyjnego. W tym przypadku pominięto opcjonalne parametry, gdyż nie mają one tu zastosowania. Należy zwrócić szczególną uwagę na rozkład przecinków w niżej prezentowanym pliku.

Zawartość pliku konfiguracyjnego obsługującego opcje skryptów Python wywoływanych w Codesys
Zawartość pliku konfiguracyjnego obsługującego opcje skryptów Python wywoływanych w Codesys

Powyższy plik zawiera informacje na temat dwóch opcji, stąd dwa zestawy identycznych parametrów.

Teraz, należy otworzyć program BEDROCK IDE oraz postępować tak, jak to zostało pokazane na poniższym krótkim filmie. Konfiguracja ogranicza się do dodania nowego paska narzędzi do UI w Codesys.

Własne opcje na pasku narzędzi – wywołanie skryptów Python

Podsumowanie

Oprogramowanie z rodziny Codesys – BEDROCK IDE, to narzędzie, które cały czas się rozwija. Dzięki takim funkcjonalnościom, jak silnik Python wspierający tworzenie programów dla PLC, środowisko Codesys może być ulepszane globalnie – przez deweloperów, ale też lokalnie – przez każdego użytkownika na jego własnym PC. Wszystko to sprawia, że Codesys to oprogramowanie, które dostosowuje się do szczegółowych wymagań klienta końcowego.

Niewątpliwą zaletą BEDROCK IDE jest fakt, że jest to całkowicie darmowe środowisko pozwalające dodatkowo na symulację tworzonych projektów. Można je bezpłatnie pobrać ze strony producenta, po uprzednim wypełnieniu krótkiego formularza.

Jeśli masz pytania, lub potrzebujesz pomocy w odtworzeniu pokazanej tu konfiguracji, napisz do nas na adres e-mail: sterowniki@elmark.com.pl .

Źródło: Elmark