Sie sind auf Seite 1von 88

I CESKE VYSOKE UCEN TECHNICKE V PRAZE

Fakulta elektrotechnick a

Softwarov PLC e
Diplomov prce a a

Vladimr Kloz Vedouc prce: Ing. Frantiek Vacek a s

Praha, 2003

Prohlen as
Prohlauji, e jsem diplomovou prci vetn doprovodnho programovho vybaven s z a c e e e vypracoval samostatn s pouit uveden literatury a konzultac s vedouc diploe z m e m mov prce Ing. Frantikem Vackem. e a s Nemm zvan dvod proti uit tohoto koln d ve smyslu 60 Zkona a a z y u z s ho la a .121/2000 Sb. , o prvu autorskm, o prvech souvisej ch s prvem autorskm a o c a e a c a y zmn nkterch zkon (autorsk zkon). e e e y a u y a V Praze dne: 13.ledna 2004 Vladim Kloz r

Podkovn e a
Dkuji panu Ing. Frantiku Vackovi za cenn rady a pipom e s e r nky, kter mi poskytl e bhem konzultac pi zpracovn diplomov prce. e r a e a Vladim Kloz r

Abstrakt
C lem tto diplomov prce je vytvoit softwarov PLC s vlastnostmi denovanmi v e e a r e y norm IEC-1131-3, kter bude fungovat pod operan systmem Real-Time Linux. e e c m e Cel systm je vytvoen jako preprocesor ze zvolenho programovac jazyka pro PLC y e r e ho (zvolen byl jazyk Instruction List) do jazyka C++. Vsledkem pekladu programu pro PLC je modul zavediteln do oblasti kernelu y r y operan systmu Real-Time Linux, kter prezentuje program pro PLC. c ho e y Souast prce je tak vytvoen zkladn podpory pro p c a e r a rstup z PLC programu na za digitln vstup/vstup (implementovny jsou nap. ovladae pro paraleln rzen 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 dened in the norm IEC-1131-3, which will run under Real-Time Linux operating system. The system is designed 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 inputs/outputs from PLC program (implemented are drivers for parallel port, PCI card PLX-1750 etc.).

Obsah
Uvod 1 Nvrh een a r s 1.1 Funkn st pro user-space . . . . . . . . . . . . . . . . . . . . . . . . c ca 1.2 Funkn st pro kernel-space . . . . . . . . . . . . . . . . . . . . . . . c ca 2 RT-Linux 2.1 Princip innosti RT-Linuxu . . . . . . . . c 2.1.1 Denice hard real-time systmu . . e 2.1.2 Popis RT-Linuxu . . . . . . . . . . 2.1.3 Princip innosti . . . . . . . . . . . c 2.1.4 Vyuit matematickho koprocesoru z e 2.2 RT-Linux a C++ . . . . . . . . . . . . . . 2.2.1 Dynamick alokace pamti . . . . . a e 2.2.2 Oeten chyb - exceptions . . . . . s r 2.2.3 Pouit C++ templates . . . . . . . z 1 3 6 6 7 7 7 7 8 9 9 9 10 10 11 12 12 15 15 17 20 20 21 21 23 23 24 24 25 25

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

3 Lexikln analza zdrojovho kdu a y e o 3.1 Lexikln analza zdrojovho kdu . . . . . . . a y e o 3.1.1 Struktura zdrojovho kdu pro LEX . . e o 3.2 Popis gramatiky jazyka . . . . . . . . . . . . . . 3.2.1 Struktura zdrojovho souboru pro YACC e 3.3 Princip spoluprce program LEX a YACC . . a u 4 Zpracovn promnnch PLC programu a e y 4.1 Princip zpracovn promnnch . . . . . a e y 4.2 Deklarace promnnch . . . . . . . . . . e y 4.2.1 P e adresy . . . . . . . . . . . rm 4.3 Pehled blok pro deklaraci promnnch r u e y 4.3.1 Globln promnn . . . . . . . . a e e 4.3.2 Extern promnn . . . . . . . . . e e 4.3.3 Lokln promnn . . . . . . . . . a e e 4.3.4 Vstupn promnn . . . . . . . . e e 4.3.5 Vstupn promnn . . . . . . . . y e e i

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

4.4

4.3.6 Vstupn/vstupn promnn e y e e Implementace promnnch . . . . . e y 4.4.1 Parser zdrojovho kdu . . . e o 4.4.2 Vygenerovan zdrojov kd y y o

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

26 26 27 27 30 31 32 32 34 34 36 38 38 42 43 46 46 47 48 51 51 51 52 53 54 54 55 59 61 61 62 63 63 66 68 70

5 Zpracovn jazyka IL a 5.1 Piazovac instrukce . . . . . . rr 5.2 Logick instrukce . . . . . . . . e 5.3 Aritmetick instrukce . . . . . . e 5.4 Porovnvac instrukce . . . . . . a 5.5 Instrukce toku programu rzen 5.5.1 Voln funkc . . . . . . a

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

6 Zpracovn programovch blok a y u 6.1 Funkn bloky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c 6.2 Programov bloky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 6.3 Funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Kongurace softwarovho PLC e 7.1 Struktura bloku RESOURCE . . . . . . . . . . . . . . . . . . . . . . . 7.1.1 Struktura blok TASK . . . . . . . . . . . . . . . . . . . . . . . u 7.1.2 Struktura blok PROGRAM . . . . . . . . . . . . . . . . . . . . u 8 Podpora pro RT-Linux 8.1 Knihovna . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.1 Emulace pamti PLC . . . . . . . . . . . . . . . . . e 8.1.2 Podpora promnnch PLC . . . . . . . . . . . . . . e y 8.1.3 Podpora parametr pro voln programovch blok u a y u 8.1.4 Emulace aktuln hodnoty zsobn a a ku . . . . . . . . 8.2 Ovladae karet digitln vstup/vstup . . . . . . . . . c a ch u y u 8.2.1 Tvorba ovladae I/O karty . . . . . . . . . . . . . . c 8.3 Podpora C++ v RT-Linuxovm kernelu . . . . . . . . . . e 9 Pouit softwarovho PLC z e 9.1 Instalace softwarovho PLC . e 9.2 Parametry p rkazovho dku e ra 9.3 Vytven knihoven . . . . . . ar 9.4 Vytvoen softwarovho PLC . r e Zvr a e A Instalace RT-Linuxu B Kompatibilita s normou IEC-1131-3

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

ii

zen motorku pomoc softwarovho PLC C R e d C.1 R c program motorku . . . . . . . . . . . . . . . . . . . . . . . . . . C.2 Vizualizan program . . . . . . . . . . . . . . . . . . . . . . . . . . . . c D Obsah piloenho CD r z e Literatura

77 77 78 80 81

iii

Uvod
C lem tto prce je vytvoit takzvan Softwarov PLC. Pod pojmem Softwarov PLC e a r e e e si v naem p e pedstavujeme softwarov emultor programov kdu urenho s rpad r y a e o c e pro PLC. Tento emultor by ml bt vytvoen pod operan systmem RT-Linux a e y r c m e na procesorov platform Intel, ml by podporovat vybran programovac jazyk pro e e e y PLC a komunikovat s PCI kartou digitln vstup/vstup. PLC by mlo splovat a ch u y u e n vlastnosti denovan normou IEC-1131[5]. e PLC je zkratka pro programovateln logick automat. Jedn se o za uren y y a rzen c e zejmna pro c a regulan techniku. V podstat je to mikroprocesorem osazen e rd c e y systm obvykle umonuj rozren o dal moduly (nap. moduly digitln vstup/ve z c s s r a ch u y stu-p, A/D a D/A pevodn u r ky, moduly pro prmyslov sbrnice atd.). Ve vtin u e e es e p u lze tyto systmy programovat pomoc tech zkladn programovac jazyk: rpad e r a ch ch u IL (instruction list - obdoba assembleru, ST (structured text - obdoba jazyka Pascal) a tzv. ebckovch diagram. Instrukn soubor je velmi jednoduch se zamen na z r y u c y er m a regulaci. Programovac jazyky pro PLC jsou detailn popsny v [5]. rzen e a Operan systm Linux je voln iiteln systm Unix dostupn vetn zdrojovch c e esr y e y c e y kd. Vlastn Linux je pouze jdro operan systmu. Operan systm je ren v o u a c ho e c e s distribuc 1 , kter krom jdra operan systmu obsahuj tak dal utility a proch e e a c ho e e s gramy. Na zklad klasickho jdra (kernelu) byl nsledn vytvoen tzv. RT-Linux. a e e a a e r Jedn se o rozren kernelu o vlastnosti hard real-time operan systmu, piem a s c ho e rc z jsou zachovny pedchoz vhody normln jdra a p a r y a ho a rpadn zvolen distribuce ve e e smyslu existence a pouitelnosti ovlada za a utilit. Vlastn real-time ukoly pot z cu rzen e b s vy prioritou ne linuxov jdro jako real-time vlkna v pamt ovm prostoru ez ss z e a a e e jdra. a r s a e V asti 1 je uveden rozbor een a volba nsledn implementace. Kapitola 2 se c v krtkosti zabv histori a vlastnostmi operan systmu RT-Linux a monostmi a y a c ho e z jazyka C++ pi vyuit v RT-Linuxu. Kapitola 3 se zabv zpsobem zpracovn zdror z y a u a jovho programu pro PLC pomoc konenho stavovho automatu. Kapitoly 4, 5, 6 a 7 e c e e se vnuj zpracovn jednotlivch st zdrojovho kdu. Kapitola 2.1 popisuje zpsob e a y ca e o u implementace a podpory v operan systmu RT-Linux, vetn vytven ovlada c m e c e ar cu za pro vyuit v softwarovm PLC. Kapitola 9 popisuje vlastn utilitu plc2cpp a rzen z e jej vyuit pi tvorb softwarovho PLC. P z r e e rloha B uvd celkov pehled vlastnost a y r vytvoenho softwarovho PLC v porovnn s normou IEC-1131-3. V p r e e a rloze A je uve1

Nap. RedHat Linux, Debian, Slackware atp. r

OBSAH

OBSAH

den krtk nvod na zprovoznn RT-Linuxu. P a y a e rloha C se krtce zabv vytvoenm a y a r y ukzkovm PLC programem pro otek stejnosmrnho motorku. a y rzen ac e e

Kapitola 1 Nvrh een a r s


Norma IEC-1131-3 zabvaj se problematikou programovac jazyk pro PLC deny c ch u uje zkladn programovac jazyky uveden v tab.1.1. Jazyky IL, ST a LD maj tu a e vhodu, e jsou mezi sebou navzjem pevoditeln, pro vlastn kompilaci programu y z a r e sta implementace libovolnho z nich a nsledn vytvoen konverzn utility z ostatn c e a e r ch programovac jazyk. ch u Nzev jazyka a IL ST LD Popis Instruction List - jednoduch programovac y jazyk, obdoba assembleru. Structured Text - pokroilej programovac c s jazyk, obdoba jazyka Pascal i C. c Ladder diagram - grack nstroj pro proy a gramovn PLC, automat se v tomto p e a rpad programuje pomoc relovho schematu. e e

Tabulka 1.1: Pehled programovac jazyk pro PLC dle IEC-1131-3. r ch u Pro zpis programovho kdu PLC byl zvolen jazyk IL s podporou standardn a e o ch datovch typ, y u cselnch typ (pro cel i desetinn y u a a csla) a datovho typu pro uloen e z 1 asu . Z blok pro zpis vlastn PLC programu byly vybrny bloky uveden v tab.1.2. c u a ho a e Dle se budeme zabvat analzou monch een a nslednou volbou vlastn ima y y z y r s a plementace. Celkov lze problm eit bud jako interpret zdrojovho kdu pro PLC nebo jako e e r s e o peklada PLC kdu do jinho programovac jazyka, ze kterho bude nsledn zkomr c o e ho e a e pilovna binrn podoba programu, kter odpov a programu PLC. a a y d 1. Interpret PLC kdu - vhodou tohoto een je jednodu pouit z hlediska o y r s ss z uivatele. Odpad toti nutnost po kad zmn programu provdt jeho rekomz a z z e e e a e pilaci.
1

Tento datov typ je teba zejmna kvli denici spoutn PLC program v konguran bloku. y r e u se u c m

I NAVRH RESEN

Nzev bloku a FUNCTION

FUNCTION BLOCK

PROGRAM

CONFIGURATION

Popis Blok typu funkce. Jedn se o blok umonuj a z c volat kd PLC programu s alespo jedn o n m vstupn parametrem a nvratovou hodnom a tou, kter se po nvratu z voln ulo jako a a a z aktuln pracovn hodnota na zsobn a a ku. Pi r kadm voln jsou optovn inicializovny z e a e e a vechny promnn. s e e Funkn blok. Jedn se o blok, kter me c a y uz m libovoln poet vstupn vstupn a t y c ch, y ch vstupn-vstupn parametr. Pi pouit e y ch u r z funkn bloku se nejprve deklaruje jeho inc ho stance jako lokln promnn. Vnitn stav a e a r instance funkn bloku zstv zachovn c ho u a a a po dobu existence promnn, kterou je tato e e instance reprezentovna. a 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 bhu programu. V programu nen teba e r deklarovat promnnou, kterou je reprezene tovna pou a instance. a zvan Konguran blok. Hlavn blok denuj c c globln promnn a obsahuj denici a e e c spoutn jednotlivch blok typu program. se y u Tento blok nelze vyu pro zpis prozt a gramovho kdu v dnm z programovac e o za e ch jazyk. u

Tabulka 1.2: Programov bloky zvolen pro implementaci. e e Hlavn nevhodou een je velk nronost na interpret z hlediska jeho stability y r s a a c a odolnosti vi chybm v PLC programu. Interpret by toti v tomto p e uc a z rpad musel fungovat v rmci kernel-space RT-Linuxu. a 2. Peklada PLC kdu - vhododou tohoto een je zejmna monost vytvoit r c o y r s e z r pouze preprocesor do jinho jazyka a pro vlastn generovn binrn podoby PLC e a a programu vyu tento programovac jazyk. zt Nevhodou tohoto een je nutnost po kad zmn PLC programu tento proy r s z e e e gram znovu kompilovat. Pro implementaci softwarovho PLC zvol e me variantu .2. Dvodem je monost c u z 4

I NAVRH RESEN

vyu ji existuj kompiltor jazyka C nebo C++, kter je standardn vyu an pro zt z c a y e zv programovn st Linuxovho a RT-Linuxovho jdra. a ca e e a r e z u a e Po analze [5] je zejm, e zpsob zpisu programu pro PLC lze nejlpe reprezeny tovat kdem v jazyce C++ (podobnost funkn blok s objekty, monost denovat o c ch u z velk mnostv funkc pomoc petzench opertor v podprn knihovn atp.). e z r y a u u e e Zvolen een odpov a funkn e r s d c mu diagramu na obr.1.1. C lem diplomov prce e a tedy bude vytvoit konvertor programu pro PLC do jazyka C++. Vygenerovan kd r y o bude nsledn peloen do modulu jdra b ho v RT-Linuxu. Pro zjednoduen kona e r z a ezc s verze bude jet teba vytvoit podprnou knihovnu pouitelnou v oblasti jdra, kter se r r u z a a bude vyuita pi pekladu C++ kdu. z r r o

Obrzek 1.1: Funkn diagram softwarovho PLC a c e Z obrzku je patrn, e softwarov PLC bude rozdleno na dv hlavn sti, piem a e z e e e ca rc z peklad programu bude spoutn v user-space RT-Linuxu a vlastn softwarov PLC r se e pob jako real-time vlkna RT-Linuxu v rmci kernel-space. Krtk rozbor jedez a a a y notlivch vlastnost je uveden v stech 1.1 a 1.2. y ca Bli informace o RT-Linuxu a nkterch pouitch term zs e y z y nech z pedchoz sti lze r ca nalzt v kapitole 2.1, p e rpadn v manulovch strnkch RT-Linuxu. e a y a a

I NAVRH RESEN

Funkn st pro user-space c ca

1.1

Funkn st pro user-space c ca

User-space, nebo-li kontext ve kterm b uivatelsk programy bude vyuit pro bh e ez z e z e preprocesoru (konvertoru) zdrojovho kdu. Tento konvertor by ml splovat nsleduj e o e n a c poadavky: z Umonit pedzpracovn kdu ve zvolenm jazyce pro PLC do jazyka C++ v z r a o e takovm tvaru, aby bylo mon tento kd zkompilovat do modulu b ho v e z e o ezc RT-Linuxu. Monost tvorby a nslednho vyuit knihoven funkc a funkn blok pro z a e z c ch u opakovan vyuit e z .

1.2

Funkn st pro kernel-space c ca

Kernel-space, neboli kontext jdra operan systmu RT-Linux bude vyuit pro a c ho e z vlastn bh vytvoenho softwarovho PLC. Vygenerovan kd v C++ bude zkom e r e e y o pilovn jako modul jdra RT-Linuxu. Pro kompilaci bude teba vytvoit podprnou a a r r u knihovnu, kter bude m nsleduj vlastnosti: a t a c s a a ku z Reen emulace aktuln hodnoty zsobn (tzv. current result), kde je uloena hodnota posledn proveden operace. e Emulace adresovn p a rstupu do pamti ve stylu PLC vetn p e c e rstupu na extern za dle adresy. rzen Monost deklarace promnnch ve stylu PLC, tj. vetn p z e y c e rpadn specikace e absolutn adresy, na kter se promnn nachz e e a a . Monost deklarovat parametry funkc funkn blok a programovch blok z , c ch u y u tak, aby bylo mon je piazovat dle syntaxe PLC. z e rr Monost modulrn vytvet ovladae za a tyto ovladae nsledn regz a e ar c rzen c a e istrovat na konkrtn adresy vstup/vstup softwarovho PLC. e u y u e

Kapitola 2 RT-Linux
a y c e Tato kapitola uvd v sti 2.1 zkladn informace tkaj se RT-Linuxov modikace a ca jdra a v sti 2.2 diskutuje monosti a omezen vyuit jazyka C++ v rmci RTa ca z z a Linuxu.

2.1

Princip innosti RT-Linuxu c

V tto sti bude v krtkosti popsn princip innosti RT-Linuxu. Informace zde uveden e ca a a c e jsou z any zejmna z [9], p sk e rpadn z [1]. e

2.1.1

Denice hard real-time systmu e

Tzv. hard real-time systm je systm, ve kterm je zarueno asov pesn spoutn e e e c c e r e se jednotlivch uloh. Kad uloha m denovnu svoji prioritu, se kterou je spoutna a y z a a a se periodu spoutn s e . Perioda spoutn je v podstat tzv. dead-line, tj. nejpozdj as, do kterho mus se e e s c e bt dan real-time uloha dokonena, aby mohla bt opt sputna. y a c y e se Priorita ulohy denuje dleitost ulohy z hlediska plnovae proces. u z a c u

2.1.2

Popis RT-Linuxu

RT-Linux je hard real-time operan systm uren pro robot a technologickch c e c y rzen u y proces, asov nron men a jin ulohy nron na as. u c e a c a er e a c e c Dle nronosti vykonvan ulohy a mnostv spoutnch vlken lze doshnout a c a e z se y a a periody spoutn v du mikrosekund. s e ra Vhodou RT-Linuxu je, e roziuje monosti pouit klasickho unixovho systmu y z sr z z e e e o hard real-time vlastnosti pi zachovn pvodn funknosti systmu. r a u c e

RT-LINUX

Princip innosti RT-Linuxu c

2.1.3

Princip innosti c

Vlastn systm je implementovn jednak jako patch1 klasickho Linuxovho jdra, kter e a e e a y zajit uje obsluhu peruen ped vlastn Linuxovm kernelem. Druh st jsou dys r s r m y a ca namicky nahrvan moduly, kter po svm zaveden zajit uj vlastn hard real-time a e e e s funkcionalitu (plnovn proces, poskytnut synchronizan primitiv, monosti koa a u c ch z munikace s user-space st linuxu atd.). ca Jak vlastn RT-Linuxov systm funguje je dobe patrn z obr.2.1. y e r e

Obrzek 2.1: Blokov schema funcionality RT-Linuxov extenze. a e e Cel systm funguje nsledovn: y e a e Po zaveden RT-Linuxovch modul jsou vechna peruen odchytvna RT y u s r s a a Linuxem. Pokud je vyvolno peruen je zpracovno RT-Linuxem, v p e, e je peruen a r s , a rpad z r s vyu ano nkterou real-time ulohou, je vyvoln handler peruen tto ulohy. zv e a r s e
Patchem je obvykle nazvna soubor, obsahuj upravu i oprava zdrojovho kdu njakho y a c c e o e e programu. Aplikac patche na zdrojov soubory pvodn programu je pak z ana nov, upraven e u ho sk a a verze.
1

RT-LINUX

RT-Linux a C++

Pokud existuj naplnovan real-time ulohy ekaj na voln as procesoru, pak a e c c yc jsou sputny (v zvislosti na priorit). se a e Pokud nen ve front dn real-time uloha a procesor je voln, je pedno e za a y r a rzen pvodn u mu linuxovmu jdru. e a Pvodn linuxov jdro vyu a peruen kter jsou emulovna RT-Linuxem2 . u e a zv r s , a a

2.1.4

Vyuit matematickho koprocesoru z e

V p e, e real-time vlkno chce vyu rpad z a zvat matematick koprocesor (dle jen FPU), y a 3 je nutno tuto skutenost oznmit plnovai proces . Plnova nsledn zajist pi c a a c u a c a e r pep an takovho vlkna uloen stavu registr FPU a jejich p r n e a z u rpadn obnoven ve e chv kdy vlkno pokrauje ve svm bhu. li, a c e e Pokud plnova proces nen informovn, e vlkno vyu a FPU me dochzet a c u a z a zv uz a k navracen chybnch vsledk vpotu. K tomu me doj z nsleduj ch dvod: y y u y c uz t a c u u 1. FPU v jeden okamik vyu a program z user-space a zrove real-time vlkno. z zv a n a 2. FPU v jeden okamik vyu alespo dv real-time vlkna. z zvaj n e a 3. FPU je v jeden okamik poadovno nkolika real-time vlkny i programy z userz z a e a space.

2.2

RT-Linux a C++

V RT-Linuxu je mono vyu z zvat programovac jazyka C++ pro tvorbu real-time ho vlken. Pouit vak m jist omezen kter vyplvaj ji p a z s a a , a y z rmo z principu, jakm y systm funguje. e Nsleduj sti se postupn zabvaj jednotlivmi konstrukcemi jazyka C++ a jea c ca e y y ast 2.2.1 diskutuje pouit dynamick alokace pamti, z e e jich pouit v RT-Linuxu. C z m st 2.2.2 krtce diskutuje pouit exceptions4 a st 2.2.3 diskutuje pouit temca a z ca z plates(ablon). s

2.2.1

Dynamick alokace pamti a e

Problm pouit dynamick alokace pamti lze rozdlit na st, kter se tk alokovn e z e e e ca a y a a pamti bhem inicializace real-time modulu a problematiku dynmick alokace pamti e e e e bhem vlastn bhu real-time procesu (tj. alokace pamti p z b ho RT vlkna). e ho e e rmo ezc a
V podstat lze innost pvodn linuxovho jdra pirovnat ke zvltn e c u ho e a r as mu real-time vlknu RTa Linuxu, b mu s nejni real-time prioritou. ezc zs 3 To je mon zajistit bud informac pi zakldn real-time vlkna nebo nastaven stejnho z e r a a a m e parametru za bhu real-time vlkna. e a 4 Tj. vyj mek pro oeten chybovch stav pi bhu programu s r y u r e
2

RT-LINUX

RT-Linux a C++

Oba tyto problmy lze eit za pomoci petzen C++ opertoru new a delete, e r s r a p rpadn opertor new[] a delete[] pro alokace a uvolovn pamti dynamickch pol e a u n a e y . bhem inicializace, p V p e, e potebujeme dynamicky alokovat pamt e rpad z r e rpadn e deinicializace modulu, sta petzit standardn C++ opertory uveden ve na voln c r a e ys a linuxovho jdra kalloc(), p e a rpadn kfree(). Toto petzen je ji standardn provedeno e r z e y ca v souboru rtl cpp.h, kter je soust distribuce RT-Linux. Za pedpokladu, e je teba dynamicky alokovat pamt za bhu real-time vlkna, r z r e e a je teba si vytvoit vlastn sprvu dynamick pamti. Dvodem je zejmna monost r r a e e u e z vzniku kolize pi voln standardn systmovch voln r a ch e y a . Vlastn dynamick sprva pamti by mla fungovat nsleduj m zpsobem: a a e e a c u 1. V okamiku inicializace RT modulu naalokuje pamt z oblasti jdra pomoc voln z e a a kmalloc(). Velikost takto alokovan pamti by mla odpov e e e dat alespo maximln n a potebn velikosti pamti, kterou budeme cht dynamicky alokovat. Bloky tto r e e t e pamti mus bt alokovn ve fyzick pamti po ce. e y a e e cta 2. Petz opertory new, new[], delete, delete[] tak, aby volaly funkce zajit uj r a s c alokaci a dealokaci pamti v rmci pamt ovho bloku naalokovanho bhem e a e e e e zavdn RT modulu (viz. krok 1). a e 3. Bhem deaktivace modulu provede uvolnn pamt ovho bloku, kter byl z an e e e e y sk ov oblasti linuxovho jdra v okamiku zaveden modulu do pamti. z pamt e e e a z e

2.2.2

Oeten chyb - exceptions s r

Vyj mky, nebo tak exceptions, nelze bohuel v pamt ovm prostoru linuxovho jdra e z e e e a a tedy ani v oblasti, kter je vyu ana RT rozren vyu Hlavn dvodem je, a zv s m zt. m u e linker optimalizuje kd pro voln vyj z o a mek. Proto by bhem linkovn modulu jdra e a a musely bt znmy vechny moduly, kter se budou v pamti nachzet. y a s e e a Dal dvodem je, e linuxov jdro je psna ist v jazyce C a ji bhem jeho sm u z e a a c e z e kompilace jsou vyj mky zakzany pomoc parametru pekladae. a r c

2.2.3

Pouit C++ templates z

e Templates jako vlastnost jazyka C++ lze bez obtz vyu nebot bhem kompilace je zt, takov kd nahrazen skutenm datovm typem vetn vech kontrol bhem kompiy o c y y c e s e lace. Bohuel nelze jednodue vyu t implementovanch v knihovn STL5 . Dvodem z s zt rd y e u jsou dynamick alokace pamti, kter jsou v tchto t ach vyu e e e e rd zvany. Omezen z toho plynouc jsou uvedena v sti 2.2.1. Uritou monost jak tto knihovny vyu by ca c z , e zt zejm byla vlastn rekompilace ze zdrojovch kd se sprvn petzenmi opertory r e y o u a e r y a pro sprvu pamti. a e
5

Standard Template Library.

10

Kapitola 3 Lexikln analza zdrojovho kdu a y e o


V tto sti se budeme zabvat vlastn zpracovn zdrojovho kdu v jazyce IL, e ca y m a m e o tedy vytvoen kompiltoru (pekladae). Dle [7] lze peklada reprezentovat pomoc r m a r c r c konenho stavovho automatu. V UNIXovch systmech jsou k dispozici programy c e e y e LEX a YACC, kter umonuj takov stavov automat pro zpracovn zdrojovho e z y y a e ast 3.1 tto kapitoly se e kdu vytvoit na zklad zpisu pravidel v p snm tvaru. C o r a e a rslu e zabv popisem programu LEX, kter se vyu a pro vytvoen lexikln analyzeru y a y zv r a ho a y a y (viz. obr.3.1). Cst 3.2 se zabv popisem jazyka pomoc pravidel zadanch programu ast 3.3 popisuje princip, d e YACC (na obr.3.1 to odpov a syntaktickmu analyzeru). C jakm oba ve uveden programy spolupracuj pi tvorb pekladae. y ys e r e r c

Obrzek 3.1: Kompilan sekvence. a c

11

I LEXIKALN ANALYZA ZDROJOVEHO KODU

Lexikln analza zdrojovho kdu a y e o

3.1

Lexikln analza zdrojovho kdu a y e o

Pro lexikln analzu zdrojovho kdu bude vyuit program LEX. Informace, kter jsou a y e o z e uvedeny v tto sti jsou erpny z [8] a [4]. Program LEX slou k vytvoen parseru e ca c a z r zdrojovho kdu a pevodu klcovch slov na tzv. tokeny. Zrove umonuje vytvoit e o r y a n z r stavov automat denuj monou nslednost rznch klcovch slov ve zdrojovm y c z a u y y e kdu. o Vytvoen stavov automat me pracovat dvma zpsoby: r y y uz e u 1. Stavov automat pi pechodu do dal stavu pedchoz stav zapomene. y r r sho r 2. Stavov automat ukld stavy na zsobn Zmna stavu je mon dvma smry: y a a a k. e z a e e Pechod do novho stavu, pvodn stav je uloen na zsobn r e u z a k. Z aktuln stavu se pechz do stavu uloenho na zsobn a ho r a z e a ku, aktuln a stav je zapomenut.

3.1.1

Struktura zdrojovho kdu pro LEX e o

Vstupn soubor pro LEX je rozdlen do tech st tak, jak je patrno z ukzky 3.1. e r ca a Jednotliv sti jsou od sebe oddleny pomoc znaek %%. e ca e c

... definice maker a vlastnost analyztoru ... a %% ... definice pravidel ... %% ... funkce v jazyce C/C++ ...

Ukzka 3.1: Struktura vstupn souboru pro LEX. a ho Prvn st obsahuje makra pro zjednoduen denin regulrn vraz pro vyh ca s c ch a ch y u ledvn klcovch slov, parametry parseru a p a a y rpadn zdrojov kd v jazyce C/C++. e y o V tab.3.1 je uveden pehled klcovch slov, kter mohou bt v prvn sti obsaeny. r y e y ca z Druh st vstupn souboru obsahuje pravidla ve tvaru regulrn vraz pro a ca ho a ch y u zpracovn zdrojovho kdu a denici akc v jazyce C/C++, kter pravidlu odpov . a e o e daj Pravidlo me bt aktivn pouze v denovanch stavech, akce me obsahovat pechod uz y y uz r do stavu novho nebo do stavu uloenho na zsobn e z e a ku. Struktura pravidel je patrn a z ukzky 3.2. a Prvn st pravidla je nepovinn a denuje stavy, ve kterch je pravidlo platn, ca a y e p rpadn stavy, ve kterch platn nen Zde zle na tom, jak je denovn stav v prvn e y e . a z a sti vstupn souboru. ca ho 12

I LEXIKALN ANALYZA ZDROJOVEHO KODU

Lexikln analza zdrojovho kdu a y e o

Denice Nzev reg. vraz a y

%s

%{ ... %}

%option ...

Popis Peddenovan regulrn vrazy, kter lze r e a y e pou dle pro zjednoduen denin zt a s c ch pravidel pro vyhledvn token ve zdroa a u jovm kdu. e o Denice stav, ve kterch se me nachzet u y uz a vygenerovan stavov automat. Na jednom y y dku se me nachzet deklarace v stav ra uz a ce u jejich jmna jsou oddlena mezerou. z e e Ohranien zdrojovho kdu v jazyce c e o C/C++, kter bude vloen tak, jak je y z napsn, na zatek vygenerovanho zdroa ca e jovho kdu parseru. e o Parametry vygenerovanho parseru, pokud e obsahuje klcov slovo stack, jsou stavy e parseru ukldny na zsobn a a a k.

Tabulka 3.1: Pehled klcovch slov pouitelnch v prvn sti denin souboru pro r y z y ca c ho LEX.

[<stav1[,stav2[,...]]>]reg.vraz { y akce v jazyce C; }

Ukzka 3.2: Struktura pravidel pro analzu zdrojovho kdu. a y e o Druh st je regulrn vraz, kter denuje, jak dan klcov slovo, konstanta a ca a y y e e i jin soust zdrojovho kdu je zapsna. Zkladn struktura regulrn vraz je c a ca e o a a a ch y u popsna v tab. 3.2, podrobnj informace o regulrn vrazech 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 snmu regulrn rpad z y ca a d rslu e a mu vrazu, je tento text uloen do promnn YYTEXT a lze ho pou v sti pro zpis y z e e zt ca a p sn akce, kter se vyvol pro dan vraz. rslu e a a y y V sti pro zpis akce lze zapsat libovolnou akci nebo nepsat nic, pokud se m ve, ca a a s co odpov a danmu regulrn vrazu ignorovat. V p e, e chceme spolupracovat d e a mu y rpad z s programem YACC, me akce vypadat nap. jako v ukzce 3.3. uz r a Ukzka 3.4 uvd cel vstupn soubor pro LEX obsahuj konkrtn pravidlo, vetn a a y c e c e akce v jazyce C. Pravidlo detekuje token jako celo cselnou konstantu ve zdrojovm e kdu, pokud se stavov automat nachz ve stavu any value. o y a

13

I LEXIKALN ANALYZA ZDROJOVEHO KODU

Lexikln analza zdrojovho kdu a y e o

Regulrn vraz a y LD LD LD$ LD/([ ]+)

([0-9]+) {SPACE}

Popis Regulrn vraz je slovo LD. a y Regulrn vraz je slovo LD na zatku a y ca dku. ra Regulrn vraz je slovo LD na konci dku. a y ra Regulrn vraz je slovo LD nsledovan lia y a e bovolnm potem mezer nebo tabultor, y c a u st za znakem / nen uloena v promnn ca z e e YYTEXT a je ponechna v bueru pro dal a s zpracovn a . Regulrn vraz je skldaj se z liboa y cslo a c volnho potu e c cslic. Regulrn vraz odpov a denici z prvn a y d ho bloku zdrojovho souboru s nzvem SPACE. e a

Tabulka 3.2: Struktura regulrn vraz v denici pravidel pro LEX. a ch y u

// pokud se prv nachzm ve stavu var_declaration a e a if (YY_START == var_declaration) { // vyzvedni aktuln stav ze zsobnku (dojde k pesunu a a r // do stavu pedchozho) r yy_pop_state(); // a ulo na zsobnk stav var_data_type z a yy_push_state(var_data_type); // ulo hodnotu nalezenho regulrnho vrazu do promnn z e a y e e // pro YACC yylval.string = strdup(yytext); // a vrat informaci, e jsi nalezl datov typ z y // promnn e e return TOK_VAR_DATATYPE; } // nejsem v bloku deklarac promnnch, e y // ale oekvm deklaraci datovho typu c a a e // funkce yylval.string = strdup(yytext); return TOK_FUNCTION_DATATYPE; }

Ukzka 3.3: Zpis akce pro nalezen regulrn vraz ze zdrojovho kdu. a a y a y e o

14

I LEXIKALN ANALYZA ZDROJOVEHO KODU

Popis gramatiky jazyka

%{ #include <stdio.h> // odkaz na potadlo dk c ra u extern int iLineCount; %} // pouij zsobnk pi zmn stavu z a r e e %option stack // definice povolench stav y u %s var_init %% // pokud jsi ve stavu, kdy je oekvna inicializace c a a // promnn, povol detekci celho 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 potadlo a jinak ra s c // nic nedlej e \n ++iLineCount; %%

Ukzka 3.4: Ukzka denice pravidla pro program LEX. a a

3.2

Popis gramatiky jazyka

Pro popis gramatiky jazyka lze vyu systm YACC, kter umonuje ve spoluprci zt e y z a s programem LEX denovat velmi jednodue pravidla , jak dan programovac jazyk s y vypad, tj. jak umonuje vytvet programtorsk konstrukce a zpisy. a e z ar a e a Informace zde uveden jsou erpny z [8] a [4]. e c a

3.2.1

Struktura zdrojovho souboru pro YACC e

Struktura zdrojovho souboru pro systm YACC je opt rozdlena do tech st tak, e e e e r ca jak je patrno z obrzku 3.5. Jednotliv sti jsou od sebe oddleny pomoc znaek %%. a e ca e c Prvn st obsahuje denici token pro vyhledvn (z tchto denic jsou pot ca u a a e e vygenerovny uniktn identiktory jejich symbolick nzvy odpov nzvm toa a a z e a daj a u ken), prioritu opertor apod. V tab.3.3 je uveden pehled zkladn p u, kter u a u r a ch rkaz e mohou bt v tto sti obsaeny. y e ca z ast pro denici pravidel obsahuje ji p C z rmo jednotliv pravidla, kter odpov a a daj konstrukc kter lze v jazyce vytvoit. Kad takov pravidlo m strukturu dle m, e r z e e a obr.3.6. Vznam jednotlivch prvk je nsleduj : y y u a c | Denuje, e nsleduj st pravidla je nepovinn. z a c ca a 15

I LEXIKALN ANALYZA ZDROJOVEHO KODU

Popis gramatiky jazyka

... definice ... %% ... definice pravidel pro gramatiku jazyka ... %% ... funkce v jazyce C ...

Ukzka 3.5: Struktura vstupn souboru pro program YACC. a ho Denice %token jmno e %{...%} Popis Denice tokenu s nzvem jmno a e Blok obsahuj kd v jazyce C/C++, kter c o y bude po zpracovn vloen na zatek vygena z ca erovanho kdu. e o Nvratov hodnota yylval je typu union a je a a urena nkterm datovm typem uvedenm c e y y y v unionu. Denuje token s datovm typem iData (dle y denice v unionu). Denice priority opertoru. a Denice priority opertoru. a

%union{int iData;char *pData;}

%token <iData> TOK INTEGER %left , %right ,

Tabulka 3.3: Zkladn p a rkazy pouiteln v bloku denic vstupn souboru pro YACC. z e ho

nazev: [|] nazev2 [{ ... programov kd v jazyce C/C++ ... y o }] [[|] nazev3] ;

Ukzka 3.6: Struktura pravidel pro denici jazyka v programu YACC. a nazev Nzev pravidla (bez diakritiky) oddlen dvojtekou od jeho denice. a e y c nazev2 Nzev tokenu denovanho v sti denic na zastku vstupn souboru pro a e ca ca ho 16

I LEXIKALN ANALYZA ZDROJOVEHO KODU

Princip spoluprce program LEX a YACC a u

YACC nebo nzev jinho pravidla. Pro vytven rekurzivn pravidel me bt a e ar ch uz y stejn i jako nazev. y { ... } Ohraniuje blok obsahuj kd v jazyce C/C++, kter bude vykonn v p e, c c o y a rpad e pravidlo bude obsaeno ve vstupn zdrojovm souboru. z z m e ; Oznaen konce bloku, kter denuje pravidlo nazev. c y Programov kd v jazyce C/C++ denuje akce, kter budou pi aplikaci pravidla y o e r vyvolny. V p e, e nalezen token m denovn datov typ, lze k hodnot pedan a rpad z y a a y e r e z programu LEX pistupovat pomoc konstrukce $x, kde x je denuj poad r cslo c r tokenu v denici pravidla. V p e pravidla z obr.3.6 by pro token nazev2 s derpad novanm typem odpov y dala hodnota $1. Do cslovn poad se zahrnuj i programov a r e bloky uzaven mezi {}. r e Na obr.3.7 je uvedena krtk komentovan ukzka denice nkolika jednoduchch a a a a e y pravidel.

3.3

Princip spoluprce program LEX a YACC a u

Tato st popisuje spoluprci program LEX a YACC pi vytven pekladae navrenho ca a u r ar r c z e ar e e jazyka. Princip innosti je vysvtlen na obr.3.2 pomoc vytvenho softwarovho PLC c e (vsledkem bude program plc2cpp, kter bude pevdt kd ve zvolenm jazyce pro y y r a e o e PLC do jazyka C/C++). Princip spoluprce obou program lze popsat nsledovn: a u a e 1. Nejprve vytvo rme lexikln analyzer pomoc programu LEX, kter vyhled ve a y a zdrojovm textu tzv. tokeny (tj. denovan klcov slova). e a a 2. Nsledn denujeme pomoc programu YACC syntaxi navrenho jazyka (tj. a e z e mon kombinace vyhledanch token). z e y u 3. Zkompilujeme vstupn soubor pro program YACC. Vsledkem je hlavikov sou y c y bor y.tab.h, kter denuje pro jednotliv nzvy token y e a u cseln hodnoty (makra) e v jazyce C/C++ a soubor y.tab.c, kter obsahuje vlastn syntaktick analyztor y y a jazyka. 4. Zkompilujeme vstupn soubor pro program LEX. Ten ve vygenerovanm kdu e o vyu a soubor y.tab.h vygenerovan v pedchoz kroku. Vsledkem je soubor zv y r m y lex.yy.c, kter obsahuje lexikln analyzer v jazyce C/C++. y a 5. Zkompilovn soubor vygenerovanch v pedchoz krok spolu s dal a m u y r ch u smi podprnmi stmi z ame poadovan kompiltor. V naem p e plc2cpp. u y ca sk z y a s rpad 6. Zkompilovan program z pedchoz krok je ji vytvenm kompiltorem, y r ch u z ar y a kter lze vyu ke kompilaci zdrojovho kdu ve vytvenm jazyce. V naem y zt e o ar e s p e tedy zdrojov kd v implementovanm programovac jazykem pro PLC. rpad y o y m 17

I LEXIKALN ANALYZA ZDROJOVEHO KODU

Princip spoluprce program LEX a YACC a u

// Definuj token pro piazen hodnoty r r %token TOK_SET // Piazovan hodnota je bud cel slo r r a e c // nebo nulou ukonen etzec c y r e %union { int number; char *string; } // Definuj token s urenm datovm typem pro nvrat c y y a // celoseln hodnoty c e %token <number> VAL_INT // Definuj token s urenm datovm typem pro nvrat c y y a // nulou ukonenho etzce c e r e %token <string> VAL_STR %% // Definuj zkladn pravidlo pro detekci jednotlivch a y // blok ve vstupnm souboru. u blocks: // dn z nsledujcch blok v pravidle nen povinn Za y a u y | // Po nalezen bloku pro piazen celho sla me nsledovat r r e c uz a // dal vstupn blok (rekurze)) s set_int blocks | // Po prvnm bloku piazujcm etzec ji nensleduje 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("etzcov hodnota: %s", $1); R e a } ; %%

Ukzka 3.7: Ukzka denice pravidla ve zdrojovm kdu pro YACC. a a e o

18

I LEXIKALN ANALYZA ZDROJOVEHO KODU

Princip spoluprce program LEX a YACC a u

Obrzek 3.2: Princip tvorby a funkce pekladae jazyka denovanho pomoc program a r c e u LEX a YACC. Zde uveden vlastnosti a konstrukce obsahuj pouze malou st monost kter proe ca z , e gramy YACC a LEX nab . V podstat shrnuje vlastnosti vyuit bhem konstrukce zej e z e e softwarovho PLC. Podrobnj informace lze nalzt v uveden literatue. e e s e e r

19

Kapitola 4 Zpracovn promnnch PLC a e y programu


Tato st se zabv zpracovn promnnch a parametr funkc funkn blok a ca y a a m e y u , c ch u programovch blok. Cst 4.1 nastiuje princip zpracovn promnnch v programu, y u a n a e y y a y e y ca r e st 4.2 se zabv deklarac jednotlivch promnnch, st 4.3 rozeb a jednotliv ca a a y c mon bloky promnnch a st 4.4 uvd zkladn principy tkaj se implementace z e e y ca a zpracovn promnnch v softwarovm PLC. a e y e

4.1

Princip zpracovn promnnch a e y

Promnn v PLC programu se zapisuj v rmci blok promnnch. Kad blok promnnch e e a u e y z y e y m jin vznam a ve svm tle obsahuje deklaraci jedn nebo v promnnch tak, jak a y y e e e ce e y y y u e y y s je patrno z ukzky 4.1. Vznamem jednotlivch blok promnnch se zabvaj dal a sti tto kapitoly. ca e Princip zpracovn promnnch v rmci PLC programu prob a nsleduj m zpsobem: a e y a h a c u 1. Detekuj blok deklaruj promnn (viz. st 4.2). c e e ca 2. Najdi deklaraci promnn a ukldej jej parametry do kontejneru CContainere e a Variable: (a) Separuj nzev promnn, peved ho na mal p a e e r a smena a vlo do kontejneru. z (b) Detekuj, zda deklarace promnn obsahuje specikaci adresy, pokud ano, e e ulo adresu v kontejneru. z (c) Identikuj datov typ promnn, pokud se jedn o funkn blok, sdl kony e e a c e tejneru poadavek na vloen hlavikovho souboru s p snm funkn z z c e rslu y c m blokem. (d) Pokud se jedn o standardn datov typ, detekuj p a y rpadnou deklaraci inicializan hodnoty. V p e, e je promnn inicializovna, ulo inicializan c rpad z e a a z c hodnotu do kontejneru. 20

I ZPRACOVAN PROMENNYCH PLC PROGRAMU

Deklarace promnnch e y

3. Existuje-li deklarace dal promnn, opakuj ve od bodu 2. s e e s 4. Detekuj konec bloku promnnch, uzavi kontejner promnnch a pidej ho do e y r e y r kontejneru obsahuj ho jednotliv kontejnery promnnch platnch v aktuln c e e y y a m programovm bloku. e

4.2

Deklarace promnnch e y

Jednotliv promnn se deklaruj v nkolika typech blok s rznm vznamem. Jede e e e u u y y notliv druhy blok promnnch jsou povoleny v rznch kontextech PLC kdu. Promnn e u e y u y o e e se zapisuj zpsobem uvedenm v ukzce 4.1. u y a

... Zatek bloku promnnch ca e y ... typ [AT adresa]: Nzev promnn [:= hodnota]; a e e ... Konec bloku promnnch e y ...

Ukzka 4.1: Deklarace promnn a e e Kad promnn mus obsahovat datov typ a nzev. Pokud je datov typ promnn z a e a y a y e e 1 jeden ze zkladn datovch typ uvedench v tab.4.1 , me deklarace promnn oba ch y u y uz e e sahovat jet klcov slovo AT nsledovan adresou ve tvaru uvedenm v tab.4.3. Dle s e e a e e a v tomto p e me deklarace obsahovat inicializan hodnotu promnn oddlenou rpad uz c e e e pomoc :=. Jako datov typ me bt pouit tak nzev funkn bloku, zde je tedy teba y uz y z e a c ho r tak zajistit, aby se vygeneroval dek pro proveden include p snho hlavikovho e ra rslu e c e souboru obsahuj ho deklaraci funkn bloku. Cel deklarace je ukonena pomoc ;. c c ho a c a rklad deklarace nkolika promnnch tak,aby byl patrn konkrtn e e y y e Ukzka 4.2 uvd p a zpis promnn v programu. Pro vt nzornost jsou zapsny v rmci bloku lokln a e e e s a a a a ch promnnch. e y

4.2.1

P e adresy rm

V tab.4.2 je uvedeno nkolik ukzek p ych adres pro PLC. Adresa se vdy skld z e a rm z a a prexu, kter denuje typ adresy nsledovan prexem, denuj m velikost pamt ovho y a y c e e bloku, ktermu adresa odpov a. e d
1

V tabulce jsou uvedeny pouze datov typy podporovan ve vytvenm softwarovm PLC. e e ar e e

21

I ZPRACOVAN PROMENNYCH PLC PROGRAMU

Deklarace promnnch e y

Datov typ y BOOL SINT INT DINT USINT UINT UDINT REAL TIME BYTE WORD DWORD

Velikost 1 8 16 32 8 16 32 64 8 16 32

Poznmka a

Dostupn pouze jako konstanta uruj pey c c riodu spoutn programu. se

Tabulka 4.1: Pehled zkladn datovch typ pouitelnch 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

Ukzka 4.2: Ukzka deklarace jednotlivch promnnch. a a y e y Adresa %QX35, %Q35 %MX3.5 %IW23 Poznmka a Vstupn bit 37 y 5 bit 3 bytu ve vnitn pamti r e Vstupn slovo 23

Tabulka 4.2: Ukzky zpisu adres pro PLC. a a Pehled jednotlivch prex pro adresaci pamt ovch m PLC je uveden v tab.4.3. r y u e y st

22

I ZPRACOVAN PROMENNYCH PLC PROGRAMU

Pehled blok pro deklaraci promnnch r u e y

Adresa Typ Q I M Velikost X Nic B W D L

Poznmka a Adresa vstupu y Adresa vstupu Adresa ve vnitn pamti r e Adresa Adresa Adresa Adresa Adresa Adresa specikuje specikuje specikuje specikuje specikuje specikuje jeden bit jeden bit jeden byte (8bit) u jedno slovo (16bit) u dvojit slovo (32bit) e u dlouh slovo (64bit) e u

Tabulka 4.3: Zpsob zpisu p ych adres pro PLC. u a rm

4.3

Pehled blok pro deklaraci promnnch r u e y

Nsleduj st se zabv vznamem a zpsobem zpisu jednotlivch typ blok a c ca y a y u a y u u promnnch. Informce zde uveden jsou erpny z [5]. e y e c a Norma [5] denuje nsleduj typy promnnch: a c e y Globln promnn - pou se pro zpis promnnch dostupnch v celm a e e zvaj a e y y e PLC programu. Lokln promnn - pou se pro deklaraci lokln promnnch v rmci a e e zvaj a ch e y a funkce, funkn bloku nebo bloku program. c ho Extern promnn - pou se k denici odkazu na globln promnn v e e zvaj a e e rmci blok funkce, funkn blok nebo blok program. a u c Vstupn promnn - pou se pro deklaraci vstupn parametr funkc e e zvaj ch u , funkn blok nebo blok typu program. c ch u u Vstupn promnn - pou se pro deklaraci vstupn parametr funkn y e e zvaj y ch u c ch blok a blok typu program. u u Vstupn/vstupn promnn - zastupuj ulohu parametr pedvanch refe y e e u r a y erenc v rmci blok program a funkn blok. a u c ch u

4.3.1

Globln promnn a e e

Globln promnn je mon deklarovat v rmci bloku CONFIGURATION, p a e e z e a rpadn e v rmci podbloku kongurace RESOURCE. Globln promnn jsou nsledn dosa a e e a e tupn v celm PLC programu, piem z blok typu FUNCTION, PROGRAM a e e rc z u 23

I ZPRACOVAN PROMENNYCH PLC PROGRAMU

Pehled blok pro deklaraci promnnch r u e y

FUNCTION BLOCK je teba se na n odkzat pomoc deklarace VAR EXTERNAL r e a (viz.4.3.2). Zpsob deklarace bloku globln promnnch je patrn z ukzky 4.3. u a ch e y y a

... nadazen blok ... r y VAR_GLOBAL ... Deklarace jednotlivch promnnch; y e y ... END_VAR ... pokraovn nadazenho bloku ... c a r e

Ukzka 4.3: Deklarace globln promnnch v programu. a a ch e y

4.3.2

Extern promnn e e

Blok extern promnnch se vyu a k odkazu na globln promnnou, kterou chceme ch e y zv a e vyu v rmci blok PROGRAM, FUNCTION a FUNCTION BLOCK. V tomto zt a u bloku lze pou pouze deklaraci promnn bez specikace adresy, kde se nachz ani zt e e a , deklarovat inicializan hodnotu - tu je mono specikovat v rmci deklarace promnn c z a e e v bloku VAR GLOBAL. Zpsob deklarace bloku globln promnnch je patrn z u a ch e y y ukzky 4.4. a

... nadazen blok ... r y VAR_EXTERNAL ... Deklarace jednotlivch promnnch; y e y ... END_VAR ... pokraovn nadazenho bloku ... c a r e

Ukzka 4.4: Deklarace extern promnnch v programu. a ch e y

4.3.3

Lokln promnn a e e

Lokln promnn lze pou pouze v rmci programovch blok PROGRAM, FUNCa e e zt a y u TION a FUNCTION BLOCK. Promnn deklarovan jako lokln maj platnost pouze e e e a v programovm bloku, kde jsou deklarovny. e a 24

I ZPRACOVAN PROMENNYCH PLC PROGRAMU

Pehled blok pro deklaraci promnnch r u e y

V p e funkn blok a blok typu program si lokln promnn uchovvaj rpad c ch u u a e e a svoji hodnotu z pedchoz voln po celou dobu existence instance funkn bloku. r ho a c ho Zpsob deklarace bloku lokln promnnch je patrn z ukzky 4.5. u a ch e y y a

... nadazen blok ... r y VAR ... Deklarace jednotlivch promnnch; y e y ... END_VAR ... pokraovn nadazenho bloku ... c a r e

Ukzka 4.5: Deklarace lokln promnnch v programu. a a ch e y

4.3.4

Vstupn promnn e e

Bloky vstupn promnnch lze vyu ch e y zvat v rmci blok PROGRAM, FUNCTION a u a FUNCTION BLOCK. V jejich deklaraci nelze specikovat adresu a vyu se jako zvaj vstupn parametry ve uvedench blok. Zpsob deklarace bloku vstupn promnnch ys y u u ch e y je patrn z ukzky 4.6. y a

... nadazen blok ... r y VAR_INPUT ... Deklarace jednotlivch promnnch; y e y ... END_VAR ... pokraovn nadazenho bloku ... c a r e

Ukzka 4.6: Deklarace vstupn promnnch v programu. a ch e y

4.3.5

Vstupn promnn y e e

Vstupn promnn lze pou pouze v rmci blok PROGRAM a FUNCTION BLOCK. y e e zt a u V jejich deklaraci nelze specikovat adresu a vyu se pro pedvn hodnot z zvaj r a a aktuln programovho bloku do bloku nadazenho. Zpsob deklarace bloku vstupn a ho e r e u y ch promnnch je patrn z ukzky 4.7. e y y a 25

I ZPRACOVAN PROMENNYCH PLC PROGRAMU

Implementace promnnch e y

... nadazen blok ... r y VAR_OUTPUT ... Deklarace jednotlivch promnnch; y e y ... END_VAR ... pokraovn nadazenho bloku ... c a r e

Ukzka 4.7: Deklarace vstupn promnnch v programu. a y ch e y

4.3.6

Vstupn/vstupn promnn e y e e

Bloky vstupn/vstupn promnnch lze pou pouze v rmci blok PROGRAM e y ch e y zt a u a FUNCTION BLOCK. V deklaraci jednotlivch promnnch nelze specikovat adresu y e y a zastupuj ulohu parametr pedvanch referenc Tyto parametry lze vyu jak pro u r a y . zt pedn hodnoty do volanho bloku, tak pro z an tto hodnoty po ukonen voln r a e sk e c a p snho bloku. Zpsob deklarace bloku vstupn/vstupn promnnch je patrn rslu e u e y ch e y y z ukzky 4.8. a

... nadazen blok ... r y VAR_IN_OUT ... Deklarace jednotlivch promnnch; y e y ... END_VAR ... pokraovn nadazenho bloku ... c a r e

Ukzka 4.8: Deklarace vstupn promnnch v programu. a y ch e y

4.4

Implementace promnnch e y

Implementace promnnch mus splovat vechny poadavky, kter vyplvaj z pedchoz e y n s z e y r sti: ca 1. Spoluprce se vemi datovmi typy zvolenmi pro implementaci. a s y y 2. Monost specikovat absolutn adresu, na kter se promnn nachz z e e a a . 26

I ZPRACOVAN PROMENNYCH PLC PROGRAMU

Implementace promnnch e y

3. Monost specikovat inicializan hodnotu promnn. z c e e 4. Pro vstupn/vstupn promnn umonit pedat hodnotu promnn do bloku, e y e e z r e e kter provedl voln p snho funkn nebo programovho bloku. y a rslu e c ho e C lem tedy bude vytvoit p sn knihovn t kter umon akce denovan v r rslu e rdy, e z e pedchoz pehledu a vyplvaj z pedchoz st. Pehled navrench t a poadavky r m r y c r ca r z y rd z na jejich funkcionalitu jsou uvedeny v tab.4.4. T rda CVariable Funkcionalita Template t rda implementuj vlastnosti c promnnch pro vechny zkladn datov e y s a e typy z tab.4.1. Template t rda zapouzduj vlastnosti r c promnnch deklarovanch v rmci bloku e y y a VAR INPUT. Template t rda zapouzduj vlastnosti r c promnnch deklarovanch v rmci bloku e y y a VAR OUTPUT. Template t rda zapouzduj vlastnosti r c promnnch deklarovanch v rmci bloku e y y a c e rpadnho pedn e r a VAR IN OUT, vetn p hodnoty promnn do bloku, kter provedl e e y voln p snho funkn a rslu e c ho nebo programovho bloku. e

CPropertyIn

CPropertyOut

CPropertyInOut

Tabulka 4.4: Pehled t pro implementaci promnnch v softwarovm PLC. r rd e y e

4.4.1

Parser zdrojovho kdu e o

V rmci parseru zdrojovho kdu pro PLC budou v generovanm C++ kdu vyuity a e o e o z a o r objekty z tab.4.4. Pro vlastn zpracovn kdu bude vytvoen kontejner CContainerVariable pro udrovn informac o aktuln zpracovvan promnn (informace o daz a a a e e e tovm typu, nzvu, adrese, inicializan hodnot atp.). Dle bude vytvoena template e a c e a r t CContainerContainer, kter bude slouit ke sdruovn kontejner pat ch do rda a z z a u rc jednoho bloku PLC programu.

4.4.2

Vygenerovan zdrojov kd y y o

Vygenerovan zdrojov kd v C++ je rozdlen do nsleduj ch st y y o e a c ca : V p e, e se nejedn o globln promnn: rpad z a a e e 27

I ZPRACOVAN PROMENNYCH PLC PROGRAMU

Implementace promnnch e y

1. Povinn st deklarace vlastn promnn v private nebo public sti deklarace a ca e e ca objektu, kter reprezentuje dan blok z programu. y y 2. Nepovinn st v konstruktoru t zajit uj inicializaci promnn. Gena ca rdy s c e e erovno pouze v p e, e promnn m denovnu inicializan hodnotu. a rpad z e a a a c 3. Pro vstupn a vstupn-vstupn promnn je jet generovn kd resetuj y e y e e se a o c promnnou pro dal pouit e s z . V p e, e se jedn o globln promnnou, je vygenerovna deklarace promnn rpad z a a e a e e typu CVariable s p snm datovm typem a p rslu y y rpadnou inicializan hodnotou c promnn. e e Po zpracovn zdrojovho kdu je pro lokln promnnou vygenerovn kd odpov c a e o a e a o daj e o z rda ukzce 4.9. Ve vygenerovanm kdu je vyuita template t CVariable. a
// deklarace tdy, r // hlavikov soubor c y // counter AT %QB3: INT := 3; class init { ... private: #line 3 "test.plc" CVariable<INT> m_counter; ... };

// konstruktor tdy r // counter AT %QB3: INT := 3; init :: init(void) { #line 3 "test.plc" m_counter = CVariable<INT> ((INT) 3, "QB3"); }

Ukzka 4.9: Ukzka kdu vygenerovanho pro lokln promnn. a a o e a e e Kd generovan pro parametry funkc funkn blok nebo program je patrn o y , c ch u u y z ukzky 4.10. Ve vygenerovanm kdu je vyuita jedna z template t CPropertyIn, a e o z rd CPropertyOut nebo CPropertyInOut dle typu parametru pro p rstup k parametru z m sta, odkud je provedeno voln a template t CVariable, kter je piazena k a rda a rr objektu a je vyu ana k p zv rstupu k parametru uvnit programu. r

28

I ZPRACOVAN PROMENNYCH PLC PROGRAMU

Implementace promnnch e y

// deklarace tdy, r // hlavikov soubor c y // vstup: INT; class init { private: #line 6 "test.plc" CVariable<INT> m_vstup; ... public: #line 6 "test.plc" CPropertyIn<INT> vstup; ... };

// soubor s implementac tdy r // konstruktor tdy r // vstup: INT; init :: init(void) { #line 6 "test.plc" vstup = CPropertyIn<INT> (&m_vstup); }

Ukzka 4.10: Ukzka kdu vygenerovanho pro parametry funkc funkn blok nebo a a o e , c ch u program. u

29

Kapitola 5 Zpracovn jazyka IL a


Tato st uvd pehled jednotlivch instrukc jazyka IL, zabv se jejich zpracovn ca a r y y a a m a vykonvn v softwarovm PLC. Informace zde uveden jsou erpny z [5]. a a m e e c a Jednotliv instrukce jazyka IL meme rozdlit dle funkn vznamu do nsleduj ch e uz e c ho y a c kategori : 1. Piazovac instrukce - instrukce pro nastaven aktuln hodnoty zsobn rr a a ku, promnnch nebo adres. e y 2. Logick instrukce - instrukce umonuj logick operace mezi promnnmi. e z c e e y 3. Aritmetick instrukce - instrukce pro nsoben dlen s an atd. e a , e , ct 4. Porovnvac instrukce - instrukce slou k porovnn argumentu a aktuln a zc a a ho stavu na zsobn a ku. 5. Instrukce rzen toku programu - instrukce pro podm en skoky, voln n e a funkc a funkn blok. c ch u Kad z kategori uvedench ve je vnovna samostatn st v tto kapitole z e y ys e a a ca e popisuj krtce vlastnosti a specika jednotlivch st c a y ca . e a y a ku dat datovu typu operandu. e Dle [5] by ml aktuln datov typ na zsobn odpov Vzhledem k vyuit vlastnost jazyka C++ jsou zajitny implicitn konverze mezi z se vtinou dostupnch datovch typ. Pokud poadovan konverze neexistuje, je chyba es y y u z a hlena v okamiku kompilace vygenerovanho C++ souboru. as z e Dle [5] lze logick, aritmetick a porovnnac instrukce etzit pomoc zvorek, e e a r e a piem prav zvorka m vdy vznam vyhodnocen vrazu od lev zvorky. Ukzka rc z a a a z y y e a a 5.1 uvd takov voln Tato vlastnost nen v implementovanm softwarovm PLC dosa e a . e e z y y tupn, nebot kad vraz lze nahradit takovou posloupnost operac kter zvorkovn a , a a a zcela nahrad .

30

I ZPRACOVAN JAZYKA IL

Piazovac instrukce rr

MUL ( input1 SUB input2 ) (* Vsledek je interpretovn jako: y a *) (* result := result * (input1 - input2) *)

Ukzka 5.1: Pouit zvorkovanch vraz v instrukc a z a y y u ch.

5.1

Piazovac instrukce rr

Tato st se zabv zpracovn instrukc kter umonuj piazovat hodnoty promnnch ca y a a m , e z r r e y a adres. Jednotliv instrukce, kter do tto sti spadaj a jejich vznamje uveden v e e e ca y tab.5.1. Instrukce LD LDN Popis Nastav aktuln hodnotu na zsobn a a ku. Argumentem me bt promnn, adresa nebo konstanta. uz y e a Nastav aktuln hodnotu na zsobn a a ku, piem nerc z jprve provede negaci hodnoty. Argumentem me bt uz y promnn, adresa nebo konstanta. e a Ulo aktuln hodnotu ze zsobn z a a ku do poadovan z e promnn nebo na poadovanou adresu. e e z Ulo aktuln hodnotu ze zsobn z a a ku do poadovan z e promnn nebo na poadovanou adresu, piem nejprve e e z rc z provede negaci hodnoty. Nastav obsah boolean promnn nebo adresy v argu e e mentu na 1, provd se pouze v p e, e aktuln a rpad z a stav zsobn je TRUE. a ku Nastav obsah boolean promnn nebo adresy v argu e e mentu na 0, provd se pouze v p e, e aktuln a rpad z a stav zsobn je TRUE. a ku

ST STN

Tabulka 5.1: Pehled piazovac instrukc jazyka IL. r rr ch Vygenerovan kd pro vybran instrukce je patrn z ukzky 5.2. y o e y a Instrukce, kter nastavuj aktuln hodnotu zsobn (ve vygenerovanm kdu e a a ku e o promnn result, denovan jako instance t CResult) pou petzen konstruke a a rdy zvaj r y tor objektu pro p sn datov typ. rslu y y

31

I ZPRACOVAN JAZYKA IL

Logick instrukce e

{ } {

// LD 10 result = 10; // ST vstup result.GetValue(m_vstup);

} { // STN %QB3 CVariable<BYTE> tmp0 = CVariable<BYTE>("QB3", 0); result.GetValueNeg(tmp0); } // S %QX1.1 if (result == true) { CVariable<BIT> tmp0 = CVariable<BIT>("QX1.1", 0); tmp0 = 1; }

Ukzka 5.2: Generovan C++ kd pro piazovac instrukce jazyka IL. a y o rr

5.2

Logick instrukce e

Tato st se zabv zpracovn logickch instrukc jazyka IL. Pehled jednotlivch ca y a a m y r y logickch instrukc je uveden v tab.5.2. y Vechny instrukce spadaj do tto sti pou jako prvn argument aktuln s c e ca zvaj a hodnotu zsobn a jako druh argument (operand instrukce) mohou m bud cselnou a ku y t konstantu, promnnou (p e rpadn parametr funkce/funkn bloku) nebo p e c ho rmou adresu. Vsledek proveden operace je vdy uloen na zsobn jako jeho aktuln hodnota y e z z a k, a (ve vygenerovanm kdu promnn result). e o e a Jednotliv operace jsou implementovny jako petzen opertor template t e a r y a rdy CResult z podprn PLC knihovny. u e a rklad C++ kdu, kter je vygenerovn pro logick instrukce. o y a e Ukzka 5.3 uvd p a

5.3

Aritmetick instrukce e

Tato st se zabv zpracovn aritmetickch instrukc jazyka IL. Pehled jednotlivch ca y a a m y r y instrukc je uveden v tab.5.3. Zkladn sada aritmetickch instrukc jazyka IL obsahuje a y instrukce pro s an od an nsoben a dlen vech zkladn datovch typ. ct , ct , a e s a ch y u Jako prvn operand p sn aritmetick operace je vdy pouita aktuln hodnota rslu e e z z a zsobn a ku, jako druh operand je pouit parametr instrukce. y z Vsledek aritmetick operace je vdy uloen zpt na zsobn jako jeho aktuln y e z z e a k a

32

I ZPRACOVAN JAZYKA IL

Aritmetick instrukce e

Instrukce AND

OR

XOR

ANDN

ORN

XORN

Popis Na zsobn je uloen vsledek logick operace a k z y e (Zsobn AND Operand), operand mus m stejn daa k t y tov typ jako aktuln hodnota zsobn y a a ku. Na zsobn je uloen vsledek logick operace a k z y e (Zsobn OR Operand), operand mus m stejn daa k t y tov typ jako aktuln hodnota zsobn y a a ku. Na zsobn je uloen vsledek logick operace a k z y e (Zsobn XOR Operand), operand mus m stejn daa k t y tov typ jako aktuln hodnota zsobn y a a ku. Na zsobn je uloen vsledek logick operace a k z y e (Zsobn AND NOT Operand), operand mus m a k t stejn datov typ jako aktuln hodnota zsobn y y a a ku. Na zsobn je uloen vsledek logick operace a k z y e (Zsobn OR NOT Operand), operand mus m stejn a k t y datov typ jako aktuln hodnota zsobn y a a ku. Na zsobn je uloen vsledek logick operace a k z y e (Zsobn XOR NOT Operand), operand mus m a k t stejn datov typ jako aktuln hodnota zsobn y y a a ku.

Tabulka 5.2: Pehled logickch instrukc jazyka IL. r y

{ } { }

// AND 2#0101_0101 result = result & 85; // XORN 8#07_02 result = result ^ ~(450);

Ukzka 5.3: Generovan C++ kd pro logick instrukce jazyka IL. a y o e hodnota. Instrukce DIV (dlen ulo v p e dlen nulou na zsobn jako aktuln hode ) z rpad e a k a notu 0 a informace o chyb je vypsna jako hlen do logu jdra operan systmu. e a as a c ho e Ukzka 5.4 uvd C++ kd, kter je pro tyto instrukce generovn. a a o y a

33

I ZPRACOVAN JAZYKA IL

Porovnvac instrukce a

Instrukce ADD

SUB

MUL

DIV

Popis Na zsobn je uloen vsledek aritmetick operace a k z y e (Zsobn + Operand), operand mus m stejn datov a k t y y typ jako aktuln hodnota zsobn a a ku. Na zsobn je uloen vsledek aritmetick operace a k z y e (Zsobn - Operand), operand mus m stejn datov a k t y y typ jako aktuln hodnota zsobn a a ku. Na zsobn je uloen vsledek aritmetick operace a k z y e (Zsobn * Operand), operand mus m stejn datov a k t y y typ jako aktuln hodnota zsobn a a ku. Na zsobn je uloen vsledek aritmetick operace a k z y e (Zsobn / Operand), operand mus m stejn datov a k t y y typ jako aktuln hodnota zsobn a a ku.

Tabulka 5.3: Pehled aritmetickch instrukc jazyka IL. r y

{ // ADD 16#0F result = result + 15; } { // MUL %IW4 CVariable<WORD> tmp0 = CVariable<WORD>("IW4", 0); result = result * tmp0; }

Ukzka 5.4: Generovan C++ kd pro aritmetick instrukce jazyka IL. a y o e

5.4

Porovnvac instrukce a

Tato st se zabv zpracovn instrukc jazyka IL pro porovnvn aktuln stavu ca y a a m a a a ho zsobn a operandu. Pehled jednotlivch instrukc je uveden v tab.5.2. a ku r y Vechny instrukce modikuj aktuln hodnotu zsobn na logickou hodnotu s a a ku TRUE nebo FALSE dle vsledku porovnn y a . Ukzka 5.5 uvd kd, kter odpov a vybranm porovnvac instrukc jazyka a a o y d y a m m IL.

5.5

Instrukce rzen toku programu

Tato st se zabv pehledem a zpracovn instrukc pro toku programu. Jedn ca y a r a m rzen a se o instrukce umonuj provdt skoky v rmci programu, volat jin programov z c a e a e e 34

I ZPRACOVAN JAZYKA IL

Instrukce zen toku programu r

Instrukce GT GE EQ NE LE LT

Popis Na zsobn je uloeno TRUE nebo FALSE dle vsledku a k z y porovnn (Zsobn > Operand). a a k Na zsobn je uloeno TRUE nebo FALSE dle vsledku a k z y porovnn (Zsobn >= Operand). a a k Na zsobn je uloeno TRUE nebo FALSE dle vsledku a k z y porovnn (Zsobn = Operand). a a k Na zsobn je uloeno TRUE nebo FALSE dle vsledku a k z y porovnn (Zsobn = Operand). a a k Na zsobn je uloeno TRUE nebo FALSE dle vsledku a k z y porovnn (Zsobn <= Operand). a a k Na zsobn je uloeno TRUE nebo FALSE dle vsledku a k z y porovnn (Zsobn < Operand). a a k

Tabulka 5.4: Pehled porovnvac instrukc jazyka IL. r a ch

{ } { }

//GT counter result = (result > m_counter); // NE 10 result = (result != 10);

Ukzka 5.5: Generovan C++ kd pro porovnvac instrukce jazyka IL. a y o a bloku a provst nvrat z volanho bloku. Pehled instrukc je uveden v tab.5.5. e a e r Kd generovan pro jednotliv instrukce z tab.5.5 je uveden v ukzce 5.6. Jak je o y e a patrno, instrukce JMP, JMPN a JMPC jsou nahrazeny v jazyce C++ konstrukc goto LABEL;, piem nvt v PLC programu je pevedeno do programu v jazyce C++. r c z a es r Instrukce RET, RETC a RETN jsou nahrazeny C++ voln return;. a m Sloitj situace nastv v p e pouit instrukc CAL, CALC a CALN, kter z e s a a rpad z e je teba zajistit tak pedn hodumonuj volat instance funkn blok, nebot z c ch u r e r a not parametr. Dle [5] lze hodnoty parametr pro funkn bloky pedvat 3 rznmi u u c r a u y zpsoby, tak jak je denovno v tab.5.6. u a Vytvoen software podporuje monosti . 1 a 2. V p e referenn argument r y z c rpad c ch u funkn blok, kter nejsou specikovny, lze takov funkn blok volat s t e c ch u e a y c m, z se pouije implicitn hodnota parametru, piem p z r c z rpadnou navracenou hodnotu ji z nelze z programu z skat. Ukzka 5.6 uvd kd vygenerovan pi voln instance funkn bloku. a a o y r a c ho 35

I ZPRACOVAN JAZYKA IL

Instrukce zen toku programu r

Instrukce JMP CAL RET JMPN CALN RETN JMPC CALC RETC

Popis Skok na nvt denovan v rmci programovho bloku. a es e a e Voln funkn bloku. a c ho Nvrat z volanho programovho bloku. a e e Podm en skok na nvt v rmci programovho bloku n y a es a e v p e, e aktuln stav zsobn je FALSE. rpad z a a ku Podm en voln funkn n e a c ho bloku v p e, e je rpad z aktuln stav zsobn FALSE. a a ku Podm en nvrat z volanho programovho bloku v n y a e e p e, e aktuln stav zsobn je FALSE. rpad z a a ku Podm en skok na nvt v rmci programovho bloku n y a es a e v p e, e aktuln stav zsobn je TRUE. rpad z a a ku Podm en voln funkn n e a c ho bloku v p e, e je rpad z aktuln stav zsobn TRUE. a a ku Podm en nvrat z volanho programovho bloku v n y a e e p e, e aktuln stav zsobn je TRUE. rpad z a a ku

Tabulka 5.5: Pehled instrukc pro toku programu jazyka IL. r rzen slo C 1 2 Popis/ukzka a CAL se vstupn parametry: mi CAL C10(CU := %IX10, PV := 15) CAL + LD a ST pro nastaven vstup: u LD 15 ST C10.PV LD %IX10 ST C10.CU CAL C10 Pouit vstupn opertor: z ch a u LD 15 PV C10 LD %IX10 CU C10

Tabulka 5.6: Monosti pedvn parametr pi voln funkn blok. z r a a u r a c ch u

5.5.1

Voln funkc a

Funkce lze volat tak, e na m z sto instrukce se zapse nzev funkce, piem jako a rc z prvn argument funkce je pedna aktuln hodnota zsobn r a a a ku. P rpadn dal hode s noty parametr lze zadat oddlen rkou v rmci argumentu instrukce. Nvratov u e e ca a a a hodnota funkce je uloena jako aktuln hodnota zsobn z a a ku. Ukzka 5.7 uvd PLC a a 36

I ZPRACOVAN JAZYKA IL

Instrukce zen toku programu r

// CAL controler(P := 2) g_controler.p = 2; g_controler.Function();

} // RETC if (result != 0) RETURN(); { // JMP ahoj goto ahoj; }

Ukzka 5.6: Generovan kd pro vybran instrukce toku programu jazyka IL. a y o e rzen kd pro voln funkce. o a

LD MAX

10 20

(* Voln funkce MAX(X, Y) *) a (* Aktln hodnota zsobnku je 20 *) a a

Ukzka 5.7: Ukzka voln funkce z jazyka IL. a a a Ukzka 5.8 uvd kd vygenerovan bhem voln funkce. Nejprve je deklarovna a a o y e a a instance objektu, kter funkci reprezentuje, nsledn je vyplnn prvn parametr funkce y a e e aktuln hodnotou zsobn a pot jsou vyplnny p a a ku e e rpadn dal parametry. Po voln e s a funkce je nastavena nov aktuln hodnota zsobn a a a ku.

// MIN 33 MIN f_function; result.GetValue(f_function.parm0); f_function.parm1 = 33; f_function.Function(); result = f_function.GetResult();

Ukzka 5.8: Generovan C++ kd pi voln funkce v jazyce IL. a y o r a

37

Kapitola 6 Zpracovn programovch blok a y u


Tato st se zabv zpracovn zkladn blok, kter se pou pro zpis proca y a a m a ch u e zvaj a gramu. a r y u Dle [5] jsou denovny ti typy programovch blok: 1. Funkn bloky - umonuj vyu vstupn parametry, vstupn parametry a c z zt y parametry vstupn-vstupn Pi pouit funkn bloku je teba nejprve dee y . r z c ho r novat jeho instanci. Vnitn promnn jsou platn po dobu platnosti instance. r e e e 2. Programov bloky - obdoba funkn blok. Li se t e existuje pouze e c ch u s m, z jedna globln platn instance jejz vnitn promnn jsou platn po celou dobu a e a r e e e bhu programu. e 3. Funkce - podporuj pouze vstupn parametry, vdy pou nvratovou hod z zvaj a notu. Vnitn promnn jsou platn pouze po dobu jednoho voln funkce. r e e e a Jednotliv bloky, jejich vznam a pouit jsou popsny v nsleduj ch stech tto e y z a a c ca e kapitoly. Veker uveden informace jsou z any z [5]. s e e sk Kd generovan pro jednotliv druhy programovch blok odpov a vdy vygeno y e y u d z erovan t e v jazyce C++. Nzev vygenerovan t je vdy rozren o prex, kter e rd a e rdy z s y zajit uje, e je mon shodn pojmenovat funkci, funkn blok i blok typu program. s z z e e c Konverzn program vdy podle kontextu, ve kterm je nzev vyuit pouije sprvn pre z e a z z a y x a t i sprvn blok. Pro kad z uvedench blok je vdy vygenerovn hlavikov m a y z y y u z a c y soubor a soubor s implementac t Hlavikov soubor je nsledn automaticky in rdy. c y a e cludovn do generovanho kdu v p e, e je p sn blok v programu vyuit. a e o rpad z rslu y z

6.1

Funkn bloky c

Funkn bloky svou podstatou odpov objektm jazyka C++. Kad funkn blok c daj u z y c pedt ne je mon ho volat mus m deklarovnu svoji instanci pomoc promnn r m, z z e t a e e s datovm typem odpov c nzvu funkn bloku (viz. ukzka 6.1). y daj m a c ho a

38

I ZPRACOVAN PROGRAMOVYCH BLOKU

Funkn bloky c

Jinmi slovy, kad funkn blok me m v instanc kter jsou reprezentovny y z y c uz t ce , e a rznmi promnnmi (bud globln nebo lokln u y e y a mi a mi). Znikem promnn zanik tak a e e a e instance p snho funkn bloku. rslu e c ho

... VAR ... pid1: PID; (* deklarace instance FB pro PID regultor *) a ... END_VAR ... CAL pid1 ...

Ukzka 6.1: Deklarace instance funkn bloku a jeho nsledn voln a c ho a e a . Princip zpisu kdu pro denici tla funkn bloku je patrn z ukzky 6.2. a o e c ho y a Deklarace jednotlivch blok promnnch je nepovinn. Vznam a vyuit jednotlivch y u e y a y z y blok promnnch je detailn popsn v sti 4. u e y e a ca Blok lokln promnnch m nasleduj vznam: a ch e y a c y Me obsahovat tak deklarace instanc dal funkn blok. uz e sch c ch u Vechny lokln promnn si udruj svoji hodnotu po celou dobu existence ins a e e z stance funkn bloku. c ho Norma [5] umonuje pedvat v parametrech funkn bloku tak odkazy na inz r a c ho e stanci jinho funkn bloku. Tato monost nen ve vytvoenm softwarovm PLC e c ho z r e e dostupn. V nkterch p a e y rpadech by toti bylo nutn zajistit kop z e rovac konstruktor objektu, kterm je funkn blok reprezentovn. Problematick by t bylo chovn v y c a e ez a p e piazen instance funkn bloku deklarovan v rmci jinho bloku programu rpad r r c ho e a e do vstupn nebo vstupn/vstupn promnn. y e y e e y o c a a Ukzka 6.4 obsahuje vygenerovan kd pro funkn blok z ukzky 6.3. Z ukzky je a patrn, e vygenerovan kd je rozdlen na hlavikov soubor s denic t reprezene z y o e c y rdy tuj funkn blok a zdrojov soubor s implementac tto t c c y e rdy. Nzev t kter funkn blok reprezentuje je ve vygenerovanm kdu rozren o a rdy, a c e o s prex plcfb . To umonuje deklarovat v rmci programu rzn typy blok se stejnm z a u e u y nzvem. a

39

I ZPRACOVAN PROGRAMOVYCH BLOKU

Funkn bloky c

FUNCTION_BLOCK name VAR_INPUT ... deklarace jednotlivch vstupnch promnnch ... y e y END_VAR VAR_OUTPUT ... deklarace jednotlivch vstupnch promnnch ... y y e y END_VAR VAR_IN_OUT ... deklarace jednotlivch vstupn/vstupnch promnnch ... y e y e y END_VAR VAR ... deklarace jednotlivch loklnch promnnch ... y a e y END_VAR ... kd programu ve zvolenm jazyce (v naem ppad IL) o e s r e ... END_FUNCTION_BLOCK

Ukzka 6.2: Deklarace funkn bloku. a c ho


FUNCTION_BLOCK ukazka VAR_INPUT x: INT; END_VAR VAR_OUTPUT y: INT; END_VAR VAR state: INT := 1; END_VAR LD state ADD 1 ST state MUL x ST y END_FUNCTION_BLOCK

Ukzka 6.3: Vstupn soubor pro ukzku vygenerovanho kdu funkn bloku. a a e o c ho

40

I ZPRACOVAN PROGRAMOVYCH BLOKU

Funkn bloky c
// soubor s implementac tdy r #include "ukazk.h" #include "plcfb_ukazka.h" #define RETURN() {ExitCall();return;} plcfb_ukazka :: plcfb_ukazka(void) { #line 3 "fb.plc" x = CPropertyIn<INT> (&m_x); #line 6 "fb.plc" y = CPropertyOut<INT> (&m_y); #line 9 "fb.plc" m_state = CVariable<INT> ((INT) 1); } void plcfb_ukazka :: ExitCall(void) { } plcfb_ukazka :: ~plcfb_ukazka(void) { } void plcfb_ukazka :: Function(void) { CResult result; #line 12 "fb.plc" { result = m_state; } #line 13 "fb.plc" { result = result + 1; } #line 14 "fb.plc" { result.GetValue(m_state); } #line 15 "fb.plc" { result = result * m_x; } #line 16 "fb.plc" { result.GetValue(m_y); } RETURN(); }

// deklarace tdy, r // hlavikov soubor c y #include <plc.h> class plcfb_ukazka { private: #line 3 "fb.plc" CVariable<INT> m_x; #line 6 "fb.plc" CVariable<INT> m_y; #line 9 "fb.plc" CVariable<INT> m_state; public: #line 3 "fb.plc" CPropertyIn<INT> x; #line 6 "fb.plc" CPropertyOut<INT> y; plcfb_ukazka(void); virtual ~plcfb_ukazka(void); void Function(void); void ExitCall(void); };

Ukzka 6.4: Vygenerovan kd funkn bloku z ukzky 6.3. a y o c ho a

41

I ZPRACOVAN PROGRAMOVYCH BLOKU

Programov bloky e

6.2

Programov bloky e

Programov bloky jsou obdobou funkn blok popsanch v pedchoz sti. Hlavn e c ch u y r ca rozd spo a v tom, e tento typ blok m automaticky generovnu svoji uniktn l cv z u a a a instanci, kter je platn po celou dobu bhu PLC. Tato instance samozejm uchovv a a e r e a a hodnoty lokln promnnch. a ch e y Programov bloky jsou ureny zejmna pro spoutn jednotlivch vlken PLC proe c e se y a gramu, p rpadn pro jednorzov spoutn nap. pi nbn hran signlu. Nicmn e a e se r r a ez e e a e e je lze volat i p rmo v programu obdobn jako funkn bloky, piem jako parametr e c rc z instrukce CAL se pouije p z rmo nzev programovho bloku. a e a Struktura zpisu programovho bloku je patrn z ukzky 6.5 a je obdobn jako a e a a struktura funkn bloku. c ho

PROGRAM name VAR_INPUT ... deklarace jednotlivch vstupnch promnnch ... y e y END_VAR VAR_OUTPUT ... deklarace jednotlivch vstupnch promnnch ... y y e y END_VAR VAR_IN_OUT ... deklarace jednotlivch vstupn/vstupnch promnnch ... y e y e y END_VAR VAR ... deklarace jednotlivch loklnch promnnch ... y a e y END_VAR ... kd programu ve zvolenm jazyce (v naem ppad IL) o e s r e ... END_PROGRAM

Ukzka 6.5: Deklarace programovho bloku. a e Vygenerovan kd odpov a kdu funkn bloku z ukzky 6.3, pouze prex v y o d o c ho a nzvu t je nahrazen plcp a v hlavikovm souboru je nadenovna globln a rdy c e a a promnn deklaruj instanci bloku pro vyuit v generovanm kdu. e a c z e o

42

I ZPRACOVAN PROGRAMOVYCH BLOKU

Funkce

6.3

Funkce

Funkce jsou nejjednodu jednotky pro zpis programu. Umonuj pedvat pouze vsss a z r a 1 tupn parametry piem jako prvn parametr funkce je pedna aktuln hodnota rc z r a a zsobn a ku. Funkce mus pedvat nvratovou hodnotu, kter se stane aktuln hodno r a a a a tou zsobn a ku. ra Zpsob deklarace funkce je patrn z ukzky 6.6. Prvn dek deklarace denuje u y a 2 krom nzvu funkce tak datov typ nvratov hodnoty . e a e y a e

FUNCTION name:DATATYPE VAR_INPUT ... deklarace jednotlivch vstupnch promnnch ... y e y END_VAR VAR ... deklarace jednotlivch loklnch promnnch ... y a e y END_VAR ... kd programu ve zvolenm jazyce (v naem ppad IL) o e s r e ... END_FUNCTION

Ukzka 6.6: Deklarace funkce. a Nvratov hodnota funkce se nastav tak, e se ulo hodnota do promnn s nzvem a a z z e e a shodnm s nzvem funkce (viz. ukzka 6.7). y a a Kad funkci deklarovan v kdu softwarovho PLC odpov a vygenerovan t z e e o e d a rda v jazyce C++. Voln funkce nsledn spo a ve vytvoen jednorzov instance tto a a e cv r a e e t rdy. Tato instance t zanikne po ukonen voln a pedn nvratov hodnoty rdy c a r a a e do aktuln hodnoty zsobn a a ku. Jednorzovost instance t reprezentuj funkci je a rdy c zajitna vytvoen speciln name-space v jazyce C++3 . se r m a ho a y o a Ukzka 6.9 uvd vygenerovan kd pro funkci z ukzky 6.8. Jak je patrno, princip a generovn kdu je shodn s generovn kdu pro pedchoz programov bloky. Nzev a o y a m o r e a vygenerovan t je rozren o prex plcf . e rdy s

Ze zpsobu pedvn hodnot parametr vyplv, e kad funkce mus m alespo jeden vstupn u r a a u y a z z a t n parametr. 2 Jedn se o poloku DATATYPE, kter je oddlena od nzvu funkce pomoc :. a z a e a 3 Namespace zajit uje platnost instanc vech t a je ohranien pomoc {} s s rd c

43

I ZPRACOVAN PROGRAMOVYCH BLOKU

Funkce

FUNCION exp:INT VAR_INPUT int Value; END_VAR LD Value ... ST exp (* Aktuln hodnotu zsobnku vlom do nvratov *) a a z a e (* hodnoty funkce *) ... END_FUNCTION

Ukzka 6.7: Zpsob nastaven nvratov hodnoty funkce. a u a e

FUNCTION min: DINT VAR_INPUT val1: DINT; val2: DINT; END_VAR LD val1 ST min LT val2 RETC LD val2 ST min END_FUNCTION

Ukzka 6.8: Vstupn kd pro ukzku generovanho kdu funkce. a o a e o

44

I ZPRACOVAN PROGRAMOVYCH BLOKU

Funkce

// deklarace tdy, r // hlavikov soubor c y #include <plc.h> class plcf_min { private: CVariable<DINT> m_min; #line 3 "function.plc" CVariable<DINT> m_val1; #line 4 "function.plc" CVariable<DINT> m_val2; public: #line 3 "function.plc" CPropertyIn<DINT> parm0; #line 4 "function.plc" CPropertyIn<DINT> parm1; plcf_min(void); virtual ~plcf_min(void); void Function(void); const CVariable<DINT>& GetResult(void); };

// Soubor s implementac tdy r #define RETURN() return; plcf_min :: plcf_min(void) { #line 3 "function.plc" parm0 = CPropertyIn<DINT> (&m_val1); #line 4 "function.plc" parm1 = CPropertyIn<DINT> (&m_val2); } plcf_min :: ~plcf_min(void) { } const CVariable<DINT> &plcf_min :: GetResult(void) { return(this->m_min); } void plcf_min :: Function(void) { CResult result; #line 7 "function.plc" { result = m_val1; } #line 8 "function.plc" { result.GetValue(m_min); } #line 9 "function.plc" { result = (result < m_val2); } #line 10 "function.plc" if (result != 0) RETURN(); #line 12 "function.plc" { result = m_val2; } #line 13 "function.plc" { result.GetValue(m_min); } }

Ukzka 6.9: Vygenerovan kd funkce z ukzky 6.8. a y o a

45

Kapitola 7 Kongurace softwarovho PLC e


Tato st se zabv speciln blokem CONFIGURATION denovanm v [5]. Tento ca y a a m y blok slou z: K deklaraci globln promnnch dostupnch v programu. a ch e y y K denici uloh (denuj parametry pro spoutn blok typu program). se u K piazen uloh k jednotlivm blokm typu program. rr y u Ukzka 7.1 uvd strukturu bloku typu CONFIGURATION se zkladn poda a a mi bloky, kter jsou vybrny pro implementaci v softwarovm PLC. Norma [5] denuje e a e jet dal podbloky, kter nejsou pro bh softwarovho PLC teba. se s e e e r Blok s globln promnnmi obsahuje deklarace globln promnnch tak, jak a mi e y a ch e y standardn datovch typ, nebo e e y ch y u je popsno v kapitole 4. Promnn mohou bt bud a se me jedna o globln deklarace funkn blok. uz a c ch u Blokem RESOURCE se podrobnji zabv nsleduj st 7.1. e y a a c ca Blok CONFIGURATION v generovanm kdu m tedy za ukol denovat podklady e o a pro vytvoen funkc potebnch pro sputn a ukonen softwarovho PLC (zaveden r r y se c e kernel modulu softwarovho PLC do pamti a jeho vyjmut e e ).

7.1

Struktura bloku RESOURCE

Tato st se zabv vznamem a obsahem bloku RESOURCE. Informace zde uveden ca y a y e jsou erpny z [5]. c a Jak je patrno z ukzky 7.1, me i tento blok obsahovat deklaraci globln a uz a ch promnnch stejn jako p e y e rmo blok CONFIGURATION. Po p rpadn deklaraci globln promnnch ji nsleduje denice uloh (TASK) e a ch e y z a a piazen tchto uloh jednotlivm blokm typu program. To zajist sputn softrr e y u se warovho PLC. e

46

KONFIGURACE SOFTWAROVEHO PLC

Struktura bloku RESOURCE

CONFIGURATION name VAR_GLOBAL ... variable ... END_VAR RESOURCE xx ON yy VAR_GLOBAL ... variable ... END_VAR ... TASK TaskName(INTERVAL:=T#0.1ms); ... ... PROGRAM p1 WITH TaskName: ProgramName(); ... END_RESOURCE END_CONFIGURATION

Ukzka 7.1: Struktura bloku CONFIGURATION. a

7.1.1

Struktura blok TASK u

Bloky TASK denuj vlastnosti pro spoutn blok PROGRAM. Jedn se tedy o se u a parametry, dle kterch budou nsledn vytvoeny real-time vlkna v rmci RT-Linuxovho y a e r a a e jdra. Blokm tudz p a u rmo neodpov a dn generovan kd. d za y y o V ukzce 7.2 je uveden pehled vech parametr, kter se mohou v denici TASK a r s u e bloku vyskytnout.

TASK name([INTERVAL := T#50ms][, PRIORITY := 2][, SINGLE := %Q2.1]);

Ukzka 7.2: Struktura bloku TASK a jeho zpis. a a Tab.7.1 obsahuje popis jednotlivch parametr bloku a jejich vznam v rznch y u y u y kontextech.

47

KONFIGURACE SOFTWAROVEHO PLC

Struktura bloku RESOURCE

Parametr name INTERVAL PRIORITY SINGLE

Popis Nzev bloku, pouit v okamiku piazen TASK bloku typu a z y z rr PROGRAM. Denuje interval, se kterm je spoutno vlkno, kter m y se a e a piazeno tento TASK. rr Priorita vlkna, ktermu je TASK piazen. Hodnota v rozsahu a e rr 050, 0 odpov a nejvy priorit, 50 odpov a nejvy priorit. d s s e d ss e Pokud je hodnota parametru INTERVAL rzn od 0, pak denu a uje, e blok typu PROGRAM m bt spoutn periodicky pouze z a y se v p e, e hodnota vstupu SINGLE je log.0. Jestlie INTERrpad z z VAL je 0, pak blok je spoutn pouze v p e, e na vstupu se rpad z SINGLE byla detekovna nbn hrana. Hodnota vstupu me a a ez a uz bt reprezentovna bud p adresou nebo globln promnnou. y a rmo a e Tabulka 7.1: Vznam a popis parametr bloku TASK. y u

7.1.2

Struktura blok PROGRAM u

Bloky typu PROGRAM v rmci deklarace RESOURCE slou k piazen blok TASK a z rr u k jednotlivm programovm blokm PROGRAM1 . Vsledkem je pro vechny bloky y y u y s typu PROGRAM, kter jsou zde uvedeny, vygenerovn samostatnho real-time vlkna, e a e a kter dle parametr uvedench v bloku TASK spout p sn blok PROGRAM. e u y s rslu y se Pokud v deklaraci chyb piazen bloku TASK, ml by bt blok dle [5] spoutn rr e y trvale s nejni monou prioritou vdy, kdy m procesor voln as. Podm zs z z z a yc nka tkaj y c se spoutn vdy, kdy m procesor voln as mus bt pro vytven softwarov PLC se z z a yc y ar e e modikovna. a V p e, e by toti vdy existovalo njak RT-Linuxov vlkno, kter m bet rpad z z z e e e a e a ez a tudz by nezstal dn voln procesorov as, nedostalo by se ke slovu pvodn u za y y y c u Linuxov jdra. To by vedlo k zatuhnut celho systmu. Proto jsou i tyto ulohy e a e e spoutny periodicky s t e periodu spoutn je mon zvolit z p se m, z se z e rkazovho dku. e ra y Deklarace piazen TASK k bloku PROGRAM je patrna z ukzky 7.3. Vznam rr a jednotlivch parametr je uveden v tab.7.2. y u

PROGRAM Name [WITH TaskName]: ProgramName([Parm1 := value1[, ...]]);

Ukzka 7.3: Piazen denovanho TASK k bloku typu PROGRAM v rmci bloku a rr e a RESOURCE.
1

Ve vznamu bloku pro zpis programu z kapitoly 6. y a

48

KONFIGURACE SOFTWAROVEHO PLC

Struktura bloku RESOURCE

Nzev a Name TaskName ProgramName Parm1

Popis Uniktn nzev denovanho vlkna. a a e a Nzev bloku TASK, jeho parametry se pouij pi denici a z z r vlkna. a Nzev bloku typu PROGRAM, kter bude spoutn s a y se parametry TASK. Pokud m blok parametry, obsahuje rkou oddlen a ca e e parametry s piazenou hodnotou. Hodnota me bt bud rr uz y konstanta, adresa v pamti PLC nebo globln promnn. e a e a

Tabulka 7.2: Popis a vznam parametr pi denici spoutn programu. y u r se Ukzka 7.5 uvd vygenerovan kd v C++, kter odpov a denici z ukzky 7.4. a a y o y d a Je z n patrn, e kad vytvoen real-time vlkno je oznaeno pro plnova proces e z z e r e a c a c u jako vyu c FPU. Dvodem je monost vyuit datovho typu real kdekoliv v rmci zvaj u z z e a PLC programu. Z toho plyne nutnost zajistit bezkoniktn vyuit FPU v rmci celho z a e operan systmu. c ho e

PROGRAM init VAR_INPUT stav: INT; END_VAR END_PROGRAM CONFIGURATION test RESOURCE xx ON yy TASK pok1(INTERVAL:=T#20ms, SINGLE:=%QX1.0); PROGRAM p1 WITH pok1: init(stav := %QB0); END_RESOURCE END_CONFIGURATION

Ukzka 7.4: Denice spoutn PLC vlken. a se a

49

KONFIGURACE SOFTWAROVEHO PLC

Struktura bloku RESOURCE

#include <rtl_cpp.h> CMemory<PLC_MEMORY_SIZE> g_KernelPLCMemory; static void *PCallp1(void *pParms) { struct sched_param p; p.sched_priority = 50; pthread_setschedparam(pthread_self(), SCHED_FIFO, &p); pthread_make_periodic_np(pthread_self(), gethrtime(), 20000000); while(1) { pthread_wait_np(); if (CVariable<BOOL>("QX1.0", 0) != 0) { gprog_plcp_init.stav = CVariable<BIT>("QB0"); gprog_plcp_init.Function(); } } return NULL; } #define THREADS_COUNT 1 static pthread_t threads[THREADS_COUNT]; extern "C" { int init_module(void) { int iRetv = 0, iCount = 0; pthread_attr_t attr; __do_global_ctors_aux(); pthread_attr_init(&attr); pthread_attr_setfp_np(&attr); iRetv += pthread_create(&threads[iCount++], attr, PCallp1, NULL); return iRetv; } void cleanup_module(void) { for (int i = 0; i < THREADS_COUNT; i++) { pthread_delete_np(threads[i]); } __do_global_dtors_aux(); } } MODULE_LICENSE("GPL");

Ukzka 7.5: Vygenerovan kd odpov c ukzce 7.4. a y o daj a 50

Kapitola 8 Podpora pro RT-Linux


a Tato kapitola se zabv vytvoenou podporou pro RT-Linux. V sti 8.1 je popsna y a r ca podprn knihovna potebn pro kompilaci modul softwarovho PLC, st 8.2 se u a r a u e ca ast 8.3 se zabv potebnou y a r zabv tvorbou ovlada pro vstupn a vstupn za . C y a cu y rzen podporou p rmo v jde RT-Linuxu. a r Obr.8.1 uvd pro uplnost schematick nrt celho vytvoenho softwarovho PLC. a y ac e r e e Sipky v obrzku naznauj jakm zpsobem prob a vnitn komunikace mezi jeda c , y u h r notlivmi stmi softwarovho PLC. y ca e

8.1

Knihovna

Podprn knihovna umonuj kompilaci kdu vygenerovanho pomoc konverzn u a z c o e ho programu plc2cpp se skld z nkolika st kter spolu navzjem souvisej Jednotliv a a e ca , e a . e c sti, kter jsou implementovny v rmci podprn knihovny, jsou na obr.8.1 oznaeny ca e a a u e v rmec s edm podkladem. a c ch s y Tab.8.1 uvd pehled jednotlivch t kter podprn knihovna implementuje. a r y rd, e u a Ke kad t e je zrove uveden jej krtk popis a vznam. z e rd a n a y y

8.1.1

Emulace pamti PLC e

Emulace p rstupu do pamti pomoc adres tak, jak je denovno v [5] implemene a tuje t CMemory1 . Ta pro p rda rstup do pamti umonuje adresaci dle normy vetn e z c e p rstupu na digitln vstupy/vstupy. V p e, e se jedn o adresu v intern PLC a y rpad z a pamti, je p e rstup zpracovn p a rmo t rdou CMemory. Pokud se jedn o p a rstup do pamti odpov c adresaci digitln vstup/vstup, e daj a ch u y u je pedno ovladai denovanmu t rzen r a c e rdou CPLCDrivers. Podrobnj popis lze e s nalzt v sti 8.2. e ca
1

Implementace v souboru cmemory.h

51

PODPORA PRO RT-LINUX

Knihovna

Obrzek 8.1: Schema vytvoenho softwarovho PLC. a r e e

8.1.2

Podpora promnnch PLC e y

Podpora promnnch je implementovna v template t CVariable2 . Tato template e y a rde t implementuje nsleduj operace: rda a c Specikovat datov typ promnn tak, jak je denovno v [5]. y e e a Specikovat inicializan hodnotu promnn pi deklaraci. c e e r Specikovat adresu v pamt ovm prostoru emulovanho PLC. Tato adresa samozejm e e e r e me bt i adresa vstupu nebo vstupu, je-li k tto adrese zaregistrovn nkter uz y y e a e y ovlada ve sprvci za (viz. dle). c a rzen a
2

Implementace v souboru cvariable.h

52

PODPORA PRO RT-LINUX

Knihovna Popis T rda vyu a k deklaraci promnnch ve vygenzvan e y erovanm C++ kdu. Podporuje adresaci PLC pamti, e o e pokud m promnn tuto adresu v deklaraci specia e a kovnu. a T rda pou a ve vygenerovanm C++ kdu pro zvan e o reprezentaci vstupn ch parametr funkc funkn u , c ch blok a programovch blok. u y u T rda vyu a ve vygenerovanm C++ kdu pro zvan e o reprezentaci vstupn parametr funkn blok a y ch u c ch u programovch blok. y u T rda vyu a ve vygenerovanm C++ kdu pro zvan e o reprezentaci vstupn-vstupn parametr funkn e y ch u c ch blok a programovch blok. u y u T rda, kter implementuje emulaci PLC pamti, zaa e pouzduje funkcionalitu pro p r rstup k adresm vnitn a r pamti, vstupm a vstupm. Pro p e u y u rstup k vstupm a u vstupm vyu a instanci t CDeviceManager. y u zv rdy T reprezentuj aktuln hodnotu zsobn rda c a a ku. Virtuln t vyu a pro tvorbu ovlada vstup a a rda zvan cu u vstup. y u T rda spravuj instance jednotlivch ovlada a c y cu zajit uj mapovn adresy vstupu/vstupu na s c a y p sn ovlada za . rslu y c rzen T zapouzduj funkcionalitu mutex pro zamykn rda r c u a kritickch st ovlada PLC za . y ca cu rzen T rda zapouzduj funkcionalitu mutex pro zar c u mykn kritickch st ovlada PLC za (spina y ca cu rzen lock je funkn podobn mutexu. Rozd je v tom, c e y l e po uzamen oblasti pomoc spinlocku je zakzno z c a a peruen a tudz provdn kd neme bt peruen r s a e y o uz y r s schedulerem).

Nzev t a rdy CVariable

CPropertyIn

CPropertyOut

CPropertyIO

CMemory

CResult CDeviceDriver CDeviceManager

CMutex CSpinLock

Tabulka 8.1: Pehled t implementovanch v podprn knihovn pro PLC. r rd y u e e

8.1.3

Podpora parametr pro voln programovch blok u a y u

Podpora pro pedvn parametr programovm blok je implementovna v template r a a u y u a t ach CPropertyIn, CPropertyOut a CPropertyIO. Pi deklaraci parametru se denrd r uje typ parametru (vstupn vstupn vstupn-vstupn a dle se parametru piazuje , y , e y ) a rr

53

PODPORA PRO RT-LINUX

Ovladae karet digitln vstup/vstup c a ch u y u

promnn reprezentovan t e a a rdou CVariable3 , kter se pou a v rmci vygenerovanho a zv a e C++ kdu v programovac jazyce PLC pro p o m rstup k hodnot parametru. e

8.1.4

Emulace aktuln hodnoty zsobn a a ku

Aktuln hodnota zsobn nebo t tzv. current-result je reprezentovna t a a ku, ez a rdou CRe4 sult . Tato t m nsleduj vlastnosti: rda a a c Uchovv vsledek posledn proveden operace vetn informace o jej datovm a a y e c e m e typu. Implementuje opertory pro matematick a porovnvac operace. a e a Umonuje nastavit aktuln hodnotu zsobn na hodnotu PLC promnn(template z a a ku e e t CVariable). rda Umonuje nastavit aktuln hodnotu zsobn na hodnotu PLC parametru z a a ku funkn nebo programovho bloku. c ho e

8.2

Ovladae karet digitln vstup ystup c a ch u/v u

P rstup na hardwarov karty pro digitln vstupy/vstupy je rozdlen na dv urovn e a y e e e (viz. obr.8.1). Nejvy urove je reprezentovna t ss n a rdou CDeviceManager, kter je a volna z objektu CMemory (objekt pro emulaci pamti PLC). a e Tato t udruje seznam aktivn ovlada karet pro PLC, piem zajit uje rda z ch cu rc z s pedn voln ovladai p snho hardwarovho za a zpracovn poadavku. r a a c rslu e e rzen a z Vlastn seznam ovlada je vytvoen jako pole statick velikosti obsahuj odkazy cu r e c na jednotliv registrovan ovladae5 . Pi vyhledvn ovladae odpov c e e c r a a c daj mu zadan e adrese se cyklicky prochz toto pole a ovlada je zde vyhledn. Pokud by bylo pouito a c a z vt mnostv aktivn ovlada, pak by bylo mono vytvoit seznam ovlada jako e s z ch cu z r cu vyhledvac strom pro zven rychlosti vyhledn za , kter odpov a poadovan a ys a rzen e d z e adrese. Vzhledem k tomu, e lze pedpokldat za normln okolnost pouze jednotky z r a a ch pouitch ovlada, lze pouit een povaovat za dostaten efektivn z y cu z er s z c e . Nsledn je v pamt ovm kontextu linuxovho jdra k dispozici instance tohoto oba e e e e a a zv r y y jektu s nzvem g KernelPLCDrivers, kter je vyu ana vytvoenm softwarovm PLC a i zaregistrovanmi ovladai. Tato instance je vytvoena zaveden modulu plc devicemanager.o y c r m do linuxovho jdra a mus bt dostupn ped nahrn e a y a r a m: Vlastn modulu, kter reprezentuje emulovan PLC. ho y e
Ob template t jsou deklarovny se stejnm parametrem ablony (stejnm vnitn datovm e rdy a y s y r m y typem). 4 Implementace v souboru cresult.h 5 Je tedy teba bhem pekladu modul odhadnout, kolik ovlada bude maximln pouito a r e r u cu a e z velikost pole sprvn nastavit. a e
3

54

PODPORA PRO RT-LINUX

Ovladae karet digitln vstup/vstup c a ch u y u

Jakhokoliv pou eho ovladae. e zvan c Modul lze zavst do pamti jedn z nsleduj ch zpsob6 : e e m a c u u V p e, e je softwarov PLC nainstalovno a modul je dostupn ve stanrpad z e a y dardn adresi modul jdra: m ar u a ]# modprobe plc_devicemanager V p e, e se modul nachz v jinm adresi7 : rpad z a e ar ]# insmod cesta/plc_devicemanager.o

8.2.1

Tvorba ovladae I/O karty c

Tvorbu ovladae I/O za lze rozdlit na dv sti: c rzen e e ca 1. Nejprve je teba vytvoit odvozenou t od t CDeviceDriver, kter impler r rdu rdy a e r rstupu na za . rzen mentuje virtuln metody t z ukzky 8.1 volan pi p a rdy a Popis virtuln metod je uveden v tab.8.2. a ch 2. Pot je teba vytvoit modul jdra RT-Linuxu, kter bhem svho zavdn do e r r a y e e a e pamti provede registraci instance t vytvoen v pedchoz kroku do sprvce e rdy r e r m a PLC za . Registrac do sprvce za ovlada oznm kter adresn rozsahy rzen a rzen c a , e vstup a vstup obsluhuje a maj mu tedy bt pedny. Registraci lze provst u y u y r a e metodou RegisterDriver() zkladn objektu CDeviceDriver. a ho Nzev metody a ReadAddress() SetAddress()

DriverInfo()

Virtuln metoda volan v p e, e je teba ze a a rpad z r za pe aktuln hodnotu zadan adresy. rzen r cst a e Virtuln metoda volan v p e, e je teba z proa a rpad z r gramu nastavit hodnotu nkter adresy, kter odpov a e e a d tomuto ovladai. c Metoda vracej nzev a popis ovladae. Je vyu ana c a c zv pi zobrazovn informac tkaj ch se ovladae. r a y c c

Tabulka 8.2: Popis virtuln metod denovanch ve t e CDeviceDriver. a ch y rd Jako p rklad pro tvorbu ovladae lze vyu komentovan zdrojov kdy vytvoench c zt e e o r y ovlada, kter jsou popsny nze. cu e a Kad z nsleduj ch ovlada umonuje pi zavdn modulu specikovat tak z y a c cu z r a e e PLC adresy, na kterch bude ovlada dostupn. Pehled je k dispozici v tab.8.3. y c y r Ovlada lze zavst do pamti pomoc nsleduj ho p c e e a c rkazu:
P rpadn lze zaveden modulu zajistit nap. startovac skriptem pi spoutn operan e r m r se c ho systmu. e 7 Cst cesta v um en modulu me bt absolutn nebo relativn cesta k modulu. a st uz y
6

55

PODPORA PRO RT-LINUX

Ovladae karet digitln vstup/vstup c a ch u y u

class CDeviceDriver { ... public: virtual int ReadAddress(void *Value, int iValueSize, int iInputAddr, int iByteAddress, int iBitAddress ) = 0; virtual int SetAddress(void *Value, int iValueSize, int iInputAddr, int iByteAddress, int iBitAddress ) = 0; virtual const char* DriverInfo(void) = 0; ... };

Ukzka 8.1: Virtuln metody pro implementaci ovladae. a a c Parametr iladdr Popis Parametr specikuj zkladn adresu, na c a kter bude ovlada dostupn pi adresovn e c y r a vstup. Pokud je tedy nap. hodnota u r iladdr=10, bude prvn adresa za dos rzen tupn jako %IB10. Pokud parametr nen a specikovn, je za adresovno od %IB0. a rzen a Parametr specikuj zkladn adresu, na c a kter bude ovlada dostupn pi adresovn e c y r a vstup. Pokud je tedy nap. hodnota y u r oladdr=7, bude prvn adresa za dos rzen tupn jako %QB7. Pokud parametr nen a specikovn, je za adresovno od a rzen a %QB0.

oladdr

Tabulka 8.3: Pehled spolench parametr pro moduly ovlada. r c y u cu ]# insmod plc_lpt.o [iladdr=2] [oladdr=3] Parametry modulu jsou nepovinn, pedpokld se, e je ji zaveden modul sprvce e r a a z z a ovlada plc devicemanager.o. Nzev modulu plc lpt.o je teba samozejm nahradit cu a r r e 56

PODPORA PRO RT-LINUX

Ovladae karet digitln vstup/vstup c a ch u y u

p snm nzvem modulu, kter chceme nahrt do pamti. rslu y a y a e Ovlada PCI karty Advantech c Ovlada dodan karty Advantech PCI LabCard 1750 je vytvoen velice jednodue. c e r s Ovlada si intern udruje informace o vech aktuln hodnotch vstup. Tyto c e z s a ch a y u hodnoty jsou pak ovladaem navrceny v p e, e uivatel z programu te hodnotu c a rpad z z c vstupu. Pokud uivatel zapse na vstup novou hodnotu, je intern informace aktualy z y izovna a na vstupy je okamit zapsna poadovan hodnota. V p e, e uivatel a y z e a z a rpad z z te hodnoty vstup, je aktuln hodnota z ana pi kadm poadavku. c u a sk r z e z Ovlada by bylo mono upravit tak, e by vzorkoval hodnoty pomoc vlastn realc z z ho time vlkna maximln p a a rpustnou frekvenc a uivatel by vdy z z z skal pouze aktuln a navzorkovanou hodnotu. Ovlada paraleln portu c ho Ovlada standardn paraleln portu je vytvoen s ohledem na ulohu otek c ho ho r rzen ac motorku. Popis a vznam jednotlivch adres je uveden v tab.8.4. y y Adresa 0x00 Velikost 1byte Vznam y Vstupn adresa, pi zpisu odpov a zpisu y r a d a na adresu 0x378 (zpisu na zkladn adresu a a paraleln portu). ho Vstupn adresa, pi ten odpov a ten r c d c adresy 0x379 (ten zkladn adresy parc a aleln portu + 0x1). ho Vstupn adresa, v p e, e obsahuje rpad z log.1, bylo vyvolno peruen od paraleln a r s ho portu. Po peten hodnoty je automaticky r c nastaveno zpt na log.0. e

0x00

1byte

0x01.0

1bit

Tabulka 8.4: Vznam jednotlivch adres ovladae paraleln portu. y y c ho Uloha motorku tento ovlada vyu a k vytvoen PID regultoru pro regulaci rzen c zv r a otek pomoc PID regultoru. ac a Nzev modulu ovladae paraleln portu je plc lpt.o. a c ho Ovlada pro komunikaci s user-space Linuxu c Tento ovlada slou ke komunikaci s user-space Linuxu. Pomoc vstupn adres lze c z ch nastavovat hodnoty PLC adres z user-space sti Linuxu, pomoc adres vstupn lze ca y ch z avat z user-space sti hodnoty promnnch PLC. sk ca e y

57

PODPORA PRO RT-LINUX

Ovladae karet digitln vstup/vstup c a ch u y u

Pro komunikaci mezi kernel-space a user-space je vyuivno jedno RT-Linux FIFO z a pro zpis promnnch do PLC, jedno pro ten promnnch z PLC a jedno pro nasa e y c e y tavovn parametr ovladae. a u c Ovlada poskytuje 64 adres pro vstupy a 64 adres pro vstupy. Velikost pamti je c y e nastavovna pi kompilaci modulu pomoc makra PLC USPACE MEMORY. a r Tab.8.5 popisuje, k emu slou jednotliv real-time FIFO pou a ovladaem. c z a zvan c Index F irstF IF O + 0 Nzev a d R c FIFO Popis Slou k naprogramovn intervalu, se z a kterm je zas an obsah vnitn pamti y l r e ovladae. Pro zpis p c a rkazu slou struktura z struct PLCUserSpaceControl deklarovan a v hlavikovm souboru plc uspace.h. c e Do poloky struktury Command pat z r jedna z hodnot PLC SEND SET TIME, PLC SEND STOP, PLC RESET. Pokud r je hodnota PLC SEND SET TIME, pat do poloky iTime asov interval v [ms] z c y s jakm budou zas ana data. Popis jedy l notlivch p u je popsn v hlavikovm y rkaz a c e souboru. Slou k zpisu dat odpov ch jedz a daj notlivm vstupn adresm ovladae. Pi y m a c r zpisu mus bt zaslno najednou hodnota a y a vech vstup. s u Slou k z avn hodnot vstup a vstup z sk a u y u ovladae (obsah vnitn pamti ovladae). c r e c Struktura zas ych dat je patrna z lan obr.8.2.

F irstF IF O + 1

Vstupn FIFO

F irstF IF O + 2

Vstupn FIFO y

Tabulka 8.5: Popis jednotlivch RT FIFO vyu ych ovladaem pro komunikaci s y zvan c user-space. Ovlada je zaloen na nsleduj m principu: c z a c Po zaveden modulu ovladae (plc uspacedriver.o) do pamti se zaregistruje ve c e sprvci PLC za a oteve si 3 po sob nsleduj real-time fo8 . a rzen r e a c Pokud chce uivatel z avat hodnoty promnnch ze softwarovho PLC, oteve z sk e y e r si c FIFO a naprogramuje si interval, s jakm m bt do vstupn FIFO rd y a y y ho zas an aktuln stav vnitn pamti ovladae (adres). l a r e c
8

Pomoc parametru FirstFIFO pi zavdn modulu lze specikovat, jak nejni FIFO se pouije. r a e e zs z

58

PODPORA PRO RT-LINUX

Podpora C++ v RT-Linuxovm kernelu e

Pokud chce uivatel nastavit nkter ze vstup ovladae, oteve si vstupn FIFO z e y u c r a zale do nho nov stav vech vstup. Tj. mus zapsat takov mnostv dat, s e y s u e z 9 kter odpov a velikosti vnitn pamti ovladae . e d r e c Obr.8.2 ukazuje strukturu dat, kter je zas ana ovladaem pi ten hodnot vstup a l c r c u 10 11 a vstup ovladae. Hlavika nabv vdy hodnoty I nebo O . Oba bloky jsou y u c c y a z vdy zas any za sebou. Pokud hlavika neobsahuje jednu z uvedench hodnot, pak z l c y zejm jsou data zas ana p s rychle a proces v user-space Linuxu je nest a r e l rli h cst. Dsledkem je, e data v FIFO jsou zahazovna. V tomto p e je vhodn provst u z a rpad e e reset ovladae (viz. popis c FIFO). c rd ho

Obrzek 8.2: Struktura bloku dat pi ten hodnot pamti ovladae. a r c e c Ovlada je uren zejmna pro monost vizualizace c procesu. Takto je tak c c e z rd ho e vyu an v rmci vzorov ulohy otek motorku. zv a e rzen ac Ovlada pro ladn programu c e Ovlada pro ladn programu emuluje vstupy a vstupy pomoc vnitn pamti, piem c e y r e rc z pi zmn hodnoty je vypsna na aktuln konzoli Linuxu nov hodnota nastavovan r e e a a a e promnn vetn informace o adrese, na kter se zmna udla. Pi ten hodnoty je na e e c e e e a r c konzoli vypsna informace o ten adrese a hodnot, kter se na n prv nachz a c e e a a e a . Tento ovlada je vhodn vyu c e zvat pouze v p e ladn pomalej program rpad e sch u vzhledem k (nebo doasn snzit frekvenci spoutn p snho RT vlkna), nebot c e s e rslu e a asov nronosti vstupu na linuxovou konzoli me pi astm p c e a c y uz r c e rstupu doj k nestat bilit celho systmu. e e e

8.3

Podpora C++ v RT-Linuxovm kernelu e

Tato st souvis s pouitm pekladaem GCC a jeho vlastnostmi vyuitelnmi pi ca z y r c z y r pekladu programu. V p e kompilace vygenerovanho C++ kdu jinm pekladaem r rpad e o y r c je mon, e se vet potebnch symbol bude liit. z e z yc r y u s Pro peklada GCC je teba m v rmci jdra RT-Linuxu k dispozici modul rtl cpp, r c r t a a kter implementuje symboly pro nkter funkce a opertory potebn k bhu zkomy e e a r e e pilovanho kdu jazyka C++. Potebn symboly se mohou liit ze dvou dvod: e o r e s u u 1. Je pouita odlin verze pekladae GCC. z s a r c
Hodnota makra PLC USPACE MEMORY pi pekladu ovladae. r r c Pokud nsleduje blok s hodnotami vstup. a u 11 Pokud nsleduje blok s hodnotami vstup. a y u
10 9

59

PODPORA PRO RT-LINUX

Podpora C++ v RT-Linuxovm kernelu e

2. Peklada GCC byl byl bhem sv kompilace zkompilovn s jinmi parametry. r c e e a y Souast distribuce RT-Linuxu je verze modulu, kter implementuje funkce fputs(), c a pure virtual(), cxa atexit(), this xmap does not exist(), assert fail(), isnan(). V bal RT-Linux Contrib je k dispozici novj verze modulu, kter nav oproti ku e s a c pvodn verzi implementuje opertory new, new[], delete, delete[]. Tyto opertory jsou u a a v podstat pouze pesmrovny tak, aby vyu e r e a zvaly voln standardn linuxovho kera ho e nelu pro dynamick alokace a dealokace pamti. Z toho plyne omezen e je lze vyu e e , z zt pouze bhem inicializace a deinicializace modulu jdra. Dostupnost tchto opertor je e a e a u c z a proto podm ena existenc makra CPP INIT . Nav tato verze umonuje linkovn n real-time modul sloench z v zdrojovch soubor. u z y ce y u Na piloenm CD je upraven verze pvodn modulu rtl cpp z RT-Linux Contrib, r z e a u ho kter je vyzkouena s kompiltory GCC 2.96 a GCC 3.2. Tato verze nav implementuje a s a c symbol cxa pure virtual(). Vzhledem k tomu, e kompiltor GCC lze kompilovat s mnoha rznmi parametry, z a u y me se stt, e v jin verzi, p uz a z e rpadn verzi z jin distribuce bude chybt njak dal e e e e y s symbol. Obvykle se jedn o rzn funkce se speciln vznamem, kter jsou v rmci a u e a m y e a normln program linkovny s defaultn funkcionalitou, lze je deklarovat podobn a ch u a e jako ve uveden symboly. ys e

60

Kapitola 9 Pouit softwarovho PLC z e


Tato kapitola se zabv pouit vytvoenho software pro programovn softwarovho y a z m r e a e PLC. Nejprve je v sti 9.1 uveden nvod na zprovoznn programu, st 9.2 popisuje ca a e ca z ar utilitu plc2cpp a jej parametry na p rkazovm dku, st 9.3 popisuje monost vytven e ra ca knihoven funkc a funkn blok pro znovuvyuit ji hotovho kdu a st 9.4 ob c ch u z z e o ca sahuje jednoduch nvod, jak vytvoit softwarov PLC. y a r e

9.1

Instalace softwarovho PLC e

V tto sti je uveden strun nvod ke zprovoznn softwarovho PLC. Nejprve je vak e ca c y a e e s teba m k dispozici funkn instalaci RT-Linuxu. Krtk nvod k jeho zprovoznn je r t c a y a e uveden v p rloze A. V p e, e je RT-Linux uspn nainstalovn, postup je nsleduj : rpad z es e a a c 1. Pipravte si zdrojov kdy projektu. Z r e o skat je lze bud z piloenho CD, nebo z r z e domovsk strnky projektu [2]. e a 2. Rozbal zdrojov kd do pracovn adrese1 : me y o ho ar ]# tar xzf SoftwarePLC-x.yy.tgz 3. Zmn aktuln adres na adres se zdrojovm kdem: e me a ar ar y o ]# cd SoftwarePLC-x.yy 4. Spust konguran skript2 : me c ]# ./configure
Znaky x.yy znamenaj verzi programu. V p e, e chcete zmnit nkter vchoz nastaven programu, lze pidat parametr help pro rpad z e e e y r npovdu o dostupnch parametrech. a e y
2 1

61

I POUZIT SOFTWAROVEHO PLC

Parametry pkazovho dku r e ra

5. Nyn ji meme spustit kompilaci programu a podprnch modul jdra: z uz u y u a ]# make dep ]# make 6. Pokud se kompilace zdaila, je meme pistoupit k instalaci programu: r uz r ]# make install Instalace spo a v nakop an modul jdra se sprvcem ovlada za cv rov u a a cu rzen a jednotlivch ovlada do systmovho adrese s moduly jdra, instalaci poy cu e e ar a mocnho skriptu mkplc.sh pro vytven softwarovho PLC, instalaci preprocee ar e soru plc2cpp a instalaci pomocnch knihoven potebnch pro kompilaci PLC y r y programu do modulu jdra pomoc C++. a V tuto chv mme tedy k dispozici ve potebn pro vytven uivatelskch proli a s r e ar z y gram pro PLC. u

9.2

Parametry p rkazovho dku e ra


Parametr -t directory -s source -p project Popis Adres, do kterho se maj ukldat vygenerovan zdrojov ar e a e e soubory v C++. Nzev vstupn souboru v jazyce Instruction List. a ho Nzev projektu. Pou a se pro nzev vygenerovanho moda zv a e ulu jdra, pro odvozen nzvu hlavikovho souboru s exa a c e portem globln promnch atp. a ch e y v [ns] uruj jak asto bude detekovna nbn hrana Cas c c c a a ez a signlu pi spoutn uloh, kter nejsou spoutny periodicky. a r s e e se Cas v [ns] uruj periodu spoutn uloh, kter nemaj c c se e piazen TASK. rr Dal adrese oddlen rkou pou e pro hledn knis ar e e ca zvan a hoven. Zobraz npovdu k programu. a e Do souboru listle ulo seznam vech vygenerovanch souz s y bor v C++ (vetn hlavikovch soubor). u c e c y u

Pehled a popis parametr p r u rkazovho dku utility plc2cpp je uveden v tab.9.1. e ra

-r time -n time -L libdirs -h -l listle

Tabulka 9.1: Pehled parametr p r u rkazovho dku utility plc2cpp. e ra

62

I POUZIT SOFTWAROVEHO PLC

Vytven knihoven ar

9.3

Vytven knihoven ar

Vytven knihoven je velmi jednoduch. Sta vytvoit zdrojov soubor s jedn nebo ar e c r y m v bloky pro zpis programu (funkce, funkn blok, blok typu program). ce a c Knihovny se hledaj v nsleduj ch adres a c arch: Pokud je pi pekladu plc2cpp denovna hodnota makra PLC LIBDIRS, je r r a jeho hodnota pedpokldna jako : oddlen seznam dal adres, kde jsou r a a e y sch aru hledny objekty z knihoven. a Pokud je deklarovna promnn prosted PLC LIBDIR, je jej hodnota pedpokldna a e a r r a a jako : oddlen seznam dal adres, kde jsou hledny dal objekty z knie y sch aru a s hoven. Dal monost je parametr -L p s z rkazovho dku(viz.tab.9.1), kter me obsae ra y uz hovat rkou oddlen seznam adres, kde se tak mohou nachzet knihovn ca e y aru e a objekty. V p e, e knihovna pou a jinou knihovnu, lze ve zdrojovm kdu denovat rpad z zv e o zvislost zpsobem uvedenm v ukzce 9.1. a u y a

(* Include: min.plc,max.plc *) (* Include: pid.plc *) PROGRAM prg_control ...

Ukzka 9.1: Denice vyuit jin knihovny ve zdrojovm kdu PLC. a z e e o Tato vlastnost nen v [5] denovna. Jedn se o rozren vytvoenho softwarovho a a s r e e PLC, kter je vytvoena za uelem komfortnj vytven knihoven i program v a r c e sho ar u jazyce Instruction List. V p e, e je nalezena direktiva Include: v komenti, kter za a na novm rpad z ar y cn e dku, jsou uveden soubory zpracovny stejn, jako by byly soust pvodn zdrora e a e ca u ho jovho kdu. Za direktivou me nsledovat jeden i v zdrojovch soubor, jejich e o uz a c ce y u z jednotliv nzvy jsou oddleny rkou. e a e ca

9.4

Vytvoen softwarovho PLC r e

V tto sti je uveden jednoduch nvod k vytvoen softwarovho PLC za pomoci ve e ca y a r e ys vytvoenho programu. Podm r e nkou pro sprvnou funkci je samozejm zprovoznn a r e e e softwarov PLC a funkn RT-Linux. e c 63

I POUZIT SOFTWAROVEHO PLC

Vytvoen softwarovho PLC r e

Pedpokldejme, e chceme vytvoit projekt, kter se bude jmenovat foo, bude se r a z r y nachzet v domovskm adresi uivatele v podadresi s nzvem foo plc a bude se a e ar z ar a skldat ze dvou zdrojovch souboru foo1.plc a foo2.plc uloench p a y z y rmo v adresi ar projektu. Postup je tedy nsleduj : a c 1. Zalo nov projekt zme y tmp]# mkplc.sh --create foo --target-dir ~/foo_plc 2. Nyn pidme zdrojov soubory do Makele. Najdeme v adresi /foo plc soubor r a e ar Makele. Oteveme ho v obl em textovm editoru a najdeme dek: r ben e ra # FILES=deps/filename.plc Tento dek zmn na: ra e me FILES=deps/foo1.plc deps/foo2.plc 3. Nyn vytvo soubory obsahuj zdrojov kdy pro PLC v jazyce instruction rme c e o list foo1.plc a foo2.plc 4. Chceme-li provst kompilaci programu zadme na p e a rkazovm dku v adresi e ra ar projektu: foo_plc]# make

5. Pro sputn vytvoenho softwarovho PLC sta zadat3 : se r e e c foo_plc]# make start 6. Pro zastaven softwarovho PLC lze pou e zt: foo]# make stop

Skript pro vytven softwarovho PLC je koncipovn tak, aby byl co nejjednodu ar e a ss. Pedpokld, e zdrojov kdy pro PLC se budou nachzet p v adresi projektu, r a a z e o a rmo ar vygenerovan soubory budou ukldny do podadrese sources v adresi projektu a vye a a ar ar generovan modul jdra se bude jmenovat plc projekt.o. Dle je teba, aby v nkterm y a a r e e zdrojovm souboru pro PLC byl denovn blok typu CONFIGURATION s nzvem e a a
Pedpokld se, e je sputn RT-Linux a zaveden modul plc devicemanager.o, p r a a z se rpadn ovladae e c za , kter bude program vyu rzen e zvat.
3

64

I POUZIT SOFTWAROVEHO PLC

Vytvoen softwarovho PLC r e

shodnm s nzvem projektu (v naem p e by to tedy byl blok CONFIGURATION y a s rpad foo. V seznamu soubor, ze kterch se projekt skld je teba uvdt nzev souboru u y a a r a e a vetn podadrese deps. Dvodem je, e v tomto podadresi je uloen pomocn c e ar u z ar z y 4 soubor, kter obsahuje seznam d vygenerovanch soubor a zrove je vyu an y rve y u a n zv programem make, pro udrovn zvislost v projektu. z a a a a e o o a Ukzka 9.2 uvd zkladn kostru zdrojovho kdu PLC. V kdu je denovn jeden a blok typu program vyu c globln promnnou out, konguran blok (s nzvem zvaj a e c a stejnm jako nzev projektu - tedy foo) a spoutn programovho bloku prg rotace s y a se e periodou 0.5s. Zrove je v rmci komente na prvn dku uvedeno pouit knihovny a n a ar m ra z pid.plc.

(* Include: pid.plc *) PROGRAM prg_rotace VAR_EXTERNAL out: BYTE; END_VAR LD out ... END_PROGRAM CONFIGURATION foo VAR_GLOBAL out AT %QB0: BYTE := 1; END_VAR RESOURCE xx ON yy TASK rotaceTask(INTERVAL:=T#0.5s); PROGRAM p1 WITH rotaceTask: prg_rotace(); END_RESOURCE END_CONFIGURATION

Ukzka 9.2: Ukzka kostry PLC programu. a a V p e sloitj projektu lze samozejm vygenerovan Makele upravit run, rpad z e sho r e y c e nebo vytvoit zcela nov soubor odpov c poadavkm. r y daj z u

Tento seznam je pou an pro smazn d vygenerovanch soubor v p e rekompilace. zv a rve y u rpad

65

Zvr a e
Ukolem diplomov prce bylo vytvoit pro operan systm RT-Linux softwarov vye a r c e e baven umonuj spoutt program zapsan v nkterm jazyce pro PLC, kter je z c se y e e y denovanm v norm IEC-1131-3. e e C prce se podailo splnit. Bylo vytvoeno softwarov PLC s takovmi zkladn l a r r e y a mi vlastnostmi, jak je denovno v norm IEC-1131-3. Pro implementaci byl zvolen jazyk a e Instruction List. Funkcionalita vytvoenho PLC odpov a poadavkm normy. Vbr r e d z u y e vlastnost byl proveden tak, aby bylo mono vyu vechny instrukce, bloky pro zpis z zt s a programu, promnn reprezentovan zstupnm jmnem i p e e e a y e rmou adresou. Dle je a mono vyu vechny zpsoby spoutn vlken PLC. Umysln nebyla implementovna z zt s u se a e a monost vyu z zvat zvorkovn aritmetickch operac Dle se nepoda implementoa a y . a rlo vat pedvn funkn blok v parametrech funkc funkn blok a blok typu r a a c ch u , c ch u u r y e r y program. V p rloze B je uveden pehled vlastnost denovanch v [5], kter vytvoen systm podporuje, p e rpadn nepodporuje. e Vzhledem k poteb vytvet knihovny, je mon pomoc direktivy Include:, um en r e ar z e st e uvnit komente denovat zvislost zdrojovho kdu na p sn knihovn. A to jak r ar a e o rslu e e v rmci koncovho programu uivatele, tak v rmci kterkoliv knihovn funkce. Bli a e z a e zs informace o tto vlastnosti lze nalzt v sti 9.3. e e ca Softwarov PLC bylo vytvoeno jako utilita (preprocesor) jazyka Instruction List e r do jazyka C++. Pro kompilaci do strojovho kdu je vyuit standardn linuxov kome o z y piltor. Pro kompilaci vygenerovanho C++ kdu je teba pomocn knihovna, kter a e o r a a je soust softwarovho PLC. ca e Vzhledem k volb pevdt PLC program na program v jazyce C++, byla zrove e r a e a n ovena monost vyu k tvorb RT-Linuxovch aplikac C++. Je vak teba se v er z zt e y s r programu dret omezen uvedench v sti 2.2. z y ca V rmci PLC programu je mon tak vyu a z e e zvat FPU pro matematick operace s e pohyblivou dovou rkou. Toho je doc ra ca leno t e kad vygenerovan vlkno m ve m, z z e e a a svch parametrech pi zakldn uvedeno, e vyu a FPU. y r a a z zv Souast vytvoenho PLC je tak nvrh pro modulrn tvorbu ovlada, kter c r e e a a cu e umonuj z PLC programu pistupovat na extern za . Modularita ovlada umonuje z r rzen cu z libovoln pou e PLC kongurovat dle dostupnho hardware. V rmci projektu byly e zvan e a vytvoeny ovladae pro paraleln port, ovlada umonuj komunikaci mezi uivatelskou r c c z c z st linuxu a softwarovm PLC s vyuit pro visualizaci eho procesu. Dle byl ca y z m rzen a vytvoen ovlada pro PCI kartu s digitln vstupy/vstupy. r c a mi y Funknost celho systmu byla ovena na PLC programu pro otek moc e e er rzen ac 66

I POUZIT SOFTWAROVEHO PLC

Vytvoen softwarovho PLC r e

d torku. R c program komplexn demonstruje vlastnosti a monosti vytvoenho softe z r e warovho PLC. Vyu a monost spoutn ulohy na zklad nbn hrany (men e zv z se a e a ez e er aktuln otek motorku), periodick spoutn programu pro regulaci otek pomoc a ch ac e se ac PID regultoru. Zrove je vyuit ovlada pro komunikaci s user-space RT-Linuxu. a a n z c Na vzorovm c programu byly tak otestovny rychlostn monosti softwarovho e rd m e a z e PLC. Na po ci Intel Pentium 3 700MHz bylo vyykoueno cyklick spoutn vlken cta s e se a PLC programu s periodou krat ne 100[s]. s z Vytvoen softwarov PLC je um eno na internetov adrese [2] jako projekt pod r e e st e licenc GPLv2. Na tto adrese je t mon nalzt p e ez z e e rpadn dal upravy a opravy e s programu.

67

Dodatek A Instalace RT-Linuxu


Tato st v krtkosti uvd nvod k instalaci RT-Linuxu. Pedpokldaj se alespo ca a a a r a n sten znalosti potebn pro sprvu Linuxu a instalaci uivatelsky kompilovanho ca c e r e a z e jdra. Pro podrobnj informace je teba si prostudovat p snou dokumentaci na a e s r rslu nze uvedench adresch. y a a K instalaci je teba z adresy http://www.rtlinux.org sthnout distribuci RT-Linuxu. r Soust staenho bal je i tzv. patch1 pro vybran verze pvodn linuxovho ca z e ku e u ho e jdra. Ten provede v pvodn zdrojovm kdu linuxu zmny potebn k bhu RTa u m e o e r e e Linuxu. a y o e Nyn je mon si z adresy ftp://ftp.linux.org sthnout zdrojov kd linuxovho z e jdra. Je teba vybrat takovou verzi, kter je podporovna RT-Linuxem (tj. existuje a r a a patch na tuto verzi linuxovho jdra). e a Mme-li k dispozici oba bal popsan v pedchoz odstavc meme pistoupit a ky e r ch ch, uz r k vlastn instalaci: Budeme pedpokldat, e vechny operace budeme provdt na cest /usr/src: r a z s a e e ]# cd /usr/src Nyn rozbal staen linuxov jdro (pokud se staen soubor jmenuje linux me z e e a z y 2.4.20.tar.gz): ]# tar xzf linux-2.4.20.tar.gz Rozbal staen zdrojov kdy RT-Linuxu (pokud se staen soubor jmenuje me z e e o z y rtlinux-3.2-pre1.tar.gz): ]# tar xzf rtlinux-3.2-pre1.tar.gz Nyn vytvo rme symblick link na nov zdrojov soubory jdra (t zajist y e e a m me pouit sprvnch hlavikovch soubor bhem kompilace): z a y c y u e
1

Tj. soubor jeho aplikac na pvodn linuxov jdro z ame jdro s podporou real-time extenze. z u e a sk a

68

INSTALACE RT-LINUXU

]# rm -f /usr/src/linux ]# ln -s /usr/src/linux-2.4.20 /usr/src/linux Nyn najdeme v adresi rtlinux-3.2-pre1/patches patch na pouitou verzi jdra. ar z a Nyn aplikujeme patch (za pedpokladu, e jsme nali soubor kernel patch-2.4.20 r z s rtl3.2-pre1): ]# cd linux-2.4.20 ]# patch -p1 < ../rtlinux-3.2-pre1/patches/kernel_patch2.4.20-rtl3.2-pre1 Provedeme konguraci linuxovho jdra (je teba vybrat vechny potebn ovladae e a r s r e c 2 a podporu modul ) u ]# make menuconfig Nyn ji meme provst kompilaci jdra a nainstalovat nov moduly: z uz e a e ]# make bzImage modules modules_install Zbv jet nakongurovat RT-Linuxovou extenzi a nainstalovat jej moduly: y a se ]# ]# ]# ]# ]# cd ../rtlinux-3.2-pre1 make menuconfig make dep make all make install

Nyn ji mme k dispozici zkompilovanou verzi linuxovho jdra s podporou real z a e a time extenze a moduly RT-Linuxu, kter po zaveden do jdra linuxu aktivuj real-time e a rozren (a tedy tak RT-Linux). Zaveden tchto modul lze provst nap. pomoc s e e u e r 3 p rkazu : /etc/rc.d/rtlinux start Dal informace lze nalzt krom internetu tak v souborech README, p s e e e rpadn e INSTALL, kter se nachzej v adres s Linuxem, p e a arch rpadn RT-Linuxem. e

Podpora modul je teba pro kompilaci RT-Linuxovch modul. u r y u Cesta ke spoutc s e mu skriptu se me liit v zvislosti na parametrech zvolench pi kompilaci uz s a y r RT-Linuxu a na pouit distribuci linuxu z e
3

69

Dodatek B Kompatibilita s normou IEC-1131-3


Nze uveden tabulka obsahuje pehled podporovanch vlastnost softwarovho PLC a r y e vzhledem k poadovanm vlastnostem, kter jsou uvdny v [5]. V tabulce je vdy z y e a e z cslo a a uvdno tabulky z [5], vlastnosti, krtk charakteristika (obvykle pro celou a e cslo skupinu vlastnost informace o tom, zda je vlastnost podporovna a p ), a rpadn poznmku e a k implementaci. Nkter vlastnosti, kter nesouvis p s programovac jazykem Instruction List, e e e rmo m nejsou nze uvedeny. Tab.-. c 1-1 Popis Znakov sady e Podporovno a Poznmka a Podporovny ASCII a znaky, diakritika podporovna v rmci a a koment. aru Podporovna v rmci a a nzv promnnch, a u e y funkc a funkn c ch blok. u V tchto e p rpadech je rozd l v malch a velkch y y p smenech ignorovn. a

1-2

Mal p a smena

Ano

1-3a 1-3b 1-4a 1-4b 1-5a

Ano Ne Ne Ne Ne

Programovn a pomoc ebckovch z r y diagram nen k u dispozici. Viz. poznmka v kapia tole 5.

1-5b 1-6a

Zvorkov operace a e

Ne 70

KOMPATIBILITA S NORMOU IEC-1131-3

Tab.-. c 1-6b 2-1 2-2 2-3 3-1

Popis Zvorkov operace a e

Komente ar

Podporovno a Ne Ano Ano Ano Ano

Poznmka a

Na samostatnm e dku i na dku s ra ra kdem o programu. Zrove vyuito k a n z denici zvislosti a na knihovnch (viz. a kapitola 9).

4-1 4-2 4-3 4-4 4-5 4-6 4-7 4-8 5-1 6-1 6-2 6-3 6-4 6-5 6-6 6-7 6-8 7-1a 7-1b 7-2a 7-2b 8-1 8-2 8-3 8-4 8-5 8-6

e Retzcov konstanty e Kombinace znak v u etzc r e ch

Ano Ano Ano Ano Ano Ano Ano Ano Ne Ne Ne Ne Ne Ne Ne Ne Ne Ano Ano Ano Ano Ne Ne Ne Ne Ne Ne

Casov konstanty e

Konstanty pro datum a denn as c

P sn datov typy rslu e e nejsou podporovny. a

71

KOMPATIBILITA S NORMOU IEC-1131-3

Tab.-. c 10-1 10-2 10-3 10-4 10-5 10-6 10-7 10-8 10-9 10-10 10-11 10-12 10-13 10-14 10-15 10-16 10-17 10-18 10-19 10-20 12-1 12-2 12-3 12-4 12-5 14-1

Popis Elementrn a typy

datov e

Podporovno a Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ne Ano Ne Ne Ne Ne Ano Ano Ano Ano Ne Ne Ne Ne Ne Ne

Poznmka a

Odvozen uivatelsk e z e datov typy e

Inicializace uivatelskch z y tovch typ y u

daNe Ne Ne Ne Ne Ano Ano Ano Ano Ano Ano 72

14-2 14-3 14-4 14-5 14-6 15-1 15-2 15-3 15-4 15-5 15-6

P a adresace rm

KOMPATIBILITA S NORMOU IEC-1131-3

Tab.-. c 15-7 15-8 15-9 16-1 16-2 16-3 16-4 16-5 16-6 16-7 16-8

Popis

Bloky promnnch e y

Podporovno a Ano Ano Ano Ano Ano Ano Ano Ano Ano Ne Ano

Poznmka a

Klcov slovo je ig e norovno, a pvodn u vznam je ztracen. y

16-9 16-10 17-1 17-2

Deklarace promnnch e y

Ano Ano Ano Ano Studen y restart nen mon bnmi z e ez y prostedky v RTr Linuxu zpracovat. Klcov slovo e RETAIN je ignorovno, promnn a e e si po restartu nezachovvaj svoji hoda notu. Pole nejsou porovna. a pod-

17-3 17-4 17-5 17-6 17-7 17-8 18-1 18-2 18-3 18-4

Ano Ne Ano Ne Ne Ne Ano Ano Ano Ne

Inicializace promnnch e y

Viz. poznmka o REa TAIN promnnch. e y

73

KOMPATIBILITA S NORMOU IEC-1131-3

Tab.-. c 18-5

Popis

Podporovno a Ano

Poznmka a S vyj mkou etzcovch r e y promnnch. e y

18-6 18-7 18-8 18-9 33-1 33-2 33-3 33-4a 33-4b

Monosti z deklarace funkn blok c ch u

Ne Ano Ne Ano Ano Ano Ano Ano Ne

Klcov e TAIN je Klcov e TAIN je Klcov e TAIN je

slovo REignorovno. a slovo REignorovno. a slovo REignorovno. a

Grack programovac e jazyky nejsou podporovny. a

33-5a 33-5b 33-6a 33-6b 33-7a 33-7b 33-8a 33-8b 33-9a 33-9b 49-1

Monosti z deklarace blok CONFIGURAu TION a RESOURCE

Ne Ne Ne Ne Ne Ne Ne Ne Ne Ne Ano

49-2 49-3 49-4 49-5a 49-5b

Ano Ano Ano Ano Ano

Spoutn se je ve skutenosti c nahrazeno periodickm y spoutn s e m. Bli informace lze z s nalzt v kapitole 7. e

49-6a 49-6b

Ano Ne 74

KOMPATIBILITA S NORMOU IEC-1131-3

Tab.-. c 49-6c 49-7

Popis

Podporovno a Ano Ne

Poznmka a Deklaraci lze nahradit pomocnou promnnou. e

49-8a 49-8b 49-9a 49-9b 49-10a 49-10b 49-10c 49-10d 49-10e 49-10f 50-1a 50-1b 50-2a 50-2b 50-3a 50-3b 50-4a 50-4b 50-5a 50-5b 51-1 52-1 52-2 52-3 52-4 52-5 52-6 52-7 52-8 52-9 52-10 52-11 52-12 52-13 52-14

Parametry deklarace blok TASK u

Ano Ano Ano Ano Ne Ne Ne Ne Ne Ne Ano Ano Ne Ne Ano Ne Ne Ne Ne Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano

Grack jazyky nejsou e podporovny. a

Instrukce jazyka IL

75

KOMPATIBILITA S NORMOU IEC-1131-3

Tab.-. c 52-15 52-16 52-17 52-18 52-19 52-20 52-21

Popis

Podporovno a Ano Ano Ano Ano Ano Ano Ne

Poznmka a

e Retzen operac po moc zvorek nen a podporovno. a

53-1 53-2 53-3 54-4

Voln a blok u

funkn c ch

Ano Ano Ne Ne

Funkn bloky jako c parametry nejsou podporovny. a

54-5 54-6 54-7 54-8 54-9 54-10 54-11 54-12 54-13

Ne Ne Ne Ne Ne Ne Ne Ne Ne

76

Dodatek C zen motorku pomoc R softwarovho PLC e


V tto asti je krtce popsna vzorov aplikace, kter ukazuje, jak lze softwarov PLC e c a a a a e vyu Jedn se o motorku, kter je pipojen k PC pomoc paraleln portu. zt. a rzen y r ho Aplikace se skld ze dvou nezvislch st a a a y ca : 1. Vlastn c program napsan v jazyce Instruction List pro PLC. Ten pomoc rd y PID regultoru motorek, kter je pipojen k po ci pomoc paraleln a rd y r cta ho portu. 2. Jednoduch ukzkov vizualizace pro X-Windows naprogramovan v jazyce C++, a a a a zobrazuj aktuln otky motorku a umonuj nastavit poadovan otky c a ac z c z e ac motorku.

C.1

d R c program motorku

d R c program motorku je koncipovn jako program pro PLC v jazyce Instruction List a a jako takov je zpracovn vytvoenou utilitou plc2cpp. Nsledn je zkompilovn do y a r a e a modulu RT-Linuxovho kernelu. Rychlost oten je e ac rzena genertorem PWM. a Sn an smru a rychlosti oten i vlastn prob a pomoc paraleln portu m e ac rzen h ho (je tedy vyu an vytvoen ovlada paraleln portu). zv r y c ho Velikost otek (dan veliina) se nastavuje z user-space s vyuit p snho ac za a c z m rslu e ovladae. Lze ji tedy dynamicky mnit za bhu programu. Stejn tak jsou pedvny c e e e r a a aktuln men otky do user-space RT-Linuxu. a er e ac Program se skld ze t periodicky spoutnch program s nleduj m vznamem: a a r se y u a c y 1. Sn an potu impulz vygenerovanch inkrementln idlem um enm na m c u y a m c st y h rdelce motorku. Z generovanch impuls je zrove urovn smr oten y u a n c a e ac . 2. Pravideln pevod potu vygenerovanch impuls na otky za sekundu. Hodnota y r c y u ac otek je kladn pro jeden smr a zporn pro smr druh. ac a e a a e y 77

IZEN MOTORKU POMOC SOFTWAROVEHO PLC R I I

Vizualizan program c

3. Vlastn vpoet c veliin. Skld se z vyhodnocen regulan odchylky, y c rd ch c a a c vpotu PID regultoru a generovn PWM. y c a a Cel c program lze nalzt v podadresi plc/motorek v archivu se softwarovm y rd e ar y PLC.

C.2

Vizualizan program c

Vizualizan program je vytvoen jako jednoduch aplikace pro X-Windows. Ke sv c r a e innosti vyu a objektovou aplikan knihovnu wxWindows (viz. adresa [3]). c zv c Program demonstruje monosti vyuit PLC, piem m tyto vlastnosti: z z rc z a Umonuje nastavit poadovan otky motorku (tj. s vyuit ovladae pro koz z e ac z m c munikaci PLC s user-space RT-Linuxu zapse tuto hodnotu do pamt ovho pros e e 1 toru softwarovho PLC ). e Gracky zobrazuje aktuln otky motorku tak jak je m softwarov PLC (tj. a ac er e tyto otky jsou teny z pamt ovho prostoru softwarovho PLC). Dle zobrazuje ac c e e e a aktuln poadovanou hodnotu otek, tak jak ji nastavil uivatel. Vzhled aplikace a z ac z je patrn z obr.C.1. y Vizualizan program je dostupn v podadresi visualisation softwarovho PLC. c y ar e

Z pohledu RT-Linuxu se jedn o pamt ov prostor linuxovho kernelu. a e y e

78

IZEN MOTORKU POMOC SOFTWAROVEHO PLC R I I

Vizualizan program c

Obrzek C.1: Ukzka jednoduchho vizualizan rozhran a a e c ho .

79

Dodatek D Obsah piloenho CD r z e


Soust diplomov prce je CD, jeho obsah a struktura jsou patrny z tab.D.1. ca e a z Adres ar dokument linux Obsah adrese ar Text diplomov prce ve formtu PDF a Postscript. e a a Zdrojov kdy linuxovho jdra s aplikovanm patchem e o e a y RT-Linuxu verze 3.2-pre1. Jedn se o verzi, na kter bylo a e PLC vyv jeno a testovno. a Staen bal pro RT-Linux a RT-Linux Contrib. z e ky Obsahuje vytvoen softwarov PLC. r e e

rtlinux plc

Tabulka D.1: Obsah a struktura piloenho CD. r z e

80

Literatura
[1] Domovsk strnky projektu RT-Linux [online]. e a <http://www.rtlinux.org>. [2] Domovsk strnky projektu Softwarov PLC pro RT-Linux [online]. e a e <http://sourceforge.net/projects/softwareplc>. [3] Domovsk strnky projektu wxWindows [online]. e a <http://www.wxwindows.org>. [4] Charles Donnelly and Stallman Richard. Bison. Free Software Foundation, 1995. [5] In IEC-1131-3 - Programmable controlers - Part3, Bezen 1993. r [6] A.M. Kuchling. Regular Expression HOWTO [online]. <http://www.amk.ca/python/howto/regex>. s [7] Melichar, Ceka, Jeek, and Richta. Konstrukce peklada 1,2. Vydavatelstv z r cu CVUT, 1999. [8] Thomas Niemann. A Compact Guide To Lex&Yacc. ePaper Press. [9] Victor Yodaiken, Duben 1999. The RTLinux Manifesto [online]. <http://www.fsmlabs.com/developers/white_papers/rtmanifesto.pdf>.

81

Das könnte Ihnen auch gefallen