IEC 1131 3

background image

3-1


3 Standard IEC 1131-3 programowania sterowników PLC

3.1 Wstęp


Ponieważ nie istnieje sterownik standardowy, to każdy z producentów sterowników
programowalnych oferował własne rozwiązania sprzętowe i programowe. Dostarczane
oprogramowanie umożliwiało zwykle programowanie sterowników na poziomie zbliżonym do
sprzętowego. Sytuacja ta jest bardzo niekorzystna dla użytkowników wynikająca z konieczności z
programowania na niskim poziomie oraz z kłopotami wynikającymi z przenoszenia oprogramowania z
sterownika jednego producenta na sterownik innego producenta. Najkorzystniejszym rozwiązaniem
byłoby przyjęcie możliwości standardowych języków programowania wyższego poziomu niezależnych
od rozwiązań sprzętowych. Jednolity sposób programowania ma istotne znaczenie:
• zmniejsza czas na ponowne przeszkolenia programistów i czasy zaznajomienia się z systemem,
• powoduje wystąpienia mniej błędów wynikłych z stosowania standardowych bloków funkcyjnych,
• jasna definicja sprzęgów.

Zalety jednolitego programowania doceniają przede wszystkim użytkownicy. Opracowane

oprogramowanie może zostać ponownie użyte. Użytkownik nie jest z tego powodu związany z
konkretnym producentem.

Możliwość użycia raz opracowanego oprogramowania posiada następujące zalety:

• ponowne użycie przetestowanych bloków,
• obniżka kosztów,
• przyspieszenie rozwoju.

Oprogramowanie systemów sterowania powinno umożliwić wykrywanie błędów na etapie

konfigurowania. Nowoczesne metody rozwoju oprogramowania wykrywają błędy możliwie
najwcześniej. Dla systemów sterowania należy wykryć jak najwięcej błędów w trybie off-line
(pośrednim). Wymaga to stworzenia oprogramowania umożliwiającego testowanie wielu wariantów
rozwiązań i sprzęgów sprzętowych.

IEC 111-3 jest pierwszą próbą standaryzacji języków programowania w sterowaniu

przemysłowym. Istnieją organizacje międzynarodowe, które wspomagają standaryzację
programowania sterowników przemysłowych. Organizacja PLCopen ma na celu promowanie
standaryzacji w przemysłowych systemach sterowania. Organizacja ta zdefiniowała warunki
zgodności z standardem. Każde oprogramowanie może zostać przetestowane, czy spełnia te
warunki. Zostały zdefiniowane trzy klasy zgodności z standardem. Standard IEC 1131 zajmuje się
różnymi aspektami systemów sterujących rozpoczynając od definicji wymagań poszczególnego
sprzętu do komunikacji pomiędzy sterownikami. Trzecia część tego standardu dotyczy języków
programowania i jest oznaczana przez IEC 1131-3.

3.2 Własności standardu IEC 1131-3

Struktura oprogramowania sterowników zgodna z standardem ma postać hierarchiczną

przedstawioną na rys. 3.1.

Cały system sterowania rozwiązujący określony problem może być sformułowany jako

konfiguracja. Złożony problem może być podzielony na kilka konfiguracji komunikujących się
pomiędzy sobą poprzez zdefiniowane sprzęgi. Ogólnie konfiguracja odpowiada oprogramowaniu
wymaganemu dla jednego PLC. Dla bardziej złożonych aplikacji, jakim jest oprogramowanie całej linii
produkcyjnej, oprogramowania różnych sterowników muszą ze sobą współdziałać, w takim przypadku
oprogramowanie dla każdego sterownika będzie traktowane jako oddzielna konfiguracja.

Konfiguracja składa się z jednego lub kilku zasobów (resources), dostarczających wspomaganie

dla wszystkich własności niezbędnych do wykonywania programów. Zasób może być traktowany jako
sprzęg do maszyny wirtualnej, która umożliwia wykonanie programu IEC. Program IEC nie może
funkcjonować jeśli nie został załadowany do zasobu. Zasób istnieje wewnątrz PLC, ale może być
zdefiniowany poza nim. Na przykład zasób może być symulowany na komputerze PC, dla
wspomagania testowania sterowników. Dla sterowników PLC z wieloma kartami procesorowymi,
można definiować zasób oddzielnie dla każdej karty. Jednym z podstawowych funkcji zasobów jest
dostarczenie sprzęgu pomiędzy programem, a fizycznymi kanałami I/O sterownika.

1

background image

3-2

Program IEC może być zbudowany z różnych elementów oprogramowania, z których każdy

może być zapisany w różnych językach IEC. Wykonanie różnych części programu, na przykład
wybranych bloków funkcyjnych może być kontrolowane poprzez użycie zadań. Zadanie jest
przeznaczone do sterowania wykonaniem programów lub bloków funkcyjnych. Wykonanie to może
być realizowane w sposób okresowy lub w przypadku zadziałania wyzwalacza (trigger-a).

Konfiguracja

Zasoby

Zasoby

Zadanie

Program

Blok funkcyjny

Blok funkcyjny

Funkcja

Blok funkcyjny

Funkcja

Funkcja

Rys. 3.1. Struktura oprogramowania

Blok funkcyjny umożliwia tworzenie oprogramowania w sposób hierarchiczny. Blok funkcyjny

może być zbudowany z innych bloków funkcyjnych. Blok funkcyjny definiuje dane jako zbiór
parametrów wejściowych i wyjściowych oraz z zmiennych wewnętrznych. Blok funkcyjny posiada
również algorytm, które jest wykonywany za każdym wywołaniem bloku funkcyjnego. Ponieważ blok
funkcyjny może zapamiętywać zmienne wewnętrzne, to posiada on własny stan umożliwiający jego
użycie dla złożonych problemów sterowania. Funkcje w odróżnieniu od bloków funkcyjnych nie mają
możliwości zapamiętywania zmiennych wewnętrznych. Funkcja może mieć jedną wielkość wyjściową.

Plik konfiguracyjny może mieć postać:

CONFIGURATION przyklad

RESOURCE zasob1 ON procesor1

TASK

zadanie1

(INTERVAL:=t#20ms,

PRIORITY:=1);

TASK zadanie2

(INTERVAL:=t#10ms,

PRIORITY:=

2);

PROGRAM prog1 WITH zadanie2:pblok1;

PROGRAM prog2 WITH zadanie1:pblok2;

END_RESOURCE
RESOURCE

...

TASK

zadanie3

