Do Projektu iAutomatyka dołączyli:

https://iautomatyka.pl/wp-content/uploads/2019/11/mapowanie-zmiennych-iautomatyka.jpg

Mapowanie adresów fizycznych IO na zmienne globalne na przykładzie środowiska Codesys


Ten artykuł będzie nieco inny od pozostałych, ponieważ dotyczy automatyki budynkowej. Jako programista PLC bardzo często spotykałem się następującym problemem:

Zamawiający udostępnia projekt systemu BMS, wraz ze schematami szaf automatyki, który trafia do prefabrykacji oraz do mnie jako programisty. Jako że większość systemów wykonuję na sterownikach Wago, to czym prędzej otwieram Codesys i tworzę ręcznie konfigurację IO, aby móc niezwłocznie przystąpić do kodowania.

Pewny, że projekt jest już ostateczny (bo do końca inwestycji zostało niewiele czasu), otwieram konfigurację magistrali K-BUS i nazywam poszczególne kanały IO, aby później łatwo się do nich odwoływać w programie.

Dalej pozostaje już pisanie poszczególnych algorytmów.


Po pewnym czasie, dostaję telefon że można „przeklikać” rozdzielnicę w zakładzie prefabrykacji, zanim wyruszy na obiekt. Zatem jadę sprawdzić poprawność obszycia szafy. Sprawdzam wszystkie wejścia mostkując ZUGi oraz klikam przekaźnikami, stycznikami. Wychodzi parę błędów, ale na miejscu z monterem je czym prędzej usuwamy.

Po niedługim czasie przygotowywania programów dostaję informację, że można jechać na obiekt uruchamiać system. Zafascynowany pakuję kask, kamizelkę, buty S3. Biorę swoją ulubioną walizkę narzędziową i cały plecak „przydasiów” – konwertery, access-point, router do zdalnego dostępu i inne gadżety, które pewnie każdy automatyk-programista posiada w swoim warsztacie.

Po wejściu na obiekt widzę szafę automatyki, którą koledzy elektrycy podłączali przez ostatni tydzień. Zapewniają że wszystko jest zgodnie z projektem. No to ruszam do uruchomień. Po 15 minutach daremnych prób, ładnie podłączona szafa wygląda już tak:

Miernik w dłoni, elektryk na drugim końcu budynku i sprawdzamy co się dzieje z przewodem „13S1” i dlaczego jest podłączony do zupełnie innego urządzenia niż miał być.

Okazuje się że koordynacja na budowie się trochę rozjechała i wyszła cała mas zmian. Teraz Awaria wentylatora jest podłączona pod zupełnie inny moduł DI, zaś zwrotne sygnały z wysterowania przepustnic VAV są na innych kanał modułu AI.

Pojawia się nieliche zdenerwowanie bo przecież programy już napisane i pięknie przypisane do IO. Trzeba pozmieniać nazwy kanałów w konfiguracji K-BUS w Codesys i stracić sporo czasu, którego już nie ma bo jutro są odbiory branży HVAC i obróbka powietrza musi działać zgodnie z założeniami projektowymi.

Po którejś takiej akcji zacząłem się głęboko zastanawiać, czy nie da się jakoś uniwersalnie napisać programów i dopiero po uruchomieniu zamapować wejścia/wyjścia?

Pisanie programu na zasadzie:

IF %IX22.0 THEN  (*awaria wentylatora*)

Nie za bardzo mi odpowiadało.

Zacząłem zatem grzebać w plikach, które generuje Codesys w momencie kompilacji nawet pustego projektu. No i jest! Plik ma nazwę: NazwaProjektuCodesys00002ed4r.ECI

Edytując ten plik w pierwszych liniach widać adresy fizyczne poszczególnych kanałów modułów IO i całą masę nie rozpoznanych znaków.

Jednak przewijając plik ku końcowi ukazuje się naszym oczom piękny kawałek XMLa, w którym widać konfigurację modułów IO wraz z fizycznymi adresami poszczególnych kanałów tych modułów.

Zatem wpadł mi do głowy pomysł aby napisać jakiś prosty program z GUI, który to wyciągnie tą konfigurację do jakiejś normalnej, edytowalnej formy.

Jako, że na studiach poznałem Qt to od razu zabrałem się za przypomnienie środowiska i podjęcie próby napisania programu.

Po kilku dniach pracy był już gotowy program, który to:

  • Daje możliwość wyboru pliku ECI;
  • Kopiuje go jako plik tymczasowy;
  • Usuwa z niego wszystko do momentu napotkania znacznika <configuration>;
  • Wyszukuje odpowiednich znaczników dotyczących modułów IO;
  • Zapisuje do pliku CSV odnalezione moduły wraz z adresami fizycznymi poszczególnych kanałów;

