Partnerzy

Od 1954 Finder pracował wyłącznie w zakresie przekaźników i timerów. Nasz wysoki stopień specjalizacji zaowocował ponad 10.000 różnych produktów w jednej z najszerszych dostępnych ofert. Firma szeroko się rozwija i inwestuje w przyszłość uzupełniając gamę swojego asortymentu. Prócz przekaźników oferuje rozwiązania przemysłu elektrycznego do zastosowań domowych jak i komercyjnych poprzez przekaźniki, urządzenia przeciwprzepięciowe, termostaty panelowe, zasilacze i liczniki energii. Gama asortymentu obejmuje ponad 12 tysięcy produktów.

KursyAutomatyki.pl - portal z kursami online z automatyki przemysłowej. Znajdziesz tam zarówno darmowe kursy, jak i płatne, pełne z wiedzy i doświadczenia od ekspertów. Po zapisie na kurs otrzymujesz dostęp do logicznego ciągu nagrań i ćwiczeń, do których możesz wracać wielokrotnie. Na zakończenie kursu czeka Cię test sprawdzający, po którym otrzymasz dwa certyfikaty w języku polskim i angielskim. Dołącz już teraz!

Automatyzacja to nasz świat. Perfekcyjne rozwiązania - nasz cel. Obecnie firma Pepperl+Fuchs jest znana klientom na całym świecie jako przedsiębiorstwo pionierskie i innowacyjne w dziedzinach takich, jak ochrona przeciwwybuchowa instalacji elektrycznych czy technologie czujników. Zawsze koncentrujemy się na wymaganiach klientów. Pasja, z jaką poświęcamy się automatyce, oraz przełomowe technologie, jakimi dysponujemy, pozwalają nam owocnie współpracować z klientami — tak dziś, jak i w przyszłości.

Rozwiązania dostarczane przez WAGO. już od wielu lat wspierają naszych klientów w dążeniu do sukcesu. Poczynając od prostych instalacji elektrycznych, a kończąc na skomplikowanej infrastrukturze zarządzającej procesami przemysłowymi czy automatyką budynkową. Sprawdźcie jak rozwiązania WAGO, mogą wesprzeć Was w drodze do Waszego sukcesu.

Dostarczamy produkty i rozwiązania z zakresu Przemysłowej Techniki Łączeniowej. Już od ponad 160 lat Weidmüller jest synonimem kompetencji i niezawodność. Oferujemy rozwiązania dla takich branż jak przemysł maszynowy, technika procesowa, produkcja urządzeń, energetyka i transport. Wspieramy naszych Klientów i Partnerów w ponad 80 krajach, produktami, rozwiązaniami i usługami w zakresie połączeń elektrycznych oraz układów zasilania, przetwarzania sygnałów oraz transmisji danych w środowisku przemysłowym.

Oni już dołączyli do Projektu iAutomatyka

VBA w WinCC SCADA – Jak zarobić i się nie narobić

W tym artykule chciałbym przedstawić rozwiązanie, które może nam znacznie przyśpieszyć pracę w WinCC wykorzystując do tego język VBA. Wielokrotnie podczas projektowaniu aplikacji każdy może spotykać się z elementami które są w miarę powtarzalne, ale bardzo czasochłonne. Przedstawię w jaki sposób generować wiele elementów na stronach w WinCC SCADA. W przykładnie posługuję się WinCC v7.3. Za problem obrałem sobie wygenerowanie strony diagnostycznej I/O wyglądającą w taki sposób.

W przykładowej stronie mamy 66 obiektów I/O Filed, które mają podpięte unikalne zmienne oraz nadany wygląd (kolor tła, grubość ramki, wielkość czcionki, wyśrodkowanie w poziomie i pionie oraz położenie na ekranie). Mamy także 66 obiektów Static Text, które mają nadany wygląd (wielkość czcionki, wyśrodkowanie w poziomie i pionie oraz położenie na ekranie), unikalną nazwę oraz tekst. Możemy zrobić to ręcznie bądź napisać sobie makro w VBA. Dodatkowo gdybyśmy mieli więcej takich stron i więcej elementów, bardziej optymalne jest napisanie makra. Można zautomatyzować inne powtarzalne czynności tak jak poprawianie tekstu na wielu ekranach, hurtem dodanie elementu na innych ekranach. Ograniczeń nie ma. Na potrzeby artykułu przygotowałem coś prostego.

Otwieramy Graphics Designer.

