You are on page 1of 56

MHT2

 IEC 61131-3 definira tri tekstovne in tri grafične programske jezike


za kodiranje uporabniških programov PLC:
 Tekstovni
 Instruction List (IL) – Inštrukcijska lista
 Structured Text (ST) – Strukturiran tekst
 Sequential Function Chart (SFC) – sekvenčni funkcijski diagram*

 Grafični
 Ladder Diagram (LD) – lestvični diagram
 Function Block Diagram (FBD) – funkcijski blok diagram
 Sequential Function Chart (SFC) – sekvenčni funkcijski diagram**

* tekstovna verzija
** grafična verzija
 Deklaracijski del POU je pri vseh jezikih enak
 Kodni del POU se pri tekstovni jeziki sestoji iz zaporedja inštrukcij
(instructions) pri IL oziroma zaporedja stavkov (statements) pri ST
 vrstni red inštrukcij oziroma stavkov predstavlja vrstni red
izvajanja
 kodni del POU pri grafičnih jezikih se sestoji iz grafičnih
elementov, ki predstavljajo funkcijo, in povezav (connectors), ki
predstavljajo pretok podatkov (data flow)
 temeljijo na pretoku podatkov – blok se izvede takrat ko ima na
voljo vse vhodne podatke
 IL je programski jezik podoben strojnemu (assembler) jeziku mikroprocesorjev
 je osnovni jezik PLC, v katerega se prevajajo vsi drugi tekstualni in grafični jeziki
 je vrstično orientiran. Vsaka inštrukcija, ki je izvršljiv ukaz PLC je podana natanko
v eni vrstici
 Vrstica IL ima naslednje elemente:
 Oznako (Label) je potrebno navesti če želimo iz drugih
delov programa s ukazom za skok ‘skočiti’ na to
inštrukcijo, drugače jo lahko izpustimo
 posamezni operator oziroma funkcija poda željeno
operacijo nad sledečimi parametri ter vsebino
univerzalnega akumulatorja
 med operatorjem in operandom mora bit vsaj en
presledek ali tab
 komentarji so enaki v vseh porgramskih jezikih in so
označeni z parom (* *). Dovoljen je samo en komentar za
posamezno vrstico
 standardni strojni jeziki delujejo na principu akumulatorjev v mikroprocesorju

 IL deluje na virtualnem akumulatorju, ki se imenuje CR (Current


Result), kjer se shranjuje rezultat trenutno izvedene inštrukcije
 CR nima točno doložene dolžine bito, kot je to primer pri mikroprocesorskih
akumulatorjihZa primerno dolžino in tip podatka poskrbi prevajalnik.
 CR je lahko tipa
 elementarni tip podatka
 izpeljan tip podatka (struktura, tabela, ... )
 tip funkcijski blok

 IL nima posebnih statusnih bitov, kot je pri običajnih mikroprocesorjih. Rezultati primerjav
se prav tako shranjujejo v CR

 IL zahteva da sta dve sledeči inštrukciji kompatibilni, to pomeni, da


mora rezultat, ki se shrani v CR predhodne inštrukcije enak operandu
sledeče inštrukcije
B1: LD PrviOperand (* Nalozi prvi operand *)
ADD DrugiOperand (* Nalozi drugi operand *)
ST Rezultat (* Shrani rezultat *)
GT 0
JMPC B2
JMP Dalec
B2: LD StringOP
ST StringRES
 Nekateri operatorji spremenijo tip podatku v CR
 Tabela prikazuje različne tipe vpliva ki ga ima operator na CR
Vpliv skupine Okrajšava Primeri
operatorjev na CR
Create C
Process P
Leave unchanged U
Set to undefined -

 Nekateri operatorji spremenijo tip podatku v CR


 Tabela prikazuje različne tipe vpliva ki ga ima operator na CR
 Operatorji ima lahko razširitve, ki se
