Cel projektu:
Projekt przestawiający bardzo niestandardowe zastosowanie sterownika PLC, jednak umożliwiający dużo możliwości nauki i rozwoju dla początkujących programistów PLC. Jest to swego rodzaju gra, polegająca na przejściu po oczujnikowanych polach, w takiej sekwencji, by obracające się ramiona wyposażone w kontaktrony, nie wykryły pionu gracza. Praktycznie, to modernizacja, a raczej przeprojektowanie od podstaw projektu, który był w kole już od jakiegoś czasu. Wymagania, które postawiliśmy sobie przed sobą, to:
- Jak największe wykorzystanie starych części, o ile jest to możliwe.
- Estetyka projektu, dodanie oświetlenia, przyciągającej części wizualnej.
- Projekt z możliwością rozwoju i szybkiej zmiany koncepcji gry na tych samych komponentach w przyszłości.

Opis techniczny:
Sercem projektu jest wcześniej wspomniany sterownik PLC Siemens S7-1200 1214c DC/DC/DC, umożliwiający sterowanie czteroma osiami z podstawowymi funkcjami pozycjonowania. Jako, że w projekcie nie jest wymagana żadna interpolacja, lub zaawansowana kinematyka, jest to jak najbardziej wystarczający poziom sterownika PLC. On obsługuję całą logikę gry, wykrywanie pionu, ruch silnikami krokowymi poprzez sterowniki DM542, a także przekazywanie sygnałów logicznych do Arduino UNO.
Obsługą oświetlenia adresowalnego LED, a także microserw MG-90s, zajmuje się standardowe Arduino UNO. W trakcie projektu postanowiliśmy, w celach oszczędności i prostoty, nie komunikować płytki ze sterownikiem PLC w tradycyjnym tego słowa znaczeniu. Rozwiązaliśmy problem poprzez przekazywanie sygnałów ze sterownika PLC (24VDC) do Arduino poprzez płytkę przekaźnikową. Takie rozwiązanie jest wystarczające do tego problemu, choć zostawia duże pole na poprawę i rozwój w przyszłości. Jest to metoda zupełnie jednokierunkowa.
Same pola stworzone są ze standardowych czujników indukcyjnych, wykrywających metal na podstawie piona gracza poprzez plexiglass będący górną częścią obudowy. Na obrotowych ramionach zamocowano kontaktrony.

Opis programu:
Oprogramowanie zostało stworzone w TIA Portal V16. Składa się z kilku bloków programowych, jak i kilku obiektów technologicznych reprezentujących sterowane osie silników krokowych.

Osie zostały skonfigurowane w najprostszy możliwy sposób, jako osie obrotowe bez przekładni programowej. Ze względu na duże zajęcie górnej przestrzeni obudowy, w projekcie nie ma czujników, które umożliwiałyby automatyczne bazowanie się ramion. Jest to manualne zadanie operatora. Operator ma do dyspozycji 4 przyciski, którymi kontroluje w jakim stanie znajduje się gra, może przypisać nowe pozycje zerowe dla osi, a także dostaje wizualny feedback, jeśli gra jest w trybie konfiguracji poprzez pasek LED. Ze względu na ilość czynności potrzebnych do wykonania przez operatora przyciski są praktycznie multifunkcyjne z jednym przyciskiem przeznaczonym do przełączania funkcji. Z ciekawszą częścią programu jest sposób, w jaki silniki krokowe iterują po pozycjach. Obiekt technologiczny Command Table, o ile naprawdę przydatny do zdefiniowania konkretnej ścieżki ruchu dla osi, niestety nie spełnia funkcjonalności, która była nam potrzebna tj. ruchy absolutne osią z pozycji na pozycje z oczekiwaniem na kolejne wywołanie po skończeniu ruchu. W celu implementacji tego, zostały stworzone data bloki Position_Table, które przechowują w wartościach kątów, kolejne pozycje po których chcemy ruszać ramionami, a także iterator będący zwykłą zmienną int. Iterator jest inkrementowany po każdym poruszeniu pionem w polu, za które odpowiedzialna jest konkretna oś.

Ciekawym aspeketem jest też wymiana danych z Arduino poprzez sygnały I/O. W programie status w jakim ma znajdować się gra, jest określany przez wartość jednej zmiennej int. Następnie poprzez rzutowanie zmiennej int i odpowiednią obróbkę w funkcji Convert_INT_OUTBYTE, wartość zamieniana jest na bitową reprezentacje, która wystawiana jest na wyjściach sterownika. Dzięki temu, przy użyciu tylko 4 wyjść, możemy przekazać 16 stanów.
Co można zmienić?
W projekcie pozostała spora przestrzeń na usprawnienia, które są w czas pisania tego artukułu badane i rozważane. W planach jest zmiana samej koncepcji rozgrywki, na coś bardziej angażującego gracza, a także usprawnienia na drodze komunikacji PLC i Arduino. Ponadto, sprawdzane są możliwości sterowania takich elementów jak microserwo z samego PLC. Do tego zadania, nabyta została specjalna płytka sygnałowa wyjść szybkich SB1222 (6ES7222-1AD30-0XB0). Płytka ta wyróżnia się z pośród innych dostępnych modułów do tej serii sterownika, jako że pracuje na 5V DC. Jednakże warto zaznaczyć, iż niestety, pomimo fizycznego dołożenia 4 dodatkowych wyjść szybkich (200kHz), Siemens S7 1200 nadal może obsłużyć, jedynie 4 generatory PTO/PWM. Do obsługi microserwa wystarczy tak naprawdę częstotliwość 1000Hz, jako że wymagany sygnał PWM to sygnał o okresie 20 ms z wartościami wypełnienia pomiędzy 1ms a 2 ms. Innymi słowy, najszybsza zmiana musi zostać wykonana po 1 ms, stąd 1000 Hz. Niestety, na czas pisania artykułu, z testów wynika, że o ile można uzyskać zbliżone wartości sygnału bez sprzętowego generatora PTO/PWM, to jakość sygnału jest zależna od czasu cyklu PLC i niestabilna. Wykorzystanie Cyclic Interrupt pomaga, lecz nie wystarczająco by odpowiednio modulować wypełnienie. Do usprawnienia komunikacji z Arduino, dodany ma być Ethernet Shield, z chipem Wiznet W5100, i zaprogramowana komunikacja Modbus TCP/IP, gdzie sterownik PLC, pełnił będzie role Clienta (Mastera) systemu.

0 komentarzy