(SINGLE:=x1,

PRIORITY:=1);

PROGRAM prog3 WITH zadanie3:pblok3;

...
END_RESOURCE
END_CONFIGURATION
W przykładzie tym program prog1 przydzielony do bloku pblok1 i jest wywoływany cyklicznie co 20ms
z wyższym priorytetem od programu prog2, wywoływanego o ile to możliwe co 10ms. Zadanie
zadanie3 rozpoczyna wykonywanie programu prog3, gdy wartość x1 ulega zmianie z 0 na 1.
Różnica pomiędzy blokiem funkcyjnym, a programem polega na tym, że w bloku funkcyjnym
nie mogą być zdefiniowane zmienne bezpośrednie. Np. adresy sprzętowe mogą być dostępne w
bloku poprzez zmienne zewnętrzne.

2

background image

3-3


PROGRAM prog1 (* przykład programu *)

(* przydzielenie zmiennych i I/O *)

VAR

cisnienie_powietrza: BOOL AT %0X2.7;

(*

podstawienie

dla

wyjścia 2.7 *)

wylacznik_koncowy: BOOL AT %IX3.2;

(*

podstawienie

dla

wejścia wartości 3.2 *)

END_VAR
(*

cześć rozkazowa *)

(* jezeli wylącznik_koncowy nieaktywny *)

LDN

wylacznik_koncowy

(* warunkowe wywołanie sterowania sprężarką )

CALC sterowanie_cisnieniem( wartosc:= cisnienie_powietrza);

END_PROGRAM
Przykład ten pokazuje, ze blok funkcyjny sterowanie_cisnieniem jest elastyczny może być używany w
różnych otoczeniach bez modyfikacji.
Programy

mogą być definiowane w różnych językach programowania. W standardzie

wprowadzono dla każdego języka programowania wprowadzono część deklaracyjną jednolitą dla
wszystkich języków programowania.
VAR

Wejscie1 AT %IX5.1;

(* Symboliczne podstawienie zmiennej Wejscie1 do bitu 1 Modulu 5 )

dlugość INT; (*Deklaracja symbolu dlugosc *);

Temp AT %MW12:INT:= 30;

(* Deklaracja zmiennej Temp w słowie wejściowym 12 z wartoscią początkową 30 *)

END_VAR
Zmiennej długość nie przydzielono ustalonej lokacji w pamięci, jest ona realizowana automatycznie.
Bezpośrednie przydzielenie poszczególnego adresu w sterowniku jest możliwe przy użyciu operatora
AT. Bezpośredni adres jest zaznaczany znakiem %. Struktura identyfikatorów bezpośrednich adresów
sterownika jest w standardzie IEC ściśle określona.

3.3 Typy danych

3.3.1 Identyfikatory

Identyfikatory

są stosowane dla nazywania różnych elementów języków IEC takich jak

zmienne, nowe typy danych, bloki funkcyjne, programy, itp. Identyfikator jest ciągiem znaków liter, cyfr
i podkreśleń, przy czym pierwszy znak nie może być cyfrą i nie mogą wystąpić dwa podkreślenia
razem. W standardzie zakłada się, że co najmniej 6 pierwszych znaków zapewnia jednoznaczną
identyfikację nazwy.


3.3.2 Słowa kluczowe

Słowa kluczowe definiują różne konstrukcje języków programowania. Należy unikać

stosowania identyfikatorów będących słowami kluczowymi, np.:
TYPE TRUE PROGRAM TASK RETURN STEP FUNCTION
Również identyfikatory funkcji standardowych należy traktować jako zarezerwowane, np:
TON RS SIN COS.

3.3.3 Komentarze

Komentarze muszą być ograniczone znakami (* *). Komentarze są przeznaczone do

zamieszczania uwag programisty i są ignorowane w trakcie tworzenia programu wynikowego.

3

background image

3-4

3.3.4 Typy Danych

Standard predefiniuje niektóre typy danych jako typy standardowe. Do nich są zaliczane

BOOL, INT, WORD, DWORD, REAL i inne. Użytkownik może definiować typy złożone jak struktury i
tablice. Dla każdego typu danych podawany jest format literałów. Literał określa jak stała danego typu
jest reprezentowana. Przykładowo literałami całkowitymi są 0, -34, 2399.

3.3.5 Całkowite typy danych

W standardzie IEC możliwych jest kilka całkowitych typów danych (tab. 3.1).


Typ danych

Opis

Liczba bitów

Zakres

SINT

Short integer

8

-128 do 127

INT

Integer

16

-32768 do 32767

DINT Double

integer

32

-231 do 231 -1

LINT Long

integer

64

-263 do 263 -1

USINT

Unsigned short integer

8

0 do 255

UINT Unsigned

integer

16

0 do 216 -1

UDINT Unsigned

double

integer

32

0 do 232 -1

ULINT

Unsigned long integer

64

0 do 264 -1

Tab. 3.1. Całkowite typy danych

Literały całkowite używane są do przedstawiania liczb całkowitych. Przykłady literałów: -100,

0, 134, +897, 23_123. Liczby całkowite można przedstawić również w postaci dwójkowej, ósemkowej
lub szesnastkowej: 2#1111_1111 - odpowiada liczbie 255, 8#020 odpowiada liczbie 16, a 16#FF
odpowiada liczbie 255.

3.3.6 Typy zmiennoprzecinkowe

Typy zmiennoprzecinkowe (tab. 3.2) różnią się długością zapisu w pamięci.

Typ danych

Opis

Liczba bitów

Zakres

REAL Real 32

- 1038 do 1038

LREAL Long

real

64

-- 10308 do 10308

Tab. 3.2. Typy zmiennoprzecinkowe


Literały liczb rzeczywistych mogą zawierać literę e lub E symbolizującą podstawę potęgi równą 10:
10.345, -0.012, 21_485.32, 1.7E-12, -23.01e12.

3.3.7 Typy czasowe

Typy czasowe (TIME) służą do określania upływu czasu (tab. 3.3). Typ ten używany jest do

zapisu czasu trwania określonej fazy, a także służy do definiowania ograniczeń czasowych
związanych z zdarzeniami (np. timeout).

Typ danych

Opis

Liczba bitów

TIME Upływ czasu

Zależna od implementacji

Tab. 3.3 Typy czasowe

