You are on page 1of 60

2.

NORMA IEC 61131


Norma IEC 61131 stanowi kontynuacj i wykorzystuje szereg innych standardw. Odwouje si ona do 10 innych norm (IEC 50, IEC 559, IEC 617-12, IEC 617-13, IEC 848, ISO/AFNOR, ISO/IEC 646, ISO 8601, ISO 7185, ISO 7498). W Europie zostaa zatwierdzona jako norma EN 61131.

Elementy skadowe normy


Cz 1. Postanowienia oglne (ang. General Information) Cz ta zawiera oglne definicje i typowe wasnoci funkcjonalne, ktre odrniaj sterowniki programowalne PLC od innych systemw. Obejmuje ona standardowe wasnoci sterownikw PLC, jak np. cykliczne przetwarzanie programu aplikacyjnego korzystajcego z przechowywanego w pamici obrazu stanu wej i wyj sterownika lub przydzia czasu pracy na komunikacj z programatorem czy urzdzeniami interfejsu operatora MMI. Cz 2. Wymagania i badania dotyczce sprztu (ang. Equipment Requirements and Tests) Zdefiniowane zostay tu elektryczne, mechaniczne i funkcjonalne wymagania dla urzdze oraz odpowiednie testy jakoci. Okrelono take warunki rodowiskowe (temperatura, wilgotno powietrza itp.) oraz dokonano klasyfikacji sterownikw i narzdzi programowania. Cz 3. Jzyki programowania (ang. Programing Languages) Ujednolicono stosowane dotychczas jzyki programowania w zharmonizowany i zorientowany przyszociowo system. Pojcia podstawowe, zasady oglne, model programowy i model komunikacyjny zostay opisane za pomoc formalnych definicji. Trzecia cz normy specyfikuje syntaktyk i semantyk tekstowych i graficznych jzykw programowania, oraz elementy konfiguracji wspomagajce instalacj oprogramowania w sterownikach. Cz 4. Wytyczne dla uytkownika (ang. User Guidelines) Cz ta stanowi przewodnik dla uytkownika PLC, wspomagajcy go we wszystkich fazach projektowania systemu automatyki. Podane zostay praktyczne informacje, poczynajc od analizy systemu i wyboru sprztu, a po zastosowania. Cz 5. Wymiana informacji (ang. Messaging Service Specifications) Ta cz normy dotyczy zasad komunikacji midzy sterownikami z rnych rodzin oraz z innymi urzdzeniami. W poczeniu z norm ISO 9506 (MMS) specyfikujc zasady komunikacji w procesie produkcji okrela ona funkcje adresowania urzdze, wymiany danych, przetwarzania alarmw, sterowanie dostpem i administrowanie sieci.

W dalszym cigu trwaj prace nad udoskonaleniem i rozszerzeniem normy IEC 61131, poniewa dotyczy ona nowoczesnej technologii. Std cigy nacisk na wprowadzanie innowacji. Komitet IEC wyda dwa raporty, z ktrych jeden zawiera propozycje rozszerze do normy (Technical Report 2), a drugi wskazwki dotyczce implementacji jzykw programowania dla sterownikw programowalnych (Technical Report 3). Ponadto przedstawiona zostaa korekta bdw dostrzeonych po publikacji normy (ang. Corrigendum), a take dokument zawierajcy propozycje poprawek i udoskonale (ang. Amendments). W przygotowaniu jest rwnie cz dotyczca jzyka dla sterowania z wykorzystaniem zbiorw rozmytych (ang. Fuzzy Control Language). W 1996r ukazay si polskie tumaczenia pierwszej i drugiej czci normy, oznaczone odpowiednio jako: PN-IEC 1131-1:1996. Sterowniki programowalne Postanowienia oglne oraz PN-IEC 1131-2:1996. Sterowniki programowalne Wymagania i badania dotyczce sprztu. W 1998 ukazaa si trzecia cz normy, oznaczona jako PN-EN 61131-3:1998. Sterowniki programowalne Jzyki programowania a w 2002 r cz pita: PN-EN 61131-5:2002. Sterowniki programowalne Cz5: Komunikacja.

Norma IEC 61131-3


Norma IEC 61131-3 definiuje pojcia podstawowe, zasady oglne, model programowy i model komunikacyjny (wymiana danych midzy elementami oprogramowania) oraz podstawowe typy i struktury danych. Okrelono w niej dwie grupy jzykw programowania: jzyki tekstowe i graficzne. W grupie jzykw tekstowych zdefiniowane zostay nastpujce jzyki: Jzyk IL (ang. Instruction List Lista rozkazw), bdcy odpowiednikiem jzyka typu asembler, ktrego zbir instrukcji obejmuje operacje logiczne, arytmetyczne, operacje relacji, jak rwnie funkcje przerzutnikw, czasomierzy, licznikw itp. Jzyk ST (ang. Structured Text Tekst strukturalny), ktry jest odpowiednikiem jzyka algorytmicznego wysokiego poziomu, zawierajcego struktury programowe i polecenia podobne do wystpujcych w jzykach typu PASCAL lub C. Do grupy jzykw graficznych opisanych w normie IEC 61131-3 nale: Jzyk LD (ang. Ladder Diagram Schemat drabinkowy), podobny do stykowych obwodw przekanikowych, w ktrym oprcz symboli stykw, cewek i pocze midzy nimi, dopuszcza si take uycie funkcji (np. arytmetycznych, logicznych, porwna, relacji) oraz blokw funkcjonalnych (np. przerzutniki, czasomierze, liczniki). Jzyk FBD (ang. Function Block Diagram Funkcjonalny schemat blokowy), bdcy odpowiednikiem schematu przepywu sygnau dla obwodw logicznych przedstawionych w formie poczonych bramek logicznych oraz funkcji i blokw funkcjonalnych, takich jak w jzyku LD. Ponadto przedstawiono sposb tworzenia struktury wewntrznej programu w postaci schematu funkcji sekwencyjnej SFC (ang. Sequential Function Chart), ktry pozwala na opisywanie zada sterowania sekwencyjnego za pomoc grafw zawierajcych kroki (etapy) i warunki przejcia (tranzycji) midzy tymi krokami. W celu otrzymania odpowiedniej struktury programu mona wykorzysta SFC, w ktrym definicje akcji dla poszczeglnych krokw oraz warunki przejcia programuje si w jednym z czterech wymienionych wyej jzykw. IEC 61131-3 specyfikuje syntaktyk i semantyk wymienionych jzykw programowania. Syntaktyka (inaczej skadnia) opisuje elementy jzyka i sposb ich uycia, natomiast semantyka ich znaczenie. Definiowane s rwnie elementy konfiguracji, ktre wspomagaj instalacj oprogramowania w sterownikach PLC, oraz moliwoci komunikacyjne w celu uatwienia poczenia sterownikw z innymi elementami automatycznego systemu sterowania.

Wyrniono nastpujce elementy jzykw programowania dla sterownikw PLC: Typy danych (ang. Data types); Jednostki organizacyjne oprogramowania (ang. Program organization units); Elementy schematu funkcji sekwencyjnej (ang. Sequential Function Chart); Elementy konfiguracji (ang. Configuration elements). Typy danych su okreleniu struktury danych w sterowniku, zarwno staych jak i zmiennych, a w szczeglnoci zakresu wartoci jakie mog przyjmowa dane oraz obszaru pamici potrzebnego do ich przechowywania. Jednostki organizacyjne oprogramowania stanowi najmniejsze niezalene jednostki oprogramowania aplikacji uytkownika. Skadaj si na nie: Funkcje (ang. Functions), Bloki funkcjonalne (ang. Function blocks), Programy (ang. Programs). Elementy konfiguracji wspomagaj instalowanie i uruchamianie programw w systemach sterownikowych. Zalicza si do nich: Konfiguracje (ang. Configurations), Zasoby (ang. Resources), Zadania (ang. Tasks), Zmienne globalne (ang. Global variables), cieki dostpu (ang. Access paths). Konfiguracja jest elementem jzyka, ktry odpowiada systemowi sterownikw programowalnych rozumianemu jako cao, obejmujc wszystkie pozostae elementy oprogramowania. Zasb z kolei jest programowym odpowiednikiem sprztu realizujcego funkcje przetwarzania sygnaw, cznie z funkcjami okrelonymi przez podczone czujniki i elementy wykonawcze (ang. sensor and actuator interface) oraz urzdzenia operatorskie MMI (ang. Man-Machine Interface).

Struktura programu
Jednostki organizacyjne oprogramowania, oznaczane dalej w skrcie POU (z ang. Program Organization Unit), takie jak programy, bloki funkcjonalne (w skrcie FB, ang. Function Block) czy funkcje stanowi najmniejsze, niezalene jednostki oprogramowania aplikacji uytkownika. POU mog wywoywa si wedug przedstawionej wyej kolejnoci, ktra odpowiada zmniejszajcym si moliwociom funkcjonalnym, lub wywoywa si wzajemnie w ramach danego typu POU. Oznacza to, e z poziomu programu mona wywoywa FB lub funkcj, z FB mona wywoywa inny FB lub funkcj, a funkcja moe wywoywa tylko inn funkcj. Niedopuszczalne jest wywoywanie rekurencyjne, tzn. POU nie moe wywoywa siebie ani bezporednio, ani porednio, chocia w jzykach stosowanych w komputerach PC takie wywoania s dopuszczalne. W normie nie wystpuje takie pojcie jak podprogram (ang. subroutine) rol podprogramw wystpujcych w innych jzykach peni tu bloki funkcjonalne i funkcje. Podstawowa rnica midzy funkcj a blokiem funkcjonalnym polega na tym, e wywoanie funkcji z tymi samymi argumentami (parametrami wejciowymi) zawsze daje t sam warto na wyjciu (warto funkcji), w przeciwiestwie do bloku funkcjonalnego, ktrego wywoanie z tymi samymi argumentami wejciowymi niekoniecznie musi prowadzi do tych samych wartoci wyjciowych. FB posiada bowiem wewntrzne zmienne zawierajce pewn informacj o stanie (mona powiedzie, e jest to element dynamiczny), podczas gdy funkcja nie zawiera wewntrznej informacji o stanie (jest to wic element statyczny). Wszystkie wartoci zmiennych wyjciowych oraz konieczne wartoci zmiennych wewntrznych FB s przechowywane pomidzy kolejnymi chwilami wykonania, std kady wystpujcy w programie FB posiada swoj wasn nazw oraz struktur danych (w normie nazywane jest to ukonkretnieniem albo egzemplarzem ang. instance). Kady FB musi mie zdefiniowanych tyle ukonkretnionych egzemplarzy, ile razy jest wywoywany w danym POU, co wynika std, e kady egzemplarz musi mie swoj wasn struktur danych do przechowywania stanu. Jeeli np. w POU (programie lub FB) wystpuje konieczno uycia dwch czasomierzy typu TON, to trzeba zadeklarowa dwa egzemplarze (dwie nazwy) takiego czasomierza. Programy stoj na szczycie hierarchii POU i maj moliwo dostpu do wej i wyj sterownika, zmiennych globalnych i cieek dostpu oraz udostpniania ich innym POU. Kady POU zawiera nastpujce elementy: typ i nazwa POU (w przypadku funkcji take typ danej wyjciowej); deklaracja zmiennych (wejciowych, wyjciowych i lokalnych); ciao POU (kod programu). Typ POU okrelony jest przez odpowiednie sowo kluczowe: PROGRAM, FUNCTION_BLOCK lub FUNCTION, po ktrym wystpuje nazwa wasna POU. Dodatkowo w przypadku funkcji okrela si take typ funkcji, np.: FUNCTION ALARM :BOOL; oznacza deklaracj funkcji o nazwie ALARM, ktra na wyjciu daje warto typu BOOL.

