\chapter{Sterowanie poziomem cieczy}

Automatyzacja sterowania poziomem cieczy wykonana będzie na sterowniku Siemens SIMATIC S7-200. W sterowniku zostaną zaimplementowane algorytmy sterowania dwu- i trójstawnego. 

\section{Sterownik SIMATIC S7-200}


\begin{figure}[!ht]
	\begin{center}
		\includegraphics[width=14cm]{img/plc_s7-200_overview}
		\caption{Szkic sterownika\cite{simatic_manual}}
		\label{plc_s7-200_overview}
	\end{center}
\end{figure}
Seria sterowników SIMATIC S7-200 jest rodziną urządzeń należących do tzw. grupy mikrosterowników. Ma ona zastosowanie w różnorodnych systemach automatyki. Programy dla sterowników z tej serii mogą zawierać logikę binarną, liczniki, funkcje czasowe, skomplikowane operacje matematyczne, a także obsługę komunikacji z innymi urządzeniami. Jednostki podstawowe sterowników nie zawierają modułów wejść ani wyjść analogowych (wyjątek stanowi \textit{CPU 224XP} posiadający 2 wejścia i 1 wyjście analogowe), zawierają jednak szybkie liczniki za pomocą których można odczytywać wartości analogowe.

Komunikacja komputera ze sterownikiem może odbywać się w dwojaki sposób. Pierwszy z nich (najpopularniejszy i zarazem ekonomiczny) to połączenie poprzez kabel PPI Multi-Master. Łączy on port komunikacyjny sterownika z portem szeregowym komputera (RS232). Rzadziej spotykanym rozwiązaniem jest użycie protokołu MPI, ponieważ wymaga ono zastosowania specjalnej karty rozszerzeń (interfejsu MPI) dla komputera PC.

Mikrosterowniki S7-200 umożliwiają także obsługę procesów za pomocą paneli wyświetlających np. \textit{TD 200} lub \textit{TP 070}.

\section{Oprogramowanie narzędziowe STEP 7-Micro/WIN}
Programowanie sterowników serii SIMATIC odbywa się za pomocą pakietu narzędziowego STEP. Dla serii mikrosterowników S7-200 została przygotowana specjalna wersja tej aplikacji o nazwie STEP 7-Micro/WIN. Minimalne wymagania sprzętowe potrzebne do wydajnej pracy:
\begin{itemize}
 \item system operacyjny Windows 2000 lub XP (do instalacji konieczne są uprawnienia administratora)
 \item co najmniej 100 MB wolnej przestrzeni dyskowej
 \item mysz
\end{itemize}

\begin{figure}[!ht]
	\begin{center}
		\includegraphics[height=7cm]{img/STEP7_instalacja_02}
		\caption{STEP 7-Micro/WIN}
		\label{STEP7_instalacja_02}
	\end{center}
\end{figure}

\subsection{Instalacja}

Aby zainstalować program STEP 7-Micro/WIN należy włożyć płytę instalacyjną do napędu CD. Kreator instalacji wystartuje automatycznie prosząc nas o wybór języka instalacji (rysunek \ref{STEP7_instalacja_01}).

\begin{figure}[!ht]
	\begin{center}
		\includegraphics[height=4cm]{img/STEP7_instalacja_01}
		\caption{Okno wyboru języka}
		\label{STEP7_instalacja_01}
	\end{center}
\end{figure}
	
Przed rozpoczęciem, instalator poprosi nas o zamknięcie wszystkich programów działających w ``tle'' oraz wyłączenie programów antywirusowych i firewalli, które mogły by przeszkodzić w procesie instalacji.
\begin{figure}[!ht]
	\begin{center}
		\includegraphics[height=9cm]{img/STEP7_instalacja_03}
		\caption{Okno Instalatora}
		\label{STEP7_instalacja_03}
	\end{center}
\end{figure}

