Do Projektu iAutomatyka dołączyli:

https://iautomatyka.pl/wp-content/uploads/2020/12/10-clear-chessboard-1.png

Program do gry w szachy na sterowniku i panelu Allen-Bradley

autor: JacekWasilPLC.

Projekt został zrealizowany przy użyciu sterownika Allen-Bradley 5069-L306ERMS2 oraz panelu HMI PanelView 5310.

Założeniem projektu było napisanie oprogramowania, które umożliwi grę w szachy na fizycznym panelu HMI. Kod programu miał zawierać w sobie logikę zezwalająca na wykonywanie ruchów zgodnie z zasadami gry w szachy.

Oprogramowanie zostało napisane w języku Structured text przy użyciu środowiska Studio5000 natomiast wizualizacja została stworzona przy użyciu View Designer. Cały program  zawarł się w 1600 liniach kodu.

Program miał umożliwić wykonanie wszystkich legalnych (poprawnych) posunięć, włączając w to roszadę, bicie w przelocie czy promocję pionka na jedną z czterech figur w momencie dotarcia do przeciwległego końca planszy.

2. Zasada działania programu

Program został napisany przy użyciu dwóch bloków. W głównym bloku została zawarta cała logika programu która wyniosła 1100 linijek kodu. W drugim bloku została zawarta funkcja do sprawdzania, czy dany król znajduje się pod szachem.

2.1.  Sposób wyświetlania obiektów i przemieszczania ich na HMI

  • Cała wizualizacja została zrealizowana przy użyciu View Designer. Pole szachownicy zostało umieszczone jako stały element wizualizacji bez możliwości przemieszczania. Obraz szachownicy

Na każdym z pól szachownicy został umieszczony przeźroczysty przycisk dzięki którym jesteśmy w stanie wykryć miejsce dotyku panelu HMI. Pozycje tych przycisków zostały rozmieszczone przy użyciu PLC, który rozmieszcza je używając pętli ‘’FOR’’. Dzięki możliwości pozycjonowania obiektów z poziomu PLC, zarówno wyżej wspomniane przyciski jak i figury są rozmieszczane na planszy przy wciśnięciu przycisku reset bądź też przy włączeniu PLC w tryb RUN (przy użyciu flagi first scan). Pozycje figur są określone zmienną typu ‘’INT’’, która jest wpisywane w pozycję figury względem osi X oraz Y. Szachownica została utworzona jako tablica dwuwymiarowa 8 × 8. Poniżej znajduje się przykładowy kod do rozmieszczenia wszystkich 64 niewidocznych przycisków na szachownicy. Przed każdym wywołaniem funkcji zmienne są inicjalizowane jako 0. W celu przemieszczenia figury, PLC wysyła pozycję względem osi X i Y na jaką dana figura ma się przemieścić. Każda pozycja pola szachownicy jest przesunięta względem siebie o 47 jednostek.

2.2. Realizacja zakresu ruchu i wizualizacja figur

Po rozmieszczeniu figur można zacząć grę. W lewej górnej części jest wyświetlona informacja który z graczy ma teraz możliwość ruchu. Po dotknięciu figury zostaje ona podświetlona na fioletowo a jej możliwy zakres ruchu wyświetla się w postaci żółtych okręgów.

Dane okręgi są wcześniej wspomnianymi niewidocznymi przyciskami rozmieszczonymi na całej szachownicy. Dzięki odpowiedniej manipulacji ich przeźroczystością oraz kolorem z poziomu PLC jesteśmy w stanie użyć ich do wyświetlania zasięgu i zaznaczeń dla danej figury. Poniżej jest przedstawiona funkcja realizująca zaznaczenie figury.

Jeśli aktualnie jest kolej ruchu dla białych figur, pętla sprawdza status 64 pól. Jeżeli jedno z pól zostanie dotknięte oraz będzie znajdować się na nim biała figura to do jej struktury zostaje wpisany bit z informacją, że została ona wybrana. W momencie dotknięcia innej figury tego samego koloru, funkcja ta odznacza pierwszą zaznaczona i zaznacza kolejną. Jeśli zaznaczymy figurę, a następnie dotkniemy jednego z żółtych pól to dany obiekt zostanie umieszczony w pozycji równej pozycji pola, którego dotknęliśmy względem  X i Y.