Deklaracja zmiennych Zmienne (ang. variables) wykorzystywane s do przechowywania i przetwarzania informacji. Umieszczone s one w pamici danych sterownika, chocia ich lokalizacja nie musi ju by bezporednio wskazana przez uytkownika (w postaci podania konkretnego adresu w pamici), w przeciwiestwie do stosowanych poprzednio metod deklaracji zmiennych w sterownikach. Wg normy deklarowane zmienne mog by umieszczone w pamici sterownika automatycznie przez system programujcy, natomiast musz mie ustalony typ danej (ang. data type). W normie IEC 61131-3 zdefiniowano pewn liczb elementarnych typw danych (BOOL, BYTE, INT itd.), ktre rni si zarwno wartociami, jakie mog przyjmowa, jak i liczb zajmowanych bitw. Moliwe jest take definiowanie przez uytkownika swoich wasnych typw danych, czyli typw pochodnych, w postaci np. tablic lub struktur. Zmienne mog by take przyporzdkowane pewnym adresom wej lub wyj (zmienne reprezentowane bezporednio), oraz mog by podtrzymywane bateryjnie w czasie zaniku napicia zasilania. Wszystkie uywane w POU zmienne musz by zadeklarowane, przy czym moe to by zrobione poza POU (np. zmienne globalne), wewntrz POU (zmienne lokalne) lub jako parametry wejciowe i wyjciowe. Na pocztku POU, po deklaracji jego nazwy, wystpuje cz deklaracyjna dla zmiennych. Przykad deklaracji zmiennych: VAR (* pocztek deklaracji zmiennych w programie *) S1 AT %I1 : BOOL; (* zmienna S1 typu BOOL, przypisana do wejcia %I1 *) S2 AT %I2 : BOOL; (* zmienna S2 typu BOOL, przypisana do wejcia %I2 *) K3A : BOOL; (* zmienna K3A typu BOOL, bez podania adresu *) OPOZNIENIE : TON; (* ukonkretnienie bloku czasomierza TON *) END_VAR (* koniec deklaracji zmiennych *) VAR RETAIN (* deklaracja zmiennych z podtrzymaniem bateryjnym *) K1 AT %Q1 : BOOL; (* zmienna K1 typu BOOL, przypisana do wyjcia %Q2 *) END_VAR (* koniec deklaracji zmiennych *) W przedstawionym przykadzie zmiennej K3A nie przyporzdkowano adresu w pamici sterownika, a wic system programujcy automatycznie dokona lokalizacji tej zmiennej w pamici. Gdyby programista da przechowywania tej zmiennej w konkretnym bicie pamici sterownika, to deklaracja tej zmiennej wygldaaby w nastpujcy sposb:
K3A AT %M1 : BOOL;

Deklaracja OPOZNIENIE : TON; informuje o tym, e w programie bdzie uywany blok funkcjonalny typu TON o konkretnej nazwie OPOZNIENIE i system programujcy musi zarezerwowa odpowiedni struktur danych dla tego bloku. Struktura tych danych jest zdefiniowana przez deklaracj standardowego bloku TON. Kwalifikator RETAIN umoliwia okrelenie tych zmiennych, ktrych wartoci powinny by przechowywane w pamici w czasie zaniku napicia zasilania, tu dotyczy to zmiennej K1 przyporzdkowanej do wyjcia %Q1.

Kod jednostki oprogramowania Zadanie do zaprogramowania: Jeeli zmienna STOP ma warto 0 lub wejcie %I4 ma warto 1, to wycz wyjcie %Q1, w przeciwnym razie jeeli wejcie %I1 ma warto 1 i wyjcie %Q2 ma warto 0, to zacz wyjcie %Q1, w przeciwnym razie pozostaw %Q1 bez zmian. lub inaczej: %Q1:=NOT (NOT STOP OR %I4) AND (%Q1 OR %I1 AND NOT %Q2) Zadanie zrealizowa przy pomocy przerzutnika RS.

Przykad w jzyku LD:


%I1 %Q2 %Q1 /(S) STOP %Q1 /(R) %I4

Przykad w jzyku IL: (* pierwszy szczebel drabinki *) LD %I1 ANDN %Q2 S %Q1 (* drugi szczebel drabinki )
LDN STOP

OR R

%I4 %Q1 Przykad w jzyku FBD:

%I1 %Q2

STOP %I4

AND O FlipFlop RS S Q1 %Q1 OR O R1

Przykad w jzyku ST: (* wywoanie przerzutnika *) FlipFlop( S:= %I1 AND NOT %Q2, R1:=NOT STOP OR %I4 ); (* ustawienie wyjcia *) %Q1 := FlipFlop.Q1

Elementy wsplne jzykw


Ograniczniki (ang. delimiters) s to znaki specjalne, takie jak + - $ = := # ; ( ) * oraz spacja, ktrych znaczenie omwione bdzie w dalszej czci podrcznika. Uytkownik moe wstawi spacj wszdzie w tekstach programw, za wyjtkiem sw kluczowych, literaw oraz identyfikatorw. Sowa kluczowe (ang. keywords) s identyfikatorami (nazwami) standardowymi, zdefiniowanymi w normie jako elementy danego jzyka. Sowa kluczowe nie mog by uywane jako identyfikatory wprowadzane przez uytkownika (nazwy wasne). W zasadzie sowa kluczowe powinny by pisane z uyciem duych liter. Do sw kluczowych nale: nazwy deklaracji, np. PROGRAM, FUNCTION, VAR_INPUT, END_PROGRAM; nazwy elementarnych typw danych, np. BOOL, INT, REAL, TIME; nazwy standardowych funkcji i blokw funkcjonalnych, np. AND, ADD, MOVE, SHL, TON, CTU; nazwy parametrw wejciowych i wyjciowych standardowych funkcji i blokw funkcjonalnych; operatory jzyka IL; operatory i instrukcje jzyka ST; elementy SFC; zmienne EN i ENO w jzykach graficznych. Literay (ang. literals) su przedstawianiu wartoci danych (zmiennych lub staych). Ich format zaley od typu danej, ktry jednoczenie okrela zakres zmiennoci. Identyfikatory (ang. identifiers) s cigami znakw alfanumerycznych, ktrych programista moe uy do nazwania wasnych: zmiennych, jednostek POU itp. Nazwa taka musi zaczyna si od litery lub pojedynczego znaku podkrelenia _ , po ktrych moe wystpowa dowolna liczba liter, cyfr lub znakw podkrelenia. Jednak dopuszczalna dugo nazwy moe zalee od konkretnego systemu programujcego. Norma IEC 61131-3 wymaga tylko, aby przynajmniej sze pierwszych znakw nazwy byo znaczcych. Nie rozrnia si midzy duymi a maymi literami, np. nazwy takie jak ALA, Ala czy ala powinny by traktowane przez system programujcy jednakowo. Programista moe take wstawi do tekstu programu swoje komentarze w dowolnym miejscu, w ktrym moe uywa spacji. Jedynie w jzyku IL komentarze powinny by wstawione na kocu. Komentarze ograniczone s przez kombinacj znakw (* oraz *). Komentarze nie maj adnego znaczenia skadniowego ani semantycznego, su jedynie do przedstawienia dodatkowej informacji uytkownikowi. Nie mog by one zagniedane, tzn. nie mona wstawia komentarza do komentarza.

Literay
Przedstawianie danych w postaci liczbowej: Opis Liczby cakowite Liczby rzeczywiste Liczby rzeczywiste z wykadnikami Liczby dwjkowe Liczby semkowe Liczby szesnastkowe Boolowskie zero i jedynka Boolowskie FASZ i PRAWDA -12 -12.0 0 Przykady 123_456 0.0 0.456 +986 3.14159_26

-1.34E-12 lub -1.34e-12 1.234E6 lub 1.234e6 2#1111_1111 (255) 8#377 (255) 2#1110_0000 (240) 8#340 (240)

16#FF lub 16#ff (255) 16#E0 lub 16#e0 (240) 0 1 TRUE

FALSE

Przykady przedstawiania danych w postaci czasw trwania: Opis Literay bez podkrele z przedrostkiem krtkim Literay bez podkrele z przedrostkiem dugim Literay z podkreleniem z przedrostkiem krtkim Literay z podkreleniem z przedrostkiem dugim Przykady T#14ms T#14.7s T#14.7m T#14.7h t#14.7d t#5d14h12m18s3.5ms TIME#14ms time#14.7s T#14ms T#14.7s T#14.7m T#14.7h t#25h_15m t#5d_14h_12m_18s_3.5ms TIME#25h_15m time#5d_14h_12m_18s_3.5ms

Przedrostki uywane przy przedstawianiu danych w postaci godziny dnia i daty: Lp. 1 2 3 Data (ang. date) Godzina dnia (ang. time of day) Data i godzina (ang. date and time) Opis DATE# Przedrostek D# TOD# DT#

TIME_OF_DAY# DATE_AND_TIME#

Przykady przedstawiania danych w postaci daty i godziny dnia: Zapis z dugim przedrostkiem DATE#1984-06-25 date#1984-06-25 TIME_OF_DAY#15:36:55.36 time_of_day#15:36:55.36 DATE_AND_TIME#1984-06-2515:36:55.36 date_and_time#1984-06-2515:36:55.36 Zapis z krtkim przedrostkiem D#1984-06-25 d#1984-06-25 TOD#15:36:55.36 tod#15:36:55.36 DT#1984-06-25-15:36:55.36 dt#1984-06-25-15:36:55.36

Elementarne typy danych