Wyróżnia się literały czasowe w formie dłuższej np. TIME#16d_5h_3m_4s_1ms. (definiuje przedział
czasu równy 16 dniom, 5 godzinom, 3 minutom, 4 sekundom i jednej milisekundzie). Ten sam zapis w
krótszej formie będzie postaci: T#16d5h3m4s1ms. Jeżeli wartość odpowiadająca danej jednostce
czasu wynosi 0, to wartość ta wraz nazwą jednostki może zostać opuszczona.

4

background image

3-5

3.3.8 Typy do zapisu daty i czasu

Wyróżnia się kilka typów przeznaczonych do zapisu czasu zegarowego i daty kalendarzowej
(tab. 3.4).

Typ danych

Opis

Liczba bitów

DATE Data

kalendarzowa

Zależna od implementacji

TIME_OF_DAY lub TOD

Czas dzienny

Zależna od implementacji

DATE_AND_TIME lub DT

Data i czas dzienny

Zależna od implementacji

Tab. 3.4. Typy do zapisu daty i czasu


Literały zapisujące datę i czas mogą występować w postaci długiej lub skróconej:

DATE#1997-05-14 lub D#1997-05-14,
TIME_OF_DAY#10:00:12.12 lub TOD#10:00:12.12
(12.12 sek. po dziesiątej),
DATE_AND_TIME#1997-05-14-10:00:12.12
lub DT#1997-05-14-10:00:12.12.

3.3.9 Łańcuchy znaków

Łańcuchy znaków są stosowane do operacjach tekstowych. Wyróżnia się jeden typ (tab. 3.5).

Typ danych

Opis

Liczba bitów

STRING

Łańcuch znaków

Zależna od implementacji

Tab. 3.5. Łańcuchy znaków.

Literały łańcuchów znaków zawarte są pomiędzy apostrofami, np. ‘Wartosc’. W takim ciągu

mogą wystąpić znaki kontrolne, które są poprzedzone znakiem dolara. Wyróżnia się następujące
znaki kontrolne: $$ - znak dolara, $’ - znak apostrofu, $L lub $l - przejście do następnego wiersza, $P
lub $p przejście do nowej strony, $R lub $r przejście na początek linii, $T lub $t znak tabulacji.

3.3.10 Ciągi bitowe

Ciągi bitowe przeznaczone są do operacji na bajtach lub słowach pamięci. Tab. 3.6 zawiera

przegląd typów ciągów bitowych.

Typ danych

Opis

Liczba bitów

BOOL Ciąg bitów - 1 bit

1

BYTE Ciąg bitów - 8 bitów

8

WORD Ciąg bitów - 16 bitów

16

DWORD Ciąg bitów - 32 bitów

32

LWORD Ciąg bitów - 64 bitów

64

Tab. 3.6. Ciągi bitowe


Dla typu BOOL wyróżnia się literały TRUE i FALSE.

5

background image

3-6

3.3.11 Uogólnione typy danych

Podobne typy danych mogą być grupowane w zbliżone typy danych, tworząc strukturę

hierarchiczną (rys. 3.2). Uogólnione typy danych rozpoczynają się od przedrostka ANY_ i mogą być
użyte do przeciążania wartości.

ANY

ANY_NUM

ANY_BIT

ANY_DATE

STRING

TIME

ANY_REAL

ANY_INT

LREAL

REAL

SINT

INT

DINT

LINT

USINT

UINT

ULINT

UDINT

BOOL

BYTE

WORD

DWORD

LWORD

DATE_AND_TIME

DATE

TIME_OF_DAY

Rys. 3.2. Struktura hierarchiczna podstawowych typów danych.

Użycie typu uogólnionego ANY_NUM może być użyte dla różnych typów danych całkowitych i

rzeczywistych.

3.3.12 Pochodne typy danych

W standardzie możliwe jest tworzenie nowych typów danych zwartych w obramowaniu

definicji TYPE i END_TYPE. Dla przykładu
TYPE
CISNIENIE:

REAL;

END_TYPE
definiuje nowy typ danych o nazwie CISNIENIE, który odpowiada typowi podstawowemu REAL.

Standard ten ma możliwość definiowania typów rekordowych (strukturowych). Typ taki ujęty

jest w obramowaniu STRUCT i END_STRUCT. Przykład:
TYPE CZUJNIK_CISNIENIA:
STRUCT
WEJSCIE:

CISNIENIE;

STAN:

BOOL;

DATA_KALIBRACJI:

DATE;

END_STRUCT
END_TYPE

W standardzie może być również zdefiniowany typ wyliczeniowy. Polega on na przypisaniu

różnym wartościom, różnych nazw. Przykład:
TYPE STAN_URZADZENIA:

(INICJALIZACJA, ROZRUCH, RUCH, ZATRZYMYWANIE, POSTOJ, AWARIA);

END TYPE

Okrojone typy danych definiują typ będący podzbiorem zbioru liczb całkowitych. Przykład:

TYPE
ZASILANIE:

INT(-6..+12);

END

6

background image

3-7

Wygodną możliwością zapisu danych tego samego rodzaju są tablice. Dla typu tablicowego
podajemy wymiar w sposób jak to obrazuje przykład.
TYPE DRGANIA:

ARRAY[1..50] OF REAL;

END_TYPE
TYPE DRGANIA_TURBINY:

ARRAY[1..3][1..4] OF DRGANIA;

END TYPE

3.3.13 Wartości początkowe podstawowych typów danych

Zakłada się, że wszystkie zmienne mają zerową wartość początkową. W przypadku

łańcuchów przyjmowany jest łańcuch pusty, natomiast data przyjmuje wartość D#0001-01-01.

Dla typów pochodnych mogą być definiowane wartości początkowe. Dla przykładu zapis

TYPE

CISNIENIE: REAL:= 1.0;

END_TYPE
powoduje zadanie podanej wartości początkowej równej 1.0 dla wszystkich zmiennych typu ciśnienie.

3.1 Zmienne

Wewnątrz elementów oprogramowania mogą być definiowane różne zmienne. Zmienne
lokalne mogą być definiowane wewnątrz konfiguracji, zasobu, programu, bloku funkcyjnego i funkcji.
Zmienne są ważne lokalnie w jednostce organizacyjnej, w której zostały zadeklarowane. Wyjątek
stanowią zmienne globalne definiowane jako VAR_GLOBAL. Zmienne globalne umożliwiają
przekazywanie danych pomiędzy blokami funkcyjnymi lub programami. Zmienne globalne mogą być
również definiowane na poziomie zasobów lub konfiguracji.

Wyróżniamy następujące typy zmiennych lokalne (VAR), wejściowe (VAR_INPUT), wyjściowe

