[PRZYKŁAD] Obsługa czujnika poziomu cieczy na sterowniku SIMATIC S7-1200 i zestawie symulacyjnym KA-S71200-IO-Simulator
Połączenie elementów projektu
Zestaw symulacyjny należy umieścić w złączach wejściowych i wyjściowych sterownika. Natomiast wyprowadzenia z obudowy sensora są dość intuicyjne: czerwony przewód to zasilanie, czarny – masa, a biały to sygnał z dzielnika napięcia.
Czujnik podłączymy do sterownika jako zewnętrzny sensor, do portu analogowego A.IN0. W tym celu należy podłączyć przewód biały do portu Ext 1 zestawu, a masę do portu M. Według dokumentacji czujnik powinien wytrzymać napięcie zasilania 10 V. Tym niemniej, ponieważ nie znalazłem żadnych informacji o elektronice wbudowanej w obudowę, dla bezpieczeństwa użyję jednak zasilania 5 V.
Połączenie sensora ze sterownikiem zaprezentowano na fotografii oraz w tabeli poniżej.
Tab. 1. Połączenie czujnika z zestawem KA-S71200-IO-Simulator
Rys. 6. Czujnik poziomu cieczy eTape połączony ze sterownikiem SIMATIC S7-1200
Aby doprowadzić sygnał z sensora do wejścia analogowego należy na płytce wejściowej ustawić przełącznik SEL AI.0 w pozycję Ext1.
Rys. 7. Przełącznik SEL AI.0 na płytce wejściowej w pozycji Ext1
Kod przykładu
Sterownik programuję w środowisku TIA Portal w wersji 15.1. Informacje o wstępnej konfiguracji projektu znajdziesz w drugim odcinku naszego kursu Sterowniki S7-1200 w praktyce, w którym opisaliśmy sposób nawiązania połączenia PC<>Sterownik PLC, a także rejestrację sterownika w oprogramowaniu.
Z kolei sposób włączenia, podstawy konfiguracji oraz demonstrację działania serwera Web wbudowanego w sterownik SIMATIC S7-1200 znajdziesz w jednym z kolejnych odcinków kursu.
Zachęcamy oczywiście do przeczytania całego kursu sterowników SIMATIC S7-1200 przygotowanego przez redakcję.
Projekt ma za zadanie odczytać sygnał z czujnika oraz obliczyć poziom cieczy w calach i centymetrach. Dane będą wyświetlane na prostej stronie www. Ponadto, po spadku cieczy poniżej 10 cm włączy się jedno z wyjść cyfrowych, które wyłączy się po podniesieniu poziomu cieczy ponad 15 cm. Ma to emulować sterowanie zaworem w systemie utrzymującym poziom cieczy w naczyniu na stałym poziomie.
W pierwszej kolejności pobieramy dane z przetwornika ADC i uśredniamy pomiar za pomocą funkcji LGF_FloatingAverage ze standardowej biblioteki Library of Global Functions firmy Siemens. Biblioteka w wersji na TIA Portal 15.1 nie jest już dostępna na stronie producenta, a więc dołączyłem ją do plików projektu, w folderze UserFiles. Pełen kod projektu jest dostępny w sekcji „Do pobrania”. Następnie otrzymany wynik jest przeliczany na napięcie w woltach.
Rys. 8. Kod uśredniający pomiar i przeliczający wartość z przetwornika na napięcie
Przeliczenie na poziom cieczy – implementacja wzorów
Następnie projekt przelicza napięcie na rezystancję czujnika. W tej sekcji zaimplementowano wzór z wcześniejszej części artykułu.
Rys. 9. Kod przeliczający napięcie na rezystancję sensora
Potem projekt przelicza rezystancję na poziom cieczy w calach. Tu również nastąpiła jedynie implementacja wzoru podanego wyżej.
Rys. 9. Kod przeliczający rezystancję na poziom cieczy w calach
W dalszej części następuje przeliczenie wysokości w calach na wysokość w centymetrach.
Rys. 10. Kod przeliczający wysokość w calach na wartość w centymetrach
Obsługa wyjścia
Kolejna sekcja obsługuje wyjście cyfrowe. Jak widać wyjście włącza się po spadku wysokości cieczy poniżej 5 cm, a wyłącza po wzroście poziomu powyżej 10 cm.
Rys. 11. Obsługa wyjścia cyfrowego OUT0
Zaokrąglanie wartości i hanger strony www
W ostatnim kroku ustawiamy blok www, który umożliwia uruchomienie na sterowniku własnej strony. Dodatkowo dwa bloki Calculate posłużą do zaokrąglenia danych o poziomie cieczy, aby można było łatwiej wyświetlić je na stronie.
Rys. 12. Kod do obsługi strony www
Strona www
Strona na serwerze stosuje odświeżanie za pomocą skryptu JavaScript z krótkim czasem odświeżania rzędu 20 ms. Ten sposób wyświetlania danych jest zaadaptowaniem jednego z przykładów dostępnych na stronie Siemens. Podobnie sposób ten wykorzystałem w jednym z poprzednich artykułów pt. [PROJEKT] Waga elektroniczna na sterowniku SIMATIC S7-1200, gdzie również znajduje się szerszy opis tego sposobu wyświetlania danych.
Plik index.html wygląda następująco:
Listing 1. Kod pliku index.html strony wyświetlającej dane z czujnika poziomu cieczy
<html> <!-- AWP_In_Variable Name='"Data_block_1".wartoscCalZaokr' --> <!-- AWP_In_Variable Name='"Data_block_1".wartoscCmZaokr' --> <head> <meta charset="UTF-8"> <title>Pomiar poziomu cieczy na SIMATIC S7-1200</title> </head> <body> <h3>Wysokość cieczy w calach: <span id="VarId1">VALUE</span>" <h3>Wysokość cieczy w centymetrach: <span id="VarId2">VALUE</span> cm <iframe src="Update_Page.html" style="display:none;"/></h3> </body> </html>
Na początku kodu znajdują się linie AWP, w których niejako importujemy zmienne, które strona www może odczytać lub zapisać. Następnie mamy tytuł strony oraz opis wyświetlanych wyników. Wyniki są zmiennymi aktualizowanymi w pliku Update_Page.html.
Plik Update_Page.html to zmodyfikowana wersja z przytoczonego przykładu ze strony Siemens. Zawiera on tabelę, w której można przypisać zmienną z projektu w TIA Portal do nazw używanych w kodzie strony, a także czas odświeżania strony. W tym przykładzie kod co 20 ms odświeży zmienne wartoscCalZaokr oraz wartoscCmZaokr zawierającą zaokrągloną wysokość cieczy w calach i centymetrach.
Listing 2. Modyfikacja pliku Update_Page.html
<table border="1"> <tr> <td> Update time in milliseconds </td> </tr> <tr> <td id="updateInterval"> 20 </td> </tr> </table> <br/> <table id="singleVariablesTable" border="1"> <tr> <td> AWP-Command to read variable </td> <td> ID of the element of the main page which should be updated </td> </tr> <tr> <td> :="Data_block_1".wartoscCalZaokr: </td> <td> VarId1 </td> </tr> <tr> <td> :="Data_block_1".wartoscCmZaokr: </td> <td> VarId2 </td> </tr> </table>
Projekt można używać do rozmaitych zastosowań wymagających kontroli poziomu cieczy – od małych aplikacji w domowych akwariach, aż po bardziej skomplikowane systemy przemysłowe.