LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
IoT

[PROJEKT] Waga elektroniczna na sterowniku SIMATIC S7-1200

Kod przykładu

Projekt działa w sposób następujący – sygnał z belki tensometrycznej po wzmocnieniu trafia na przetwornik analogowo-cyfrowy. Mój program powinien więc otrzymane dane przeliczyć na jednostkę wagi i wyświetlić wynik na stronie WWW. Podczas obliczania zakładamy, że zależność pomiędzy obciążeniem a napięciem, a więc także danymi z przetwornika ADC jest liniowa, co jest w zasadzie prawdą. Aby znać wszystkie parametry funkcji liniowej potrzebujemy wiedzieć jaki wynik otrzymujemy z układu przy dwóch znanych nam ciężarach obciążenia. Jeden z nich możemy uzyskać przy obciążeniu wagi ciężarem zerowym – jest to tzw. tara. Natomiast drugi punkt uzyskamy obciążając wagę znanym nam ciężarem – może to być na przykład odważnik znanej masie.

Jako, że istnieje prawdopodobieństwo, że te parametry mogą zmieniać się w czasie lub pod wpływem warunków pracy (np. temperatury), warto umożliwić uruchomienie tarowania i kalibracji wagi z poziomu strony WWW. Dodatkowo, powinna istnieć opcja wprowadzania wagi obciążenia referencyjnego, również z panelu WWW.

Poniżej omówię kod projektu opracowany w środowisku TIA Portal, realizujący wymienione powyżej zadania. Pełen kod projektu znajduje się poniżej w sekcji Do pobrania.

Większość kodu znajduje się w bloku Main [OB1] czyli tam gdzie standardowo znajduje się logika pracy sterownika. W pierwszym podbloku znajduje się tylko blok WWW odpowiadający za komunikację kodu z serwerem web.

Rys. 6. Blok WWW odpowiadający za komunikację z serwerem Web

Konwersja odczytu na wagę w miligramach

W kolejnym podbloku znajduje się logika odpowiedzialna za przeliczanie odczytu z przetwornika ADC na wagę wyskalowaną w miligramach. Pierwszym blokiem jest LGF_FloatingAverage. Jest to funkcja odpowiedzialna za uśrednianie pomiaru, dostępna w bibliotece Library of general functions (LGF). Funkcja 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 20 pomiarów. Uśredniane dane są dostępne w zmiennej Temp.

Dane ze zmiennej Temp są przekazywane dalej do bloku, w którym następuje operacja odejmowania od odczytu Tary, tj. odczytu przy braku obciążenia wagi. Różnica jest zapisywana w zmiennej WagaNetto i jest nadal wyrażona w surowych odczytach z przetwornika. Aby otrzymać dane wyrażone w miligramach należy podzielić tą liczbę przez odpowiedni współczynnik skalowania. Dzieje się to w trzecim bloku DIV, a wynik wpisywany jest do zmiennej Ciezar.

Na koniec dane poddawane są także zaokrągleniu, co wpływa na stabilność odczytu. Zaokrąglone dane są wpisywane do zmiennej CiezarPoZaokr i to właśnie te dane są wypisywane na stronie WWW.

Cztery powyższe bloki są aktywne tylko wtedy, gdy włączony jest bit WlaczWazenie.

Rys. 7. Funkcja konwersji surowych danych z przetwornika na ciężar w miligramach

Tryb tarowania

Kolejną funkcją w kodzie produktu jest funkcja umożliwiająca ustalenie poziomu zerowego wagi, tzn. tary. Funkcja składa się z jednego bloku LGF_FloatingAverage. W trybie ustalania poziomu tary uśrednia ona pomiary z wejścia analogowego i zapisuje je w zmiennej Tara. Zmienna ta jest wykorzystywana w omawianym powyżej trybie ważenia.

Funkcja tarowania jest aktywna jedynie, gdy włączony jest bit WlaczTarowanie.

Rys. 8. Funkcja tarowania w kodzie sterownika PLC

Tryb kalibracji

Ostatnim trybem jest tryb kalibracji. Umożliwia on wyznaczenie współczynnika skalowania, tj. ile progów przetwornika ADC przypada na jeden miligram obciążenia belki tensometrycznej. W tym przypadku również następuje uśrednienie pomiarów, a następnie od tej wartości odejmujemy tarę i dzielimy przez ciężar odważnika wzorcowego. Podczas testów korzystałem z odważnika 0,5 kg, tym niemniej tą wartość, zapisaną w zmiennej CiezObcRef, można zmienić z poziomu panelu WWW.