Lp. 1 2 3 4 5 6 7 8 9 Sowo kluczowe BOOL SINT INT DINT LINT USINT UINT UDINT ULINT Boolowski Liczba cakowita krtka Liczba cakowita Liczba cakowita podwjna Liczba cakowita duga Liczba cakowita krtka bez znaku Liczba cakowita bez znaku Liczba znaku cakowita podwjna bez Typ danych Liczba bitw 1 8 16 32 64 8 16 32 64 32 64

Liczba cakowita duga bez znaku Liczba rzeczywista Liczba rzeczywista duga Czas trwania Data Godzina dnia

10 REAL 11 LREAL 12 TIME 13 DATE 14 TIME_OF_DAY lub TOD

15 DATE_AND_TIME lub DT Data i czas 16 STRING 17 BYTE 18 WORD 19 DWORD 20 LWORD Cig znakw o zmiennej dugoci Bajt cig 8 bitw Sowo cig 16 bitw Sowo podwjne cig 32 bitw Sowo dugie cig 64 bitw 8 16 32 64

Przegld uniwersalnych typw danych: ANY ANY_BIT ANY_NUM ANY_INT BOOL BYTE WORD DWORD LWORD INT SINT DINT LINT UINT USINT UDINT ULINT ANY_REAL REAL LREAL DATE TIME_OF_DAY DATE_AND_TIME TIME STRING i typy pochodne ANY_DATE

Pochodne typy danych


Przykady deklaracji typw pochodnych: Lp. 1 2 Przykad Alias, nowa nazwa dla typu elementarnego: TYPE FLOATING : REAL ; END_TYPE Typ wyliczeniowy (ang. Enumerated data type): TYPE ANALOG_SIGNAL_TYPE : (SINGLE_ENDED, DIFFERENTIAL); END_TYPE 3 Typ okrojony (ang. Subrange data type) TYPE ANALOG_DATA : INT ( -4095..4095); END_TYPE 4 Deklaracja tablicy danych (ang. Array data type) TYPE ANALOG_16_INPUT: ARRAY [1..16] OF ANALOG_DATA; ANALOG_ARRAY: ARRAY[1..4,1..16] OF ANALOG_DATA; END_TYPE 5 Deklaracje typu strukturalnego (ang. Structured data type) TYPE ANALOG_CHANNEL_CONFIG : STRUCT RANGE : ANALOG_RANGE; MIN_SCALE : ANALOG_DATA; MAX_SCALE : ANALOG_DATA; END_STRUCT; ANALOG_16_INPUT_CONFIG : STRUCT SIGNAL_TYPE : ANALOG_SIGNAL_TYPE; FILTER_PARAMETER : SINT (0..99); CHANNEL : ARRAY [1..16] OF ANALOG_CHANNEL_CONFIG; END_STRUCT; END_TYPE

Deklaracja wartoci pocztkowych dla typu danych


Domylne wartoci pocztkowe dla danych typu elementarnego: Typy danych BOOL, SINT, INT, DINT, LINT USINT, UINT, UDINT, ULINT BYTE, WORD, DWORD, LWORD REAL, LREAL TIME DATE TIME_OF_DAY DATE_AND_TIME STRING Wartoci pocztkowe 0 0 0 0.0 T#0S D#0001-01-01 TOD#00:00:00 DT#0001-01-01-00:00:00 (pusty cig znakw)

Przykady deklaracji wartoci pocztkowych: Lp. 1 2 Przykad TYPE PI : REAL := 3.1415925 ; END_TYPE TYPE ANALOG_RANGE : (BIPOLAR_10V, UNIPOLAR_1_10V, UNIPOLAR_0_10V, UNIPOLAR_1_5V, UNIPOLAR_0_5V, UNIPOLAR_4_20MA, UNIPOLAR_0_20MA, ) := UNIPOLAR_1_5V ; END_TYPE (* -10 do +10 VDC *) (* +1 do +10 VDC *) (* 0 do +10 VDC *) (* +1 do +10 VDC *) (* 0 do +10 VDC *) (* +4 do +20 mADC *) (* 0 do +20 mADC *)

3 4

TYPE ANALOG_DATAZ : INT (-4095..4095) := 0 ; END_TYPE TYPE ANALOG_16_INPUT: ARRAY[1..16] OF ANALOG_DATA := 8(-4095), 8(4095); END_TYPE

Przykad ustawienia warunkw pocztkowych w sterowniku GE Fanuc:


FSTSCN %Q5 MOVE (R) WORD 10IN Q%R100 LEN 00001

Zmienne
Sowa kluczowe do deklaracji zmiennych: Typ zmiennej VAR VAR_INPUT Opis Deklaracja zmiennych wewntrznych w POU. Deklaracja zmiennych dostarczanych do POU z zewntrz, nie mog by zmieniane w POU.

VAR_OUTPUT Deklaracja zmiennych wyprowadzanych z POU na zewntrz do innych POU. VAR_IN_OUT Deklaracja zmiennych dostarczanych do POU z zewntrz i wyprowadzanych na zewntrz, mog by zmieniane.

VAR_EXTERNAL Deklaracja uycia zmiennych zdefiniowanych w konfiguracji jako VAR_GLOBAL, mog by zmieniane. VAR_GLOBAL VAR_ACCESS Deklaracja zmiennych globalnych. Deklaracja cieek dostpu.

Przykad deklaracji zmiennej:


(* typ zmiennych VAR_OUTPUT atrybut opcjonalnie *) RETAIN

(* nazwa zmiennej typ danej warto pocztkowa opcjonalnie *) Moja_zmienna : DINT := 100; END_VAR (* koniec deklaracji bloku zmiennych *)

Zmienne proste
Przedrostki okrelajce pooenie i rozmiar zmiennej: Lp. 1 2 3 4 5 6 7 8 9 Przedrostek I Q M X brak B W D L Opis Pooenie wejcie (ang. Input) Pooenie wyjcie (ang. Output) Pooenie pami (ang. Memory) Rozmiar pojedynczy bit Rozmiar pojedynczy bit Rozmiar bajt (8 bitw) Rozmiar sowo (16 bitw) Rozmiar sowo podwjne (32 bity) Rozmiar sowo poczwrne (64 bity)

Jeli nie zadeklarowano inaczej, to zmienne jednobitowe s typu BOOL

Przykady deklaracji i uycia zmiennych prostych: VAR (* zmienne reprezentowane bezporednio *) AT %IW1 : INT; (* sowo wejciowe o adresie 1, zmienna typu INT *) AT %QD8 : DINT; (* podwjne sowo wyjciowe rozpoczynajce si od adresu 8, zmienna typu DINT *)
(* zmienne symboliczne ulokowane *)

XXX AT %QW3 : INT; (* sowo wyjciowe o adresie 3, zmienna typu INT *) YYY AT %QX16 : BOOL; (* bit 16 na wyjciu *) (* zmienne symboliczne z automatycznym przydziaem pamici *) A,B,C : INT; (* przydzielenie 3 kolejnych sw pamici na 3 zmienne typu INT *) DDD : DINT (* przydzielenie kolejnych 2 sw pamici na zmienn typu DINT *) RRR : REAL; (* przydzielenie kolejnych 2 sw pamici na zmienn typu REAL *) END_VAR
(* ciao POU w jzyku IL *)

... LD %IW1 (* uycie bezporedniej reprezentacji zmiennej *) ST XXX (* uycie zmiennej symbolicznej XXX *)

Deklaracja typu danych umoliwia systemowi programujcemu sprawdzenie poprawnoci uycia zmiennej w POU ju w trakcie kompilacji. Wprowadzenie np. do programu cigu instrukcji:
LD %IW1 (* aduj do akumulatora zmienn typu INT *) ST DDD (* przelij zawarto akumulatora do zmiennej typu DINT *)

dla deklaracji zmiennych jw. powinno spowodowa w trakcie kompilacji zasygnalizowanie bdu wynikajcego z mieszania zmiennych nalecych do rnych typw danych.

Zmienne wieloelementowe
Zmiennymi wieloelementowymi s tablice i struktury. Przykady deklaracji zmiennych wieloelementowych: VAR WEJSCIA AT %IW1 : ARRAY[0..3] OF INT; INPUT_TAB : ANALOG_ARRAY; MODULE_CONFIG : ANALOG_16_INPUT_CONFIG; END_VAR (* tablica jednowymiarowa *) (* tablica dwuwymiarowa *) (* struktura *)

Tablica jest zbiorem elementw tego samego typu, do ktrych dostp uzyskuje si za pomoc jednego lub wicej indeksw umieszczonych w nawiasach kwadratowych i oddzielonych przecinkami. Zmienna w postaci tablicy moe by zadeklarowana przy uyciu sowa kluczowego ARRAY z podaniem zakresu zmian indeksw, albo jako zmienna naleca do typu danych, ktry zosta zdefiniowany jako tablica. Zmienn strukturaln jest zmienna deklarowana jako struktura, ktrej elementy nale do rnych typw danych. Kolejne elementy struktury reprezentowane s przez identyfikatory oddzielone kropkami. Zmienna o nazwie MODULE_CONFIG jest zadeklarowana jako struktura. Przypisanie wartoci SINGLE_ENDED do elementu SIGNAL_TYPE tej zmiennej mona przedstawi w nastpujcy sposb:
MODULE_CONFIG.SIGNAL_TYPE:=SINGLE_ENDED.

Jednym z elementw zmiennej strukturalnej MODULE_CONFIG jest take tablica CHANNEL, ktra zawiera 16 elementw bdcych strukturami zadeklarowanymi jako typ ANALOG_CHANNEL_CONFIG, w ktrym z kolei wystpuje element RANGE. Przypisanie wartoci BIPOLAR_10V do elementu RANGE struktury, ktra jest pitym elementem tablicy CHANNEL w strukturze MODULE_CONFIG mona zapisa wic jako: MODULE_CONFIG.CHANNEL[5].RANGE:=BIPOLAR_10V.

Wartoci pocztkowe zmiennych