Następnie uruchamiamy Visual Basic Editor. Nie zagłębiając się w techniczne aspekty opiszę tylko lewą stronę wyświetlanego okna co akurat jest bardzo istotne.

  1. GlobalTemplate – oznacza, że wszystkie skrypty napisane w VBA edytorze zostaną zapisane do „@GLOBAL.PDT”. Oznacza to dla użytkownika, że ten skrypt będzie dostępny już zawsze i w każdym projekcie. Czy nowo utworzonym, czy starym edytowanym przez nas w przyszłości, ale tylko na tym komputerze. Zostaje zapisane w katalogu z zainstalowanym WinCC.
  2. ProjectTemplate – oznacza, że wszystkie skrypty napisane w VBA edytorze zostaną zapisane do „@PROJECT.PDT”. Oznacza to dla użytkownika, że ten skrypt będzie dostępny już zawsze, ale tylko w tym projekcie, ale wszystkich „PDL-ach”, czyli we wszystkich naszych stworzonych ekranach. Zostaje zapisane w katalogu z obecnym projektem WinCC.
  3. VBA-dla-grafiki – oznacza, że wszystkie skrypty napisane w VBA edytorze zostaną zapisane w tym konkretnym „PDL-u”, czyli aktualnie otwartym ekranie procesowym. Oznacza to dla użytkownika, że ten skrypt będzie dostępny już zawsze.

Przed rozpoczęciem wspomnę, że Visual Basic for Applications (VBA) to język programowania oparty na Visual Basic (VB), zaimplementowany w aplikacjach pakietu Microsoft Office (przypis z Wikipedii). Dzięki temu w sieci możemy znaleźć wiele przykładów i kursów. W tym artykule zaprezentuję praktyczne zastosowanie języka VBA, nie będę opisywał składni języka, którą można znaleźć w sieci. Warto jednak powiedzieć, że kiedy zaczniemy pisać nazwę obiektu/klasy/deklaracji i klikniemy CTRL+Spacja dostajemy podpowiedź.

Pierwszym etapem będzie wstawienie elementu bez paramilitaryzacji.

  • Otwieramy nowe makro i je nazywamy nową funkcje Sub mul_obj()  jest to nazwanie i otwarcie nowego skryptu, musi być zamknięte End Sub.
  • Deklarujemy obiekt typu HMIIOFiled Dim objIOField As HMIIOField.
  • Deklarujemy zmienną obiektową Set objIOField = ActiveDocument.HMIObjects.AddHMIObject(„IO-Field”, „HMIIOField”).

Uruchamiamy skrypt przyciskiem F5 lub przyciskiem z ikonką zielonej strzałki. Utworzony został obiekt IOFiled

Uruchomimy skrypt, aby nadać mu pożądanych przez cech. Niech to będą: szerokość, wysokość oraz położenie w przestrzeni. Dodano linijki do kodu takie jak poniżej

With objIOField

.Top = 10

.Left = 10

.Width = 100

.Height = 50

End With

Po uruchomieniu skryptu został wygenerowany obiekt o zakładanych parametrach. Kolejnym etapem będzie modyfikacja skryptu tak aby hurtem stworzyć wiele obiektów poprzez wykorzystanie pętli.

Kod został zmodyfikowany o dodanie FOR, która jest odpowiedzialna za wygenerowanie 11 elementów w wierszach, przy okazji nadano im unikalne nazwy.

Następnie kod został został wzbogacony o kolejną pętlę FOR, aby wygenerować kolumny.

Po wygenerowaniu obiektów I/O_Filed w wierszach i kolumnach zmodyfikowano kod, aby nadać ostatecznego wyglądu obiektom. Dodatkowo zautomatyzujemy podpinanie zmiennych, które będą się nazywały Variable_1, Variable_2,…,Variable_n. Dodatkowo dodano linijki aby utworzyć obiekt Static Text. Kod napisany jest analogicznie jak przy tworzeniu pola I/O Filed.

Można się spotkać z problemem, że chcemy zmienić kolor tekstu, styl wypełnienia bądź kolor tła i mimo to, że zmienimy te parametry obiekt wygląda cały czas tak samo. W tym celu w parametrach obiektu należy wejść w zakładkę Effect i w Global Color Scheme wybrać No. W skrypcie za tą akcję odpowiedzialna jest linijka .GlobalColorScheme = 0.

Tło Static Text zostało ustawione na transparentne .FillStyle = 65536. Numer który odpowiada za styl wypełnienia możemy znaleźć w helpie, tak jak atrybuty do wszystkich parametrów.

Linijki podanie poniżej odpowiadają za podpięcie zmiennej do pola I/O. Zadeklarowano objIOField ,odwołano się do parametrów OutputValue, utworzono akcje dynamiczną do parametru Output Value. Jest to odwołanie bezpośrednie do zmiennej Variable_. Dodatkowo przy każdej pętli zastosowano inkrementację zmiennej x, która łączona jest z nazwą zmiennej. Poniżej mamy ustawienie interwału odświeżenia. CycleType = hmiVariableCycleType_2s.

Set objVariableTrigger = objIOField.OutputValue.CreateDynamic(hmiDynamicCreationTypeVariableDirect, „Variable_” & x)With objVariableTrigger.CycleType = hmiVariableCycleType_2sEnd With

