LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

[KURS PLC, CZĘŚĆ 8] Sterowniki SIMATIC S7-1200 (CPU1211C) – pamięci w PLC

Uwaga! Lista wszystkich opublikowanych odcinków kursu jest dostępna pod adresem.

W tej części kursu programowania sterowników PLC omówimy zagadnienia związane ze świadomym korzystaniem z zasobów pamięciowych w sterownikach SIMATIC S7-1200.

Pamięć w sterowniku PLC SIMATIC S7-1200 dzieli się na systemową oraz użytkownika. Program ma dostęp do każdej z tych pamięci. Programistów PLC spotyka czasami niespodzianka, gdy pojawi się komunikat podczas kompilacji o wykorzystaniu całej pamięci. Aktualny rozmiar wykorzystanej pamięci w CPU1211C (rodzina SIMATIC S7-1200) można sprawdzić poprzez połączenie się online ze sterownikiem (jak to zrobić opisaliśmy w drugiej części kursu) i przejście do zakładki Memory.

Zestaw startowy do kursu programowania SIMATIC S7-1200

Sklep KAMAMI.pl przygotował specjalną ofertę dla osób zainteresowanych poznaniem w praktyce możliwości sterowników SIMATIC S7-1200 oraz podstaw ich programowania. W ramach tej oferty dostępny jest zestaw startowy o nazwie Siemens SIMATIC S7-1200 PROMO w promocyjnej cenie (659 PLN brutto). Składa się on z następujących elementów:

  • sterownika SIMATIC S7-1200 (CPU1211C, 6ES7211-1AE40-0XB0),
  • przełącznika SIRIUS ACT NO+NC zintegrowanego z LED (3SU1031-3BB61-0AK0, 3SU1500-0AA10-0AA0, 3SU1400-1AA10-1BA0, 3SU1400-1AA10-1CA0, 3SU1401-1BB60-1AA0),
  • oprogramowania w wersji eval.

 

Co z tą pamięcią?

W poprzednim odcinku kursu programowania PLC poznaliśmy sposób wywoływania funkcji FC (funkcje FB wywołuje się podobnie) oraz w jakich blokach można takie wywołanie wykonać. Trzeba pamiętać że liczba zagnieżdzeń podczas wywoływania jest ograniczona. Ograniczeniem jest rozmiar stosu (specjalny obszar pamięci). Wywołanie każdego bloku FC lub FB jest odkładane na stos. Głębokość zagnieżdżenia funkcji FC lub FB nie może być większa niż 16 w przypadku wywołań z cyklicznego bloku organizacyjnego OB1 lub bloku startowego OB100. Przykład zagnieżdżenia przedstawiono poniżej.

 

 

Widzisz na tym rysunku, że z bloku OB1 jest wywołana funkcja FC, następnie z tej funkcji FC jest wywołana kolejna funkcja FC. Sytuacja się powtarza jeszcze dwukrotnie. W tym wypadku zagnieżdzenie wynosi cztery. W jednym z następnych odcinków pokażę, jak sprawdzić hierarchię wywołań.

Dla zainteresowanych doskonaleniem programowania PLC Wydawnictwo BTC przygotowało książkę „Podstawy programowania sterowników SIMATIC S7-1200 w języku SCL”, której autorem jest autor naszego kursu, doświadczony projektant systemów automatyki – Tomasz Gilewski.

 

 

Pamięć bitowa M

W jednym z poprzednich odcinków opisałem dostępne typy danych oraz bloki danych DB, które służą do przechowywania zmiennych. W starszych sterownikach PLC firmy Siemens (S7-300 lub S7-400) często korzystano z pamięci bitowej M (tzw. markerów). Używanie tej pamięci wiązało się w niektórych sytuacjach z dużymi problemami i niedogodnościami. Nowe sterowniki z serii S7-1200 także pozwalają na korzystanie z pamięci bitowej M. Utworzenie zmiennej w pamięci bitowej M polega na nadaniu nazwy oraz typu i adresu. To wszystko wykonuje się w tablicy PLC tags. Rysunek poniżej przedstawia przykładowo utworzoną zmienną.

 

 

W tablicy MemoryM utworzono zmienną MyMemoryM typu Bool, która znajduje się pod adresem M0.0. W tym momencie możesz już w kodzie programu odwołać się do zmiennej MemoryM. W podobny sposób można utworzyć zmienne innych typów.

Firma Siemens nie zaleca korzystania z tej pamięci. Są dwa powody:

  • ogranicza się przenośność kodu (różne sterowniki mają różny rozmiar pamięci i może powodować konflikt adresów),
  • pamięć M nie jest optymalizowana i kod programu wykonuje się wolniej.

 

Optymalizacja pamięci

Sugeruję, aby wszystkie zmienne umieszczać w blokach danych DB. W ten sposób oszczędza się pamięć. Wynika to z faktu, że każdy nowo dodany blok DB ma domyślnie włączoną optymalizację pamięci. Oczywiście jest możliwość wyłączenia lub ponownego włączenia optymalizacji. Można to wykonać otwierając właściwości bloku danych i przechodząc do zakładki Attributes. Poniżej przedstawiono okno właściwości bloku danych.

 

 

Jak widać, domyślnie jest zaznaczona opcja Optimized block access. Takie rozwiązanie wynika z faktu zachowania kompatybilności ze sterownikami klasycznymi. Niektóre standardowe funkcje dostępne w TIA Portal wymagają, aby blok danych powiązany z tą funkcją miał wyłączoną optymalizację danych.

Dlaczego warto we wszystkich innych sytuacjach używać optymalizowanych danych? Przedstawia to poniższy rysunek.

 

Teraz możesz porównać, jak wygląda wykorzystanie pamięci. Podczas kompilacji dane w bloku optymalizowanym są tak lokowane, aby nie było luk. Dodatkowo jest rezerwowany obszar na dodatkowe zmienne, które mogę być umieszczone tam podczas ponownego programowania sterownika. Takie rozwiązane zostało wymyślone, aby podczas programowania sterownik nie przechodził w tryb stop oraz nie wykonywać ponownej inicjalizacji zmiennych wartościami początkowymi. Poniższy rysunek przedstawia idee tego rozwiązania.

 

 

W pamięci sterownika jest blok danych (1), w którym znajduję się trzy zmienne i mają w tej chwili określone wartości. Potrzebujemy dodać do tego projektu kolejne dwie zmienne (Tag4 oraz Tag5), więc modyfikujemy blok danych w projekcie (2). Ponownie programujemy sterownik i nowe zmienne zostają umieszczone właśnie w obszarze zarezerwowanym. To powoduje rozszerzenie bloku (3). Dzięki temu aktualne wartości nie zostały zainicjalizowane wartościami początkowymi. Taka funkcjonalność jest dostępna w pasku narzędzi bloku danych i nazywa się Downloading without reinitialization.

Rozmiar obszaru rezerwowanego jest ustawiany we właściwościach bloku danych (zakładka Download without reinitialization). Maksymalny rozmiar to 100 bajtów. Zmiana rozmiaru może być wykonana dla jednego bloku (zmiana we właściwościach tego bloku), lub dla wszystkich bloków danych (należy wybrać Settings w TIA Portal i przejść do zakładki PLC programming i następnie zmienić rozmiar w Download without reinitialization).

Tomasz Gilewski