You are on page 1of 124

STEROWNIK

PROGRAMOWALNY
TYPU SMC

INSTRUKCJA PROGRAMOWANIA

-1
Maj 2009

___________________________________________________________________________

Pakiet CPDev jest opracowywany w Katedrze Informatyki i Automatyki Politechniki Rzeszowskiej


w ramach projektu rozwojowego MNiSzW R02 058 03.

0
SPIS TREŚCI
• Wstęp ....................................................................................................................3
• Instalacja pakietu CPDev ....................................................................................6
• Uruchomienie. Menu. Narzędzia .......................................................................13
Uruchomienie ..............................................................................................................................13
Menu programu ...........................................................................................................................14
Opcje środowiska ........................................................................................................................16
Globalne ustawienia ....................................................................................................................18
Pasek narzędzi ............................................................................................................................20
• Nowy projekt – START_STOP ..........................................................................21
Układ START_STOP ...................................................................................................................21
Tryb tworzenia projektu ...............................................................................................................22
Nowy plik .....................................................................................................................................22
Nazwa projektu ............................................................................................................................22
Zmienne globalne ........................................................................................................................24
Program .......................................................................................................................................27
Zadanie ........................................................................................................................................30
Zapis projektu w pliku XML .........................................................................................................31
Kompilacja ...................................................................................................................................32
Zapis skompilowanego projektu i zamknięcie .............................................................................33
• Czasomierze biblioteczne .................................................................................35
Opóźnione załączanie/wyłączanie ..............................................................................................35
Otwarcie istniejącego projektu ....................................................................................................35
Standardowa biblioteka IEC_61131 ............................................................................................36
Rozbudowa projektu START_STOP ...........................................................................................38
Indywidualna deklaracja zmiennej globalnej ...............................................................................40
Raport projektu ............................................................................................................................41
• Symulacja projektu ............................................................................................44
Uruchomienie programu symulatora CPSim ...............................................................................44
Główne okno symulatora .............................................................................................................45
Menu CPSim ...............................................................................................................................45
Pasek narzędzi ............................................................................................................................46
Uruchomienie i wstrzymanie symulacji projektu .........................................................................46
Lista zmiennych ...........................................................................................................................47
Okienka indywidualne .................................................................................................................48
Panele grupowe ...........................................................................................................................49
Opcje programu ...........................................................................................................................51
• Komunikacja w systemie rozproszonym .........................................................54
Charakterystyka ogólna ...............................................................................................................54
Modbus PC↔SMC ......................................................................................................................55
Modbus SMC↔moduły SM .........................................................................................................56
Połączenie PC↔SMC .................................................................................................................57
Uruchomienie konfiguratora CPCon ...........................................................................................57
Tabela zadań komunikacyjnych ..................................................................................................59
Menu CPCon ...............................................................................................................................60
Ustawienia transmisyjne ..............................................................................................................60
Komunikacja SMC↔urządzenia (moduły SM) ............................................................................61
Bezpośrednie wypełnianie tabeli (alternatywa dla kreatora) .......................................................67
Zapis konfiguracji w pliku ............................................................................................................67
Odczyt konfiguracji (dla kontroli, modyfikacji itp.) .......................................................................68
Synchronizacja czasu SMC .........................................................................................................69
Zapisanie programu do SMC ......................................................................................................69
Konfiguracja komunikacji Modbus pakietu SCADA ....................................................................70

1
Śledzenie on–line w CPSim ........................................................................................................71
• Zegar RTC ..........................................................................................................73
Opis problemu .............................................................................................................................73
Bloki komunikacyjne ....................................................................................................................74
Projekt RTC .................................................................................................................................75
Symulator CPSim ........................................................................................................................77
Konfigurator CPCon ....................................................................................................................78
Adresy po stronie PC ..................................................................................................................79
• Własna biblioteka projektanta ..........................................................................80
Biblioteka jako projekt .................................................................................................................80
Blok FB_AVERAGE ....................................................................................................................81
Blok FB_PULSE ..........................................................................................................................83
Eksport biblioteki .........................................................................................................................84
Testowanie ..................................................................................................................................88
Uzupełnianie biblioteki .................................................................................................................90
• Przegląd języka ST ............................................................................................91
Norma IEC 61131–3 ....................................................................................................................91
Typy danych i zmienne ................................................................................................................92
Programowanie w ST ..................................................................................................................96
• Funkcje .............................................................................................................100
Funkcje matematyczne i logiczne .............................................................................................100
Funkcje wyboru .........................................................................................................................101
Konwersje ..................................................................................................................................101
Czas bieŜący .............................................................................................................................102
Składniki czasu i daty ................................................................................................................102
Słowo statusowe .......................................................................................................................103
• Biblioteki bloków funkcjonalnych ..................................................................104
Biblioteka IEC_61131 ................................................................................................................104
Biblioteka Basic_blocks .............................................................................................................106
Bloki systemowe ........................................................................................................................109
• Uzupełnienia ....................................................................................................111
Poprawianie listy zmiennych .....................................................................................................111
Wypełnianie pustych obszarów .................................................................................................112
Zakładki .....................................................................................................................................112
Skróty klawiszowe .....................................................................................................................113
Błędy, ostrzeŜenia, podpowiedzi ...............................................................................................113
Dyrektywy kompilatora ..............................................................................................................115
Sesja symulacyjna .....................................................................................................................115
Pliki pakietu CPDev ...................................................................................................................117
LEDy stanu sterownika SMC .....................................................................................................117
Zmiana prędkości transmisji PC – SMC.....................................................................................118
Testy i niesprawności ................................................................................................................119
Nowe urządzenie obiektowe .....................................................................................................120
• Kody źródłowe bloków standardowych ........................................................121

2
WSTĘP
Sterownik programowalny SMC jest centralnym modułem decyzyjnym
w rozproszonych systemach kontrolno–pomiarowych z szybką komunikacją Modbus
(do 230.4 kbit/s). MoŜe obsługiwać zdalne moduły wejść/wyjść obiektowych,
przetworniki inteligentne, falowniki, mikrosterowniki, rejestratory, tablice świetlne,
panele HMI itd. NiezaleŜnie od tego komunikuje się z nadrzędnym komputerem PC
mającym zainstalowany pakiet wizualizacyjny. Dzięki integracji rozmaitych urządzeń
uzyskuje się wszechstronny, elastyczny system rozproszony o autentycznie szerokim
zakresie zastosowań.
Sterownik SMC jest programowany w języku ST (Structured Text) normy
IEC 61131-3, która jako PN–EN 61131–3 obowiązuje w Polsce od 2004 roku. Jest on
pierwszym polskim urządzeniem programowanym zgodnie z tą normą. Język ST,
jako najwszechstronniejszy spośród języków IEC, pozwala implementować
wszelkiego rodzaju algorytmy. Do programowania SMC słuŜy pakiet narzędziowy
CPDev (Control Program Developer) składający się z kompilatora CPDev (zarazem
nazwa pakietu), symulatora CPSim oraz konfiguratora systemu rozproszonego
CPCon. Pakiet uzupełniają trzy biblioteki – IEC_61131, Basic_blocks i
Complex_blocks. Projektant moŜe tworzyć własne biblioteki z funkcjami, blokami
funkcjonalnymi i programami.

SMC

R S232
RS485

RS485

SM C

R S485

Niniejsza instrukcja ma na celu przygotowanie uŜytkownika do efektywnego


projektowania systemów rozproszonych ze sterownikami SMC, zorientowanych na
przetwarzanie pomiarów, sterowanie logiczno–sekwencyjne, regulację ciągłą,
obliczenia procesowe itd. Instrukcję rozpoczyna opis instalacji pakietu CPDev,
sposobu jego uruchomienia, opcji menu i środowiska oraz dostępnych narzędzi. Tryb
tworzenia projektu jest przedstawiony na przykładzie układu START_STOP
włączającego najpierw silnik, a po paru sekundach pompę. Przykład ten przewija się
przez następne rozdziały.

3
Pierwszym krokiem prac nad projektem jest przygotowanie listy zmiennych
globalnych, które mają być dostępne we wszystkich programach. W drugim kroku
koduje się właściwy algorytm podzielony na jednostki organizacyjne oprogramowania
POU, tzn. programy, bloki funkcjonalne i funkcje. Edytor języka ST udostępnia skróty
klawiszowe, podpowiedzi, koloruje elementy kodu itd. Gotowy kod jest kompilowany.
JeŜeli napotkano błąd, odpowiedni komunikat wskazuje niepoprawną linię i rodzaj
błędu. Generowane są równieŜ ostrzeŜenia.
Utworzony projekt moŜna symulować za pomocą symulatora CPSim, aby we
wczesnym etapie wykryć i usunąć ewentualne usterki. Symulowane zmienne są
prezentowane na liście oraz w indywidualnych lub grupowych oknach. Okno grupowe
dotyczy zwykle wyodrębnionego urządzenia lub fragmentu sterowanej instalacji.
Zestaw okien i paneli moŜna zachować i później odtworzyć jako tzw. sesję
symulacyjną. Przygotowując plik z wartościami wejść w określonych chwilach moŜna
zautomatyzować przebieg symulacji. Wyniki są zapisywane w pliku tekstowym dla
sporządzenia wykresów za pomocą pakietów Excel, Matlab lub innych.
Końcowym krokiem jest skonfigurowanie systemu rozproszonego za pomocą
konfiguratora CPCon. Konfigurację komunikacji sterownika z urządzeniami
obiektowymi moŜna przeprowadzić dwojako. Dla modułów SM dostępne są gotowe
bloki komunikacyjne, które wystarczy wywołać. W innych przypadkach komunikację
konfiguruje się podając numer urządzenia, funkcję Modbusa i nazwy
transmitowanych zmiennych. Raport projektu zawiera listę zmiennych, na której
znajdują się ich adresy w sterowniku SMC potrzebne do skonfigurowania drivera
komunikacyjnego pakietu wizualizacyjnego po stronie komputera PC. Na
zakończenie skompilowany kod i dane konfiguracyjne przesyłane są do sterownika,
który niezwłocznie rozpoczyna pracę. Teraz za pomocą programu CPSim
uruchomionego w trybie on–line moŜna śledzić zmienne w programie wykonywanym
przez sterownik i ostatecznie zweryfikować poprawność projektu (tzw.
commissioning).
Oprócz układu START_STOP instrukcja zawiera projekt RTC (Real Time Control),
gdzie sterownik słuŜy do uruchamiania o określonej porze instalacji c.o., tzn. pieca i
pompy obiegowej. Wykorzystuje się zmienne typu DATE_AND_TIME oraz
TIME_OF_DAY. W obydwu przedstawionych przykładach rolę urządzeń obiektowych
pełnią rozproszone moduły wejścia/wyjścia serii SM. Konfigurator CPCon za pomocą
odpowiedniego pliku umoŜliwia uwzględnianie dodatkowych urządzeń.
Kompilator CPDev udostępnia większość standardowych funkcji normy IEC, tj.
matematyczne, logiczne, porównania, wyboru oraz konwersji typów danych. Inna
grupa funkcji obsługuje zegar systemowy, zegar RTC oraz określa składniki czasu i
daty. Biblioteka IEC_61131 zawiera standardowe bloki funkcjonalne normy, a
biblioteka Basic_blocks często stosowane bloki pomocnicze jak filtry, impulsatory,
dodatkowe przerzutniki itd. W bibliotece Complex_blocks (opisanej oddzielnie)
znajdują się regulator PID, kondycjoner sygnału pomiarowego, modulator szerokości
impulsów oraz blok automatycznego strojenia regulatora.
Projektant tworzy własną bibliotekę w ten sam sposób jak zwykły projekt
umieszczając w nim funkcje, bloki funkcjonalne i programy w zaleŜności od potrzeb.
Przedstawiono dwa przykłady tworzenia własnych bloków, pierwszy obliczający
średnie wejście i drugi generujący impuls po zadanym czasie.

4
Instrukcję uzupełnia przegląd języka ST obejmujący zasady nazewnictwa, typy
danych, stałe róŜnych typów, przykłady uŜycia instrukcji wyboru, pętli i przerwania
wykonywania programu. Operatory uszeregowano według priorytetów. Wewnątrz
programów moŜna uŜyć tablic jednowymiarowych. Jako przykłady podano kody
źródłowe standardowych bloków funkcjonalnych normy IEC 61131–3.
W Uzupełnieniach podano wskazówki edycyjne, wykaz skrótów klawiszowych, testy
wykonywane przez sterownik SMC itp.

5
INSTALACJA PAKIETU CPDev
System operacyjny
Windows Vista/XP/2000/98 SE

Instalowane komponenty Microsoftu


.NET Framework 2.0
.Biblioteki VC++ 8.0 SP1 (Redistributable)
.NET Framework 2.0 SP1

Płyta CD
Po włoŜeniu płyty CD z kompletnym oprogramowaniem pakietu CPDev powinna
automatycznie uruchomić się poniŜsza aplikacja startowa. Jeśli to nie nastąpi, naleŜy
uruchomić plik start_cpdev.hta zapisany na płycie.

Preinstalacja
Kliknięcie górnego przycisku Instaluj powoduje instalację zaznaczonych
komponentów Microsoftu.

6
Główny program instalacyjny
Uruchamia się go kliknięciem dolnego przycisku Instaluj. Uruchomienie sygnalizuje
Instalator pojawiający się w pasku aktywnych programów.

Linki podane w oknie startowym w sekcji Pliki specyficzne dla sterownika SMC
kierują do plików z firmwarem SMC oraz sterownikami do komunikacji PC↔SMC.
Uwaga. W przypadku pobrania samego pakietu ze strony internetowej
producenta (np. do aktualizacji) instalację przeprowadza program cpdev–lumel–
1.0.0.6.exe (prawdopodobnie z aktualniejszym numerem).

Język instalacji

Wybrany tutaj język dotyczy wyłącznie przebiegu instalacji. Wyboru języka samego
interfejsu CPDev dokonuje się w Globalnych ustawieniach (menu Narzędzia).

7
Okno powitalne

Lokalizacja CPDev

8
Skróty do programu

Dodatkowe zadania

9
Gotowość do instalacji

Postęp instalacji
Instalator sygnalizuje w pasku postęp w rozpakowywaniu i kopiowaniu plików.

10
Informacja dodatkowa

Zakończenie

Zaznaczenie Zresetuj... przywraca domyślne ustawienia w oknach Konfiguracji (zob.


Opcje środowiska).

11
Kontrola
Menu Start zawiera folder CPDev i skróty. W przypadku lokalizacji wg poprzednich
okien Menu wygląda następująco:

Na zawartość foldera CPDev składają się pliki .exe, .dll i katalogi.

Deinstalacja
Deinstalacji aplikacji dokonuje się za pomocą skrótu w Menu Start.

Uwaga. Okna prezentowane w instrukcji odpowiadają normalnemu rozmiarowi


czcionki 96 dpi. Przy innym rozmiarze niektóre elementy obrazów mogą
wyglądać trochę inaczej.

12
URUCHOMIENIE. MENU. NARZĘDZIA
Uruchomienie
JeŜeli podczas instalacji zaznaczono opcję Uruchom program CPDev, to
bezpośrednio po instalacji program CPDev uruchamia się automatycznie.
Standardowych uruchomień dokonuje się poprzez Menu Start lub ikonę na pulpicie.

• Menu Start, ikona

Pojawia się wtedy okno środowiska (główne), którego lewa część jest
przeznaczona na drzewo projektu, główna na kod programu, a dolna na
komunikaty kompilatora. Do momentu otwarcia projektu część ikon jest
nieaktywna (są szare).

Wraz z oknem środowiska w pasku aktywnych programów pojawia się ikona

13
Menu programu

Funkcjonalność menu programu i paska narzędziowego odpowiada obsłudze


programów MS Windows

Plik Edycja

Niektóre pozycje w opcjach menu są początkowo nieaktywne (szare). Opcje Kopiuj i


Wklej w menu Edycji oprócz standardowych operacji tekstowych mogą równieŜ
kopiować i wklejać obiekty drzewa projektu (jednostki POU, zmienne globalne itd. –
zob. dalej). Znajdź wyszukuje w oknie kodu programu tekst wpisany w oknie paska
narzędziowego. Szczegóły podano w Uzupełnieniach.

Widok

Szybkie przejście do drzewa projektów (po lewej) następuje po naciśnięciu Alt+0.


Alt+1 przeprowadza do okna edycji programu (głównego), a Alt+2 do listy
komunikatów (na dole).

Projekt
Opcja ta ma kluczowe znaczenie dla tworzenia projektu. Buduj dokonuje kompilacji
otwartego projektu lub jego elementu. Wyczyść usuwa pliki pośrednie powstałe
podczas kompilacji pozostawiając tylko dwa niezbędne (.xml, .xmc). Wystarczają one
dla archiwizacji projektu. Symulator i konfigurator systemu rozproszonego są

14
uruchamiane przez dwie następne opcje. Składnik operuje na elementach projektu
dodając je, usuwając, edytując itp. Opcja Właściwości wyświetla okno z
właściwościami obiektu zaznaczonego w drzewie projektu. Taką samą rolę pełni
standardowy skrót Alt+Enter.

Eksport i Import obsługują biblioteki oraz zewnętrzne pliki tekstowe z kodami


programów w języku ST (rozszerzenie .cst). Narzędzia edytują listę zmiennych
globalnych oraz udostępniają Raport zawierający m. in. adresy zmiennych dla
komunikacji z PC. Pozwalają takŜe otworzyć folder projektu w eksploratorze
Windows.

Rozwinięcia trzech ostatnich opcji menu programu CPDev wyglądają następująco:

Narzędzia Okna Pomoc

15
Narzędzia konfigurują środowisko, ustawiają parametry komunikacyjne oraz
pozwalają uruchomić kompilator, symulator i konfigurator dla programów w plikach
zewnętrznych (odpowiednio .cst, .dcp i .dcp lub .xmc). Pliki takie naleŜy otworzyć w
pojawiających się oknach.
Opcja Okna formuje ekran interfejsu. Pomoc udostępnia niniejszą instrukcję,
materiały informacyjne z listą funkcji, opisami bloków w bibliotekach, informacjami
Dla zaawansowanych, a takŜe pozwala zorientować się, czy pakiet CPDev w
międzyczasie aktualizowano.

Opcje środowiska
Zaznaczenie Opcji środowiska powoduje otwarcie okna Konfiguracja z kilkoma
zakładkami.

Projekty
Podaje się tu ścieŜkę do pliku ze specyfikacją maszyny wirtualnej VM wykonującej
programy w sterowniku SMC (pakiet CPDev jest przeznaczony dla róŜnych platform
sprzętowych podobnie jak Java). W SMC funkcjonuje jednozadaniowa Maszyna
Wirtualna więc zaznaczenie opcji UŜyj… naleŜy koniecznie pozostawić. Poziomy
optymalizacji wyjaśniono w materiałach Dla zaawansowanych.

W zakładce Projekty moŜna takŜe wskazać, które biblioteki mają być automatycznie
importowane do nowych projektów. Za pomocą przycisku dodaje się bibliotekę z
pojawiającego się okna z zawartością katalogu Biblioteki. Przycisk usuwa
zaznaczoną bibliotekę z pola Domyślne biblioteki.

16
Edycyjne
Zakładka określa tryb pracy z edytorem języka ST. Domyślny tryb Pojedynczy
kolorowany oznacza, Ŝe podczas edycji programu słowa kluczowe są wyświetlane w
róŜnych kolorach. Zapewnia to równieŜ tryb Podwójny, ale Pojedynczy dodatkowo
dostarcza pomoc kontekstową aktywowaną skrótem Ctrl+spacja. Pomoc odnosi się
do aktualnie wpisywanego identyfikatora i zawiera nazwy zmiennych globalnych,
lokalnych, funkcji itp. Automatyczna synchronizacja nazw składników ujednolica
nazwy tych samych elementów w róŜnych częściach projektu przyspieszając edycję.

Kolory
Podano schemat kolorów edytora, atrybuty tekstu, kolory czcionki, tła itp., wraz z
przykładem kolorystyki kodu.

RóŜne
Określa się liczbę ostatnio otwieranych plików, które mają być zapamiętane i pojawią
się w opcji Plik > Ostatnio otwierane (zob. wcześniej). Nazwę aktywnego projektu
wyróŜnia pogrubienie. Pytaj, czy przed otwarciem raportu w przeglądarce
(domyślnej) najpierw ma pojawić się zapytanie. Zastąp zamienia plik specyfikacji
maszyny MW plikiem domyślnym (z zakładki Projekty). W drzewie projektu moŜe się
znaleźć typ zmiennej globalnej, jej adres fizyczny (dziesiętny), adres logiczny wg
normy IEC, komentarz i ewentualnie adres fizyczny MW (heksadecymalny).

17
Kompilator
Funkcje Wyrównywania adresów umieszczają zmienne globalne lub lokalne pod
adresami wynikającymi z deklaracji AT i rozmiarów typów (zob. Przegląd języka ST).
Sprzyja to unikaniu pomyłek przy lokalizacji zmiennych. MoŜna zezwolić na uŜywanie
komentarzy z C++ oraz komentarzy zagnieŜdŜonych. Adresy Modbus lub InTouch w
raporcie kompilacji są potrzebne do konfiguracji pakietu wizualizacyjnego w PC.

Globalne ustawienia
Dotyczą wszystkich programów wchodzących w skład pakietu CPDev, tzn.
kompilatora, symulatora i konfiguratora. Zaznaczenie Globalnych ustawień (w
Narzędziach) powoduje otwarcie okna Konfiguracja pakietu CPDev z trzema
zakładkami.

