Cześć wszystkim!
Słowem wstępu,
jakiś czas temu pytałem tutaj o naukę programowania PLC w domu, sposoby programowania itp.,
teraz, korzystając z przymusowej kwarantanny postanowiłem stworzyć swój pierwszy projekt bazujący jedynie na podstawie wiedzy ogólnej z internetu i własnej dociekliwości. Co prawda jeden fragment został tak jak pewien Pan na youtube uczył, ale link wrzucę przy tym konkretnym fragmencie.
Program PLC i HMI został napisany w programie TIA Portal V15, a symulacja została wykonana dzięki programom PLC SIM V15, do symulacji sterownika Siemens S7-1200, oraz Factory I/O, w którym wykorzystałem animację i możliwość połączenia z PLC SIM.
Na końcu postu dodałem link do krótkiego filmiku prezentującego jak cały program działa.
Przebieg projektu krok po kroku:
Na samym początku pobrałem gotową templatkę pozwalającą połączyć
Factory I/O z PLC SIM, a następnie całym projektem w TIA Portal, cała instrukcja (bardzo prosta swoją drogą) jak to zrobić znajduję się na stronie Factory IO.
Następnie w programie Factory I/O utworzyłem nową scenę do której dodałem nasz zbiornik, skrzynkę, oraz używane później przyciski, po czym całość została podłączona do naszego sterownika.
Teraz mogłem przejść do tworzenia programu.
Pierwszym i głównym blokiem programowym PLC został System_Run, który nauczyłem się tworzyć dzięki użytkownikowi https://www.youtube.com/channel/UCWkyWCcJT9N4ihmtVC7kS5Q/featured
również layout skrzynki jest taki jak u tego Pana, ponieważ tak mi się po prostu bardzo spodobało, a plan na projekt miałem już na parę dni przed odnalezieniem tego kanału
Ponieważ była to jedyna rzecz której nie zrobiłem całkowicie samodzielnie, nie będę udostępniał kodu źródłowego do programu(może mi się jeszcze przyda ), a jedynie opisywał co dany blok robi i w jaki sposób.
Tak prezentują się wszystkie bloki programowe dla naszego sterownika, oraz kilka przykładowych zmiennych:
-
System_Run
Blok odpowiedzialny jest za przyciski Start/Stop/Reset/Emergency Stop.
Ma na celu uniemożliwienie wykonywania jakiejkolwiek czynności dopóki przycisk Emergency Stop jest wciśnięty (dodatkowo przycisk Stop mruga po wciśnięciu przycisku EStop, a nie po prostu świeci, tak jak w przypadku wciśnięcia przycisku Stop) Dopiero po zwolnieniu tego przycisku i wykonaniu instrukcji Reset, możliwe jest kontynuowanie pracy.
Cały program został stworzony tak, że w dowolnym momencie pracy można go wyłączyć zatrzymując wszystkie wykonywane czynności.
Ponadto przycisk Reset, na 3 sekundy blokuje możliwość ponownego włączenia systemu, aby umożliwić spokojny reset “mechaniczny”.
Kontroluje również przełączenie między trybem “Auto” i “Manual” -
Manual_Fill_&_Manual_Discharge
Blok do sterowania manualnego, który działa tylko wtedy gdy nasz system jest włączony i jest wybrany tryb sterowania Manualny.
Po wciśnięciu przycisku Fill otwiera maksymalnie zawór napełniający zbiornik, a po wciśnięciu przycisku Discharge otwiera maksymalnie zawór opróżniający.
Dodałem również zabezpieczenie przed ewentualnym wciśnięciem dwóch przycisków na raz, niestety jest to symulacja w komputerze i nie mam fizycznej możliwości wciśnięcia dwóch przycisków na raz. -
Auto_Fill_&_Auto_Discharge
Blok połączony z blokiem Tank_Level_Record.
Po przełączeniu w tryb Automatyczny, umożliwia napełnienie, lub opróżnienie zbiornika, w zależności od jego obecnego poziomu, do wartości zadanej, tj. 0%/25%/50%/75%/100%.
Program wykrywa obecny poziom zbiornika i zaczyna automatyczne opróżnianie lub napełnianie sprawdzając, która operacja teraz będzie stosowna.
Dążenie do zadanego poziomu sygnalizuje mrugająca lampka poziomu napełnienia zbiornika.
Tak samo jak w trybie automatycznym, dodane jest zabezpieczenie uniemożliwiające wprowadzanie programu w zakłopotanie i wciskanie 5 opcji na raz, ponieważ ta czynność jest wykonywana przez program i nie musimy już trzymać przycisku napełniania, byłem w stanie to pokazać.
Dodatkowo, ponieważ fizyka nawet w symulacjach jest bezlitosna, zawory w trybie auto są otwierane tylko na 50%, aby po zamknięciu zminimalizować “błąd pomiaru” i skoczyć czynność na faktycznie zadanym poziomie. (woda jest bardzo wzburzona przy maksymalnym przepływie i efekty mogą wychodzić fałszywe) -
Tank_Level_Record
Blok odpowiadający za sygnalizację obecnego poziomu napełnienia zbiornika na dwa sposoby.
Pierwszym z nich jet wyświetlacz cyfrowy który na bieżąco wskazuje zmieniający się poziom napełnienia zbiornika w %.
Drugi to lampki sygnalizujące przekroczenie progów odpowiednio 0%/25%/50%/75%/100%. -
Warnings_Function_Block i Warnings_Function_Block_DB
Są to bloki wykorzystane do sygnalizacji ostrzeżeń na panelu HMI, w odpowiednim momencie wysyłają odpowiedni sygnał, umożlwiając sygnalizację na panelu.
Teraz możemy przejść do krótkiej konfiguracji panelu HMI.
Wybrałem panel TP900 Comfort, zawsze lubiłem wygodę i nowoczesność, więc przyciski nie wchodzą w grę, a więc panel z serii Comfort, w pełni dotykowy.
Tak prezentują się Ekrany, templatki, skrypty i ich funkcję:
-
Home
Witający nas ekran wyświetlający w formie ostrzeżeń co obecnie dzieje się z naszym zbiornikiem. -
Control
Ekran uruchamiający skrypt Control_Panel_Bars który na bieżąco oblicza wartości przedstawione na screenie. No poza temperaturą która jest na sztywno, nie znalazłem w factory io czujnika temperatury
W dokumentacji Manual programu factory io znajdziemy wymiary zbiornika które pozwalają na następne obliczenie pojemność i reszty parametrów.
-
Auto_Control
Tutaj mamy możliwość sterowania automatycznego, działa to tak samo jak w przypadku sterowania przyciskami.
Widzimy również obecny poziom napełniania zbiornika.
-
Manual_Control
Nic innego jak odzwierciedlenie tego co przedtem.
Dodatkowo powstała templatka S-R-S w które znajdują się przyciski Stop,Reset,Start, nawet samodzielnie modelowane w blenderze, w raz z grafiką “pressed”
Został jeszcze ekran Show Time, ale po to zapraszam do filmiku.
(jakiekolwiek opóźnienia między np. wciśnięciem przycisku Fill a rozpoczęciem napełniania nie są spowodowane słabo zoptymalizowanym programem a zwyczajnie fizyką programu Factory IO, jako mały dowód może być np. to, że przy zadaniu wartości 25% zbiornik przestaje być napełniany na wartości 25%, anie 26 :p)
Dopiero się uczę tego wszystkiego, więc bez przeszkód się nie obejdzie i tutaj parę z nich.
Projekt nie skończył się tak jak chciałem, panel HMI miał właściwie pełnić rolę małego systemu SCADA, stąd też widoczny na pierwszym screenie z HMI skrypt
Excel_Table.
Skrypt zacząłem pisać i udało mi się dojść do momentu w którym codziennie tworzy on nowy folder z datą a w nim plik Excel (to również jest na filmie), domyślnie miała tam powstawać tabelka monitorująca godziny napełniania/opróżniania zbiornika oraz stan przed/po i sumę z końca dnia, niestety Pan minister ogłosił że maturki już tuż tuż i tą część muszę na razie odpuścić.
Nie da się również nie zauważyć, że lampki na panelu HMI nie mrugają tak jak te “fizyczne”.
Robiłem już co w mojej mocy próbując wskaźnikami dostać się do parametrów ekranu tak jak w C#, niestety na nic się to zdało i w internecie również nie znalazłem odpowiedniego dla mnie rozwiązania tego problemu, gdyby ktoś coś wiedział to będę wdzięczny
Zapraszam do obejrzenia krótkiego filmiku potwierdzającego, że ten wymysł faktycznie działa i dzięki wszystkim którzy się pofatygowali aż dotąd, z Automatyką wiążę przyszłość i stworzenie takiego mini projektu to dla mnie pewien kamień milowy, zobaczymy co dalej
EDIT: Film jest wrzucony ponownie bez dźwięku, okazuje się, że yt blokuje nawet filmy niepubliczne, a więc w tle oryginalnie leciało ACDC - Higway to Hell gdyby ktoś miał ochotę