Z chwil wystartowania elementu konfiguracji, kada ze zmiennych skojarzonych z takim elementem lub przypisanym mu programem powinna zosta zainicjowana przez przypisanie jej miejsca w pamici, przy czym jej warto pocztkowa zaley od informacji podanej przez programist w deklaracji zmiennej. Moe wic to by warto: jak posiadaa przed zatrzymaniem danego elementu konfiguracji; pocztkowa, zadeklarowana przez uytkownika; domylna, zdefiniowana przez typ danych, do jakiego naley zmienna. Za pomoc atrybutu RETAIN uytkownik moe zadeklarowa, e warto zmiennej powinna by zachowana na czas zatrzymania zasobu, z ktrym jest skojarzona, pod warunkiem, e wasno tak zapewnia zastosowany sprzt. Zmienna, ktrej warto w czasie zatrzymania zasobu jest zachowywana w pamici podtrzymywanej bateryjnie nosi nazw zmiennej podtrzymywanej (ang. retentive variable). Nadawanie wartoci pocztkowych zmiennym podtrzymywanym podlega nastpujcym reguom: W przypadku tzw. ciepego restartu wartoci pocztkowe tych zmiennych powinny by rwne ich wartociom zachowanym w pamici; W przypadku tzw. zimnego restartu wartoci pocztkowe powinny by rwne wartociom zadeklarowanym przez uytkownika, a w przypadku braku takiej deklaracji wartociom domylnym. Ciepy restart (ang. warm restart) wystpuje w przypadku powrotu napicia zasilajcego po jego zaniku. Natomiast zimny restart (ang. cold restart) zwizany jest z uruchomieniem sterownika (przejciem w tryb wykonywania) po zaadowaniu programu do sterownika lub zatrzymaniu spowodowanym wystpieniem bdu. Zmiennym nie podtrzymywanym (ang. non-retentive variables) nadawane s wartoci pocztkowe tak, jak przy zimnym restarcie, a zmiennym reprezentujcym wejcia sterownika wartoci zalene od rozwizania zastosowanego przez producenta sterownika.

Atrybuty zmiennych
Atrybut Opis

RETAIN CONSTANT R_EDGE F_EDGE READ_ONLY READ_WRITE

zmienna podtrzymywana staa (tzn. zmienna niemodyfikowana) zmienna reaguje tylko na zbocze narastajce zmienna reaguje tylko na zbocze opadajce zmienna moe by tylko czytana zmienna moe by czytana i zapisywana

Przykady deklaracji atrybutw dla zmiennych: VAR CONSTANT (* deklaracja staej *) PI : REAL := 3.1415925; END_VAR VAR_OUTPUT RETAIN (* deklaracja zmiennej wyjciowej podtrzymywanej *) Q : WORD; END_VAR VAR_INPUT (*deklaracja zmiennych wejciowych *) WEJ1 : BOOL R_EDGE; (* reagujcej tylko na zbocze narastajce *) WEJ2 : BOOL F_EDGE; (* reagujcej tylko na zbocze opadajce *) END_VAR VAR_ACCESS (* deklaracja cieki dostpu *) CSX : P1.Z : REAL READ_ONLY (* dostp do zmiennej tylko do odczytu *); END_VAR Atrybut CONSTANT suy do deklaracji zmiennej, ktrej warto nie zmienia si w trakcie wykonywania programu, naley wic j traktowa jako sta. Nie zawsze w tekcie programu naley wpisywa warto sta jako litera. Lepiej czasami jest zadeklarowa sta w bloku deklaracji zmiennych. Nie powoduje to zwikszenia zajtoci pamici (a czasami pozwala wrcz na zaoszczdzenie), natomiast nie prowadzi do niejednoznacznoci. Np. litera 1 moe zarwno oznacza dan typu BOOL, jak i liczb cakowit typu INT, UINT, SINT itp. Natomiast w przypadku uycia deklaracji: VAR CONSTANT Jedynka : INT := 1; Jeden : DINT :=1; END_VAR staa Jeden rni si od staej Jedynka typem danej, mimo e obie stae maj t sam warto. A co za tym idzie, podlegaj one dziaaniom czy funkcjom okrelonym dla innych typw danych, np. staej Jeden nie mona uy jako parametru wejciowego w funkcji MUL_INT.

Deklaracja zmiennych w sposb graficzny


Przykady deklaracji zmiennych wejciowych i wyjciowych w sposb graficzny i tekstowy:
INT WE1 BOOL <WE2 WY INT BOOL >WE3 BOOL WEWY WEWY BOOL

VAR_INPUT WE1 : INT; WE2 : BOOL F_EDGE; WE3 : BOOL R_EDGE; END_VAR VAR_OUTPUT WY : INT; END_VAR VAR_IN_OUT WEWY : BOOL; END_VAR

Jednostki organizacyjne oprogramowania (POU)


Wyrnione zostay trzy typy POU: funkcje, bloki funkcjonalne, programy. Nazwa POU musi by unikaln nazw w ramach jednego projektu, poniewa po zadeklarowaniu POU jej nazwa i interfejs zewntrzny s dostpne wszystkim innym POU w projekcie. Nie ma wic tu moliwoci deklaracji lokalnych podprogramw, tak jak zwykle jest to moliwe w jzykach programowania komputerw PC. POU mog by dostarczane przez producentw (dotyczy to w szczeglnoci FFB standardowych) lub programowane przez uytkownika (tzw. FFB pochodne).

Funkcje
Podstawow zasad tworzenia funkcji jest, by instrukcje zawarte w ciele funkcji zastosowane do zmiennych wejciowych zawsze dostarczay jednoznaczny wynik w postaci wartoci funkcji, bez wzgldu na to jak czsto i w jakiej chwili funkcja jest wywoywana. W tym sensie funkcje mog by traktowane jako rozszerzenie podstawowego zbioru operacji sterownika. W jzykach tekstowych funkcje uywane mog by jako operatory (rozkazy) w jzyku IL lub jako operandy w wyraeniach jzyka ST. W jzykach graficznych funkcje reprezentowane s w postaci prostoktw o wymiarach zalenych od liczby wej. Graficzne przedstawianie negacji sygnaw boolowskich: Lp. 1 2 Opis Negacja wejcia Negacja wyjcia Symbol
O O

Przykady uycia wejcia EN i wyjcia ENO: Lp. 1 Opis Jzyk LD uycie EN i ENO jest obowizkowe. Przykad
FUN ZEZW BEZBLEDU EN ENO( ) A C B FUN ZEZW EN ENO BEZBLEDU A C B FUN A C B

Jzyk FBD uycie EN i ENO jest opcjonalne.

Uycie funkcji w jzyku FBD bez pary EN /ENO.

Para EN /ENO nie wystpuje w jzykach tekstowych, std pewna trudno w bezporednim tumaczeniu programu z jzyka graficznego na tekstowy. Deklaracja funkcji pochodnej (ang. derived function) Przykad deklaracji funkcji w jzyku ST: FUNCTION MOJA_FUN : REAL VAR INPUT A, B : REAL; C : REAL:=1.0 ; MOJA_FUN:=A*B/C ; (* Nazwa funkcji i jej typ *) (* Parametry wejciowe *) (* Nadanie wartoci pocztkowej *)
END_VAR

(* Obliczenie wartoci wyjciowej funkcji *)


END_FUNCTION

Przykad deklaracji funkcji w jzyku FBD:


FUNCTION (* Nazwa funkcji, typ wyjcia funkcji i parametry wejciowe *) MOJAFUN REAL A REAL REAL B REAL C (* Ciao funkcji *) A * B / MOJAFUN C END_FUNCTION

Bloki funkcjonalne
Blok funkcjonalny (FB, ang. function block) jest jednostk organizacyjn oprogramowania, ktra z chwil wykonania moe dostarcza na wyjciu jedn lub wiele wartoci, w przeciwiestwie do funkcji, ktra ma tylko jedno wyjcie. Wywoanie FB z tymi samymi parametrami wejciowymi niekoniecznie musi prowadzi do tych samych wartoci wyjciowych, poniewa blok posiada struktur danych zawierajc informacj o stanie bloku (jest wic elementem dynamicznym). Tak wic wszystkie wartoci zmiennych wyjciowych, konieczne wartoci zmiennych wewntrznych oraz, w zalenoci od implementacji, wartoci parametrw wejciowych lub odwoania do nich s przechowywane pomidzy kolejnymi chwilami wykonania FB. W programie FB mog by wykorzystywane wielokrotnie, ale dla kadego wywoania musi by utworzona odpowiednia struktura danych, w ktrej przechowywana bdzie informacja o stanie wywoywanego FB. Tworzenie takiej struktury danych nazywa si tworzeniem egzemplarza FB lub ukonkretnianiem (ang. instantiation). Kady utworzony egzemplarz (ang. instance) musi posiada swj identyfikator (swoj nazw). Deklaracja zmiennej i deklaracja egzemplarza FB: VAR (* Nazwa Ala : Licznik1 : Licznik2 : END_VAR Typ danej lub FB *) BOOL; (* deklaracja zmiennej *) CTU; (* deklaracja egzemplarza FB *) CTU; (* deklaracja innego egzemplarza FB *)

Przykad struktury danych dla licznika CTU: TYPE CTU: STRUCT (* wejcia *) CU : BOOL R_EDGE; R : BOOL; PV : INT; (* wyjcia *) Q : BOOL; CV : INT; END_STRUCT; END_TYPE

(* licz w gr *) (* zeruj licznik *) (* warto zadana *) (* wyjcie zaczane *) (* warto bieca *)

Przykad tworzenia egzemplarza i wywoania bloku funkcjonalnego: Graficznie (w jzyku FBD)


FF75 SR %IX1 S1 Q1 %QX3 %IX2 R

Tekstowo (w jzyku ST) (* Deklaracja *) VAR FF75: SR; END_VAR (* Wywoanie *) FF75(S1:=%IX1, R:=%IX2); (* Przypisanie wyjcia *) %QX3:= FF75.Q1;

Przykad uycia bloku licznika UPCTR w sterowniku GE Fanuc:


%I0001 %M0010 > UPCTR ( ) %M0010 R CONST PV +00100 %R0100

Deklaracja bloku funkcjonalnego pochodnego (ang. derived function block) Przebiegi czasowe dla przekanika dwupooeniowego z histerez czasow
Y

Yzad

1s

t Q
1

t
Tw Tz Tw Tz Tz

Przykad deklaracji bloku funkcjonalnego w jzyku ST realizujcego zadanie przekanika: FUNCTION_BLOCK PRZEKAZNIK (* cze zewntrzne *) VAR_INPUT We : BOOL; Y : INT; Yzad : INT; Tz : TIME := t#100ms; Tw : TIME := t#100ms; END_VAR VAR_OUTPUT Q : BOOL; END_VAR VAR Timer_ON : TON; Timer_OFF : TON; FlipFlop : SR; END_VAR (* Ciao Bloku Funkcjonalnego *) IF We THEN IF (Y < Yzad) THEN Timer_ON(IN:=We, PT:=Tz); END_IF (* Wejcia *) (* Wejcie uruchamiajce FB, domylnie = 0 *) (* Warto zadana *) (* Opnienie zaczenia, domylnie = 100ms *) (* Opnienie wyczenia, domylnie = 100ms *) (* Wyjcie *) (* Domylnie = 0 *) (* Zmienne wewntrzne, lokalne *) (* nazwy egzemplarzy blokw funkcjonalnych *)

