W pracy automatyka ważne jest, żeby odpowiednio zorganizować sobie pracę: środowisko programistyczne, biurko, warsztat etc.
Dzięki temu można szybciej i wydajniej pracować. Warto również zastanowić się nad wyborem i nauką narzędzi, które pozwolą nam w przyszłości zaoszczędzić sporo czasu przy realizacji projektów. Skrypty w Python są właśnie takim narzędziem w środowisku e!COCKPIT.
Za pomocą skryptów Python w e!COCKPIT można zrealizować wiele zadań, np. otworzyć nowy projekt, zaimportować POU (jednostki organizacyjne oprogramowania), nawiązać lub rozłączyć połączenie z danym sterownikiem (login, logout), wgrać program do pamięci sterownika, wpisać określone wartości do określonych zmiennych, czy zapisać projekt. W tym artykule skoncentruję się na opisie przykładowych skryptów w Python używając dostępnego API (Application Programming Interface) przygotowanego dla oprogramowania e!COCKPIT. Między innymi są dostępne tutaj dwie klasy:
Przykłady użycia klas e_projects oraz e_device_catalog:
e_projects:
project = e_projects.create_new_project() # Tworzy nowy projekt
e_device_catalog:
# Pobiera daną wersję urządzenia z katalogu produktów
deviceTypes = e_device_catalog.find_device_type(„0750-8202”, „1.4.5.1204″)
#Jeżeli urządzenie o numerze katalogowym zostało znalezione, w tym wypadku jest #urządzenie o numerze katalogowym „ 0750-8202„ , to urządzenie w wersji „1.4.5.1204“ jest #dodawane do projektu
deviceTypes = e_device_catalog.find_device_type(„0750-8202„, „LATEST”)
# Jeżeli urządzenie „ 0750-8202„ zostało znalezione, to do projektu zostaje dodane urządzenie z najnowszej wersji
deviceTypes = e_device_catalog.find_device_type(„PFC100”, „LATEST”)
#Pobiera listę wszystkich sterowników PFC100 z najnowszymi opisami urządzeń
Przykładowe skrypty
1) Tworzenie nowego projektu w e!COCKPIT oraz zapisywanie go na pulpicie
# -*- coding: utf-8 -*- # powyższy komentarz jest wymagany jeżeli w skrypcie znajdują się jakiekolwiek # znaki inne niż znaki ASCII # zaimportuj moduł os import os # e!COCKPIT: Utwórz nowy projekt projekt = e_projects.create_new_project() # wyświetl wersję kompilatora projektu print("The compiler version of the project is {0}".format(projekt.compiler_version)) # Zapisz nowopowstały projekt e!COCKPIT na pulpicie pulpit = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop\\Projekt_1.ecp') projekt.save_as(pulpit) # Zapisz projekt, jeżeli został zmieniony projekt.save()
2) Dodawanie do projektu w e!COCKPIT trzech urządzeń z najnowszym opisem
# -*- coding: utf-8 -*- # powyższy komentarz jest wymagany jeżeli w skrypcie znajdują się jakiekolwiek # znaki inne niż znaki ASCII # zaimportuj moduł os import os # e!COCKPIT: Utwórz nowy projekt projekt = e_projects.create_new_project() # -*- coding: utf-8 -*- # powyższy komentarz jest wymagany jeżeli w skrypcie znajdują się jakiekolwiek # znaki inne niż znaki ASCII # zaimportuj moduł os import os # e!COCKPIT: Utwórz nowy projekt project = e_projects.create_new_project() # wyświetl wersję kompilatora projektu print("The compiler version of the project is {0}".format(project.compiler_version)) # Zapisz nowopowstały projekt e!COCKPIT na pulpicie desktop = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop\\e!Cpython\\MyProject.ecp') project.save_as(desktop) # Zapisz projekt, jeżeli został zmieniony project.save() ''' Jeżeli urządzenie o numerze katalogowym zostało znalezione, w tym wypadku jest urządzenie o numerze katalogowym „ 0750-8202„ , to urządzenie w wersji "3.0.1.0" dodawane jest do projektu ''' deviceTypes = e_device_catalog.find_device_type("0750-8202", "3.0.1.0") # Odczytaj pewne właściwości for deviceType in deviceTypes: print("Found device type: " + str(deviceType.name) + " id: " + str(deviceType.id) + " version: " + str(deviceType.version) + " order number: " + str(deviceType.order_number) + " vendor: " + str(deviceType.vendor)) # pobierz tyb urządzenia z katalogu produktów w e!COCKPIT deviceTypes = e_device_catalog.find_device_type("0750-8202", "LATEST") # dodaj trzy instancje danego typu urządzenia do projektu devices = project.add_device(deviceTypes[0], 3)
3. Nadawanie sterownikom w projekcie odpowiednich adresów IP
# -*- coding: utf-8 -*- # powyższy komentarz jest wymagany jeżeli w skrypcie znajdują się jakiekolwiek # znaki inne niż znaki ASCII # zaimportuj moduł os import os # e!COCKPIT: Utwórz nowy projekt project = e_projects.create_new_project() # wyświetl wersję kompilatora projektu print("The compiler version of the project is {0}".format(project.compiler_version)) # Zapisz nowopowstały projekt e!COCKPIT na pulpicie desktop = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop\\e!Cpython\\MyProject.ecp') project.save_as(desktop) # Zapisz projekt, jeżeli został zmieniony project.save() ''' Jeżeli urządzenie o numerze katalogowym zostało znalezione, w tym wypadku jest urządzenie o numerze katalogowym „ 0750-8202„ , to urządzenie w wersji "3.0.1.0" dodawane jest do projektu ''' deviceTypes = e_device_catalog.find_device_type("0750-8202", "3.0.1.0") # Odczytaj pewne właściwości for deviceType in deviceTypes: print("Found device type: " + str(deviceType.name) + " id: " + str(deviceType.id) + " version: " + str(deviceType.version) + " order number: " + str(deviceType.order_number) + " vendor: " + str(deviceType.vendor)) # pobierz tyb urządzenia z katalogu produktów w e!COCKPIT deviceTypes = e_device_catalog.find_device_type("0750-8202", "LATEST") # dodaj trzy instancje danego typu urządzenia do projektu devices = project.add_device(deviceTypes[0], 3) # e!COCKPIT: Ustaw odpowiednie adresy IP dla trzech sterowników #rozpocznij nadawanie adresów IP od adresu 192.168.1.2 for i in range(0,3): devices[i].ip_address = "192.168.1." +str(i+2)
4. Dodawanie modułu o określonym numerze katalogowym do konfiguracji dla jednego sterownika w projekcie
# dodaj moduł 750-1405 do pierwszego urządzenia PLC moduleTypes = e_device_catalog.find_device_type("0750-1405", "LATEST") modules = devices[0].add_module(moduleTypes[0], 0, 1) # dodaj moduł 750-1505 do pierwszego urządzenia PLC moduleTypes = e_device_catalog.find_device_type("0750-1505", "LATEST") modules = devices[0].add_module(moduleTypes[0], 1, 1)
5. Dodawanie różnych modułów do konfiguracji sterownika. W tym przypadku dodawanie modułów do trzech sterowników.
# dodawanie modułów o odpowiednim numerze katalogowym moduleDI = e_device_catalog.find_device_type("0750-1405", "LATEST") moduleDO = e_device_catalog.find_device_type("0750-1505", "LATEST") moduleAI_TC = e_device_catalog.find_device_type("0750-0469/0003-0000", "LATEST") moduleAI = e_device_catalog.find_device_type("0750-0467", "LATEST") moduleAO = e_device_catalog.find_device_type("0750-0550", "LATEST") # dodanie modułów do pierwszego PLC modules = devices[0].add_module(moduleDI[0], 0, 1) modules = devices[0].add_module(moduleDO[0], 1, 1) modules = devices[0].add_module(moduleAI_TC[0], 2, 1) modules = devices[0].add_module(moduleAI[0], 3, 1) modules = devices[0].add_module(moduleAO[0], 4, 1) # dodanie modułów do drugiego PLC modules = devices[1].add_module(moduleDI[0], 0, 1) modules = devices[1].add_module(moduleDO[0], 1, 1) modules = devices[1].add_module(moduleAI_TC[0], 2, 1) modules = devices[1].add_module(moduleAI[0], 3, 1 modules = devices[1].add_module(moduleAO[0], 4, 1) # dodanie modułów do trzeciego PLC modules = devices[2].add_module(moduleDI[0], 0, 1) modules = devices[2].add_module(moduleDO[0], 1, 1) modules = devices[2].add_module(moduleAI_TC[0], 2, 1) modules = devices[2].add_module(moduleAI[0], 3, 1) modules = devices[2].add_module(moduleAO[0], 4, 1)
6. Skrócenie ostatniej operacji dzięki pętli for w Python
# dodawanie modułów o odpowiednim numerze katalogowym moduleDI = e_device_catalog.find_device_type("0750-1405", "LATEST") moduleDO = e_device_catalog.find_device_type("0750-1505", "LATEST") moduleAI_TC = e_device_catalog.find_device_type("0750-0469/0003-0000", "LATEST") moduleAI = e_device_catalog.find_device_type("0750-0467", "LATEST") moduleAO = e_device_catalog.find_device_type("0750-0550", "LATEST")
# przypisz moduły do wszystkich PLC z wykorzystaniem pętli for for j in range(0,3): modules = devices[j].add_module(moduleDI[0], 0, 1) # |--Ilość --> Uwaga: Dodatkowe moduły zostaną dodane na końcu każdego węzła # |--pozycja slotu modules = devices[j].add_module(moduleDO[0], 1, 1) modules = devices[j].add_module(moduleAI_TC[0], 2, 1) modules = devices[j].add_module(moduleAI[0], 3, 1) modules = devices[j].add_module(moduleAO[0], 4, 1)
Maciej Kurantowicz, WAGO.PL
Część pierwsza:
Skrypty w Python dla e!COCKPIT – cześć 1
Gdzie jest dokumentacja python Api dla e!cockpit?
Do dyspozycji są następujące materiały, które instalują się wraz z e!COCKPITEM:
Przykładowe skrypty Python znajdujące się w poniższej lokalizacji:
C:\ProgramData\WAGO Software\e!COCKPIT\SampleApplications\Python Scripting
Pomoc odnośnie skryptów Python:
C:\Program Files (x86)\WAGO Software\e!COCKPIT\3S CODESYS\CODESYS\Online Help\en
e!Cockpit bazuje na Codesys 3 w związku z tym warto korzystać z forum producenta odnośnie skryptów w Python:
https://forum.codesys.com/viewforum.php?f=18