Aby kontynuować należy przeczytać i zaakceptować licencję oprogramowania.
\begin{figure}[!ht]
	\begin{center}
		\includegraphics[height=9cm]{img/STEP7_instalacja_04}
		\caption{Akceptacja licencji}
		\label{STEP7_instalacja_04}
	\end{center}
\end{figure}

\begin{figure}[!ht]
Następnie zostaniemy poproszeni o wybór folderu docelowego.
	\begin{center}
		\includegraphics[height=9cm]{img/STEP7_instalacja_05}
		\caption{Wybór katalogu instalacji}
		\label{STEP7_instalacja_05}
	\end{center}
\end{figure}

\begin{figure}[!ht]
Rozpocznie się instalacja oprogramowania.
	\begin{center}
		\includegraphics[height=9cm]{img/STEP7_instalacja_08}
		\caption{Proces instalacji STEP 7-Micro/WIN}
		\label{STEP7_instalacja_08}
	\end{center}
\end{figure}

\begin{figure}[!ht]
Program zainstaluje także podstawowe sterowniki dostępu do urządzeń SIMATIC.
	\begin{center}
		\includegraphics[height=9cm]{img/STEP7_instalacja_09}
		\caption{Instalacja sterowników}
		\label{STEP7_instalacja_09}
	\end{center}
\end{figure}

\begin{figure}[!ht]
Po instalacji sterowników zostaniemy poproszeni o konfigurację interfejsu dostępowego do urządzeń. Z listy dostępnych wybieramy ``\textit{PC/PPI Cable(PPI)}'' i naciskamy przycisk \textbf{\textit{Properties...}}.
	\begin{center}
		\includegraphics[height=10cm]{img/STEP7_instalacja_10}
		\caption{Konfiguracja interfejsu PG/PC}
		\label{STEP7_instalacja_10}
	\end{center}
\end{figure}

\begin{figure}[!ht]
W zakładce \textbf{\textit{Local Connection}} dokonujemy wyboru portu, do którego podłączony jest kabel interfejsu RS232/PPI (najczęściej będzie to port \textbf{COM1}).
	\begin{center}
		\includegraphics[height=7cm]{img/STEP7_instalacja_11}
		\caption{Ustawienia połączenia PC/PPI}
		\label{STEP7_instalacja_11}
	\end{center}
\end{figure}

\begin{figure}[!ht]
po skonfigurowaniu interfejsu instalacja zostanie wznowiona.
	\begin{center}
		\includegraphics[height=9cm]{img/STEP7_instalacja_12}
		\caption{Finalizacja instalacji}
		\label{STEP7_instalacja_12}
	\end{center}
\end{figure}

\clearpage
Po zakończeniu instalator zasugeruje ponowne uruchomienie komputera (zalecane).
\begin{figure}[!h]
	\begin{center}
		\includegraphics[height=9cm]{img/STEP7_instalacja_13}
		\caption{Ponowne uruchomienie komputera}
		\label{STEP7_instalacja_13}
	\end{center}
\end{figure}


\clearpage
\section{Programowanie sterownika}
Znanych jest co najmniej 6 różnych języków programowania sterowników PLC (lista instrukcji, schemat stykowy, schemat funkcji, język przebiegu, tekst zhierarchizowany, graficzny edytor schematów funkcji), narzędzia programistyczne sterownika S7-200 umożliwiają programowanie w trzech z nich. Są to:
\begin{itemize}
 \item LAD (ang. Ladder diagram) czyli schemat stykowy (zwany drabinką) to najpopularniejszy język programowania sterowników PLC. Program wyświetlany jest w postaci graficznej, podobnej do elektrycznego schematu połączeń. Jego logika jest prosta nawet dla początkujących. Graficzna interpretacja jest intuicyjna i popularna na całym świecie. Logika programu zorganizowana jest w blokach zwanych sieciami\footnote{ang. Networks} 
 \item FBD (ang. Function block diagram) to schemat funkcji podobny do języka LAD, połączenia także są zorientowane, jednak tutaj bloki, z których buduje się program przedstawiają bramki logiczne a nie elementy elektryczne. Język ten jest wygodny do tworzenia diagramów przepływu.
 \item STL (ang. Statement list) zwany listą instrukcji jest zalecany tylko dla zaawansowanych programistów. Umożliwia pisanie programu jako zestaw niskopoziomowych instrukcji do wykonywanych przez sterownik (podobnie do assemblera). Jest on bardziej elastyczny od poprzednich dwóch i umożliwia rozwiązanie problemów na które tamte nie pozwalają. 