Być może zapytacie: ale po co kopiować plik jako temp, usuwać z niego te wszystkie chińskie znaczki. Czy nie można było od razu wyszukać znacznika <configuration>. A no właśnie nie, program się zawieszał. Może dlatego, że pliki ECI mają po kilkadziesiąt tysięcy linii tych właśnie chińskich znaczków. Rozwiązaniem problemu okazało się usunięcie wszystkiego do momentu napotkania znacznika konfiguracji. Możliwe, że wprawny programista C++ poradziłby sobie z tym inaczej, ale ja nie miałem czasu na szukanie innego rozwiązania czy też zlecanie napisania programu programiście.

W trakcie wykonywania wyżej wymienionych konwersji na górze okna widać postęp w postaci paska. Po odczytaniu wszystkich modułów i adresów fizycznych kanałów widać na liście część odczytanych parametrów:

Klikając przycisk Zapis do pliku, otwiera się standardowe okno wyboru lokalizacji wraz z podaniem nazwy pliku. Niestety program obsługuje jedynie plik CSV jako wyjściowy.

Jednak można go łatwo obrabiać w Excelu:

W pliku wyjściowym dostępny jest adres fizyczny danego kanału, nazwa kanału wyciągnięta z konfiguracji, następnie znak dwukropek, gdybyśmy chcieli ręcznie sklejać komórki w Excelu, oczywiście jest typ zmiennej a także wygenerowana nazwa według konwencji:

IOx_n, gdzie:

  • IO – moduł : DI, DO, AI, AO
  • X – kolejny numer modułu na magistrali K-Bus
  • N – kanał modułu

Co dalej z tym można zrobić. Ja postępuję tak:

W otrzymanym pliku CSV w kolejnych wolnych kolumnach dodaję komentarz, w którym zamieszczam opis danego sygnału z projektu, np.:

Jak widać z powyższego, mamy już gotową deklarację zmiennych. Tworzę wówczas nową listę zmiennych globalnych i wklejam skopiowane komórki z Excela.

Komentarze w Excelu kopiuje także przy kolumnie z fizycznym adresem:

I to już jest program mapujący fizyczne adresy na zmienne wcześniej zadeklarowane. Komórki te wklejam do programu MAPOWANIE_PRG.

Dalej w programach już wykorzystuję jedynie nazwy, np.: DO2_15 := TRUE itd. Jeśli przy uruchomieniach wyjdzie, że pod wejście/wyjście podłączone jest coś innego, to tylko zmieniam komentarz i podłączam w odpowiednie miejsce w programie.

Taki sposób się u mnie sprawdził i działa całkiem dobrze.

Program do Pobrania

A Wy drodzy czytelnicy w jaki sposób podchodzicie do nazywania fizycznych wejść modułów IO w Waszych projektach? Czy także korzystacie z mapowania adresów na zmienne globalne?

 

Artykuł został nagrodzony w Konkursie iAutomatyka – edycja Listopad 2019

Nagrodę Plecak sportowy + zestaw gadżetów dostarcza ambasador konkursu, firma Finder.



Utworzono: / Kategoria: , , ,

Reklama



PRZECZYTAJ RÓWNIEŻ



NAJNOWSZE PUBLIKACJE OD UŻYTKOWNIKÓW I FIRM

Reklama



POLECANE FIRMY I PRODUKTY
  • Nowe modułowe sterowniki programowalne PLC firmy Eaton umożliwiają producentom maszyn i systemów opracowywanie nowoczesnych koncepcji automatyki, zwłaszcza w połączeniu z systemem XN300 I/O i panelem dotykowym XV300. Modułowy sterownik zape...
  • Proficy Operations Hub produkcji GE Vernova (uprzednio GE Digital) jest wszechstronnym klientem webowym, agregującym i wizualizującym dane z różnych źródeł, dzięki czemu może stanowić jedno źródło wiarygodnej wiedzy o produkcji. Umożliwia b...
  • Nowoczesne dotykowe panele operatorskie HMI firmy WEINTEK Labs. – Bezpłatne oprogramowanie narzędziowe w pełnej wersji – Precyzyjne, dotykowe ekrany wyświetlające szczegółową grafikę – Obszerne biblioteki komponentów grafi...
  • Urządzenia firmy FATEK istnieją na rynku polskim od 2004 roku i stały się alternatywą dla już istniejących rozwiązań i urządzeń. Niezawodność, korzystna cena i możliwości sterowników PLC sprawiły, że zyskały one ogromne zainteresowanie prog...
  • Ten kurs zawiera podstawy z dziedziny serwomechanizmów. Składa się z pierwszego modułu wprowadzającego, pełnego kursu o serwomechanizmach. Mini kurs przeprowadzi Cię przez podstawowe zagadnienia związane z serwomechanizmami. Zaczniemy od sa...
  • RPI-1ZI-U24A, to przekaźnik  instalacyjny wytrzymujący maksymalny prąd załączania 120A w czasie 20ms. Przekaźnik ten dedykowany jest do załączania obwodów o wysokim prądzie początkowym, w szczególności do obwodów oświetleniowych, potwierdzo...