(* Uruchomienie przekanika *) (* Y poniej Yzad *) (* ustaw czas, po ktrym ma by zaczony *)

IF (Y > Yzad) THEN (* Y powyej Yzad *) Timer_OFF(IN:=We, PT:=Tw); (* ustaw czas, po ktrym ma by wyczony *) END_IF FlipFlop(S:=Timer_ON.Q, R1:=Timer_OFF.Q); (* wywoanie przekanika *) Q:=FlipFlop.Q1; (* nadanie wyjcia *) END_IF END_FUNCTION_BLOCK

Przykad deklaracji bloku funkcjonalnego w jzyku FBD:


FUNCTIONBLOCK (* cze zewntrzne *) PRZEKAZNIK We Q BOOL Y Yzad Tz Tw

BOOL INT INT TIME TIME

(** Ciao Bloku Funkcjonalnego **) TimerON FlipFlop LTINT EN ENO TON RS IN QS Q1 Q Tz PT ET R1 TimerOFF GTINT EN ENO TON IN Q Tw PT ET

We Y Yzad

We Y Yzad

ENDFUNCTIONBLOCK

Wywoywanie FFB
Wzajemne wywoywanie POU podlega nastpujcym zasadom: Programy mog wywoywa funkcje lub bloki funkcjonalne (FB), ale nie odwrotnie; FB mog wywoywa inne FB; FB mog wywoywa funkcje, ale nie odwrotnie; Funkcje mog wywoywa tylko inne funkcje. Niedozwolone jest wywoywanie rekursywne, tzn. POU nie moe wywoywa siebie samego, ani bezporednio, ani w sposb poredni, chocia wywoywanie rekursywne jest dopuszczone w innych jzykach programowania, np. dla komputerw PC. Gdyby dopuszczone byo wywoanie rekursywne, to system programujcy sterownik nie byby w stanie obliczy maksymalnej pamici potrzebnej w chwili wykonania programu rekursywnego. Wywoywanie rekursywne mona atwo zastpi przez tworzenie odpowiednich iteracji, np. przez ptl. Przykad rekursywnego wywoania funkcji w jzyku ST: FUNCTION FF1 :BOOL; VAR_INPUT X : INT; END_VAR IF FF1(X) THEN ...... (* Zabronione rekursywne wywoanie definiowanej funkcji *) END_IF END_FUNCTION Przykad rekursywnego wywoania egzemplarza FB w jzyku ST: FUNCTION_BLOCK FB1 VAR_INPUT We1 : INT; END_VAR VAR MojFB : FB1; (*Zabronione rekursywne tworzenie egzemplarza definiowanego FB *) XX : INT; END_VAR FB1(XX); (*Zabronione rekursywne wywoanie definiowanego FB *)

END_FUNCTION_BLOCK

Przykad rekursywnego wywoania funkcji w sposb poredni:

(* Deklaracja funkcji FF1 *) FUNCTION FF1 : BOOL; VAR_INPUT X : INT; END_VAR VAR Y : REAL; END_VAR ... Y:=FF2(0.0); (*Zabronione wywoanie funkcji FF2 powodujce rekurencj *) ... END_FUNCTION (* Deklaracja funkcji FF2 *) FUNCTION FF2 : REAL; VAR_INPUT X : REAL; END_VAR ... IF FF1(5) THEN ..... (*Zabronione wywoanie funkcji FF1 powodujce rekurencj *) ... END_IF END_FUNCTION

Wywoanie funkcji lub FB powoduje przekazanie parametrw wejciowych do zmiennych wejciowych wywoywanego POU. Zmienne wejciowe zadeklarowane w definicji POU s nazywane parametrami formalnymi, natomiast wprowadzane do nich dane wejciowe nazywa si parametrami aktualnymi, by podkreli, e zawieraj one aktualne wartoci wej. Przykady uycia nazw parametrw formalnych: Przykad
ADD B A C D

Opis Graficzne przedstawienie uycia funkcji ADD w jzyku FBD brak nazw parametrw formalnych.

A := ADD(B, C, D) ;
SHL B IN A C N

Uycie funkcji ADD w jzyku ST bez nazw parametrw formalnych. Graficzne przedstawienie wywoania funkcji SHL. Wystpuj nazwy parametrw formalnych. Uycie funkcji SHL w jzyku ST z nazwami parametrw formalnych.

A := SHL(IN:=B, N:=C);

Funkcje lub FB mog by wywoywane nawet wtedy, gdy lista parametrw wejciowych jest niekompletna lub przedstawiona w innej kolejnoci ni wystpuje w deklaracji POU. W takim przypadku nazwy parametrw formalnych musz pojawi si w sposb jawny, aby system programujcy mg prawidowo przypisa odpowiednie parametry aktualne do formalnych. Jeeli lista parametrw jest niekompletna, to pominitym wejciowym parametrom formalnym nadawane s wartoci pocztkowe zdefiniowane przez uytkownika lub domylne. Takie rozwizanie zapewnia, e zmienne wejciowe zawsze maj nadan warto. Przykad deklaracji FB o trzech parametrach wejciowych: FUNCTION_BLOCK Fblok VAR_INPUT Par1 : BOOL; Par2: TIME; Par3 : INT; END_VAR (* ciao FB *) END_FUNCTION_BLOCK (* Deklaracja FB*)