\end{itemize}

Program STEP 7-Micro/WIN pozwala na konwersję pomiędzy tymi językami, ale nie zawsze jest ona możliwa. 

Szczegółowe informacje na temat programowania sterowników można znaleźć w ich dokumentacji. Producenci często również udostępniają darmowe podręczniki umożliwiające zapoznanie się z najprostszymi funkcjami sterowników i przykładowymi programami. Angielska wersja instrukcji do sterowników S7-200 zamieszczona jest na dołączonej płycie CD w pliku \textit{$\backslash$dokumenty$\backslash$Siemens$\backslash$S7-200\_en.pdf} Polską wersję można nieodpłatnie otrzymać od lokalnego dystrybutora produktów SIMATIC.

Omawiane w tej części programy znajdują się na załączonej płycie CD w katalogu \textit{$\backslash$projekty$\backslash$S7-200}

\subsection{Tworzenie nowego projektu}
Instalator domyślnie powinien utworzyć skróty do programów narzędziowych na pulpicie (patrz rysunek \ref{STEP7_projekt_01}) oraz w menu start. Aby przystąpić do programowania uruchamiamy środowisko STEP 7-Micro/WIN.

\begin{figure}[!ht]
	\begin{center}
		\includegraphics[height=2cm]{img/STEP7_projekt_01}
		\caption{Ikona programu STEP 7-Micro/WIN}
		\label{STEP7_projekt_01}
	\end{center}
\end{figure}

\clearpage
Po uruchomieniu programu, domyślnie powinien zostać otwarty pusty projekt. Domyślnym językiem jest LAD.
\begin{figure}[!ht]
	\begin{center}
		\includegraphics[width=14cm]{img/STEP7_projekt_03}
		\caption{Pusty projekt}
		\label{STEP7_projekt_03}
	\end{center}
\end{figure}

Pierwszą czynnością jaką należy zrobić jest konfiguracja typu sterownika, w tym celu klikamy prawym klawiszem myszy na jednostkę centralną widoczną w drzewie projektu i z menu kontekstowego wybieramy opcję \textbf{\textit{Type...}}.
\begin{figure}[!ht]
	\begin{center}
		\includegraphics[height=2.5cm]{img/STEP7_projekt_04}
		\caption{Wybór typu sterownika}
		\label{STEP7_projekt_04}
	\end{center}
\end{figure}

W oknie konfiguracji wybieramy odpowiedni typ jednostki (patrz rysunek \ref{STEP7_projekt_05}).
\begin{figure}[!ht]
	\begin{center}
		\includegraphics[height=4cm]{img/STEP7_projekt_05}
		\caption{Typ i wersja sterownika}
		\label{STEP7_projekt_05}
	\end{center}
\end{figure}

\clearpage
Po zakończeniu konfiguracji należy zapisać projekt.
\begin{figure}[!ht]
	\begin{center}
	    \subfigure[Przycisk paska narzędzi]{\label{STEP7_projekt_06}\includegraphics[height=2.5cm]{img/STEP7_projekt_06}}
    	\subfigure[Menu \textbf{\textit{File}}]{\label{STEP7_projekt_07}\includegraphics[height=4cm]{img/STEP7_projekt_07}}
		\caption{Zapis projektu}
	\end{center}
