Athletics is not very popular in Serbia but Serbian runners have found success in the Olympics. The document profiles four Serbian runners competing in the 2012 Olympics - Olivera Jevtić in long distance, Dragutin Topić in high jump, Ivana Španović in long jump, and Dragana Tomašević in discus throw. Each athlete is introduced along with some of their career accomplishments leading up to qualifying for the 2012 London Games.
Staňte se partnery významné univerzitní knihovny, která slouží nejen 13000 studentům a zaměstnancům univerzity, ale také veřejnosti ve Zlínském kraji.
Adopcí signatury (oboru) věnujete prostředky na nákup zdrojů ve Vámi vybraném odvětví.
Oslovte skrze adopci tisíce studentů, investujte do jejich vzdělání.
The document provides a list of bars, restaurants, clubs and other places in Prague that the author Till Gartner has visited or wants to visit. It includes the names, addresses, phone numbers and brief descriptions of over 50 locations. For many of the places, Till provides his own comments and reviews based on his experiences there. The listings cover a wide range of cuisine, atmospheres and price points to suit different tastes in the city.
2011. gada 27. maijā Rīgas Tehniskās universitātes telpās notika seminārs "Balkonu un jumtu renovācija daudzdzīvokļu mājās. Vācijas un Latvijas pieredze".
Pasākuma laikā par balkonu renovācija daudzdzīvokļu dzīvojamās mājās stāstīja prof. Franks Fogts (Berlīnes Tehniskā universitāte). (video - http://vimeo.com/26866418 vai youtube.com/siltinam).
Este documento fornece uma introdução às características gerais do HTML e como criar documentos HTML. Ele explica como HTML usa marcações para formatar texto e como vincular partes de um documento ou diferentes documentos através de hiperlinks. O documento também descreve como criar listas, cabeçalhos e parágrafos em HTML.
Athletics is not very popular in Serbia but Serbian runners have found success in the Olympics. The document profiles four Serbian runners competing in the 2012 Olympics - Olivera Jevtić in long distance, Dragutin Topić in high jump, Ivana Španović in long jump, and Dragana Tomašević in discus throw. Each athlete is introduced along with some of their career accomplishments leading up to qualifying for the 2012 London Games.
Staňte se partnery významné univerzitní knihovny, která slouží nejen 13000 studentům a zaměstnancům univerzity, ale také veřejnosti ve Zlínském kraji.
Adopcí signatury (oboru) věnujete prostředky na nákup zdrojů ve Vámi vybraném odvětví.
Oslovte skrze adopci tisíce studentů, investujte do jejich vzdělání.
The document provides a list of bars, restaurants, clubs and other places in Prague that the author Till Gartner has visited or wants to visit. It includes the names, addresses, phone numbers and brief descriptions of over 50 locations. For many of the places, Till provides his own comments and reviews based on his experiences there. The listings cover a wide range of cuisine, atmospheres and price points to suit different tastes in the city.
2011. gada 27. maijā Rīgas Tehniskās universitātes telpās notika seminārs "Balkonu un jumtu renovācija daudzdzīvokļu mājās. Vācijas un Latvijas pieredze".
Pasākuma laikā par balkonu renovācija daudzdzīvokļu dzīvojamās mājās stāstīja prof. Franks Fogts (Berlīnes Tehniskā universitāte). (video - http://vimeo.com/26866418 vai youtube.com/siltinam).
Este documento fornece uma introdução às características gerais do HTML e como criar documentos HTML. Ele explica como HTML usa marcações para formatar texto e como vincular partes de um documento ou diferentes documentos através de hiperlinks. O documento também descreve como criar listas, cabeçalhos e parágrafos em HTML.
Hydrologické analýzy v distribuovaném prostředíGeokomunita
Jakub Šilhavý: Hydrologické analýzy v distribuovaném prostředí (diplomová práca)
vedúci: Ing. Karel Jedlička
študijný odbor: Geomatika - GIS
škola: Západočeská univerzita v Plzni, Fakulta aplikovaných věd, Katedra matematiky, Oddelení geomatiky
rok: 2010
Testování systému pro on-line rezervaci vstupenek do O2 ArenyOndřej Machulda
Testování uživatelského rozhraní webového systému pro on-line rezervaci vstupenek do O2 Areny v Praze -
semestrální práce předmětu Y39TUR (A7B39TUR) na ČVUT FEL.
Testování jednotlivých případů užití heuristickou evaluací a kognitivním průchodem, popis nalezených problémů včetně doporučení jak je odstranit.
Czech Oracle Solaris Administrators Day 2011 - DTrace Martin Cerveny
Presentation from training day for Oracle Solaris customers to explain features of Solaris DTrace.
Presentation covers following themes:
- architecture and syntax
- tools DTraceToolkit, chime, DTraceTazTool, DLight
- system DTrace (system providers like syscall, sched, vminfo ...)
- application DTrace (providers pid* and plockstat*, User-Level Statically Defined Tracing (USDT)), Dtrace for MySQL, Apache webserver, PHP module, Java and Firefox Javascript
Demolabs: http://www.edumaster.cz/java-developers-solaris-administrators-day/pdf/jsd2011_dtrace_labs.tar.gz
node.js: zápisky z fronty (Battle guide to node.js)almadcz
[czech] V Apiary používáme node.js v produkci už přes rok.
Proč se zamyslet nad tím, zda ho chcete? A na co se připravit a na co si dát pozor, pokud se do toho pustíte?
1. CESKE VYSOKE UCEN´ TECHNICKE V PRAZE
ˇ ´ ´ ˇ I ´
Fakulta elektrotechnick´
a
Softwarov´ PLC
e
Diplomov´ pr´ce
a a
Vladim´r Kloz
ı
Vedouc´ pr´ce: Ing. Frantiˇek Vacek
ı a s
Praha, 2003
2. Prohl´ˇen´
as ı
Prohlaˇuji, ˇe jsem diplomovou pr´ci vˇetnˇ doprovodn´ho programov´ho vybaven´
s z a c e e e ı
vypracoval samostatnˇ s pouˇit´ uveden´ literatury a konzultac´ s vedouc´ diplo-
e z ım e ı ım
mov´ pr´ce Ing. Frantiˇkem Vackem.
e a s
Nem´m z´vaˇn´ d˚vod proti uˇit´ tohoto ˇkoln´ d´ ve smyslu § 60 Z´kona
a a z y u z ı s ıho ıla a
ˇ.121/2000 Sb. , o pr´vu autorsk´m, o pr´vech souvisej´ ıch s pr´vem autorsk´m a o
c a e a ıc´ a y
zmˇnˇ nˇkter´ch z´kon˚ (autorsk´ z´kon).
e e e y a u y a
V Praze dne: 13.ledna 2004 Vladim´ Kloz
ır
3. Podˇkov´n´
e a ı
Dˇkuji panu Ing. Frantiˇku Vackovi za cenn´ rady a pˇipom´
e s e r ınky, kter´ mi poskytl
e
bˇhem konzultac´ pˇi zpracov´n´ diplomov´ pr´ce.
e ı r a ı e a
Vladim´ Kloz
ır
2
4. Abstrakt
C´ılem t´to diplomov´ pr´ce je vytvoˇit softwarov´ PLC s vlastnostmi definovan´mi v
e e a r e y
normˇ IEC-1131-3, kter´ bude fungovat pod operaˇn´ syst´mem Real-Time Linux.
e e c ım e
Cel´ syst´m je vytvoˇen jako preprocesor ze zvolen´ho programovac´ jazyka pro PLC
y e r e ıho
(zvolen byl jazyk Instruction List) do jazyka C++.
V´sledkem pˇekladu programu pro PLC je modul zavediteln´ do oblasti kernelu
y r y
operaˇn´ syst´mu Real-Time Linux, kter´ prezentuje program pro PLC.
c ıho e y
Souˇast´ pr´ce je tak´ vytvoˇen´ z´kladn´ podpory pro pˇ´
c´ ı a e r ı a ı rıstup z PLC programu na
zaˇ´ ı digit´ln´ vstup˚/v´stup˚ (implementov´ny jsou napˇ. ovladaˇe pro paraleln´
rızen´ a ıch u y u a r c ı
port, ovladaˇ PCI karty Labcard PCI-1750 atd.).
c
Abstract
The intention of this thesis to realize software PLC with features defined in the norm
IEC-1131-3, which will run under Real-Time Linux operating system. The system is de-
signed as preprocesor from selected programming language for PLC (selected language
was Instruction List) into C++ language.
The result of PLC program compilation is Real-Time Linux kernel module, that is
representing software PLC.
The part of this thesis is also creation of basic support for access to digital in-
puts/outputs from PLC program (implemented are drivers for parallel port, PCI card
PLX-1750 etc.).
3
7. ˇ ızen´ motorku pomoc´ softwarov´ho PLC
C R´ ı ı e 77
ˇ ıd´ ı
C.1 R´ ıc´ program motorku . . . . . . . . . . . . . . . . . . . . . . . . . . 77
C.2 Vizualizaˇn´ program . . . . . . . . . . . . . . . . . . . . . . . . . . . .
c ı 78
D Obsah pˇiloˇen´ho CD
r z e 80
Literatura 81
iii
8. ´
Uvod
C´ılem t´to pr´ce je vytvoˇit takzvan´ Softwarov´ PLC. Pod pojmem Softwarov´ PLC
e a r e e e
si v naˇem pˇ´ e pˇedstavujeme softwarov´ emul´tor programov´ k´du urˇen´ho
s rıpadˇ r y a e o c e
pro PLC. Tento emul´tor by mˇl b´t vytvoˇen pod operaˇn´ syst´mem RT-Linux
a e y r c ım e
na procesorov´ platformˇ Intel, mˇl by podporovat vybran´ programovac´ jazyk pro
e e e y ı
PLC a komunikovat s PCI kartou digit´ln´ vstup˚/v´stup˚. PLC by mˇlo splˇovat
a ıch u y u e n
vlastnosti definovan´ normou IEC-1131[5].
e
PLC je zkratka pro programovateln´ logick´ automat. Jedn´ se o zaˇ´ ı urˇen´
y y a rızen´ c e
zejm´na pro ˇ´ ıc´ a regulaˇn´ techniku. V podstatˇ je to mikroprocesorem osazen´
e rıd´ ı c ı e y
syst´m obvykle umoˇnuj´ ı rozˇ´ren´ o dalˇ´ moduly (napˇ. moduly digit´ln´ vstup˚/v´-
e zˇ ıc´ sıˇ ı sı r a ıch u y
stu-p˚, A/D a D/A pˇevodn´
u r ıky, moduly pro pr˚myslov´ sbˇrnice atd.). Ve vˇtˇinˇ
u e e es e
pˇ´ u lze tyto syst´my programovat pomoc´ tˇech z´kladn´ programovac´ jazyk˚:
rıpad˚ e ı r a ıch ıch u
IL (instruction list - obdoba assembleru, ST (structured text - obdoba jazyka Pascal)
a tzv. ˇebˇ´ckov´ch diagram˚. Instrukˇn´ soubor je velmi jednoduch´ se zamˇˇen´ na
z rıˇ y u c ı y er ım
ˇ´ ı a regulaci. Programovac´ jazyky pro PLC jsou detailnˇ pops´ny v [5].
rızen´ ı e a
Operaˇn´ syst´m Linux je volnˇ ˇiˇiteln´ syst´m Unix dostupn´ vˇetnˇ zdrojov´ch
c ı e esr y e y c e y
k´d˚. Vlastn´ Linux je pouze j´dro operaˇn´ syst´mu. Operaˇn´ syst´m je ˇ´ren v
o u ı a c ıho e c ı e sıˇ
distribuc´ 1 , kter´ kromˇ j´dra operaˇn´ syst´mu obsahuj´ tak´ dalˇ´ utility a pro-
ıch e e a c ıho e ı e sı
gramy. Na z´kladˇ klasick´ho j´dra (kernelu) byl n´slednˇ vytvoˇen tzv. RT-Linux.
a e e a a e r
Jedn´ se o rozˇ´ren´ kernelu o vlastnosti hard real-time operaˇn´ syst´mu, pˇiˇemˇ
a sıˇ ı c ıho e rc z
jsou zachov´ny pˇedchoz´ v´hody norm´ln´ j´dra a pˇ´
a r ı y a ıho a rıpadn´ zvolen´ distribuce ve
e e
smyslu existence a pouˇitelnosti ovladaˇ˚ zaˇ´ ı a utilit. Vlastn´ real-time ukoly pot´
z cu rızen´ ı ´ e
bˇˇ´ s vyˇˇ´ prioritou neˇ linuxov´ j´dro jako real-time vl´kna v pamˇt ov´m prostoru
ezı ssı z e a a e’ e
j´dra.
a
V ˇasti 1 je uveden rozbor ˇeˇen´ a volba n´sledn´ implementace. Kapitola 2 se
c´ r s ı a e
v kr´tkosti zab´v´ histori´ a vlastnostmi operaˇn´ syst´mu RT-Linux a moˇnostmi
a y a ı c ıho e z
jazyka C++ pˇi vyuˇit´ v RT-Linuxu. Kapitola 3 se zab´v´ zp˚sobem zpracov´n´ zdro-
r z ı y a u a ı
jov´ho programu pro PLC pomoc´ koneˇn´ho stavov´ho automatu. Kapitoly 4, 5, 6 a 7
e ı c e e
se vˇnuj´ zpracov´n´ jednotliv´ch ˇ´st´ zdrojov´ho k´du. Kapitola 2.1 popisuje zp˚sob
e ı a ı y ca ı e o u
implementace a podpory v operaˇn´ syst´mu RT-Linux, vˇetnˇ vytv´ˇen´ ovladaˇ˚
c ım e c e ar ı cu
zaˇ´ ı pro vyuˇit´ v softwarov´m PLC. Kapitola 9 popisuje vlastn´ utilitu plc2cpp a
rızen´ z ı e ı
jej´ vyuˇit´ pˇi tvorbˇ softwarov´ho PLC. Pˇ´
ı z ı r e e rıloha B uv´d´ celkov´ pˇehled vlastnost´
a ı y r ı
vytvoˇen´ho softwarov´ho PLC v porovn´n´ s normou IEC-1131-3. V pˇ´
r e e a ı rıloze A je uve-
1
Napˇ. RedHat Linux, Debian, Slackware atp.
r
1
9. OBSAH OBSAH
den kr´tk´ n´vod na zprovoznˇn´ RT-Linuxu. Pˇ´
a y a e ı rıloha C se kr´tce zab´v´ vytvoˇen´m
a y a r y
uk´zkov´m PLC programem pro ˇ´ ı ot´ˇek stejnosmˇrn´ho motorku.
a y rızen´ ac e e
2
10. Kapitola 1
N´vrh ˇeˇen´
a r s ı
Norma IEC-1131-3 zab´vaj´ ı se problematikou programovac´ jazyk˚ pro PLC defin-
y ıc´ ıch u
uje z´kladn´ programovac´ jazyky uveden´ v tab.1.1. Jazyky IL, ST a LD maj´ tu
a ı ı e ı
v´hodu, ˇe jsou mezi sebou navz´jem pˇevoditeln´, pro vlastn´ kompilaci programu
y z a r e ı
staˇ´ implementace libovoln´ho z nich a n´sledn´ vytvoˇen´ konverzn´ utility z ostatn´
cı e a e r ı ı ıch
programovac´ jazyk˚.
ıch u
N´zev jazyka
a Popis
IL Instruction List - jednoduch´ programovac´
y ı
jazyk, obdoba assembleru.
ST Structured Text - pokroˇilejˇ´ programovac´
c sı ı
jazyk, obdoba jazyka Pascal ˇi C.
c
LD Ladder diagram - grafick´ n´stroj pro pro-
y a
gramov´n´ PLC, automat se v tomto pˇ´ e
a ı rıpadˇ
programuje pomoc´ rel´ov´ho schematu.
ı e e
Tabulka 1.1: Pˇehled programovac´ jazyk˚ pro PLC dle IEC-1131-3.
r ıch u
Pro z´pis programov´ho k´du PLC byl zvolen jazyk IL s podporou standardn´
a e o ıch
datov´ch typ˚, ˇ´
y u cıseln´ch typ˚ (pro cel´ i desetinn´ ˇ´
y u a a cısla) a datov´ho typu pro uloˇen´
e z ı
1
ˇasu . Z blok˚ pro z´pis vlastn´ PLC programu byly vybr´ny bloky uveden´ v tab.1.2.
c u a ıho a e
D´le se budeme zab´vat anal´zou moˇn´ch ˇeˇen´ a n´slednou volbou vlastn´ im-
a y y z y r s ı a ı
plementace.
Celkovˇ lze probl´m ˇeˇit bud’ jako interpret zdrojov´ho k´du pro PLC nebo jako
e e r s e o
pˇekladaˇ PLC k´du do jin´ho programovac´ jazyka, ze kter´ho bude n´slednˇ zkom-
r c o e ıho e a e
pilov´na bin´rn´ podoba programu, kter´ odpov´ a programu PLC.
a a ı y ıd´
1. Interpret PLC k´du - v´hodou tohoto ˇeˇen´ je jednoduˇˇ´ pouˇit´ z hlediska
o y r s ı ssı z ı
uˇivatele. Odpad´ totiˇ nutnost po kaˇd´ zmˇnˇ programu prov´dˇt jeho rekom-
z a z z e e e a e
pilaci.
1
Tento datov´ typ je tˇeba zejm´na kv˚li definici spouˇtˇn´ PLC program˚ v konfiguraˇn´ bloku.
y r e u se ı u c ım
3
11. NAVRH RESEN´
´ ˇ ˇ I
N´zev bloku
a Popis
FUNCTION Blok typu funkce. Jedn´ se o blok umoˇnuj´ ı
a zˇ ıc´
volat k´d PLC programu s alespoˇ jedn´
o n ım
vstupn´ parametrem a n´vratovou hodno-
ım a
tou, kter´ se po n´vratu z vol´n´ uloˇ´ jako
a a a ı zı
aktu´ln´ pracovn´ hodnota na z´sobn´
a ı ı a ıku. Pˇi r
kaˇd´m vol´n´ jsou opˇtovnˇ inicializov´ny
z e a ı e e a
vˇechny promˇnn´.
s e e
FUNCTION BLOCK Funkˇn´ blok. Jedn´ se o blok, kter´ m˚ˇe
c ı a y uz
m´ libovoln´ poˇet vstupn´ v´stupn´ a
ıt y c ıch, y ıch
vstupnˇ-v´stupn´ parametr˚. Pˇi pouˇit´
e y ıch u r z ı
funkˇn´ bloku se nejprve deklaruje jeho in-
c ıho
stance jako lok´ln´ promˇnn´. Vnitˇn´ stav
a ı e a r ı
instance funkˇn´ bloku z˚st´v´ zachov´n
c ıho u a a a
po dobu existence promˇnn´, kterou je tato
e e
instance reprezentov´na. a
PROGRAM Programov´ blok. Jedn´ se o obdobu bloku
y a
typu FUNCTION BLOCK s t´ rozd´ ım ılem,
ˇe existuje pouze jedna instance tohoto
z
bloku, kter´ je platn´ po celou dobu
a a
bˇhu programu. V programu nen´ tˇeba
e ı r
deklarovat promˇnnou, kterou je reprezen-
e
tov´na pouˇ´ a instance.
a zıvan´
CONFIGURATION Konfiguraˇn´ blok. Hlavn´ blok definuj´ ı
c ı ı ıc´
glob´ln´ promˇnn´ a obsahuj´ ı definici
a ı e e ıc´
spouˇtˇn´ jednotliv´ch blok˚ typu program.
se ı y u
Tento blok nelze vyuˇ´ pro z´pis pro-
zıt a
gramov´ho k´du v ˇ´dn´m z programovac´
e o za e ıch
jazyk˚. u
Tabulka 1.2: Programov´ bloky zvolen´ pro implementaci.
e e
Hlavn´ nev´hodou ˇeˇen´ je velk´ n´roˇnost na interpret z hlediska jeho stability
ı y r s ı a a c
a odolnosti v˚ˇi chyb´m v PLC programu. Interpret by totiˇ v tomto pˇ´ e
uc a z rıpadˇ
musel fungovat v r´mci kernel-space RT-Linuxu.
a
2. Pˇekladaˇ PLC k´du - v´hododou tohoto ˇeˇen´ je zejm´na moˇnost vytvoˇit
r c o y r s ı e z r
pouze preprocesor do jin´ho jazyka a pro vlastn´ generov´n´ bin´rn´ podoby PLC
e ı a ı a ı
programu vyuˇ´ tento programovac´ jazyk.
zıt ı
Nev´hodou tohoto ˇeˇen´ je nutnost po kaˇd´ zmˇnˇ PLC programu tento pro-
y r s ı z e e e
gram znovu kompilovat.
Pro implementaci softwarov´ho PLC zvol´
e ıme variantu ˇ.2. D˚vodem je moˇnost
c u z
4
12. NAVRH RESEN´
´ ˇ ˇ I
vyuˇ´ jiˇ existuj´ ı kompil´tor jazyka C nebo C++, kter´ je standardnˇ vyuˇ´ an pro
zıt z ıc´ a y e zıv´
programov´n´ ˇ´st´ Linuxov´ho a RT-Linuxov´ho j´dra.
a ı ca ı e e a
Po anal´ze [5] je zˇejm´, ˇe zp˚sob z´pisu programu pro PLC lze nejl´pe reprezen-
y r e z u a e
tovat k´dem v jazyce C++ (podobnost funkˇn´ blok˚ s objekty, moˇnost definovat
o c ıch u z
velk´ mnoˇstv´ funkc´ pomoc´ pˇet´zen´ch oper´tor˚ v podp˚rn´ knihovnˇ atp.).
e z ı ı ı r ıˇ y a u u e e
Zvolen´ ˇeˇen´ odpov´ a funkˇn´
e r s ı ıd´ c ımu diagramu na obr.1.1. C´
ılem diplomov´ pr´ce
e a
tedy bude vytvoˇit konvertor programu pro PLC do jazyka C++. Vygenerovan´ k´d
r y o
bude n´slednˇ pˇeloˇen do modulu j´dra bˇˇ´ ıho v RT-Linuxu. Pro zjednoduˇen´ kon-
a e r z a ezıc´ s ı
verze bude jeˇtˇ tˇeba vytvoˇit podp˚rnou knihovnu pouˇitelnou v oblasti j´dra, kter´
se r r u z a a
bude vyuˇita pˇi pˇekladu C++ k´du.
z r r o
Obr´zek 1.1: Funkˇn´ diagram softwarov´ho PLC
a c ı e
Z obr´zku je patrn´, ˇe softwarov´ PLC bude rozdˇleno na dvˇ hlavn´ ˇ´sti, pˇiˇemˇ
a e z e e e ı ca rc z
pˇeklad programu bude spouˇtˇn v user-space RT-Linuxu a vlastn´ softwarov´ PLC
r se ı e
pobˇˇ´ jako real-time vl´kna RT-Linuxu v r´mci kernel-space. Kr´tk´ rozbor jed-
ezı a a a y
notliv´ch vlastnost´ je uveden v ˇ´stech 1.1 a 1.2.
y ı ca
Bliˇˇ´ informace o RT-Linuxu a nˇkter´ch pouˇit´ch term´
zsı e y z y ınech z pˇedchoz´ ˇ´sti lze
r ı ca
nal´zt v kapitole 2.1, pˇ´
e rıpadnˇ v manu´lov´ch str´nk´ch RT-Linuxu.
e a y a a
5
13. NAVRH RESEN´
´ ˇ ˇ I Funkˇn´ ˇ´st pro user-space
c ı ca
1.1 Funkˇn´ ˇ´st pro user-space
c ı ca
User-space, nebo-li kontext ve kter´m bˇˇ´ uˇivatelsk´ programy bude vyuˇit pro bˇh
e ezı z e z e
preprocesoru (konvertoru) zdrojov´ho k´du. Tento konvertor by mˇl splˇovat n´sleduj´ ı
e o e n a ıc´
poˇadavky:
z
• Umoˇnit pˇedzpracov´n´ k´du ve zvolen´m jazyce pro PLC do jazyka C++ v
z r a ı o e
takov´m tvaru, aby bylo moˇn´ tento k´d zkompilovat do modulu bˇˇ´ ıho v
e z e o ezıc´
RT-Linuxu.
• Moˇnost tvorby a n´sledn´ho vyuˇit´ knihoven funkc´ a funkˇn´ blok˚ pro
z a e z ı ı c ıch u
opakovan´ vyuˇit´
e z ı.
1.2 Funkˇn´ ˇ´st pro kernel-space
c ı ca
Kernel-space, neboli kontext j´dra operaˇn´ syst´mu RT-Linux bude vyuˇit pro
a c ıho e z
vlastn´ bˇh vytvoˇen´ho softwarov´ho PLC. Vygenerovan´ k´d v C++ bude zkom-
ı e r e e y o
pilov´n jako modul j´dra RT-Linuxu. Pro kompilaci bude tˇeba vytvoˇit podp˚rnou
a a r r u
knihovnu, kter´ bude m´ n´sleduj´ ı vlastnosti:
a ıt a ıc´
ˇ s ı
• Reˇen´ emulace aktu´ln´ hodnoty z´sobn´ (tzv. current result), kde je uloˇena
a ı a ıku z
hodnota posledn´ proveden´ operace.
ı e
• Emulace adresov´n´ pˇ´
a ı rıstupu do pamˇti ve stylu PLC vˇetnˇ pˇ´
e c e rıstupu na extern´
ı
zaˇ´ ı dle adresy.
rızen´
• Moˇnost deklarace promˇnn´ch ve stylu PLC, tj. vˇetnˇ pˇ´
z e y c e rıpadn´ specifikace
e
absolutn´ adresy, na kter´ se promˇnn´ nach´z´
ı e e a a ı.
• Moˇnost deklarovat parametry funkc´ funkˇn´ blok˚ a programov´ch blok˚
z ı, c ıch u y u
tak, aby bylo moˇn´ je pˇiˇazovat dle syntaxe PLC.
z e rr
• Moˇnost modul´rnˇ vytv´ˇet ovladaˇe zaˇ´ ı a tyto ovladaˇe n´slednˇ reg-
z a e ar c rızen´ c a e
istrovat na konkr´tn´ adresy vstup˚/v´stup˚ softwarov´ho PLC.
e ı u y u e
6
14. Kapitola 2
RT-Linux
Tato kapitola uv´d´ v ˇ´sti 2.1 z´kladn´ informace t´kaj´ ı se RT-Linuxov´ modifikace
a ı ca a ı y ıc´ e
j´dra a v ˇ´sti 2.2 diskutuje moˇnosti a omezen´ vyuˇit´ jazyka C++ v r´mci RT-
a ca z ı z ı a
Linuxu.
2.1 Princip ˇinnosti RT-Linuxu
c
V t´to ˇ´sti bude v kr´tkosti pops´n princip ˇinnosti RT-Linuxu. Informace zde uveden´
e ca a a c e
jsou z´ any zejm´na z [9], pˇ´
ısk´ e rıpadnˇ z [1].
e
2.1.1 Definice hard real-time syst´mu
e
Tzv. hard real-time syst´m je syst´m, ve kter´m je zaruˇeno ˇasovˇ pˇesn´ spouˇtˇn´
e e e c c e r e se ı
jednotliv´ch uloh. Kaˇd´ uloha m´ definov´nu svoji prioritu, se kterou je spouˇtˇna a
y ´ z a´ a a se
periodu spouˇtˇn´
s e ı.
Perioda spouˇtˇn´ je v podstatˇ tzv. dead-line, tj. nejpozdˇjˇ´ ˇas, do kter´ho mus´
se ı e e sı c e ı
b´t dan´ real-time uloha dokonˇena, aby mohla b´t opˇt spuˇtˇna.
y a ´ c y e se
Priorita ulohy definuje ”d˚leˇitost” ulohy z hlediska pl´novaˇe proces˚.
´ u z ´ a c u
2.1.2 Popis RT-Linuxu
RT-Linux je hard real-time operaˇn´ syst´m urˇen´ pro ˇ´ ı robot˚ a technologick´ch
c ı e c y rızen´ u y
proces˚, ˇasovˇ n´roˇn´ mˇˇen´ a jin´ ulohy n´roˇn´ na ˇas.
u c e a c a er ı e´ a c e c
Dle n´roˇnosti vykon´van´ ulohy a mnoˇstv´ spouˇtˇn´ch vl´ken lze dos´hnout
a c a e ´ z ı se y a a
periody spouˇtˇn´ v ˇ´du mikrosekund.
s e ı ra
V´hodou RT-Linuxu je, ˇe rozˇiˇuje moˇnosti pouˇit´ klasick´ho unixov´ho syst´mu
y z sr z z ı e e e
o hard real-time vlastnosti pˇi zachov´n´ p˚vodn´ funkˇnosti syst´mu.
r a ı u ı c e
7
15. RT-LINUX Princip ˇinnosti RT-Linuxu
c
2.1.3 Princip ˇinnosti
c
Vlastn´ syst´m je implementov´n jednak jako patch1 klasick´ho Linuxov´ho j´dra, kter´
ı e a e e a y
s’
zajiˇt uje obsluhu pˇeruˇen´ pˇed vlastn´ Linuxov´m kernelem. Druh´ ˇ´st jsou dy-
r s ı r ım y a ca
e e ı s’ ı
namicky nahr´van´ moduly, kter´ po sv´m zaveden´ zajiˇt uj´ vlastn´ hard real-time
a e ı
funkcionalitu (pl´nov´n´ proces˚, poskytnut´ synchronizaˇn´ primitiv, moˇnosti ko-
a a ı u ı c ıch z
munikace s user-space ˇ´st´ linuxu atd.).
ca ı
Jak vlastn´ RT-Linuxov´ syst´m funguje je dobˇe patrn´ z obr.2.1.
ı y e r e
Obr´zek 2.1: Blokov´ schema funcionality RT-Linuxov´ extenze.
a e e
Cel´ syst´m funguje n´sledovnˇ:
y e a e
• Po zaveden´ RT-Linuxov´ch modul˚ jsou vˇechna pˇeruˇen´ odchyt´v´na RT-
ı y u s r s ı a a
Linuxem.
• Pokud je vyvol´no pˇeruˇen´ je zpracov´no RT-Linuxem, v pˇ´ e, ˇe je pˇeruˇen´
a r s ı, a rıpadˇ z r s ı
vyuˇ´ ano nˇkterou real-time ulohou, je vyvol´n handler pˇeruˇen´ t´to ulohy.
zıv´ e ´ a r s ı e ´
1
Patchem je obvykle naz´v´na soubor, obsahuj´ ı upravu ˇi oprava zdrojov´ho k´du nˇjak´ho
y a ıc´ ´ c e o e e
programu. Aplikac´ patche na zdrojov´ soubory p˚vodn´ programu je pak z´ ana nov´, upraven´
ı e u ıho ısk´ a a
verze.
8
16. RT-LINUX RT-Linux a C++
• Pokud existuj´ napl´novan´ real-time ulohy ˇekaj´ ı na voln´ ˇas procesoru, pak
ı a e ´ c ıc´ yc
jsou spuˇtˇny (v z´vislosti na prioritˇ).
se a e
• Pokud nen´ ve frontˇ ˇ´dn´ real-time uloha a procesor je voln´, je pˇed´no ˇ´ ı
ı e za a ´ y r a rızen´
p˚vodn´
u ımu linuxov´mu j´dru.
e a
• P˚vodn´ linuxov´ j´dro vyuˇ´ a pˇeruˇen´ kter´ jsou emulov´na RT-Linuxem2 .
u ı e a zıv´ r s ı, a a
2.1.4 Vyuˇit´ matematick´ho koprocesoru
z ı e
V pˇ´ e, ˇe real-time vl´kno chce vyuˇ´
rıpadˇ z a zıvat matematick´ koprocesor (d´le jen FPU),
y a
3
je nutno tuto skuteˇnost ozn´mit pl´novaˇi proces˚ . Pl´novaˇ n´slednˇ zajist´ pˇi
c a a c u a c a e ı r
pˇep´ an´ takov´ho vl´kna uloˇen´ stavu registr˚ FPU a jejich pˇ´
r ın´ ı e a z ı u rıpadn´ obnoven´ ve
e ı
chv´ kdy vl´kno pokraˇuje ve sv´m bˇhu.
ıli, a c e e
Pokud pl´novaˇ proces˚ nen´ informov´n, ˇe vl´kno vyuˇ´ a FPU m˚ˇe doch´zet
a c u ı a z a zıv´ uz a
k navracen´ chybn´ch v´sledk˚ v´poˇtu. K tomu m˚ˇe doj´ z n´sleduj´ ıch d˚vod˚:
ı y y u y c uz ıt a ıc´ u u
1. FPU v jeden okamˇik vyuˇ´ a program z user-space a z´roveˇ real-time vl´kno.
z zıv´ a n a
2. FPU v jeden okamˇik vyuˇ´ ı alespoˇ dvˇ real-time vl´kna.
z zıvaj´ n e a
3. FPU je v jeden okamˇik poˇadov´no nˇkolika real-time vl´kny i programy z user-
z z a e a
space.
2.2 RT-Linux a C++
V RT-Linuxu je moˇno vyuˇ´
z zıvat programovac´ jazyka C++ pro tvorbu real-time
ıho
vl´ken. Pouˇit´ vˇak m´ jist´ omezen´ kter´ vypl´vaj´ jiˇ pˇ´
a z ı s a a ı, a y ı z rımo z principu, jak´my
syst´m funguje.
e
N´sleduj´ ı ˇ´sti se postupnˇ zab´vaj´ jednotliv´mi konstrukcemi jazyka C++ a je-
a ıc´ ca e y ı y
jich pouˇit´ v RT-Linuxu. C´
z ım ˇ ast 2.2.1 diskutuje pouˇit´ dynamick´ alokace pamˇti,
z ı e e
ˇ´st 2.2.2 kr´tce diskutuje pouˇit´ exceptions4 a ˇ´st 2.2.3 diskutuje pouˇit´ tem-
ca a z ı ca z ı
plates(ˇablon).
s
2.2.1 Dynamick´ alokace pamˇti
a e
Probl´m pouˇit´ dynamick´ alokace pamˇti lze rozdˇlit na ˇ´st, kter´ se t´k´ alokov´n´
e z ı e e e ca a y a a ı
pamˇti bˇhem inicializace real-time modulu a problematiku dynmick´ alokace pamˇti
e e e e
bˇhem vlastn´ bˇhu real-time procesu (tj. alokace pamˇti pˇ´ z bˇˇ´ ıho RT vl´kna).
e ıho e e rımo ezıc´ a
2
V podstatˇ lze ˇinnost p˚vodn´ linuxov´ho j´dra pˇirovnat ke zvl´ˇtn´
e c u ıho e a r as ımu real-time vl´knu RT-
a
Linuxu, bˇˇ´ ımu s nejniˇˇ´ real-time prioritou.
ezıc´ zsı
3
To je moˇn´ zajistit bud’ informac´ pˇi zakl´d´n´ real-time vl´kna nebo nastaven´ stejn´ho
z e ı r a a ı a ım e
parametru za bˇhu real-time vl´kna.
e a
4
Tj. vyj´
ımek pro oˇetˇen´ chybov´ch stav˚ pˇi bˇhu programu
s r ı y u r e
9
17. RT-LINUX RT-Linux a C++
Oba tyto probl´my lze ˇeˇit za pomoci pˇet´zen´ C++ oper´toru new a delete,
e r s r ıˇ ı a
pˇ´
rıpadnˇ oper´tor˚ new[] a delete[] pro alokace a uvolˇov´n´ pamˇti dynamick´ch pol´
e a u n a ı e y ı.
V pˇ´ e, ˇe potˇebujeme dynamicky alokovat pamˇt e
rıpadˇ z r e ’ bˇhem inicializace, pˇ´
rıpadnˇe
deinicializace modulu, staˇ´ pˇet´zit standardn´ C++ oper´tory uveden´ v´ˇe na vol´n´
cı r ıˇ ı a e ys a ı
linuxov´ho j´dra kalloc(), pˇ´
e a rıpadnˇ kfree(). Toto pˇet´zen´ je jiˇ standardnˇ provedeno
e r ıˇ ı z e
v souboru rtl cpp.h, kter´ je souˇ´st´ distribuce RT-Linux.
y ca ı
z r e’
Za pˇedpokladu, ˇe je tˇeba dynamicky alokovat pamˇt za bˇhu real-time vl´kna,
r e a
je tˇeba si vytvoˇit vlastn´ spr´vu dynamick´ pamˇti. D˚vodem je zejm´na moˇnost
r r ı a e e u e z
vzniku kolize pˇi vol´n´ standardn´ syst´mov´ch vol´n´
r a ı ıch e y a ı.
Vlastn´ dynamick´ spr´va pamˇti by mˇla fungovat n´sleduj´ ım zp˚sobem:
ı a a e e a ıc´ u
z e’
1. V okamˇiku inicializace RT modulu naalokuje pamˇt z oblasti j´dra pomoc´ vol´n´
a ı a ı
kmalloc(). Velikost takto alokovan´ pamˇti by mˇla odpov´
e e e ıdat alespoˇ maxim´ln´
n a ı
potˇebn´ velikosti pamˇti, kterou budeme cht´ dynamicky alokovat. Bloky t´to
r e e ıt e
pamˇti mus´ b´t alokov´n ve fyzick´ pamˇti poˇ´ ce.
e ı y a e e cıtaˇ
r ıˇı a s ’ ıc´
2. Pˇet´z´ oper´tory new, new[], delete, delete[] tak, aby volaly funkce zajiˇt uj´ ı
a e’ e
alokaci a dealokaci pamˇti v r´mci pamˇt ov´ho bloku naalokovan´ho bˇhem
e e e
zav´dˇn´ RT modulu (viz. krok 1).
a e ı
e ı e’ e
3. Bˇhem deaktivace modulu provede uvolnˇn´ pamˇt ov´ho bloku, kter´ byl z´ an
e y ısk´
e ’ov´ oblasti linuxov´ho j´dra v okamˇiku zaveden´ modulu do pamˇti.
z pamˇt e e a z ı e
2.2.2 Oˇetˇen´ chyb - exceptions
s r ı
Vyj´ e z e’ e
ımky, nebo tak´ exceptions, nelze bohuˇel v pamˇt ov´m prostoru linuxov´ho j´dra
e a
a tedy ani v oblasti, kter´ je vyuˇ´ ana RT rozˇ´ren´ vyuˇ´ Hlavn´ d˚vodem je,
a zıv´ sıˇ ım zıt. ım u
ˇe linker optimalizuje k´d pro vol´n´ vyj´
z o a ı ımek. Proto by bˇhem linkov´n´ modulu j´dra
e a ı a
musely b´t zn´my vˇechny moduly, kter´ se budou v pamˇti nach´zet.
y a s e e a
Dalˇ´ d˚vodem je, ˇe linuxov´ j´dro je ps´na ˇistˇ v jazyce C a jiˇ bˇhem jeho
sım u z e a a c e z e
kompilace jsou vyj´ımky zak´zany pomoc´ parametru pˇekladaˇe.
a ı r c
2.2.3 Pouˇit´ C++ templates
z ı
ıˇı zıt, ’ e
Templates jako vlastnost jazyka C++ lze bez obt´z´ vyuˇ´ nebot bˇhem kompilace je
takov´ k´d nahrazen skuteˇn´m datov´m typem vˇetnˇ vˇech kontrol bˇhem kompi-
y o c y y c e s e
lace.
Bohuˇel nelze jednoduˇe vyuˇ´ tˇ´ implementovan´ch v knihovnˇ STL5 . D˚vodem
z s zıt rıd y e u
jsou dynamick´ alokace pamˇti, kter´ jsou v tˇchto tˇ´ ach vyuˇ´
e e e e rıd´ zıvany. Omezen´ z toho
ı
plynouc´ jsou uvedena v ˇ´sti 2.2.1. Urˇitou moˇnost´ jak t´to knihovny vyuˇ´ by
ı ca c z ı, e zıt
zˇejmˇ byla vlastn´ rekompilace ze zdrojov´ch k´d˚ se spr´vnˇ pˇet´zen´mi oper´tory
r e ı y o u a e r ıˇ y a
pro spr´vu pamˇti.
a e
5
Standard Template Library.
10
18. Kapitola 3
Lexik´ln´ anal´za zdrojov´ho k´du
a ı y e o
V t´to ˇ´sti se budeme zab´vat vlastn´ zpracov´n´ zdrojov´ho k´du v jazyce IL,
e ca y ım a ım e o
tedy vytvoˇen´ kompil´toru (pˇekladaˇe). Dle [7] lze pˇekladaˇ reprezentovat pomoc´
r ım a r c r c ı
koneˇn´ho stavov´ho automatu. V UNIXov´ch syst´mech jsou k dispozici programy
c e e y e
LEX a YACC, kter´ umoˇnuj´ takov´ stavov´ automat pro zpracov´n´ zdrojov´ho
e zˇ ı y y a ı e
k´du vytvoˇit na z´kladˇ z´pisu pravidel v pˇ´ sn´m tvaru. C´
o r a e a rısluˇ e ˇ ast 3.1 t´to kapitoly se
e
zab´v´ popisem programu LEX, kter´ se vyuˇ´ a pro vytvoˇen´ lexik´ln´ analyzeru
y a y zıv´ r ı a ıho
ˇa
(viz. obr.3.1). C´st 3.2 se zab´v´ popisem jazyka pomoc´ pravidel zadan´ch programu
y a ı y
YACC (na obr.3.1 to odpov´ a syntaktick´mu analyzeru). C´
ıd´ e ˇ ast 3.3 popisuje princip,
jak´m oba v´ˇe uveden´ programy spolupracuj´ pˇi tvorbˇ pˇekladaˇe.
y ys e ı r e r c
Obr´zek 3.1: Kompilaˇn´ sekvence.
a c ı
11
19. LEXIKALN´ ANALYZA ZDROJOVEHO KODU
´ I ´ ´ ´ Lexik´ln´ anal´za zdrojov´ho k´du
a ı y e o
3.1 Lexik´ln´ anal´za zdrojov´ho k´du
a ı y e o
Pro lexik´ln´ anal´zu zdrojov´ho k´du bude vyuˇit program LEX. Informace, kter´ jsou
a ı y e o z e
uvedeny v t´to ˇ´sti jsou ˇerp´ny z [8] a [4]. Program LEX slouˇ´ k vytvoˇen´ parseru
e ca c a zı r ı
zdrojov´ho k´du a pˇevodu kl´cov´ch slov na tzv. tokeny. Z´roveˇ umoˇnuje vytvoˇit
e o r ıˇ y a n zˇ r
stavov´ automat definuj´ ı moˇnou n´slednost r˚zn´ch kl´cov´ch slov ve zdrojov´m
y ıc´ z a u y ıˇ y e
k´du.
o
Vytvoˇen´ stavov´ automat m˚ˇe pracovat dvˇma zp˚soby:
r y y uz e u
1. Stavov´ automat pˇi pˇechodu do dalˇ´ stavu pˇedchoz´ stav zapomene.
y r r sıho r ı
2. Stavov´ automat ukl´d´ stavy na z´sobn´ Zmˇna stavu je moˇn´ dvˇma smˇry:
y a a a ık. e z a e e
• Pˇechod do nov´ho stavu, p˚vodn´ stav je uloˇen na z´sobn´
r e u ı z a ık.
• Z aktu´ln´ stavu se pˇech´z´ do stavu uloˇen´ho na z´sobn´
a ıho r a ı z e a ıku, aktu´ln´
a ı
stav je zapomenut.
3.1.1 Struktura zdrojov´ho k´du pro LEX
e o
Vstupn´ soubor pro LEX je rozdˇlen do tˇech ˇ´st´ tak, jak je patrno z uk´zky 3.1.
ı e r ca ı a
Jednotliv´ ˇ´sti jsou od sebe oddˇleny pomoc´ znaˇek %%.
e ca e ı c
... definice maker a vlastnost´ analyz´toru ...
ı a
%%
... definice pravidel ...
%%
... funkce v jazyce C/C++ ...
Uk´zka 3.1: Struktura vstupn´ souboru pro LEX.
a ıho
Prvn´ ˇ´st obsahuje makra pro zjednoduˇen´ definiˇn´ regul´rn´ v´raz˚ pro vyh-
ı ca s ı c ıch a ıch y u
led´v´n´ kl´cov´ch slov, parametry parseru a pˇ´
a a ı ıˇ y rıpadnˇ zdrojov´ k´d v jazyce C/C++.
e y o
V tab.3.1 je uveden pˇehled kl´cov´ch slov, kter´ mohou b´t v prvn´ ˇ´sti obsaˇeny.
r ıˇ y e y ı ca z
Druh´ ˇ´st vstupn´ souboru obsahuje pravidla ve tvaru regul´rn´ v´raz˚ pro
a ca ıho a ıch y u
zpracov´n´ zdrojov´ho k´du a definici akc´ v jazyce C/C++, kter´ pravidlu odpov´ ı.
a ı e o ı e ıdaj´
Pravidlo m˚ˇe b´t aktivn´ pouze v definovan´ch stavech, akce m˚ˇe obsahovat pˇechod
uz y ı y uz r
do stavu nov´ho nebo do stavu uloˇen´ho na z´sobn´
e z e a ıku. Struktura pravidel je patrn´a
z uk´zky 3.2.
a
Prvn´ ˇ´st pravidla je nepovinn´ a definuje stavy, ve kter´ch je pravidlo platn´,
ı ca a y e
pˇ´
rıpadnˇ stavy, ve kter´ch platn´ nen´ Zde z´leˇ´ na tom, jak je definov´n stav v prvn´
e y e ı. a zı a ı
ˇ´sti vstupn´ souboru.
ca ıho
12
20. LEXIKALN´ ANALYZA ZDROJOVEHO KODU
´ I ´ ´ ´ Lexik´ln´ anal´za zdrojov´ho k´du
a ı y e o
Definice Popis
N´zev reg. v´raz
a y Pˇeddefinovan´ regul´rn´ v´razy, kter´ lze
r e a ı y e
pouˇ´ d´le pro zjednoduˇen´ definiˇn´
zıt a s ı c ıch
pravidel pro vyhled´v´n´ token˚ ve zdro-
a a ı u
jov´m k´du.
e o
%s Definice stav˚, ve kter´ch se m˚ˇe nach´zet
u y uz a
vygenerovan´ stavov´ automat. Na jednom
y y
ˇ´dku se m˚ˇe nach´zet deklarace v´ stav˚
ra uz a ıce u
jejichˇ jm´na jsou oddˇlena mezerou.
z e e
%{ ... %} Ohraniˇen´ zdrojov´ho k´du v jazyce
c ı e o
C/C++, kter´ bude vloˇen tak, jak je
y z
naps´n, na zaˇ´tek vygenerovan´ho zdro-
a ca e
jov´ho k´du parseru.
e o
%option ... Parametry vygenerovan´ho parseru, pokud
e
obsahuje kl´cov´ slovo stack, jsou stavy
ıˇ e
parseru ukl´d´ny na z´sobn´
a a a ık.
Tabulka 3.1: Pˇehled kl´cov´ch slov pouˇiteln´ch v prvn´ ˇ´sti definiˇn´ souboru pro
r ıˇ y z y ı ca c ıho
LEX.
[<stav1[,stav2[,...]]>]reg.v´raz {
y
akce v jazyce C;
}
Uk´zka 3.2: Struktura pravidel pro anal´zu zdrojov´ho k´du.
a y e o
Druh´ ˇ´st je regul´rn´ v´raz, kter´ definuje, jak dan´ kl´cov´ slovo, konstanta
a ca a ı y y e ıˇ e
ˇi jin´ souˇ´st zdrojov´ho k´du je zaps´na. Z´kladn´ struktura regul´rn´ v´raz˚ je
c a ca e o a a ı a ıch y u
pops´na v tab. 3.2, podrobnˇjˇ´ informace o regul´rn´ v´razech lze z´
a e sı a ıch y ıskat napˇ. v [6].
r
V pˇ´ e, ˇe zdrojov´ text obsahuje ˇ´st, kter´ odpov´ a pˇ´ sn´mu regul´rn´
rıpadˇ z y ca a ıd´ rısluˇ e a ımu
v´razu, je tento text uloˇen do promˇnn´ YYTEXT a lze ho pouˇ´ v ˇ´sti pro z´pis
y z e e zıt ca a
pˇ´ sn´ akce, kter´ se vyvol´ pro dan´ v´raz.
rısluˇ e a a y y
V ˇ´sti pro z´pis akce lze zapsat libovolnou akci nebo nepsat nic, pokud se m´ vˇe,
ca a a s
co odpov´ a dan´mu regul´rn´ v´razu ignorovat. V pˇ´ e, ˇe chceme spolupracovat
ıd´ e a ımu y rıpadˇ z
s programem YACC, m˚ˇe akce vypadat napˇ. jako v uk´zce 3.3.
uz r a
Uk´zka 3.4 uv´d´ cel´ vstupn´ soubor pro LEX obsahuj´ ı konkr´tn´ pravidlo, vˇetnˇ
a a ı y ı ıc´ e ı c e
akce v jazyce C. Pravidlo detekuje token jako celoˇ´ cıselnou konstantu ve zdrojov´m e
k´du, pokud se stavov´ automat nach´z´ ve stavu any value.
o y a ı
13
21. LEXIKALN´ ANALYZA ZDROJOVEHO KODU
´ I ´ ´ ´ Lexik´ln´ anal´za zdrojov´ho k´du
a ı y e o
Regul´rn´ v´raz
a ı y Popis
LD Regul´rn´ v´raz je slovo LD.
a ı y
ˆLD Regul´rn´ v´raz je slovo LD na zaˇ´tku
a ı y ca
ˇ´dku.
ra
LD$ Regul´rn´ v´raz je slovo LD na konci ˇ´dku.
a ı y ra
LD/([ ]+) Regul´rn´ v´raz je slovo LD n´sledovan´ li-
a ı y a e
bovoln´m poˇtem mezer nebo tabul´tor˚,
y c a u
ˇ´st za znakem / nen´ uloˇena v promˇnn´
ca ı z e e
YYTEXT a je ponech´na v bufferu pro dalˇ´
a sı
zpracov´n´
a ı.
([0-9]+) Regul´rn´ v´raz je ˇ´ skl´daj´ ı se z libo-
a ı y cıslo a ıc´
voln´ho poˇtu ˇ´
e c cıslic.
{SPACE} Regul´rn´ v´raz odpov´ a definici z prvn´
a ı y ıd´ ıho
bloku zdrojov´ho souboru s n´zvem SPACE.
e a
Tabulka 3.2: Struktura regul´rn´ v´raz˚ v definici pravidel pro LEX.
a ıch y u
// pokud se pr´vˇ nach´z´m ve stavu var_declaration
a e a ı
if (YY_START == var_declaration)
{
// vyzvedni aktu´ln´ stav ze z´sobn´ku (dojde k pˇesunu
a ı a ı r
// do stavu pˇedchoz´ho)
r ı
yy_pop_state();
// a uloˇ na z´sobn´k stav var_data_type
z a ı
yy_push_state(var_data_type);
// uloˇ hodnotu nalezen´ho regul´rn´ho v´razu do promˇnn´
z e a ı y e e
// pro YACC
yylval.string = strdup(yytext);
’
// a vrat informaci, ˇe jsi nalezl datov´ typ
z y
// promˇnn´
e e
return TOK_VAR_DATATYPE;
}
// nejsem v bloku deklarac´ promˇnn´ch,
ı e y
// ale oˇek´v´m deklaraci datov´ho typu
c a a e
// funkce
yylval.string = strdup(yytext);
return TOK_FUNCTION_DATATYPE;
}
Uk´zka 3.3: Z´pis akce pro nalezen´ regul´rn´ v´raz ze zdrojov´ho k´du.
a a y a ı y e o
14
22. LEXIKALN´ ANALYZA ZDROJOVEHO KODU
´ I ´ ´ ´ Popis gramatiky jazyka
%{
#include <stdio.h>
// odkaz na poˇ´tadlo ˇ´dk˚
cı ra u
extern int iLineCount;
%}
// pouˇij z´sobn´k pˇi zmˇnˇ stavu
z a ı r e e
%option stack
// definice povolen´ch stav˚
y u
%s var_init
%%
// pokud jsi ve stavu, kdy je oˇek´v´na inicializace
c a a
// promˇnn´, povol detekci cel´ho ˇ´sla.
e e e cı
<var_init>[-+]?([0-9]+) {
’
yylval.number = atoi(yytext); // hodnotu vrat jako ˇ´slo
cı
return VAL_INTEGER;
}
// pokud jde o konec ˇ´dku, zvyˇ poˇ´tadlo a jinak
ra s cı
// nic nedˇlej
e
n ++iLineCount;
%%
Uk´zka 3.4: Uk´zka definice pravidla pro program LEX.
a a
3.2 Popis gramatiky jazyka
Pro popis gramatiky jazyka lze vyuˇ´ syst´m YACC, kter´ umoˇnuje ve spolupr´ci
zıt e y zˇ a
s programem LEX definovat velmi jednoduˇe pravidla , jak dan´ programovac´ jazyk
s y ı
vypad´, tj. jak´ umoˇnuje vytv´ˇet program´torsk´ konstrukce a z´pisy.
a e zˇ ar a e a
Informace zde uveden´ jsou ˇerp´ny z [8] a [4].
e c a
3.2.1 Struktura zdrojov´ho souboru pro YACC
e
Struktura zdrojov´ho souboru pro syst´m YACC je opˇt rozdˇlena do tˇech ˇ´st´ tak,
e e e e r ca ı
jak je patrno z obr´zku 3.5. Jednotliv´ ˇ´sti jsou od sebe oddˇleny pomoc´ znaˇek %%.
a e ca e ı c
Prvn´ ˇ´st obsahuje definici token˚ pro vyhled´v´n´ (z tˇchto definic jsou pot´
ı ca u a a ı e e
vygenerov´ny unik´tn´ identifik´tory jejichˇ symbolick´ n´zvy odpov´ ı n´zv˚m to-
a a ı a z e a ıdaj´ a u
ken˚), prioritu oper´tor˚ apod. V tab.3.3 je uveden pˇehled z´kladn´ pˇ´ u, kter´
u a u r a ıch rıkaz˚ e
mohou b´t v t´to ˇ´sti obsaˇeny.
y e ca z
ˇ ast pro definici pravidel obsahuje jiˇ pˇ´
C´ z rımo jednotliv´ pravidla, kter´ odpov´ ı
a a ıdaj´
konstrukc´ kter´ lze v jazyce vytvoˇit. Kaˇd´ takov´ pravidlo m´ strukturu dle
ım, e r z e e a
obr.3.6.
V´znam jednotliv´ch prvk˚ je n´sleduj´ ı:
y y u a ıc´
| Definuje, ˇe n´sleduj´ ı ˇ´st pravidla je nepovinn´.
z a ıc´ ca a
15
23. LEXIKALN´ ANALYZA ZDROJOVEHO KODU
´ I ´ ´ ´ Popis gramatiky jazyka
... definice ...
%%
... definice pravidel pro gramatiku jazyka ...
%%
... funkce v jazyce C ...
Uk´zka 3.5: Struktura vstupn´ souboru pro program YACC.
a ıho
Definice Popis
%token jm´no
e Definice tokenu s n´zvem jm´no
a e
%{...%} Blok obsahuj´ ı k´d v jazyce C/C++, kter´
ıc´ o y
bude po zpracov´n´ vloˇen na zaˇ´tek vygen-
a ı z ca
erovan´ho k´du.
e o
%union{int iData;char *pData;} N´vratov´ hodnota yylval je typu union a je
a a
urˇena nˇkter´m datov´m typem uveden´m
c e y y y
v unionu.
%token <iData> TOK INTEGER Definuje token s datov´m typem iData (dle
y
definice v unionu).
%left ’,’ Definice priority oper´toru.
a
%right ’,’ Definice priority oper´toru.
a
Tabulka 3.3: Z´kladn´ pˇ´
a ı rıkazy pouˇiteln´ v bloku definic vstupn´ souboru pro YACC.
z e ıho
nazev:
[|]
nazev2
[{
... programov´ k´d v jazyce C/C++ ...
y o
}]
[[|] nazev3]
;
Uk´zka 3.6: Struktura pravidel pro definici jazyka v programu YACC.
a
nazev N´zev pravidla (bez diakritiky) oddˇlen´ dvojteˇkou od jeho definice.
a e y c
nazev2 N´zev tokenu definovan´ho v ˇ´sti definic na zaˇ´stku vstupn´ souboru pro
a e ca ca ıho
16
24. LEXIKALN´ ANALYZA ZDROJOVEHO KODU
´ I ´ ´ ´ Princip spolupr´ce program˚ LEX a YACC
a u
YACC nebo n´zev jin´ho pravidla. Pro vytv´ˇen´ rekurzivn´ pravidel m˚ˇe b´t
a e ar ı ıch uz y
stejn´ i jako nazev.
y
{ ... } Ohraniˇuje blok obsahuj´ ı k´d v jazyce C/C++, kter´ bude vykon´n v pˇ´ e,
c ıc´ o y a rıpadˇ
ˇe pravidlo bude obsaˇeno ve vstupn´ zdrojov´m souboru.
z z ım e
; Oznaˇen´ konce bloku, kter´ definuje pravidlo nazev.
c ı y
Programov´ k´d v jazyce C/C++ definuje akce, kter´ budou pˇi aplikaci pravidla
y o e r
vyvol´ny. V pˇ´ e, ˇe nalezen´ token m´ definov´n datov´ typ, lze k hodnotˇ pˇedan´
a rıpadˇ z y a a y e r e
z programu LEX pˇistupovat pomoc´ konstrukce $x, kde x je ˇ´ definuj´ ı poˇad´
r ı cıslo ıc´ r ı
tokenu v definici pravidla. V pˇ´ e pravidla z obr.3.6 by pro token nazev2 s defi-
rıpadˇ
novan´m typem odpov´
y ıdala hodnota $1. Do ˇ´
cıslov´n´ poˇad´ se zahrnuj´ i programov´
a ı r ı ı e
bloky uzavˇen´ mezi {}.
r e
Na obr.3.7 je uvedena kr´tk´ komentovan´ uk´zka definice nˇkolika jednoduch´ch
a a a a e y
pravidel.
3.3 Princip spolupr´ce program˚ LEX a YACC
a u
Tato ˇ´st popisuje spolupr´ci program˚ LEX a YACC pˇi vytv´ˇen´ pˇekladaˇe navrˇen´ho
ca a u r ar ı r c z e
jazyka. Princip ˇinnosti je vysvˇtlen na obr.3.2 pomoc´ vytv´ˇen´ho softwarov´ho PLC
c e ı ar e e
(v´sledkem bude program plc2cpp, kter´ bude pˇev´dˇt k´d ve zvolen´m jazyce pro
y y r a e o e
PLC do jazyka C/C++).
Princip spolupr´ce obou program˚ lze popsat n´sledovnˇ:
a u a e
1. Nejprve vytvoˇ´
rıme lexik´ln´ analyzer pomoc´ programu LEX, kter´ vyhled´ ve
a ı ı y a
zdrojov´m textu tzv. tokeny (tj. definovan´ kl´cov´ slova).
e a ıˇ a
2. N´slednˇ definujeme pomoc´ programu YACC syntaxi navrˇen´ho jazyka (tj.
a e ı z e
moˇn´ kombinace vyhledan´ch token˚).
z e y u
3. Zkompilujeme vstupn´ soubor pro program YACC. V´sledkem je hlaviˇkov´ sou-
ı y c y
bor y.tab.h, kter´ definuje pro jednotliv´ n´zvy token˚ ˇ´
y e a u cıseln´ hodnoty (makra)
e
v jazyce C/C++ a soubor y.tab.c, kter´ obsahuje vlastn´ syntaktick´ analyz´tor
y ı y a
jazyka.
4. Zkompilujeme vstupn´ soubor pro program LEX. Ten ve vygenerovan´m k´du
ı e o
vyuˇ´ a soubor y.tab.h vygenerovan´ v pˇedchoz´ kroku. V´sledkem je soubor
zıv´ y r ım y
lex.yy.c, kter´ obsahuje lexik´ln´ analyzer v jazyce C/C++.
y a ı
5. Zkompilov´n´ soubor˚ vygenerovan´ch v pˇedchoz´ krok˚ spolu s dalˇ´
a ım u y r ıch u sımi
podp˚rn´mi ˇ´stmi z´ ame poˇadovan´ kompil´tor. V naˇem pˇ´ e plc2cpp.
u y ca ısk´ z y a s rıpadˇ
6. Zkompilovan´ program z pˇedchoz´ krok˚ je jiˇ vytv´ˇen´m kompil´torem,
y r ıch u z ar y a
kter´ lze vyuˇ´ ke kompilaci zdrojov´ho k´du ve vytv´ˇen´m jazyce. V naˇem
y zıt e o ar e s
pˇ´ e tedy zdrojov´ k´d v implementovan´m programovac´ jazykem pro PLC.
rıpadˇ y o y ım
17
25. LEXIKALN´ ANALYZA ZDROJOVEHO KODU
´ I ´ ´ ´ Princip spolupr´ce program˚ LEX a YACC
a u
// Definuj token pro pˇiˇazen´ hodnoty
r r ı
%token TOK_SET
// Pˇiˇazovan´ hodnota je bud’ cel´ ˇ´slo
r r a e cı
// nebo nulou ukonˇen´ ˇetˇzec
c y r e
%union
{
int number;
char *string;
}
// Definuj token s urˇen´m datov´m typem pro n´vrat
c y y a
// celoˇ´seln´ hodnoty
cı e
%token <number> VAL_INT
// Definuj token s urˇen´m datov´m typem pro n´vrat
c y y a
// nulou ukonˇen´ho ˇetˇzce
c e r e
%token <string> VAL_STR
%%
// Definuj z´kladn´ pravidlo pro detekci jednotliv´ch
a ı y
// blok˚ ve vstupn´m souboru.
u ı
blocks:
// ˇ´dn´ z n´sleduj´c´ch blok˚ v pravidle nen´ povinn´
Za y a ı ı u ı y
|
// Po nalezen´ bloku pro pˇiˇazen´ cel´ho ˇ´sla m˚ˇe n´sledovat
ı r r ı e cı uz a
// dalˇ´ vstupn´ blok (rekurze))
sı ı
set_int blocks
|
// Po prvn´m bloku pˇiˇazuj´c´m ˇetˇzec jiˇ nen´sleduje
ı r r ı ı r e z a
// ˇadn´ dalˇ´ blok
z´ y sı
set_string
;
set_int:
TOK_SET VAL_INT
{
printf("ˇ´seln´ hodnota: %d", $1);
Cı a
}
;
set_string:
TOK_SET VAL_STR
{
printf("ˇetˇzcov´ hodnota: %s", $1);
R e a
}
;
%%
Uk´zka 3.7: Uk´zka definice pravidla ve zdrojov´m k´du pro YACC.
a a e o
18
26. LEXIKALN´ ANALYZA ZDROJOVEHO KODU
´ I ´ ´ ´ Princip spolupr´ce program˚ LEX a YACC
a u
Obr´zek 3.2: Princip tvorby a funkce pˇekladaˇe jazyka definovan´ho pomoc´ program˚
a r c e ı u
LEX a YACC.
Zde uveden´ vlastnosti a konstrukce obsahuj´ pouze malou ˇ´st moˇnost´ kter´ pro-
e ı ca z ı, e
gramy YACC a LEX nab´ ı. V podstatˇ shrnuje vlastnosti vyuˇit´ bˇhem konstrukce
ızej´ e z e e
softwarov´ho PLC. Podrobnˇjˇ´ informace lze nal´zt v uveden´ literatuˇe.
e e sı e e r
19
27. Kapitola 4
Zpracov´n´ promˇnn´ch PLC
a ı e y
programu
Tato ˇ´st se zab´v´ zpracov´n´ promˇnn´ch a parametr˚ funkc´ funkˇn´ blok˚ a
ca y a a ım e y u ı, c ıch u
u ˇa
programov´ch blok˚. C´st 4.1 nastiˇuje princip zpracov´n´ promˇnn´ch v programu,
y n a ı e y
ˇ´st 4.2 se zab´v´ deklarac´ jednotliv´ch promˇnn´ch, ˇ´st 4.3 rozeb´ a jednotliv´
ca y a ı y e y ca ır´ e
moˇn´ bloky promˇnn´ch a ˇ´st 4.4 uv´d´ z´kladn´ principy t´kaj´ ı se implementace
z e e y ca a ı a ı y ıc´
a zpracov´n´ promˇnn´ch v softwarov´m PLC.
a ı e y e
4.1 Princip zpracov´n´ promˇnn´ch
a ı e y
Promˇnn´ v PLC programu se zapisuj´ v r´mci blok˚ promˇnn´ch. Kaˇd´ blok promˇnn´ch
e e ı a u e y z y e y
m´ jin´ v´znam a ve sv´m tˇle obsahuje deklaraci jedn´ nebo v´ promˇnn´ch tak, jak
a y y e e e ıce e y
je patrno z uk´zky 4.1. V´znamem jednotliv´ch blok˚ promˇnn´ch se zab´vaj´ dalˇ´
a y y u e y y ı sı
ˇ´sti t´to kapitoly.
ca e
Princip zpracov´n´ promˇnn´ch v r´mci PLC programu prob´ a n´sleduj´ ım zp˚sobem:
a ı e y a ıh´ a ıc´ u
1. Detekuj blok deklaruj´ ı promˇnn´ (viz. ˇ´st 4.2).
ıc´ e e ca
2. Najdi deklaraci promˇnn´ a ukl´dej jej´ parametry do kontejneru CContainer-
e e a ı
Variable:
(a) Separuj n´zev promˇnn´, pˇeved’ ho na mal´ p´
a e e r a ısmena a vloˇ do kontejneru.
z
(b) Detekuj, zda deklarace promˇnn´ obsahuje specifikaci adresy, pokud ano,
e e
uloˇ adresu v kontejneru.
z
(c) Identifikuj datov´ typ promˇnn´, pokud se jedn´ o funkˇn´ blok, sdˇl kon-
y e e a c ı e
tejneru poˇadavek na vloˇen´ hlaviˇkov´ho souboru s pˇ´ sn´m funkˇn´
z z ı c e rısluˇ y c ım
blokem.
(d) Pokud se jedn´ o standardn´ datov´ typ, detekuj pˇ´
a ı y rıpadnou deklaraci inicial-
izaˇn´ hodnoty. V pˇ´ e, ˇe je promˇnn´ inicializov´na, uloˇ inicializaˇn´
c ı rıpadˇ z e a a z c ı
hodnotu do kontejneru.
20
28. ZPRACOVAN´ PROMENNYCH PLC PROGRAMU
´ I ˇ ´ Deklarace promˇnn´ch
e y
3. Existuje-li deklarace dalˇ´ promˇnn´, opakuj vˇe od bodu 2.
sı e e s
4. Detekuj konec bloku promˇnn´ch, uzavˇi kontejner promˇnn´ch a pˇidej ho do
e y r e y r
kontejneru obsahuj´ ıho jednotliv´ kontejnery promˇnn´ch platn´ch v aktu´ln´
ıc´ e e y y a ım
programov´m bloku.
e
4.2 Deklarace promˇnn´ch
e y
Jednotliv´ promˇnn´ se deklaruj´ v nˇkolika typech blok˚ s r˚zn´m v´znamem. Jed-
e e e ı e u u y y
notliv´ druhy blok˚ promˇnn´ch jsou povoleny v r˚zn´ch kontextech PLC k´du. Promˇnn´
e u e y u y o e e
se zapisuj´ zp˚sobem uveden´m v uk´zce 4.1.
ı u y a
...
Zaˇ´tek bloku promˇnn´ch
ca e y
...
typ [AT adresa]: N´zev promˇnn´ [:= hodnota];
a e e
...
Konec bloku promˇnn´ch
e y
...
Uk´zka 4.1: Deklarace promˇnn´
a e e
Kaˇd´ promˇnn´ mus´ obsahovat datov´ typ a n´zev. Pokud je datov´ typ promˇnn´
z a e a ı y a y e e
1
jeden ze z´kladn´ datov´ch typ˚ uveden´ch v tab.4.1 , m˚ˇe deklarace promˇnn´ ob-
a ıch y u y uz e e
sahovat jeˇtˇ kl´cov´ slovo AT n´sledovan´ adresou ve tvaru uveden´m v tab.4.3. D´le
s e ıˇ e a e e a
v tomto pˇ´ e m˚ˇe deklarace obsahovat inicializaˇn´ hodnotu promˇnn´ oddˇlenou
rıpadˇ uz c ı e e e
pomoc´ :=.
ı
Jako datov´ typ m˚ˇe b´t pouˇit tak´ n´zev funkˇn´ bloku, zde je tedy tˇeba
y uz y z e a c ıho r
tak´ zajistit, aby se vygeneroval ˇ´dek pro proveden´ include pˇ´ sn´ho hlaviˇkov´ho
e ra ı rısluˇ e c e
souboru obsahuj´ ıho deklaraci funkˇn´ bloku. Cel´ deklarace je ukonˇena pomoc´ ;.
ıc´ c ıho a c ı
Uk´zka 4.2 uv´d´ pˇ´
a a ı rıklad deklarace nˇkolika promˇnn´ch tak,aby byl patrn´ konkr´tn´
e e y y e ı
z´pis promˇnn´ v programu. Pro vˇtˇ´ n´zornost jsou zaps´ny v r´mci bloku lok´ln´
a e e e sı a a a a ıch
promˇnn´ch.
e y
4.2.1 Pˇ´ e adresy
rım´
V tab.4.2 je uvedeno nˇkolik uk´zek pˇ´ ych adres pro PLC. Adresa se vˇdy skl´d´ z
e a rım´ z a a
a y ıc´ e’ e
prefixu, kter´ definuje typ adresy n´sledovan´ prefixem, definuj´ ım velikost pamˇt ov´ho
y
bloku, kter´mu adresa odpov´ a.
e ıd´
1
V tabulce jsou uvedeny pouze datov´ typy podporovan´ ve vytv´ˇen´m softwarov´m PLC.
e e ar e e
21
29. ZPRACOVAN´ PROMENNYCH PLC PROGRAMU
´ I ˇ ´ Deklarace promˇnn´ch
e y
Datov´ typ
y Velikost Pozn´mka
a
BOOL 1
SINT 8
INT 16
DINT 32
USINT 8
UINT 16
UDINT 32
REAL
TIME 64 Dostupn´ pouze jako konstanta urˇuj´ ı pe-
y c ıc´
riodu spouˇtˇn´ programu.
se ı
BYTE 8
WORD 16
DWORD 32
Tabulka 4.1: Pˇehled z´kladn´ datov´ch typ˚ pouˇiteln´ch v PLC.
r a ıch y u z y
VAR
current: DINT;
otacky: DINT := 0;
rps AT %QB10: DINT := 0;
sp AT %IB10: DINT;
forward AT %Q0.0: BOOL := FALSE;
backward AT %Q0.1: BOOL := FALSE;
END_VAR
Uk´zka 4.2: Uk´zka deklarace jednotliv´ch promˇnn´ch.
a a y e y
Adresa Pozn´mka
a
%QX35, %Q35 V´stupn´ bit 37
y ı
%MX3.5 5 bit 3 bytu ve vnitˇn´ pamˇti
r ı e
%IW23 Vstupn´ slovo 23
ı
Tabulka 4.2: Uk´zky z´pisu adres pro PLC.
a a
y u e’ y
Pˇehled jednotliv´ch prefix˚ pro adresaci pamˇt ov´ch m´ PLC je uveden v tab.4.3.
r ıst
22
30. ZPRACOVAN´ PROMENNYCH PLC PROGRAMU
´ I ˇ ´ Pˇehled blok˚ pro deklaraci promˇnn´ch
r u e y
Adresa Pozn´mka
a
Typ
Q Adresa v´stupu
y
I Adresa vstupu
M Adresa ve vnitˇn´ pamˇti
r ı e
Velikost
X Adresa specifikuje jeden bit
Nic Adresa specifikuje jeden bit
B Adresa specifikuje jeden byte (8bit˚)
u
W Adresa specifikuje jedno slovo (16bit˚)
u
D Adresa specifikuje dvojit´ slovo (32bit˚)
e u
L Adresa specifikuje dlouh´ slovo (64bit˚)
e u
Tabulka 4.3: Zp˚sob z´pisu pˇ´ ych adres pro PLC.
u a rım´
4.3 Pˇehled blok˚ pro deklaraci promˇnn´ch
r u e y
N´sleduj´ ı ˇ´st se zab´v´ v´znamem a zp˚sobem z´pisu jednotliv´ch typ˚ blok˚
a ıc´ ca y a y u a y u u
promˇnn´ch. Informce zde uveden´ jsou ˇerp´ny z [5].
e y e c a
Norma [5] definuje n´sleduj´ ı typy promˇnn´ch:
a ıc´ e y
• Glob´ln´ promˇnn´ - pouˇ´ ı se pro z´pis promˇnn´ch dostupn´ch v cel´m
a ı e e zıvaj´ a e y y e
PLC programu.
• Lok´ln´ promˇnn´ - pouˇ´ ı se pro deklaraci lok´ln´ promˇnn´ch v r´mci
a ı e e zıvaj´ a ıch e y a
funkce, funkˇn´ bloku nebo bloku program.
c ıho
• Extern´ promˇnn´ - pouˇ´ ı se k definici odkazu na glob´ln´ promˇnn´ v
ı e e zıvaj´ a ı e e
r´mci blok˚ funkce, funkˇn´ blok nebo blok program.
a u c ı
• Vstupn´ promˇnn´ - pouˇ´ ı se pro deklaraci vstupn´ parametr˚ funkc´
ı e e zıvaj´ ıch u ı,
funkˇn´ blok˚ nebo blok˚ typu program.
c ıch u u
• V´stupn´ promˇnn´ - pouˇ´ ı se pro deklaraci v´stupn´ parametr˚ funkˇn´
y ı e e zıvaj´ y ıch u c ıch
blok˚ a blok˚ typu program.
u u
• Vstupnˇ/v´stupn´ promˇnn´ - zastupuj´ ulohu parametr˚ pˇed´van´ch ref-
e y ı e e ı´ u r a y
erenc´ v r´mci blok˚ program a funkˇn´ blok˚.
ı a u c ıch u
4.3.1 Glob´ln´ promˇnn´
a ı e e
Glob´ln´ promˇnn´ je moˇn´ deklarovat v r´mci bloku CONFIGURATION, pˇ´
a ı e e z e a rıpadnˇ
e
v r´mci podbloku konfigurace RESOURCE. Glob´ln´ promˇnn´ jsou n´slednˇ dos-
a a ı e e a e
tupn´ v cel´m PLC programu, pˇiˇemˇ z blok˚ typu FUNCTION, PROGRAM a
e e rc z u
23
31. ZPRACOVAN´ PROMENNYCH PLC PROGRAMU
´ I ˇ ´ Pˇehled blok˚ pro deklaraci promˇnn´ch
r u e y
FUNCTION BLOCK je tˇeba se na nˇ odk´zat pomoc´ deklarace VAR EXTERNAL
r e a ı
(viz.4.3.2). Zp˚sob deklarace bloku glob´ln´ promˇnn´ch je patrn´ z uk´zky 4.3.
u a ıch e y y a
... nadˇazen´ blok ...
r y
VAR_GLOBAL
...
Deklarace jednotliv´ch promˇnn´ch;
y e y
...
END_VAR
... pokraˇov´n´ nadˇazen´ho bloku ...
c a ı r e
Uk´zka 4.3: Deklarace glob´ln´ promˇnn´ch v programu.
a a ıch e y
4.3.2 Extern´ promˇnn´
ı e e
Blok extern´ promˇnn´ch se vyuˇ´ a k odkazu na glob´ln´ promˇnnou, kterou chceme
ıch e y zıv´ a ı e
vyuˇ´ v r´mci blok˚ PROGRAM, FUNCTION a FUNCTION BLOCK. V tomto
zıt a u
bloku lze pouˇ´ pouze deklaraci promˇnn´ bez specifikace adresy, kde se nach´z´ ani
zıt e e a ı,
deklarovat inicializaˇn´ hodnotu - tu je moˇno specifikovat v r´mci deklarace promˇnn´
c ı z a e e
v bloku VAR GLOBAL. Zp˚sob deklarace bloku glob´ln´ promˇnn´ch je patrn´ z
u a ıch e y y
uk´zky 4.4.
a
... nadˇazen´ blok ...
r y
VAR_EXTERNAL
...
Deklarace jednotliv´ch promˇnn´ch;
y e y
...
END_VAR
... pokraˇov´n´ nadˇazen´ho bloku ...
c a ı r e
Uk´zka 4.4: Deklarace extern´ promˇnn´ch v programu.
a ıch e y
4.3.3 Lok´ln´ promˇnn´
a ı e e
Lok´ln´ promˇnn´ lze pouˇ´ pouze v r´mci programov´ch blok˚ PROGRAM, FUNC-
a ı e e zıt a y u
TION a FUNCTION BLOCK. Promˇnn´ deklarovan´ jako lok´ln´ maj´ platnost pouze
e e e a ı ı
v programov´m bloku, kde jsou deklarov´ny.
e a
24
32. ZPRACOVAN´ PROMENNYCH PLC PROGRAMU
´ I ˇ ´ Pˇehled blok˚ pro deklaraci promˇnn´ch
r u e y
V pˇ´ e funkˇn´ blok˚ a blok˚ typu program si lok´ln´ promˇnn´ uchov´vaj´
rıpadˇ c ıch u u a ı e e a ı
svoji hodnotu z pˇedchoz´ vol´n´ po celou dobu existence instance funkˇn´ bloku.
r ıho a ı c ıho
Zp˚sob deklarace bloku lok´ln´ promˇnn´ch je patrn´ z uk´zky 4.5.
u a ıch e y y a
... nadˇazen´ blok ...
r y
VAR
...
Deklarace jednotliv´ch promˇnn´ch;
y e y
...
END_VAR
... pokraˇov´n´ nadˇazen´ho bloku ...
c a ı r e
Uk´zka 4.5: Deklarace lok´ln´ promˇnn´ch v programu.
a a ıch e y
4.3.4 Vstupn´ promˇnn´
ı e e
Bloky vstupn´ promˇnn´ch lze vyuˇ´
ıch e y zıvat v r´mci blok˚ PROGRAM, FUNCTION
a u
a FUNCTION BLOCK. V jejich deklaraci nelze specifikovat adresu a vyuˇ´ ı se jako
zıvaj´
vstupn´ parametry v´ˇe uveden´ch blok˚. Zp˚sob deklarace bloku vstupn´ promˇnn´ch
ı ys y u u ıch e y
je patrn´ z uk´zky 4.6.
y a
... nadˇazen´ blok ...
r y
VAR_INPUT
...
Deklarace jednotliv´ch promˇnn´ch;
y e y
...
END_VAR
... pokraˇov´n´ nadˇazen´ho bloku ...
c a ı r e
Uk´zka 4.6: Deklarace vstupn´ promˇnn´ch v programu.
a ıch e y
4.3.5 V´stupn´ promˇnn´
y ı e e
V´stupn´ promˇnn´ lze pouˇ´ pouze v r´mci blok˚ PROGRAM a FUNCTION BLOCK.
y ı e e zıt a u
V jejich deklaraci nelze specifikovat adresu a vyuˇ´ ı se pro pˇed´v´n´ hodnot z
zıvaj´ r a a ı
aktu´ln´ programov´ho bloku do bloku nadˇazen´ho. Zp˚sob deklarace bloku v´stupn´
a ıho e r e u y ıch
promˇnn´ch je patrn´ z uk´zky 4.7.
e y y a
25