Komunikacja
Górne pole Ustawienia komunikacji określa ustawienia portu komputera PC dla
komunikacji ze sterownikiem SMC. Sterownik dołącza się przez port USB, więc
numer portu (tutaj COM5) naleŜy odczytać w MenedŜerze urządzeń (zob.
Komunikacja w systemie rozproszonym. Pozostałe ustawienia pochodzą z karty
katalogowej SMC.

18
W polu Ustawienia sterownika SMC ustala się numer SMC dla komunikacji z PC oraz
wybiera parametry komunikacji SMC z modułami wejścia/wyjścia (lub innymi
urządzeniami obiektowymi). Parametry te muszą być oczywiście takie same, jak
ustawione w modułach. Tryb 8N1 wybrany poniŜej oznacza 8 bitów danych,
nieparzystość N i 1 bit stopu.

Interfejs
Okno słuŜy do wyboru języka interfejsu pakietu CPDev (kompilator, symulator,
konfigurator).

Aktualizacja
JeŜeli komputer jest dołączony do sieci, zakładka pozwala ustawić konfigurację dla
sprawdzenia, czy na serwerze aktualizacji pojawiła się nowa wersja pakietu CPDev.
Konfiguracji serwera proxy dokonuje administrator sieci lokalnej uŜytkownika.

19
Uwaga. Hasła uŜytkownika aktualizacji i uŜytkownika proxy nie są szyfrowane!
Dlatego nie powinno się wpisywać ich na stałe do konfiguracji, a tylko
bezpośrednio przed sprawdzeniem. Zaraz potem naleŜy je skasować.

Pasek narzędzi

Nowy Otwórz Zapisz Drukuj

Podgląd wydruku Pomoc Wyszukaj tekst

Buduj Uruchom symulator Uruchom konfigurator

Drukuj drukuje raport projektu (otwartego) oraz kody źródłowe. Opcja Plik > Drukuj w
menu pełni tę samą rolę, a ponadto umoŜliwia wybór drukarki i ustawienie wydruku
(strony, kopie itp.). Podglądu wydruku na razie nie zaimplementowano.

20
NOWY PROJEKT – START_STOP
Układ START_STOP
Celem jest zaprojektowanie układu załączania i wyłączania urządzenia, czyli tzw.
układu START_STOP, występującego praktycznie w kaŜdym systemie sterowania.
Przykładowe schematy blokowy i przekaźnikowy w odniesieniu do sterowania
silnikiem pokazano niŜej.

Schemat blokowy

OR
START AND
SILNIK
STOP
ALARM

Schemat przekaźnikowy

START STOP ALARM SILNIK

SILNIK

Zakłada się, Ŝe sygnały START, STOP i ALARM są przesyłane do sterownika SMC


łączem RS-485 ze zdalnego modułu wejść binarnych, zaś sygnał SILNIK jest
wysyłany przez sterownik do modułu wyjść binarnych. Komunikacja przebiega
według protokołu MODBUS. W pamięci sterownika sygnałom tym mają być
przydzielone następujące adresy (logiczne):

START 0000 SILNIK 0008


STOP 0001
ALARM 0002

Sąsiedztwo adresów trzech pierwszych sygnałów wskazuje, Ŝe moŜna je odczytać


jednym komunikatem. Sygnały START, STOP, ALARM i SILNIK są bezpośrednio
związane ze sprzętem, więc zgodnie z normą IEC 61131-3 powinny być
potraktowane jako zmienne globalne.

Uwaga. Układ START_STOP moŜna takŜe zrealizować za pomocą przerzutnika


RS podając sygnał START na wejście S, a sygnał STOP na wejście R.

21
Tryb tworzenia projektu
Czynnościami wykonywanymi podczas tworzenia nowego projektu są:
1. Utworzenie nowego pliku
2. Nadanie projektowi nazwy
3. Deklaracja zmiennych globalnych
4. Wpisanie programu
5. Deklaracja zadania
6. Zapis projektu w pliku XML
7. Kompilacja
8. Zapis skompilowanego programu i zamknięcie projektu
Wpisanie programu moŜe ewentualnie poprzedzać deklarację zmiennych globalnych.
Projektowany będzie układ START_STOP opisany powyŜej.

Nowy plik
• Plik > Nowy (Ctrl+N)

lub ikona

Drzewo projektu zawiera projekt BezNazwy w postaci wyjściowej.

Nazwa projektu
Projektowi zostanie nadana nazwa START_STOP wpisywana w otwieranym oknie
Właściwości projektu.
• Drzewo projektu > Zaznaczyć projekt (BezNazwy)
Otwarcia dokonuje się czterema sposobami:
1) Menu kontekstowe > Właściwości

22
2) Projekt > Opcje

3) Projekt > Składnik > Właściwości

4) Alt + Enter

Otwiera się okno Właściwości projektu.

• Zamiast BezNazwy naleŜy wpisać właściwą nazwę projektu, czyli START_STOP


oraz ew. wypełnić puste pola grupy Informacje. Pozostałe pola zostaną
wypełnione automatycznie w miarę postępu prac nad projektem. Nazwa musi być
poprawnym identyfikatorem w ST, tzn. nie zawierać spacji, ani zaczynać się od
cyfry (zob. Przegląd języka ST).

23
OK
Nowa nazwa pojawia się w drzewie projektu.

Zaznaczenie Wersji, Kierownika i Przedsiębiorstwa po lewej stronie okna


Właściwości projektu powoduje, Ŝe znajdą się one w metryczce projektu zapisywanej
w sterowniku wraz z programem (zob. Komunikacja w systemie rozproszonym).
Odczytując metryczkę moŜna zawsze zorientować się, jaki program wykonuje
sterownik i kiedy on powstał.

Zmienne globalne
Są to zmienne dostępne we wszystkich programach projektu, zazwyczaj związane ze
sprzętem. Deklaracji zmiennych globalnych moŜna dokonać trzema sposobami:
1) Zbiorcza deklaracja zmiennych na wspólnej liście
2) Indywidualna deklaracja kaŜdej zmiennej w osobnym oknie
3) Deklaracja VAR_GLOBAL przed programem
Zbiorcza deklaracja zmiennych na wspólnej liście daje najwięcej moŜliwości
grupowego zarządzania, łącznie z automatycznym obliczaniem pierwszego wolnego
adresu. Indywidualną deklarację przedstawiono w następnym rozdziale. Deklaracja
VAR_GLOBAL wymaga zmiany kilku opcji CPDev (zob. Dla zaawansowanych).

Lista zmiennych globalnych


• Otwieranie listy
Dostępne są dwa sposoby:

24
1) Zaznaczyć Zmienne globalne w drzewie projektu > Menu kontekstowe >
Edytuj listę zmiennych

2) Projekt > Narzędzia > Zmienne globalne


Pojawia się okno z pustą listą zmiennych.

Przycisk Dodaj dodaje do listy nowe zmienne. Usuń usuwa zmienne zaznaczone,
a Popraw zastępuje parametry zaznaczonych zmiennych nowymi wpisami.
• Grupa zmiennych, typ
Grupę tworzą zmienne tego samego typu, które będą miały sąsiednie adresy.
Nazwy zmiennych grupy, tutaj START, STOP i ALARM, naleŜy wpisać w polu
Nazwa. Typ wybiera się z rozwijanej listy lub wpisuje ręcznie (wystarczy wpisać
pierwsze litery, nacisnąć strzałkę ↓, a edytor sam dokona dopasowania).

Uwaga. Nie obsługiwane są typy LREAL, STRING, USINT, UINT, UDINT i


ULINT przewidziane w normie IEC 61131–3.
• Adres
Zaznaczenie opcji Adres powoduje automatyczne wypełnienie prawego pola
pierwszym wolnym adresem dostosowanym do typu zmiennej, tutaj 0000.
Pozostawienie pustej opcji Adres spowoduje, Ŝe zmienna zostanie ulokowana
automatycznie. W przypadku typu innego niŜ BOOL adres rozpoczyna się od
modyfikatora rozmiaru (zob. Przegląd języka ST – Lokalizacja zmiennych
globalnych; BOOL nie wymaga modyfikatora). Wpisywany adres moŜna ew.
poprzedzić znakiem % (jak w normie IEC). Zmienna, której nadano adres
uwaŜana jest za sprzętową.

25
• Stała, podtrzymywana
Atrybut stała (CONSTANT w IEC) deklaruje zmienną, która nie ulega zmianie
podczas wykonywania programu, a podtrzymywana (RETAIN) zmienną, której
ostatnia wartość jest zachowana podczas zaniku zasilania.
• Wartość początkowa
Pozostawienie niezaznaczonej opcji Wartość początkowa powoduje ustawienie
wartości domyślnej, zerowej dla typu BOOL. W przypadku zmiennej
podtrzymywanej wartość początkowa dotyczy tylko tzw. zimnego startu (pierwsze
uruchomienie programu). Przy ciepłym restarcie (wznowienie zasilania) obliczenia
są wznawiane od wartości podtrzymanej w pamięci. Natomiast zmienną, która nie
jest podtrzymywana, inicjuje się wartością początkową zarówno przy ciepłym, jak i
zimnym starcie.
• Komentarz
Tekst z deklaracji zmiennej pojawia się w podpowiedziach aktywowanych
naciśnięciem Ctrl+spacja (wprowadza go dyrektywa $COMMENT, zob.
Uzupełnienia).
• Dodaj
Naciśnięcie przycisku powoduje wypełnienie listy zadeklarowanymi zmiennymi.

• OK
Okno z listą znika, a w drzewie projektu w grupie zmiennych globalnych pojawiają
się START, STOP i ALARM.

Z kaŜdą zmienną związany jest folder, w którym znajdują się typ, adresy i
komentarz, pod warunkiem, Ŝe zostały wybrane w oknie Konfiguracja > RóŜne.
PowyŜej pokazano foldery zmiennych START i STOP, z adresami fizycznym i
logicznym. Są one takie jak w kolumnie Adres na Liście zmiennych globalnych.
Gdyby zmienna miała być ulokowana automatycznie, to w polach adresów
pojawiłby się napis auto.

26
• Zmienna SILNIK
Nie dołączono jej do poprzedniej grupy, bo powinna mieć adres 0008, a nie adres
kolejny (będzie przesyłana do innego modułu we/wy, zob. Komunikacja...). Po
zaznaczeniu opcji Adres, zamiast kolejnego adresu 0003 naleŜy wpisać 0008.

Po Dodaj i OK zmienna SILNIK pojawia się w drzewie projektu.

Poprawianie i usuwanie
Zaznaczenie zmiennej powoduje, Ŝe nazwa, typ oraz pozostałe parametry zostają
odtworzone. Poprawiania dokonuje się zmieniając wpisy i naciskając Popraw.
Usunięcia dokonuje Usuń. Zaznaczenie kilku zmiennych (za pomocą Shift lub Ctrl)
odtwarza tylko te parametry, które były jednakowe. Nowy wpis i zatwierdzenie
wprowadza zmianę do wszystkich zaznaczonych zmiennych.

Uwaga. Pakiet CPDev wyznacza wprawdzie pierwszy wolny adres, ale nie
sprawdza, czy cała grupa zmiennych zmieści się przed wcześniej
zadeklarowanymi zmiennymi (jeŜeli takie były). W razie kolizji odpowiednie
zmienne zostaną podświetlone na czerwono. Nakładające się adresy naleŜy
poprawić. Przykład poprawiania listy zmiennych podano w Uzupełnieniach.

Program
Nazwę programu (i ew. kod) wpisuje się w otwieranym oknie Właściwości programu.
Nazwa programu i podgląd
• Zaznaczyć projekt (START_STOP) > Menu kontekstowe >
Dodaj składnik > Program

Otwiera się okno Właściwości programu.


Alternatywny sposób otwarcia tego okna to: zaznaczyć POU > Menu kontekstowe
> Dodaj > Program

27
• Wstępną nazwę PRG zastąpić właściwą nazwą. Tutaj będzie nią
PRG_START_STOP (przedrostek PRG nie jest konieczny; ma on jedynie
wskazywać, Ŝe chodzi o program, a nie o projekt). Automatyczna synchronizacja
nazw składników (w Opcjach środowiska) powoduje, Ŝe nazwa programu
wpisywana u góry pojawia się jednocześnie w linii 001 kodu.

OK
W drzewie projektu w grupie jednostek POU pojawia się nowy program
PRG_START_STOP.

• Dwukrotnie kliknąć program PRG_START_STOP w drzewie projektu.


Otwiera się okno programu w trybie edycji z zaląŜkiem struktury programu (jeŜeli
w Opcjach środowiska > Edycyjne pozostawiono zaznaczone Automatyczne
odblokowanie składnika do edycji).

28
Wpisywanie kodu
• Wpisywany kod programu PRG_START_STOP podano w poniŜszym oknie.
Zmienne START, STOP, ALARM i SILNIK są zmiennymi globalnymi, więc
wskazania, Ŝe będą uŜyte w programie dokonuje deklaracja VAR_EXTERNAL.
Program zawiera jedną instrukcję podstawienia, która odpowiada schematom
podanym poprzednio.

W miarę wpisywania funkcjonalnie róŜne elementy programu zostają odmiennie


pokolorowane i ew. pogrubione. Ułatwia to weryfikację. Edytor jest wyposaŜony w
szereg skrótów klawiszowych ułatwiających wpisanie kodu i nawigację. Podano je
w rozdziale Uzupełnienia.
Uwaga. Kod moŜna byłoby równieŜ wpisać w oknie Właściwości programu
bezpośrednio po nadaniu programowi nazwy.

Podgląd a edycja
Tryb podglądu słuŜy do przeglądania programów i innych elementów projektu
chroniąc je przed przypadkową modyfikacją. Do podglądu moŜna przejść
następująco:

29
• Zaznaczyć program > Projekt > Składnik > Zablokuj (Ctrl+D)

Powrót do trybu edycji wygląda analogicznie:


• Projekt > Składnik > Odblokuj (Ctrl+E)

Zadanie
W sterowniku SMC moŜna zadeklarować jedno zadanie. Jego nazwę oraz
wykonywane w ramach niego programy określa się za pomocą otwieranego okna
Właściwości zadania.
• Zaznaczyć projekt > Menu kontekstowe > Dodaj składnik > Zadanie

Otwiera się okno Właściwości zadania.


• Nazwa i typ zadania. Czas cyklu
Wypełnić odpowiednie pola. W oknie pokazanym niŜej jest to ZD_START_STOP,
Cyklicznie i 200 ms. Typ Ciągłe oznacza, Ŝe natychmiast po zakończeniu
wykonywania programu i obsłudze komunikacji rozpoczyna się następne
wykonywanie.

30
• W polu Dostępne programy zaznaczyć właściwy program (tutaj
PRG_START_STOP). Jednym z dwu górnych przycisków przeprowadzić go na
pole Wykonywane programy.

OK
Nazwę tego samego programu moŜna powtórzyć w polu Wykonywane programy.
Będzie on wtedy wykonywany częściej niŜ inne.
Drzewo projektu zawiera ZD_START_STOP w grupie Zadania.

Uwaga. JeŜeli dołączone biblioteki zawierają programy, to pojawiają się one w


polu Dostępne programy okna Właściwości zadania.

Zapis projektu w pliku XML


Tekst projektu jest zapisywany w pliku o dowolnej nazwie, tutaj np. Start_Stop, w
formacie XML.

• Plik > Zapisz (Ctrl+S) lub ikona


Pojawia się okno Zapisywanie jako.

W katalogu VM znajduje się plik z opisem XML maszyny wirtualnej dla sterownika
SMC (tzw. plik LCF – Library Configuration File).

• ZałóŜmy, Ŝe w nadrzędnym katalogu Moje_projekty


znajdą się katalogi z plikami opracowywanych projektów.
Tworzymy w nim katalog START_STOP o ścieŜce
\CPDev\Moje_projekty\START_STOP
Katalog START_STOP naleŜy otworzyć.

31
• W polu Nazwa pliku naleŜy wpisać Start_Stop. Rozszerzenie .xml zostanie
dodane automatycznie tworząc plik Start_Stop.xml.

• Kliknąć Zapisz.

Kompilacja
Program jest kompilowany do postaci binarnej tzw. uniwersalnego kodu
wykonywalnego dla maszyny wirtualnej.
• Zaznaczyć dowolny element projektu > Projekt > Buduj (F6)

Okno wyników zawiera rezultat kompilacji.

Zmienne globalne, które miały być ulokowane automatycznie otrzymują konkretne


adresy fizyczne (zob. Konfiguracja > RóŜne). Są one widoczne w drzewie projektu,
pod typem, w nawiasach. Adresy logiczne i adresy na liście zmiennych nadal są
oznaczone przez auto.

Błędy i ostrzeŜenia
W razie pojawienia się błędów w oknie wyników naleŜy dwukrotnie kliknąć linię z
opisem błędu (z krzyŜykiem). Wyświetlone zostanie wtedy okno kodu programu
(edycyjne) z kursorem w linii, w której najprawdopodobniej znajduje się błąd. Błędy
nie związane ze składnią języka ST, np. pominięcie deklaracji zadania,
sygnalizowane są na samym początku kodu (linia 0 lub -1).

32
OstrzeŜenie sygnalizuje „drogowy” znak ostrzegawczy. Gdyby np. zmiennej ALARM
przypisać adres 0001 (jak STOP), a nie 0002, to pojawi się następujące ostrzeŜenie

a na Liście zmiennych globalnych linia zmiennej zostanie podświetlona na czerwono.

Dwukrotne kliknięcie znaku ostrzeŜenia powoduje wyświetlenie okna Właściwości


zmiennej globalnej, tej, której adres pokrywa się z wcześniejszym. NaleŜy go
skorygować i zatwierdzić OK. Więcej informacji na temat błędów i ostrzeŜeń
zawierają Uzupełnienia.

Grupowe poprawianie Listy zmiennych globalnych opisano w Uzupełnieniach.

Zapis skompilowanego projektu i zamknięcie


Projekt jest zapisywany w postaci skompilowanej przeznaczonej do symulacji i
skonfigurowania komunikacji ze sterownikiem (zob. dalej). Na postać tą składa się
zestaw plików, w tym jeden z rozszerzeniem .dcp wykorzystywany przez symulator
CPSim i konfigurator komunikacji CPCon.
• Zaznaczyć projekt > Plik > Zapisz (Ctrl+S)
• Plik > Zamknij
Pojawia się okno CPDev – zamykanie projektu z zapytaniem o zapisanie zmian
oraz informujące o połoŜeniu pliku projektu na dysku.

33
NaleŜy wybrać odpowiednią opcję. Jeśli Zamknij następuje po Zapisz, to
wystarcza Nie. Okno CPDev – zamykanie projektu pojawia się zawsze, nawet gdy
Ŝadnych zmian w projekcie nie wprowadzano (zob. Dla zaawansowanych, gdyby
naleŜało z niego zrezygnować).

Uwaga. Zamknięcia projektu przed dalszą rozbudową, symulacją i


skonfigurowaniem komunikacji dokonano tutaj wyłącznie dlatego, aby za chwilę
pokazać, jak się go ponownie otwiera. Normalnie po pomyślnej kompilacji,
mając zapisany projekt, przechodzi się bezpośrednio do symulacji lub
konfiguracji (ikony lub opcje Uruchom symulator, Uruchom konfigurator).

34
CZASOMIERZE BIBLIOTECZNE
Opóźnione załączanie/wyłączanie
Układ START_STOP zostanie rozszerzony o załączanie i wyłączanie pompy w 5
sekund po załączeniu/wyłączeniu silnika. Ograniczenia mocy często nie zezwalają
na jednoczesne załączanie lub wyłączanie kilku urządzeń.
Norma IEC 61131–3 definiuje zestaw standardowych bloków funkcjonalnych, wśród
których znajdują się dwa czasomierze (timery):
TON – opóźnione załączenie
TOF – opóźnione wyłączenie.
Oznaczenia wejść/wyjść, ich typy i przebiegi czasowe wyglądają następująco:

TON TOF
BOOL IN Q BOOL BOOL IN Q BOOL

TIME PT ET TIME TIME PT ET TIME

IN IN
PT
Q Q
PT
ET ET

Bloki te nadają się bezpośrednio do opóźnionego załączania i wyłączania.


Zakładając, Ŝe egzemplarze bloków TON i TOF (instancje) otrzymają nazwy
odpowiednio OPOZN_ON i OPOZN_OFF, dotychczasowy program projektu
START_STOP naleŜy uzupełnić o instrukcje odpowiadające następującemu
schematowi:

OPOZN_ON OPOZN_OFF

TON TOF
SILNIK POMPA
IN Q IN Q
t#5s PT ET t#5s PT ET

Przyjmujemy, Ŝe sygnał POMPA ma być przesyłany przez sterownik do tego samego


modułu wyjść binarnych co SILNIK. Adresem logicznym w pamięci jest 0009.

Otwarcie istniejącego projektu


Zakłada się, Ŝe program CPDev został uruchomiony.
• Otwarcie pliku

Plik > Otwórz (Ctrl+O) lub ikona


Pojawia się okno Otwieranie.

35
• Odszukać katalog START_STOP w Moich_projektach, otworzyć i zaznaczyć plik
Start_Stop.xml.

Nazwa i typ pojawiają się w dolnych polach okna.


• Otwórz
W lewym oknie środowiska CPDev pojawia się dotychczasowe drzewo projektu
START_STOP.

Standardowa biblioteka IEC_61131


Czasomierze TON, TOF wraz z innymi blokami standardowymi znajdują się w
bibliotece IEC_61131. Zakładamy, Ŝe bibliotekę tę wskazano w Opcjach środowiska
(menu Narzędzia, zakładka Projekty) jako domyślną, tzn. automatycznie
importowaną do nowych projektów. Została więc ona juŜ dołączona do projektu
START_STOP.

Zawartość biblioteki moŜna określić rozwijając drzewo lub otwierając okno


Właściwości biblioteki.

36
• Zaznaczyć bibliotekę IEC_61131 > Menu kontekstowe > Właściwości

Uwaga. Czas podany w wierszu Wersja jest czasem, kiedy bibliotekę ostatnio
kompilowano.