\end{figure}

Domyślnie projekty zapisywane są w katalogu \textit{Projects} znajdującym się w folderze aplikacji (domyślnie: \textit{C\:$\backslash$Program Files$\backslash$Siemens$\backslash$STEP 7-MicroWIN V4.0$\backslash$}).
\begin{figure}[!ht]
		\begin{center}
		\includegraphics[height=6cm]{img/STEP7_projekt_08}
		\caption{Wybór ścieżki zapisu}
		\label{STEP7_projekt_08}
	\end{center}
\end{figure}

\clearpage
\subsection{Konfiguracja szybkiego licznika}

Gdy mamy już wstępnie skonfigurowany projekt możemy przystąpić do programowej konfiguracji urządzenia. Najpierw zajmiemy się konfiguracją szybkich liczników HSC\footnote{ang. High Speed Counter}. Możemy do tego wykorzystać kreator instrukcji\footnote{ang. Instruction Wizard...} dostępny z menu \textbf{\textit{Tools}} (patrz rysunek \ref{STEP7_projekt_hsc_01}).

Korzystając z tej opcji nie mamy możliwości skonfigurowania wszystkich parametrów. Dlatego w tym rozdziale opisana zostanie ręczna konfiguracja szybkich liczników.

\begin{figure}[!ht]
	\begin{center}
		\includegraphics[height=2cm]{img/STEP7_projekt_hsc_01}
		\caption{Kreator konfiguracji instrukcji}
		\label{STEP7_projekt_hsc_01}
	\end{center}
\end{figure}

Pierwszą czynnością jaką należy zrobić jest dodanie procedury (w domyślnie utworzonym projekcie powinna istnieć pusta procedura o nazwie \textbf{SBR\_0 (SBR0)} widoczna w drzewie projektu w gałęzi \textbf{\textit{Program Block}}). Zmieniamy jej nazwę (patrz rysunek \ref{STEP7_projekt_hsc_02}) na \textbf{\textit{HSC\_INIT}} - będzie to procedura inicjująca szybki licznik, wywoływana raz przy starcie sterownika\footnote{ang. First Scan}.

\begin{figure}[!ht]
	\begin{center}
		\includegraphics[height=5cm]{img/STEP7_projekt_hsc_02}
		\caption{Zmiana nazwy procedury}
		\label{STEP7_projekt_hsc_02}
	\end{center}
\end{figure}

Po tej czynności klikamy nazwę procedury dwukrotnie, zostanie ona otworzona w edytorze programu.


\clearpage
%\begin{figure}[!ht]
%	\begin{center}
%		\includegraphics[width=13cm]{img/STEP7_projekt_hsc_03}
%		\label{STEP7_projekt_hsc_03}
%	\end{center}
%\end{figure}

Pierwszą czynnością jaką musimy wykonać jest konfiguracja przerwania \textbf{\textit{INT\_0}} które będzie wyzwalane licznikiem \textit{\textbf{T32}}. W tym celu wstawiamy do programu styk otwarty i\- przypisujemy do niego bit systemowy \textit{\textbf{SM0.1}} (symbolizuje on pierwszy przebieg programu, tzw. \textit{First Scan} - dokładny wykaz bitów systemowych można znaleźć w dokumentacji sterownika, bądź w pomocy programu). Następnie z gałęzi \textbf{\textit{Interrupt}} drzewa projektu przeciągamy blok \textbf{ATCH}, konfiguruje on przerwanie - pierwsza wartość wejściowa definiuje, która procedura zostanie wywołana w wyniku przerwania (w tym przypadku \textbf{\textit{INT\_0}}). Druga wartość oznacza zdarzenie wyzwalające przerwanie (patrz tabela \ref{table:interrupts}). Na koniec przeciągamy blok \textbf{ENI}, którego wywołanie spowoduje włączenie obsługi przerwań w mikroprocesorze sterownika.

