[PRZYKŁAD] Pomiar odległości za pomocą czujnika Sharp GP2Y0A60SZLF oraz sterownika SIMATIC S7-1200
W artykule prezentujemy sposób pomiaru odległości za pomocą czujnika Sharp GP2Y0A60SZLF oraz sterownika PLC SIMATIC S7-1200 firmy Siemens. W celu prostego połączenia obu elementów wykorzystamy także zestaw symulacyjny KA-S71200-IO-Simulator z oferty Kamami.pl. Po odczycie odległości wynik pomiaru zostanie wypisany na panel dostępny przez stronę WWW.
Projekt jest zbudowany z następujących elementów:
- Sterownik SIMATIC S7-1200 6ES7211-1AE40-0XB0,
- Zestaw symulacyjny KA-S71200-IO-Simulator,
- Moduł Pololu z czujnikiem Sharp GP2Y0A60SZLF,
- Zasilacz 24 V do zasilacza sterownika S7-1200 np. Mean Well MDR-60-24,
- Kabel sieciowy Ethernet.
Sterownik SIMATIC S7-1200
Sterownik SIMATIC S7-1200 dysponuje cyfrowymi wejściami w liczbie od 6 do 14 oraz wyjściami w liczbie od 4 do 10. Zarówno wejścia jak i wyjścia pracują ze standardowym napięciem 24 V. Można też skorzystać z dwóch wejść analogowych, które pracują z napięciem 0 – 10 V i rozdzielczością 10 bitów. Służą one do podłączenia przemysłowych czujników analogowych. Sterowniki dysponują także zintegrowanym protokołem komunikacyjny Ethernet – Profinet.
Używany w projekcie sterownik 6ES7211-1AE40-0XB0 cechuje się następującymi właściwościami:
- 6 x wejścia cyfrowe 24 V DC,
- 4 x wyjścia cyfrowe 24 V DC,
- 2 x wejścia analogowe od 0 do 10 V DC, rozdzielczość 10 bitów,
- Pamięć: 50 kB,
- Regulator PID z auto tuningiem,
- Zintegrowany ETHERNET – PROFINET,
- Program narzędziowy Step 7 V14 lub wyższej,
- Montaż na szynie DIN,
- Zasilanie: 24 V DC,
- Wymiary: 90 x 100 x 75 mm,
- Waga: 370 g.
Rys. 1. Sterownik PLC z rodziny SIMATIC S7-1200
Zestaw symulacyjny KA-S71200-IO-Simulator
KA-S71200-IO-Simulator z oferty sklepu Kamami.pl to kompletny zestaw symulujący typowe otoczenie sterownika PLC. Umożliwia on podanie na wejścia cyfrowe i analogowe odpowiednich sygnałów – zarówno z przełączników, jak i wbudowanych czujników, a także zewnętrznych sensorów. Z kolei stan wyjść można odczytać za pomocą diod LED.
Zestaw pozwala na praktyczne testy aplikacji w trakcie projektowania. Ma też duży potencjał edukacyjny – umożliwia sprawdzenie możliwości sterownika i naukę bez konieczności posiadania całego zestawu modułów do automatyki.
Rys. 2. Zestaw KA-S71200-IO-Simulator
Zestaw składa się z dwóch części – modułu wejściowego oraz wyjściowego. Moduł wejściowy wyposażono w cyfrowe i analogowe elementy wejściowe oraz zasilacz DC/DC zapewniający odpowiednie napięcia zasilające obwodom elektronicznym.
Analogowy czujnik odległości Sharp GP2Y0A60SZLF
Do pomiaru odległości wykorzystano czujnik analogowy Sharp GP2Y0A60SZLF. Czujnik ten działa na zasadzie odbicia światła podczerwonego. Zasięg czujnika wynosi od 10 do 150 cm, natomiast częstotliwość pomiarów wynosi 60 Hz. Czujnik jest często stosowany w robotach klasy sumo, line followerach, a także w niewielkich pojazdach autonomicznych.
W przykładzie wykorzystamy moduł Pololu 2474 z czujnikiem odległości, pracujący z napięciem 5 V. Moduł ten, dzięki wyprowadzeniu sygnałów na złącza szpilkowe, umożliwia łatwe podłączenie czujnika do zewnętrznych płytek rozwojowych, takich jak Arduino czy STM32 Nucleo. Dostępny jest także moduł Pololu 2476 z tym samym czujnikiem, ale na napięcie 3 V.
Rys. 3. Moduł z czujnikiem Sharp GP2Y0A60SZLF
Podłączenie czujnika do sterownika SIMATIC S7-1200
Czujnik Sharp GP2Y0A60SZLF należy podłączyć do wejścia Ext1 na czujnik zewnętrzny na płytce KA-S71200-IO-Simulator. Wyjście sygnałowe (OUT) należy podłączyć do wyprowadzenia Ext1, natomiast masę modułu (GND) do masy (M) płytki symulatora. Złącze na sensory zewnętrzne ma wyprowadzone napięcia +10 V oraz 24 V z zasilacza. W związku z tym napięcie 5 V niezbędne do zasilania czujnika należy podłączyć ze złącza na czujnik tensometryczny.
Sposób podłączenia czujnika do modułu KA-S71200-IO-Simulator zaprezentowano poniżej w tabeli oraz na fotografii.
Tabela 1. Podłączenie sensora Sharp GP2Y0A60SZLF do modułu KA-S71200-IO-Simulator
Moduł Sharp GP2Y0A60SZLF | KA-S71200-IO-Simulator |
OUT | Ext1 |
GND | M |
VCC | +5V (Złącze Tensometer) |
Rys. 4. Moduł z czujnikiem odległości podłączony do KA-S71200-IO-Simulator
Moduł symulatora ma za zadanie doprowadzić sygnał z portu Ext1 na wejście analogowe AI0 sterownika SIMATIC. Aby to zrobić należy przestawić przełącznik SEL.AI0 w pozycję Ext1. Zostało to wyraźnie oznaczone na powyższej fotografii.
Kalibracja czujnika Sharp GP2Y0A60SZLF
Czujnik Sharp GP2Y0A60SZLF jest analogowym sensorem odległości. Oznacza to, że podaje na wyjście sygnał napięciowy uzależnione od odległości wykrytego obiektu od czujnika. Niestety zależność ta nie jest liniowa. Przykład charakterystyki umieszczony w dokumentacji przedstawiono na rysunku poniżej.
Rys. 5. Charakterystyka sensora odległości Sharp GP2Y0A60SZLF
W przypadku nieliniowych czujników należy przeprowadzić proces kalibracji. Należy w tym celu trzeba zebrać pomiary przy różnych odległościach od czujnika, a następnie aproksymować funkcję wiążącą odczyt z przetwornika ADC z odległością przedmiotu od czujnika.
W związku z tym należy zaprojektować program, który pozwoli łatwo odczytać z dane z przetwornika. Dane będą wyprowadzane na stronę WWW, a także przechowywane w jednym z tagów, co pozwoli odczytać ją również w inny sposób, np. z zakładki Tag status panelu WWW.
W pierwszej kolejności należy odpowiednio skonfigurować projekt w środowisku TIA Portal V15.1. Informacje jak to zrobić znajdziesz w drugim odcinku naszego kursu Sterowniki S7-1200 w praktyce, w którym opisaliśmy wstępną konfigurację 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 również w jednym z odcinków kursu.
Kod przykładu do odczytu danych
Sam kod przykładu służący do kalibracji sensora jest stosunkowo prosty. Dane z przetwornika są jedynie uśredniane oraz konwertowane na typ Int. Również strona www ma za zadanie jedynie wyświetlić uśredniony odczyt. Kod przykładu zaprezentowano poniżej.
Rys. 6. Kod przykładu do kalibracji czujnika
Listing 1. Kod strony www wyświetlającej uśrednione dane z przetwornika analogowo-cyfrowego
<html> <!-- AWP_In_Variable Name='"Data_block_1".AverageInt' --> <head> <meta charset="UTF-8"> <title>Kalibracja czujnika odległości na S7-1200</title> </head> <body> Uśredniony odczyt danych z czujnika: :="Data_block_1".AverageInt: </body> </html>
Co do bloku uśredniającego – jest to funkcja LGF_FloatingAverage z biblioteki Library of general functions (LGF). Funkcja ta ma za zadanie uśredniać pomiary z analogowego wejścia A.IN0. Pomiary są wyzwalane za pomocą wbudowanego sygnału zegarowego o częstotliwości 10 Hz (dostępny w pamięci pod adresem M69.0), natomiast okno, w którym trwa uśrednianie wynosi 100 pomiarów. Uśredniane dane są zapisywane w zmiennej Average.
Więcej o wbudowanych zegarach przeczytasz w kursie sterowników SIMATIC S7-1200 na portalu Mikrokontroler.pl.
Biblioteka LGF, a także dokumentacja dostępna jest na stronie https://support.industry.siemens.com/cs/document/109479728/library-of-general-functions-(lgf)-for-simatic-step-7-(tia-portal)-and-simatic-s7-1200-s7-1500?dti=0&lc=en-WW
Następnie, dla uproszczenia, dane ze zmiennej typu LReal (odpowiednik float) są konwertowane na dane typu Int w bloku CONV. Po konwersji zapisywane są w zmiennej AverageInt. To właśnie te dane posłużą nam jako podstawa do kalibracji czujnika. Będą one dostępne za pomocą naszej strony www lub też z poziomu zakładki Tag status.
Rys. 7. Odczyt danych z własnej strony www
Rys. 8. Odczyt danych z zakładki Tag status
Pełen kod projektu w TIA Portal do kalibracji znajduje się w sekcji Do pobrania.
W tym przykładzie zmierzę odczyt z przetwornika przy ustawieniu przedmiotu w zakresie odległości od 10 cm do 100 cm. Pomiary będą dokonywane co 5 cm. Można zwiększyć dokładność kalibracji dokonując pomiarów gęściej, z mniejszymi przerwami lub też zwiększyć zakres odległości do pełnego zakresu pomiarowego czujnika (10 – 150 cm).
Wyznaczanie charakterystyki czujnika
Po dokonaniu pomiaru należy wpisać wyniki do arkusza Excel, a następnie wyznaczyć wykres. Warto zwrócić uwagę, że chcemy uzyskać funkcję opisującą zależność odległości od odczytu z przetwornika ADC. W związku z tym odczyt powinien znaleźć się na osi X, a odległość – na osi Y.
Aby uzyskać aproksymowaną funkcję należy nanieść na wykres linię trendu. Można to zrobić naciskając zielony plus w prawym górnym rogu wykonanego wykresu, a następnie wybrać opcję Linia trendu>Więcej opcji. W opcjach linii trendu należy wybrać opcję Potęgowa oraz zaznaczyć Wyświetl równanie na wykresie. Warto także sformatować etykiety linii trendu tak, aby wyświetlały co najmniej 2 miejsca po przecinku. Wykres wraz z wyznaczoną funkcją jest widoczny na poniższym rysunku.
Rys. 9. Wykres ze zaproksymowaną charakterystyką czujnika
Arkusz programu Excel wykorzystany do kalibracji czujnika znajduje się w sekcji Do pobrania.
Z obliczeń wynika, że funkcja odległości w zależności od odczytu z przetwornika wyraża się następującym równaniem:
y = 48 677 499,895x-1,705
Tą właśnie funkcję należy zaimplementować w projekcie.
Kod projektu do pomiaru odległości
W dalszej części artykułu zaprezentuję sposób implementacji pomiaru odległości za pomocą czujnika Sharp GP2Y0A60SZLF. Projekt obliczy odległość przedmiotu od czujnika dzięki uzyskanej zależności. Uzyskane dane będzie można odczytać na panelu WWW.
Rys. 10. Kod przykładu do odczytu danych z czujnika Sharp GP2Y0A60SZLF
Pierwszy blok LGF_FloatingAverage ma za zadanie uśrednić pomiary z wejścia AI0. Blok działa w identyczny sposób, co w przypadku kalibracji. Uśredniona wartość jest zapisywana w zmiennej Temp1.
Kolejne dwa bloki mają za zadanie obliczyć odległość przedmiotu od sensora, czyli zaimplementować zależność uzyskaną z pomiarów. Blok CALCULATE odpowiada za część potęgową funkcji. Aby wykonać to obliczenie należy wpisać w bloku instrukcję
IN1**IN2
Wartością IN1 jest uśredniony sygnał z przetwornika dostępny w zmiennej Temp1 natomiast wartością IN2 jest wykładnik równy -1,705 zapisany w stałej Constant1. Wynik obliczeń jest zapisywany w zmiennej Temp2.
Kolejny blok MUL odpowiada za część iloczynową funkcji. Wynik potęgowania ze zmiennej Temp2 jest mnożony przez uzyskaną w procesie kalibracji stałą równą 48677499,895 zapisaną w Constant2. Wynik operacji jest zapisywany w zmiennej Distance, w której jest już pełna informacja o mierzonej odległości.
Ostatni blok odpowiada za zaokrąglenie wyniku do jednej cyfry po przecinku. Do tego celu użyłem bloku CALCULATE. Operacją jaka ma wykonywać blok to funkcja ROUND(IN1*IN2)/IN2, gdzie IN1 to dane o odległości ze zmiennej Distance, a IN2 jest stałe i równe 10. Umożliwia to zapisanie w zmiennej DistanceRounded danych o odległości z dokładnością do pierwszej cyfry po przecinku.
Kod strony www do odczytu odległości
Ostatnim zadaniem jest przygotowanie prostej strony www umożliwiającej odczyt informacji z czujnika odległości. Z racji, że pomiar odległości jest bardzo dynamiczny, zastosuję 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 2. Kod pliku index.html strony wyświetlającej dane z sensora Sharp GP2Y0A60SZLF
<html> <!-- AWP_In_Variable Name='"Data_block_1".DistanceRounded' --> <head> <meta charset="UTF-8"> <title>Czujnik odległości na S7-1200</title> </head> <body> <h3>Odległość obiektu od czujnika : <span id="VarId1">VALUE</span> cm <iframe src="Update_Page.html" style="display:none;"/></h3> </body> </html>
Na początku kodu znajduje się linia AWP określająca zmienną, która może być wykorzystana do odczytu lub zapisu przez stronę WWW. Strona wyświetla wartość zmiennej VarId1, którą pobiera z pliku Update_Page.html zawierającego skrypt odświeżający stronę.
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 tabela wygląda następująco:
Listing 3. 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".DistanceRounded: </td> <td> VarId1 </td> </tr> </table>
Po kompilacji i wgraniu projektu na płytkę można już odczytać dane z własnej strony www. Po uruchomieniu panelu www można ją znaleźć w zakładce User-defined pages.
Rys. 11. Strona odczytująca dane z sensora odległości
Pełny kod projektu można znaleźć w sekcji Do pobrania.