• Przyciski
− wybór biblioteki (przejście do katalogu Biblioteki)
− zmiana rodzaju zaznaczenia wszystkich obiektów na przeciwny
− podgląd deklaracji zaznaczonego obiektu
− zmiana zaznaczenia bloków funkcjonalnych na przeciwny
− j.w., ale odpowiednio programy, funkcje i zmienne globalne.

Przycisk wyboru biblioteki jest aktywny tylko w przypadku eksportu lub importu
biblioteki poprzez Projekt > Eksport/Import > Biblioteka.

37
• Czasomierze TON, TOF
Za pomocą znaczników po lewej stronie i ew. przycisków po prawej „odznaczyć”
inne bloki biblioteki pozostawiając zaznaczone tylko TON i TOF.

Dokumentację bloku bibliotecznego udostępnia zarządca systemu pomocy


aktywowany naciśnięciem F1, po wcześniejszym wskazaniu kursorem tego bloku
w deklaracji VAL na początku programu.

Dołączanie obiektów biblioteki


Kompilator dołącza tylko te obiekty (bloki, funkcje, programy, zmienne), które
zostały zaznaczone.

Rozbudowa projektu START_STOP


NaleŜy rozbudować program PRG_START_STOP oraz dodać zmienną globalną
POMPA.

Program
• Dwukrotnie kliknąć program PRG_START_STOP w drzewie projektu.
Program pojawia się w oknie głównym.
(JeŜeli tryb podglądu, to za pomocą Ctrl+E przejść do trybu edycji.)
• Uzupełnić kod jak w poniŜszym oknie.
Na uzupełnienia składają się:
– deklaracje egzemplarzy OPOZN_ON, OPOZN_OFF czasomierzy TON, TOF
– deklaracja zmiennej globalnej POMPA
– trzy instrukcje odpowiadające szeregowemu połączeniu czasomierzy i
ustawianiu zmiennej POMPA.

38
Dyrektywy (*$READ*), (*$WRITE*) stosuje się opcjonalnie dla zmiennych
deklarowanych za pomocą VAR_EXTERNAL. Dyrektywy gwarantują, Ŝe zmienne te
pozostaną w programie jako „tylko–do–odczytu” lub „tylko–do–zapisu”. Opis dyrektyw
znajduje się w rozdziale Uzupełnienia.
Struktura wejść/wyjść bloków funkcjonalnych jest prezentowana jako „dymek” oraz w
drzewie projektu (jak niŜej). Pojawia się ona takŜe w głównym oknie po zaznaczeniu
bloku i kliknięciu Enter.

Wyjścia ET (Elapsed Time) obydwu czasomierzy nie są w tym programie


wykorzystywane.

39
Uwaga. Linie 019 i 020 w PRG_START_STOP moŜna zastąpić jedną linią
stosując wewnętrzne podstawienie Q=>POMPA.

Autouzupełnianie
Dokonana wcześniej kompilacja projektu stwarza moŜliwość autouzupełniania
(podpowiedzi kontekstowej), czyli dokończenia wpisywanej nazwy typu, funkcji,
zmiennej itd., jeŜeli nazwa ta juŜ istnieje. Naciśnięcie Ctrl + Spacja po wpisaniu
przynajmniej jednej litery generuje listę nazw, które tak samo się rozpoczynają i
wcześniej zostały poprawnie skompilowane. Z opcji Buduj kompilującej projekt warto
więc korzystać na bieŜąco.

Nowa zmienna globalna


• Zaznaczyć Zmienne globalne > Menu kontekstowe > Edytuj listę zmiennych
Wypełnić następująco górne pola Listy zmiennych globalnych i kliknąć Dodaj.

Zmienną POMPA moŜna byłoby teŜ wprowadzić indywidualnie, co niekiedy moŜe


być wygodniejsze.

Indywidualna deklaracja zmiennej globalnej


• MoŜliwe są dwa sposoby:
1) Zaznaczyć projekt START_STOP > Dodaj składnik > Zmienna globalna
2) Zaznaczyć Zmienne globalne > Dodaj zmienną

40
• Pojawia się okno Właściwości zmiennej globalnej, którego górną część naleŜy
wypełnić podobnie jak poprzednio. Dolna część aktualizowana jest automatycznie
w trakcie wpisywania. Okno Właściwości zmiennej globalnej słuŜy równieŜ do
korygowania adresów zmiennych na wypadek ostrzeŜeń (zob. Nowy projekt –
START_STOP).

• Po naciśnięciu OK. w drzewie projektu pojawia się zmienna POMPA (folder).

Kompilacja projektu
• Zaznaczyć projekt
• Kompilacja: Projekt > Buduj (F6)

Raport projektu
Raport zawiera informacje o projekcie, listę zmiennych z adresami, zajętość pamięci
itp. Adresacji dotyczy rozdział Komunikacja.

• Projekt > Narzędzia > Raport

41
Kolumna Pełna Nazwa zawiera nazwę zmiennej z deklaracji poprzedzoną nazwą
projektu (podobnie dla zadań).

Sortowanie
Bezpośrednio po otwarciu raportu kolejność zmiennych na liście wynika z deklaracji.
MoŜna ją jednak zmienić sortując kolumnę przez kliknięcie nagłówka. Ukazuje się
wtedy znak sortowania rosnącego lub malejącego . ZaleŜnie od kolumny
sortowanie moŜe być tekstowe lub liczbowe. NiŜej pokazano listę zmiennych
posortowaną rosnąco według kolumny Nazwa.

Raport jako plik


Kliknięcie Zapisz do pliku w oknie raportu powoduje zapisanie okna w formacie
pokazanym niŜej

42
Zapis projektu
• Zapis: Plik > Zapisz (Ctrl + S)
Wyjaśnienie. Nie pojawia się juŜ teraz okno Zapisywanie jako, bo połoŜenie
pliku na dysku zostało określone przy poprzednim zapisie (przed rozbudową o
czasomierze TON, TOF).

43
SYMULACJA PROJEKTU
Celem symulacji jest sprawdzenie funkcjonowania skompilowanego projektu, tzn.
zadania i wchodzących w jego skład programów, przed zapisaniem w sterowniku.
Pozwala to wykryć i skorygować ewentualne usterki.

Uruchomienie programu symulatora CPSim


Symulator moŜna uruchomić trzema sposobami:

1) Menu CPDev: Projekt > Uruchom symulator

2) Menu CPDev: Narzędzia > Symulator

3) Menu Start: CPDev > CPSim

Pierwszy sposób stosuje się bezpośrednio po kompilacji projektu opcją Buduj, która
tworzy plik z rozszerzeniem .dcp. Uruchamiany symulator CPSim automatycznie
wczytuje plik ze skompilowanym projektem. Dwa następne sposoby wymagają
ręcznego otwarcia pliku .dcp.
• Otwieranie pliku do symulacji
JeŜeli symulator został uruchomiony drugim lub trzecim sposobem, plik do
symulacji naleŜy wybrać opcją Plik > Otwórz plik DCP lub przyciskiem w
pasku narzędzi.

44
Uwaga. JeŜeli po raz kolejny symuluje się projekt, dla którego poprzednio
zapisano sesję symulacyjną (zob. Opcje programu dalej), to przed otwarciem
okna symulatora pojawi się pytanie Czy otworzyć takŜe plik sesji?

Główne okno symulatora


Po uruchomieniu symulatora dla projektu START_STOP pojawia się następujące
okno:

Zasadniczy obszar okna jest podzielony na dwa obszary:


– drzewo zmiennych (po lewej)
– obszar podglądu.
W górnej części widoczne jest menu oraz pasek narzędzi, a w dolnej pasek stanu.
Drzewo zmiennych róŜni się nieco od drzewa projektu (poprzedniego), bo jest
zorientowane na symulację. Obszar podglądu zawiera domyślnie jedno okno z listą
zmiennych globalnych. Rozmiary głównego okna są dopasowywane. W obszarze
podglądu moŜna równieŜ umieszczać okna indywidualne zawierające pojedyncze
zmienne lub panele grupowe. Obszar ten jest zdolny pomieścić dowolną liczbę okien.
Dostęp do okien niewidocznych zapewniają paski przewijania pojawiające się, gdy
niektóre okna znajdują się poza widocznym obszarem.

Menu CPSim

Symulacja oznacza śledzenie funkcjonowania projektu w trybie off–line. PoniewaŜ


ten sam interfejs będzie słuŜył dla śledzenia w trybie on–line (po zapisaniu w
sterowniku; zob. Komunikacja w systemie rozproszonym), więc w menu symulatora
CPSim i jego narzędziach nazwa śledzenie dotyczy zarówno trybu off–line jak i on–
line.

45
Plik Śledzenie (symulacja)

Podgląd Narzędzia Okno

Dane sesji symulacyjnej moŜna zapisać w pliku celem powtórzenia symulacji.


Symulowane zmienne moŜna rejestrować dla późniejszej analizy, np. na wykresach.
Źródłem danych moŜe być Symulator (off–line) lub program komunikacyjny Modbus–
SMC (on–line). Opcja Okno > Rozmieść grupuje obok siebie porozsuwane okna.

Pasek narzędzi

Otwórz program Otwórz sesję Zapisz sesję Panel grupowy

Rozmieść okna Włącz Wyłącz Wstrzymaj lub wznów

Reset programu (Uruchamia program...)

Uruchomienie i wstrzymanie symulacji projektu


Po otwarciu pliku .dcp ze skompilowanym projektem moŜna przystąpić do symulacji.
• Śledzenie > Włącz lub ikona
Symulacja rozpoczyna się. Komórki Wartość w oknach obszaru poglądu podają
początkowe wartości zmiennych (przewaŜnie zerowe). Opcja Reset programu
działa podobnie, lecz zmienne podtrzymywane (RETAIN) są wcześniej
przywracane do wartości domyślnych.

46
Pasek postępu na dole sygnalizuje tok symulacji.
• Wstrzymanie symulacji
Śledzenie > Wstrzymaj lub wznów albo ikona .
Wznowienie następuje przez ponowny wybór opcji lub kliknięcie ikony.
• Zakończenie symulacji
Śledzenie > Wyłącz lub ikona .

Lista zmiennych
Po otwarciu pliku .dcp w obszarze podglądu pojawia się standardowo lista
zmiennych globalnych. Lista umoŜliwia obserwację lub modyfikację wartości
zmiennych w trybie śledzenia i jest rodzajem panelu grupowego (zob. dalej).
• Wpisywanie wartości zmiennej

– Zaznaczyć odpowiednią komórkę

– Dwukrotnie kliknąć w celu rozpoczęcia edycji


– Wpisać nową wartość, potwierdzić
przez Enter
PoniŜsze okno odpowiada sytuacji, gdy od momentu wpisania 1 jako wartości
START upłynęło ponad 5 sekund, a więc SILNIK i POMPA zostały włączone.

47
• Dodawanie zmiennych
Zaznaczyć zmienną w drzewie po lewej i przeciągnąć ją do obszaru listy trzymając
wciśnięty lewy klawisz myszy.
• Usuwanie zmiennych
Zaznaczyć wiersz > Menu kontekstowe > Usuń

Okienka indywidualne
W okienkach indywidualnych moŜna obserwować lub modyfikować wartości
pojedynczych zmiennych w trybie śledzenia.
• Dodawanie nowego okienka
– Zaznaczyć odpowiednią zmienną w drzewie zmiennych po lewej.
– Okno moŜna dodać trzema sposobami:
1) Przeciągnąć zmienną do obszaru podglądu trzymając wciśnięty lewy
klawisz myszy.
2) Wybrać z menu opcję Podgląd > Okno zmiennej.
3) Wybrać z menu kontekstowego (prawy klawisz) opcję Okno zmiennej.

PoniŜej przedstawiono wygląd okna CPSim po utworzeniu okienka indywidualnego


dla zmiennej SILNIK.

48
Wpisywanie wartości w okienku indywidualnym wygląda podobnie jak na liście, z tym,
Ŝe edycję moŜna rozpocząć nie tylko dwukrotnym kliknięciem, ale równieŜ
naciśnięciem Enter.
• Usuwanie okienka
Kliknąć przycisk w usuwanym oknie.
• Wyświetlanie dodatkowych informacji o zmiennej
W oknie zmiennej kliknąć przycisk .
Pojawia się okno z dodatkowymi informacjami (typ, adres, nazwa).

Panele grupowe
Panele grupowe umoŜliwiają śledzenie zestawu zmiennych w jednym oknie.
Zmienne moŜna grupować w oknach dwojakiego rodzaju:
– listy zmiennych
– panele kontrolne.

49
Obsługa list zmiennych została wcześniej omówiona na przykładzie listy zmiennych
globalnych, dlatego poniŜej opisano tylko panele grupowe.
• Z menu wybrać opcję Podgląd > Panel grupowy lub kliknąć ikonę w pasku
narzędzi.
Pojawia się okno Właściwości panelu.

• Wpisać właściwą nazwę, jako typ panelu wybrać Elementy kontrolne i zatwierdzić
OK.
Pojawia się pusty panel z wpisaną nazwą, tutaj WEJŚCIA.

• Panel naleŜy wypełnić zmiennymi przeciągając je (tutaj START, STOP i ALARM) z


drzewa zmiennych po lewej stronie. Panel automatycznie się powiększa. Zmienne
typu BOOL są reprezentowane jako prostokąty (przyciski), zmienne innych typów
są przedstawiane w oknach tekstowych.

W ten sam sposób moŜna utworzyć panel WYJŚCIA (jw.), bądź panel
START_STOP z kompletem zmiennych projektu.

50
Panel w trybie śledzenia
W trakcie śledzenia kolor prostokątów reprezentujących zmienne typu BOOL zaleŜy
od wartości. Kliknięcie prostokąta zmienia wartość.

Opcje programu
Ustawienia i opcje symulatora moŜna modyfikować w oknie Opcje programu
otwieranym z menu poleceniem Narzędzia > Opcje programu. Okno składa się z
zakładek opisanych niŜej.
• Sesja

51
Domyślna sesja
Gdy opcja Automatycznie otwieraj zmienne globalne jest zaznaczona, przy
otwieraniu pliku .dcp w obszarze podglądu automatycznie pojawi się lista
zmiennych globalnych lub ich okna indywidualne. ZaleŜy to od wybrania opcji UŜyj
okienek indywidualnych lub UŜyj listy (domyślne). JeŜeli wybrano okienka
indywidualne, wówczas opcją Ograniczaj liczbę otwieranych okien do rozmiarów
okna okienka zostaną utworzone w takiej liczbie, która odpowiada widocznemu
obszarowi podglądu. Pozostałe zmienne nie będą uwzględnione.
Zawsze otwórz plik sesji SCP przy otwieraniu pliku DCP
Przy otwieraniu pliku .dcp w obszarze podglądu moŜe pojawić się pytanie Czy
otworzyć takŜe plik sesji? umoŜliwiając wznowienie sesji. Zaznaczenie opcji
powoduje automatyczne wczytanie sesji dla otwieranego pliku .dcp, z pominięciem
pytania.
Otwieraj okna zmiennych w trybie zaawansowanym
Przy tworzeniu indywidualnych okien zmiennych będą one od razu zawierały
dodatkowe informacje, które normalnie pojawiają się po naciśnięciu przycisku .
• Plik wejściowy
Zakładka słuŜy do określenia pliku wejściowego .inp dla Symulacji sterowanej
automatycznie. Nazwę pliku moŜna wpisać bezpośrednio lub wybrać przyciskiem
.

• Plik wyjściowy
Zakładka określa plik wyjściowy .out dla Rejestracji wyników. Nazwę pliku moŜna
wpisać bezpośrednio lub wybrać przyciskiem . Domyślną nazwą jest nazwa
pliku projektu. JeŜeli plik nie istnieje, zostanie utworzony, a jeśli istnieje, jego
poprzednia zawartość zostanie nadpisana chyba, Ŝe zaznaczono opcję Dopisuj do
istniejącego pliku.

52
• Źródło danych
W zakładce moŜliwe jest wybranie aktualnego trybu pracy programu CPSim, tj.
symulacji lub śledzenia on-line. Odpowiada to opcji menu Śledzenie > Źródło
danych. Dodatkowo przyciskiem Konfiguruj moŜna wyświetlić okno konfiguracyjne
parametrów transmisji dla trybu on-line.

53
KOMUNIKACJA W SYSTEMIE ROZPROSZONYM
Charakterystyka ogólna
W skład rozproszonego systemu kontrolno–pomiarowego wchodzą:
– komputer PC
– sterownik SMC
– urządzenia obiektowe.
Komputer PC funkcjonuje najpierw jako stacja inŜynierska z pakietem CPDev, a po
przesłaniu programu do SMC jako stacja operatorska z pakietem wizualizacyjnym
typu SCADA (LUMEL, InTouch, iFIX itd.). Komunikacja PC↔SMC oraz
SMC↔urządzenia obiektowe przebiega według protokołu Modbus RTU (dane 8–
bitowe). W komunikacji z PC sterownik SMC jest slavem, a w komunikacji z
urządzeniami obiektowymi – masterem.
Skonfigurowanie komunikacji i uruchomienie systemu wymaga następujących
czynności:
1) Połączenie komputera PC ze sterownikiem SMC
2) Konfiguracja podsystemu komunikacyjnego SMC↔urządzenia
3) Zapisanie skompilowanego programu uzupełnionego danymi konfiguracyjnymi
do sterownika SMC; sterownik automatycznie podejmuje wykonywanie
programu komunikując się z urządzeniami
4) Konfiguracja komunikacji pakietu SCADA i uruchomienie w PC.
Do konfiguracji podsystemu komunikacyjnego oraz konfiguracji pakietu SCADA słuŜy
sam komputer PC, więc moŜna je przeprowadzić bez połączenia z SMC.
Konfiguracja komunikacji pakietu SCADA wymaga podania adresów zmiennych w
SMC, które znajdują się w Raporcie projektu.

Przykład systemu rozproszonego


System pokazany na rysunku zawiera dwa urządzenia obiektowe – moduł wejść
binarnych SM5 oraz moduł wyjść binarnych SM4. Obydwa moduły obsługują po 8
kanałów.

CPDev
SCADA


RS-485
PC SMC

USB SM5 SM4

wejścia wyjścia
obiektowe

Komputer PC jest połączony z SMC przez port USB traktowany jako wirtualny port
szeregowy. Moduły SM5 i SM4 łączy z SMC magistrala RS–485. System moŜe m. in.
słuŜyć do implementacji projektu START_STOP.

54
Dane transmisyjne

Interfejs Prędkość Kontrola Bity


bit/s parzystości stopu
USB max. 230 400 brak 1
RS–485 max. 230 400 E, O, N 1, 2

E – parzystość (Even), O – nieparzystość (Odd), N – brak (No)

Modbus PC↔SMC
Funkcje Modbus
Funkcje komunikatów komputera PC, które obsługuje sterownik SMC są
następujące:

Kod funkcji Znaczenie


3 Odczyt grupy rejestrów (dwubajtowych)
6 Zapis jednego rejestru
8 Funkcja specjalna do programowania SMC
16 Zapis grupy rejestrów

Dla pakietu CPDev zaimplementowanego w PC numerem sterownika SMC jest 1.


Komputer komunikuje się z SMC za pomocą specjalnej funkcji Modbus o kodzie 8, z
odpowiednimi parametrami (np. parametr 1 ustawia SMC w tryb programowania).
Pakiet wizualizacyjny SCADA korzysta ze standardowych funkcji o kodach 3, 6, 16,
w których przesyłane są rejestry dwubajtowe.

Adresy Modbus
RozróŜnienia, czy przesyłane rejestry zawierają dane jednobajtowe, dwubajtowe,
czterobajtowe (dwa rejestry), bądź datę i czas zegara RTC, dokonuje się na
podstawie adresów Modbus w komunikatach. Adresy te naleŜą do rozłącznych
zakresów określających rozmiary danych.

Zakres adresów Zawartość


0 ... 3999 Zmienne bajtowe BOOL, BYTE, ...
4000 ... 6047 Zmienne dwubajtowe INT, WORD, ...
6048 ... 6999 Obszar zabroniony
7000 ... 9047 Zmienne czterobajtowe REAL, TIME, ...
9048 ... 9999 Obszar zabroniony
10000 ... 11023 Zmienne 4–bajtowe, Modbus 32 bit
11024 ... 64752 Obszar zarezerwowany
64753 ... 65535 Obszar systemowy (metryczka, konfiguracja itd.)

55
Adresy Modbus dla pakietów LUMEL i InTouch generowane są automatycznie w
Raporcie projektu. Pakiet InTouch do powyŜszych adresów wprowadza własny offset
wynoszący 40001.
Obszar zabroniony wynika z rozmiaru pamięci sterownika SMC, a zarezerwowany z
planowanych rozszerzeń komunikacji Modbus.

Adresy Modbus a adresy bajtowe


Adresy Modbus określane są według poniŜszych zaleŜności na podstawie bajtowych
adresów zmiennych w pamięci sterownika SMC (zob. Przegląd języka ST – Adresy w
pamięci). Zawiera je Lista zmiennych globalnych oraz Raport.

Rozmiar zmiennej Adres Modbus


1B Adres (bajtowy w pamięci SMC)
2B Adres/2 + 4000
4B Adres/2 + 7000 oraz Adres/2 + 7001

Modbus SMC↔moduły SM
Moduły SM lokują wejścia i wyjścia w kolejnych rejestrach dwubajtowych, z których
pierwsze mają adresy podane w tabeli (moduły lokują je takŜe w rejestrach
czterobajtowych; w nowych modułach sygnały binarne są ponadto lokowane zbiorczo
jako bity w rejestrach). Do grupowego odczytu lub zapisu rejestrów w modułach SM
słuŜą funkcje Modbus o kodach 3 i 16. Adresy rejestrów w modułach są zgodne z
konwencją zakresów rejestrów przyjętą dla sterownika SMC (zob. wyŜej).

Moduł WE/WY Rejestry Kod Adres pierwszego