imenujejo modifier

 Razširitve
 N – Negacija operanda
 ( - Povezovanje nivojev z oklepajem
 C - pogojna izvedba če je CR = TRUE
 IEC 61131-3 definira naslednje operatorje
 Operatorji nad BOOL tipi podatkov
Operator Skupina Pomen
LD LDN C LOAD / Naloži (negiran) operand v CR
AND ANDN P AND / Konjunkcija (Schefferjeva f.) operanda in CR
AND( ANDN(
OR ORN P OR / Disjunkcija (Piercova f.) operanda in CR
OR( ORN(
XOR XORN P XOR / Antivalenca (ekvivalenca) operanda in CR
XOR( XORN(
ST STN U STORE / Shrani CR v operand
S U SET / v operan vpiši vrednost TRUE če je CR = 1
R U RESET / v operan vpiši vrednost FALSE če je CR = 1
) zaključek nivoja
 Operatorji nad ANY tipi podatkov
Operator Skupina Pomen
LD C LOAD / Naloži operand v CR
ST U STORE / Shrani operand v CR
ADD ADD( P ADD / Seštej operand in CR
SUB SUB( P SUBTRACT / Odštej operand od CR
MUL MUL( P MULTIPLY / Zmnoži operand in CR
DIV DIV( P DIVIDE / Deli CR z operandom
GT GT( P GREATER THEN / ali je CR večji od operanda
GE GE( P GREATER OR EQUAL / ali je CR večji ali enak od operanda
EQ EQ( P EQUAL / ali je CR enak od operandu
NE NE( P NOT EQUAL / ali CR ni enak od operandu
LE LE( P LESS THEN OR EQUAL / ali je CR manjši ali enak od operandu
LT LT( P LESS THEN / ali je CR manjši od operanda
) U Zaključek nivoja
 Operatorji za skok in klic
Operator Skupina Pomen
JMP -ali U (Brez)-pogojni skok na instrukcijo z oznako
JMPC JMPCN -U
CAL - (Brez)-pogojni klic funkcijskega bloka
CALC CALCN U
RET -ali U (Brez)-pogojna vrnitev iz funkcije ali funkcijskega bloka
RETC RETCN -U
Ime P Klic funkcije
funkcije
 Operand JMP je oznaka (LABEL)

 Operand CAL je ime instance FB

 Funkcijo se v IL kliče tako


 da se preprosto navede njeno ime.
 parametri funkcije sledijo imenu, ločeni so z vejicami.
 prvi parameter je vedno CR, zato je prvi navedeni parameter v bistvu
drugi parameter funkcije

 Funkcija vrne natanko en parameter, shranjen je v CR in ima tip podatka


določen za funkcijo. Vrednost se določi tako da v kodi funkcije določimo
vrednost spremenljivki, ki ima isto ime kot funkcija
 Funkcijski blok FB kličemo z ukazi CAL,CALC in CALN

 Operand CAL je ime instance FB

 IEC 61131-3 določa metodo podajanja parametrov


 klicanje z podajanjem aktualnih vhodnih in izhodnih parametrov v
oklepajih
 klicanje s shranjevanjem vhodnih in izhodnih parametrov pred
klicem FB
 implicitnim klicanjem, kjer se uporabijo vhodni parametri kot
operatorji
Metoda1 Metoda2 Metoda3
LD T#500ms LD T#500ms
ST Time1.PT PT Time1
LD Rel LD Rel
ST Time1.IN IN Time1
CAL Time1 (IN:=Rel, PT:= T#500ms) CAL Time1
VAR FUNCTION mFun : INT
PrviPar: INT :=10; VAR _INPUT
DrugiPar: INT := 20; Par1, Par2,Par3: INT;
TretjiPar: INT := 30; END_VAR
Vsota: INT;
END_VAR LD Par1
ADD Par2
LD PrviPar ADD Par3
mFun DrugiPar, TretjiPar ST mFun
(* Drugi klic *) RET
mFun DrugiPar, TretjiPar
ST Vsota END_FUNCTION
 Funkcijski blok diagram
izvira iz področja
obdelave signalov, kjer
so pomembna cela
števila in števila v zapisu
s plavajočo vejico

 Kmalu se je uveljavil kot


splošno uporabljan jezik
na področju PLC
 Kodni del v grafičnih jezikih se deli na vezja
(networks), ki so pomoč pri kontroliranju
poteka izvajanja POU
 Vsako vezje ima
 Oznako vezja
 Komentar
 Kodni (grafični) del

 Oznaka vezja je alfanurmerična oznaka ali


nepredznačeno število, ki se uporablja
ukazih skokov.
 Pogramska orodja ponavadi označujejo vezja
zaporedno, kar omogoča hitrejše iskanje,
čeprav le-teh standard ne definira.
 Komentar je prav tako ločen z (* ... *) kot pri
tekstovnih jezikih. IEC 61131-3 komentarje
ne definira.
 Osnova grafične reprezentacije kode
je tok podatkov (data flow)
 Sestavljena je iz blokov, povezav,
konektorjev, grafične predstavitve
skokov ter grafične predstavitve
funkcije za klicanje FC ali FB
 Blok predstavlja obdelavo podatkov,
opetacijo nad njimi oziroma njihovo
procesiranje
 Bloki imajo vhodne in izhodne
priključke. Na vhode prispejo
podatki za obdelavo, na izhodnih
priključkih se pojavijo rezultati
obdelave
 Bloki so med seboj povezani z
povezavami (connections) ki
reprezentirajo pretok podatkov
 funkcijski bloki so predstavljeni kot
pravokotniki z vhodnimi in izhodnimi
priključki
 vhodni priključki blokov so lahko
‘logično povezani’, kar je
predstavljeno z imenom
spremenljivke ali konstante ob
priključku
 vhodni in izhodni priključki so lahko
tudi nepovezani
 negirani priključki so predstavljeni z
krogcem
 priključki ki so aktivni na bok impulza
so predstavljeni z > pred formalnim
imenom parametra za pozitivni bok
ter z < za negativni bok
 FDB uporablja horizontalne in
vertikalne črte za predstavitev
povezav
 Možno je razdeliti povezavo na več
priključkov, vendar je dovoljeno
povezovanje le več vhodov na en
izhod, medtem ko je prepovedano
povezati več izhodov med seboj
(‘wired-or’)
 Vsaka povezava mora biti priključena
na izhod
 Povezava ima tip podatka kot ga ima
izhod na katerega je povezana
 Standard definira križanje povezav
brez spoja ter z spojem
 Standard definira tudi konektor
(connector), ki prezentira ‘logično
povezovanje’, to je povezvanje, ki ga
ne predstavlja črta, ampak par ali več
enakih oznak povezav.
 Vsi elementi vezja, ki so na konektor
povezani neposredno ali z
konektorjem pripadajo istemu vezju
 Konektorji so lokalne oznake v POU,
zato ni dovoljeno uporabljati isto ime
za oznako povezave in za ime
spremenljivke v POU
 Za nadzor izvajanja kode POU so
definirani naslednji elementi
 brezpogojen skok
 pogojen skok
 brezpogojna vrnitev in POU
 pogojna vrnitev iz POU

 Grafična reprezentacija klica POU


tipa FB in FC je podobna bloku
 medtem ko ima FC lahko le en izhodni
priključek (funkcijsko vrednost), jih
ima FB lahko več
 dejanska vrednost parametra je lahko
ime spremenljivke ali konstante, ali pa
je vhodni priključek parametra
povezan s povezavo na izhod drugega
bloka
 IEC61131-3 ne zahteva uporabe
EN/ENO priključkov za klic (kot je to
pri LAD)
 POU se izvaja vezje po vezju od zgoraj
navzdol
 če je potrebno spremeniti potek izvajanja
se uporabljajo elementi za (brez)-pogojni
skok in vrnitev
 Posamezno vezje se izvajo po naslednjih
pravilih
 določitev vrednosti vseh vhodov bloka, ki se
bo v nadaljevanju izvedel
 izvedba bloka ni končana preden niso vse
vrednosti izhodov iz bloka določene
 vezje ni izvedeno dokler niso izvedeni vsi
bloki v vezju

 v FBD lahko izhod enega bloka povežemo


z vhodom bloka v istem vezju – kar
imenujemo povratna spremenljivka. Ko se
vezje izvede prvič ima spremenljivka
prednastavljeno vrednost, ob vsakem
naslednjem izvajanju va prednosti iz
predhodnega izvajanja
 Lestvični diagram (Ladder
diagram -LAD) prihaja iz
krmilij izvedenih z releji in
predstavlja tok energije skozi
vezje POU iz leve proti desni
 Pogramski jezik je zasnovan za
predvsem za digitalne signale
 Tako kot FBD je kodni
(grafični) del LAD razdeljen na
posamezna vezja (networks)
 Lestvični diagram je ‘pripet’ na tako
imenovane energijske letve na levi in desni
strani
 Iz leve letve, ki je ‘napajana’ z logično 1,
energija poseže vse elemente priključene
nanjo. Glede na logično stanje teh
elementov, ki bodisi prevajajo ali ne, energija
steče skozi njih, ali pa pretok prekinejo
 Elementi so povezani z povezavami, ki so
lahko horizontalne ali vertikalne.
 Prav tako se povezave lahko križajo bodisi z
ali brez ‘spoja’
 Vezava elementov in vrsta elementov
predstavljajo logične funkcije

 Na koncu vsake veje je ‘rele’, ki je povezan na


delsno letev oz. ‘maso’ in predstavlja
določitev logične vrednosti celotne veje
 JUMP
(skok na oznako)

 RETURN
(vrnitev iz POU)
 LAD podpira klicanje drugih POU tipa
FC ali FB

 Klic je prezentiran s pravokotnikom,


ki predstavlja klicano funkcijo, z
vhodnimi priključki, ki predstavljajo
parametre ter izhodnim priključkom
pri FC oziroma več piključki pri FB ki
predstavljajo iz izhodne parametre

 imena formalnih parametrov so


znotaj pravokotnika, imena dejanskih
parametrov pa ob priključkih oziroma
je priključek povezan s povezavo v
vezju
 vsaj en vhod FB mor biti tipa BOOL in
morata biti povezana neposredno v vejo
vezja. Standardni FB inajo izhod Q v ta
namen

 Funkcije morajo imeti poseben vhod in


izhod imenovan EN in ENO, ki se
uporabljata za nadzor izvajanja funkcije.
Če je EN pri klicu FALSE se klic ne izvede
in tudi ENO dobi vrednost FALSE. EN in
ENO morata biti povezana v vejo vezja

 ENO se lahko uporablja za indikacijo


napake

 Vrednost funkcije v uporabniški funkciji se


določi tako, da se določi vrednost navitja z
imenom funkcije
 POU se izvaja vezje po vezju od
zgoraj navzdol
 če je potrebno spremeniti potek
izvajanja se uporabljajo elementi za
(brez)-pogojni skok in vrnitev
 Posamezna veja vezja se lahko deli
na:
 levi del, ki predstavlja logični sestav iz spremenljivk,
konstant in klicev funkcij iz katerih se določi vrednost
 desnega dela, kjer se shranjuje vrednosti v določene
spremenljivke

 v FBD lahko izhod enega bloka povežemo


z vhodom bloka v istem vezju – kar
imenujemo povratna spremenljivka. Ko se
vezje izvede prvič ima spremenljivka
prednastavljeno vrednost, ob vsakem
naslednjem izvajanju pa prednosti iz
predhodnega izvajanja
 Sekvenčni funkcijski diagram
(Sequential Function Chart - SFC) je bil
zasnovan za razdelitev posameznih
kompleksnih programov na manjše
enote ter predstavitev poteka
krmiljenja med temi enotami.
 čas izvedbe teh enot je odvisen tako
od statičnih pogojev (definiranih v
SFC) kot tudi od dinamični pogojev
(vrednosti vhodov in izhodov)
 Z uporabo SFC je možno izvesti
sekvenčne in paralelne procese
 primeren za strukturiranje, saj
grafično nazorno prikaže potek
krmiljenja
 Glavna naloga programiranja v
SFC je razdeliti delovanje na
posamezne korake oziroma
faze, v katerih se izvršujejo
določene aktivnosti, ter
pogoje za prehode med
posameznimi koraki
 SFC je sestavljen iz
posameznih preprostih
grafičnih elementov, ki
predstavljajo elemente SFC-ja
 simboli oz. elementi se pri
ustvarjanju programa
kombinirajo po nekaj
preprostih pravilih
 Osnova SFC je diagram stanj
sekvenčnih vezij in Petrijeve
mreže
 prva razširjena specifikacija tega
koncepta je bil GRAFCET
(Telemechaniqe, Francija) in je
bila kasneje osnova standarda
IEC 848
 SFC temelji na IEC 60848, ki
definira jezike za načrtovanje
funkcijskih diagramov. Edini
dodatek temu standardu so bili
elementi, ki omogočajo izvedljive
ukaze PLC glede shranjevanja
podatkov - dodani so tipi
aktivnosti S in R.
 Ker izvedba SFC potrebuje
shranjevanje informacije o
trenutnem stanju (aktivnih korakih in
podobno) lahko SFC realiziramo
samo v POU tipa PRG in FB.
 POU napisan v SFC mora biti napisan
v tem jeziku v celoti.
 Posamezne enote so lahko
programirane v enem od drugih
programskih jezikov IEC61131-3 (IL,
FBD, LAD, STL) ali pa zopet v SFC
 Tako kot pri FBD in LAD je prvi nivo
strukturiranja programa vezje
(network). V SFC se elementi vezja
imenujejo koraki (steps) in prehodi
(transitions)
1. Korak (Step)

2. Prehod (Transition)

3. Blok aktivnosti in aktivnost (Action block)

4. Alternativna veja (Alternative branch)

5. Združitev alternativne veje


(Junction of alternative branch)

6. Paralelna (sočasna) veja


(Parallel (simultaneous) branch)

7. Združitev paralelne veje


(Junction of parallel branch)

8. Zanka in znak za skok


(Loop)

9. Zaključek veje
(Branch end)
 Korak

 Korak je lahko aktiven ali neaktiven

 Ko je korak aktiven, se njemu določeni ukazi


imenovani aktivnosti (actions) v bloku
aktivnosti (action block) neprestano izvajajo
dokler korak ne postane neaktiven

 Kdaj korak postane neaktiven določa


prehod (transition), ki sledi neposredno
koraku

 Prehod določa pogoj prehoda (transition


condition), ki je Boolov izraz. Ko je pogoj
izpolnjen, se korak deaktivra

 Povezava ali več povezav za prehodom


določajo kateri korak ali več korakov se
aktivira

 Začetni korak (Initial step) se aktivira ko se


POU napisan v SFC pokliče prvič
 Prehod

 Prehod predstavlja prehajanje od enega


koraka k drugemu

 Grafično ga predstavlja prečna črta prek


vertikalne povezave

 Vsak prehod določa pogoj prehoda


(transition condition), ki je boolova vrednost
izraz.
 Pogoj prehoda je lahko podan enem od
jezikov IEC61131-3: LAD, FBD, IL ali ST
 Izraz je lahko podan neposredno ob
prehodu, ali pa je logično povezan z
pogojem prek oznake prehoda

 Ko je pogoj izpolnjen (vrednost izraza je ‘1’


oz. TRUE), se predhodni korak deaktivra,
naslednji korak pa se aktivira
 Sekvenca

 Preprosta kombinacija koraka in


prehoda se imenuje sekvenca
(sequence)

 korak in prehod si morata vedno


izmenično slediti. Ni dovoljeno
povezati med seboj dveh korakov
ali dveh prehodov.

 Prehod ima lahko več predhodnih


ali sledečih korakov

 Po deaktivaciji koraka je možno


aktivirati enega od sledečih
korakov (alternativna veja) ali več
korakov naenkrat (paralelna veja)
 Alternativna veja

 Ko je izpolnjen eden od
pogojev prehodov T1 do T3,
se korak S1 deaktivira in se
aktivira korak, ki sledi
prehodu z izpolnjenim
pogojem

 Tri variante

▪ Brez prioritete (pogoji morajo


biti ekskluzivni)
▪ Prioriteta od leve proti desni
▪ Prioriteta določena z
oštevilčenjem
 Vzporedna oziroma
sočasna sekvenca

 Sočasno aktiviranje vseh


povezanih korakov

 Ko je pogoj prehoda T1
izpolnjen se deaktivira S1,
atkivirajo pa se vsi sledeči
koraki povezani na T1

 Ko je izpolnjen pogoj
prehoda in so vsi koraki
povezani na prehod T2
aktivni (S2,S3 in S5) se
korakideaktiviranjo
 Blok aktivnosti (action block)

 Ko je korak aktiven se neprenehoma izvajajo


aktivnosti ki so navedene v bloku aktivnosti
 Blok aktivnosti se nahaja na desni strani ob
simbolu koraka

 Aktivnost (action)

 Aktivnost je lahko
▪ Boolova aktivnost (Boolean action)je aktivnost,
ki določi vrednosti boolovi spremenljivki
▪ Ukazna aktivnost (Instruction action) izvede
zaporedje več inštrukcij, ki so zapisani v IL, FBD,
LAD, ST ali zopet kot SFC

 Vsaki aktivnosti pripadajo v bloku aktivnosti


pogoji izvajanja, ki jih označujejo kvalifikatorji
(action qualifier)

 Boolov indikator (Boolean indicator) je dodatna


spremenljivka, ki označuje status aktivnosti.
Uporablja se predvsem v tekstovnih različicah,
kjer aktivnost ni zapisana neposredno za klicem
aktivnosti. Večina sistemov ne podpira
boolovega indikatorja
 Izvajanje aktivnosti

1. Vsak korak je izveden vsaj


enkrat po tem ko je bil
aktiviran

2. Po deaktivaciji koraka, so
korak in vse njegove
aktivnosti klicane še enkrat,
da se zagotovi pravilna
zaustavitev aktivnosti
(ustavitev časovnikov,
resetiranje vrednosti,…)
 Zanka sekvenc

 Prehod lahko vodi tudi na enega


od predhodnih korakov. V tem
primeru govorimo o zanki
sekvenc

 IEC61131-3 dovoljuje logično


povezovanje, ki ga prikažemo z
paroma puščic ob katerih je
oznaka koraka h kateremu
povezava vodi oziroma prehoda
od katerega povezava prihaja

 Konec veje

 Vejo lahko zaključimo tudi z


elementom za konec veje
(Branch End)
 IEC 61131-3 definira dve vrsti
napak, ki se jim moramo izogniti
pri povezovanju vezji v SFC:

 Nevarno povezovanje
 Nedostopno vezje

 IEC 61131-3 opisuje algoritem za


odpravo napak povezav (IEC TR3-
94), vendar ta algoritem ni
popolnoma zanesljiv, še vedno
lahko ustvarimo popolnoma
dostopne ali varne povezave, ki
jih ta algoritem onemogoča
 Pravilo: V vzporednih vejah ne
uporabljamo skokov
 Nevarno vezje
 Nevarno vezje (unsafe network)
omogoča nekontrolirano in
nekoordinirano aktiviranje
korakov (izven paralelnih sekvenc)

 Primer:
▪ Po prehodu T1 se aktivirata koraka S2
in S3, po prehodu T3 pa S5. Če se
izpolni tudi pogoj za prehod T4 se
zoprt aktivira S1, po prehodu T1 pa bi
se zoper S2 in S3, čeprav je S2 še
aktiven. To ni dovoljeno saj
nekontrolirano podvaja število
aktivnih korakov. Aktiviranje več
korakov je dovoljeno le v vzporedni
veji.
 Nedostopno vezje
 Nedostopno vezje je del SFC, kjer
sekvence ne morejo postati
aktivne

 Primer:
▪ Ko se v vezju po aktivaciji korakov
S2 in S3 prek T1 aktivira S5 prek T3,
se izvajanje ustavi, saj prehod v S6
prek T4 ni možen, ker ni aktiven
korak S4, prav tako pa ni možen
prehod v S1 prek T5, saj je za ta
prehod potrebno da je aktiven
korak S6.
 ST verzija
TRANSITION FROM Oznaka_koraka* TO Oznaka_koraka* :=
(* ST izraz *)
END_TRANSITION

STEP Oznaka_koraka:
(* stavki, ki kličejo aktivnosti *)
END_STEP

ACTION
(* stavki ki izvedejo aktivnost *)
END_ACTION

*lahko določimo več oznak korakov. V tem primeru jih navedemo v oklepaju, ločene z vejico med seboj
 ST verzija
TRANSITION FROM Korak1 TO Korak5 :=
:= Tipka_Start & Zalogovnik_Poln
END_TRANSITION

STEP Oznaka_koraka:
Vklopi_Motor (N);
Vkopi_Luč (L, T#100ms);
END_STEP

ACTION Vklopi_Motor
Motor_ON := Motor_Pripravljen & Varovalke_OK
END_ACTION

ACTION Vklopi_Luc
Rdeca_Luc := TRUE;
END_ACTION

*lahko določimo več oznak korakov. V tem primeru jih navedemo v oklepaju, ločene z vejico med seboj
 IL verzija

TRANSITION FROM Oznaka_koraka TO Oznaka_koraka :=


(* lista inštrukcij, zadnja inštrukcija (CR) določi vrednost *)
END_TRANSITION

STEP Oznaka_koraka
 *lahko določimo več oznak korakov. V tem primeru jih navedemo v oklepaju, ločene z vejico med seboj

You might also like