\begin{figure}[!ht]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_hsc_03}
		\includegraphics[width=13cm]{img/STEP7_projekt_hsc_04}
		\label{STEP7_projekt_hsc_04}
	\end{center}
\end{figure}

\begin{table}[!ht]
 \caption{Lista przerwań sterownika S7-200 (CPU 222)}
 \centering
 \begin{tabular}{r|l l}
 \hline\hline
 Przerwanie & & Opis \\ [0.5ex]
 \hline
 0 & I0.0 & Zbocze narastające \\
 1 & I0.0 & Zbocze opadające \\
 2 & I0.1 & Zbocze narastające \\
 3 & I0.1 & Zbocze opadające \\
 ... & & \\ 
 8 & Port 0 & Odbiór znaku \\ 
 9 & Port 0 & Zakończenie transmisji \\ 
 ... & & \\
 12 & HSC0 & CV=PV (wartość bieżąca = wartość ustalona) \\
 ... & & \\
 19 & PLS0 & PTO przerwanie zakończenia zliczania impulsów\\
 20 & PLS1 & PTO przerwanie zakończenia zliczania impulsów\\
 ... & & \\
 21 & Timer T32 & CT=CP wyzwala przerwanie \\
 22 & Timer T96 & CT=CP wyzwala przerwanie \\
 23 & Port 0 & Zakończenie odbioru wiadomości \\ 
 ... & & \\
 27 & HSC0 &  Zmiana kierunku\\
 28 & HSC0 &  Zewnętrzny reset\\
 \hline
 \end{tabular}
 \label{table:interrupts}
\end{table}

\clearpage
W drugiej sieci (\textbf{\textit{Network 2}}) tej samej procedury skonfigurujemy szczegółowe ustawienia licznika HSC0. Każdy szybki licznik posiada dwa rejestry:
\begin{itemize}
 \item \textbf{Sterujący} - za jego pomocą ustawia się parametry licznika (\textbf{\textit{SM37}} dla licznika HSC0).
 \item \textbf{Statusowy} - tylko do odczytu, zawiera informacje o stanie licznika jak np. kierunek zliczania czy informację o stanie wartości bieżącej względem wartości zadanej(\textbf{\textit{SM36}} dla licznika HSC0).
\end{itemize}
Konfigurację zaczynamy od wstawienia styku otwartego przypisanego do bitu systemowego \textbf{\textit{SM0.1}}. Którym uaktywniamy następujące instrukcje (bloki):
\begin{enumerate}
 \item \textbf{MOV\_B} (instrukcja przesunięcia bajtu) za jej pomocą zaprogramujemy ustawienia licznika (wpiszemy odpowiednią wartość do rejestru \textbf{\textit{SM37}}). Aby odblokować licznik, włączyć zapisywanie nowej wartości bieżącej i zadanej, ustawić kierunek zliczania w górę oraz ustawić wejścia reset i start jako aktywne w stanie wysokim należy do rejestru sterującego wpisać wartość \textbf{\textit{16\#F8}} (patrz rysunek \ref{STEP7_projekt_hsc_05}).
 \item \textbf{HDEF} konfigurujemy tryb licznika - ustawiamy licznik w trybie $0$ (szczegółowe informacje na temat trybów licznika znajdują się w pomocy programu oraz dokumentacji sterownika).
 \item \textbf{MOV\_DW} (instrukcja przesunięcia słowa) - ja jej pomocą wpisujemy do rejestru \textbf{\textit{SM38}} (nowa wartość bieżąca) wartość $0$ aby wyzerować licznik.
 \item \textbf{HSC} programuje licznik zgodnie z ustawionymi wartościami.
\end{enumerate}

\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_hsc_05}
		\caption{Konfiguracja szybkiego licznika}
		\label{STEP7_projekt_hsc_05}
	\end{center}
\end{figure}

\clearpage
Kolejną czynnością jest napisanie procedury przerwania. W tym celu otwieramy procedurę \textbf{\textit{INT\_0}} klikając dwukrotnie jej nazwę w drzewie projektu.
Operacje jakie musimy wykonać w tym podprogramie to:
\begin{enumerate}
 \item \textbf{MOV\_DW} - skopiowanie bieżącej wartości licznika (z obszaru \textbf{\textit{HC0}}) do pamięci sterownika \textbf{\textit{MD0}}
 \item \textbf{SUB\_DI} - odejmujemy od skopiowanej wartości (pomiar częstotliwości sygnału w standardzie $1 - 5 KHz$) $1000$ aby przeskalować ją do zakresu $ 0 \div 4000 $. 
 \item \textbf{MOV\_DW} - wpisujemy do licznika (obszaru \textbf{\textit{SM38}}) nową wartość bieżącą (zerujemy go).
 \item \textbf{MOV\_B} - wpisanie $16\#C0$ do rejestru sterującego (\textbf{\textit{SM37}}) wymusza odświeżenie wartości bieżącej oraz odblokowanie licznika.
 \item \textbf{HSC} - przeprogramujemy licznik w celu ustawienia nowej wartości bieżącej.
\end{enumerate}
 
\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_hsc_06}
		\label{STEP7_projekt_hsc_06}
	\end{center}