danej funkcji rejestru
SM1 2 WE anal. 2 3 7006
SM2 4 WE anal. 2 3 7006
SM3 2 WE bin. 1 3 4003
SM4 8 WY bin. 1 16 4205
SM5 8 WE bin. 1 3 4003

Konwersje
Formatem zmiennych binarnych (boolowskich) w sterowniku SMC są bajty, a w
modułach SM rejestry. Stąd dla odczytu i zapisu zmiennych w modułach potrzebne
są konwersje 16→8 i 8→16 bitów. Konwersje formatów zmiennych dokonywane
przez sterownik SMC podano w tabeli.

Konwersja Znaczenie

bez konw. Bez konwersji, zmienna dwubajtowa przesyłana jako rejestr Modbus

56
8 –> 16 bit Jednobajtowa zmienna rozszerzana na dwubajtowy rejestr
16 –> 8 bit Rejestr obcinany do zmiennej jednobajtowej
Dwubajtowa zmienna przesyłana jako rejestr z zamienionymi
odwr. 12 –> 21
bajtami
Zamiana kolejności bajtów zmiennej czterobajtowej przesyłanej w
1234 –> 4321
dwóch rejestrach
32 bit 1234 Czterobajtowa zmienna przesyłana jako 32-bitowy rejestr Modbus
Czterobajtowa zmienna z zamienionymi bajtami przesyłana jako
32 bit 4321
32–bitowy rejestr
8 –> 1 bit Jednobajtowa zmienna BOOL konwertowana na bit
1 –> 8 bit Bit konwertowany na jednobajtową zmienną BOOL

Połączenie PC↔SMC
Instalacja sterownika USB
JeŜeli komputer PC nie ma zainstalowanego sterownika portu USB dla SMC, naleŜy
go zainstalować programem CDM_Setup.exe z płytki CD. Port USB będzie wtedy
obsługiwany jak port szeregowy.

Kabel PC↔SMC
Połączyć port USB komputera z portem USB sterownika SMC (na płycie czołowej).

Numer portu USB


Odczytać w MenedŜerze Urządzeń systemu Windows, którym portem COM jest port
USB połączony ze sterownikiem SMC.
• Menu Start > Ustawienia > Panel sterowania > System > Sprzęt > MenedŜer
Urządzeń
W pojawiającym się oknie rozwinąć Porty.

W przypadku jak wyŜej port USB jest portem COM5.


• Powrót do systemu Windows
Zamknąć okno MenedŜera Urządzeń oraz pozostałe okna.

Uruchomienie konfiguratora CPCon


Podobnie jak symulator CPSim, konfigurator moŜna uruchomić trzema sposobami:
1) Menu CPDev: Projekt > Uruchom konfigurator

57
lub ikona .

2) Narzędzia > Konfigurator

3) Menu start: CPDev > CPCon

Pierwszy sposób stosuje się bezpośrednio po kompilacji projektu. Dwa następne


wymagają importu pliku .dcp ze skompilowanym wcześniej projektem opcją Plik >
Importuj plik projektu, albo przeciągając plik z eksploratora Windows (Mój komputer)
do tabeli zadań komunikacyjnych (zob. dalej).

Po uruchomieniu pojawia się okno konfiguratora komunikacji CPCon z nazwą pliku w


nagłówku (tutaj Start_Stop).

58
Tabela zadań komunikacyjnych
Podstawowe znaczenie ma Tabela zadań komunikacyjnych, która określa jakie
transakcje protokołu Modbus, tzn. wymiana komunikatów pytanie – odpowiedź
(odczyt) lub polecenie – potwierdzenie (zapis), będą miały miejsce. Transakcje są
tutaj nazywane zadaniami komunikacyjnymi. Znaczenie poszczególnych kolumn
tabeli zadań podaje tabela.

Kolumna Znaczenie

Lp. Numer zadania komunikacyjnego


Nr urządz. Numer Modbus urządzenia obiektowego (modułu SM)
Funkcja Kod funkcji Modbus uŜytej w zadaniu

Adr. zdalny Adres Modbus w urządzeniu określający pierwszą zmienną globalną z


przesyłanej grupy
Liczba Liczba rejestrów Modbus przesyłanych w zadaniu
Adr. lokalny Adres w sterowniku SMC pierwszej zmiennej z grupy

Nazwa Nazwa zmiennej globalnej o powyŜszym adresie


Konwersja Konwersja formatów przed wysłaniem lub po odebraniu zmiennych
Priorytet Priorytet zadania

Timeout Maksymalny czas oczekiwania na odpowiedź urządzenia w


milisekundach

Poprawność Adres lub nazwa zmiennej informującej o poprawności ostatniej


transmisji (BOOL)

Czas kom. Adres lub nazwa zmiennej informującej o czasie trwania ostatniej
transmisji (TIME)

Włącz/wył. Adres lub nazwa zmiennej słuŜącej do selektywnego włączania/


wyłączania zadania komunikacyjnego w trakcie pracy (BOOL)

59
Przełączania między adresami lokalnymi a nazwami dokonuje
się klikając pionowy przycisk Adresy/Nazwy po lewej stronie
okna CPCon. Nazwy pojawiają się tylko w odniesieniu do
zmiennych globalnych.

Sposób wypełnienia tabeli jest omówiony poniŜej na przykładzie projektu


START_STOP.

Menu CPCon
Plik Transmisja

Część funkcji podanych w opcjach realizują przyciski pod tabelą. Import pliku
projektu jest potrzebny, gdy konfigurator CPCon uruchomiono drugim lub trzecim
sposobem (nie bezpośrednio po skompilowaniu projektu). Eksport ustawień i tabeli
do pliku html słuŜy tworzeniu dokumentacji, drukowaniu itp. (raport komunikacyjny).
Odczytywana metryczka zawiera podstawowe dane dokumentacyjne programu
wykonywanego przez sterownik (zob. Właściwości projektu). Sprawdzenie statusu
pozwala stwierdzić w jakim stanie sterownik aktualnie się znajduje. Synchronizacja
ustawia zegar sterownika według aktualnego czasu komputera PC. Podgląd
komunikacji zawsze widoczny zapobiega przykrywaniu okna podglądu przez inne
okna.

Ustawienia transmisyjne
• Transmisja > Ustawienia
Pojawia się okno Ustawienia z zakładkami Komunikacja, Interfejs oraz
Aktualizacja znanymi juŜ z Globalnych ustawień (zob. Konfiguracja pakietu
CPDev). Dwie części zakładki Komunikacja powtórzono jednak niŜej.
• Ustawienia komunikacji
Grupa słuŜy do ustawienia parametrów komunikacji szeregowej PC ↔ sterownik
SMC. Numer portu pochodzi z MenedŜera Urządzeń komputera PC.

60
• Ustawienia sterownika SMC
W grupie wybiera się numer sterownika SMC oraz parametry komunikacji SMC ↔
moduły wejścia/wyjścia (lub inne urządzenia). Parametry muszą być oczywiście
takie same, jak ustawione w modułach. Tryb 8N1 wybrany poniŜej oznacza 8
bitów danych, nieparzystość (N) i 1 bit stopu.

• Interfejs i Aktualizacja (zob. Globalne ustawienia)


Zakładka Interfejs pozwala na zmianę języka działającej aplikacji. Aktualizacja
informuje, czy na serwerze pojawiła się nowa wersja pakietu CPDev.

Komunikacja SMC↔urządzenia (moduły SM)


Konfigurowany będzie system rozproszony pokazany poprzednio na rysunku, w
którym moŜna zaimplementować projekt START_STOP. Moduł SM5 (wejścia) ma
mieć numer 1, a moduł SM4 (wyjścia) numer 2. Zakłada się, Ŝe wejścia i wyjścia
obiektowe są dołączone do kolejnych kanałów modułów SM5 i SM4, licząc od
pierwszego.
Do komunikacji sterownika SMC z modułami SM i innymi urządzeniami obiektowymi
mogą słuŜyć:
1) zmienne globalne, np. START, STOP, SILNIK itp.,
2) bloki komunikacyjne COM_SM1, COM_SM2 itd. dedykowane dla modułów SM.
W projekcie START_STOP nie deklarowano bloków komunikacyjnych, więc
wykorzystane zostaną zmienne globalne.
Komunikację konfiguruje się wypełniając odpowiednią liczbę wierszy tabeli zadań
pokazanej poprzednio. KaŜdy wiersz reprezentuje jedno zadanie komunikacyjne
sterownika SMC. Wypełnienia moŜna dokonać wprost w tabeli (prawy klawisz myszy

61
dodaje bądź usuwa wiersz, zob. dalej) lub za pomocą Kreatora zadań (przycisk)
składającego się z kilku okien. W odniesieniu do projektu START_STOP kreowanie
zadań przebiega następująco:

• Kliknąć w oknie CPCon.


Pojawia się okno informacyjne kreatora.

Kliknąć przycisk Dalej (nie pokazany, takŜe w kilku następnych oknach).

Numer urządzenia. Funkcja Modus


• Pierwszym urządzeniem jest moduł SM5, którego wejścia moŜna odczytać
grupowo za pomocą funkcji o kodzie 3 (odczyt rejestrów), tutaj nazywanej FC3
(Function Code 3). Pierwsze okno po ustawieniu wartości ma więc postać jak niŜej.

Zmienne. Adresy lokalne


• W oknie kreatora pojawia się lista zmiennych z adresami.

62
Spośród pięciu zmiennych globalnych projektu START_STOP trzy są wejściowe –
START, STOP, ALARM, a dwie wyjściowe – SILNIK, POMPA. Adresami
logicznymi tych zmiennych są odpowiednio 0, 1, 2 i 8, 9, a rozmiarem kaŜdej jest
bajt. Adresy zmiennych wejściowych są kolejnymi liczbami, odpowiedni jest więc
odczyt grupowy (blokowy).

Uwaga. Gdyby lista była pusta, to kliknięcie przycisku Wczytaj listę zmiennych
pozwala importować zmienne z pliku wybranego w otwierającym się oknie,
zarówno globalne jak i lokalne.

• Zaznaczyć grupę zmiennych wejściowych.

Kliknąć Dalej. Zaznaczone zmienne będą odczytywane w jednym zadaniu


komunikacyjnym.

Urządzenie. Adres początkowy (zdalny)


• Urządzeniem docelowym jest moduł SM5, który do pierwszego wejścia ma
dołączony obiektowy sygnał START, a do dwu następnych wejść sygnały STOP i
ALARM. Rejestr, w którym SM5 umieszcza wartość START ma adres 4003 (zob.
wcześniej).

Nazwy urządzeń (modułów) oraz początkowe adresy pochodzą z pliku cpcon.cfg.


Sposób dodawania do niego nowych urządzeń opisano w Uzupełnieniach.

Priorytet. Timeout
Zadania komunikacyjne określone przez wiersze tabeli głównej wykonywane są w
przerwach, jakie po wykonaniu programu pozostają do końca kaŜdego cyklu. JeŜeli
przerwa jest znaczna, zadanie moŜe być wykonane kilkakrotnie. Zadanie o
priorytecie normalnym jest wykonywane dwukrotnie rzadziej niŜ zadanie o priorytecie

63
wysokim, a zadanie o priorytecie niskim trzykrotnie rzadziej. Timeout oznacza
maksymalny okres czasu, w ciągu którego urządzenie powinno przysłać odpowiedź
na pytanie lub polecenie sterownika.

• Przyjęto, Ŝe zadanie komunikacji z SM5 będzie mieć normalny priorytet oraz, Ŝe


odpowiedź modułu powinna nadejść w ciągu 500 ms.

Zmienne kontrolne
Ostatnie okno kreatora słuŜy do skonfigurowania kontroli transmisji, jeŜeli odpowiedni
fragment programu ją przewiduje. W oknie wskazuje się, do której ze zmiennych ma
być wpisywana informacja o poprawności lub niepoprawności komunikacji, którą
zmienną przeznaczono na wpisanie czasu komunikacji oraz za pomocą której moŜna
włączać lub wyłączać zadanie komunikacyjne. Kliknięcie przycisku po prawej stronie
jednej z rubryk otwiera listę zmiennych odpowiedniego typu (BOOL, TIME, BOOL), z
której naleŜy dokonać wyboru.

64
Tworzenie zadania komunikacyjnego

• Kliknąć
Na pytanie o dodanie kolejnego zadania naleŜy odpowiedzieć Tak, bo trzeba
jeszcze skonfigurować komunikację z modułem SM4.

W tabeli zadań komunikacyjnych pojawia się pierwszy wiersz z danymi


ustawionymi w kreatorze, w tym konwersja rejestrów na bajty 16 → 8 bit.

Drugie zadanie komunikacyjne


• Moduł SM4 ma numer 2. Będą do niego zapisywane zmienne SILNIK i POMPA za
pomocą funkcji FC16.

• Wybór zmiennych SILNIK i POMPA z listy.

• Obiektowy sygnał SILNIK jest dołączony do pierwszego wyjścia, którego adres


Modbus wynosi 4205.

• Priorytet. Timeout

65
• Zmienne kontrolne

• Kliknąć
Tym razem na pytanie Czy chcesz dodać kolejne zadanie? naleŜy odpowiedzieć
Nie. Tabela zadań komunikacyjnych ma ostatecznie postać:

Adresy lub nazwy


Za pomocą pionowego przycisku Adresy/Nazwy po lewej stronie moŜna przełączać
między adresami lokalnymi a nazwami zmiennych. PowyŜsze okno po przełączeniu
przyjmuje następującą postać

Zamiast adresów 0,8 pojawiły się nazwy START, SILNIK.


W przypadku tabeli z adresami (poprzednie okno), po najechaniu myszką na adres,
przejściowo prezentowane jest okienko z nazwami zmiennych transmitowanych w
danym zadaniu komunikacyjnym.

66
Bezpośrednie wypełnianie tabeli (alternatywa dla kreatora)
Dodawanie i usuwanie wiersza
MoŜna to przeprowadzić za pomocą myszy lub klawiatury.
• Mysz
Ustawić kursor na wybranym wierszu, nacisnąć prawy przycisk i po pojawieniu się
okienka z opcjami Dodaj/Usuń wybrać właściwą i kliknąć lewy przycisk. Normalnie
Dodaj wstawia nowy wiersz pod wierszem wybranym. Aby wstawić przed
wybranym wierszem naleŜy wcześniej nacisnąć i przytrzymać Shift.

• Klawiatura
Klawiszami strzałek sprowadzić ramkę do wybranego wiersza i nacisnąć Shift +
F10 lub klawisz menu. Po pojawieniu się Dodaj/Usuń wybrać właściwą opcję i
zatwierdzić przez Enter. Podobnie jak poprzednio, Shift + Enter wstawia nowy
wiersz przed wierszem wybranym.

Kod funkcji, rodzaj konwersji, priorytet - wybór z menu

Pozostałe pola - zapisywane w zwykły sposób.


Tabelę ze znaczeniem wariantów konwersji podano poprzednio.

Zapis konfiguracji w pliku


Tabelę zadań komunikacyjnych moŜna wykorzystać w późniejszych modyfikacjach
lub w innych projektach. Plik z tabelą jest takŜe niezbędny, gdy symulator CPSim ma

67
symulować funkcjonowanie urządzeń dołączonych do sterownika. Konfigurator
CPCon zapisuje pliki z rozszerzeniem .xmc.

• Kliknąć
Pojawia się okno Zapisz plik z konfiguracją podsystemu komunikacyjnego, w
którym naleŜy wpisać nazwę pliku Start_Stop.xmc (rozszerzenie .xmc dodawane
automatycznie). Zaleca się wszystkie pliki projektu zapisywać w jednym katalogu
(tutaj START_STOP).

Eksport ustawień i tabeli do pliku html (raport komunikacyjny)


• Opcja Plik > Eksportuj... zapisuje aktualną tabelę do pliku tekstowego (.htm) w
formacie jak niŜej.

Odczyt konfiguracji (dla kontroli, modyfikacji itp.)

• Kliknąć
W pojawiającym się oknie Otwórz plik z konfiguracją podsystemu
komunikacyjnego wybrać plik i kliknąć Otwórz.

68
W przypadku pliku Start_Stop.xmc tabela zadań komunikacyjnych będzie
wyglądała tak jak poprzednio.

Synchronizacja czasu SMC


• Transmisja > Synchronizuj czas SMC
Wybór opcji powoduje pojawienie się okna synchronizacji, w którym podawane są
aktualne czasy komputera PC i sterownika SMC. OdświeŜanie czasów następuje
co ok. 0.5 sekundy ze względu na trwającą komunikację. Kliknięcie Synchronizuj
powoduje najpierw Ŝądanie potwierdzenia OK/Anuluj, a w przypadku OK
przesłanie czasu PC do SMC komunikatem Modbus. Po synchronizacji
rozbieŜność czasów PC i SMC nie przekracza 1 sekundy.

Zapisanie programu do SMC


• Przed zapisaniem warto otworzyć dolną część okna klikając Podgląd komunikacji.
Pozwoli to sprawdzić, czy zapisanie przebiegło prawidłowo.

• Kliknąć
Pojawia się okno metryczki projektu, która wraz z programem zostanie zapisana w
SMC. W przyszłości będzie więc moŜna zorientować się, jaką wersję programu
sterownik wykonuje.

OK.

69
W trakcie zapisywania w oknie Podgląd komunikacji wyświetlane są informacje
kontrolne.

Uwaga. JeŜeli sterownik SMC przed przesłaniem wykonywał jakiś program, to


bywa, Ŝe sprawdzając wersję nie odpowiada on natychmiast, co moŜe
spowodować błąd sygnalizowany jako Time Out Error. W takim przypadku
przesłanie naleŜy ponowić.

Po zapisaniu programu sterownik SMC natychmiast rozpoczyna


jego wykonywanie komunikując się z urządzeniami obiektowymi.

• Kontrola statusu
Aktywacja opcji Transmisja > Sprawdź status SMC powoduje pojawienie się
okienka z informacją, czy SMC pracuje poprawnie, czy jest w stanie
programowania, bądź czy wystąpił błąd (zob. Uzupełnienia).

• Zamknąć okno programu CPCon.

Konfiguracja komunikacji Modbus pakietu SCADA


Ustawienia portu
JeŜeli nadal wykorzystywać się będzie port USB, to ustawienia transmisyjne mogą
pozostać niezmienione.

Adresy zmiennych w sterowniku SMC


Są podane w Raporcie projektu (zob. Czasomierze biblioteczne), którego istotny
fragment powtórzono niŜej.

70
Dla pakietów wizualizacyjnych SCADA LUMEL zmienne binarne START, STOP itd.
są dostępne pod adresami z kolumny Modbus SMC. Pakiet InTouch do wszystkich
adresów wprowadza własny offset 40001, więc adresy w kolumnie Modbus
INTOUCH zostały odpowiednio powiększone. Kodami funkcji Modbus sterownika
SMC pracującego jako slave są 3, 6, 16 (zob. wcześniej). Dane są przesyłane w
rejestrach dwubajtowych.

Śledzenie on-line w CPSim


Jak podano w poprzednim rozdziale, program CPSim oprócz symulacji off–line
pozwala równieŜ monitorować zmienne w rzeczywistym sterowniku SMC, czyli w
trybie on-line. Wówczas lista zmiennych, okienka indywidualne i panele grupowe
prezentują wartości pobierane na bieŜąco ze sterownika.

Źródło danych
W celu ustawienia trybu on-line naleŜy wybrać Modbus-SMC jako Źródło danych w
opcji Śledzenie (domyślnym trybem jest Symulator).

Niedostępne stają się wówczas opcje Wstrzymaj i wznów oraz Restart programu
(Uruchamia...) w menu i pasku narzędzi, zaś opcje Włącz i Wyłącz dotyczą wyłącznie
uruchomienia lub zatrzymania śledzenia, a nie sterownika, który stale wykonuje
zapisany program.

Przed włączeniem śledzenia naleŜy połączyć sterownik z komputerem oraz ustawić


odpowiednie parametry transmisji (port, prędkość itd.) w opcji Narzędzia > Globalne
ustawienia CPDev programu CPSim lub opcji Transmisja > Ustawienia programu
CPCon.

Kontrola wersji
Przy włączaniu podglądu zmiennych w trybie on-line (opcja Włącz), CPSim sprawdza
najpierw, czy wersja programu wykonywanego przez SMC jest zgodna z wersją
zapisaną w projekcie. JeŜeli tak nie jest, pojawi się poniŜszy komunikat, a śledzenie
nie będzie moŜliwe. NaleŜy wtedy ponownie przesłać program do sterownika
programem CPCon.

71
Podgląd
Obszar podglądu podczas śledzenia on–line programu projektu START_STOP
wykonywanego przez sterownik SMC pokazano niŜej (tym razem z indywidualnymi
okienkami zmiennych).

Uwaga. Liczba monitorowanych zmiennych w rozbudowanych projektach nie


powinna być nadmierna, bo sterownik nie będzie w stanie ich przesłać w
odpowiednim czasie. Objawi się to opóźnieniem odświeŜania wartości.

72
ZEGAR RTC
Opis problemu
Temperaturę w mieszkaniu naleŜy utrzymywać na zadanej wartości W, wyŜszej w
ciągu dnia, np. 22°C, niŜszej w ciągu nocy – 18°C. Faktyczną temperaturę Y mierzy
moduł wejść analogowych SM2. JeŜeli W>Y, piec c.o. jest włączany sygnałem
sterującym U przez moduł wyjść binarnych SM4, a jeŜeli W≤Y, piec jest wyłączany.
W celu zapobieŜenia zbyt częstym włączeniom ponowne włączenie pieca moŜe
nastąpić jednak dopiero wtedy, gdy Y spadnie poniŜej W przynajmniej o 0.5°C.
Pompa obiegowa O tłocząca wodę przez grzejniki jest włączona stale w ciągu dnia,
zaś w nocy wtedy, gdy piec pracuje oraz niezaleŜnie od pieca między godzinami
23.00 a 1.00. Jako dzień rozumie się okres od godziny 6.00 do 20.00.