(VAR_OUTPUT), wejściowe i wyjściowe (VAR_IN_OUT), globalne VAR_GLOBAL) oraz zmienne
zewnętrzne (VAR_EXTERNAL). Definicja zmiennych rozpoczyna się od jednego z wymienionych słów
kluczowych, a kończy się na słowie END_VAR.

Przykłady:

VAR_INPUT
STAN_DOLNY:

BOOL;

BRAK_CISNIENIA:

BOOL;

END_VAR
VAR_GLOBAL
CISNIENIE_GAZOWNI:

REAL;

END_VAR

3.4.1 Atrybuty zmiennych

Zmienne mogą posiadać dodatkowe atrybuty jak RETAIN, CONSTANT i AT.
Wartości niektórych ważnych zmiennych mogą być zapamiętane w celu zapewnienia
prawidłowego działania przy awarii zasilania. Standard rozwiązuje to poprzez podanie kwalifikatora
RETAIN do słowa kluczowego w deklaracji. Zmienne definiowane w ten sposób zachowują swoje
wartości nawet w przypadku awarii zasilania.
VAR_OUT RETAIN

profil_szybkosci

: ARRAY[1..4] OF REAL;

max_szybkosc

REAL;

END_VAR
Powyższy przykład definiuje, że wartości tablicy profil_szybkości i zmiennej prostej max_szybkosc
mają być zapamiętane nawet w przypadku braku zasilania i mają być zainicjalizowane przy restarcie
systemu.

Atrybut CONSTANT wskazuje na to, że wartości wymienionych zmiennych nie mogą być

zmieniane w trakcie wykonywania programu.

7

background image

3-8


Atrybut AT służy do ustalenia lokacji zmiennej o podanym identyfikatorze, np.:

VAR

DANE_WEJ AT %IW10: ARRAY[1..8] OF SINT;

END_VAR

Tablica DANE_WEJ mają mieć lokację w pamięci rozpoczynającą się od słowa 10 pamięci

wejściowej.

3.4.2 Zmienne reprezentowane bezpośrednio

Odwołanie bezpośrednie do określonych lokacji pamięci sterownika jest możliwe, a zmienne
takie poprzedzone są znakiem %. Po tym znaku występują dwie litery, które charakteryzują typ
zmiennej. Pierwsza litera dotyczy kierunku przesyłania danej:
• I wielkość wejściowa, do otrzymywania wartości z analogowych lub cyfrowych kanałów,
• Q wielkość wyjściowa, do wysyłania danych do kanałów wyjściowych,
• M wielkość z wewnętrznej pamięci, do przechowywania pośrednich wyników.

Druga litera określa wielkość zajętej pamięci przez daną: X - bit, B - bajt, W - słowo (16b), D -

podwójne słowo (32b), L - długie słowo (64b).
Po tych znakach występują pola numeryczne rozdzielone kropkami wskazujące na lokację na lokację
w pamięci.
Przykłady:
%I100

(* Bit pamięci wejściowej 100

*)

%IW126 (*

Słowo pamięci wejściowej 122

*)

%QL100 (*

Długie słowo pamięci wyjściowej 100 *)

Zmienne takie mogą być definiowane i używane tylko wewnątrz programu. Oprogramowanie,

które używa wielu zmiennych reprezentowanych bezpośrednio może być trudne do przeniesienia na
sterownik innego typu.

3.4.3 Ścieżki dostępu

Ścieżki dostępu są mechanizmem przekazywania danych i informacji pomiędzy różnymi

konfiguracjami IEC. Każda konfiguracja może posiadać zbiór zmiennych, które mogą być dostępne
dla innych zdalnych konfiguracji. Konfiguracje mogą się komunikować poprzez sieć Ethernet,
magistralę miejscową lub magistralę systemową. Ścieżki dostępu są dostarczane poprzez zmienne
zdefiniowane jako VAR_ACCESS. Zmienne te mogą być tylko zmiennymi wejściowymi lub
wyjściowymi programu, zmiennymi globalnymi, zmiennymi reprezentowanymi bezpośrednio. Zmienne
takie mogą mieć atrybut READ_ONLY, który oznacza, że urządzenie zewnętrzne może tylko czytać
wymienioną zmienną albo READ_WRITE, w tym przypadku urządzenie zewnętrzne może czytać i
zapisywać zmienną.
Przyk³ad:
VAR_ACCESS
POZIOM_WODY:

NISKI:

INT

READ_ONLY;

ZAWOR: PRZEPUSTOWOSC: REAL READ_WRITE;
END_VAR
Urządzenia zewnętrzne mogą mieć dostęp do ścieżek POZIOM_WODY, ZAWOR w celu czytania
wartości NISKI i odczytu lub zapisu wartości PRZEPUSTOWOSC.

3.4.4 Inicjalizacja zmiennych

Każdemu typowi danych może być nadana defaultowa wartość początkowa określona dla
danego typu danych. Podczas deklaracji zmiennej można nadać jej wartość początkową.
Przykład
VAR

liczba_przebiegow: INT:= 10;

cisnienie: REAL:= 22.6;

END_VAR

VAR

AT %I100: WORD := 2#0000_1101;

END_VAR

8

background image

3-9




3.5 Języki programowania

Standard IEC 1131 umożliwia elastyczny wybór języków programowania spośród trzech

graficznych i dwóch tekstowych, które mogą być użyte do zapisu różnych części programu. Użycie
tych języków umożliwia korzystanie z oprogramowania niezależnego od producenta.

3.5.1 Sekwencyjne schematy funkcyjne (SFC – Sequential Function Charts)

Metoda ta może być traktowana jako zastosowanie pojęć sieci Petriego. Miejsca sieci

Petriego odpowiadają krokom SFC, natomiast przejścia sieci Petriego odpowiadają przejściom
SFC. Przejścia definiują warunki przejścia z jednego kroku, do następnego.

1

4

e

3

c

6

h

7

i

5

f

8

k

d

g

j

1

a

4

3

6

7

i

5

f

8

k

d

g

j

Rys 3.3 Sekwencja kroków z: (a) alternatywnymi gałęziami, (b) równoległymi gałęziami

Struktura programu zapisywana jest przy użyciu SFC (sekwencyjnych schematów

funkcyjnych). SFC ułatwia zapis sekwencji instrukcji zapisanych w postaci kroków i przejść(rys 3.4).
Kroki reprezentują akcje, które mogą być również wykonane równolegle. Tranzycje określają warunki
jakie muszą być spełnione by przejść do następnego kroku. Język ten stosuje się wówczas, gdy
wykonanie programu zależy od czasu lub zdarzeń.