Przykady w jzyku IL wywoania FB z rnymi listami wej: VAR FB1, FB2, FB3 : Fblok; (* utworzenie 3 egzemplarzy bloku Fblok *) AT %I1 : BOOL; AT %IW1 : INT; END_VAR (* Wywoanie z pen list wej *) CAL FB1(Par1 := %I1, Par2 := t#10s, Par3:= %IW1) (* Wywoanie z list wej w innej kolejnoci *) CAL FB2(Par3 := %IW1, Par1 := %I1, Par2:= t#10s) (* Wywoanie z niepen list wej *) CAL FB1(Par2 := t#10s, Par1:= %I1)

Funkcje standardowe
W normie wyrniono siedem grup funkcji standardowych:
1. Funkcje konwersji typw (ang. Type conversion functions); 2. Funkcje liczbowe (ang. Numerical functions); 3. Funkcje na cigach bitw (ang. Bit string functions); 4. Funkcje wyboru i porwnania (ang. Selection and comparison functions); 5. Funkcja na cigach znakw (ang. Character string functions); 6. Funkcje na typach danych zwizanych z czasem (ang. Functions of time data types); 7. Funkcje na wyliczeniowych typach danych (ang. Functions of enumerated data types).

Przykad funkcji przecionej i funkcji o nadanych typach. Lp. 1 Opis Funkcja przeciona (ang. overloaded function) tu dla danych liczbowych typu uniwersalnego ANY_NUM Przykad
ADD ANYNUM

ANYNUM ANYNUM . . ANYNUM

Funkcja o nadanych typach (ang. typed function) tu dla parametrw typu INT.

INT INT . . INT

ADDINT INT

Przykady konwersji typw danych dla funkcji przecionych. Lp.


1

Deklaracja zmiennych VAR A : INT ; B : INT ; C : INT ; END_VAR VAR A : INT ; B : REAL ; C : REAL ; END_VAR VAR A : INT ; B : INT ; C : REAL ; END_VAR

Przykady uycia w jzykach FBD i ST


ADD A C B

C:= A + B;

(* ST *)

ADD A INTTOREAL C B

C:=INT_TO_REAL(A) + B;

(* ST *)

ADD A INTTOREAL C B

C:=INT_TO_REAL(A + B);

(* ST *)

Przykady konwersji typw dla funkcji o nadanych typach. Lp.


1

Deklaracja zmiennych VAR A : INT ; B : INT ; C : INT ; END_VAR VAR A : INT ; B : REAL ; C : REAL ; END_VAR VAR A : INT ; B : INT ; C : REAL ; END_VAR

Przykady uycia w jzykach FBD i ST


ADDINT A C B

C:=ADD_INT( A, B); (* ST *)
ADDREAL A INTTOREAL C B

C:=ADD_REAL(INT_TO_REAL(A), B); (* ST *)
ADDINT A INTTOREAL C B

C:=INT_TO_REAL(ADD_INT(A, B));

(* ST *)

Funkcje konwersji typw: Lp. 1 2 3 4 Forma graficzna


* *TO** ** ANYREAL TRUNC ANYINT ANYBIT BCDTO** ANYINT ANYINT *TOBCD ANYBIT

Przykad uycia w jzyku ST A:=INT_TO_REAL(B); A:=TRUNC(B); A:=BCD_TO_INT(C); C:=INT_TO_BCD(A);

Dla przedstawionych w tabeli przykadw w jzyku ST zaoono, e uyte w nich zmienne zostay zadeklarowane jako: VAR A :INT; B :REAL; C :WORD; END_VAR W jzyku IL pierwszy przykad mona by zapisa w nastpujcy sposb (pozostae wygldayby podobnie): LD B INT_TO_REAL ST A

Standardowe funkcje liczbowe jednej zmiennej: Forma graficzna


* ** *
* oznacza typ wejcia/wyjcia ** oznacza nazw funkcji

Przykady uycia w jzykach ST i IL A:=SIN(B); (* jzyk ST *) (I/O) LD B SIN ST A (* jzyk IL *)

Lp.

Nazwa funkcji

Typ I/O Funkcje podstawowe

Opis

1 2

ABS SQRT

ANY_NUM ANY_REAL

Warto bezwzgldna Pierwiastek kwadratowy

Funkcje logarytmiczne 3 4 5 LN LOG EXP ANY_REAL ANY_REAL ANY_REAL Logarytm naturalny Logarytm dziesitny Funkcja wykadnicza o podstawie e

Funkcje trygonometryczne 6 7 8 9 10 11 SIN COS TAN ASIN ACOS ATAN ANY_REAL ANY_REAL ANY_REAL ANY_REAL ANY_REAL ANY_REAL Sinus kta w radianach Cosinus kta w radianach Tangens kta w radianach Arcus sinus Arcus cosinus Arcus tangens

Standardowe funkcje arytmetyczne: Forma graficzna


*** ANYNUM Przykad uycia w jzykach ST i IL

ANYNUM ANYNUM : : ANYNUM


***

A:=ADD(B,C,D); (* jzyk ST *) lub A:=B+C+D; LD B ADD C ADD D ST A Opis (* jzyk IL *)

oznacza nazw funkcji lub symbol Nazwa Symbol

Lp.

Funkcje arytmetyczne rozszerzalne (o zmiennej liczbie wej) 12 13 ADD MUL + * Dodawanie Mnoenie OUT := IN1+IN2++INn OUT := IN1*IN2**INn

Funkcje arytmetyczne o staej liczbie wej 14 15 16 17 18 SUB DIV MOD EXPT MOVE ** := / Odejmowanie Dzielenie OUT := IN1 IN2 OUT := IN1 / IN2

Reszta z dzielenia OUT := IN1 modulo IN2 Potgowanie Przepisanie OUT := IN1IN2 OUT := IN

Standardowe funkcje przesuwania bitw Forma graficzna


*** ANYBIT IN ANYBIT ANYINT N
***

Przykad uycia w jzykach ST i IL A:=SHL(IN:=B, N:=5); (* jzyk ST *) LD B SHL 5 ST A Opis (* jzyk IL *)

oznacza nazw funkcji

Lp. 1 2 3 4

Nazwa SHL SHR ROR ROL

Przesu bity w argumencie IN o N pozycji w lewo wprowadzajc 0 na pozycje bitw z prawej strony Przesu bity w argumencie IN o N pozycji w prawo wprowadzajc 0 na pozycje bitw z lewej strony Przesu cyklicznie w prawo N bitw w argumencie IN (rotacja bity z prawej strony przechodz na lew) Przesu cyklicznie w lewo N bitw w argumencie IN (rotacja bity z lewej strony przechodz na praw)

Standardowe funkcje Boolowskie Forma graficzna


*** ANYBIT

Przykad uycia w jzykach ST i IL A:=AND(B,C,D); lub A:=B&C&D; (* jzyk ST *)

LD B AND C AND D *** oznacza nazw funkcji lub symbol ST A Lp. 5 6 7 8 Nazwa AND OR XOR NOT Symbol & >=1 =2k+1

ANYBIT ANYBIT : : ANYBIT

(* jzyk IL *)

Opis Mnoenie Boolowskie OUT:=IN1 & IN2 & & INn Suma Boolowska Suma wykluczajca Negacja OUT:=IN1 OR IN2 OR OR INn OUT:=IN1 XOR IN2 XOR XOR INn OUT:=NOT IN1

Standardowe funkcje wyboru Lp. 1 Forma graficzna


SEL BOOL G ANY ANY IN0 ANY IN1 MAX ANY ANY : ANY MIN ANY ANY : ANY LIMIT ANY MN ANY ANY IN ANY MX

Opis i przykady w jzyku ST Wybr wartoci: OUT:=IN0 jeli G=0 OUT:=IN1 jeli G=1

Przykad: A:=SEL(G:=0, IN0:=X, IN1:=255); daje w wyniku A:=X. Wybr wartoci maksymalnej: Przykad: OUT:=MAX{IN1, IN2, , INn} A:=MAX(B, C, D); Wybr wartoci minimalnej: Przykad: OUT:=MIN{IN1, IN2, , INn} A:=MIN(B, C, D); Ogranicznik: OUT:=MIN{MAX{IN, MN}, MX} Przykad: A:=LIMIT(IN:=B, MN:=0, MX:=255); daje w wyniku A:=0 gdy B < 0, A:=255 gdy B > 255, poza tym A:=B. Multiplekser wybiera jedno z N wej w zalenoci od wartoci wejcia K. Przykad: A:=MUX(K:=0, IN0:=B, IN1:=C, IN2:=D); daje w wyniku A:=B.

2a

2b

4
ANYINT ANY : ANY

MUX K ANY

Przedstawiony w tablicy przykad dla multipleksera w jzyku ST w przypadku jzyka IL wygldaby nastpujco: LD 0 MUX B, C, D ST A

Standardowe funkcje porwnania Forma graficzna


*** ANY BOOL : ANY
***

Przykad uycia w jzyku ST A := GT(B, C, D); lub A := (B > C) & (C > D);

oznacza nazw funkcji lub symbol Opis =1 gdy kolejne wejcia tworz sekwencj malejc OUT:=(IN1 > IN2) & (IN2 > IN3) & & (INn-1 > INn) =1 gdy kolejne wejcia tworz sekwencj nie rosnc OUT:=(IN1 >= IN2) & (IN2 >= IN3) & & (INn-1 >= INn) =1 gdy wszystkie wejcia s sobie rwne OUT:=(IN1 = IN2) & (IN2 = IN3) & & (INn-1 = INn) =1 gdy kolejne wejcia tworz sekwencj nie malejc OUT:=(IN1 <= IN2) & (IN2 <= IN3) & & (INn-1 <= INn) =1 gdy kolejne wejcia tworz sekwencj rosnc OUT:=(IN1 < IN2) & (IN2 < IN3) & & (INn-1 < INn) =1 gdy kolejne wejcia rni si midzy sob OUT:=(IN1 <> IN2) & (IN2 <> IN3) & & (INn-1 <> INn)

Lp.Nazwa Symbol 5 6 7 8 9 10 GT GE EQ LE LT NE
>

>=

<=

<

<>

W przedstawionym przykadzie porwnania w jzyku ST zakada si, e zmienna A jest typu BOOL, a pozostae zmienne s dowolnego typu (ale wszystkie tego samego) nalecego do typu uniwersalnego ANY. Ten sam przykad mona zapisa w jzyku IL jako: LD B GT C AND( LD C GT D ) ST A (* Wynik porwnania (C > B) staje si wynikiem biecym CR typu BOOL *) (* Wynik biecy CR jest zapamitywany *) (* Wynik porwnania (D > C) staje si wynikiem biecym CR typu BOOL *) (* Koniec zagniedenia wykonanie AND na CR biecym i CR poprzednim *) (* Zapamitanie wyniku biecego w zmiennej A *)

Standardowe funkcje na cigach znakw Lp. 1 Forma graficzna


STRING LEN INT LEFT STRING IN STRING ANYINT L RIGHT IN STRING L MID IN STRING L P

Opis i przykady w jzyku ST Obliczanie dugoci cigu. Np. A:=LEN(ASTRING); daje w wyniku A:=7. L znakw z lewej strony cigu IN. Np. A:=LEFT(IN:=ASTR, L:=3) daje w wyniku A:=AST. L znakw z prawej strony cigu IN. Np. A:=RIGHT(IN:=ASTR, L:=3); daje w wyniku A:=STR. L znakw z cigu IN poczwszy od znaku Ptego. Np. A:=MID(IN:=ASTR, L:=2, P:=2); daje w wyniku A:=ST.

3
STRING ANYINT

4
STRING ANYINT ANYINT

5
STRING : STRING

6
STRING STRING ANYINT

czenie cigw. Np. CONCAT STRING A:=CONCAT(AB,CD,E); daje w wyniku A:=ABCDE. Wstawienie cigu IN2 do cigu IN1 po P-tym INSERT IN1 STRING znaku. Np. IN2 A:=INSERT(IN1:=ABC, IN2:=XY,P:=2); P daje w wyniku A:=ABXYC.

Kasowanie L znakw w cigu IN, poczwszy DELETE STRING IN1 STRING od P-tego znaku. Np. ANYINT L A:=DELETE(IN:=ABXYC, L:=2, P:=3); ANYINT P daje w wyniku A:=ABC. REPLACE IN1 STRING IN2 L P

8
STRING STRING ANYINT ANYINT

Zastpienie L znakw w cigu IN1 przez cig IN2 poczwszy od P-tego znaku. Np. A:=INSERT(IN1:=ABCD,IN2:=X,L:=2,P: =2); daje w wyniku A:=AXD. Znalezienie miejsca pierwszego pojawienia si cigu IN2 w cigu IN1. Np. A:=FIND(IN1:=ABCBC, IN2:=BC); daje w wyniku A:=2.

FIND STRING IN1 ANYINT STRING IN2

Standardowe funkcje na typach danych zwizanych z czasem Funkcje numeryczne i konkatenacji Lp. 1 2 3 4 5 6 7 8 9 10 11 12 Nazwa ADD Symbol + IN1 TIME TIME_OF_DAY DATE_AND_TIME TIME DATE TIME_OF_DAY TIME_OF_DAY DATE_AND_TIME DATE_AND_TIME TIME TIME DATE IN2 TIME TIME TIME TIME DATE TIME TIME_OF_DAY TIME DATE_AND_TIME ANY_NUM ANY_NUM TIME_OF_DAY OUT TIME TIME_OF_DAY DATE_AND_TIME TIME TIME TIME_OF_DAY TIME DATE_AND_TIME TIME TIME TIME DATE_AND_TIME

SUB

MUL DIV CONCA T

* /

Funkcje konwersji typw 13 14 DATE_AND_TIME_TO_TIME_OF_DAY DATE_AND_TIME_TO_DATE

Standardowe bloki funkcjonalne


Wrd FB standardowych wyrnia si nastpujce grupy:
1. Elementy dwustanowe (ang. Bistable elements); 2. Elementy detekcji zbocza (ang. Edge detection elements); 3. Liczniki (ang. Counters); 4. Czasomierze (ang. Timers).

Standardowe dwustanowe bloki funkcjonalne Lp. 1 Forma graficzna


SR BOOL S1 Q1 BOOL BOOL R SR BOOL S Q1 BOOL BOOL R1 SEMA BOOL CLAIM BUSY BOOL BOOL RELEASE

Opis Przerzutnik SR S1 wejcie ustawiajce (dominujce) R wejcie zerujce Przerzutnik RS S wejcie ustawiajce R1 wejcie zerujce (dominujce) Semafor CLAIM wejcie ustawiajce semafor RELEASE wejcie zwalniajce semafor

Przykady uycia bloku RS w jzykach FBD, ST i IL: (* jzyk FBD *)


FlipFlop (* nazwa egzemplarza FB *) RS ZALACZ S Q1 %Q1 WYLACZ R1

(* jzyki tekstowe *) VAR FlipFlop : RS; END_VAR (* jzyk ST *) FlipFlop(S:=ZALACZ, R1:=WYLACZ); %Q1:=FlipFlop.Q1; (* jzyk IL *) CAL FlipFlop(S:=ZALACZ, R1:=WYLACZ); (* wywoanie *) LD FlipFlop.Q1 ST %Q1 (* nadanie wartoci wyjciu *) (* wywoanie *) (* nadanie wartoci wyjciu *) (* deklaracja egzemplarza FB *)

Standardowe bloki funkcjonalne detekcji zbocza Lp. 1 Forma graficzna


RTRIG BOOL CLK Q BOOL FTRIG BOOL CLK Q BOOL

Opis Detektor zbocza narastajcego CLK testowane wejcie Detektor zbocza opadajcego CLK testowane wejcie

Przykad detekcji zbocza narastajcego w jzykach FBD, ST i IL: (* jzyk FBD *)


Detektor (* nazwa egzemplarza FB *) RTRIG %I1 CLK Q %M1

(* jzyki tekstowe *) VAR Detektor : R_TRIG; END_VAR (* jzyk ST *) Detektor(CLK:=%I1); %M1:= Detektor.Q; (* jzyk IL *) CAL Detektor (CLK:=%I1); (* wywoanie *) LD Detektor.Q ST %M1 (* nadanie wartoci wyjciu *) (* wywoanie *) (* nadanie wartoci wyjciu *) (* deklaracja egzemplarza FB *)

Standardowe liczniki Lp. 1 Forma graficzna


CTU BOOL >CU Q BOOL BOOL R INT PV CV INT CTD BOOL >CD Q BOOL BOOL LD INT PV CV INT CTUD >CU QU BOOL >CD QD BOOL R LD PV CV INT

Opis Licznik dodajcy CU wejcie, ktrego zmiany z 0 na 1 s zliczane R wejcie zerujce licznik PV warto zadana Q wyjcie zaczane gdy CV osignie warto PV CV liczba zliczonych impulsw Licznik odejmujcy CD wejcie, ktrego zmiany z 0 na 1 s zliczane LD wejcie ustawiajce CV na warto PV PV warto zadana Q wyjcie zaczane gdy CV osignie warto 0 CV liczba zliczonych impulsw Licznik dodajco-odejmujacy CU wejcie, jego zmiany z 0 na 1 s zliczane w gr CD wejcie, jego zmiany z 0 na 1 s zliczane w d R wejcie zerujce licznik LD wejcie ustawiajce CV na warto PV PV warto zadana QU wyjcie zaczane gdy CV osignie warto PV QD wyjcie zaczane gdy CV osignie warto 0 CV liczba zliczonych impulsw

3
BOOL BOOL BOOL BOOL INT

Przykad uycia bloku CTUD w jzykach FBD, ST i IL (* jzyk FBD *)


Licznik (* nazwa egzemplarza FB *) CTUD >CU QU %Q1 >CD QD %Q2 R LD PV CV

%I1 %I2 %I3 %I4 10

(* jzyki tekstowe *) VAR Licznik : CTUD; END_VAR (* jzyk ST *) Licznik(CU:=%I1, CD:=%I2, R:=%I3, LD:=%I4); (* wywoanie *) %Q1:= Licznik.QU; (* nadanie wartoci wyjciu %Q1 *) %Q2:= Licznik.QD; (* nadanie wartoci wyjciu %Q2 *) (* jzyk IL *) CAL Licznik(CU:=%I1, CD:=%I2, R:=%I3, LD:=%I4); (* wywoanie *) LD Licznik.QU ST %Q1 (* nadanie wartoci wyjciu %Q1 *) LD Licznik.QD ST %Q2 (* nadanie wartoci wyjciu %Q2 *) (* deklaracja egzemplarza FB *)

Standardowe czasomierze Lp. 1 2 3 Forma graficzna


*** BOOL IN Q BOOL TIME PT ET TIME

Opis TP generator impulsu TON opnione zaczenie TOF opnione wyczenie IN wejcie uruchamiajce czasomierz PT warto zadana czasu ET czas mierzony

*** oznacza: TP, TON, TOF

Zegar czasu rzeczywistego RTC BOOL EN Q BOOL PDT ustalone data i czas (adowane przy DT PDT CDT DT zboczu narastajcym na wejciu EN)

CDT biece data i czas (gdy EN = 1) Q kopia EN Przykad uycia czasomierza TON w jzyku FBD, ST i IL: (* jzyk FBD *)
Zegar (* nazwa egzemplarza FB *) TON %I3 IN Q %Q1 t#10s PT ET

(* jzyki tekstowe *) VAR Zegar : TON; END_VAR (* jzyk ST *) Zegar(IN:=%I3, PT:=t#10s); %Q1:= Zegar.Q; (* jzyk IL *) CAL Zegar(IN:=%I3, PT:=t#10s) LD Zegar.Q ST %Q1 (* wywoanie *) (* nadanie wartoci wyjciu %Q1 *) (* wywoanie *) (* nadanie wartoci wyjciu %Q1 *) (* deklaracja egzemplarza FB *)

Wykresy czasowe sygnaw dla generatora impulsu TP:


1 0 1 0 t t0 t0+PT t2 t2+PT t4 t 4+PT t t0 t1 t2 t3 t4 t5

IN

PT ET 0 t t0 t1 t2 t2 +PT t4 t5

Wykresy czasowe sygnaw dla czasomierza zaczajcego TON:


IN 1 0 1 0 PT ET 0 t t0 t1 t2 t3 t4 t5 t t0 +PT t1 t4+PT t5 t t0 t1 t2 t3 t4 t5

Wykresy czasowe sygnaw dla czasomierza wyczajcego TOF:


1 0 1 0 PT ET 0 t t1 t2 t3 t4 t5 t t0 t1+PT t2 t5+PT t t0 t1 t2 t3 t4 t5

IN

Jzyk LD (Schemat drabinkowy)


Symbole stykw: Styki Symbol
***

Opis Styk zwierny (normalnie otwarty, ang. normally open contact) Stan poczenia z lewej strony styku jest przenoszony na praw stron, jeeli skojarzona zmienna boolowska ma warto 1. W przeciwnym razie prawe poczenie jest w stanie OFF. Styk rozwierny (normalnie zamknity, ang. normally closed contact) Stan poczenia z lewej strony styku jest przenoszony na praw stron, jeeli skojarzona zmienna boolowska ma warto 0. W przeciwnym razie prawe poczenie jest w stanie OFF. Styk wraliwy na zbocze narastajce (ang. Positive transition-sensing contact) Poczenie z prawej strony styku jest w stanie ON w czasie jednego wykonania, jeli poczenie z lewej strony jest w stanie ON, a skojarzona zmienna boolowska zmienia warto z 0 na 1. Poza tym stan poczenia z prawej strony jest OFF. Styk wraliwy na zbocze opadajce (ang. Negative transition-sensing contact) Poczenie z prawej strony styku jest w stanie ON w czasie jednego wykonania, jeli poczenie z lewej strony jest w stanie ON, a skojarzona zmienna boolowska zmienia warto z 1 na 0. Poza tym stan poczenia z prawej strony jest OFF.

Styki statyczne
*** /

*** P

Styki impulsowe (wraliwe na zbocze)


*** N

Symbole cewek: Cewki Symbol


*** ( )

Opis Cewka (ang. coil) Stan poczenia z lewej strony cewki jest przenoszony na praw stron i zapamitywany w skojarzonej zmiennej boolowskiej. Cewka negujca (ang. negated coil) Stan poczenia z lewej strony cewki jest przenoszony na praw stron, a jego odwrotno jest zapamitywana w skojarzonej zmiennej boolowskiej. Cewka ustawiajca (ang. Set coil, Latch coil) Skojarzona zmienna przyjmuje warto 1, jeeli poczenie z lewej strony jest w stanie ON. Warto ta pozostanie niezmieniona, a do chwili wyzerowania przez cewk kasujc (R). Cewka kasujca (ang. Reset coil, Unlatch coil) Skojarzona zmienna przyjmuje warto 0, jeeli poczenie z lewej strony jest w stanie ON. Warto ta pozostanie niezmieniona, a do chwili ustawienia przez cewk ustawiajc (S). Cewka z zapamitaniem stanu (ang. Retentive coil, Memory coil) Cewka ustawiajca z zapamitaniem stanu (ang. Set retentive coil) Cewka kasujca z zapamitaniem stanu (ang. Reset retentive coil) Cewka wraliwa na zbocze narastajce (ang. Positive transition-sensing coil) Skojarzona zmienna przyjmuje warto 1 na czas jednego wykonania, jeli poczenie z lewej strony zmienio stan z OFF na ON. Stan poczenia z lewej strony jest zawsze przenoszony na praw. Cewka wraliwa na zbocze opadajce (ang. Negative transition-sensing coil) Skojarzona zmienna przyjmuje warto 1 na czas jednego wykonania, jeli poczenie z lewej strony zmienio stan z ON na OFF. Stan poczenia z lewej strony jest zawsze przenoszony na praw.

Cewki zwyke
*** (/)

Cewki zatrzaskiwane

*** (S)

*** (R)

Cewki podtrzymywane, cewki z pamici

*** (M) *** (SM) *** (RM) *** (P)

Cewki impulsowe (wraliwe na zbocze)


*** (N)

Przykad przejrzystej struktury obwodw w jzyku LD:


(* obliczenia *) (* zapamitywanie *) %I1 %Q1 ( ) %I1 %Q3 %Q2 /( ) %I2 %I1 %Q2 %Q3 /( ) %I2

Przykad nieprzejrzystej struktury obwodw w jzyku LD:


%I1 %Q1 %Q3 %Q2 ( )/( ) %I2 %Q2 %Q3 /( )

Jzyk FBD (Funkcjonalny schemat blokowy)


Przykady sprzenia zwrotnego - ptla jawna i ptla ukryta:
(* przykad 1 - ptla jawna *) AND A RUN OR START1 START2 (*przykad 2 - ptla ukryta *) AND A RUN OR START1 START2 RUN (* przykad 3 - ptla ukryta *) AND A RUN C OR START1 C START2

Jzyk IL (Lista rozkazw)


Przykad sekwencji rozkazw: Etykieta START : Operator LD ANDN ST Operand %IX1 %MX5 %QX2 Komentarz (* WCINIJ PRZYCISK *) (* NIE WSTRZYMANY *) (* ZACZ *)

Zasada dziaania uniwersalnego akumulatora: VAR Operand1, Operand2, Wynik : INT :=0; END_VAR Et1: LD Operand1 (* CR Operand1, tu warto 0 *) ADD 10 (* CR CR + 10, tu CR = 10 *) ST Wynik (* Wynik CR, CR bez zmian *) GT 0 (* czy CR > 0? tak, wic CR := TRUE *) JMPC Et2 (* wykonaj skok do etykiety Et2, gdy CR = TRUE, CR bez zmian *) ADD Operand2 (* do CR dodaj Operand2 Bd !!! niezgodno typw *) Et2:

Operatory jzyka IL Lp. Operator Modyfikatory Operand 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 LD ST S R AND OR XOR ADD SUB MUL DIV GT GE EQ NE LE LT JMP CAL RET ) N, (, N( N, (, N( N,(, N( ( ( ( ( ( ( ( ( ( ( C, CN C, CN C, CN N N * * BOOL BOOL BOOL BOOL BOOL * * * * * * * * * * LABEL NAME Opis CR przyjmuje warto operandu (Load) Przesanie CR do operandu (Store) Jeli CR = 1, to operand ustaw na 1 (Set) Jeli CR = 1, to zeruj operand (Reset) Boolowskie AND operandu i CR Boolowskie OR operandu i CR Boolowskie (eXclusive OR) operandu i CR Dodawanie (ADDition) operandu i CR Odejmowanie (SUBtraction) operandu i CR Mnoenie (MULtiplication) operandu i CR Dzielenie (DIVision) CR przez operand Porwnanie: CR > operand (Greater Than) Porwnanie: CR >= operand (Greater than or Equal) Porwnanie: CR = operand (Equal) Porwnanie: CR <> operand (Not Equal) Porwnanie: CR <= operand (Less than or Equal) Porwnanie: CR < operand (Less Than) Skok do etykiety (JuMP to label) Wywoanie (CALl) FB o nazwie NAME Powrt (RETurn) z wywoanej funkcji lub FB Operator ograniczajcy dla modyfikatora (

Przykad zagniedania wyrae w nawiasach LD X1 (* CR X1 *) MUL( X2 (* CR X2 *) SUB( X3 (* CR X3 *) ADD X4 (* CR X3 + X4 *) ) (* CR X2 (X3 + X4) *) ) (* CR X1 * (X2 (X3 + X4)) *) ST Y (* CR bez zmian *) Przykad wywoania funkcji w jzyku IL: FUNCTION MojaFun : INT; (* Deklaracja funkcji *) VAR_INPUT We1, We2, We3 : INT; (* Parametry wejciowe *) END_VAR (* ciao funkcji *) LD We1 ADD We2 ADD We3 ST MojaFun (* Warto funkcji na wyjciu *) END_FUNCTION (* fragment POU wywoujcego MojaFun *) VAR Par1, Par2, Par3, Wynik : INT; (* Deklaracja zmiennych *) END_VAR LD Par1 MojaFun Par2, Par3 ST Wynik (* Wprowadzenie pierwszego parametru wejciowego *) (* Wywoanie funkcji z pozostaymi parametrami wejciowymi *) (* Zapamitanie wartoci MojaFun w zmiennej Wynik *)

Wywoywanie blokw funkcjonalnych w jzyku IL: Lp.


1

Opis i przykad CAL z list wej: CAL C10(CU:=%IX10, PV:=15)

Przesyanie wej za pomoc operatorw LD i ST: LD 15 ST C10.PV LD %IX10 ST C10.CU CAL C10

Uycie operatorw wejciowych LD 15 PV C10 LD %IX10 CU C10 CAL C10

W przykadach przyjto, e C10 jest zadeklarowanym egzemplarzem standardowego licznika CTU, tzn. w jednostce wywoujcej uyta zostaa deklaracja VAR C10: CTU; END_VAR. Operatory wejciowe w jzyku IL dla standardowych blokw funkcjonalnych: Lp. 1 2 3 4 5 6 7 8 9 10 Operatory S1, R S, R1 CLK CLK CU, R, PV CD, LD, PV CU, CD, R, LD, PV IN, PT IN, PT IN, PT Bloki funkcjonalne SR RS R_TRIG F_TRIG CTU CTD CTUD TP TON TOF

Pozostae elementy jzyka IL: TYPE ... END_TYPE; VAR ... END_VAR; VAR_INPUT ... END_VAR; VAR_OUTPUT ... END_VAR; VAR_IN_OUT ... END_VAR; VAR_EXTERNAL ... END_VAR; FUNCTION ... END_FUNCTION; FUNCTION_BLOCK ... END_FUNCTION_BLOCK; PROGRAM ... END_PROGRAM; STEP ... END_STEP; TRANSITION ... END_TRANSITION; ACTION ... END_ACTION

Jzyk ST (Tekst strukturalny)


Operatory jzyka ST: Lp. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Symbol (wyraenie) Funkcja(lista parametrw) ** NOT * / MOD + <, >, <=, >= = <> AND lub & XOR OR Opis Wyraenie w nawiasach Obliczanie wartoci funkcji Potgowanie Negacja arytmetyczna (Warto przeciwna) Negacja boolowska (dopenienie) Mnoenie Dzielenie Reszta z dzielenia (MODulo) Dodawanie Odejmowanie Porwnywanie Rwno Nierwno Iloczyn boolowski Suma boolowska modulo 2 (eXclusive OR) Suma boolowska Przykad (X+Y)*(X-Y) LN(A), MAX(X, Y), X**Y 10, X NOT (X > Y) X*Y X/Y 13 MOD 10 (wynik: 3) X+Y XY T#1h > T#30m (wynik: TRUE) T#1d = T#24h (wynik: TRUE) (X >Y) AND (X < Z) TRUE XOR FALSE TRUE OR FALSE

Instrukcje jzyka ST: Lp. 1 2 3 4 Instrukcja Przypisanie Przykady A:=B; CV:=CV+1; Y:=SIN(X); D:=INT_TO_REAL(C)

Wywoanie FB Moj_TMR(IN:=%IX5, PT:=T#300ms); Uycie wyjcia FB A:=Moj_TMR.Q; RETURN IF RETURN; D:=B*B-4*A*C; (* oblicz wyrnik *) IF D < 0.0 THEN NROOTS:=0; (* brak pierwiastkw *) ELSIF D = 0.0 THEN (* jeden pierwiastek *) NROOTS := 1; X1 := B / (2.0 * A); ELSE (* dwa pierwiastki *) NROOTS := 2; X1 := (B + SQRT(D) ) / (2.0 * A); X2 := (B SQRT(D) ) / (2.0 * A); END_IF; ERROR:=0; (* zmienna boolowska *) XW:=BCD_TO_INT(Y); (* wyznacz warto wybieraka *) CASE XW OF (* instrukcja wyboru *) 1,4: DISPLAY := TEKST1; 2: DISPLAY := TEKST2; (* blok instrukcji ) Y := SIN(Z); (* kolejne instrukcje, gdy XW = 2 *) 3,5..10: DISPLAY := STATUS (XW 3); ELSE DISPLAY := ; (* XW poza zakresem 1..10 *) ERROR := 1; END_CASE; (* koniec instrukcji wyboru *) J := 101; FOR I := 1 TO 100 BY 2 DO IF WORDS(I) = KEY THEN J := I; EXIT; END_IF; END_FOR; J := 1; WHILE J <= 100 AND WORDS(J) <> KEY DO J := J+2; END_WHILE; J := 1; REPEAT J := J+2; UNTIL J = 101 OR WORDS(J) = KEY END_REPEAT; EXIT;

CASE

FOR

WHILE

REPEAT

EXIT

Kompatybilno jzykw
Kady z jzykw programowania posiada pewne cechy, ktre powoduj, e do zaprogramowania niektrych zagadnie nadaje si lepiej, ni inne jzyki. Jzyk LD jest najodpowiedniejszy do programowania operacji logicznych (algebra Boolea). Jzyki tekstowe s wygodniejsze w procedurach zarzdzania pamici lub przy programowaniu oblicze iteracyjnych. Programy w jzykach graficznych s stosunkowo atwe do analizy, czego nie mona powiedzie o jzyku IL, ktry za to jest najbardziej elastyczny, itd. Niektre pakiety programowania umoliwiaj wykonanie takiego przetumaczenia, aczkolwiek norma nie stawia takich wymaga. Podstawowy problem stanowi tu niepena kompatybilno poszczeglnych jzykw programowania. Szczeglna trudno pojawia si przy przechodzeniu z jzykw graficznych na tekstowe i odwrotnie. Wynika to z rnego sposobu przetwarzania w obu grupach jzykw. Te pierwsze s przede wszystkim jzykami proceduralnymi, tzn. instrukcje s wykonywane w nich jedne po drugich, podczas gdy podstaw w jzykach graficznych jest przepyw sygnau (prdu w jzyku LD), ktry moe by realizowany rwnolegle. Przykad dla porwnania wasnoci jzyka LD i IL: a) jzyk LD
%I1 >> Et1 %Q1 ( )

b) jzyk IL LD %I1 JMPC Et1 ST %Q1

Std, aby ustrzec si tego typu niejednoznacznoci, w niektrych systemach programowania wprowadza si pewne ograniczenia w jzykach graficznych, takie jak np.: nie dopuszcza si do wprowadzania operacji logicznych w obwodzie po operacjach przypisania (np. w jzyku LD po wprowadzeniu cewki nie mona ju dalej rozwija obwodu); albo w ogle nie dopuszcza si do stosowania instrukcji sterujcych (typu skok), albo jeli si dopuszcza, to w trakcie wykonywania obwodu z gry na d napotkanie takiej instrukcji powoduje zakoczenie wykonywania danego obwodu. Waciwie to stosowanie instrukcji skoku w jzykach graficznych stoi w pewnej sprzecznoci z zasad rwnolegego przetwarzania sygnau w obwodzie. Ponadto w jzykach tych w ogle nie wystpuj instrukcje dla oblicze iteracyjnych (typu REPEAT, WHILE, FOR), std tumaczenie tego typu konstrukcji z jzyka ST na jzyki graficzne wymaga tworzenia skomplikowanych obwodw, w ktrych w sposb jawny operuje si wskanikiem ptli i sprawdza warunki jej zakoczenia za pomoc funkcji porwnania (np. EQ). Wykorzystanie wasnoci rwnolegego przetwarzania w jzykach graficznych poprzez czenie jednego wyjcia z wiksz liczb wej wymaga przy tumaczeniu na jzyki tekstowe wprowadzania dodatkowych zmiennych w celu uzyskania kompatybilnoci programw.

Przykad pokazujcy konieczno uycia zmiennej pomocniczej w jzyku IL: a) jzyk LD


%I1 %I2 %I3 %Q1 ( ) %I4 %Q2 ( )

b) jzyk IL LD %I1 AND %I2 ST Pomoc AND %I3 ST %Q1 LD Pomoc AND %I4 ST %Q2

c) wersja rwnowana w jzyku LD


%I1 %I2 Pomoc ( ) Pomoc %I3 %Q1 ( ) Pomoc %I4 %Q2 ( )

Kolejny problem, to wystpowanie przy wywoaniu funkcji w jzykach graficznych pary EN / ENO, dla ktrej nie ma odpowiednika w jzyku tekstowym. W tym przypadku trzeba by uzupeni odpowiednie wywoanie funkcji przez warunek typu IF ... THEN. Stosunkowo najatwiej jest wykona tumaczenie w obrbie jzykw tekstowych, aczkolwiek take tutaj mona natrafi na pewne trudnoci wynikajce ze specyfiki jzyka. W jzyku ST nie wystpuj instrukcje skoku, ktre w IL umoliwiaj realizacj ptli, std przejcie z tekstu napisanego w IL na ST moe nastrcza pewne problemy. Z kolei w IL nie ma instrukcji iteracyjnych, wic trzeba je organizowa niejako na piechot, poprzez wprowadzanie wskanika dla iteracji i wykorzystanie instrukcji porwnania lub skokw.

You might also like