Przykładowe przebiegi
W
Y
Temperatura
Piec U
Pompa O
Czas 1:00 noc 6:00 dzień 20:00 n. 23:00

Układ sterowania
Przetwornik temperatury jest dołączony do wejścia IN1 modułu SM2, zaś styczniki
włączające piec i pompę do wyjść OUT1, OUT2 modułu SM4. Zakłada się ponadto,
Ŝe sterownik SMC komunikuje się z komputerem PC z zainstalowanym pakietem
wizualizacyjnym SCADA w celu:
– zdalnego ustawiania zadanej temperatury W,
– obserwacji sygnałów Y, U, O, czyli temperatury mierzonej oraz sterowania piecem
i pompą.
Temperatury po stronie SMC są oznaczone przez W, Y, a po stronie PC przez W_,
Y_ ze względu na róŜnicę formatów.

CPDev
SCADA


RS-485
PC SMC

USB SM2 SM4

W_, Y_, U, O
W, Y,
U, O

IN1 OUT1 (U)


(Y) OUT2 (O)

73
Bloki komunikacyjne
W pakiecie CPDev dostępne są specjalne bloki dla komunikacji z modułami SM,
o nazwach od COM_SM1 do COM_SM5. Struktura COM_SM2 i COM_SM4 wygląda
następująco (zob. Biblioteki bloków funkcjonalnych):

COM_SM2 COM_SM4
BOOL (true) EN C BOOL
BOOL (true) EN C BOOL
BYTE NO
BYTE NO IN1 REAL
TIME TOUT
TIME TOUT IN2 REAL
BOOL (false) OUT1
IN3 REAL BOOL (false) OUT2
IN4 REAL BOOL (false) OUT3
BOOL (false) OUT4
BOOL (false) OUT5
BOOL (false) OUT6
BOOL (false) OUT7
BOOL (false) OUT8

Wejścia
EN – aktywacja komunikacji (Enable); domyślnie TRUE
NO – numer urządzenia w komunikacie Modbus; wartość stała, np. BYTE#2
TOUT – timeout (ms); wartość stała, np. T#500ms
OUT1,..., OUT8 – wejścia binarne bloku COM_SM4.

Wyjścia
C – poprawność/niepoprawność komunikacji
IN1,..., IN4 – wyjścia analogowe bloku COM_SM2.

Cechy bloków komunikacyjnych


– Bloki COM_SM są „zawsze dostępne”, tzn. nie pochodzą z importowanych
bibliotek. Wystarczy zadeklarować ich egzemplarze w ramach VAR ... END_VAR.
W danym projekcie bloki komunikacyjne mogą być zadeklarowane tylko raz.
– Bloki COM_SM odczytują lub zapisują wejścia/wyjścia modułów SM zbiorczo, w
pojedynczych komunikatach Modbus. JeŜeli nie wszystkie wejścia OUT są
wykorzystane, w komunikacie przesyłane są zera.
– Wejścia NO i TOUT muszą być ustawione na wartości stałe (typów BYTE, TIME),
a nie przypisane do zmiennych.
– Deklaracja egzemplarza bloku COM_SM (instancji) automatycznie tworzy zadanie
komunikacyjne upraszczając konfigurację. Pozostaje tylko ustawić parametry
transmisji.
– Wyjście poprawnościowe C moŜe np. słuŜyć do przełączania sterowania na
wartość bezpieczną w razie przerwy w komunikacji.
– Określenie czasu komunikacji wymaga zdefiniowania dodatkowej zmiennej
globalnej (EXTERNAL), nadania jej konkretnego adresu (AT), wyraŜenia go w
bajtach (zob. Przegląd języka ST – Adresy w pamięci) i wpisania w polu Czas
komunikacji tablicy zadań komunikacyjnych konfiguratora CPCon.

74
Projekt RTC
ZałoŜenia
Chodzi o zakres pomiarowy modułu SM2 oraz o format liczb wymienianych z
komputerem PC.
• Zakres SM2. Moduł SM2 mierzy temperaturę 0...100ºC na zakresie 0...10V, którą
przesyła do SMC jako liczbę REAL z przedziału 0.0...10.0 Na przykład
temperaturze 18ºC odpowiada 1.8.
• Komputer PC. Typami danych w komunikacji PC↔SMC są INT i BOOL, więc
temperatury W_, Y_ po stronie PC są liczbami typu INT. Wymaga się dokładności
0.1ºC. Dlatego zakresem zmiennych W_, Y_ odpowiadającym 0...100ºC jest
0...1000 (W=W_/100, Y_=Y·100). Zadaną temperaturę 20ºC po stronie PC
reprezentuje 200, a po stronie SMC 2.0.

Zmienne globalne

Temperatura W_ odbierana z PC jest zmienną Podtrzymywaną (RETAIN) o wartości


początkowej 200. Zatem W_ zostanie zachowane w pamięci pomimo zaniku
zasilania lub wyłączenia SMC. Od wartości 200 (czyli 20ºC) sterownik rozpocznie
pracę po pierwszym uruchomieniu, zanim jeszcze komputer podejmie komunikację.
W razie wyłączenia komputera sterownik będzie kontynuował pracę z ostatnią
odebraną wartością W_.

Wartości po prawej stronie kolumny Adres są adresami zmiennych w


pamięci wyraŜonymi w bajtach. W odniesieniu do dwubajtowych
zmiennych typu INT są one dwukrotnie większe od wartości napisanych
po przedrostku %W na lewo od nich. W odniesieniu do czterobajtowych
zmiennych typu REAL byłyby one czterokrotnie większe od wartości po
przedrostku %D. Wartości po przedrostkach %W, %D dobiera się tak,
aby dwu– i czterobajtowe obszary podane po prawej stronie nie
zachodziły na siebie.

Pary zmiennych W_, Y_ oraz U, O mogą być tutaj deklarowane grupowo.

75
Program
Projekt RTC z rozwiniętym drzewem i programem PRG_RTC pokazano niŜej.
Komentarze widoczne przy zmiennych w drzewie wpisano wcześniej na Liście
zmiennych globalnych. Zadanie ZD_RTC jest wykonywane cyklicznie co 200 ms.

Deklaracje
• Dyrektywa (*$AUTO*) po deklaracji VAR_EXTERNAL włącza Listę zmiennych
globalnych do kompilowanego programu.
• Zmienne lokalne: W, Y – temperatura zadana, temperatura mierzona
DATA, CZAS – data i czas dobowy, czas dobowy.
• Bloki komunikacyjne: WEJŚCIE, WYJŚCIE – egzemplarze bloków COM_SM2,
COM_SM4.

Instrukcje w liniach programu


14: komunikacja z modułem SM2 będącym urządzeniem nr 3; timeout 500 ms
15: podstawienie temperatury odczytanej z modułu SM2 do zmiennej Y
16: konwersja wartości typu INT odebranej z PC na REAL po dopasowaniu
zakresu (200 zamienione na 2.0)

76
18: ustawienie zmiennej DATA na wartość zwracaną przez funkcję GET_TST,
która odczytuje stan zegara RTC sterownika w momencie rozpoczęcia
zadania (Get Task Time). Wyodrębnienie CZASU dobowego przez funkcję
konwersji DT_TO_TOD (Date_and_Time To Time_of_Day).
20: wyznaczenie sterowania U piecem na podstawie porównania temperatury
mierzonej z zadaną uwzględniając spadek temperatury po wyłączeniu
przynajmniej o 0.5°C (co odpowiada 0.05).
22, 23: wyznaczenie sterowania O pompą obiegową – włączona w ciągu dnia,
nocą w godzinach 23.00...1.00 oraz wtedy, gdy piec pracuje.
25: komunikacja z modułem SM4 będącym urządzeniem nr 2, którego wyjścia
są ustawiane przez sygnały U i O.
26: konwersja REAL na INT po dopasowaniu zakresu celem wysłania do PC.

Symulator CPSim
Drzewo okna symulatora zawiera teraz oprócz zmiennych globalnych i zadania
równieŜ bloki komunikacyjne WEJSCIE, WYJSCIE. Wejścia i wyjścia tych bloków
moŜna symulować w indywidualnych okienkach przeciągając je z drzewa na prawą
stronę, bądź tworząc z nich panele grupowe. Warto zwrócić uwagę, Ŝe wyjście IN1
bloku WEJSCIE jest typu REAL, jak to widać w dolnym okienku.

77
Konfigurator CPCon
Po kompilacji projektu i uruchomieniu konfiguratora (Projekt > Uruchom konfigurator
lub ikona ) od razu pojawia się poniŜsze okno, bo komunikacja z modułami
COM_SM jest konfigurowana automatycznie.

Wyjaśnienia
Nr urządzenia: wynika z ustawień BYTE#3, BYTE#2.
Funkcja: odczyt/zapis rejestrów dwubajtowych.
Adres zdalny: adres pierwszego rejestru w module SM2, SM4 w komunikacie
Modbus.
Liczba: liczba przesyłanych rejestrów dwubajtowych. Blok COM_SM2
odczytuje 4 wejścia analogowe jako czterobajtowe liczby REAL,
na co potrzeba 8 rejestrów. COM_SM4 przesyła 8 wyjść
binarnych, kaŜde w osobnym rejestrze.
Adres lokalny: wyraŜony w bajtach adres wejścia IN1 bloku COM_SM2 i
wyjścia OUT1 bloku COM_SM4. Adresy te kompilator CPDev
przydziela automatycznie.
Konwersja: liczby REAL w modułach SM i w sterowniku SMC są formatu
IEEE-754, ale bajty ich ustawione są w odwrotnej kolejności
(Big Endian w SM, Little Endian w SMC). Konwersja formatów
dla SM2 polega na przestawieniu bajtów. Konwersja 8→16 bit
dla SM4 bierze się stąd, Ŝe w SMC zmienna BOOL zajmuje
jeden bajt, ale do SM4 trzeba ją przesłać jako dwubajtowy
rejestr.
Priorytet, timeout: normalny, standardowo 500 ms.
Poprawność: adres wyjścia C bloku COM_SM określony automatycznie
przez CPDev.
Czas komunikacji: nie podlega śledzeniu.
Włącz/wyłącz: adres wejścia EN bloku COM_SM określony przez CPDev.

Uwaga. PoniewaŜ adresy lokalne odpowiadają tutaj wejściom i wyjściom bloków


COM_SM, a nie zmiennym globalnym, które miałyby nazwy, więc przełączanie
na Nazwy przyciskiem pionowym powoduje tylko pojawienie się pytajników.

78
• Transmisja > Ustawienia (przykład)

Granicą prędkości starszych modułów SM2 jest 19200 bit/s.

• Pozostałe czynności
– Zapisanie tabeli zadań do pliku .xmc
– Synchronizacja czasu SMC
– Przesłanie programu i konfiguracji do SMC
– Śledzenie on–line w CPSim (Źródło danych > Modbus–SMC).
MoŜna takŜe wyeksportować ustawienia i tabelę do pliku .htm.

Adresy po stronie PC
Fragment Raportu z kolumnami Modbus SMC i Modbus INTOUCH, w których
znajdują się adresy po stronie PC pokazano niŜej.

Adresy Modbus SMC stosowane w pakietach SCADA LUMEL mają dla zmiennych
typu INT offset wynoszący 4000. Dodatkowym offsetem w Modbus INTOUCH jest
40001 (zob. Komunikacja w systemie rozproszonym – Modbus PC↔SMC).

79
WŁASNA BIBLIOTEKA PROJEKTANTA
Biblioteka jako projekt
Zostanie utworzona biblioteka z dwoma blokami funkcjonalnymi:
• FB_AVERAGE określający średnią z trzech wejść
IN1 + IN 2 + IN 3
OUT =
3 .0
• FB_PULSE generujący impuls trwający 1 cykl po czasie T od momentu, gdy na
wejściu pojawiło się narastające zbocze.

R_TRIG RS TON Q
IN
CLK Q S Q1 IN Q
R1 PT ET
T

Średnia z kilku wejść jest potrzebna, gdy do określenia wartości mierzonej


wykorzystuje się grupę czujników. Impulsem generowanym po określonym czasie
kończone są niektóre etapy typowych sekwencji. Impuls taki moŜe wygenerować
poniŜszy układ złoŜony z bloków standardowych.

IN

1cykl

Zasada obowiązująca w pakiecie CPDev przy tworzeniu przez uŜytkownika własnej


biblioteki brzmi następująco:

Bibliotekę tworzy się jako nowy projekt, który moŜe zawierać wszystkie
rodzaje jednostek POU, tzn. programy, bloki funkcjonalne i funkcje.

Najczęściej we własnych bibliotekach umieszcza się bloki funkcjonalne i ew. funkcje.

Nowy projekt (por. START_STOP)


• Plik > Nowy. W drzewie projektu pojawia się projekt BezNazwy.
• Zaznaczyć projekt BezNazwy > Menu kontekstowe > Właściwości
• Wypełnić okno Właściwości projektu nadając nazwę np. PROJ_MY_BLOCKS.
Projekt ten zostanie zachowany, poniewaŜ będzie zawierał kod źródłowy biblioteki.

80
Nowy blok funkcjonalny
• Zaznaczyć grupę POU > Menu kontekstowe > Dodaj > Blok funkcjonalny.
Pojawia się okno Właściwości bloku funkcjonalnego z FB jako wstępną nazwą
bloku.

Blok FB_AVERAGE
• Nazwa
Rozszerzyć nazwę FB do FB_AVERAGE i zatwierdzić OK. Okno Właściwości
znika, a blok FB_AVERAGE pojawia się w drzewie projektu w grupie POU.

Uwaga. Przedrostek FB w nazwie nie jest niezbędny. Blok mógłby się nazywać
MY_AVERAGE, AVERAGE, SREDNIA lub jeszcze inaczej.

81
• Kod
Dwukrotne kliknięcie w FB_AVERAGE w drzewie otwiera edytor kodu dla wpisania
programu bloku. Szczególnie przy tworzeniu własnej biblioteki warto korzystać z
dyrektywy (*$COMMENT*), która dokumentuje kod źródłowy, a ponadto wpisany
po niej komentarz pojawia się w podpowiedziach. W oknie programu dyrektywy są
podkreślane.

• Kompilacja
Projekt > Buduj. Zaleca się na bieŜąco kompilować stopniowo rozbudowywany
projekt korygując dodawane składniki.

Funkcja zamiast bloku


PoniewaŜ blok FB_AVERAGE nie przechowuje informacji o swym stanie, więc
moŜna byłoby go zastąpić funkcją. Do projektu PROJ_MY_BOLCKS naleŜałoby w
takim przypadku dodać funkcję:

Pojawi się wtedy okno Właściwości funkcji, z którym po wpisaniu nazwy, np.
FUN_AVERAGE, postępuje się analogicznie jak w przypadku bloku.

82
Blok FB_PULSE
Wykorzystane zostaną bloki biblioteki IEC_61131 według schematu podanego na
początku.
• Kod – cz. I
Składa się na to nazwa bloku i deklaracje egzemplarzy bloków schematu.

• Wejścia/wyjścia bloków
Na ogół zachodzi potrzeba upewnienia się co do oznaczeń wejść/wyjść bloków
bibliotecznych uŜytych w deklaracjach. Oznaczenia moŜna odtworzyć dwoma
sposobami.
1) Wskazać kursorem blok w folderze biblioteki w drzewie projektu. Przez kilka
sekund widać wtedy deklarację bloku (jako dymek).
2) Zaznaczyć blok w folderze i nacisnąć Ctrl+I. Okno z deklaracją widać teraz aŜ
do momentu zamknięcia.

Dokumentację bloku bibliotecznego wskazanego kursorem w deklaracji VAR


moŜna otrzymać naciskając F1.

• Kod – cz. II
Podczas wpisywania kodu warto korzystać z opcji autouzupełniania nazw
(podpowiedzi). Listę moŜliwych autouzupełnień generuje naciśnięcie Ctrl + Spacja.

83
Warunkiem wyświetlania autouzupełnień jest kompilacja tworzonego projektu
zarówno na początku, jak i w trakcie wpisywania kodu (zob. Uzupełnienia).
Klawisz Enter wstawia słowo wybrane z listy autouzupełnień zamykając ją. Esc
zamyka listę bez wstawiania. Takie same rezultaty daje kliknięcie wybranego
słowa lub kliknięcie obok listy.

Finalny kod bloku FB_PULSE ma postać.

• Kompilacja – jak poprzednio


Uwaga. MoŜna byłoby juŜ teraz przygotować program testujący w postaci
jednostki POU w projekcie PROJ_MY_BLOCKS i uruchomić symulator CPSim.
Testowanie będzie jednak przeprowadzone dopiero po eksporcie biblioteki,
która zostanie importowana do nowego projektu.

Eksport biblioteki
Projekt jest eksportowany jako biblioteka, którą po nadaniu nazwy, określeniu
połoŜenia i wyborze obiektów odpowiednio się kompiluje.
• Projekt > Eksport > Biblioteka

84
W oknie Eksportuj projekt jako bibliotekę wstępnie pojawia się nazwa projektu.

• Nazwa biblioteki
Wpisać nazwę biblioteki, tutaj My_blocks i ew. wypełnić pozostałe pola okna za
wyjątkiem PołoŜenia pliku. ŚcieŜka menu moŜe być wypełniona jak niŜej lub
pozostać pusta.

85
• PołoŜenie pliku bibliotecznego
– Kliknąć
– Wskazać katalog (zwykle Biblioteki) oraz wpisać nazwę pliku bibliotecznego z
rozszerzeniem .lcp, czyli tutaj My_blocks.lcp i zapisać.

Nazwa pliku moŜe, ale nie musi być nazwą biblioteki. Pole PołoŜenie pliku
wskazuje, gdzie biblioteka będzie się znajdować. ŚcieŜka menu, na razie
nieobsługiwana, ma w przyszłości słuŜyć edytorowi języka schematów blokowych
FBD.

86
• Wybór obiektów do eksportu
Za pomocą znaczników po lewej stronie naleŜy wybrać te obiekty, które
ostatecznie zostaną wyeksportowane (tutaj obydwa). Do szybkiego przełączenia
zaznaczony/niezaznaczony słuŜy przycisk Wszystkie. Interfejs przywołuje
deklarację wejść/wyjść. Cztery przyciski poniŜej wybierają bloki funkcjonalne,
programy, funkcje i zmienne globalne, jeŜeli takie występowały w projekcie.
Zmiennych globalnych do biblioteki zazwyczaj jednak się nie eksportuje.

• Kompilacja biblioteki
Naciśnięcie OK rozpoczyna kompilację do postaci półskompilowanej
(rozszerzenie .lcp, Projekt > Buduj kompiluje do postaci binarnej). OstrzeŜenia o
nieimportowanych zaleŜnościach są nieistotne i w następnych wersjach pakietu
CPDev nie będą się pojawiać.

Brak błędów świadczy o poprawności kodu. Teraz My_blocks znajduje się wraz z
innymi bibliotekami w katalogu Biblioteki.

• Plik > Zapisz. Zapis projektu w pliku z rozszerzeniem .xml, np. jako
Proj_My_Blocks.xml.

Plik projektu formatu XML z kodem źródłowym biblioteki naleŜy


zachować dla przyszłych uzupełnień i korekt.

87
Plik > Zamknij

Testowanie
Przeprowadza się je za pomocą osobnego projektu, tutaj Test_My_blocks.
Testowanie bloku FB_AVERAGE sprowadzi się do podstawienia liczb i kontroli
wyniku, a testowanie bloku FB_PULSE do sprawdzenia liczby generowanych
impulsów za pomocą licznika CTU.
• Lista zmiennych globalnych

A, B, C będą wejściami, a D wyjściem bloku FB_AVERAGE, E wejściem


FB_PULSE, a F wyjściem CTU.

88
• Program testujący

Projekt Test_My_blocks zawiera biblioteki IEC_61131 i My_blocks. Pierwsza


biblioteka jest potrzebna drugiej jako biblioteka zaleŜna. Wymaga jej teŜ program
testujący ze względu na licznik CTU. Bloki FB_PULSE i CTU łączy zmienna
lokalna P2C.
Uwaga. Biblioteki Basic_blocks i Complex_blocks wchodzące w skład pakietu
CPDev są bibliotekami samodzielnymi. Gdyby bloki w nich występujące miały
być uŜyte we własnej bibliotece uŜytkownika, to w źródłowym projekcie naleŜy
je zadeklarować, poniewaŜ będą bibliotekami zaleŜnymi.

• Symulator CPsim
Po kompilacji projektu Test_My_blocks, uruchomieniu symulatora, wyborze
wartości A, B, C oraz 5–krotnym naprzemiennym ustawianiu wejścia E na 0, 1,
lista zmiennych globalnych wygląda jak niŜej.

89
Uzupełnianie biblioteki
Polega na uzupełnieniu o nowe składniki projektu z kodem źródłowym biblioteki, czyli
tutaj projektu PROJ_MY_BLOCKS z plikiem Proj_My_blocks.xml. Następnie
powtarza się eksport biblioteki wybierając Projekt > Eksport > Biblioteka.
Dotychczasowa zawartość pliku bibliotecznego My_blocks.lcp zostaje zastąpiona
nową.

90
PRZEGLĄD JĘZYKA ST
Niniejszy przegląd jest przeznaczony dla uŜytkowników, którzy zetknęli się juŜ z
językiem ST. UŜytkownikom nie znającym ST moŜna polecić ksiąŜkę J. Kasprzyka
Programowanie sterowników przemysłowych (WNT, W-wa, 2006).

Norma IEC 61131-3


Języki programowania
Norma IEC 61131-3, dalej oznaczana skrótem IEC, definiuje pięć języków
programowania sterowników:
– tekst strukturalny ST – schemat blokowy FBD
– lista rozkazów IL – schemat sekwencyjny SFC
– schemat drabinkowy LD
Najbardziej uniwersalny jest język ST (Structured Text) będący językiem
algorytmicznym wysokiego poziomu zbliŜonym do Pascala. W pakiecie CPDev został
on zaimplementowany jako pierwszy.

