[PRZYKŁAD] Logowanie zmierzonych danych za pomocą sterownika PLC Siemens S7-1200

W dzisiejszym przykładzie na sterownik Siemens SIMATIC S7-1200 zaprezentuję w jaki sposób zapisać dane przechwytywane przez sterownik np. z czujnika. Dane będą zapisywane w pliku CSV, który można pobrać z serwera www i otworzyć w programie Excel.

Przykład będzie oparty o jeden z moich poprzednich projektów – Termometr z sygnalizacją przedziałów temperatur. Termometr pobiera sygnał z czujnika temperatury MCP9700 wbudowanego w zestaw symulacyjny KA-S71200-IO-Simulator. Sterownik zaprogramowano tak, aby przeliczał wartość z przetwornika ADC na wartość temperatury wyskalowaną w stopniach Celsjusza. Wartość tą można odczytać ze strony www sterownika i jest ona podstawą do sygnalizacji odpowiedniego przedziału temperatury za pomocą wyjść cyfrowych sterownika PLC.

Niniejszy przykład będzie stanowił uzupełnienie projektu termometru. Ma on za zadanie zapisywać dane o temperaturze w logu zdarzeń. Log ma postać pliku CSV i jest łatwo dostępny z poziomu serwera web. Taki plik można bezproblemowo zaimportować do Excela lub innych programów do obróbki danych.

Kod przykładu

Jeszcze przed rozpoczęciem komponowania kodu, należy włączyć bity obsługi pamięci systemowej oraz sygnałów zegarowych. Aby to zrobić należy wejść we właściwości sterownika (prawy przycisk na opcji sterownika w Project Tree i opcja Properties). W nowo otwartym okienku należy wejść w opcję System and clock memory i włączyć opcje Enable the use of system memory byte i Enable the use of clock memory byte.

Rys. 1. Ustawienie potrzebnych bajtów we właściwościach sterownika

Należy także skonfigurować serwer web. Pracuje on dokładnie tak jak w przypadku poprzednich przykładów. Odsyłam więc do jednego z odcinków kursu S7-1200, w którym znajduje się instrukcja konfiguracji serwera: https://mikrokontroler.pl/2018/08/10/kurs-plc-czesc-17-sterowniki-simatic-s7-1200-cpu1211c-serwer-www/

Utworzenie pliku – instrukcja DataLogCreate

Na początku program powinien utworzyć plik CSV. W tym celu należy wykorzystać blok DataLogCreate. Blok ma za zadanie utworzyć, a także od razu otworzyć plik.

Rys. 2. Kod przykładu – blok funkcyjny DataLogCreate

Blok ma następujące parametry:

  • RFQ – uruchamia proces tworzenia pliku.
  • RECORDS – liczba rekordów, która ma znaleźć się w pliku z danymi. Ilość danych jest ograniczona jedynie przez pamięć LOAD sterownika, która w używanym w projekcie modelu 6ES7211-1AE40-0XB0 wynosi 1 MB. Należy zwrócić uwagę, że po zapełnieniu pliku, program będzie usuwał wpisy najstarsze i zastępował je najnowszymi.
  • FORMAT – format zapisywanego pliku. Domyślnie ma wartość 1, co oznacza plik typu CSV.
  • TIMESTAMP – obecność w pliku daty i godziny zapisu.
  • NAME – nazwa tworzonego pliku w formacie String.
  • ID – to identyfikator pliku csv. Pozwala innym funkcjom odwoływać się do prawidłowego pliku.
  • DATA – struktura z wartościami zmiennych zapisywanych do pliku.
  • HEADER – zmienna z nagłówkami. Nagłówki są w formacie String i są rozdzielane przecinkami.
  • DONE – stan wysoki sygnalizuje wykonanie procedury,
  • BUSY – procedura w trakcie wykonania,
  • ERROR – sygnalizacja błędu podczas wykonania funkcji,
  • STATUS – status wykonania procedury (również kod błędu)

Większość zmiennych odpowiedzialnych za obsługę logowania danych umieściłem w bloku DaneLog. Mają one format odpowiedni dla parametru. Funkcja DataLogCreate jest uruchamiana przy starcie systemu i wykonuje się raz.

Otwieranie pliku instrukcją DataLogOpen