\end{figure}

 \clearpage
 Po skonfigurowaniu procedury przerwania możemy przystąpić do programowania głównej pętli programowej.
\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_hsc_07}
		\label{STEP7_projekt_hsc_07}
	\end{center}
\end{figure}

W pierwszej sieci (\textbf{\textit{Network 1}}) ustawiamy licznik \textbf{T32} tak, aby wywoływał przerwanie co 1 sekundę. Ponieważ licznik ten ma rozdzielczość $1 ms$ jego nastawa powinna wynosić $1000$ ($ 1 ms \cdot 1000 = 1 s$). Szczegóły konfiguracji przedstawia rysunek \ref{STEP7_projekt_hsc_08}. Więcej informacji o trybach pracy i ustawieniach liczników można znaleźć w dokumentacji sterownika i pomocy programu.
\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_hsc_08}
		\label{STEP7_projekt_hsc_08}
	\end{center}
\end{figure}

W drugiej sieci (\textbf{\textit{Network 2}}) wstawiamy procedurę inicjującą tak, aby wykonywana była tylko w pierwszym przebiegu programu - wyzwalamy ją stykiem otwartym bitu systemowego \textbf{\textit{SM0.1}}.
\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_hsc_09}
		\label{STEP7_projekt_hsc_09}
	\end{center}
\end{figure}

Utworzony program zapisujemy - posłuży on nam jako projekt wyjściowy do programowania sterowania dwu- i trójstanowego.

\clearpage
\subsection{Implementacja algorytmu sterowania dwustawnego}
\label{sec:2st}
Dla ułatwienia zrozumienia programu w poniższej tabeli podano listę obszarów pamięci procesora wraz z przypisanymi do nich wartościami procesowymi i zmiennymi pośrednimi. Sterowanie następuje poprzez załączenie wyjścia binarnego $Q0.0$. 
\begin{table}[!ht]
 \caption{Wykaz zmiennych przechowywanych w pamięci procesora}
 \centering
 \begin{tabular}{r|l}
 \hline\hline
 Obszar pamięci & Opis zmiennej \\ [0.5ex]
 \hline
 MD0 & Zmienna procesowa ($PV$) \\ 
 MD1 & Wartość zadana ($SP$) \\
 MD2 & Histereza ($H$)\\
 MD3 & $ \frac{H}{2}$ \textit{(zmienna pośrednia)}\\
 MD4 & $ - \frac{H}{2}$ \textit{(zmienna pośrednia)}\\
 MD5 & Uchyb regulacji ($ E = SP - PV $) \textit{(zmienna pośrednia)}\\
 \hline
 \end{tabular}
 \label{table:2st}