Pojedyncze linie rozgałęzione - służą do połączenia jednego bloku z wieloma przejściami

(rys. 3.3). Praktyczne umożliwia to wybór jednej z dróg dla której spełniony jest warunek przejścia.

Podwójne linie łączące - służą do połączenia jednego przejścia z kilkoma blokami (rys. 3.3),

których instrukcje wykonywane są dalej równolegle.

Krok3

Lt#10s

Akcja_1

Krok3

S

Akcja_2

%QX12.3:=%IX1.2 &

MX3.7

%IX2.4

Rys. 3.4. Przykład sekwencyjnego schematu funkcyjnego.

9

background image

3-10

Własności języka SFC:

• formułowanie instrukcji dla kroków i przejść w jednym z pozostałych czterech języków,
• możliwość wyboru sekwencji równoległych lub alternatywnych (z możliwością określenia

priorytetów),

• dopuszczalne sprzężenia zwrotne, zakładając, że są one prawidłowo użyte.

3.5.2 Schematy drabinkowe

Schematy drabinkowe LD (Ladder Diagram) są graficzną reprezentacją logicznych równań

przez układ graficznych symboli. Diagram LD zawiera się pomiędzy lewą i prawą szyną mocy, do
których jest dołączony (rys. 3.5). Elementy mogą być łączone liniami pojedynczymi lub grupowymi.
Lewa szyna mocy, jak również wszystkie linie połączone z nią, posiadają stan logiczny prawdy. Stan
ten jest przenoszony przez kontakt w przypadku, gdy jest zamknięty. Każdy kontakt jest
przyporządkowany zmiennej wejściowej lub wewnętrznej. Gdy zmienna przyjmuje stan 1, kontakt
ulega zamknięciu. Gdy linia połączona z cewką posiada "moc", to cewka jak również
przyporządkowana do niej zmienna wyjściowa zostają uaktywnione (przyjmują wartość 1).

Rys. 3.5. Przykład schematu drabinkowego


Schematy drabinkowe reprezentują formalizm elektrycznych diagramów połączeń stosując

sterowanie bazujące na przełącznikach binarnych. Wadą tych schematów jest to, że jeżeli mają
być zaprogramowane nie tylko operacje binarne, to schematy te muszą być rozszerzone o
dodatkowe elementy. Rysunek 3.6 podaje podstawowe elementy schematów drabinkowych,
natomiast rysunki 3.7 i 3.8 przedstawiają sposób użycia elementów dla połączenia szeregowego i
równoległego.

P

N

bezpośredni
kontakt

odwrócony
kontakt

kontakt dla
wzrastajacego
zbocza

kontakt dla
opadającgo
zbocza

S

R

cewka
bezpośredna

cewka
odwrócona

cewka
ustawiająca

cewka
resetująca