Funkcja DataLogCreate powinna wykonać się wtedy, gdy plik nie jest jeszcze utworzony. Gdy plik już istnieje, ale na skutek np. odłączenia zasilania, zostanie zamknięty, procedura nie wykona się i zapis danych będzie niemożliwy. Aby tego uniknąć, w kodzie umieściłem drugi blok – DataLogOpen. Ma on za zadanie tylko otworzyć plik, który jest już na serwerze. Większość parametrów funkcji jest taka sama jak w przypadku DataLogCreate.

Rys. 3. Kod przykładu – blok funkcyjny DataLogOpen

Obie powyższe funkcje uruchamiane na samym początku pracy programu. W przypadku, gdy plik nie istnieje na serwerze, wykona się funkcja Create – plik zostanie utworzony i otwarty. Funkcja Open zaś wykona się z błędem. Gdy plik już istnieje na serwerze, wykona się funkcja Open, istniejący plik zostanie otwarty, natomiast to funkcja Create wystawi błąd. W obu przypadkach flaga done zostanie ustawiona w stan wysoki. To z kolei spowoduje wyłączenie flagi Otworz, co spowoduje, że obie funkcje zostaną zdezaktywowane. Natomiast włączy się flaga ZacznijZapisywac co spowoduje rozpoczęcie cyklicznego zapisywanie danych do pliku.

Rys. 4. Kod przykładu – zmiana wartości flag po uruchomieniu flagi done

Zapisywanie danych do pliku

Za zapisywanie danych do pliku odpowiada funkcja DataLogWrite. Funkcja będzie wykonywać się po wystawieniu na wejście REQ stanu wysokiego, co w przypadku doprowadzenia zegara 0,5 Hz będzie miało miejsce oczywiście co 2 sekundy.

Rys. 5. Kod przykładu – blok funkcyjny DataLogWrite

Dane zapisywane do pliku csv, to czas pomiaru oraz dane aktualnie znajdujące się w strukturze dane. W tym przypadku struktura ta zawiera jeden element, typu LReal, do którego zapisujemy aktualny odczyt temperatury (w formie zaokrąglonej do dwóch miejsc po przecinku). Do tego celu wykorzystamy procedurę Move.

Rys. 6. Kod przykładu – blok Move zapisujący odczyt temperatury w strukturze dane

Wrócę jeszcze na chwilę do bloku zapisu danych. W przykładzie jako sygnał uruchamiający zapis danych wykorzystałem zegar wewnętrzny sterownika. Jeśli chcemy, by pomiary wykonywane były rzadziej, możemy wykorzystać w tym celu licznik, który po odliczeniu odpowiedniej liczby taktów generuje impuls wyzwalający pomiar i zapis danych do pliku. Poniżej przykładowy układ, który pozwala na wyzwalanie pomiaru co minutę.

Rys. 7. Układ generujący impuls co minutę.

W momencie, gdy zapisujemy dane o temperaturze w konkretnym momencie, warto ustawić w sterowniku aktualną datę i godzinę. Aby to zrobić, należy wejść w zakładkę Online & diagnostics i połączyć się ze sterownikiem. Po tym należy wejść w Functions > Set time i ustawić aktualną datę i godzinę. Sterownik posiada baterię podtrzymującą zegar, a więc wystarczy ustawić czas raz i zostanie on w pamięci modułu.

Rys. 8. Ustawienie daty i godziny na sterowniku S7-1200

Pobieranie danych z serwera sterownika PLC

Po kompilacji i wgraniu kodu na serwer należy wejść na stronę www sterownika. Po zalogowaniu (najlepiej na koncie administratora) należy wejść w File Browser. Logi będą widoczne w folderze DataLogs.

Pobrany plik ma dane oddzielone przecinkami. Domyślnie Excel nie jest identyfikuje przecinka jako separator. W takim wypadku można dodać dane do pustego pliku opcją Dane > Z tekstu, a po wyborze pliku ustawić przecinek jako separator danych.

Rys. 9. Dane z pliku wyświetlone w Excelu

Pliki CSV są zgodne również z innymi pakietami biurowymi, takimi jak LibreOffice oraz wieloma innymi programami. Dodatkowo wiele języków programowania pozwala na prosty import i obróbkę plików, co pozwala wykorzystać funkcję w bardziej skomplikowanej automatyce. Oczywiście procedurę można wykorzystać w innych zastosowaniach programu, w tym zapisywaniu błędów w pracy.

Pełny kod projektu można znaleźć w sekcji Do pobrania.

Do pobrania

O autorze