\end{table}

Do stworzonego uprzednio projektu dodajemy procedurę, która będzie zawierać domyślne nastawy regulatora wczytywane przy uruchomieniu sterownika.
\begin{figure}[!h]
	\begin{center}
		\includegraphics[height=3cm]{img/STEP7_projekt_2st_01}
		\caption{Wstawienie podprogramu}
		\label{STEP7_projekt_2st_01}
	\end{center}
\end{figure}

Zmieniamy jej nazwę na \textbf{LOAD\_DEFAULTS}.
\begin{figure}[!h]
	\begin{center}
		\includegraphics[height=2cm]{img/STEP7_projekt_2st_02}
		\caption{Zmiana nazwy procedury}
		\label{STEP7_projekt_2st_02}
	\end{center}
\end{figure}

\clearpage
Wartości domyślne ustawiamy za pomocą bloków \textbf{MOV\_DW}. 
\begin{enumerate}
 \item do \textbf{\textit{MD1}} wpisujemy $2000$ (domyślna wartość zadana  - $50\%$ zakresu)
 \item do \textbf{\textit{MD2}} wpisujemy $250$ (domyślna histereza - $6.25\%$ zakresu)
\end{enumerate}
\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_2st_03}
		\label{STEP7_projekt_2st_03}
	\end{center}
\end{figure}

Gotową procedurę umieszczamy ją w drugiej sieci (\textbf{\textit{Network 2}}) programu głównego (\textbf{\textit{MAIN}}) równolegle do procedury \textbf{HSC\_INIT}
\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_2st_04}
		\label{STEP7_projekt_2st_04}
	\end{center}
\end{figure}

Korzystając z instrukcji \textbf{DIV\_DI} (operacja dzielenia), \textbf{INV\_DV} (inwersja bitów
 - w kodowaniu U2 odpowiada zmianie znaku) oraz \textbf{SUB\_DI} (operacja odejmowania) obliczamy zmienne pośrednie. (patrz tabela \ref{table:2st})
\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_2st_05}
		\label{STEP7_projekt_2st_05}
	\end{center}
\end{figure}

\clearpage
Programujemy warunek załączenia: jeżeli $ E > \frac{H}{2} $ to włącz wyjście $ Q0.0 $. Dodatkowo, gdy warunek jest spełniony świeci się lampka podłączona do wyjścia $ Q0.3 $
\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_2st_06}
		\label{STEP7_projekt_2st_06}
	\end{center}
\end{figure}

Programujemy warunek załączenia: jeżeli $ E < -\frac{H}{2} $ to wyłącz wyjście $ Q0.0 $. Dodatkowo, gdy warunek jest spełniony świeci się lampka podłączona do wyjścia $ Q0.2 $
\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_2st_07}
		\label{STEP7_projekt_2st_07}
	\end{center}
\end{figure}

Jeżeli uchyb znajduje się w obszarze histerezy ( $-\frac{H}{2} < E  < \frac{H}{2}$ ) świeci się lampka podłączona do wyjścia $ Q0.1 $
\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_2st_08}
		\label{STEP7_projekt_2st_08}
	\end{center}
\end{figure}