Zakresy ruchów dla każdej z figur realizuje jedna funkcja. Jest to najbardziej rozbudowana funkcja w całym programie. Funkcja jest realizowana przy pomocy operatora ‘’CASE”, który sprawdza typ zaznaczonej figury i zależnie od niego przelicza możliwości ruchu. Dana funkcja zajmuje ok 30% całego napisanego programu. Dla każdej figury została napisana oddzielna logika, sprawdzająca, czy dana figura ma możliwość przemieszczenia się na dane pole. Pola, które są możliwe dla ruchu danej figury są zapisywane w pamięci PLC i na koniec pętli są przenoszone na wyjścia bloku, który odpowiednio ustawia kolor pól na żółty i zmienia ich przeźroczystość. Ta funkcja jest aktywowana przy każdej zmianie figury, więc po zmianie figury zakres pól uaktualnia się do danej wybranej figury i jej typu.

2.3. Szachowanie

  • Funkcja szachowania została zrealizowana na podstawie funkcji zakresu ruchów dla danej figury.

Po każdym ruchu dana funkcja jest wywoływana i sprawdza położenie każdej z figur, by również realizować tzw. szach z odsłony, gdzie ruch jednej z figur może spowodować szach przez inną figurę, która nie zmieniła swojej pozycji. Dana funkcja realizuje także wyświetlanie informacji o szachu, który z graczy zaszachował przeciwnika oraz jaką figurą. Wszystko jest realizowane w funkcji szachowania, która obejmuje ok. 500 linijek kodu.

2.4 Bicie figur

  • Gdy zaznaczymy daną figurę to jesteśmy w stanie zobaczyć jej zakres ruchu. Gdy figura przeciwnika znajduje się w zasięgu ruchu to zostaje ona również podświetlona kolorem żółtym.

W momencie dotknięcia figury przeciwnika będącej w zakresie ataku, nasza figura zajmuje miejsce wskazane przez gracza. Figura przeciwnika zostaje usunięta z pola gry.

2.5 Roszada i bicie w przelocie

  • W programie zostały zawarte także funkcje realizujące tzw. roszadę czy bicie w przelocie.

Roszada jest częścią funkcji odpowiedzialnej za poruszanie figur oraz jest uwzględniona w funkcji zakresu ruchów dla króla. Jeżeli warunki dla roszady są spełnione to król ma możliwość przemieszczenia się o dwa miejsca co powoduje jednocześnie przemieszczenie wieży zgodnie z zasadami roszady. Bicie w przelocie jest realizowane jako rozszerzona funkcja bicia figur. Dla bicia w przelocie sprawdzamy status ostatniego ruchu przeciwnika, by móc się przemieścić zgodnie z zasadami szachowymi. Funkcja bicia również musiała realizować usuwanie figury zbitej z pola szachownicy. Każde inne bicie jest realizowane poprzez sprawdzenie warunków, czy po ruchu danej figury jej pozycja jest równa pozycji figury przeciwnika, przez co łatwiej usuwać zbite figury z pola.

2.6. Zmiana pionka w figurę i zakres ruchu króla

  • Gdy jeden z pionów dotrze do przeciwległego końca szachownicy pojawią się cztery ikony z różnymi figurami do wyboru. Dokonujemy wówczas promocji piona na jedną z tych figur. Poniżej została przedstawiona funkcja obsługująca zamianę piona na figurę.

Po dotknięciu jednej z czterech ikon, dana figura zostaje umieszczony w miejscu piona dzięki przepisaniu struktury piona (typ, kolor, pozycja X i Y) do figury wybranej przez gracza. Po zmianie w figurę, pion zostaje usunięty z planszy.

W zakresie ruchu króla, został uwzględniony warunek braku możliwości ruchu, który spowodowałby znalezienie się dwóch króli obok siebie.

Podsumowanie projektu

W momencie rozpoczynania pracy, koncepcja nie zakładała aż tak rozbudowanej logiki programu, przez co większość kodu została zawarta tylko w jednym bloku. Artykuł miał na celu przedstawienie projektu, który będzie zrozumiały dla większej liczby czytelników, przez co funkcje obliczeniowe były omawiane pobieżnie. Logika i ruchy zostały przedstawione przy pomocy obrazków ukazujących zachowania poszczególnych funkcji podczas gry. Poniżej zamieszczony jest link z krótkim filmem obrazującym działanie gry na fizycznym panelu HMI: https://www.dropbox.com/s/dwrcsu4yvjs7r8z/chess.mp4?dl=0

Ocena artykułu zgłoszonego do Konkursu iAutomatyka 4.0 pisz artykuły, zdobywaj punkty, wymieniaj je na nagrody.

Kryterium 1 2 3 4 5 6 7 8 9 10
Punkty (0-2) 2 2 2 2 1 1 1 1 1 2
Suma zdobytych punktów: 15




Utworzono: / Kategoria: , ,

Reklama



PRZECZYTAJ RÓWNIEŻ



NAJNOWSZE PUBLIKACJE OD UŻYTKOWNIKÓW I FIRM

Reklama



POLECANE FIRMY I PRODUKTY