Funkcja kalibracji jest aktywna tylko wtedy, gdy aktywny jest bit WlaczSkalowanie.

Rys. 9. Funkcja kalibracji

Przełączanie trybów

Ostatni podblok ma za zadanie obsługę przełączanie trybów – z ważenia na tarowanie lub kalibrację. Dwa ostatnie tryby są aktywowane z panelu WWW i w tym samym momencie wyłączany jest tryb ważenia. Przycisk na stronie włącza bit WlaczTarowanie lub WlaczSkalowanie wyłączając przy tym bit WlaczWazenie W tym podbloku znajdują się dwa timery, które są aktywowane w momencie włączenia odpowiedniego trybu. Po upływie jednej sekundy timer ponownie aktywuje bit WlaczWazenie i jednocześnie dezaktywuje aktualny tryb.

Warto także zauważyć, że układ przebywa w trybach kalibrujących jedynie przez 1 sekundę. Warto więc uruchomić tryb dopiero po odpowiednim przygotowaniu – dla tarowania zdjąć wszystko z wagi, natomiast dla kalibracji umieścić zawczasu odważnik referencyjny na wadze.

Dodatkowo bity trybów wyprowadzono na wyjścia sterownika odpowiednio: WlaczWazenie na D0.0, WlaczTarowanie na D0.1, natomiast WlaczSkalowanie na D0.2. Pozwala to łatwo zorientować się w jakim trybie aktualnie jest waga.

Wszystkie zmienne umieściłem w specjalnym bloku danych Dane [OB2]. Część zmiennych zaopatrzyłem także w wartości domyślne – bity wyboru trybu ustawiono tak, aby projekt po uruchomieniu wszedł w tryb ważenia, natomiast zmienne odpowiadające za kalibrację mają wartości pozwalające na prawidłową (chociaż prawdopodobnie niezbyt dokładną) pracę już w momencie startu. Z kolei wszystkie sygnały wewnętrzne (wejścia i wyjścia sterownika, sygnał zegarowy) są oznaczone w zakładce PLC tags.

Rys. 10. Bloki odpowiedzialne za przełączanie trybów urządzenia i sygnalizację na wyjściach sterownika

Panel WWW

Z powodu braku wyświetlacza, najprostszą metodą wyświetlania wyników oraz sterowania programem jest wykorzystanie serwera WWW dostępnego w sterowniku S7-1200. W ten sposób możemy odczytać dane w przeglądarce komputera PC.

Strona będzie opisana w języku HTML, oprócz samego wyświetlania ciężaru, który będzie działał jako skrypt JavaScript. Dzięki takiemu podejściu jesteśmy w stanie uzyskać automatyczne odświeżanie strony, a co za tym idzie, obserwowanie wyniku praktycznie w czasie rzeczywistym.

Plik główny strony – index.html – prezentuje się następująco:

Listing 1. Plik index.html

<html>

<!-- AWP_In_Variable Name='"Dane".CiezarPoZaokr' -->
<!-- AWP_In_Variable Name='"Dane".WlaczWazenie' -->
<!-- AWP_In_Variable Name='"Dane".WlaczTarowanie' -->
<!-- AWP_In_Variable Name='"Dane".WlaczSkalowanie' -->
<!-- AWP_In_Variable Name='"Dane".CiezObcRef' -->
  <head>
    <meta charset="UTF-8">
    <title>Waga na S7-1200</title>
  </head>

  <body>
    <form>
      <input type="submit" value="Tara">
      <input type="hidden" name='"Dane".WlaczTarowanie' value="1">
      <input type="hidden" name='"Dane".WlaczWazenie' value="0">
    </form>
  
    <form>
      <input type="submit" value="Kalibracja">
      <input type="hidden" name='"Dane".WlaczSkalowanie' value="1">
      <input type="hidden" name='"Dane".WlaczWazenie' value="0"> 
    </form>

    Ciężar obciążenia referencyjnego: :="Dane".CiezObcRef: mg

    <form method="post">
    <input name='"Dane".CiezObcRef' type="number"/>
    <button type="submit">Zapisz</button>
    </form>

    <h3>Wynik : <span id="VarId1">VALUE</span> mg
    <iframe src="Update_Page.html" style="display:none;"/></h3>
  </body>
</html>

