[KURS PLC, CZĘŚĆ 6] Sterowniki SIMATIC S7-1200 (CPU1211C) – typy zmiennych
Uwaga! Lista wszystkich opublikowanych odcinków kursu jest dostępna pod adresem.
W przedstawionych dotychczas odcinkach kursu programowania PLC korzystaliśmy tylko z tagów tworzonych w PLC tags. W polu Type wybieraliśmy zawsze typ Bool. Jest to właśnie jeden z podstawowych typów danych, jakie są dostępne podczas tworzenia kody dla sterownika PLC. W tym odcinku kursu programowania PLC (bazujemy na sterowniku SIMATIC S7-1200) poznamy inne typy danych oraz metodę tworzenia własny typów danych. Na koniec napiszemy przykładowy program, w którym wykorzystamy zdobytą wiedzę.
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:
|
Zadanie
Zakład produkcyjny zleca modernizację transportera, która będzie polegać na prezentacji stanu pracy. Do istniejącej szafy sterowniczej należy dołączyć kolumnę sygnalizacyjną z dwoma lampami.
Obecny układ sterujący wyposażony jest w dwa przełączniki:
- OnOff – służy do włączenia (stan wysoki na wejściu cyfrowym) lub wyłączenia (stan niski na wejściu cyfrowym) pracy silnika,
- Direction – ustalanie kierunku obrotów silnika (gdy jest stan wysoki na wejściu cyfrowym, to silnik obraca się w lewo, natomiast w innym przypadku silnik obraca się w prawo).
Program powinien działać w taki sposób, że:
Gdy przełącznik OnOff jest w pozycji On, wówczas zapala się odpowiednia lampa sygnalizacyjna informująca o aktualnym kierunku. W momencie, gdy przełącznik OnOff jest w pozycji Off, wtedy każda z lamp nie świeci.
Silnik powinien być uruchomiony ze stałą prędkością 500 RPM (obrotów na minutę).
Schemat elektryczny
Podłączenie elektryczne przedstawiono na schemacie poniżej.
Do wejść cyfrowych podłączono przyciski OnOff oraz Direction. Zamiast kolumny sygnalizacyjnej podłączono diody LED. Dzięki temu zaobserwujemy działanie programu. Dioda LED niebieska oznacza kierunek obrotów w lewo natomiast dioda LED zielona oznacza kierunek obrotów w prawo.
Nowy projekt
Na początku tworzymy nowy projekt (np. o nazwie 06_DateTypes) i przeprowadzamy konfigurację sprzętową w taki sam sposób, jak w dotychczas opisanych przykładach.
Teraz zapoznamy się z podstawami, następnie wykonamy zdanie, którego założenia zostały wyżej przedstawione.
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. |
Podstawowe typy danych
Pamięć robocza służy między innymi do przechowywania danych, które są nazywane także zmiennymi. Pamięć trwała służy tylko przechowywania zmiennych a dokładnie wartości tych zmiennych.
Pamięć ma określony rozmiar o dosyć dużym rozmiarze. Dzięki temu można tam umieścić wiele zmiennych. Każda zmienna musi być w pierwszej kolejności zadeklarowana, aby kompilator wiedział jaki obszar pamięci przydzielić dla tej zmiennej. Każdej zmiennej jest nadawana nazwa, która pozwala identyfikować przydzielony obszar pamięci ze zmienną. Rozmiar przydzielanej pamięci zależy od typu zmiennej. Znając typ zmiennej kompilator wie, jaką procedurę wykorzystać do przeprowadzania obliczeń na tej zmiennej.
Podczas nadawania nazwy należy pamiętać, aby nie było to słowo kluczowe zarezerwowane przez TIA Portal. Jeżeli taka sytuacja się pojawi, podczas kompilacji zostanie zgłoszone ostrzeżenie.
W sterowniku istnieją podstawowe typy danych znane z innych języków programowania oraz typy wbudowane. Typy podstawowe, ich zakres oraz przykład wprowadzania zebrano w tablicy:
Nazwa | Typ | Rozmiar | Zakres | Przykład wprowadzenia | |
bity | bajty | ||||
USInt | Całkowity | 0…255 | 78 2#01001110 | ||
Byte | Całkowity | 8 | 1 | 0…255 | 2#00001111 15 16#F |
UInt | Całkowity | 16 | 2 | 0…65,535 | 65295 |
Word | Całkowity | 16 | 2 | 0…65535 | 61680 8#170360 16#F0F0 |
UDInt | Całkowity | 32 | 4 | 0…4294967295 | 4042322160 |
DWord | Całkowity | 32 | 4 | 0…4294967295 | 69 |
SInt | Całkowity | 8 | 1 | -128…127 | +50 30 16#50 |
Int | Całkowity | 16 | 2 | -32,768…32,767 | 30000 |
DInt | całkowity | 32 | 4 | -2,147,483,648…2,147,483,647 | -2131754992 |
Real | Rzeczywisty | 32 | 4 | -3.402823e+38… -1.175 495e-38, ±0, +1.175 495e-38…+3.402823e+38 | 123.456 -3.4 |
LReal | Rzeczywisty | 64 | 8 | -1.7976931348623158e+308 … -2.2250738585072014e-308, ±0, +2.2250738585072014e-308 … +1.7976931348623158e+308 | 12345.1234567 |
Bool | logiczny | 1 | – | 0…1 | TRUE |
Char | znak | 8 | 1 | ’C’ | |
String | Łańcuch znaków | 0…254 | ’Przyklad’ | ||
Data | 16 | 2 | D#1990-1-1…D#2168-12-31 | D#2014-02-10 | |
Time | 32 | 4 | T#-24d_20h_31m_23s_648ms…T#24d_20h_31m_23s_647ms | T#5m_30s T#1d_2h_15m_30s_45ms TIME#10d20h30m20s630ms | |
Time_of_day | 32 | 4 | TOD#0:0:0.0 to TOD#23:59:59.999 | TOD#10:20:30.400 TIME_OF_DAY#10:20:30.400 | |
DTL | 12 | Min.: DTL#1970-01-01-00:00:00.0 Max.: DTL#2554-12-31-23:59:59.999 999 999 | DTL#2008-12-16-20:30:20.250 | ||
Void | pusty | 0 | 0 |
Niektóre typy mają inną nazwę, ale taki sam zakres. Jest to wymuszone koniecznością zachowania kompatybilności ze starszymi sterownikami. W tablicy przedstawiono przykładowe wprowadzenia w różnych systemach liczbowych.
Typy całkowite służą do przechowywania liczb całkowitych ze znakiem lub bez znaku. Mają rozmiar od 8 do 32 bitów.
Typy zmiennoprzecinkowe Real oraz LReal pozwalają na pracę z liczbami rzeczywistymi o różnej precyzji. Typ Real jest pojedynczej precyzji, natomiast LReal jest typem podwójnej precyzji. Do obliczeń wymagających dużej dokładności należy wykorzystać podwójną precyzję. Spowoduje to mniejszy błąd z obliczeń, który wynika między innymi z dużej liczby operacji arytmetycznych.
Typ Bool służy do przechowywania i pracy z wartościami logicznymi. Może przechowywać tylko dwie wartości, prawdę (logiczne 1) lub fałsz (logiczne 0).
Typ Char służy do przechowywania tylko jednego znaku. Nie można zmiennej typu Char przypisać liczby.
Typ String pozwala na przechowywanie całego łańcucha znaków i nie może być większy niż 254 znaków. Rozmiar łańcucha o długości 20 znaków definiuje się jako String[20].
Sterowniki mają specjalne zmienne do przechowywania daty, czasu lub daty i czasu:
- Date – zawiera liczbę dni od 1 stycznia 1990 roku. Maksymalna data którą można zapisać to 31 grudnia 2168 roku,
- Time – jest interpretowana przez sterownik jako liczba milisekund. Podczas przypisywania wartości czasu do zmiennej powinien być przynajmniej jedna z informacji o liczbie dni (d), minut (m), sekund (s) oraz milisekund (ms). Typ jest wykorzystywany np. w przekazywaniu wartości czasu opóźnienia do odmierzenia w bloku organizacyjnym OB20,
- Time of day (TOD) – typ jest interpretowany przez sterownik jako liczba milisekund od północy danego dnia,
- Data and Time Long (DTL) – typ przechowuje wszystkie składniki daty i czasu – rok, miesiąc, dzień tygodnia, godziny, minuty, sekundy, nanosekundy. Zegar czasu rzeczywistego operuje na typie DTL.
Typ void jest spotykany tylko w funkcji FC. Gdy mamy wybrany taki typ, wówczas jest to informacja, że funkcja nie będzie zwracać żadnego wyniku. W sekcji interfejsu bloku funkcji należy określić typ zwracany poprzez parametr Return. Domyślnie każda nowo utworzona funkcja FC ma wybrany typ void. Oczywiście można wybrać inny typ za pomocą rozwijanej listy dostępnej przy tym parametrze.
Sterowniki mają też kilkadziesiąt typów powiązanych z fizycznym sprzętem znajdującym się wewnątrz. Spotkamy się np. z OB_ANY, HW_PWM, HW_HSC.