\clearpage
\subsection{Implementacja algorytmu sterowania trójstawnego}
Dla ułatwienia zrozumienia programu w poniższej tabeli podano listę obszarów pamięci procesora wraz z przypisanymi do nich wartościami procesowymi i zmiennymi pośrednimi. Sterowanie następuje poprzez załączenie wyjść $Q0.0$ (stan $+1$) oraz $Q0.0$ (stan $-1$)
\begin{table}[!h]
 \caption{Wykaz zmiennych przechowywanych w pamięci procesora}
 \centering
 \begin{tabular}{r|l}
 \hline\hline
 Obszar pamięci & Opis zmiennej \\ [0.5ex]
 \hline
 MD0 & Zmienna procesowa ($PV$) \\ 
 MD1 & Wartość zadana ($SP$) \\
 MD2 & Obszar nieczułości ($N$)\\
 MD3 & Histereza ($H$)\\
 MD4 & Uchyb regulacji ($ E = SP - PV $) \\
 MD10 & $ \frac{N}{2} $ \\
 MD11 & $ -\frac{N}{2} $ \\
 MD12 & $ \frac{H}{2} $ \\
 MD16 & $  \frac{N}{2} + \frac{H}{2}$ \\
 MD17 & $  \frac{N}{2} - \frac{H}{2}$ \\
 MD18 & $ -\frac{N}{2} + \frac{H}{2}$ \\
 MD19 & $ -\frac{N}{2} - \frac{H}{2}$ \\
 \hline
 \end{tabular}
 \label{table:3st}
\end{table}

Zanim przystąpimy do zaprogramowania sterowania trójstawnego musimy otworzyć projekt ze wstępnie skonfigurowanym licznikiem \textbf{\textit{HSC0}}
\begin{figure}[!h]
	\begin{center}
		\includegraphics[height=2cm]{img/STEP7_projekt_3st_01}
		\label{STEP7_projekt_3st_01}
		\caption{Otwarcie projektu}
	\end{center}
\end{figure}

\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=10cm]{img/STEP7_projekt_3st_02}
		\caption{wybór projektu}
		\label{STEP7_projekt_3st_02}
	\end{center}
\end{figure}

Podobnie jak w poprzednim przypadku wstawiamy procedurę z wartościami domyślnymi. Nazywamy ją \textbf{\textit{LOAD\_DEFAULTS}}.
\begin{figure}[!h]
	\begin{center}
		\includegraphics[height=5cm]{img/STEP7_projekt_3st_03}
		\caption{Wstawienie procedury}
		\label{STEP7_projekt_3st_03}
	\end{center}
\end{figure}

Wartości domyślne ustawiamy za pomocą bloków \textbf{MOV\_DW}. 
\begin{enumerate}
 \item do \textbf{\textit{MD1}} wpisujemy $2000$ (domyślna nastawa - $50\%$ zakresu)
 \item do \textbf{\textit{MD2}} wpisujemy $400$ (domyślna strefa nieczułości - $10\%$ zakresu)
 \item do \textbf{\textit{MD3}} wpisujemy $200$ (domyślna histereza - $5\%$ zakresu)
\end{enumerate}
\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_3st_04}
		\label{STEP7_projekt_3st_04}
	\end{center}
\end{figure}

\clearpage
Gotową procedurę umieszczamy w drugiej sieci (\textbf{\textit{Network 2}}) programu głównego (\textbf{\textit{MAIN}}) równolegle do procedury \textbf{HSC\_INIT}
\begin{figure}[!h]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_3st_05}
		\label{STEP7_projekt_3st_05}
	\end{center}
\end{figure}

Dalej program wygląda analogicznie jak w przypadku regulacji dwustawnej. Najpierw wyznaczamy uchyb wartości regulowanej.
\begin{figure}[!ht]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_3st_06}
		\label{STEP7_projekt_3st_06}
	\end{center}
\end{figure}

Wyznaczamy wartości pośrednie.
\begin{figure}[!ht]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_3st_07}
		\label{STEP7_projekt_3st_07}
	\end{center}
\end{figure}

\clearpage
Wyznaczamy wartości graniczne.
\begin{figure}[!ht]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_3st_08}
		\label{STEP7_projekt_3st_08}
	\end{center}
\end{figure}

Programujemy warunki załączenia/wyłączenia.
\begin{figure}[!ht]
	\begin{center}
		\includegraphics[width=13cm]{img/STEP7_projekt_3st_09}
		\label{STEP7_projekt_3st_09}
	\end{center}
\end{figure}