Pierwszym interesującym elementem są tzw. komendy AWP. Określają one zmienne w kodzie projektu, które mają być wykorzystane do odczytu lub zapisu przez stronę WWW. Następnie znajdują się dwa przyciski: „Tara” oraz „Kalibracja”. Przycisk Tara uruchamia proces tarowania wagi włączając bit WlaczTarowanie i wyłączając WlaczWazenie. Analogicznie działa przycisk „Kalibracja”, który uruchamia proces skalowania wagi.

Kolejnym elementem strony jest formularz, w którym można wpisać wagę obciążenia referencyjnego w miligramach. Nad nim znajduje się informacja o aktualnie zapisanej wartości obciążenia referencyjnego.

Skrypt odświeżający pomiar wagi

Ostatnim elementem strony jest wyświetlanie wagi. Jako, że jest to najważniejszy element strony wyróżniłem go w postaci nagłówka h3. Ten blok korzysta ze skryptu zapisanego w pliku Update_Page.html i wyświetla zmienną VarId1.

Plik Update_Page.html ma za zadanie aktualizować zmienną CiezarPoZaokr zawierającą aktualne obciążenie wagi i odświeżać stronę co ustalony okres czasu. Ten plik jest tak naprawdę przerobionym plikiem demonstracyjnym, który można znaleźć w zasobach firmy Siemens. Jest on bardzo wygodny, ponieważ wystarczy edytować tylko tabelę zawierającą czas odświeżania strony i wpisać wszystkie zmienne, które chcemy regularnie odczytywać.

W związku z tym, aby uzyskać pożądany efekt należy tylko edytować ta tabelę. W naszym przypadku czas odświeżania wynosi 100 ms, a skrypt ma za zadanie odświeżać tylko jedną zmienną, czyli CiezarPoZaokr.

Edytowaną tabelę w postaci html można zobaczyć na poniższym listingu:

Listing 2. Edycja pliku Update_Page.html

<table border="1">
  <tr>
    <td>
      Update time in milliseconds
    </td>
  </tr>

  <tr>
    <td id="updateInterval">
      100
    </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>
      :="Dane".CiezarPoZaokr:
    </td>
    
    <td>
      VarId1
    </td>
  </tr>
</table>

Oba pliki można znaleźć w folderze ./strona projektu. Aby określić plik, do którego ma odwoływać się strona WWW należy w oknie Device Configuration, w zakładce Properties odnaleźć menu Web Server > User-Defined Pages. Można tam wybrać katalog, w którym znajduje się strona oraz stronę główną. Przycisk Generate blocks kompiluje stronę do formatu obsługiwanego przez serwer sterownika. Taką kompilację należy przeprowadzić po każdej zmianie w kodzie html. W przeciwnym wypadku zmiany nie zostaną uwzględnione.

Kompilacja i wgranie kodu na sterownik

Po wygenerowaniu bloku serwera web należy skompilować także resztę kodu oraz wgrać go do pamięci sterownika. Aby tego dokonać należy przycisnąć prawym przyciskiem myszy na menu sterownika na prawym panelu i wybrać odpowiednią opcję z menu Compile, a następnie Download to device.

Więcej informacji o kompilowaniu kodu na sterownik uzyskasz w artykule Sterowniki SIMATIC S7-1200 (CPU1211C) – Hello World!

Aby otworzyć stronę www sterownika należy wpisać w przeglądarce adres urządzenia. Następnie należy wejść w panel, zalogować się na konto admin, i wejść w link Homepages of the application, który ukaże się po kliknięciu User-Defined pages na panelu bocznym.

Wygląd prostego panelu na stronie WWW można obejrzeć na grafice poniżej:

Rys. 9. Odczyt wagi na stronie WWW

Podsumowanie

Sterowniki SIMATIC S7-1200 to dość zaawansowane urządzenia PLC. Są one przeznaczone do pracy w małych i średnich aplikacjach przemysłowych. Takie aplikacje często korzystają z różnego rodzaju pomiarów analogowych, m.in. temperatury lub właśnie ciężaru. Produkty wprowadzone na rynek przez Kamami.pl, tj. zestaw symulacyjny KA-S71200-IO-Simulator oraz moduł z belką tensometryczną KAmodTENSOMETER2kg umożliwiają stworzenie prostego prototypu aplikacji mierzącej ciężar, a także zorientowanie się w wymaganiach sprzętowych i programowych tego typu projektów. Jest to więc nieoceniona pomoc podczas implementacji pomiaru ciężaru w środowiskach przemysłowych.