Elementy języków
Są nimi:
typy danych, np. BOOL, INT, REAL
– jednostki organizacyjne oprogramowania POU
– elementy konfiguracji
(POU – Program Organization Unit).

Jednostki organizacyjne oprogramowania POU


WyróŜnia się trzy rodzaje jednostek POU:
– programy – bloki funkcjonalne – funkcje
Bloki funkcjonalne i funkcje są elementami programów. RóŜnica między blokami a
funkcjami tkwi w tym, Ŝe funkcje dla tych samych danych wejściowych dają zawsze
ten sam wynik. MoŜe natomiast tak nie być w przypadku bloków, które w pamięci
przechowują wartości o swym stanie, a od niego zaleŜy aktualny wynik. Dlatego
uŜycie bloku musi poprzedzać jego deklaracja, bo wiąŜe się z nią rezerwacja pamięci
na dane o stanie.

Elementy konfiguracji
Wspierają instalowanie i uruchamianie programów w systemach sterownikowych. Są
nimi:
– konfiguracja – zadania – ścieŜki dostępu
– zasoby – zmienne globalne
W pakiecie CPDev konfiguracja jest nazywana projektem. Elementami projektu
wykorzystującego jeden sterownik są zadania i zmienne globalne. Programy
przyporządkowuje się zadaniom.

Struktura jednostek POU


Jednostki POU mają jednakową strukturę, na którą składają się:
– rodzaj jednostki i nazwa
– deklaracje zmiennych i egzemplarzy bloków funkcjonalnych

91
– kod programu.
Słowami kluczowymi określającymi rodzaj POU są PROGRAM, FUNCTION_BLOCK
i FUNCTION. Deklaracji podlegają zmienne wejściowe, wyjściowe i lokalne. W
deklaracjach lokalnych VAR...END_VAR umieszcza się deklaracje egzemplarzy
bloków funkcjonalnych (instancje). Programy pisane w róŜnych językach normy IEC
róŜnią się faktycznie tylko formą kodu. Rodzaj jednostki i deklaracje wyglądają tak
samo.

Identyfikatory (nazwy)
Nazwy zmiennych, programów, bloków funkcjonalnych i funkcji zaczynają się od
litery lub podkreślnika. Zgodnie z normą IEC nie rozróŜnia się między małymi a
duŜymi literami, równieŜ w przypadku słów kluczowych. Jednakowo traktowane są
więc np.: 1) START, Start, start (zmienna), 2) THEN, Then, then, 3) END_VAR,
end_var.
W pakiecie CPDev następuje wewnętrzna konwersja małych liter nazw na litery duŜe
(chociaŜ w edytorze programów nadal prezentowane są małe, tak jak je napisano).
Jednakowe nazwy w róŜnych bibliotekach
Nazwy muszą być unikalne w ramach danego projektu lub biblioteki. W przypadku,
gdy nazwa w róŜnych bibliotekach się powtarza (bądź powtarza się w projekcie i
bibliotece), tzn. np. w standardowej bibliotece IEC_61131 znajduje się blok
opóźniający TON, zaś w innej bibliotece, np. My_blocks, pod nazwą TON istnieje
inny blok, wówczas deklarując egzemplarze tych bloków naleŜy nazwę TON
poprzedzić nazwą biblioteki i kropką, czyli:
IEC_61131.TON, My_blocks.TON
Po takim uzupełnieniu kompilator jest w stanie jednoznacznie dokonać wyboru.
Gdyby tak nie uczyniono, kompilator zasygnalizowałby błąd Multiple name found lub
Ambigous... Nazwa poprzedzona nazwą projektu lub biblioteki stanowi pełną nazwę
w pakiecie CPDev. Pełnych nazw moŜna zawsze uŜywać zamiast nazw
standardowych (krótkich).

Typy danych i zmienne


Elementarne typy danych

Lp. Nazwa Typ danych Rozmiar i zakres


1 BOOL boolowski 1B (FALSE, TRUE ⇔ 0,1)
2 BYTE bajt 1B (0 ... 255)
3 WORD słowo 2B (0 ... 65535)
4 DWORD słowo podwójne 4B (0 ... 232-1)
5 LWORD słowo długie 8B (0 ... 264-1)
6 SINT całkowita krótka 1B (-128 ... 127)
7 INT całkowita 2B (-32768 ... 32767)
8 DINT całkowita podwójna 4B (-231 ... 231-1)
9 LINT całkowita długa 8B (-263 ... 263-1)
10 USINT całkowita krótka bez 1B (0 ... 255)
znaku

92
11 UINT całkowita bez znaku 2B (0 ... 65535)
12 UDINT całkowita podwójna 4B (0 ... 232-1)
bez znaku
13 ULINT całkowita długa bez 8B (0 ... 264-1)
znaku
14 REAL rzeczywista 4B formatu IEEE-754
15 LREAL rzeczywista długa 8B formatu IEEE-754
16 TIME czas trwania 4B (-T#24d20h31m23s648ms...
T#0s...#24d20h31m23s647ms)
17 DATE data 4B (0001-01-01 ... 9999-12-31)
18 TIME_OF_DAY godzina dnia 4B (00:00:00.00... 23:59:59.99)
19 DATE_AND_TIME data i czas 8B (połączenie typów DATE i
TIME_OF_DAY)
20 STRING ciąg znaków zmienna długość

Pakiet CPDev nie obsługuje typów LREAL, STRING, USINT, UINT,


UDINT i ULINT.

Typy uniwersalne
Są to grupy typów elementarnych zebranych według przeznaczenia.

ANY
ANY_BIT ANY_NUM ANY_DATE TIME,

BOOL ANY_INT ANY_REAL DATE STRING


i typy
BYTE INT UINT REAL TIME_OF_DAY
pochodne
WORD SINT USINT LREAL DATE_AND_TIME
DWORD DINT UDINT
LWORD LINT ULINT

Stałe (literały)
Przykładami stałych typów najczęściej uŜywanych są:
BOOL: TRUE, BOOL#1
INT: 13, INT#-1
REAL: 4.1415, REAL#18, 1.2E-6
TIME: T#1m3s250ms
TIME_OF_DAY: TOD#06:00:00

Typem stałej liczbowej bez kropki dziesiętnej jest INT, a z kropką REAL.

Inny typ stałej liczbowej niŜ INT, REAL wymusza się poprzedzając stałą jego nazwą i
znakiem #, np. DINT#-13, REAL#1.
Liczby niedziesiętne
Format zapisu liczb niedziesiętnych zawiera: 1) podstawę systemu liczbowego, np. 2,
8, 16 itp., 2) znak #, 3) ciąg alfanumeryczny reprezentujący wartość. Przykładowo

93
2#11111111, 8#377, 16#FF oznaczają 255 dziesiętnie. Byłoby tym takŜe
WORD#16#00FF (wiodące zera nie są niezbędne). Wspierane są równieŜ systemy
„nieinformatyczne”. Na przykład 5#24 reprezentuje 14.

Wartości początkowe
Domyślne początkowe wartości zmiennych są następujące:

Typ danych Wartość początkowa


ANY_BIT, ANY_INT 0
ANY_REAL 0.0
TIME T#0s
DATE D#0001-01-01
TIME_OF_DAY TOD#00:00:00
DAY_AND_TIME DT#0001-01-01-00:00:00
STRING '' (pusty)

Wartość początkową inną niŜ domyślna podaje się po deklaracji typu, np.:
lampa: BOOL := TRUE;

Atrybuty
Pakiet CPDev udostępnia dwa atrybuty zmiennych:
podtrzymywana – RETAIN, stała – CONSTANT
Podtrzymywaną jest zmienna, której wartość zostaje zachowana podczas zaniku
zasilania. Stała ma zawsze ustaloną wartość. Wartość początkowa zmiennej
podtrzymywanej dotyczy tylko zimnego startu (pierwsze uruchomienie), a potem nie
ma juŜ znaczenia. Zmienne niepodtrzymywane inicjowane są wartościami
początkowymi przy kaŜdym włączeniu zasilania (zimny start i ciepły restart).

Deklaracje zmiennych
Norma IEC definiuje kilka rodzajów deklaracji zmiennych:
VAR VAR_IN_OUT
VAR_INPUT VAR_EXTERNAL
VAR_OUTPUT VAR_GLOBAL
Zmienne lokalne są deklarowane za pomocą VAR. VAR_INPUT, VAR_OUTPUT i
VAR_IN_OUT stosuje się w blokach funkcjonalnych i funkcjach. VAR_EXTERNAL
deklaruje uŜycie zmiennych zdefiniowanych w konfiguracji jako VAR_GLOBAL.
KaŜdy rodzaj deklaracji kończy END_VAR.
W pakiecie CPDev zmienne globalne deklaruje się zwykle za pomocą Listy
zmiennych globalnych, ale moŜna je takŜe zadeklarować przed rozpoczęciem
programu (powyŜej słowa PROGRAM, zob. Dla zaawansowanych). Deklaracje
VAR_EXTERNAL występują tylko w programach, a nie w blokach funkcjonalnych i
funkcjach. Atrybutu Podtrzymywana (RETAIN) moŜna uŜywać tylko w deklaracjach
VAR, VAR_OUTPUT i VAR_GLOBAL.
Norma IEC dopuszcza ponadto zmienne VAR_ACCESS wymieniane z innymi
systemami, ale nie stosuje się ich w CPDev.

94
Lokalizacja zmiennych globalnych
Lokalizację zmiennej globalnej w pamięci sterownika określa poprzedzony
modyfikatorem AT zapis, na który składa się znak %, przedrostek rozmiaru oraz
adres logiczny, np.:
pompa AT %B0009 : BOOL;
Przedrostki reprezentujące typy normy IEC podano w tabeli.

Przedrostek Typy danych Rozmiar


B, X, brak BOOL, BYTE, SINT, USINT 1B
W WORD, INT, UINT 2B
D DWORD, DINT, UDINT, REAL, 4B
TIME, DATE, TIME_OF_DAY
L LWORD, LINT, ULINT, LREAL, 8B
DATE_AND_TIME

Przedrostki B, X oraz wiodące zera moŜna pominąć, jak np. %9 w odniesieniu do


pompy powyŜej. Zbiorcza deklaracja
A, B, C AT %W0000:INT;
jest równowaŜna trzem osobnym deklaracjom
A AT %W0000:INT; B AT %W0001:INT; C AT %W0002:INT;
Modyfikatora AT nie stosuje się dla zmiennych lokalnych (deklarowanych poprzez
VAR, a nie VAR_GLOBAL lub na Liście zmiennych globalnych). Zmienne lokalne
kompilator CPDev rozmieszcza automatycznie.

Adresy w pamięci
Dla zmiennej globalnej zadeklarowanej z modyfikatorem AT kompilator rezerwuje
liczbę bajtów odpowiednio do rozmiaru określonego przez jej typ i umieszcza ją w
pamięci poczynając od bajtu, którego adres wyznacza następująco:
adres bajtu w pamięci = adres logiczny * rozmiar,
gdzie adres logiczny jest wartością podaną po przedrostkach %B, X, W, D, L. Na
przykład deklaracja
licznik AT %W0007: INT;
oznacza, Ŝe zmienna licznik znajduje się w pamięci na 2·7=14-tym bajcie (i 15-
tym). Z powyŜszej zasady wynika, Ŝe zaleŜnie od rodzaju przedrostka adres
pierwszego bajtu, w którym znajduje się wartość zmiennej ma własność podaną w
poniŜszej tabeli.

Przedrostek Adres bajtu w pamięci


B, X, brak jak adres logiczny po przedrostku
W adres parzysty
D adres podzielny przez 4

95
L adres podzielny przez 8

JeŜeli zmienną globalną zadeklarowano bez wskazania lokalizacji (bez AT),


kompilator umieszcza ją automatycznie wypełniając ewentualne puste obszary
pomiędzy zmiennymi zlokalizowanymi (z AT). Minimalizuje się przez to zajętość
pamięci. W pustych obszarach znajdą się równieŜ zmienne lokalne.
Znajomość adresów zmiennych w pamięci jest potrzebna przede wszystkim dla
skonfigurowania komunikacji ze sterownikiem po stronie komputera nadrzędnego.
Planując rozmieszczenie zmiennych globalnych (z AT) naleŜy zwrócić uwagę na to,
aby pola bajtów przeznaczone na poszczególne zmienne nie zachodziły na siebie.
MoŜe to się zdarzyć zwłaszcza przy grupowej deklaracji zmiennych, bo wprawdzie
kompilator wyznacza wolny adres dla pierwszej zmiennej, ale nie sprawdza czy na
następnych wolnych adresach zmieści się cała grupa. Sytuację, w której pola
zlokalizowanych zmiennych zachodzą na siebie kompilator sygnalizuje ostrzeŜeniem
(podświetlenie). Podobne ostrzeŜenie występuje równieŜ w przypadku niezgodności
przedrostka z deklarowanym typem. Rezerwacja pamięci zostanie wtedy dokonana
na podstawie przedrostka.
Bajtowe adresy zmiennych w pamięci podane są w Raporcie projektu (wraz z
adresami dla komunikacji Modbus).

Deklaracje bloków funkcjonalnych


Egzemplarze bloków funkcjonalnych (instancje) są deklarowane lokalnie w ramach
VAR ... END_VAR. JeŜeli np. OPOZNIENIE jest egzemplarzem standardowego
bloku TON, to deklaracja ma postać:
OPOZNIENIE : TON;

Programowanie w ST
Programy, bloki i funkcje
Jednostki POU są definiowane i kończone za pomocą następujących słów
kluczowych:

Jednostka POU Słowa definiujące i kończące


Program PROGRAM ... END_PROGRAM

Blok funkcjonalny FUNCTION_BLOCK ...


END_FUNCTION_BLOCK
Funkcja FUNCTION ... END_FUNCTION

Po słowie definiującym następują deklaracje, a potem kod. Jak podawano, w skład


programów mogą wchodzić bloki funkcjonalne i funkcje. Bloki mogą zawierać inne
bloki i funkcje, a funkcje tylko inne funkcje. Nie dopuszcza się funkcji rekurencyjnych
i bloków z rekurencją.

96
Instrukcje języka ST
WyróŜnia się wśród nich instrukcję przypisania (podstawienia), instrukcje wyboru,
pętle, instrukcje przerywające wykonanie oraz instrukcje uŜycia funkcji i bloków
funkcjonalnych.
• P r z y p i s a n i e : zmienna := wyraŜenie;
Instrukcję kończy średnik ;.
• W y b ó r : IF, CASE
IF
IF A>B THEN
B := A; Po END_IF, END_VAR i podobnych nie
ELSIF A<B THEN muszą występować średniki.
A := B;
ELSE A := 0; B:= 0;
END_IF

CASE Zmienna wybierająca A musi być jednym z


typów całkowitych (ANY_INT, BYTE,
CASE A OF
WORD...). Wartości określające wejścia do
1: B:=1; A:=2;
2..10: A:=A+1; poszczególnych przypadków muszą być
B:=A*1000; liczbami stałymi. Kompilator nie sprawdza,
11,13,15..21: A:=A+2; czy zakresy wejść nie pokrywają się oraz
B:=A*10; czy typy wejść są zgodne ze zmienną
ELSE A:=1; B:=9999; wybierającą. W przypadku niezgodności
END_CASE typów błąd Cannot match primitive
function... linker zasygnalizuje w linii 0.

• P ę t l e : FOR, WHILE, REPEAT


FOR WHILE REPEAT
licznik := 0; WHILE st1 OR st2 REPEAT
FOR i:=1 TO 10 DO DO B := B+1;
licznik:=licznik+i; pompa := FALSE; UNTIL B>10
END_FOR alarm := TRUE; END_REPEAT
END_WHILE

JeŜeli zmienna sterująca pętli FOR ma nie być zwiększana o 1, ale np. o 2 lub –1,
to instrukcję uzupełnia się o BY 2 lub BY –1, tzn.:
FOR i:=1 TO 10 BY 2 DO ... END_FOR
FOR i:=10 TO 1 BY –1 DO ... END_FOR
Po BY nie moŜe występować zmienna, a tylko identyfikator definiujący stałą.
• P r z e r w a n i e w y k o n y w a n i a : EXIT, RETURN
EXIT słuŜy do przerwania pętli FOR, WHILE lub REPEAT. RETURN kończy
natychmiast wykonywanie bloku funkcjonalnego lub funkcji nie czekając na END.