Jak widać można bardzo przyśpieszyć sobie pracę z WinCC. W tym konkretnym przypadku zysk czasu jest może wątpliwy i szybciej zrobilibyśmy to ręcznie, niż pisząc makro. Jednak wielokrotnie stworzenie z głową makra pozwoli nam na zaoszczędzeniu ogromnej ilości pracy. Z własnego doświadczenia mogę powiedzieć, że makra pomocne były do poprawy „hurtem” ekranów procesowych z helpami. Aktualizację SCADy o nową funkcjonalność na wielu różnych maszynach, czy tworzeniem wielu bardzo podobnych ekranów procesowych. Można pójść o krok dalej aby standardowe ekrany generowały się na podstawie listy zmiennych ze sterownika. Jeśli spodoba się artykuł to z przyjemnością napiszę więcej, gdzie rozpatrzymy sobie inny problem. Poniżej zamieszczam kod końcowy razem z komentarzami.

Sub mul_obj() 'OTWARCIE MAKRA

Dim objIOField As HMIIOField 'DEKLARACJA ZMIENNEJ objIOField JAKO HMIIOField

Dim objSText As HMIStaticText 'DEKLARACJA ZMIENNEJ objSText JAKO HMIStaticText

Dim objVariableTrigger As HMIVariableTrigger 'DEKLARACJA ZMIENNEJ objVariableTriggerJ AKO HMIVariableTrigger

Dim x 'DEKLARACJA ZMIENNEJ x

x = 0 'USTAWIENIE WARTOŚCI POCZĄTKOWEJ

For j = 0 To 5 'OTWARCIE 1 PETLI KTORA GENERUJE KOLUMNY

For i = 0 To 10 'OTWARCIE 2 PENTLI KTORA GENERUJE WIERSZE

Set objIOField = ActiveDocument.HMIObjects.AddHMIObject("IO-Field" & i & j, "HMIIOField") 'DEKLARACJA ZMIENNEJ OBIEKTOWEJ (POLA I/O)

With objIOField 'ODWOŁANIE SIĘ DO OBIEKTU

.Top = 10 + (55 * i) 'USTAWIENIE ODLEGŁOŚCI OD GÓRY

.Left = 10 + (200 * j) 'USTAWIENIE ODLEGŁOŚCI OD LEWEJ STRONY

.Width = 100 'USTAWIENIE SZEROKOŚCI

.Height = 50 'USTAWIENIE WYSOKO

.AlignmentLeft = 1 'WYSRODKOWANIE TEKSTU W POZIOMIE (W HELPIE MOZNA ZNALESC JAKIE SA ARGUMENTY)

.AlignmentTop = 1 'WYSRODKOWANNIE TEKSTU W PIONIE

.FONTSIZE = 20 'ROZMIAR CZCIONKI

.GlobalColorScheme = 0 'WYLACZENIE GLOBALNEGO SCHEMATU KOLORYSTYCZNEGO

.BackColor = RGB(224, 224, 224) 'USTAWIENIE KOLORU TLA

End With 'ZAMKNIECIE DOWOLANIA DO OBIEKTU

Set objVariableTrigger = objIOField.OutputValue.CreateDynamic(hmiDynamicCreationTypeVariableDirect, "Variable_" & x) 'DEKLARACJA OBIEKTU AKCJI DYNAMICZNEJ

With objVariableTrigger 'ODWOLANIE DO OBIEKTU

.CycleType = hmiVariableCycleType_2s 'USTAWIENIE INTERWALU ODSWIERZENIA

End With

'PONIZEJ ANALOGICZNIE UTWORZONY I NADANE PARAMETROW ELEMENTOWI STATIC TEXT ANALOGICZNIE DO

'JAK TO ZOSTALO ZROBIONE DLA IOFILED

Set objSText = ActiveDocument.HMIObjects.AddHMIObject("Static_text_" & i & j, "HMIStaticText")

With objSText

.Text = "IO " & i & j

.Top = 10 + (55 * i)

.Left = 110 + (200 * j)

.Width = 100

.Height = 50

.AlignmentLeft = 1

.AlignmentTop = 1

.FONTSIZE = 20

.GlobalColorScheme = 0

.FillStyle = 65536

.BorderWidth = 0

End With

x = x + 1 'INKREMENTACJA ZMIENNEJ X

Next 'ZAMKNIECIE 2 PETLI

Next 'ZAMKNIECIE 1 PETLI

End Sub 'ZAKONCZENIE MAKRA

Artykuł został nagrodzony w Konkursie iAutomatyka w edycji Wrzesień 2018
Nagrodę MEGA Zestaw WAGO z Kluczem do szaf i przetwornikiem JUMPFLEX dostarcza firma WAGO.Więcej o konkursie: https://iautomatyka.pl/konkurs-iautomatyka/