Rys. 3.6. Elementy schematów drabinkowych.


] [

( )

]/ [

A

B

P

Rys 3.7. Połączenie szeregowe

P

A

B

=

*

_

10

background image

3-11

] [

( )

]/ [

] [

A

B

C

P

Rys 3.8. Połączenie równoległe

P

A

B

C

=

+

+

_

Kontakt

może występować w różnych modyfikacjach: standardowy, zanegowany - (/),

uaktywniany zboczem narastającym - (P), uaktywniany zboczem opadającym - (N). Z kolei cewki
mogą mieć postać: standardową, zanegowaną - (/), ustawialną - (S), kasowalną - (R).

3.5.3 Schematy bloków funkcyjnych

Bloki funkcyjne FBD (Functional Block Diagram) są graficznym językiem, umożliwiającym

budowę całościowych procedur przez pobieranie bloków funkcyjnych z bibliotek i ich łączenie.
Elementy języka FBD opisują zależność funkcyjną pomiędzy zmiennym wejściowymi a wyjściowymi.

3.5.4 Bloki funkcyjne

Bloki funkcyjne wywodzą się ze schematów obwodów cyfrowych. W standardzie IEC wyróżnia się
funkcje i bloki funkcyjne. Zakłada się, że obiekt typu funkcja posiada tylko jedne wyjście i dla tych
samych wejść wydaje tą samą wartość wyjścia. Bloki funkcyjne posiadają kilka wyjść i dla tych
samych wartości wejść mogą posiadać różne wartości wyjść, ze względu na wewnętrzne
sprzężenia zwrotne i pamięć. Funkcje i bloki funkcyjne mogą być zdefiniowane hierarchicznie.

>=1

>=1

&

a

b

c

d

k

k= (a+b)*(c+d)

Rys 3.9. Przykład użycia prostych bloków funkcyjnych

Funkcje lub bloki funkcji mogą realizować przetwarzanie binarne, numeryczne, analogowe lub

znakowe. Rysunki 3.9 i 3.10 przedstawiają użycie prostych bloków funkcyjnych.

/

&

Tolerancja

X1

2.0

Y1

Y2

B_Error

L1_OK

XIN1

XIN2

XIN3

Q

Rys. 3.10. Przykład bloku funkcyjnego.

11

background image

3-12

3.5.5 Lista Instrukcji

Lista instrukcji IL (Instruction List) jest językiem niskiego poziomu, podobnym do języka

asemblera. Język ten jest efektywny dla małych aplikacji lub służy dla optymalizacji części
aplikacji. Większość operacji standardowego języka IL ma postać:

wynik := wynik OP operand

Instrukcje odnoszą się zawsze do aktualnego wyniku (rejestru). Operator wskazuje,

jakiego typu operacja będzie wykonywana. Wynik jest ponownie zapisywany do rejestru i
traktowany jako aktualny wynik.

Program IL jest listą instrukcji, z których każda musi zaczynać się od nowej linii, zawierać

operator z kompletnymi modyfikacjami i ewentualnie jeden lub więcej operandów oddzielonych
separatorem ",". Etykieta zawsze poprzedza znak ":" i może być umieszczona przed instrukcją lub w
wolnej linii. Nazwa nie może przekraczać 16 znaków, pierwszy znak musi być literą, następne literą,
liczbą bądź znakiem "_". Może być definiowana tylko raz w programie. Rozmieszczenie elementów w
programie ma postać:

ETYKIETA

OPERATOR

OPERAND

KOMENTARZ

Start

LD

zm1

(*wczytanie

zm1*)

AND

zm2

(*koniunkcja

z

zm2*)

ST

wynik

(*wynik

operacji zapisany do wynik*)

W języku IL nie ma możliwości operowania na zmiennych typu rzeczywistego i zmiennych

będących komunikatem. Maksymalna ilość modyfikatorów służących do grupowania wynosi 32.
Operatory języka IL są zdefiniowane. Bloki funkcyjne mogą być wywoływane przy użyciu instrukcji
CAL. Funkcja może być wywołana bezpośrednio.
LD %IX1

(* ładuj wartość bezpośrednio z wejścia *)

ST C10.CU

(* parametr wejściowy CU dla FB C10 *)

CAL C10

(* wywołanie bloku funkcyjnego

*)

...
LD kontakt1
ANDN zamkniecie_kompresora

3.5.6 Tekst strukturalny

Tekst strukturalny ST (Structured Text) ma składnię podobną do języka Pascal. W języku ST

zdefiniowane są instrukcje podstawiania, wyboru IF i CASE, iteracyjne FOR, WHILE, REPEAT,
wywołanie funkcji lub bloku funkcji oraz przerwania wykonania funkcji. Język ST stanowi główne
narzędzie do budowy złożonych procedur, dlatego nie może być przedstawiony jako język graficzny.
Domyślnie używa się go przy opisie akcji w blokach i przejściach SFC. Program ST jest listą wyrażeń
zakończonych średnikiem, będącym separatorem instrukcji.

Typy wyrażeń języka ST:
- przyporządkowanie: zmienna := wyrażenie;
- wywołanie podprogramu lub funkcji C:

zmienna := podprogram (par1,par2,...);

- wywołanie bloku funkcji C: nazwabloku (par1,par2,...); rezultat := nazwabloku.par1;
- wyrażenie wyboru:

Tekst strukturalny jest językiem wysokiego poziomu zawierający istotne elementy języków

programowania tego poziomu:

- ga³êzie wyboru (IF-THEN_ELSE i CASE OF) i pêtle iteracyjne (FOR, WHILE, REPEAT).
Elementy te mogą być również zagnieżdżone. Ponieważ elementy języka SFC mogą być
przedstawione przy użyciu ST, umożliwia to zapis całego programu w ST.

I:= 25;
WHILE j<5 DO
Z;=

F(I+J);

END_WHILE

IF B_1 THEN
%QW100:=INT_TO_BCD(Display)
ENDIF

CASE TW OF
1,5:

TEMP:=

TEMP_1;

2:

TEMP:=

40;

12

background image

3-13

4:

TEMP:=

FTMP(TEMP_2);

ELSE
TEMP:=

0;

B_ERROR:=

1;

END_CASE


3.6 Przykład programu

Przypuśćmy, że zasilanie wieżowca w wodę polega na napełnianiu trzech zbiorników
wodnych znajdujących się na różnych poziomach wieżowca.

Dla tego przykładu zadeklarowano następujące zmienne, będące zmiennymi boolowskimi:

Zmienne wejściowe:

dpn1, dpn2, dpn2 - oznaczają „poziom dolny nieosiągnięty” w danym zbiorniku. Woda w

zbiorniku

jest

poniżej poziomu dolnego.

gpp1, gpp2, gpp3 - oznaczają „poziom górny przekroczony” dla danego zbiornika.

Zmienne wyjściowe:

up1, up2, up3 - oznaczają „uruchomiona pompa” zbiornika o podanym numerze.

gpp1

gpp2

gpp3

dpp1

dpp2

dpp3

Pompa1

Pompa2

Pompa3

up1

up2

up3

wejścia

wyjścia

PLC

Wodociągi miejskie

Rys. 3.11. Schemat zasilania wodnego w wieżowcu.


13

background image

3-14

Opracowano pięć wersji programu dla systemu sterowania z rys. 3.11. Deklaracje zmiennych będzie
wspólna dla wszystkich języków i jest postaci:
VAR_INPUT
gpp1:

BOOL;

dpn1:

BOOL;

gpp2:

BOOL;

dpn2:

BOOL;

gpp3:

BOOL;

dpn3:

BOOL;

END_VAR
VAR_OUT
up1:

BOOL;

up2:

BOOL;

up3:

BOOL;

END_VAR

Pierwszy program sterownika przedstawiony na rys. 3.12 został napisany przy użyciu

sekwencyjnych schematów blokowych, natomiast instrukcje w blokach tego języka zapisano stosując
tekst strukturalny.

NOT(up1) AND dpn1
AND NOT(dpn2);

Czy włączenia pompy 1?

up1(S);

Właczenie pompy 1

3

Pusty krok

2

up1 AND (gpp1 OR dpn2);

Czy wyłączenie pompy 1?

up1(R);

Wyłączenie pompy 1

4

Puste przejscie (tranzycja)

2

2

3

4

up1(R); up2(R); up3(R);

Inicjalizacja

1

Puste przejscie (tranzycja)

1

NOT(up2) AND dpn2
AND NOT(dpn3);

Czy włączenia pompy 2?

up2(S);

Właczenie pompy 2

102

Pusty krok

101

up2 AND (gpp2 OR dpn3);

Czy wyłączenie pompy 2?

up2(R);

Wyłączenie pompy 2

103

Puste przejscie (tranzycja)

101

101

102

103

NOT(up3) AND dpn3;

Czy włączenia pompy 3?

up3(S);

Właczenie pompy 3

202

Pusty krok

201

up3 AND gpp3;

Czy wyłączenie pompy 3?

up3(R);

Wyłączenie pompy 3

203

Puste przejscie (tranzycja)

201

201

202

203

Rys. 3.12. Przykładowy program przedstawiony przy pomocy SFC.

14

background image

3-15

Na Rys. 3.13 przedstawia wariant programu dla języka schematów drabinkowych.

dpn1

S

dpn2

gpp1

R

dpn2

dpn2

S

dpn3

gpp2

R

dpn3

dpn1

S

gpp3

R

up1

up1

up2

up2

up3

up3

Rys. 3.13. Rozwiązanie przykładu dla programu przedstawionego przy użyciu schematów

drabinkowych.


Rozwiązanie problemu sterowania przy użyciu bloków funkcyjnych przedstawia rys. 3.14.

dpn1

dpn2

&

sr

gpp1

dpn2

>=1

up1

dpn2

dpn3

&

sr

gpp2

dpn3

>=1

up2

dpn3

dpn3

sr

up3

Rys. 3.14. Rozwiązanie przykładu dla programu przedstawionego przy użyciu bloków funkcyjnych.

15

background image

3-16


Rozwiązanie zadania przy użyciu tekstu strukturalnego przedstawia się następująco:
IF dpn1 AND NOT(dpn2) THEN
up1:=

TRUE;

END_IF;
IF gpp1 OR dpn2 THEN
up1:=

FALSE;

END_IF;

IF dpn2 AND NOT(dpn3) THEN
up2:=

TRUE;

END_IF;
IF gpp2 OR dpn3 THEN
up2:=

FALSE;

END_IF;

IF dpn3 THEN
up3:=

TRUE;

END_IF;
IF gpp3 THEN
up3:=

FALSE;

END_IF;

Rozwiązanie zadania przy użyciu listy instrukcji:
LD

dpn1

ANDN

dpn2

JMPCN

nxt1

ST

up1

nxt1:
LD

gpp1

OR

dpn2

JMPCN

nxt2

STN

up1

nxt2:

LD

dpn2

ANDN

dpn3

JMPCN

nxt3

ST

up2

nxt3:
LD

gpp2

OR

dpn3

JMPCN

nxt4

STN

up2

nxt4:

LD

dpn3

JMPCN

nxt5

ST

up3

nxt5:
LD

gpp3

JMPCN

nxt6

STN

up3

nxt6: RET

16

background image

3-17

3.6.1 Funkcje

Użytkownik może sam definiować funkcje lub może korzystać z funkcji standardowych. Nowo

deklarowane funkcje są zawarte pomiędzy słowami FUNCTION i END_FUNCTION. Dla przykładu
funkcja wyznaczająca wartość średnią z dwóch wielkości wejściowych będzie postaci.
FUNCTION SREDNIA : REAL
VAR_INPUT

WARTOSC1, WARTOSC2 : REAL;

END_VAR
SREDNIA:=

(WARTOSC1 + WARTOSC2)/2;

END_FUNCTION;

W standardzie przyjęto pewien zbiór funkcji podstawowych. Należą do nich funkcje wyznaczające
wartość bezwzględną, pierwiastek, logarytmy, potęgi oraz typowe funkcje trygonometryczne (tab.3.7).
Funkcje te zwracają wartość tego samego typu co argument funkcji.

Nazwa funkcji Typ danej

Opis

ABS ANY_NUM

wartość bezwzględna

SQRT ANY_REAL

pierwiastek

kwadratowy

LN ANY_REAL

logarytm

naturalny

LOG ANY_REAL

logarytm

EXP ANY_REAL

wykładnik

SIN

ANY_REAL

sinus w radianach

COS

ANY_REAL

cosinus w radianach

TAN

ANY_REAL

tangens w radianach

ASIN

ANY_REAL

arcus sinus, wynik w radianach

ACOS

ANY_REAL

arcus cosinus, wynik w radianach

ATAN

ANY_REAL

arcus tangens, wynik w radianach

Tab. 3.7. Funkcje numeryczne

Typowe operacje arytmetyczne są wyrażone w języku ST w postaci symbolicznej. Operacje te

mogą być przedstawione w innych językach w postaci wywołań funkcji o podanych nazwach (tab.3.8).
Nazwa funkcji Typ danej

Operator ST Liczba Parametrów Opis

ADD ANY_NUM

+ >=2

wynik:=

we1+we2+...

MUL ANY_NUM

* >=2

wynik:=

we1*we2*..

SUB ANY_NUM

- 2

wynik:=

we1-we2

DIV ANY_NUM

/ 2

wynik:=

we1/we2

MOD

ANY_INT

MOD

2

wynik:= we1MOD we2

EXPT ANY_REAL

** 2

wynik:= we1we2

MOVE ANY :=

1

wynik:=

we1

Tab. 3.8. Funkcje arytmetyczne

Przy programowaniu sterowników duża część programowania dotyczy przetwarzania

logicznego, które realizuje się poprzez użycie operacji na łańcuchach bitowych lub na bitach. Typy
tych operacji zawarte są w tab. 3.9 i tab. 3.10.

Nazwa
funkcji

Typ
danej

Opis

SHL ANY_BIT

przesunięcie łańcucha bitów o n pozycji w lewo, wypełnienie zerami
po prawej

SHR ANY_BIT

przesunięcie łańcucha bitów o n pozycji w prawo, wypełnienie zerami
po lewej

ROR ANY_BIT

przesunięcie rotacyjne łańcucha bitów o n pozycji w prawo

ROL ANY_BIT

przesunięcie rotacyjne łańcucha bitów o n pozycji w lewo

Tab. 3.9. Operacje na łańcuchach bitowych

17

background image

3-18

Nazwa funkcji Typ danej

Symbol

Liczba
parametrów

Opis

AND

ANY_BIT

&

>=2

wynik:= we1 & we2 &...

OR

ANY_BIT

>=1

>=2

wynik:= we1 OR we2 OR...

XOR

ANY_BIT

&

>=2

wynik:= we1 XOR we2 XOR...

NOT

BOOL

&

1

wynik:= NOT we1

Tab. 3.10. Operacje bitowe


Do operacji logicznych nalezą również funkcje porównywania, które zawarto w tab. 3.11.
Nazwa funkcji Symbol Opis
GT

>

wynik:= we1 > we2

GE

>=

wynik:= we1 >= we2

EQ

=

wynik:= we1 = we2

LE

<=

wynik:= we1 <= we2

LT

<

wynik:= we1 < we2

NE

<>

wynik:= we1 <> we2

Tab. 3.11. Funkcje porównywania


Dalszym rozszerzeniem przetwarzania logicznego są funkcje wyboru, które przedstawiono w postaci
blokowej na rys. 3.15, a ich znaczenie opisano w tab. 3.12.

SEL

G
IN0
IN1

BOOL
ANY

ANY

ANY

MAX

ANY
ANY

ANY

ANY

...

LIMIT

MN
IN
MX

ANY
ANY

ANY

ANY

MIN

ANY
ANY

ANY

ANY

...

MUX

ANY_INT

ANY

ANY

ANY

...

K

Rys. 3.15. Funkcje wyboru w zapisie blokowym


Nazwa funkcji Symbol Opis
SEL ANY

Wybór:

Jeżeli G prawdziwe to wynik:= IN1, w przeciwnym

przypadku wynik:= we0.

MAX

ANY

Maksimum: wynik równy jest maksymalnej wartości wszystkich
wejść

MIN

ANY

Minimum: wynik równy jest minimalnej wartości wszystkich
wejść

LIMIT

ANY

Ograniczenie: wynik równy wartości IN ograniczonej minimum
MN i maksimum MX

MUX

ANY

Multiplekser: wynik jest wartością wejściową wybraną przez
wskaźnik K

Tab. 3.12. Funkcje wyboru dla zapisu z rys. 3.15.



Zdefiniowano także funkcje operujące na łańcuchach znaków. Opis tych funkcji zawarto w tab. 3.13 i
na rys. 3.16.

18

background image

3-19



Nazwa funkcji Opis
LEFT Wynikiem

jest

łańcuch znakowy otrzymany z L znaków łańcucha

wejściowego.

RIGHT Wynikiem

jest

łańcuch znakowy otrzymany z L znaków łańcucha

wejściowego

MID Wynikiem

jest

łańcuch składający się z L-znaków otrzymany z łańcucha

wejściowego IN rozpoczynając od znaku P

CONCAT Wynikiem

jest

łańcuch otrzymany z złożenia łańcuchów wejściowych

INSERT Wynikiem

jest

łańcuch otrzymany z łańcucha IN1, poprzez wstawienie do

niego od pozycji P łańcucha IN2

DELETE Wynikiem

jest

łańcuch otrzymany z łańcucha wejściowego poprzez

usunięcie z niego L znaków począwszy od pozycji P.

REPLACE Wynikiem

jest

łańcuch otrzymany z łańcucha IN1 w którym dokonano

wymiany L znaków począwszy od pozycji P, z łańcuchem IN2

LEN

Wynikiem jest długość łańcucha wejściowego

FIND

Wynikiem jest pozycja w łańcuchu IN1, w którym znaleziono łańcuch IN2.
Funkcja zwraca 0, gdy nie znaleziono takiego łańcucha.

Tab. 13. Funkcje operujące na łańcuchach znaków dla zapisu z rys. 16.



LEFT

IN
L

STRING

ANY_INT

STRING

RIGHT

IN
L

STRING

ANY_INT

STRING

MID

IN
L

STRING

ANY_INT

STRING

CONCAT

STRING

STRING

P

ANY_INT

STRING

...

INSERT

IN1

P

STRING

ANY_INT

STRING

DELETE
IN
L

STRING

ANY_INT

STRING

REPLACE

IN1

L

STRING

ANY_INT

STRING

FIND

STRING

STRING

P

ANY_INT

STRING

LEN

STRING

INT

IN2

STRING

IN2

STRING

P

ANY_INT

Rys. 3.16. Bloki funkcji operujących na znakach.

19

background image

3-20

3.6.2 Kontrola wykonania funkcji

Przy wykonywaniu funkcji można wykorzystać specjalne wejście EN (zmienna boolowska),

które mówi, czy funkcja może być wykonana. Funkcje mają również specjalne wyjście ENO, które
mówi czy funkcja została prawidłowo wykonana. W przypadku błędu wykonania, wyjście ENO
przyjmuje wartość FALSE. Wielkości te są wykorzystywane do łączenia funkcji, w ten sposób aby
dana funkcja była wykonywana tylko wtedy, gdy funkcja poprzedzająca została prawidłowo
wykonana(rys.3.17).

ADD

EN

ENO

SQRT

EN

ENO

Rys. 3.17. Zasada kontroli wykonywania funkcji

Przy definicji nowego typu funkcji, zmienne EN i ENO są zdefiniowane w sposób niejawny w

postaci:
VAR_INPUT

EN : BOOL := 1;

END_VAR
VAR_OUTPUT

ENO : BOOL;

END_VAR

Zmienne te mogą być użyte w jeżykach Structured Text i Instruction List. Ilustrują to dwa

poniższe przykłady:
ENO := (przyspieszenie>0);
lub
LD przyspieszenie

(*

Załaduj przyśpieszenie

*)

GT

0 (*

Sprawdź, czy dodatnie

*)

ST

ENO

(* Ustaw ENO, jeżeli dodatnie *}

3.7 Bloki funkcyjne

Istotną własnością różniącą blok funkcyjny od funkcji jest możliwość zachowania danych.
Można w nim zdefiniować zbiór zmiennych wejściowych i wyjściowych oraz zmiennych wewnętrznych
i chwilowych. Wykonanie bloku funkcyjnego bazuje na zmiennych wejściowych i wewnętrznych i
powoduje wyznaczenie zmiennych wyjściowych i nowych wartości zmiennych wewnętrznych.
FUNCTION_BLOK Przyklad
VAR_INPUT:
X:

BOOL;

Y:

BOOL;

END_VAR

VAR_OUTPUT:
Z:

BOOL;

END_VAR;

(* instrukcje ciała bloku funkcji *)

END_FUNCTION_BLOCK
Deklaracja

powyższa przedstawia sprzęg do bloku funkcyjnego z dwoma boolowskimi

parametrami wejściowymi i jednym boolowskim parametrem wyjściowym.

3.8 Wnioski

Standard IEC1131 stanowi znaczny postęp w unifikacji oprogramowania sterowników.

Niestety większość producentów z uporem narzuca swoje rozwiązania lub dokonuje jedynie
częściowych przesunięć w kierunku standardu, nie dbając o pełną z nim zgodność. Działanie to
wynika głównie z tego, że producent chce związać klientów już „zdobytych”.

20


Wyszukiwarka

Podobne podstrony:
1131
1131
Główne wymagania normy PN EN ISO IEC 17025
PN IEC 60364 4 42 1999
PN IEC 60364 5 54 1999
PN IEC 61024 1 2001 Ochrona odgromowa obiektów budowlanych – Zasady ogólne
enc iec
PN IEC 60364 4 481 Dobór środków ochrony w zależn od wpł zewnętrznych Wybor srodkow ochrony przeciwp
Wykład 9 Obliczenia zwarciowe wg IEC Przykłady analizy zwarć
Komputerowy układ pomiarowy z zastosowaniem interfejsu pomiarowego IEC 625
iec ld compliance
PN IEC 60364 4 473 1999
PN IEC 60364 7 708 Wymag dot specjalnych instalacji lub lokalizacji Kempingi i samochody wypoczynkow
PN IEC 61024 1 1 2001 Ochrona odgromowa obiekt budowl
PN IEC 60364 5 51 2000
PN IEC 60364 5 523 2001
PN IEC 60364 6 61 2000
PN IEC 60364 4 41 2000

więcej podobnych podstron