97
EXIT RETURN
WHILE i>0 DO FUNCTION LINE: REAL
l := l+1; VAR_INPUT
IF l>MAX_l THEN a,x,b: REAL;
EXIT; END_VAR
END_IF LINE:=a*x+b;
i := i-1; RETURN;
END_WHILE END_FUNCTION
• Funkcja
Funkcje standardowe i systemowe (zob. dalej) są bezpośrednio dostępne,
natomiast funkcje utworzone przez uŜytkownika wymagają importu z biblioteki.
Instrukcja uŜycia funkcji LINE zdefiniowanej powyŜej ma postać:
Y := LINE(A1,X1,B1);
• Blok funkcjonalny
Deklarując OPOZNIENIE jako egzemplarz bloku TON (jw.), wywołuje się go w
programie lub innym bloku i korzysta z wyjść za pomocą następujących instrukcji:
OPOZNIENIE(IN:=wejscie, PT:=t#5s);
silnik := OPOZNIENIE.Q;
linijkaLED := OPOZNIENIE.ET;
W pakiecie CPDev moŜna równieŜ przekazywać wyjścia wprost w instrukcji
wywołania bloku korzystając ze znaku =>, tj.:
OPOZNIENIE(IN:=wejscie, PT:=t#5s, Q=>silnik,
ET=>linijkaLED);
Kolejność podawania wejść w wywoływaniu bloku funkcjonalnego nie jest waŜna.
Ponadto wszystkie wymagane wejścia muszą zostać uŜyte.

Operatory języka ST
Operatory wchodzą w skład wyraŜeń występujących w instrukcjach języka ST.
Operatory moŜna zastępować funkcjami, a róŜnica tkwi jedynie w sposobie zapisu
(operator występuje pomiędzy argumentami). Na przykład zapisy AND jako
operatora i funkcji wyglądają następująco:
x1 AND x2 AND(x1,x2)
W poniŜszej tabeli uszeregowano operatory według malejącego priorytetu. Typy
argumentów są podane w opisach funkcji standardowych (zob. dalej).

Symbol Opis Funkcja


() Nawiasy –
F(x) Obliczenie wartości funkcji F(x)
** Potęgowanie EXPT
- Negacja arytmetyczna NEG
NOT Negacja boolowska NOT
* MnoŜenie MUL
/ Dzielenie DIV
MOD Reszta z dzielenia MOD
+ Dodawanie ADD

98
- Odejmowanie SUB
<, >, <=, >= Porównanie LT,...,GE
= Równość EQ
<> Nierówność NQ
AND, & Iloczyn boolowski AND
XOR Suma modulo 2 XOR
OR Suma boolowska OR

Operatory oddzielone w tabeli przerywanymi liniami w tabeli, tzn. (-,NOT), (+,-), (=,
<>), (*, /, MOD), mają te same priorytety, więc są wykonywane w kolejności
występowania w wyraŜeniu (od lewej do prawej).

Tablice jednowymiarowe

Fragment programu Kompilator CPDev obsługuje


jednowymiarowe tablice typów prostych.
VAR Tablice mogą być deklarowane tylko
T:ARRAY[0..5] OF INT; wewnątrz jednostek programowania POU
END_VAR jako zmienne lokalne. Nie mogą być
wejściami ani wyjściami.
FOR I:=1 TO 5 DO
T[I-1]:=T[I]; Fragment programu podany obok
END_FOR reprezentuje filtr określający średnią
T[5]:=A; S:=0; bieŜącą S z 6–ciu pomiarów zmiennej A.
FOR I:=0 TO 5 DO
S:=S+T[I];
END_FOR
S:=S/I;

99
FUNKCJE
Norma IEC 61131–3 definiuje obszerny zestaw funkcji standardowych podzielonych
na grupy. Spośród grup działających na typach elementarnych pakiet CPDev
udostępnia niemal wszystkie (wyjąwszy operacje na ciągach znaków – typ STRING).

Funkcje matematyczne i logiczne

Grupa Nazwa Znaczenie Typy WE/WY


ADD* dodawanie
SUB odejmowanie
MUL* mnoŜenie
Arytmetyczne DIV dzielenie ANY_NUM
MOD reszta z dzielenia
EXPT potęgowanie
SINT, INT, DINT,
NEG zmiana znaku
LINT, REAL
ABS wartość bezwzględna
SQRT pierwiastek kwadratowy
LN logarytm naturalny
LOG logarytm dziesiętny
EXP funkcja ex
Numeryczne SIN sinus REAL
COS cosinus
TAN tangens
ASIN arcus sinus
ACOS arcus cosinus
ATAN arcus tangens
AND* iloczyn logiczny
Boolowskie OR* suma logiczna ANY_BIT
XOR* exclusive OR
NOT negacja
Przesuwanie SHL w lewo, z zerowaniem
BYTE, WORD,
bitów SHR w prawo, z zerowaniem
DWORD,
ROL w lewo, rotacyjnie
LWORD
ROR w prawo, rotacyjnie
GT większy
GE większy lub równy
Porównania EQ równy ANY
LT mniejszy
LE mniejszy lub równy
NE nierówny
Czasowe ADD dodawanie TIME
SUB odejmowanie

100
Wyjaśnienia
– Gwiazdka * po nazwie funkcji oznacza zmienną liczbę argumentów (maksymalnie
15).
– Funkcje przesuwania bitów mają dwa argumenty – ANY_BIT bez BOOL, INT.
– Bardziej złoŜone działania niŜ ADD, SUB na typie TIME moŜna wykonać po
konwersji na typ liczbowy.
– Dodatkowa funkcja numeryczna RANDOML (bezargumentowa) zwraca liczbę
REAL z przedziału 0.0...1.0 generowaną według prostokątnego rozkładu
prawdopodobieństwa.

Funkcje wyboru
Funkcje wyboru operują na wszystkich typach elementarnych – ANY.

Nazwa Znaczenie Opis


SEL (G, IN0, IN1)
SEL selektor OUT:=IN0 dla G=FALSE
„jeden z dwóch” OUT:=IN1 dla G=TRUE
Typy: G - BOOL, IN0, IN1 - ANY
MAX wybór maksimum MAX (IN1, IN2)
MIN wybór minimum MIN (IN1, IN2)
LIMIT (MN, IN, MX)
LIMIT ogranicznik
OUT:=MIN (MAX (IN, MN), MX)
MUX (K, IN0, IN1, …)
MUX* multiplexer OUT:=INi dla K=i
Typy: K - INT, INO, IN1, … - ANY
Multiplekser MUX moŜe przełączać do 15–tu wejść INi.

Konwersje
JeŜeli w poniŜszej tabeli brak funkcji konwertującej typ wejścia na inny, naleŜy
zastosować konwersję dwustopniową z typem pośrednim.

Wejście Nazwa funkcji


INT_TO_REAL INT_TO_DINT
INT
INT_TO_BOOL INT_TO_WORD
REAL_TO_INT REAL_TO_TIME
REAL
TRUNC ROUND
DINT_TO_REAL DINT_TO_TIME
DINT
DINT_TO_DWORD DINT_TO_INT
TIME TIME_TO_DINT TIME_TO_REAL
BYTE BYTE_TO_SINT
WORD WORD_TO_INT
BOOL BOOL_TO_INT
SINT SINT_TO_BYTE
LINT LINT_TO_LWORD

101
DWORD DWORD_TO_DINT
LWORD LWORD_TO_LINT

Wyjaśnienia
– Nie wymieniona wyŜej, ale dostępna funkcja DEPR_INT_TO_DINT realizuje
konwersję INT na DINT z powielaniem najstarszego bitu w sposób programowy
(funkcja in-line zachowana w celach kompatybilności ze starszymi maszynami
wirtualnymi).

Czas bieŜący
W uzupełnieniu normy IEC pakiet CPDev udostępnia dodatkowo:
– czas systemowy jako daną typu TIME
– obsługę zegara RTC
– składniki czasu i daty oraz dni tygodnia.
Funkcje dotyczące dwu pierwszych uzupełnień podano w tabeli. Czas systemowy
zwracany przez CUR_TIME jest liczony od 0, a po przekroczeniu zakresu ustawiany
na wartość ujemną przekraczającą 24 dni; potem znowu inkrementowany aŜ do
przekroczenia 24 dni itd. Na podstawie róŜnicy dwóch odczytów funkcją CUR_TIME
odmierza się odstęp czasu.

Nazwa Funkcja zwraca Typ wyniku


CUR_TIME aktualny czas systemowy TIME
READ_RTC czas bezwzględny odczytany z DT
zegara RTC
WRITE_RTC status aktualizacji zegara RTC z BOOL
argumentem funkcji
czas bezwzględny rozpoczęcia cyklu
GET_TST DT
zadania
TASK_CYCLE czas trwania cyklu zadania TIME

Wyjaśnienia
– Funkcje READ_RTC, WRITE_RTC oraz GET_TST operują na danych
DATE_AND_TIME. WRITE_RTC zwraca flagę poprawności zapisu nowej wartości
do układu RTC.
– GET_TST zwraca czas rozpoczęcia cyklu zadania, z którego zwykle korzysta się
częściej niŜ z czasu chwilowego zwracanego przez READ_RTC.
– TASK_CYCLE zwraca czas cyklu zadania ustawiony w projekcie.

Składniki czasu i daty


Strukturę danych typu DATE_AND_TIME pokazano na rysunku. Kolejne bajty
oznaczają: CC – setne części sekundy, SS – sekunda, NN – minuta, HH – godzina,
DD – dzień, MM – miesiąc, YY+YY – rok.

102
DATE_AND_TIME
CC SS NN HH DD MM YY YY
Nr 0 1 2 3 4 5 6 7
bajtu
TIME_OF_DAY DATE

Funkcje począwszy od GET_HUNDSEC (setne części sekundy), aŜ do


GET_YEAR zwraca ją odpowiedni składnik jako daną typu INT. Argument
niektórych funkcji moŜe być takŜe typu TIME_OF_DAY, a innych DATE. Dzień
tygodnia zwraca funkcja GET_DAYOFWEEK.

Nazwa Co zwraca Typ argumentu


GET_HUNDSEC setne części sekundy DT, TOD
GET_SECOND sekunda DT, TOD
GET_MINUTE minuta DT, TOD
GET_HOUR godzina DT, TOD
GET_DAY dzień DT, D
GET_MONTH miesiąc DT, D
GET_YEAR rok DT, D
GET_DAYOFWEEK dzień tygodnia DT, D

Słowo statusowe
Funkcja GET_STATUS_WORD1 zwraca słowo statusowe, którego bity, jeśli
ustawione, sygnalizują stany podane w tabeli.

Bit Maska Znaczenie


0 16#01 Przekroczenie czasu cyklu zadania w ostatnim uruchomieniu
1 16#02 Indeks dla odczytu wartości z tablicy poza zakresem
2 16#04 Zimny start (0 oznacza normalną pracę lub ciepły restart)

103
BIBLIOTEKI BLOKÓW FUNKCJONALNYCH
Przedstawiono trzy biblioteki pakietu CPDev zawierające bloki funkcjonalne.
Biblioteki Basic_blocks i Complex_blocks są stopniowo uzupełniane (zwłaszcza
Complex_blocks)

Biblioteka IEC_61131
Oznaczenia sygnałów na schematach i w opisach odpowiadają normie IEC, tj.:
Q – wyjście typu BOOL,
R – wejście zerowania logicznego (reset),
S – wejście ustawiające (set),
CLK↑ – narastające zbocze wejścia CLK; CLK↓ – zbocze opadające.
Wartości początkowe wszystkich wejść są zerowe.

Bloki dwustanowe

RS RS – przerzutnik typu RS (RS flip-flop)


BOOL S Q1 BOOL Q1 = NOT R1 AND (Q1n-1 OR S)
BOOL R1

SR SR – przerzutnik typu SR (SR flip-flop)


BOOL S1 Q1 BOOL Q1 =S1 OR (NOT R AND Q1n-1)
BOOL R

SEMA SEMA – semafor (semaphore)


BOOL CLAIM BUSY BOOL BUSY = TRUE dla CLAIM=TRUE
BOOL RELEASE BUSY = FALSE dla RELEASE=TRUE i CLAIM=FALSE

Detektory zbocza

R_TRIG R_TRIG – detektor zbocza narastającego (rising


BOOL CLK Q BOOL edge detector)
Q = ↑↓ dla CLK↑
F_TRIG F_TRIG – detektor zbocza opadającego (falling
BOOL CLK Q BOOL edge detector)
Q = ↑↓ dla CLK↓

Liczniki

104
CTU CTU – licznik dodający (up counter)
BOOL CU Q BOOL CV = CV+1 dla CU↑, CV<PV i R=FALSE
BOOL R CV INT CV = 0 dla R=TRUE
INT PV Q = TRUE dla CV=PV

CTD CTD – licznik odejmujący (down counter)


BOOL CD Q BOOL CV = CV-1 dla CD↑, CV>0 i LD=FALSE
BOOL LD CV INT CV = PV dla LD=TRUE
INT PV Q = TRUE dla CV=0

CTUD CTUD – licznik dodająco–odejmujący (up-down counter)


BOOL CU QU BOOL CV = CV+1 dla CU↑, CV<PV i R=LD=FALSE
BOOL CD QD BOOL CV = CV-1 dla CD↑, CV>0 i R=LD=FALSE
BOOL R CV INT CV = 0 dla R=TRUE
BOOL LD CV = PV dla LD=TRUE i R=FALSE
INT PV QU = TRUE dla CV=PV
QD = TRUE dla CV=0

Czasomierze

TON TON – opóźnione załączenie (on-delay timing)


BOOL IN Q BOOL IN
PT
TIME PT ET TIME Q
ET

TOF TOF – opóźnione wyłączenie (off-delay timing)


BOOL IN Q BOOL IN
TIME PT ET TIME Q
PT
ET

TP TP – generator impulsu (pulse timing)


BOOL IN Q BOOL IN
TIME PT ET TIME Q PT PT

ET

Uwaga. Obsługa zegara RTC jest realizowana w pakiecie CPDev przez funkcje
READ_RTC, WRITE_RTC i GET_TST (zob. Funkcje – czas bieŜący).

105
Biblioteka Basic_blocks
Konwencja oznaczeń:
R – wejście zerowania arytmetycznego, logicznego lub ustawienia innej
wartości (reset),
S – wejście wyboru, przełączenia (select, switch), a w przerzutnikach
wejście ustawiające (set),
IN↑ – narastające zbocze wejścia IN; zapis t0: IN↑ oznacza, Ŝe zbocze
wystąpiło w chwili t0,
Q – wyjście typu BOOL,
OUT – wyjście typu REAL,TIME i in.
Wartości początkowe wszystkich wejść są zerowe.

Bloki matematyczne

DIVI DIVI – dzielenie z ograniczeniem dzielnika (division)


REAL IN1 OUT REAL OUT = IN1/IN2
REAL IN2 LM – ograniczenie IN2 przed 0 (limit)
REAL LM JeŜeli |IN2|<LM, to OUT=IN1/(±LM) wg znaku IN2.

SQR SQR – pierwiastek z linearyzacją początkową (square root)


REAL IN OUT REAL OUT = IN dla IN ≥ LM
REAL LM
OUT = IN/ LM dla IN < LM

Przełączniki, wybieraki

ASWI ASWI – przełącznik analogowy (analog switch)


REAL IN1 OUT REAL OUT = IN1 dla S = FALSE
REAL IN2 OUT = IN2 dla S = TRUE
BOOL S

BSWI BSWI – przełącznik binarny (binary switch)


BOOL IN1 Q BOOL Q = IN1 dla S = FALSE
BOOL IN2
Q = IN2 dla S = TRUE
BOOL S

AMEM AMEM – pamięć analogowa (analog memory)


REAL IN OUT REAL OUT = IN dla TRG = FALSE
BOOL TRG OUT = IN(t0) dla TRG = TRUE, t0: TRG↑

BMEM BMEM – pamięć binarna (binary memory)


BOOL IN Q BOOL Q = IN dla TRG = FALSE
BOOL TRG Q = IN(t0) dla TRG = TRUE, t0: TRG↑

106
COMP COMP – komparator analogowy z histerezą (comparator)
REAL IN1 Q BOOL Q = FALSE dla (IN1-IN2) < -H/2
REAL IN2 Q = TRUE dla (IN1-IN2) > H/2
REAL H

Przerzutniki, impulsatory

DFF DFF – przerzutnik typu D (D flip-flop)


BOOL D Q BOOL Q=D dla CLK↑ i R = FALSE
BOOL CLK NQ BOOL Q = FALSE dla R = TRUE
BOOL R NQ = NOT Q

TFF TFF – przerzutnik typu T (T flip-flop)


BOOL T Q BOOL Q = NOT Qn-1 dla CLK↑ i R = FALSE
BOOL CLK NQ BOOL Q = FALSE dla R = TRUE
BOOL R NQ = NOT Q

JKFF JKFF – przerzutnik typu JK (JK flip-flop) J K Q


BOOL J Q BOOL Q = f(J,K) dla CLK↑ 0
0
0
1
Qn-1
0
BOOL CLK NQ BOOL NQ = NOT Q 1 0 1
BOOL K 1 1 Q n-1

RSFF RSFF – przerzutnik typu RS (RS flip-flop)


BOOL S Q BOOL Jak RS w IEC, ale z dodatkowym wyjściem NQ.
BOOL R1 NQ BOOL

SRFF SRFF – przerzutnik typu SR (SR flip-flop)


BOOL S1 Q BOOL Jak SR w IEC, ale z dodatkowym wyjściem NQ.
BOOL R NQ BOOL

DELS DELS – opóźnienie o jeden cykl (delay)


BOOL IN Q BOOL Qn = INn-1

GENR GENR – generator alarmowy (generator) IN1 IN2 Cykle


BOOL IN1 Q BOOL Q = ↑↓↑↓ dla R = FALSE 0
0
0
1
1
2
BOOL IN2 Q = FALSE dla R = TRUE 1 0 4
BOOL R Wejścia IN1, IN2 określają częstotliwość. 1 1 8

PDUR PDUR – czas trwania impulsu (pulse duration)


BOOL IN OUT TIME OUT = 0 dla IN↑ lub R = TRUE
BOOL R OUT = t dla IN = TRUE i R = FALSE

107
TOTI TOTI – całkowanie-impuls (totalizer)
t
REAL IN Q BOOL
Q = ↑↓ (impuls) dla ∫t IN 1(τ ) dτ = ∆
BOOL R 0

REAL DL R – zerowanie całki


DL – interwał zliczania ∆

Filtry

FILT FILT – filtr dolnoprzepustowy (filter)


REAL IN OUT REAL 1
OUT = IN dla R = FALSE
TIME T Ts + 1
BOOL R OUT = IN dla R = TRUE

DIFR DIFR – róŜniczkowanie z inercją (differentiation)


REAL IN OUT REAL Ts
OUT = IN dla R = FALSE
TIME T Ts + 1
BOOL R OUT = IN dla R = TRUE

Inne

DEBA DEBA – strefa martwa (dead-band)


REAL IN OUT REAL OUT = 0 dla |IN| < DB
REAL DB OUT = IN ± DB dla |IN| ≥ DB (- dla IN>0, + dla IN<0)
OUT = IN dla DB < 0
LIMT LIMT – ograniczenie (limiter)
REAL IN OUT REAL OUT = IN dla MN<IN<MX
REAL MN OUT = MN dla IN<MN
REAL MX OUT = MX dla IN>MX

RAND RAND – liczba losowa (random)


BOOL S OUT REAL OUT = random
REAL IN1 S = FALSE – rozkład normalny N(IN1, IN2)
REAL IN2 IN1 – wartość średnia,
IN2 – odchylenie standardowe
S = TRUE – rozkład prostokątny <IN1, IN2>
IN1 – dolna granica
IN2 – górna granica

Uwaga. Bloki ASWI, BSWI i LIMT moŜna zastąpić funkcjami SEL i LIMIT.
Funkcja SEL automatycznie rozróŜnia typ przełączanych wejść.

108
Bloki systemowe
Są to bloki nie wymagające importu biblioteki, czyli „zawsze dostępne”, których
egzemplarze od razu moŜna deklarować. Na razie grupę bloków systemowych
tworzą bloki COM_SM dla komunikacji z rozproszonymi modułami wejścia/wyjścia
SM1 do SM5 oraz bloki alarmów sygnalizujące restart.
• Bloki komunikacyjne
Struktura tych bloków jest następująca (por. Zegar RTC):
Wejścia
EN – aktywacja komunikacji
NO – numer urządzenia w komunikacie Modbus, wartość stała
TOUT – timeout (ms), wartość stała
OUT1, OUT2,... – wejścia analogowe lub binarne
Wyjścia
C – poprawność/niepoprawność komunikacji
IN1, IN2,... – wyjścia analogowe lub binarne

Uwaga. Bloki COM_SM mogą być uŜyte w projekcie tylko raz.

Bloki komunikacyjne

COM_SM2
COM_SM1 BOOL (true) EN C BOOL
BOOL (true) EN C BOOL
BYTE NO IN1 REAL
BYTE NO IN1 REAL TIME TOUT IN2 REAL
TIME TOUT IN2 REAL
IN3 REAL

IN4 REAL

COM_SM3
BOOL (true) EN C BOOL

BYTE NO IN1 BOOL


TIME BOOL
COM_SM4
TOUT IN2 BOOL (true) BOOL
EN C
BYTE NO
TIME TOUT
BOOL (false) OUT1
COM_SM5
BOOL (true) BOOL BOOL (false) OUT2
EN C
BYTE BOOL (false) OUT3
NO IN1 BOOL
TIME BOOL BOOL (false) OUT4
TOUT IN2
BOOL BOOL (false) OUT5
IN3
BOOL BOOL (false) OUT6
IN4
IN5 BOOL BOOL (false) OUT7
IN6 BOOL BOOL (false) OUT8
IN7 BOOL

IN8 BOOL

109
• Alarmy
R – wejście zerujące (reset)
Q – wyjście alarmujące
Wystąpienie sytuacji alarmowej jest sygnalizowane pojawieniem się TRUE na
wyjściu Q. Alarm gasi się ustawiając TRUE na wejściu R.

Bloki alarmów

APON
BOOL R Q BOOL Wznowienie zasilania („ciepły” restart)

ASTR
BOOL R Q BOOL Zerowanie pamięci („zimny” start)

Alarm aSTR pojawia się, gdy podczas startu sterownika SMC wykryto błąd sumy
kontrolnej w pamięci danych. Wówczas zmienne globalne zostają ustawione na
wartości początkowe, podobnie jak przy pierwszym uruchomieniu programu.
Przykład
Deklaracje
VAR
STAN:APON; RESET:BOOL; ALARM:BOOL;
END_VAR;

UŜycie
RESET:=FALSE; STAN(R:=RESET); ALARM:=STAN.Q;

110
UZUPEŁNIENIA
Poprawianie listy zmiennych
ZałóŜmy, Ŝe początkowo lista zmiennych ma postać

• Błędny adres
Dodawana jest nowa grupa dwu zmiennych SILNIK i POMPA, pierwsza o
niewłaściwym adresie 0002. Kliknięcie Dodaj uzupełnia wprawdzie listę o dwie
zmienne, ale wiersz SILNIK zostaje podświetlony na czerwono sygnalizując kolizję
adresów.

Podobnie jak poprzednio, SILNIK i POMPA powinny mieć adresy 0008 i 0009.
• Zaznaczenie grupowe
Zaznaczyć korygowane wiersze, drugi z przyciskiem Shift lub Ctrl (jak Windows).
Nazwy zmiennych, typ i adres pojawiają się w górnych polach (jeśli ich nie było).
Gdyby zaznaczone zmienne nie były jednakowego typu, pole Typ pozostałoby
puste.
Uwaga. Czerwone podświetlenie sygnalizujące błąd widać tylko, gdy zmiennej
wcześniej nie zaznaczono. Zaznaczeń nie naleŜy więc pozostawiać
przystępując do analizy błędów.

• Poprawianie
Zaznaczenie opcji Adres powoduje automatyczne wyświetlenie pierwszego
wolnego adresu dla kolidującej zmiennej, czyli tutaj 0004.

Gdyby teraz nacisnąć Popraw, to zmienna POMPA pozostałaby na adresie 0003,


a SILNIK na 0004. Zamiast proponowanego 0004 naleŜy jednak wpisać 0008.

111
Po naciśnięciu Popraw lista zmiennych przyjmuje postać

Pięć bajtów o adresach od 0003 do 0007 pozostaje nieobsadzone.

Wypełnianie pustych obszarów


Przypuśćmy, Ŝe poprzednią listę naleŜy uzupełnić o zmienną ANALOG typu REAL.
Wpisanie nazwy, typu oraz zaznaczenie opcji Adres powoduje pojawienie się D0001
jako proponowanego adresu logicznego.

PoniewaŜ zmienna typu REAL zajmuje 4 bajty, więc jej bajtowym adresem w pamięci
jest 0001*4=0004. Naciśnięcie Dodaj generuje następującą listę

Jak widać, pusty obszar został wypełniony w zakresie, w jakim to było moŜliwe.

Zakładki
Są one małymi kwadratowymi znacznikami wyróŜniającymi fragmenty kodu
większych programów w celu ułatwienia nawigacji i poprawy czytelności. Zakładki są
widoczne po lewej stronie kolumny numerów linii programu. MoŜe ich być co
najwyŜej 10, a istnieją tylko czasowo, do momentu zamknięcia projektu. Gdyby
zakładki były potrzebne ponownie, po otwarciu projektu naleŜy je utworzyć od nowa.
Zakładkę tworzy się i przechodzi do linii przez nią zaznaczonej za pomocą skrótów
klawiszowych:
• Shift + Ctrl + 0,...,9 – utworzenie zakładki 0, ..., 9 w miejscu wskazanym przez
kursor
• Ctrl + 0,...,9 – przejście do linii z zakładką 0, ..., 9
Fragment kodu zaopatrzonego w zakładki moŜe wyglądać następująco:

112
Skróty klawiszowe

Skrót Znaczenie Skrót Znaczenie


Ctrl+Up Linia w górę Shift+Ctrl+I Odsuń zaznaczony blok
Ctrl+Down Linia w dół Shift+Ctrl+U Dosuń zaznaczony blok
Ctrl+PgUp Początek ekranu Ctrl+M Przełam linię
Ctrl+PgDown Koniec ekranu Ctrl+H Wstaw linię
Ctrl+Home Początek edytora Ctrl+T Usuń słowo
Ctrl+End Koniec edytora Ctrl+G Usuń linię
Wstaw/wpisz
Ins Shift+Ctrl+Y Usuń do końca linii
(przełączanie)
Kopiuj zaznaczony
Ctrl+Ins Ctrl+0,...,9 Idź do zakładki 0,...,9
fragment
Shift+Del Usuń zaznaczony Shift+Ctrl+0,...,9 Ustaw zakładkę 0,...,9
fragment
Shift+Ins Wklej ze schowka Shift+Ctrl+N Zaznacz wierszowo
(std.)
Ctrl+Bksp Usuń ostatnie słowo Shift+Ctrl+C Zaznacz kolumnowo
Undo (cofnij
Alt+Bksp Shift+Ctrl+L Zaznacz pełne linie
operację)
Redo (powtórz
Shift+Alt+Bksp Shift+Ctrl+B Dopasuj nawias
cofniętą operację)

Błędy, ostrzeŜenia, podpowiedzi


Lista komunikatów
Komunikaty pojawiające się w dolnym polu okna interfejsu klasyfikuje się
następująco:

Ikona Znaczenie Ikona Znaczenie

Błąd Informacja

OstrzeŜenie Zapytanie

Podpowiedź (brak) Niesklasyfikowany tekst

Kompilator generuje komunikaty wymienione w lewej tabeli – błędy, ostrzeŜenia


i podpowiedzi. Błędy świadczą o niemoŜności poprawnej kompilacji, zaś ostrzeŜenia
zwracają uwagę na efekty, które mogły powstać przypadkowo, bądź na moŜliwość

113
powstania niepoprawnego kodu. Podpowiedź moŜe np. zwracać uwagę na
ukrywanie zmiennej globalnej przez zmienną lokalną, której nadano taką samą
nazwę.
Format komunikatów generowanych przez kompilator jest następujący
[ikona] Nazwa_pliku.cst@linia_kodu Treść komunikatu
Za pomocą menu kontekstowego listę komunikatów moŜna kompletnie wyczyścić,
albo usunąć z niej tylko wybrane elementy.
Informacje, zapytania i komunikaty o niesklasyfikowanym tekście przewidziano na
przyszłość, gdy pakiet CPDev pozwoli na rozszerzenie programów o moduły
napisane w językach akceptowanych przez platformę .NET (np. C#).

Linia kodu
Plik .cst podany w komunikacie zawiera kod programu w języku ST utworzony
automatycznie po wybraniu Projekt > Buduj z elementów znajdujących się aktualnie
w drzewie projektu. Dwukrotne kliknięcie komunikatu otwiera okno pliku .cst z
podświetloną linią, która spowodowała zgłoszenie komunikatu. Podobnie jak w
przypadku innych kompilatorów naleŜy jednak liczyć się z tym, Ŝe błąd moŜe
wystąpić w innym miejscu niŜ wskazuje linia. JeŜeli kompilator nie jest w stanie
zlokalizować miejsca błędu lub ostrzeŜenia, podawana jest linia z numerem 0 lub -1.
Wystąpi to np. gdy kompilację wykonano przed zadeklarowaniem zadania.

Pomijanie błędnych obiektów


Kompilator funkcjonuje w sposób przypominający stos. Na przykład napotkanie błędu
podczas analizy instrukcji IF w kodzie bloku funkcjonalnego (własnego) powoduje
zgłoszenie trzech komunikatów: 1) napotkany błąd, 2) błąd w instrukcji IF, 3) błąd
w bloku funkcjonalnym. Dodatkowo, jeŜeli włączona jest opcja kompilatora Pomijaj
błędne obiekty POU podczas kompilacji, zostanie wygenerowane ostrzeŜenie
o przejściu do następnego obiektu POU. W tej sytuacji moŜe wystąpić wadliwe
zgłoszenie błędu w następnym obiekcie. Dlatego poprawiając błędy przy włączonej
opcji pomijania warto sprawdzić, czy kolejne błędy nie są wynikiem poprzednich.

Wyświetlanie autouzupełniania
Warunkiem wyświetlania autouzupełniania jest kompilacja projektu. Zaleca się
uczynić to zaraz na początku po zadeklarowaniu obiektów POU, aby włączyć do
autouzupełniania nazwy typów danych, funkcji standardowych itp. Następną
kompilację moŜna przeprowadzić po zadeklarowaniu zmiennych (i ew. wyczyścić
wtedy listę komunikatów, jeśli przeszkadza). Wyłączenie opcji pomijania błędnych
obiektów powoduje ograniczenie liczby pozycji wyświetlanych w autouzupełnianiu do
takiej, która wynika z kodu przeanalizowanego do momentu napotkania pierwszego
błędnego obiektu POU.

Aktualizacja wersji biblioteki


JeŜeli przy otwieraniu zapisanego dawniej projektu pojawia się ostrzeŜenie
o niezgodności wersji biblioteki projektu z jej aktualną wersją w pakiecie CPDev, to
przy zamykaniu projektu na pytanie o zapisanie zmian naleŜy odpowiedzieć Tak,
nawet wtedy, gdy Ŝadnych zmian nie wprowadzono. Wówczas projekt zostanie
automatycznie związany z aktualną biblioteką.

114
Dyrektywy kompilatora
Są to opcjonalne polecenia dla kompilatora upraszczające przygotowanie programu,
określające sposób dostępu do zmiennych, zachowujące komentarze itd. Format
dyrektywy jest taki jak format komentarza z tym, Ŝe trzecim znakiem musi być $, jak
np. w dyrektywie (*$READ*). Cztery dyrektywy, które mogą być przydatne
uŜytkownikowi podano w tabeli.

Dyrektywa Znaczenie
Zapis VAR_EXTERN (*$AUTO*) END_VAR
(*$AUTO*) automatycznie wstawia do programu deklaracje uŜycia wszystkich
zmiennych znajdujących się na Liście zmiennych globalnych.
Zmienna, w deklaracji której występuje dyrektywa (*$WRITE*), np.
(*$READ*) START: BOOL (*$READ*), jest w danym programie
przeznaczona tylko do odczytu. Zapisu zmiennej mogą
dokonywać inne programy wchodzące w skład projektu.
Zmienna, w deklaracji której występuje dyrektywa (*$READ*), np.
(*$WRITE*) POMPA: BOOL (*$WRITE*), jest w danym programie
przeznaczona tylko do zapisu. Nie moŜna w nim odczytać
wartości, które tej zmiennej nadały inne programy.
Komentarz napisany po dyrektywie w deklaracji zmiennej lub w
(*$COMMENT*) treści jednostki POU pozostaje w plikach projektu i jest m.in.
wykorzystywany w podpowiedziach. Standardowe komentarze
kompilator pomija, więc w podpowiedziach nie pojawiają się.
Przykładem komentarza moŜe być (*$COMMENT sygnał
alarmowy*).
Fragment programu napisany w języku Maszyny Wirtualnej (po
(*VMASM*) słowie VMASM a przed nawiasem zamykającym *)).

Pozostałe dyrektywy obsługują wewnętrzne operacje kompilatora. W oknie programu


dyrektywy są podświetlane.

Sesja symulacyjna
Komplet danych sesji, tzn. listy zmiennych, okna indywidualne oraz panele kontrolne
moŜna zapisać w pliku celem późniejszego powtórzenia.
• Plik > Zapisz sesję lub ikona .
Pojawia się okno Zapisywanie jako z domyślną nazwą pliku projektu i
rozszerzeniem .scp.

Kliknięcie Zapisz zapisuje sesję.

115
• Wznowienie sesji
Plik > Otwórz sesję lub ikona .

Wznowienie sesji moŜe równieŜ nastąpić od razu przy otwieraniu pliku .dcp. JeŜeli
wraz z nim w tym samym katalogu znajduje się utworzony wcześniej plik sesji,
wówczas pojawi się pytanie Czy otworzyć takŜe plik sesji? umoŜliwiając wznowienie
sesji. MoŜna równieŜ automatycznie otworzyć sesję za pomocą ustawień w Opcjach
programu CPSim.

Rejestracja wyników
Wyniki symulacji moŜna zapisywać w pliku z rozszerzeniem .out zaznaczając opcję
menu Śledzenie > Rejestruj dane. Nazwę pliku wyjściowego naleŜy określić w
Opcjach programu, w przeciwnym razie rejestracja nie będzie moŜliwa. W trakcie
symulacji w pasku stanu pojawia się symbol oznaczający rejestrację danych.
Plik wyjściowy jest plikiem tekstowym zawierającym wartości zmiennych zapisywane
w kolejnych cyklach. Standardowo zapisywane są wartości tych zmiennych, które
mają indywidualne okienka podglądu (rejestruje się więc tylko to, co jest faktycznie
potrzebne). Kliknięcie prawym klawiszem w okienku zmiennej wyłącza ją z rejestracji.
PoniŜej przedstawiono fragment pliku wynikowego dla projektu START-STOP, gdy w
2 sekundzie ustawiono START, w 11 sekundzie STOP.

Time START STOP ALARM SILNIK POMPA


200 0 0 0 0 0
400 0 0 0 0 0
...
2000 1 0 0 1 0
...
11000 1 1 0 0 1
...
16600 1 1 0 0 0

W pierwszej kolumnie zapisany jest czas symulacji w milisekundach (cykl zadania


200 ms), a w następnych wartości zmiennych. Kolumny rozdzielone są znakiem
tabulacji. Plik taki moŜna bezpośrednio wczytać np. do programu MS Excel.

Symulacja sterowana automatycznie


Symulator ma moŜliwość automatycznego ustawiania wartości zmiennych podczas
symulacji na podstawie danych z pliku wejściowego (rozszerzenie .inp). SłuŜy do
tego opcja menu Śledzenie > Wczytuj dane. Nazwę pliku wejściowego naleŜy
określić w Opcjach programu.
Plik wejściowy jest plikiem tekstowym zawierającym wartości zmiennych w chwilach
wybranych przez uŜytkownika. Format jest analogiczny do formatu wyjściowego pliku
rejestracji (jak wyŜej). Pierwsza kolumna zawiera czas w milisekundach, w którym
naleŜy ustawić zmienne. Następne kolumny zawierają ich wartości. Czas ze znakiem
ujemnym interpretowany jest jako zakończenie symulacji.

116
PoniŜszy przykład przedstawia zawartość pliku wejściowego, w którym zadawane są
wartości dla zmiennych START, STOP i ALARM, a symulacja ma zakończyć się po
40 sekundach.

Time START STOP ALARM


0 1 0 0
10000 0 1 0
12000 0 1 0
20000 1 0 0
30000 1 0 1
35000 1 0 0
-40000

Pliki pakietu CPDev


Programy i biblioteki wchodzące w skład pakietu CPDev wymieniają dane poprzez
pliki, których rozszerzenia podano w tabeli. Pliki pogrupowano tematycznie
(kompilator, biblioteki, symulator, konfigurator). Nazwa nadana podstawowemu
plikowi projektu (format XML) jest nazwą domyślną w pozostałych plikach.

Rozszerzenie Zawartość
.xml Podstawowy plik projektu
.cst Kod programu w języku ST (plik tekstowy)
.hcp Nagłówek projektu utworzony podczas kompilacji
.dcp Pośredni plik utworzony podczas kompilacji, z
którego korzystają symulator i konfigurator
.xcp Kod binarny skompilowanego programu dla
maszyny wirtualnej VM
.lcp Prekompilowana biblioteka pakietu CPDev
.scp Sesja symulacyjna
.inp Dane wejściowe dla sesji generowanej
automatycznie (plik tekstowy)
.out Wyjściowy plik sesji (tekstowy), np. dla MS Excel
.xmc Ustawienia komunikacyjne dla sterownika SMC
.html Raport projektu
.htm Raport komunikacyjny (ustawienia, tabela)

Pliki .cst do .xcp są generowane automatycznie na podstawie .xml. Zaleca się, aby
tworząc projekt załoŜyć dla niego osobny katalog, w którym znajdą się wszystkie
powyŜsze pliki.

LEDy stanu sterownika SMC


Podczas wykonywania programu uŜytkownika LEDy czerwony i zielony migotaniem
sygnalizują trwającą komunikację. LED czerwony świeci, gdy wykonywane jest
zadanie komunikacyjne o numerze nieparzystym w tabeli zadań komunikacyjnych
(zob. Komunikacja w systemie rozproszonym). LED zielony świeci, gdy wykonywane

117
jest zadanie o numerze parzystym. Czas wykonywanie jednego zadania, czyli
transakcji pytanie ↔ odpowiedź, nie przekracza kilkudziesięciu milisekund.
Faktycznie więc LEDy migotają bardzo szybko. Gdyby zadanie było tylko jedno, to
migotałby tylko jeden LED.
Przerwanie komunikacji z urządzeniem powoduje, Ŝe związane z nim zadanie zapala
LED na czas timeout, który jest przynajmniej kilkakrotnie dłuŜszy od czasu trwania
transakcji. Wyraźne dłuŜsze świecenie jednego z LEDów świadczy więc o przerwaniu
komunikacji.

Stan sterownika LEDy

Wykonywanie programu, nieprzerwana


Równomierne migotanie LEDów
komunikacja z wszystkimi urządzeniami

Wykonywanie programu, brak Jeden z LEDów świeci wyraźnie


komunikacji przynajmniej z jednym dłuŜej niŜ drugi (niekoniecznie
urządzeniem za kaŜdym razem).

LED czerwony świeci


Oczekiwanie na zaprogramowanie
nieprzerwanie

Niesprawność – przerwane Błysk czerwonego LEDa, potem


wykonywanie programu seria błysków zielonego (zob.
Testy i niesprawności)

Zmiana prędkości transmisji PC – SMC


Program CPCon przechowuje dane o dotychczasowych ustawieniach
komunikacyjnych, w tym o prędkości transmisji PC ↔SMC. Zmiana prędkości w
menu Ustawienia powoduje pojawienie się poniŜszego okna sygnalizującego
wprowadzenie zmiany, wraz z zapytaniem, czy nowe ustawienie ma być przesłane
do sterownika SMC.

Potwierdzenie Tak powoduje, Ŝe komputer PC łączy się ze sterownikiem na


poprzedniej prędkości, przekonfigurowywuje go oraz rejestruje w danych dokonaną
zmianę. Odpowiedź Nie wybiera się wówczas, gdy sterownik został juŜ wcześniej
skonfigurowany na inną prędkość i chodzi tylko o aktualizację danych w CPCon.

118
Domyślna prędkość 9600 b/s
W pracującym sterowniku wymusza się ją naciskając przycisk na górnej ściance.
JeŜeli sterownik jest wyłączony, to prędkość 9600 b/s zostanie ustawiona włączając
zasilanie przy wciśniętym górnym przycisku.

Testy i niesprawności
Lokalizacja programu
Program uŜytkownika, na który składa się skompilowany kod oraz konfiguracja
komunikacji systemu rozproszonego jest podczas programowania sterownika
zapisywany najpierw w pamięci Flash (wraz z sumą kontrolną). Program ten
sterownik przepisuje do pamięci RAM, a potem od razu wykonuje. Podobnie, po
zaniku i wznowieniu zasilania program jest przepisywany z pamięci Flash do RAM i
wykonywany.

Rodzaje testów
Sterownik SMC przeprowadza testy w następujących sytuacjach:
– po włączeniu zasilania
– podczas przepisywania programu z pamięci Flash do RAM
– cyklicznie w przerwaniu zegarowym.

Testy po włączeniu zasilania


• Test procesora – wykonanie krótkich obliczeń, porównanie wyniku z wzorcem
• Test pamięci Flash – obliczenie sumy kontrolnej oprogramowania podstawowego
(firmware) i porównanie z sumą wzorcową
• Test wewnętrznej pamięci RAM – kilka zapisów i odczytów wybranych komórek
wzorcami 0x55, 0xAA
• Test zewnętrznej pamięci RAM – cała pamięć testowana za pomocą wzorców
• Test zegara RTC – odczyt, zwłoka 1.5 s, ponowny odczyt, porównanie.

Test podczas przepisywania programu


• Test Flash→RAM – obliczenie sumy kontrolnej przepisywanego programu i
porównanie z sumą wzorcową. Niezgodność powoduje
przejście do stanu oczekiwania na zaprogramowanie (LED
czerwony świeci).

Testy cykliczne w przerwaniu zegarowym


• Test wewnętrznej pamięci RAM – wybrana komórka zapisywana wzorcami i
odczytywana.
• Test zewnętrznej pamięci RAM – jak wyŜej.

Sygnalizacja niesprawności
Wykrycie uszkodzenia przez test powoduje przerwanie wykonywania programu oraz
sygnalizację niesprawności sterownika poprzez pojedynczy błysk LEDa czerwonego
oraz serię błysków LEDa zielonego w liczbie zaleŜnej od powodu niesprawności.

119
Powód niesprawności Liczba błysków

Procesor 2

Pamięć Flash – firmware 3

Wewnętrzna pamięć RAM 4

Zewnętrzna pamięć RAM 5

Zegar RTC 6

Wewnętrzna pamięć RAM 10

Zewnętrzna pamięć RAM 11

PowyŜej podwójnej linii podano niesprawności wykrywane po włączeniu zasilania, a


poniŜej niesprawności wykrywane w przerwaniu zegarowym.
Informacja o niesprawności
Za pomocą opcji Transmisja > Sprawdź status SMC w programie CPCon uzyskuje
się informację o ewentualnym błędzie. Wynik testów moŜna teŜ odczytać protokołem
Modbus pod adresem 64759.

Nowe urządzenia obiektowe


Plik cpcon.cfg słuŜy do definiowania urządzeń, które oprócz modułów SM1 do SM5
mają się pojawiać w kreatorze komunikacji programu CPCon. Jest to plik tekstowy, w
którego kolejnych liniach podaje się najpierw nazwę urządzenia, a potem wejścia i
wyjścia w formacie nazwa we/wy = adres. Przykład wpisów dla modułów SM1 – SM5
pokazano niŜej. JeŜeli uruchamiany CPCon nie znajdzie w katalogu aplikacji pliku
cpcon.cfg, to w kreatorze widoczne będą tylko moduły SM1 – SM5.

SM1 SM4 SM5


Wejście 1 = 7006 Wyjście 1 = 4205 Wejście 1 = 4003
Wejście 2 = 7008 Wyjście 2 = 4206 Wejście 2 = 4004
Wyjście 3 = 4207 Wejście 3 = 4005
SM2 Wyjście 4 = 4208 Wejście 4 = 4006
Wejście 1 = 7006 Wyjście 5 = 4209 Wejście 5 = 4007
Wejście 2 = 7008 Wyjście 6 = 4210 Wejście 6 = 4008
Wejście 3 = 7010 Wyjście 7 = 4211 Wejście 7 = 4009
Wejście 4 = 7012 Wyjście 8 = 4212 Wejście 8 = 4010

SM3
Wejście 1 = 4003
Wejście 2 = 4004

120
KODY ŹRÓDŁOWE BLOKÓW STANDARDOWYCH
NiŜej podano realizacje bloków standardowych normy IEC 61131–3 w pakiecie
CPDev, po jednej dla kaŜdej z czterech grup. MoŜe to być pomocą dla
początkującego uŜytkownika.

• Przerzutnik SR
FUNCTION_BLOCK SR (* SR - przerzutnik SR *)
VAR_INPUT
S1: BOOL; (* wejście ustawiające *)
R: BOOL; (* wejście zerujące (reset) *)
END_VAR
VAR_OUTPUT
Q1: BOOL; (* wyjście *)
END_VAR
Q1 :=S1 OR (NOT R AND Q1);
END_FUNCTION_BLOCK

• Detektor zbocza narastającego


FUNCTION_BLOCK R_TRIG (* R_TRIG - detektor zbocza narast.*)
VAR_INPUT
CLK : BOOL; (* wejście detekcji zbocza narast. *)
END_VAR
VAR_OUTPUT
Q : BOOL; (* wyjście *)
END_VAR
VAR
CLKp : BOOL := FALSE; (* poprzednia wartość wejścia CLK *)
END_VAR
Q := CLK AND NOT CLKp;
CLKp := CLK;
END_FUNCTION_BLOCK

• Licznik dodający
FUNCTION_BLOCK CTU (* CTU - licznik dodający *)
VAR_INPUT
CU : BOOL; (* zliczaj w górę zbocza narast. *)
R : BOOL; (* zerowanie licznika *)
PV : INT; (* wartość zadana - górny limit *)
END_VAR
VAR_OUTPUT
Q : BOOL; (* wyjście załączane *)
CV : INT; (* wartość bieŜąca *)
END_VAR
VAR
CUp : BOOL := FALSE; (* poprzednia wartość wejścia CU *)
END_VAR
IF R THEN (* jeśli R = TRUE *)
CV := 0;
ELSE
IF (CU AND NOT CUp) THEN (* jeśli zbocze narastające na
wejściu CU *)
IF (CV < PV) THEN
CV := CV + 1;
END_IF
END_IF
END_IF

121
Q := CV >= PV; (* Q := TRUE, jeśli CV >= PV *)
CUp := CU; (* zapamiętaj poprzedni stan
wejścia CU *)
END_FUNCTION_BLOCK

• Impuls o zadanym czasie trwania


FUNCTION_BLOCK TP (* TP - generator impulsu *)
VAR
stime: TIME; (* czas początkowy uaktywnienia IN *)
END_VAR
VAR_INPUT
IN: BOOL; (* wejście *)
PT: TIME; (* czas do odmierzenia *)
END_VAR
VAR_OUTPUT
Q: BOOL; (* wyjście *)
ET: TIME; (* odmierzany czas *)
END_VAR
IF NOT Q THEN (* stan 0 lub 2: *)
IF IN THEN (* jeśli zbocze na IN lub
oczekiwanie na IN=0 *)
IF ET = t#0s THEN (* jeśli zbocze narastające na IN *)
IF PT > t#0s THEN (* stan 1: odmierzanie czasu impulsu *)
stime := CUR_TIME(); (* zapamiętanie czasu
początkowego *)
Q := TRUE; (* ustawione wyjście Q *)
END_IF
ELSE (* stan 2: oczekiwanie na wyzerowanie IN *)
Q := FALSE; (* wyzerowane wyjście Q *)
END_IF
ELSE (* stan 0: oczekiwanie na zbocze narast. na IN *)
ET := t#0s; (* wyzerowany licznik odmierzanego czasu *)
END_IF
ELSE (* stan 1: odmierzanie czasu impulsu *)
ET := CUR_TIME() - stime; (* czas od uaktywnienia wejścia IN *)
IF ET >= PT THEN (* jeśli upłynął zadany czas *)
Q := FALSE; (* wyzerowane wyjście Q *)
ET := PT; (* zadany czas opóźnienia *)
END_IF
END_IF
END_FUNCTION_BLOCK

122

You might also like