• Nebyly nalezeny žádné výsledky

Diplomov´a pr´ace

N/A
N/A
Protected

Academic year: 2022

Podíl "Diplomov´a pr´ace"

Copied!
76
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

CESK´ˇ E VYSOK´E U ˇCEN´I TECHNICK´E V PRAZE

Fakulta elektrotechnick´a

Diplomov´ a pr´ ace

Bc. Martin Ron

Energetick´ e ´ uspory v simulaci digit´ aln´ı tov´ arny

Katedra ˇr´ıdic´ı techniky

Vedouc´ı pr´ace: Ing. Pavel Burget, Ph.D.

(2)
(3)
(4)
(5)

Podˇ ekov´ an´ı

Dˇekuji sv´ym rodiˇc˚um, kteˇr´ı mˇe podporovali v pr˚ubˇehu cel´eho studia a v dobˇe psan´ı t´eto pr´ace obzvl´aˇst’. Chci tak´e podˇekovat sv´emu vedouc´ımu Ing. Pavlu Burgetovi Ph.D. za jeho veden´ı a cenn´e rady.

(6)
(7)

Abstrakt

Tato pr´ace se zab´yv´a n´avrhem pluginu pro digit´aln´ı tov´arnu Tecno- matix - konkr´etnˇe pro jej´ı prostˇred´ı Process Simulate. Popisuji zde postup n´avrhu architektury pluginu pro modelov´an´ı a simulaci pro- filu PROFIenergy, jeho programov´an´ı a jeho pouˇzit´ı pˇri virtu´aln´ım zprovoznˇen´ı modelov´eho pˇr´ıpadu. V popisu n´avrhu architektury plu- ginu se zab´yv´am n´avrhem stavov´eho automatu pro simulaci profilu PROFIenergy, ideou jeho pouˇzit´ı v Process Simulate a jeho napojen´ı na jiˇz existuj´ıc´ı komponenty tohoto prostˇred´ı. V ˇc´asti o programov´an´ı mimo jin´e vysvˇetluji chov´an´ı vybran´ych funkc´ı knihovny Tecnoma- tix.NET API, n´avrh simulaˇcn´ıho stavov´eho automatu a jeho zaˇclenˇen´ı do prostˇred´ı Process Simulate. Zab´yv´am se dvˇema funkˇcn´ımi strukturami prostˇred´ı Process Simulate CEE - logick´ym blokem a uˇzivatelskou funkc´ı.

V z´avˇereˇcn´e ˇc´asti pr´ace popisuji postup pˇri virtu´aln´ım zprovozˇnov´an´ı modelu v´yrobn´ı buˇnky robotu, jej´ı simulaci a v´ystupn´ı data ze simulace za pouˇzit´ı vytvoˇren´eho pluginu.

Kl´ıˇcov´a slova: Tecnomatix, Process Simulate, stavov´y automat, Tecno- matix.NET API, virtu´aln´ı zprovoznˇen´ı, PROFIenergy

(8)
(9)

Abstract

The scope of this thesis is about design of plugin for digital manufactu- ring tool Tecnomatix - with focus on its suite Process Simulate. I describe here procedure of designing architecture of plugin for modeling and simu- lation of PROFIenergy profile, its programming and its usage for virtual commissioning of demonstrative robotic cell. During description of de- sign of the plugin architecture I develop system of state automata for simulation of PROFIenergy profile, I explain way of its usage in Process Simulate suite and integration with its existing components. In the part about programming beside other I describe behavior of functionalities I picked up from library Tecnomatix.NET API, I describe design of code implementing state automata and integration of its components with Process Simulate. I furthermore explain the two functioning structures of Process Simulate CEE used in my program - the logic block and the user functions. In the last part of thesis I describe procedure used for virtual commissioning of demonstrative model of production cell of ro- bot, simulation of example and outputted data gained from simulation using developed plugin.

Keywords: Tecnomatix, Process Simulate, state automata, Tecnoma- tix.NET API, virtual commissioning, PROFIenergy

(10)
(11)
(12)

Obsah

1 Uvod´ 1

2 Metodologick´y rozbor 3

2.1 PROFIenergy profil . . . 3

2.2 Tecnomatix . . . 3

2.3 Objektovˇe orientovan´e programov´an´ı a C# . . . 5

3 Reˇˇ sen´ı 8 3.1 Formulace pˇredstavy ˇreˇsen´ı . . . 8

3.2 Stavov´y automat PROFIenergy . . . 11

3.3 V´yvoj architektury pluginu . . . 14

3.4 Uˇzivatelsk´a funkce - implementace stavov´eho automatu . . . 17

3.4.1 Obecn´e vlastnosti a ˇzivotn´ı cyklus uˇzivatelsk´e funkce . . . 17

3.4.2 Pouˇzit´y stavov´y automat . . . 18

3.5 Process Simulate Command . . . 27

3.5.1 Pˇriˇrazen´ı logick´eho bloku . . . 28

3.5.2 Z´aznam PE stav˚u robot˚u . . . 34

3.5.3 Z´aznam polohy kloub˚u robot˚u . . . 35

3.5.4 Grafick´e uˇzivatelsk´e rozhran´ı . . . 36

3.6 Postup pˇri aplikaci pluginu . . . 40

3.6.1 Instalace . . . 41

3.6.2 Pouˇzit´ı . . . 42

(13)

OBSAH

4 Virtu´aln´ı zprovoznˇen´ı 46

4.1 Konverze VKRC ˇr´ıdic´ıch sign´al˚u na PE-ID . . . 47

4.2 Vnitˇrn´ı odliˇsnosti VKRC PE stavov´eho stroje . . . 48

4.3 Demonstraˇcn´ı PLC program . . . 50

4.4 Modelov´an´ı pˇr´ıpadu v Process Simulate . . . 50

4.5 Pˇripojen´ı sign´al˚u . . . 52

4.6 Simulovan´a spotˇreba . . . 54

5 Z´avˇer 57

(14)

Seznam obr´ azk˚ u

1 Z´akladn´ı tˇr´ıvrstv´a architektura Tecnomatixu podle [1] . . . 4

2 Z´akladn´ı architektura pluginu . . . 10

3 Diagram definice PROFIenergy standardu . . . 12

4 Zad´av´an´ı uˇzivatelsk´ych funkc´ı do logick´ych blok˚u . . . 16

5 Diagram upraven´eho stavov´eho automatu pluginu . . . 19

6 V´yvojov´y diagram simulace stavov´eho automatu v uˇzivatelsk´e funkci . . . 24

7 Prototyp logick´eho bloku . . . 29

8 UML diagram commandu . . . 29

9 Postup vytvoˇren´ı uˇzivatelsk´e funkce pomoc´ı API . . . 33

10 GUI - z´aloˇzka nastaven´ı ˇci vytvoˇren´ı logick´eho bloku pro PE . . . 37

11 GUI - chybov´a hl´aˇska - cesta k souboru neexistuje . . . 38

12 GUI - z´aloˇzka k ovl´ad´an´ı z´aznamu dat ze simulace . . . 39

13 Registrov´an´ı commandu pluginu . . . 41

14 Zaˇrazen´ı tlaˇc´ıtka pluginu v PS . . . 42

15 Workflow pro uloˇzen´ı z´aznam˚u . . . 43

16 Workflow pro pˇriˇrazen´ı ˇci znovunastaven´ı PE funkˇcnosti . . . 44

17 Workflow pro aktivaci z´aznamu - stejn´y postup pro klouby i PE stavy robotu 44 18 Pˇrehled logick´eho bloku VKRC PE standardu . . . 49

19 Struktura operac´ı v sekvenˇcn´ı editoru . . . 51

20 Nastaven´ı pˇrechodov´ych podm´ınek operace . . . 51

21 Nastaven´ı pˇripojen´ı k OPC serveru . . . 53

22 Pˇripojen´ı sign´al˚uv Process Simulate k OPC . . . 54

(15)

SEZNAM OBR ´AZK˚U

23 Graf simulovan´e spotˇreby . . . 55 24 Graf zmˇeˇren´e spotˇreby . . . 55

(16)

Seznam tabulek

1 PROFIenergy data z dokumentace pouˇzit´eho kontroleru KRC . . . 14

2 PE ˇcasov´an´ı a mapov´an´ı n´azv˚u parametr˚u uˇzivatelsk´e funkce . . . 23

3 N´azvy stav˚u ve v´yˇctu enStates a jejich ekvivalent v diagramu 5 . . . 25

4 Konverzn´ı funkce VKRC vstup˚u na ID PE stavu . . . 48

5 Obsah CD . . . 59

(17)

SEZNAM V ´YPIS˚U K ´ODU

Seznam v´ ypis˚ u k´ odu

1 Pˇr´ıklad obsahu .csv souboru s PE ˇcasov´an´ım . . . 30 2 Pˇredloha pr´azdn´e uˇzivatelsk´e funkce . . . 45

(18)

1 Uvod ´

V souˇcasnosti se pozornost v naˇs´ı spoleˇcnosti hodnˇe obrac´ı na efektivitu vyuˇzit´ı zdroj˚u.

Pl´ytv´an´ı je nˇeco, co si pˇri rostouc´ı spotˇrebˇe nem˚uˇzeme z dlouhodob´eho hlediska dovolit.

Obzvl´aˇst’ to plat´ı o pl´ytv´an´ı energi´ı. I kdyˇz zat´ım je neefektivn´ı nakl´ad´an´ı s energiemi postiˇzeno jen ekonomick´ymi ztr´atami, je to dostateˇcn´a motivace pro oblast automatizo- van´e v´yroby, kde spotˇreba elektrick´e energie hraje nezanedbatelnou roli. Energetick´a krize moˇzn´a nenastoup´ı, kdyˇz budeme schopni dostateˇcnˇe pos´ılit v´yrobu energie, ale ekonomick´e hledisko zde z˚ustane v kaˇzd´em pˇr´ıpadˇe.

Energeticky ´usporn´y reˇzim elektrick´ych spotˇrebiˇc˚u nen´ı nic nov´eho a zvl´aˇstˇe v sou- krom´em sektoru je u komplikovanˇejˇs´ıch zaˇr´ızen´ı vyˇzadovan´ym standardem. V automatizaci v´yroby se vˇsak dlouhodobˇe klade v´ykon na prvn´ı m´ısto a energetick´a efektivita je ˇcasto odsouv´ana do pozad´ı. V posledn´ı dobˇe vˇsak z´ajem o zefektivnˇen´ı distribuce a nakl´ad´an´ı s energi´ı v´yraznˇe vzrostl. PROFINET & PROFIBUS International (PI) se rozhodl vy- tvoˇrit profil, kter´y by unifikoval principy v ´usporn´ych opatˇren´ıch. Mnoho v´yrobc˚u zaˇr´ızen´ı se zaˇc´ın´a postupnˇe pˇripojovat k tomuto nov´emu v´yvojov´emu proudu. Nejsp´ıˇs je PI jednou z prvn´ıch organizac´ı, kter´a se t´ımto smˇerem vyd´av´a. Technologie zab´yvaj´ıc´ı se touto proble- matikou je rozhodnˇe perspektivn´ı a d´a se pˇredpokl´adat, ˇze kdo nasmˇeruje sv´e snaˇzen´ı t´ımto smˇerem ted’, z´ısk´a brzy n´askok v rychle se rozv´ıjej´ıc´ım odvˇetv´ı automatizovan´e v´yroby.

Projekt, na kter´em jsem v r´amci ˇreˇsen´ı sv´e diplomov´e pr´ace spolupracoval, je zamˇeˇren pr´avˇe na optimalizaci automatizovan´e v´yroby z hlediska spotˇreby energie. Zab´yv´a se op- timalizac´ı robotick´ych cest pˇri zachov´an´ı prov´adˇen´ych operac´ı, pl´anov´an´ım pohybu ma- teri´al˚u ve v´yrobn´ı lince a optimalizac´ı sekvenc´ı v´yrobn´ıch ´ukon˚u a tak´e vyuˇzit´ım profilu PROFIenergy k ´uspoˇre energie ve chv´ıl´ıch neˇcinnosti zaˇr´ızen´ı. K simulaci a modelov´an´ı zkouman´ych probl´em˚u vyuˇz´ıv´ame software digit´aln´ı tov´arny Tecnomatix. Odtud vzeˇslo zad´an´ı m´e diplomov´e pr´ace, protoˇze Tecnomatix jeˇstˇe nepodporuje modelov´an´ı a simulaci zm´ınˇen´eho profilu PROFIenergy a pro testov´an´ı navrˇzen´ych optimalizac´ı je tato funkˇcnost zapotˇreb´ı.

(19)

Hlavn´ım c´ılem tedy bylo naprogramovat pro prostˇred´ı Process Simulate (souˇc´ast di- git´aln´ı tov´arny Tecnomatix) plugin, kter´y by umoˇznil modelovat a simulovat PE profil, tento plugin otestovat a vytvoˇrit pro nˇej z´akladn´ı energetick´y model robota, kter´y je pro testov´an´ı pouˇzit.

(20)

2 Metodologick´ y rozbor

V t´eto kapitole pop´ıˇsu z´akladn´ı pouˇzitou terminologii a objasn´ım volbu prostˇredk˚u k ˇreˇsen´ı pr´ace.

2.1 PROFIenergy profil

R´ızen´ı a monitorov´ˇ an´ı spotˇreby energie je poˇr´ad d˚uleˇzitˇejˇs´ı ve vˇsech ˇc´astech auto- matizovan´e v´yroby. Z toho d˚uvodu vznikl na z´akladech standardu PROFINET profil PROFIenergy (d´ale v textu PE). ´Ukolem profilu PE je standardizovat rozhran´ı pro z´ısk´av´an´ı dat o mˇeˇren´e energetick´e spotˇrebˇe a definovat sadu pˇr´ıkaz˚u, kter´e umoˇzn´ı pˇrev´adˇet spotˇrebiˇce do energeticky ´usporn´ych reˇzim˚u. V souˇcasnosti existuje mnoho zaˇr´ızen´ı, kter´a nˇejak´ym zp˚usobem mˇeˇr´ı svoji energetickou spotˇrebu a mohou b´yt pˇrevedena do ´usporn´ych m´od˚u, ale tyto pˇrevody jsou ˇcasto pˇr´ıliˇs ˇcasovˇe n´aroˇcn´e ˇci nespolehliv´e. PE profil by mˇel tyto nedostatky odstranit a d´at do rukou uˇzivatel˚u spolehliv´y n´astroj k mˇeˇren´ı a managementu energetick´ych spotˇreb. PE profil je zamˇeˇren jak na autonomn´ı rozhodov´an´ı o pˇreveden´ı do

´

usporn´eho reˇzimu zaˇr´ızen´ı, tak na extern´ı ˇr´ızen´ı spotˇreby. [2]

2.2 Tecnomatix

Digit´aln´ı tov´arna (Digital factory) je obecnˇe soubor programov´ych n´astroj˚u, kter´e umoˇz- ˇ

nuj´ı modelovat a simulovat pr˚umyslovou v´yrobu. Zab´yv´a se ˇc´astmi v´yroby nebo i cel´ymi tov´arnami. Umoˇzˇnuje tak rychle vyv´ıjet nov´e pracovn´ı postupy a nasazovat je do praxe rychleji, t´ım, ˇze prototyping v´yroby m˚uˇze prob´ıhat v simulovan´em prostˇred´ı, stejnˇe jako testov´an´ı ˇci validace. Odpad´a tak nutnost odstavovat re´alnou v´yrobnu pro d´ılˇc´ı testy a zkra- cuje v´yraznˇe dobu potˇrebnou na zprovozˇnov´an´ı linky napˇr´ıklad pˇri zmˇenˇe technologick´ych postup˚u apod.[1][3]

Tecnomatix se snaˇz´ı tomuto ide´alu pˇribl´ıˇzit. Jedn´a se o bal´ık velk´eho mnoˇzstv´ı nej- r˚uznˇejˇs´ıch n´astroj˚u rozˇclenˇen´ych do nˇekolik aplikac´ı oznaˇcovan´ych jako prostˇred´ı. D´ale

(21)

2.2 Tecnomatix

v sobˇe integruje datovou z´akladnu a tzv. eMServer, kter´y zprostˇredkov´av´a pˇr´ıstup k da- tov´e z´akladnˇe, spravuje pˇr´ıstupy a zpˇr´ıstupˇnuje nˇekter´e n´astroje ke zmˇen´am na datech.

Data jsou tak pˇr´ıstupn´a pro vˇsechna prostˇred´ı, kter´a v sobˇe Tecnomatix integruje a je tak usnadnˇena kooperace v´yvoj´aˇr˚u na vˇsech dotˇcen´ych ´urovn´ıch pl´anov´an´ı a n´avrhu v´yroby.

Z´akladn´ı architektura podle [1] je zobrazena na obr´azku 1. Ve stˇredn´ı vrstvˇe je zobrazeno

Obr´azek 1: Z´akladn´ı tˇr´ıvrstv´a architektura Tecnomatixu podle [1]

jeˇstˇe datov´e ´uloˇziˇstˇe SystemRoot, kter´e je pˇreruˇsovanou ˇcarou spojeno s vrstvou klient˚u.

V SystemRootu jsou ukl´ad´ana 3D modelovac´ı data k objekt˚um, strojov´a data pro simu- lace apod., obvykle b´yv´a SystemRoot na sd´ılen´em ´uloˇziˇsti, ale jeho um´ıstˇen´ı pro klienty nen´ı pevn´e a ˇcasto klientsk´e aplikace vyuˇz´ıvaj´ı lok´aln´ı kopii jen ˇc´asti t´eto datov´e z´akladny oznaˇcovan´e jako SystemRoot.

Zm´ın´ım zde dva hlavn´ı stavebn´ı kameny Tecnomatixu, a totiˇz Process Simulate a Process Designer. Process Designer je n´astroj urˇcen´y pˇredevˇs´ım k pl´anovac´ım ´ukol˚um ve v´yrobˇe, umoˇzˇnuje rychle zobrazovat a analyzovat data t´ykaj´ıc´ı se v´yroby a podporuje tak´e 3D zobrazen´ı oblast´ı z´ajmu. Zprostˇredkuje tedy pˇredevˇs´ım pˇr´ıstup k dat˚um na eMServeru a umoˇzˇnuje kombinovat informace z´ıskan´e z 3D zobrazen´ı s dalˇs´ımi pl´anovac´ımi n´astroji eMServeru. [4]

Process Simulate (d´ale v textu ˇcasto jen PS) je pak urˇcen pro designov´an´ı, analyzov´an´ı, simulaci a optimalizaci v´yrobn´ıch proces˚u, a to od t´e nejvyˇsˇs´ı ´urovnˇe - hlediska cel´e tov´arny - aˇz po tu nejniˇzˇs´ı - ´uroveˇn v´yrobn´ı buˇnky ˇc´ıtaj´ıc´ı tˇreba jedin´eho robota. Obsahuje n´astroje

(22)

pro 3D modelov´an´ı v´yrobn´ıch zdroj˚u, simulaci v z´avislosti na ˇcase a tak´e v z´avislosti na ud´alostech v modelu - jako napˇr´ıklad sign´al odeslan´y z virtu´aln´ıho senzoru.[3] Prostˇred´ı PS disponuje reˇzimem naz´yvan´ymCEE (Cyclic Event Evaluation), kde ˇr´ıd´ıc´ı entitou nen´ı ˇ

cas, ale simulovan´e sign´aly a ud´alosti, napˇr´ıklad sign´al senzoru pˇribl´ıˇzen´ı apod. Naˇs´ım c´ılem je simulovat novˇe se rozˇsiˇruj´ıc´ı standard PROFIenergy, a to na ´urovni jednotliv´ych zaˇr´ızen´ı, a proto je simulaˇcn´ı prostˇred´ı PS v reˇzimu CEE vhodn´a volba. Simulace pro- filu PE je v souˇcasn´e dobˇe do jist´e m´ıry implementov´ana v programu Plant Simulation.

V prostˇred´ı PS se objevuj´ı prvn´ı n´aznaky z´ajmu o problematiku energetick´ych spotˇreb.

Napˇr´ıklad KUKA RCS controller v8.3 pro PS umoˇzˇnuje v r´amci anal´yzy pohybu KUKA robot˚u zobrazovat simulovanou energetickou spotˇrebu. Odtud tedy vych´az´ı motivace pro programov´an´ı rozˇs´ıˇren´ı PROFIenergy funkˇcnosti pro Process Simulate.

2.3 Objektovˇ e orientovan´ e programov´ an´ı a C#

V textu zab´yvaj´ıc´ım se ˇreˇsen´ım pr´ace ˇcasto pouˇz´ıv´am term´ıny z objektov´eho progra- mov´an´ı. Je to v´yhodn´y postup i pro vysvˇetlen´ı hierarchie datov´e struktury studie v Tec- nomatixu, protoˇze i ta je navrˇzena ve smyslu objektov´eho programov´an´ı. Uvedu tedy jen velice povrchovˇe pouˇzit´e pojmy.

Objektov´y pˇr´ıstup k programov´an´ı se snaˇz´ı o dosaˇzen´ı podobnosti struktury modelo- van´eho probl´emu s programem. Objekt v ˇreˇsen´em probl´emu, napˇr´ıklad robot, obvykle dostane pˇriˇrazen objekt v programu, napˇr´ıklad tˇr´ıdu n´azvu robot. Robot se um´ı h´ybat, tedy i tˇr´ıda bude obsahovat funkce n´azvu pohyb, kter´a bude mˇenit vnitˇrn´ı promˇennou robotu. ˇReknˇeme, ˇze m´ame typ robota KUKA a m´ame od nˇej v tov´arnˇe tˇri kusy, pak ob- jektovˇe modelovan´a paralela bude m´ıt tˇr´ıdu KUKA a budeme od t´eto tˇr´ıdy vytv´aˇret tˇri instance (lze ch´apat jako realizace). Vztahtˇr´ıda - instance lze tedy ch´apat jako vztahtyp - realizace. Instance tˇr´ıdy mus´ı b´yt vytvoˇrena tzv. konstruktorem - speci´aln´ı metodou pro generaci instance. Pokud je konstruktor ´umyslnˇe znepˇr´ıstupnˇen, obvykle je nˇekde jinde vy- tvoˇrena tzv. tov´arn´ı metoda, kter´a m´a ke konstruktoru zprostˇredkovan´y pˇr´ıstup a zajiˇst’uje proveden´ı nˇejak´ych pˇr´ıdavn´ych ´ukon˚u pˇri vytv´aˇren´ı instance. Dalˇs´ı uˇziteˇcnou vlastnost´ı

(23)

2.3 Objektovˇe orientovan´e programov´an´ı a C#

je tzv. dˇediˇcnost. Tˇr´ıda m˚uˇze dˇedit od jin´e tˇr´ıdy, jako pˇr´ıklad mˇejme tˇr´ıdu robot a od n´ı dˇed´ıtˇr´ıda KUKA. Teprve aˇz kdyˇz m´ame ve v´yrobn´ı buˇnce konkr´etn´ı kusy robot˚u KUKA, jedn´a se o instance. Tˇr´ıda tak´e m˚uˇze b´yt statick´a a m´ıt statick´e metody. Takov´a tˇr´ıda dok´aˇze vykon´avat sv´e funkce (poskytovat hodnoty statick´ych promˇenn´ych, nechat na sobˇe volat statick´e metody apod.) aniˇz by mˇela vygenerovanou svoji instanci. Dalˇs´ım n´astrojem pro zpˇrehlednˇen´ı k´odu je tzv. implementov´an´ı rozhran´ı. Rozhran´ı je zvl´aˇstn´ı datov´y typ, kter´y neobsahuje naprogramovanou funkˇcnost, ale pouze v´yˇcet metod a promˇenn´ych. Kdyˇz nˇekter´a tˇr´ıda implementuje rozhran´ı, znamen´a to, ˇze je zaruˇceno, ˇze tato tˇr´ıda m´a v sobˇe naprogramovanou funkˇcnost vˇsech metod a obsahuje vˇsechny promˇenn´e, kter´e jsou dekla- rov´any v rozhran´ı. Kontrolu existence hlaviˇcek metod a promˇenn´ych prov´ad´ı pˇrekladaˇc k´odu.

Je tˇreba upozornit na term´ınvlastnost tˇr´ıdy. Je to zvl´aˇstn´ı druh metody, kter´a z´ısk´av´a nebo nastavuje hodnoty promˇenn´e v tˇr´ıdˇe. Navenek pˇritom vypad´a jako promˇenn´a a pouˇz´ıv´a se jako promˇenn´a. Jej´ım pouˇzit´ım jsou tak zapouzdˇreny obˇe metody, kter´e jsou pro z´ısk´an´ı a nastaven´ı promˇenn´e zapotˇreb´ı. Vlastnost tˇr´ıdy zpˇrehledˇnuje a zjednoduˇsuje pouˇz´ıv´an´ı soukrom´ych promˇenn´ych t´ım, ˇze program´ator s vlastnost´ımanipuluje stejnˇe jako kdyby se jednalo o obyˇcejnou promˇennou.

D´ale se jeˇstˇe zm´ın´ım o ud´alostech tzv.events. Jedn´a se o jak´esi vlajky, kter´e ˇr´ıkaj´ı, ˇze se v programu stalo nˇeco, na co jsme chtˇeli dostat upozornˇen´ı. Ud´alostem se pak pˇriˇrazuj´ı po- sluchaˇci - metody, kter´e v okamˇziku vzniku ud´alosti nˇejak reaguj´ı. Napˇr´ıklad kdyˇz uˇzivatel stiskne tlaˇc´ıtko v uˇzivatelsk´em rozhran´ı, vznikne ud´alost a obsluˇzn´a nebo t´eˇz naslouchaj´ıc´ı metoda tuto ud´alost obslouˇz´ı nˇejakou reakc´ı. V´yhoda spoˇc´ıv´a v niˇzˇs´ım v´ypoˇcetn´ım zat´ıˇzen´ı, protoˇze dokud nevznikne ud´alost, ˇz´adn´e obsluˇzn´e v´ypoˇcty se neprov´ad´ı.

Nakonec k dˇediˇcnosti. Typicky vˇsechny tˇr´ıdy maj´ı sv´eho pˇredka krom jedin´e, od kter´e zprostˇredkovanˇedˇed´ıvˇsechny tˇr´ıdy. Podobnˇe je tomu u datov´e struktury Tecnomatixu, kde je nejvyˇsˇs´ı ´uroveˇn projekt, a vˇse ostatn´ı patˇr´ı pod nˇej. Mohou zde b´yt paraleln´ı projekty, ale nemohou b´yt naˇcteny najednou v jednom prostˇred´ı.

Dalˇs´ı ot´azkou byla volba programovac´ıho jazyka. Tecnomatix.NET API n´as omezuje na

(24)

jazyky pro platformu .NET, tu vˇsak podporuj´ı v z´akladˇe tˇri programovac´ı jazyky, kter´e jsou z´aroveˇn dokumentov´any v [5], jedn´a se o jazyky:

• Visual Basic .NET

• C++

• C#

Kdyˇz jsem proch´azel dokumentaci [5], nejl´epe zdokumentov´ana byla syntaxe C#, proto jsem zvolil pro v´yvoj pluginu tento jazyk. Jako v´yvojov´e prostˇred´ı jsem pouˇzil MS Visual Studio.

Pouˇzil jsem zde pojemAPI, to znamen´aApplication Programming Interface, v pˇrekladu rozhran´ı pro programov´an´ı aplikac´ı. Je to obvykle knihovna tˇr´ıd a metod, kter´e zprostˇredkuj´ı unifikovan´y pˇr´ıstup do ucelen´e aplikace, aby mohla b´yt obohacena o nˇejakou rozˇsiˇruj´ıc´ı funkˇcnost.

(25)

3 Reˇ ˇ sen´ı

N´astroje pro ˇreˇsen´ı jsou d´any zad´an´ım pr´ace. Nejprve jsem tedy prozkoumal moˇznosti, kter´e nab´ız´ı knihovny softwaru Tecnomatix. Uk´azalo se, ˇze API pro v´yvoj aplikac´ı pro Tecnomatix je velmi rozs´ahl´e, a pˇresto nepokr´yv´a vˇsechny prostˇredky, kter´e bych pro pro- gramov´an´ı pluginu r´ad vyuˇzil. Tecnomatix je uzavˇren´a aplikace bez moˇznosti zkoum´an´ı jej´ıho zdrojov´eho k´odu, tato softwarov´a politika v´yrobce na mˇe kladla v´yrazn´a omezen´ı, kter´a bylo nutno obch´azet ˇci jinak redukovat. Pro v´yvoj pluginu jsem postupnˇe navrhl cel- kem tˇri ˇreˇsen´ı, pˇriˇcemˇz prvn´ı dvˇe se dostala do slep´e uliˇcky teprve v pr˚ubˇehu jejich v´yvoje.

Poˇzadovan´eho v´ysledku jsem dos´ahl aˇz ve tˇret´ı generaci pluginu.

3.1 Formulace pˇ redstavy ˇ reˇ sen´ı

Pˇri n´avrhu ˇreˇsen´ı jsem ale vˇzdy pouˇzil z´akladn´ı ideovou strukturu, kterou nyn´ı pop´ıˇsu.

Protoˇze profil PROFIenergy (d´ale jen PE) v z´akladu popisuje stavov´y automat, je p´ateˇr´ı m´eho pluginu vˇzdy stavov´y automat. Tento automat mus´ı m´ıt nastaviteln´e ˇcasov´e podm´ınky pˇrechodu mezi stavy, pˇriˇcemˇz ˇcas se uvaˇzuje jako podm´ınka jen mezi pevnˇe dan´ymi stavy.

Z´aroveˇn je zde pˇrirozenˇe poˇzadavek na to, aby pouˇzit´ı stavov´eho automatu hladce zapa- dalo do struktury simulace v prostˇred´ı Process Simulate (d´ale jen PS), protoˇze plugin by mˇel b´yt pouˇzit na jiˇz existuj´ıc´ı projekty a studie. Z toho tak´e vypl´yv´a nutnost zachovat konzistenci jiˇz existuj´ıc´ıch datov´ych struktur studie.

Tento poˇzadavek nelze s ohledem na ostatn´ı poˇzadavky stoprocentnˇe uspokojit. Pokud pouˇziji kv˚uli poˇzadavku na kompatibilitu pouze datov´e struktury, kter´e jsou v Tecnoma- tixu jiˇz vytvoˇreny, nelze s jistotou urˇcit, zda v´ıcen´asobn´e pouˇzit´ı v nˇekter´e studii nepovede k naruˇsen´ı funkce studie. Pˇr´ıkladem m˚uˇze b´yt tˇreba ˇreˇsen´ı pomoc´ı operac´ı. V prostˇred´ı PS operace mohou reprezentovat nesimulovan´e ˇcasov´e ´useky (tzv. non-sim operace), nab´ız´ı se tedy moˇznost vyuˇzit´ı tˇechto operac´ı k simulov´an´ı pˇrechodu mezi jednotliv´ymi PE stavy.

Non-sim operace vˇsak v nˇekter´ych studi´ıch uˇz mohly b´yt k simulov´an´ı pouˇzity a mohlo by se st´at, ˇze by m˚uj plugin pojmenoval operaci stejnˇe a vznikla by tak duplicita, kter´a m˚uˇze

(26)

v´est k nestabilitˇe PS. Kaˇzd´y objekt ve studii m´a sice vlastn´ı unik´atn´ı ID, jenˇze naˇc´ıt´an´ı to- hoto ID z eMServeru je pomal´e, obzvl´aˇst’ pokud je prov´adˇeno na vzd´alen´e klientsk´e stanici.

Takov´e ˇreˇsen´ı nen´ı nejvhodnˇejˇs´ı. Samotn´y PS nejsp´ıˇse vyuˇz´ıv´a nˇejak´y zp˚usob indexov´an´ı objekt˚u, ale nen´ı moˇzn´e k tomuto indexov´an´ı pˇristupovat pomoc´ı API, a tak jedin´e spo- lehliv´e ˇreˇsen´ı za pouˇzit´ı Tecnomatix API je skuteˇcnˇe pouˇz´ıt unik´atn´ı jm´eno operace. Lze samozˇrejmˇe pouˇz´ıt dostateˇcnˇe komplikovan´e jm´eno, takˇze se duplicita stane sp´ıˇse ot´azkou pravdˇepodobnosti. To je jen jedna uk´azka toho, jak´e probl´emy z posledn´ıho poˇzadavku vypl´yvaj´ı.

Dalˇs´ı v´yrazn´y poˇzadavek je hromadn´e pouˇzit´ı pluginu. Uˇzivatel pˇred sebou m˚uˇze m´ıt des´ıtky zaˇr´ızen´ı ve studii. U kaˇzd´eho tohoto zaˇr´ızen´ı chce modelovat a simulovat pomoc´ı pluginu profil PE a vznikl´a reˇzijn´ı data mus´ı z˚ustat v mez´ıch pˇrehlednosti typick´ych pro zaˇzitou praxi. Komplexita prostˇred´ı Tecnomatix pˇrirozenˇe vede k ohromn´emu mnoˇzstv´ı dat uˇz jen v prostˇred´ı PS, a to pro kaˇzdou studii. Tato data se tˇr´ıd´ı podle r˚uzn´ych krit´eri´ı a uˇzivatel´e by mˇeli b´yt zvykl´ı pracovat s pomˇernˇe rozs´ahlou mnoˇzinou jednotliv´ych typ˚u dat. Ovˇsem na nejvyˇsˇs´ı ´urovni tˇr´ıdˇen´ı dat by nemˇel plugin vytv´aˇret v´ıce neˇz p´ar datov´ych entit pro jedno zaˇr´ızen´ı, kter´e by mˇelo disponovat PE funkcionalitou. Tento poˇzadavek vyplynul z okolnost´ı aˇz ˇcasem, kdy se uk´azal v t´e dobˇe zvolen´y postup jako nevhodn´y pr´avˇe kv˚uli velk´emu mnoˇzstv´ı vytv´aˇren´ych datov´ych objekt˚u na jedno zaˇr´ızen´ı, se kter´ymi se musel uˇzivatel pot´ykat ve studii, aniˇz by je potˇreboval pˇr´ımo upravovat.

Plugin m´a nejen simulovat chov´an´ı zaˇr´ızen´ı podle PE standardu, ale mus´ı umoˇzˇnovat i zaznamen´avat pr˚ubˇeh pˇrechod˚u a setrv´av´an´ı v jednotliv´ych PE stavech. Je tedy nutn´e umoˇznit vytvoˇren´ı nˇejak´eho druhu datab´aze, v n´ıˇz by kaˇzd´e dotˇcen´e zaˇr´ızen´ı mˇelo uchov´ano z´aznam sv´ych stav˚u v z´avislosti na simulovan´em ˇcase. Tato datab´aze mus´ı b´yt na poˇzadavek uˇzivatele zpˇr´ıstupnˇena prostˇrednictv´ım souboru, aby bylo moˇzn´e v extern´ım programu analyzovat v´ysledky simulace.

Vˇsechny v´yˇse zm´ınˇen´e poˇzadavky na tomto m´ıstˇe shrnu.

• Integrovatelnost do prostˇred´ı Tecnomatix

(27)

3.1 Formulace pˇredstavy ˇreˇsen´ı

• Stavov´y automat zahrnuj´ıc´ı ˇcasov´e podm´ınky pˇrechodu

• Konzistence dat

• Hromadn´e pouˇzit´ı

V souˇcasn´e verzi pluginu jsem tedy vzhledem k tˇemto poˇzadavk˚um sledoval n´asleduj´ıc´ı rozdˇelen´ı. Zamˇeˇril jsem se na prostˇred´ı Process Simulate (PS), protoˇze v nˇem je studie si- mulov´ana, je tedy logick´e, ˇze na tomto m´ıstˇe by se mˇela funkˇcnost PE standardu zaˇr´ızen´ım pˇriˇrazovat. Z´akladn´ı ˇc´ast´ı pluginu je stavov´y automat. Tato ˇc´ast mus´ı b´yt co nejl´epe inte- grov´ana do PS a mus´ı s n´ım co nejm´enˇe interferovat. Dalˇs´ım stavebn´ım kamenem je ˇc´ast pro z´aznam stav˚u v ˇcase pro kaˇzd´e dotˇcen´e zaˇr´ızen´ı. Tato ˇc´ast bude napojena na stavov´y automat a na simul´ator integrovan´y v PS. Nav´ıc bude podporovat export z´aznam˚u do sou- boru. Tˇret´ı souˇc´ast´ı pluginu je spr´avce pˇredchoz´ıch dvou ˇc´ast´ı, kter´y m´a za ´ukol pˇriˇrazovat zaˇr´ızen´ım ve studii PE funkˇcnost realizovanou stavov´ym automatem a d´ale m´a za ´ukol spravovat z´aznam stav˚u. Konfigurace stavov´eho automatu pro konkr´etn´ı ˇcasov´an´ı auto- matu naˇcten´e ze souboru tak´e spad´a do jeho pole p˚usobnosti. Vˇsechny tˇri souˇc´asti mus´ı b´yt zastˇreˇseny uˇzivatelsk´ym rozhran´ım. Popsan´a architektura pluginu je vidˇet na obr´azku 2.

Pˇreruˇsovan´a spojnice mezi blokem Stavov´y automat a Z´aznam PE stav˚u zaˇr´ızen´ı znaˇc´ı v´ymˇenu dat.

Obr´azek 2: Z´akladn´ı architektura pluginu

(28)

Pˇri vytv´aˇren´ı pˇredstavy o realizaci t´eto architektury jsem se pro splnˇen´ı poˇzadavku na integrovatelnost drˇzel myˇslenky, ˇze datov´a struktura mus´ı b´yt alespoˇn ˇc´asteˇcnˇe vytvoˇriteln´a manu´aln´ım zad´av´an´ım pˇr´ıkaz˚u v prostˇred´ı PS. Zkombinov´an´ı jiˇz existuj´ıc´ıch stavebn´ıch ka- men˚u by mˇelo v´est k integrovateln´emu ˇreˇsen´ı. Pokusil jsem se tedy vˇzdy nejdˇr´ıve sestavit funkˇcn´ı prototyp datov´e struktury manu´alnˇe v PS a pomoc´ı nˇej simulovat PE funkciona- litu. Kdyˇz jsem dospˇel k funkˇcn´ımu prototypu, pˇreˇsel jsem k programov´an´ı automatick´eho sestaven´ı t´eto struktury. Uˇzivatel ve v´ysledku mus´ı m´ıt k dispozici n´astroj, kter´y bude s rozumnou n´aroˇcnost´ı umoˇzˇnovat vytv´aˇren´ı a konfiguraci t´eto struktury. Podobnˇe jsem pak zaˇcal programovat tak´e z´aznamovou ˇc´ast pluginu. Pak je na ˇradˇe refaktoring k´od˚u a ladˇen´ı.

3.2 Stavov´ y automat PROFIenergy

Profil PROFIenergy je v [2] rozs´ahle popisov´an do detail˚u. Jsou zde pops´any protokoly komunikace, zp˚usob ovl´ad´an´ı a mnoho dalˇs´ıch d˚uleˇzit´ych aspekt˚u, kter´e jsou d˚uleˇzit´e pro v´yrobce, jenˇz chce ve sv´em zaˇr´ızen´ı implementovat funkci PE standardu. Pro potˇreby simu- lace a modelov´an´ı tohoto standardu v prostˇred´ı Process Simulate je pro mˇe vˇsak esenci´aln´ı pr´avˇe definice stavov´eho automatu PE a ˇc´asteˇcnˇe tak´e protokol ovl´ad´an´ı - konkr´etnˇe popis zp˚usobu, jak´ym m´a b´yt zaˇr´ızen´ı pˇrev´adˇeno do jednotliv´ych energetick´ych m´od˚u. Ostatn´ı aspekty profilu PE tedy nebudu zmiˇnovat.

Standard PROFIenergy (PE) definuje podle [2] m´od Operate, Ready to operate, 31 ad- resovateln´ych Energy-saving m´od˚u, Sleep mode a Power off m´od. Diagram m´od˚u a po- volen´ych pˇrechod˚u mezi nimi je zn´azornˇen na obr´azku 3. Ve stˇredn´ım sloupci se nach´az´ı PE m´ody, kter´ych zaˇr´ızen´ı m˚uˇze dos´ahnout. Kdyˇz zaˇr´ızen´ı pˇrech´az´ı mezi m´ody, nevrac´ı na vyˇz´ad´an´ı ID, kter´e by popisovalo tento jeho stav. Z hlediska aplikace PE standardu to ani nen´ı bezpodm´ıneˇcnˇe nutn´e a benefity, kter´e by z t´eto informace vypl´yvaly, jsou zanedbateln´e, pˇr´ıpadnˇe nahraditeln´e. Aby PE standard byl samostatn´y modul´arn´ı celek, jsou tyto postupy v´ıce neˇz pochopiteln´e. Standard jako takov´y nav´ıc modeluje ve sv´em stavov´em automatu i pˇrechodov´e stavy mezi jednotliv´ymi PE m´ody. Jak je na diagramu 3

(29)

3.2 Stavov´y automat PROFIenergy

Obr´azek 3: Diagram definice PROFIenergy standardu

vidˇet, standard pˇredpokl´ad´a moˇznost pˇrech´azen´ı i mezi pˇrechodov´ymi stavy. Tak´e z jednot- liv´ychEnergy-saving m´od˚u je moˇzno pˇrej´ıt zpˇet do stav˚uPˇrechod do Energy-saving. Velk´e mnoˇzstv´ı pˇrechod˚u je vˇsak podle standardu pouze voliteln´ych. Je nutn´e splnit podm´ınku, ˇze alepsoˇn jeden pˇrechod vede do nˇekter´eho zEnergy-saving m´od˚u a alespoˇn jeden pˇrechod vede zEnergy-saving m´odu doReady to operate m´odu. Nav´ıc jsou pak voliteln´e pˇrechody mezi jednotliv´ymi Energy-saving m´ody, to uˇz z´aleˇz´ı na v´yrobci zaˇr´ızen´ı.

Dalˇs´ım voliteln´ym m´odem je jeˇstˇeSleep mode WOL. Ten m´a oproti standardn´ımEnergy- savingm´od˚um zvl´aˇstn´ı chov´an´ı. Jedn´a se o ´usporn´y m´od vyvinut´y p˚uvodnˇe pro pr˚umyslov´e

(30)

poˇc´ıtaˇce [2]. Zaˇr´ızen´ı do tohoto m´odu m˚uˇze pˇrej´ıt, ale v pr˚ubˇehu pˇrechodu dojde k odpo- jen´ı sbˇernice a zaˇr´ızen´ı tak nem˚uˇze pˇrij´ımat ˇz´adn´e pˇr´ıkazy profilu PE po sbˇernici. Sbˇernice se zapne aˇz po pˇrijet´ı speci´aln´ıho probouzec´ıho packetu, tzv. Magic Packet. Po probuzen´ı je definov´ano v PE standardu, ˇze zaˇr´ızen´ı automaticky pˇrejde do stavu Ready to operate.

Profil PE poˇc´ıt´a i se stavem Power off, je to pˇrirozen´y stav zaˇr´ızen´ı, kdy je zcela odpojeno od pˇr´ıvodu energie. Tento stav je termin´aln´ı a podobnˇe jako v pˇr´ıpadˇe stavu Sleep mode WOLnen´ı nap´ajen´a sbˇernice a nen´ı moˇzn´e komunikac´ı pˇres PROFINET zaˇr´ızen´ı zapnout. Tento stav tedy do stavov´eho automatu nen´ı zahrnut, nepˇredpokl´ad´a se ani moˇznost vypnout zaˇr´ızen´ı pomoc´ı nˇejak´eho pˇr´ıkazu PE profilu, protoˇze by takov´a moˇznost postr´adala smysl pro PE. Form´alnˇe je ale tento stav alespoˇn uveden a m´a i sv´e Mode ID.

Ovl´ad´an´ı pˇrechod˚u je realizov´ano pomoc´ı kombinace nˇekolika sign´al˚u. Prvn´ım je pˇr´ıkaz, ten m˚uˇze nab´yvat tˇr´ı hodnot, a totiˇz Start Pause,End Pause aGo Sleep Mode WOL. Pˇri pouˇzit´ı prvn´ıho pˇr´ıkazu Start Pause je oˇcek´av´an jeˇstˇe sign´al s ID poˇzadovan´eho Energy- saving m´odu. V pˇr´ıpadˇe prvn´ıch dvou ˇr´ıdic´ıch pˇr´ıkaz˚u sign´al poˇzadovan´eho m´odu nehraje roli, pˇri pˇr´ıkazu Go Sleep Mode WOL se pˇrejde do m´odu Sleep mode WOL, pˇri pˇr´ıkazu End Pause se zaˇcne pˇrech´azet pˇr´ımo do m´odu Ready to operate. Pro pˇr´ıkazStart Pause je jeˇstˇe d˚uleˇzit´y parametr pˇr´ıkazu, v nˇemˇz by mˇela b´yt pˇred´ana doba, na kterou je poˇzadovan´a pauza zaˇr´ızen´ı, neˇz jej bude potˇreba pˇrev´est do stavu Ready to operate. V pˇr´ıpadˇe, ˇze se zaˇr´ızen´ı dok´aˇze autonomnˇe rozhodovat, kter´y Energy-saving m´od je pro tuto dobu nej- vhodnˇejˇs´ı, pouˇzije se pˇredan´y parametr jako rozhodovac´ı krit´erium.

Zaˇr´ızen´ı, kter´e m´ame k dispozici, je kontroler KUKA RCS v8.2. Tento kontroler podpo- ruje profil PROFIenergy ve velmi z´akladn´ı podobˇe. Podporuje jeden Energy-saving m´od a podporuje i m´od Sleep mode WOL. Krom toho pˇrirozenˇe podporuje i Ready to operate a Operating. Mezi m´ody jsou implementov´any jen z´akladn´ı nutn´e pˇrechody, ˇz´adn´y z voli- teln´ych nen´ı implementov´an. Je sice moˇzn´e vyslat poˇzadavek na nepodporovan´e pˇrechody mezi stavy, ale takov´a akce vede k nepˇredv´ıdateln´emu chov´an´ı kontroleru, proto jsem ne- povolen´e pˇrechody neuvaˇzoval. N´aˇs kontroler tak´e nedisponuje autonomn´ım rozhodov´an´ım o Energy-saving m´odech, volba ´usporn´eho reˇzimu z´aleˇz´ı pouze na ˇr´ıdic´ım PLC. V doku-

(31)

3.3 V´yvoj architektury pluginu

mentaci kontroleru jsou uvedena data k jednotliv´ym energetick´ym m´od˚um, jak je vidˇet v tabulce 1.

Jm´eno m´odu Drive Bus OFF Hibernate Ready to operate

Jm´eno dle PE Energy-saving Sleep mode WOL Ready to operate

Trv´an´ı pˇrechodu do m´odu 5s 50s 0

Trv´an´ı pˇrechodu doOperate 20s 50s 0

Minim´aln´ı doba setrv´an´ı 0 10s 0

Energetick´a spotˇreba 150W 30W 220W

Tabulka 1: PROFIenergy data z dokumentace pouˇzit´eho kontroleru KRC

Pozdˇeji se pˇri mˇeˇren´ı spotˇreby v jednotliv´ych stavech uk´azalo, ˇze re´aln´a spotˇreba se od t´e v dokumentaci m´ırnˇe liˇs´ı, jak je zn´at z grafu 24.

3.3 V´ yvoj architektury pluginu

Postup popisovan´y v podkapitole 3.1 jsem stavˇel na myˇslence, ˇze veˇsker´e pˇr´ıkazy, kter´e jsou umoˇznˇeny zad´avat uˇzivateli manu´alnˇe, je moˇzn´e zad´avat i prostˇrednictv´ım API pro- stˇred´ı PS. Tato myˇslenka se uk´azal´a b´yt z ˇc´asti chybn´a.

V prvn´ı generaci pluginu jsem modeloval stavov´y automat pomoc´ı non-sim operac´ı, kter´e umoˇzˇnovaly vynutit v simulaci ˇcasovou prodlevu. Podm´ınky pˇrechodu mezi stavy pak zajiˇst’ovalyTransition condition, kter´e se kontroluj´ı na konci operace. Z´aznam o dobˇe str´aven´e v jednotliv´ych PE stavech byl poˇrizov´an na z´akladˇe informace, kter´a operace je pr´avˇe aktivn´ı.

Toto ˇreˇsen´ı mˇelo samo o sobˇe uˇz v prototypu slab´a m´ısta. Nˇekter´e operace mˇely nulovou d´elku trv´an´ı a pouˇz´ıvaly se jako pomocn´e operace k rozhodov´an´ı, do kter´e z alternativn´ıch operac´ı se pˇrejde v dalˇs´ım kroku simulace. V takov´em pˇr´ıpadˇe operace byla pˇri simulaci v aktivn´ım stavu, aˇckoliv uˇz byla aktivn´ı i jin´a operace. Z´aleˇzelo zˇrejmˇe na vnitˇrn´ım poˇrad´ı

(32)

vyhodnocov´an´ı operac´ı v simul´atoru. Toto chov´an´ı by bylo jeˇstˇe moˇzn´e odfiltrovat anal´yzou vznikl´ych dat, vyvstal vˇsak jin´y probl´em. Pomoc´ı API nelze nastavovat Transition con- dition operac´ı tak, jako to lze udˇelat manu´alnˇe v prostˇred´ı PS. Tato skuteˇcnost nebyla zpoˇc´atku zn´am´a kv˚uli nedostateˇcn´e dokumentaci API, zjistil jsem ji aˇz v pr˚ubˇehu ˇreˇsen´ı.

V dobˇe, kdy jsem vyv´ıjel prvn´ı generaci pluginu, byla vypuˇstˇena verze Tecnomatix 10.

V t´eto verzi pokus o nastaven´ı zˇretˇezen´ı operac´ı pˇres API zp˚usoboval p´ad prostˇred´ı PS.

V n´asleduj´ıc´ı verzi Tecnomatix 11.0 sice tento probl´em byl odstranˇen, st´ale ovˇsem chyb´ı moˇznost nastavovatTransition condition operac´ı, takˇze jsem musel hledat jin´e ˇreˇsen´ı.

Druh´a generace pluginu byla postavena na tzv. logick´ych bloc´ıch. To je struktura, kter´a umoˇzˇnuje v PS pˇriˇrazovat urˇcit´ym objekt˚um jist´e logick´e chov´an´ı. Dokonce umoˇzˇnuje pouˇz´ıvat vnitˇrn´ı promˇenn´e pro jednotliv´e bloky. Z m´eho hlediska pak nejpodstatnˇejˇs´ı vlast- nost´ı logick´ych blok˚u byla moˇznost pozdrˇzet v´ystupn´ı hodnotu o pˇresnˇe definovan´y ˇcasov´y

´

usek. V´ystup byl pak vˇzdy opoˇzdˇen o tento ˇcas. Vytvoˇril jsem tedy prototyp s ˇretˇezcem logick´ych blok˚u, kde jeden logick´y blok reprezentoval jeden PE stav. Musel jsem se tak vzd´at moˇznosti pˇriˇrazen´ı stavov´eho automatu pˇr´ımo pod zaˇr´ızen´ı, jehoˇz PE chov´an´ı si- muluje. Pro jeden stavov´y automat bylo zapotˇreb´ı celkem 9 logick´ych blok˚u. Je jasn´e, ˇze se vzr˚ustaj´ıc´ım poˇctem zaˇr´ızen´ı, na kter´e by byl plugin pouˇzit, by ne´unosnˇe rostl i poˇcet blok˚u, kter´e by musel uˇzivatel proch´azet pˇri sv´e pr´aci se studi´ı. Nevhodn´e smaz´an´ı nebo odpojen´ı kter´ehokoli bloku by naruˇsilo funkcionalitu stavov´eho automatu. Toto ˇreˇsen´ı vedlo k funkˇcn´ımu prototypu a bylo i moˇzn´e tento prototyp zreprodukovat za pouˇzit´ı API, ale ze zjevn´ych d˚uvod˚u jsem od nˇej upustil.

Tˇret´ı generace pluginu uˇz plnˇe odpov´ıd´a poˇzadovan´e architektuˇre, jak je zn´azornˇena v di- agramu na obr´azku 2. Stavov´y automat je realizov´an pomoc´ı uˇzivatelsk´e funkce. Prostˇred´ı Process Simulate umoˇzˇnuje pouˇz´ıvat takzvan´e logick´e bloky - objekty, kter´e umoˇzˇnuj´ı si- mulovat jistou omezenou logiku. V r´amci tˇechto objekt˚u mohou b´yt nastaveny vnitˇrn´ı parametry nebo v´ystupy na z´akladˇe v´ysledku v´ypoˇctu t´eto uˇzivatelsk´e funkce. Prostˇred´ı PS uˇz od prvotn´ı instalace obsahuje nˇekolik z´akladn´ıch uˇzivatelsk´ych funkc´ı, jsou jimi de- tekce n´abˇeˇzn´e hrany (RE ( X ) - rising edge), detekce sestupn´e hrany (FE ( X ) - falling

(33)

3.3 V´yvoj architektury pluginu

edge), dvˇe verze bistabiln´ıho klopn´eho ˇclenu (SR ( X Y ) - set-reset aRS ( X Y ) - reset- set), gener´ator n´ahodn´eho ˇc´ısla (RANDOM ( minValue maxValue )) a v´ypoˇcet absolutn´ı hodnoty (ABS ( Num )). Pˇri pouˇz´ıv´an´ı RS funkce jsem zjistil, ˇze nefunguje spr´avnˇe - pˇri nastaven´ı prvn´ıho jej´ıho parametru X na hodnotutrue nespadne jej´ı v´ystup na false, jak by mˇel. Funkce SR naproti tomu funguje spr´avnˇe a liˇs´ı se od RS jen poˇrad´ım vstupn´ıch parametr˚u. Stejnˇe jako je tomu u RS a SR ˇclen˚u, i pro n´aˇs plugin je zapotˇreb´ı vnitˇrn´ı pamˇeti. Uˇzivatelsk´a funkce toto zjevnˇe umoˇzˇnuje a z´aroveˇn nezveˇrejˇnuje nikde v PS sv´e vnitˇrn´ı promˇenn´e, a tak nevznik´a probl´em s nepˇrehlednost´ı studie pro uˇzivatele. Uˇzivatelsk´a funkce se tedy jev´ı jako ide´aln´ı n´astroj k realizaci stavov´eho automatu.

Na tomto m´ıstˇe mus´ım vˇsak upozornit na ´uskal´ı pouˇzit´ı uˇzivatelsk´ych funkc´ı v PS. Jak

Obr´azek 4: Zad´av´an´ı uˇzivatelsk´ych funkc´ı do logick´ych blok˚u

je vidˇet na obr´azku 4, parametry uˇzivatelsk´ych funkc´ı se zad´avaj´ı ve volnˇe textov´e podobˇe.

To m˚uˇze sv´adˇet k pˇripodobˇnov´an´ı funkce k nˇekter´ym programovac´ım jazyk˚um, kde jako vstupn´ı parametr funkce m˚uˇze b´yt pouˇzit v´yraz, ˇci jin´a vnoˇren´a funkce. Tuto funkˇcnost zde

(34)

ale PS nepodporuje a vstupn´ım parametrem sm´ı b´yt jedinˇe samotn´y ˇcist´y parametr. Kom- binov´an´ı funkc´ı a vytv´aˇren´ı v´yraz˚u je jinak ale v poliValue Expressionumoˇznˇeno a funguje v poˇr´adku. Jak je vidˇet na obr´azku 4, lze toto omezen´ı obej´ıt vytvoˇren´ım pomocn´eho para- metru, jehoˇz hodnota je pot´e dosazena do uˇzivatelsk´e funkce. Na stejn´em obr´azku je vidˇet, ˇ

ze jsem tuto metodu pouˇzil u parametrurequestedStateID, kter´y je prvn´ım vstupn´ım para- metrem funkce PEStateMachine v ˇcervenˇe zv´yraznˇen´e oblasti. Pˇri tomto postupu je nutn´e br´at v ´uvahu, ˇze vnitˇrn´ı parametry logick´eho bloku jsou vyhodnocov´any postupnˇe podle hodnoty v pol´ıˇckuIndex. Na obr´azku 4 je vidˇet, ˇze nejdˇr´ıve je vypoˇctena hodnota vnitˇrn´ıho parametrurequestedStateID s indexem 1, a aˇz pot´e je poˇc´ıt´ana hodnota parametrucurrent- State s indexem 2 a pˇri jej´ım v´ypoˇctu je pouˇzit v´ysledek nyn´ı uloˇzen´y v requestedStateID.

3.4 Uˇ zivatelsk´ a funkce - implementace stavov´ eho automatu

Kdyˇz jsem vyv´ıjel uˇzivatelskou funkci, aby plnila roli stavov´eho automatu, prozkoumal jsem nˇekolik cest, jak se k tomuto c´ıli dostat, a ne kaˇzd´a cesta byla vhodn´a. Abych mohl navrhnout ´uˇcinn´e algoritmy, ˇcasto jsem musel testovat, jak funguje prostˇred´ı PS, aby bylo moˇzn´e pochopit, proˇc nˇekter´e postupy selh´avaj´ı. Nejd˚uleˇzitˇejˇs´ımi body tohoto procesu se zab´yv´a tato kapitola.

3.4.1 Obecn´e vlastnosti a ˇzivotn´ı cyklus uˇzivatelsk´e funkce

Uˇzivatelsk´a funkce m´a pˇredepsanou strukturu, d´ıky n´ıˇz m˚uˇze b´yt zaˇclenˇena do funkˇcnosti prostˇred´ı PS. Implementuje rozhran´ıTecnomatix.Engineering.ITxPlcLogicBehaviorFunction knihovnyTecnomatix.Engineering.dll. Toto rozhran´ı ale vynucuje pouze funkci Evaluate(), coˇz samo o sobˇe nedostaˇcuje. FunkceEvaluate()je vol´ana kaˇzd´y krok simulace ve chv´ıli, kdy dojde k vyhodnocov´an´ıExpression Value, kde je uˇzivatelsk´a funkce pouˇzita. Je-li pouˇzita na v´ıce m´ıstech, pochopitelnˇe je Evaluate() vol´ana v´ıcekr´at v jednom kroku simulace.

T´ım se dost´av´am k ot´azce ˇzivotn´ıho cyklu tˇr´ıdy uˇzivatelsk´e funkce. V pr˚ubˇehu v´yvoje pluginu se uk´azalo, ˇze pˇri inicializaci pˇri startu programu Process Simulate je vytvoˇrena

(35)

3.4 Uˇzivatelsk´a funkce - implementace stavov´eho automatu

jedin´a instance od kaˇzd´e tˇr´ıdy uˇzivatelsk´e funkce, a to se stane jeˇstˇe pˇred naˇcten´ım jak´ekoli studie, tedy nez´aleˇz´ı, jestli je nˇekde uˇzivatelsk´a funkce pouˇzita. Pˇri startu je vol´an tedy konstruktor tˇr´ıdy (v k´odu 2 je to JmenoTridyUzivatelskeFunkce(), ˇr´adek 12). D´ale je pˇri naˇcten´ı nˇejak´e studie, v n´ıˇz je uˇzivatelsk´a funkce pouˇzita, zavol´ana metodaParametersTy- pes(), a to pr´avˇe jednou, nez´avisle na poˇctu parametr˚u. Tat´aˇz metoda ParametersTypes() je vol´ana i v okamˇziku, kdy uˇzivatel otevˇre rozhran´ı pro prohl´ıˇzen´ı a editaci logick´ych blok˚u (viz obr´azek 4) a pˇrejde na z´aloˇzku, na n´ıˇz je vidˇet pouˇzit´ı t´eto uˇzivatelsk´e funkce.

Toto vol´an´ı probˇehne jen poprv´e, pˇri opakovan´em zobrazen´ı jiˇz vol´ana nen´ı. Metoda Re- turnValueType() je vol´ana na zaˇc´atku kaˇzd´eho kroku simulace, a to pˇred vol´an´ım metody Evaluate().

Kaˇzd´a uˇzivatelsk´a funkce tak´e mus´ı m´ıt pro svou tˇr´ıdu zaveden´y atribut (viz ˇr´adek 5 v´ypisu k´odu 2) se jm´enem t´eto funkce, kter´e se pak zobraz´ı v prostˇred´ı PS. Zobrazen´ı jm´ena funkce je jen vedlejˇs´ı role atributu, pˇredevˇs´ım umoˇzˇnuje pomoc´ı reflexe v bˇeˇz´ıc´ım programu (v m´em pˇr´ıpadˇe bˇeˇz´ıc´ım PS) pouˇz´ıvat atributem indexovanou tˇr´ıdu. T´ım jsou pops´any vˇsechny form´aln´ı n´aleˇzitosti uˇzivatelsk´e funkce.

3.4.2 Pouˇzit´y stavov´y automat

Stavov´y automat popsan´y na obr´azku 3 nen´ı pro programov´an´ı simulace PROFIenergy vhodn´y. Na jednu stranu je pˇr´ıliˇs sloˇzit´y a popisuje i moˇznosti, kter´e v´yrobce naˇseho robo- tick´eho kontroleru neimplementuje. Na druhou stranu je tento stavov´y automat o trochu jednoduˇsˇs´ı neˇz aby bylo moˇzn´e jej pˇr´ımo implementovat v pluginu. Nav´ıc ID stav˚u tak, jak jsou v profilu PE definov´ana, nenech´avaj´ı prostor pro zaveden´ı ID pˇrechodov´ym stav˚um a pro implementaci je potˇreba oznaˇcit kaˇzd´y simulovan´y stav unik´atn´ım ID.

N´aˇs kontroler podporuje jen jeden Energy-saving m´od, m´od Sleep mode WOL a m´od Ready to operate, jak je uvedeno v tabulce 1. Vypustil jsem tedy ze stavov´eho automatu vˇsechny dalˇs´ı hypotetick´eEnergy-saving m´ody s t´ım, ˇze jsem strukturu programu udrˇzoval tak, aby bylo moˇzn´e s rozumnou n´aroˇcnost´ı pozdˇeji pˇridat dalˇs´ı simulovateln´e Energy- saving m´ody.

(36)

D´ale model na obr´azku 3 nemodeluje pomoc´ı stavu f´azi, kdy je zaˇr´ızen´ı v Energy- saving m´odu bezprostˇrednˇe po dosaˇzen´ı tohoto stavu a nem˚uˇze jeˇstˇe reagovat na pˇr´ıkazy k pˇrechodu do jin´eho stavu. Pro potˇreby v´yvoje pluginu jsem tento stav ve sv´e uˇzivatelsk´e funkci zavedl a naz´yv´am ho jako Nezbytn´y Energy-saving respektive

Nezbytn´y Sleep mode WOL. Zjednoduˇsuje se tak sada podm´ınek kontrolovan´ych pˇri obdrˇzen´ı pˇr´ıkazu k pˇrechodu mezi stavy a eventu´aln´ı pˇrid´an´ı dalˇs´ıch stav˚u se t´ım tak´e st´av´a pro- cedur´alnˇejˇs´ı ˇcinnost´ı.

Vznikl tak model stavov´eho automatu, kter´y je moˇzn´e elegantnˇe implementovat bez naruˇsen´ı poˇzadavk˚u na omezen´ı ˇci integrovatelnost PE stavov´eho automatu. Jeho diagram je na obr´azku 5. Jak je z diagramu patrn´e, kaˇzd´y stav m´a zaveden´e ID, kter´e se neshoduje

Obr´azek 5: Diagram upraven´eho stavov´eho automatu pluginu

s ID definovan´ym v PE standardu. Jsou zde tak´e vidˇet podm´ınky pˇrechod˚u. Tam, kde je jako podm´ınka uveden Cas, tam dojde k pˇrechodu pr´ˇ avˇe tehdy, kdyˇz uplyne definovan´y ˇ

casov´y ´usek. Tyto ˇcasov´e ´useky se liˇs´ı zaˇr´ızen´ı od zaˇr´ızen´ı a je nutn´e umoˇznit uˇzivateli

(37)

3.4 Uˇzivatelsk´a funkce - implementace stavov´eho automatu

jejich nastaven´ı na spr´avnou hodnotu. Rozhodl jsem se, ˇze seznam tˇechto ˇcasov´ych konstant bude pˇred´av´an uˇzivatelsk´e funkci jako parametr v kaˇzd´em kroku simulace. Tento postup byl vynucen ˇzivotn´ım cyklem uˇzivatelsk´ych funkc´ı. Jedna a tat´aˇz instance je pouˇzita pro simulaci mnoha zaˇr´ızen´ı a kaˇzd´e m˚uˇze m´ıt jin´e ˇcasov´e konstanty pˇrechod˚u mezi stavy, takˇze nen´ı moˇzn´e uloˇzit ˇcasov´an´ı nast´alo v t´eto instanci. Nen´ı ani moˇzn´e s jistotou urˇcit poˇrad´ı, v jak´em budou jednotliv´a zaˇr´ızen´ı simulov´ana, takˇze ani nˇejak´y vnitˇrn´ı indexovan´y seznam konstant nen´ı ˇreˇsen´ım.

Dost´av´am se tak k probl´emu simulov´an´ı v´ıce zaˇr´ızen´ı v jednom bˇehu simulace. Je uˇz jasn´e, ˇze stavov´y automat m˚uˇze b´yt simulov´an jen pokud dok´aˇzeme uchov´avat informaci o stavu pro kaˇzd´e dotˇcen´e zaˇr´ızen´ı zvl´aˇst’. P˚uvodnˇe jsem intuitivnˇe pˇredpokl´adal, ˇze pro kaˇzd´e pouˇzit´ı uˇzivatelsk´e funkce je vytvoˇrena jej´ı samostatn´a instance. Jak jsem popsal dˇr´ıve, tento pˇredpoklad byl myln´y. Musel jsem hledat cestu, jak toto omezen´ı obej´ıt. Po- kud by bylo moˇzn´e v jedin´e datab´azi udrˇzovat informaci o stavu kaˇzd´eho zaˇr´ızen´ı a tuto datab´azi spravovat v instanci uˇzivatelsk´e funkce, bylo by to ˇreˇsen´ı. K tomu je potˇreba nˇejak´ym zp˚usobem indexovat jednotliv´a zaˇr´ızen´ı. V prostˇred´ı Tecnomatix na eMServeru je pˇridˇeleno ke kaˇzd´emu objektu tzv. external ID - unik´atn´ı ˇretˇezec znak˚u generovan´y pˇri vytvoˇren´ı tzv. pl´anovac´ıho objektu v datab´azi. Nast´ın´ım, co je pl´anovac´ım objektem myˇsleno. Objekty v PS potaˇzmo v Tecnomatixu jsou bud’to pl´anovac´ı, nebo modelovac´ı, nebo oboj´ı. Pl´anovac´ı objekt je reprezentace napˇr´ıklad robotu, kter´a ˇr´ık´a jen to, ˇze robot je zde pouˇzit a m´a nˇejak´e vlastnosti, ale nic neˇr´ık´a o jeho 3D modelu ˇci kinematice. Tyto fyzick´e vlastnosti jsou zahrnuty v modelovac´ım objektu. Pr´avˇe pouˇzit´y pˇr´ıklad robotu je pˇr´ıklad objektu z´aroveˇn pl´anovac´ıho i modelovac´ıho. I modelovac´ı objekt m´a unik´atn´ı po- pisovaˇc -object ID - tak´e ˇretˇezec znak˚u. Zde vznik´a m´ırn´e zmaten´ı. Prostˇred´ı PS je stavˇeno jako objektovˇe orientovan´e modelovac´ı prostˇred´ı, existuj´ı tˇr´ıdy objekt˚u a z nich se vytv´aˇr´ı instance, pˇr´ıkladem je tˇreba tˇr´ıdarobot KUKA KRC5 a z nˇej je vytvoˇreno nˇekolik kus˚u ro- bot˚u tohoto typu. Pro tˇr´ıdu objektu existuje tak´e unik´atn´ı ID, a to je v atributu eMSType.

Je jasn´e, ˇze toto posledn´ı ID je pro m´e potˇreby nepouˇziteln´e.

Zformuloval jsem pˇredstavu, ˇceho chci dos´ahnout. V logick´em bloku pˇriˇrazen´em konkr´et-

(38)

n´ımu zaˇr´ızen´ı v PS je zavol´ana uˇzivatelsk´a funkce a t´eto funkci je pˇred´an unik´atn´ı popisovaˇc zaˇr´ızen´ı, podle kter´eho instance uˇzivatelsk´e funkce vyhled´a ve sv´e vnitˇrn´ı datab´azi stav, v nˇemˇz se dan´e zaˇr´ızen´ı nach´az´ı. Bylo by logick´e pouˇz´ıt jedno nebo druh´e z vhodn´ych ID v´yˇse popsan´ych jako identifik´ator. Zde vyvst´avaj´ı dvˇe pˇrek´aˇzky, kter´e v takov´em pouˇzit´ı br´an´ı. Zaprv´e v logick´em bloku mohou b´yt pouˇzity parametry, vstupy a v´ystupy jen a pouze ˇ

c´ıseln´ych typ˚u. Logickou hodnotu boolean povaˇzuji za ˇc´ıslo 1 nebo 0 vzhledem k tomu, ˇze v logick´em bloku je moˇzn´e n´asobit booleanovskou hodnotou ˇc´ıselnou hodnotu ve smyslu true= 1 af alse= 0. Toto chov´an´ı logick´e hodnoty je pˇrekvapiv´e, ale ˇcasto velmi uˇziteˇcn´e.

V pˇredchoz´ım odstavci jsem uvedl, ˇze ID objekt˚u jsou ˇretˇezce znak˚u, tedy nesluˇciteln´y da- tov´y typ. Nen´ı ani moˇzn´e jednoduˇse pˇred vstupem ˇretˇezce do logick´eho bloku pˇrev´est ˇretˇezec nˇejak´ym prost´ym zobrazen´ım na ˇc´ıslo, protoˇze i vstup logick´eho bloku uˇz mus´ı b´yt ˇ

c´ıslo. Odtud pak vych´az´ı druh´a pˇrek´aˇzka, a totiˇz ˇze nelze hodnotu ID dostat do sign´alu, aby tento sign´al pak mohl b´yt pˇred´an na vstupu logick´eho bloku, kam lze pˇripojit jen sign´aly. A opˇet zde vyvst´av´a omezen´ı, ˇze sign´al sm´ı b´yt jedinˇe ˇc´ıseln´a hodnota, prostˇred´ı PS nic jin´eho neumoˇzˇnuje. T´ım je vylouˇceno pouˇzit´ı jiˇz existuj´ıc´ıch ID objekt˚u kv˚uli ne- kompatibilitˇe datov´ych typ˚u.

Je nutn´e tedy generovat vlastn´ı ID zaˇr´ızen´ı pro potˇreby hled´an´ı jejich stav˚u pˇri simulaci.

Toto ID mus´ı b´yt unik´atn´ı alespoˇn po dobu bˇehu simulace. Jak se pozdˇeji uk´azalo, doˇcasn´a unik´atnost ID je bohuˇzel to nejlepˇs´ı, ˇceho lze dos´ahnout. Jsou dvˇe moˇznosti, jak zaˇr´ızen´ı ID pˇriˇrazovat. Prvn´ı moˇznost´ı je pouˇz´ıt sign´al v prostˇred´ı PS. V tom pˇr´ıpadˇe by pˇri simu- laci musel b´yt kaˇzd´y sign´al pevnˇe nastaven´y na unik´atn´ı ID zaˇr´ızen´ı, tato hodnota se pˇri kaˇzd´em spuˇstˇen´ı simulace mus´ı zkontrolovat a vˇetˇsinou znovu nastavit. Toto ˇreˇsen´ı se jev´ı b´yt tˇeˇzkop´adn´e, kromˇe toho tak´e pˇridˇel´av´a uˇzivateli starosti s nov´ymi sign´aly, kter´e mus´ı spravovat. Druhou moˇznost´ı je uloˇzit ID v kaˇzd´em logick´em bloku v podobˇe konstanty.

Na obr´azku 18 v pˇrehledu konstant v zelen´em r´ameˇcku je vidˇet konstanta s n´azvem bloc- kID, kter´a pln´ı pˇresnˇe tuto ´ulohu. Jeˇstˇe je nutn´e zajistit unik´atnost t´eto konstanty. T´ım se zab´yv´a PS command, kter´y popisuji v n´asleduj´ıc´ı kapitole.

D´ale je na ˇradˇe vyˇreˇsit datab´azi stav˚u jednotliv´ych zaˇr´ızen´ı. Bude existovat jen jedna

(39)

3.4 Uˇzivatelsk´a funkce - implementace stavov´eho automatu

datab´aze uloˇzen´a v instanci tˇr´ıdy uˇzivatelsk´e funkce. Jako vhodn´y n´astroj pro realizaci takov´e datab´aze se jev´ı slovn´ık (generick´a tˇr´ıda jazyka C# -Dictionary), kter´y umoˇzˇnuje s kl´ıˇcem mapovat libovoln´e datov´e typy. Vytvoˇril jsem v´yˇctov´y typ enStates (energetic states) pro jednoznaˇcn´y popis PE stavu. Datab´azi stav˚u zaˇr´ızen´ı tak tvoˇr´ı slovn´ık dekla- race Dictionary<int, enStates> myActualStatesDict;. V kaˇzd´em vol´an´ı funkce Eva- luate(), tedy v kaˇzd´em kroku simulace, je ve slovn´ıku vyhled´an stav podle kl´ıˇce, kter´ym je blockID. Pˇri prvn´ım hled´an´ı jeˇstˇe nen´ı ve slovn´ıku ˇz´adn´y z´aznam, a tak je pˇrid´an s pˇredan´ymblockID. D´ıky tomu, ˇze byl pouˇzit slovn´ık, nemus´ı b´yt ID ˇrazena vzestupnˇe, ale mohou b´yt r˚uznˇe zpˇreh´azena. D´ale je potˇreba zaznamen´avat okamˇzik, kdy zaˇr´ızen´ı vstou- pilo do nˇekter´ych stav˚u, aby tak mohlo b´yt simulov´ano ˇcasov´an´ı PE. K tomu jsem vyuˇzil dalˇs´ı slovn´ık, kter´y k jednotliv´ym blockID pˇriˇrazuje ˇcasovou zn´amku (timestamp) vstupu do stavu. Pouˇzit´ım ˇcasov´ych zn´amek se pˇredejde moˇzn´ym komplikac´ım pˇri mˇeˇren´ı ˇcasu, kdyˇz je pˇred uplynut´ım ˇcasov´eho intervalu simulace pozastavena. Omezil jsem se na roz- hodov´an´ı o ˇcasovˇe z´avisl´ych ud´alostech jen na z´akladˇe ˇcasu simulace. Pozdˇeji jsem rozˇs´ıˇril uˇzivatelskou funkci jeˇstˇe o jeden slovn´ık, kter´y udrˇzoval informaci o tom, zda robot pˇreˇsel v tomto kroku ze stavu Operating do stavu Ready to operate, aby bylo moˇzn´e realizovat virtu´aln´ı zprovoznˇen´ı VKRC standardu, o tom podrobnˇeji pojedn´av´am v kapitole 4.

Stejnˇe jako blockID vstupuje do uˇzivatelsk´e funkce i sada vˇsech ˇcasov´ych konstant n´aleˇzej´ıc´ıch konkr´etn´ımu zaˇr´ızen´ı. Jejich hodnoty jsou uloˇzeny v konstant´ach logick´eho bloku a jsou nastaveny pˇri sestavov´an´ı logick´eho bloku. Pozdˇeji je ovˇsem moˇzno je upravit.

V tabulce 2 uv´ad´ım seznam n´azv˚u ˇcasov´ych konstant v uˇzivatelsk´e funkci, jejich ekviva- lenty v diagramu 5 a hodnoty pro n´aˇs kontroler. Podle n´azv˚u v t´eto tabulce je pak uloˇzen extern´ı seznam konstant v csv souboru. Po vystavˇen´ı vstupn´ıch parametr˚u uˇzivatelsk´e funkce jsem z´ıskal hlaviˇckuPEStateMachine ( requestedStateID blockID timeToPsaving ti- meMustPsaving timeToReadyFromPsaving timeToSleep timeMustSleep timeToReadyFrom- Sleep ), kter´a je pomˇernˇe dost dlouh´a, ale to je jen mal´a daˇn za pˇrehlednost, kterou za- pouzdˇren´ım vˇseho ostatn´ıho uˇzivateli tato funkce pˇrin´aˇs´ı. Hned prvn´ım parametrem je requestedStateID, o kter´em jsem se jeˇstˇe nezm´ınil. Jak n´azev d´av´a tuˇsit, v tomto parame-

(40)

N´azev parametru Popis ˇci PE ekvivalent Hodnota [s]

timeToPsaving Pˇrechod doEnergy-saving 5

timeMustPsaving Nezbytn´y Energy-saving 0

timeToReadyFromPsaving Pˇrechod doReady to operate 20

timeToSleep Pˇrechod doSleep mode WOL 50

timeMustSleep Nezbytn´y Sleep mode WOL 10

timeToReadyFromSleep Pˇrechod doReady to operate 50

Tabulka 2: PE ˇcasov´an´ı a mapov´an´ı n´azv˚u parametr˚u uˇzivatelsk´e funkce

tru se uˇzivatelsk´e funkci pˇred´av´a poˇzadovan´y PE stav, do nˇehoˇz se m´a pˇrej´ıt. V tuto chv´ıli je na m´ıstˇe pˇredstavit rozhodovac´ı krit´eria, podle kter´ych je stavov´y automat simulov´an.

Definoval jsem celkem 10 stav˚u a 1 chybov´y stav pro ´uˇcely ladˇen´ı, jejich v´yˇcet je v tabulce 3. Z´akladn´ı ´ukony jsem zobrazil ve v´yvojov´em diagramu 6. Pˇredposledn´ı blok je pops´an jakoPodle aktu´aln´ıho stavu a ˇcasu simulace uloˇz do datab´aze nov´y stav. V´ykon t´eto operace je nejn´aroˇcnˇejˇs´ı a nejd˚uleˇzitˇejˇs´ı, proto se budu nyn´ı zab´yvat jej´ım popisem.

Pˇredpokl´adejme, ˇze v pˇredchoz´ım kroku jsem z´ıskal z datab´aze informaci o tom, v kter´em PE stavu se tento logick´y blok potaˇzmo zaˇr´ızen´ı nach´azel v minul´em simulaˇcn´ım kroku.

Podle toho se pak liˇs´ı reakce uˇzivatelsk´e funkce na poˇzadovan´y stav. Pop´ıˇsu ted’ tyto reakce.

V programu jsem pouˇzil n´azvy stav˚u, jak jsou uvedeny v tabulce 3 ve sloupciN´azev stavu.

Pro stavOperating:

• poˇzadovan´y stav 6=Operating ⇒ nastav aktu´aln´ı stav na Ready

Pro stavReady jsou 3 moˇzn´e v´ystupy:

• nastav ˇcasovou zn´amku na aktu´aln´ı ˇcas simulace

• poˇzadovan´y stav =PSaving ⇒ nastav aktu´aln´ı stav na toPSaving

(41)

3.4 Uˇzivatelsk´a funkce - implementace stavov´eho automatu

Obr´azek 6: V´yvojov´y diagram simulace stavov´eho automatu v uˇzivatelsk´e funkci

• poˇzadovan´y stav = Sleep ⇒ nastav aktu´aln´ı stav natoSleep

• poˇzadovan´y stav = Operating ⇒nastav aktu´aln´ı stav naOperating Pro stav toPSaving:

• (ˇcas simulace - ˇcasov´a zn´amka) ≥ timeToPsaving ⇒ – nastav aktu´aln´ı stav namustPSaving

– nastav ˇcasovou zn´amku na aktu´aln´ı ˇcas simulace Pro stav mustPSaving:

• (ˇcas simulace - ˇcasov´a zn´amka)≥ timeMustPsaving ⇒nastav aktu´aln´ı stav naPSa- ving

Pro stav PSaving:

• poˇzadovan´y stav = Ready ⇒ nastav aktu´aln´ı stav na toReadyFromPSaving

(42)

N´azev stavu N´azev v PE diagramu ID v programu

Operating Operating 1

Ready Ready to operate 0

toPSaving Pˇrechod do Energy-saving 2

mustPSaving Nezbytn´y Energy-saving 3

PSaving Energy-saving 4

toReadyFromPSaving Pˇrechod do Ready to operate (z ID=4) 5

toSleep Pˇrechod do Sleep mode WOL 6

mustSleep Nezbytn´y Sleep mode WOL 7

Sleep Sleep mode WOL 8

toReadyFromSleep Pˇrechod do Ready to operate (z ID=8) 9

errorState 10

Tabulka 3: N´azvy stav˚u ve v´yˇctu enStates a jejich ekvivalent v diagramu 5

• poˇzadovan´y stav =Sleep ⇒ nastav aktu´aln´ı stav na toSleep

• nastav ˇcasovou zn´amku na aktu´aln´ı ˇcas simulace

Pro stavtoReadyFromPSaving:

• (ˇcas simulace - ˇcasov´a zn´amka)≥timeToReadyFromPSaving ⇒nastav aktu´aln´ı stav na Ready

Pro stavtoSleep:

• (ˇcas simulace - ˇcasov´a zn´amka) ≥ timeToSleep ⇒ – nastav aktu´aln´ı stav na mustSleep

– nastav ˇcasovou zn´amku na aktu´aln´ı ˇcas simulace

(43)

3.4 Uˇzivatelsk´a funkce - implementace stavov´eho automatu

Pro stav mustSleep:

• (ˇcas simulace - ˇcasov´a zn´amka) ≥ timeMustSleep ⇒ nastav aktu´aln´ı stav na Sleep Pro stav Sleep:

• poˇzadovan´y stav = Ready ⇒ nastav aktu´aln´ı stav na toReadyFromSleep

• nastav ˇcasovou zn´amku na aktu´aln´ı ˇcas simulace Pro stav toReadyFromSleep:

• (ˇcas simulace - ˇcasov´a zn´amka)≥timeToReadyFromPSaving ⇒nastav aktu´aln´ı stav naReady

Pro pˇr´ıpadn´e pˇrid´av´an´ı stav˚u do stavov´eho automatu je vhodn´e dodrˇzovat pravidlo, ˇze pˇri pˇrechodu do stavu, v nˇemˇz se n´aslednˇe bude kontrolovat ˇcasov´a zn´amka, je nutno ˇcasovou zn´amku nastavit na aktu´aln´ı ˇcas. Tak je zajiˇstˇeno, ˇze ˇcasovˇe z´avisl´a operace bude aktivn´ı jen po definovanou dobu. Jak je vidˇet, vˇsechny kontroly ˇcasov´e zn´amky pˇredpokl´adaj´ı, ˇze ˇcas simulace bude neklesaj´ıc´ı. V prostˇred´ı PS je moˇzn´e v Sequence Editoru spustit simulaci pozp´atku v reˇzimu CEE (cyclic event evaluation), coˇz m˚uˇze b´yt nejsp´ıˇs v nˇekter´ych situac´ıch prospˇeˇsn´e, nicm´enˇe ve vˇetˇsinˇe pˇr´ıpad˚u se tato funkce nevyuˇzije a implementace stavov´eho automatu tak, aby fungoval i takto zpˇetnˇe, by se nevyrovnala vynaloˇzen´emu ´usil´ı. Nav´ıc by k´od pˇriˇsel do velk´e m´ıry o svoji pˇrehlednost. Pˇr´ıpady, kdy uˇzivatel pˇrejde v jiˇz jednou spuˇstˇen´e simulaci zpˇet, mus´ı uˇzivatel opravit manu´alnˇe nasta- ven´ım stavov´eho automatu do spr´avn´eho stavu, a pak opˇetovn´ym spuˇstˇen´ım simulace. Pˇri takov´em jedn´an´ı je ovlivnˇen i z´aznam stav˚u, pokud byl pˇri t´eto ud´alosti aktivov´an, a jeho v´ystup je tˇreba analyzovat. V z´aznamech bude v´ıce ´udaj˚u ve stejn´em ˇcasov´em intervalu, a to je znalost, kterou lze pˇri korekci dat vyuˇz´ıt. Z´aznamem stav˚u se zab´yv´am podrobnˇe v kapitole 3.5.2.

T´ım je uzavˇren blok Stavov´y automat v obr´azku 2. Vzhledem k tomu, ˇze funkˇcnost stavov´eho automatu pˇrich´az´ı do prostˇred´ı PS aˇz s uˇzivatelskou funkc´ı, nen´ı moˇzn´e dodrˇzet

(44)

postup v´yvoje pluginu, jak byl pops´an v ´uvodu kapitoly. Konkr´etnˇe se jedn´a o krok, kdy je nejprve prototyp funkˇcn´ı datov´e struktury manu´alnˇe sestaven v prostˇred´ı PS, aby tak byla dok´az´ana integrovatelnost a kompatibilita s PS. Sestavov´an´ı funkˇcn´ıho prototypu tedy pˇriˇslo na ˇradu aˇz po naprogramov´an´ı uˇzivatelsk´e funkce. Po vyladˇen´ı uˇzivatelsk´e funkce jsem pak mohl uˇz pˇristoupit k automatizaci sestaven´ı funkˇcn´ı struktury - logick´eho bloku, v nˇemˇz je uˇzivatelsk´a funkce pouˇzita. Na tomto m´ıstˇe je vhodn´e upozornit, ˇze tuto funkci lze k simulov´an´ı PE standardu pouˇz´ıt samostatnˇe bez dalˇs´ıch n´astaveb, pokud uˇzivatel v´ı, jak tato funkce funguje. K praktick´emu hromadn´emu pouˇzit´ı je ale zapotˇreb´ı spravuj´ıc´ı nadstavbov´a aplikace, kterou popisuji v kapitole 3.5.

3.5 Process Simulate Command

Pˇredstava, ˇze by uˇzivatel mˇel prov´est manu´alnˇe des´ıtky mal´ych krok˚u pro kaˇzd´e zaˇr´ızen´ı, kter´emu chce pˇriˇradit chov´an´ı podle PROFIenergy standardu, je pˇrinejmenˇs´ım odrazuj´ıc´ı.

Pro pohodln´e pouˇzit´ı pluginu je tak´e nutn´e uˇzivateli dodat uˇzivatelsk´e rozhran´ı konzistentn´ı s tˇemi, na kter´e je v r´amci nadˇrazen´e aplikace zvykl´y. Na programu Process Simulate je zn´at, ˇze je sloˇzen z velk´eho mnoˇzstv´ı d´ılˇc´ıch aplikac´ı, kter´e p˚uvodnˇe st´aly samostatnˇe, a konzistence uˇzivatelsk´ych rozhran´ı nen´ı ani v nˇem plnˇe dodrˇzena. M´a vˇsak spoleˇcn´e prvky a zd´a se b´yt logick´e, ˇze jeho v´yvoj´aˇri maj´ı tendenci smˇeˇrovat k urˇcit´emu sjednocen´ı vzhledu a ovl´ad´an´ı. Jedn´ım z bod˚u zad´an´ı pr´ace tak´e bylo naprogramovat SW modul pro pˇren´aˇsen´ı extern´ıch dat z a do prostˇred´ı Process Simulate. V pr˚ubˇehu ˇreˇsen´ı pr´ace vznikl konkr´etnˇejˇs´ı poˇzadavek na umoˇznˇen´ı exportovat ˇcasov´y z´aznam otoˇcen´ı kloub˚u vybran´ych robot˚u ze simulace do souboru.

Vˇsechny tyto poˇzadavky lze splnit v r´amci moˇznost´ı Tecnomatix.NET API pomoc´ı tzv.

command. Je to funkce typick´a pro tlaˇc´ıtko - uˇzivatel klikne na tlaˇc´ıtko, a to vyvol´a sled nˇejak´ych akc´ı. Kdyˇz je akce jednou dokonˇcena, nen´ı command aktivn´ı, dokud uˇzivatel opˇet neklikne na tlaˇc´ıtko. Command tak´e umoˇzˇnuje vytv´aˇret komplexnˇejˇs´ı uˇzivatelsk´e rozhran´ı neˇz jen jedno tlaˇc´ıtko, umoˇzˇnuje pouˇz´ıt vˇetˇsinu GUI (graphical user interface) prvk˚u, kter´e v prostˇred´ı PS najdeme.

(45)

3.5 Process Simulate Command

3.5.1 Pˇriˇrazen´ı logick´eho bloku

Pro simulov´an´ı PE standardu je nutn´e pouˇz´ıt logick´y blok, kter´y umoˇzn´ı pouˇz´ıt uˇziva- telskou funkci na sv˚uj vnitˇrn´ı parametr ˇci na sv˚uj v´ystup. V PS lze logick´y blok vytvoˇrit zcela samostatnˇe bez n´avaznosti na kter´ykoli objekt ve studii. Z objektov´eho hlediska nelze m´ıt samostatnˇe stoj´ıc´ı paraleln´ı strom objekt˚u s nez´avisl´ym koˇrenem, vˇsechny objekty mus´ı m´ıt spoleˇcn´eho pˇredka, ˇci majitele. Logick´y blok je povaˇzov´an za modelovac´ı objekt a pˇri jeho samostatn´em vytvoˇren´ı se zaˇrad´ı jako potomek ˇci majetek statick´e vlastnosti Logica- lRoot n´aleˇzej´ıc´ı statick´e tˇr´ıdˇe TxDocument. Takto samozˇrejmˇe lze tak´e v logick´em bloku simulovat PE standard, a t´ım simulovat nˇejak´y virtu´aln´ı objekt, kter´y nen´ı ve studii vidˇet.

Praktiˇctˇejˇs´ı je vˇsak pouˇz´ıt moˇznost pˇriˇradit logick´y blok objektu, kter´y tuto moˇznost pod- poruje. Obecnˇe kaˇzd´y objekt implementuj´ıc´ı rozhran´ı ITxPlcLogicResource m˚uˇze dostat logick´y blok pˇriˇrazen. Prakticky toto rozhran´ı poˇzaduje pouze dvˇe vˇeci - zaprv´e implemen- taci vlastnostiLogicBehavior, v n´ıˇz se ukl´ad´a reference na objekt logick´eho bloku, a zadruh´e implementaci veˇrejn´e metody CopySelfLogicToOtherLogicResource. Logick´y blok je v API zastoupen tˇr´ıdouTxPlcLogicBehavior. Pro potˇreby programov´an´ı pluginu n´as vˇsak nebude pˇr´ıliˇs zaj´ımat, kter´e objekty mohou logick´y blok pojmout, ani nebudeme mnoˇzinu takov´ych objekt˚u rozˇsiˇrovat. V zad´an´ı pr´ace je urˇceno, ˇze standard PROFIenergy m´a b´yt aplikov´an na model robota v PS, takˇze stˇredem naˇseho z´ajmu je tˇr´ıda TxRobot, kter´a rozhran´ıITx- PlcLogicResource implementuje, ˇc´ımˇz je z´akladn´ı poˇzadavek splnˇen a d´ale se o nˇej nen´ı tˇreba starat.

Pro logick´y blok plat´ı jeˇstˇe dalˇs´ı zvl´aˇstnost, a totiˇz dokud nen´ı jeho vstup ˇci v´ystup pˇripojen na sign´al, nen´ı blok se z´arukou simulov´ana a je v jak´esi latentn´ı f´azi. Kdyˇz uˇzivatel chce simulovat PE standard, stejnˇe mus´ı k bloku pˇripojit ˇr´ıdic´ı sign´aly, ˇc´ımˇz simulaci bloku aktivuje. Prototyp logick´eho bloku je zobrazen v diagramu na obr´azku 7. Zde zobrazen´e parametry, vstupy a v´ystupy jsou jen poˇzadovan´e minimum, uˇzivatel m˚uˇze logick´y blok rozˇs´ıˇrit o libovolnou dalˇs´ı funkˇcnost (vstupy, parametry atd.), dokud se zmˇeny nedotknou zde uveden´ych prvk˚u, nebude dotˇcena ani PE funkˇcnost. M´ame tedy prototyp, command mus´ı jen tento prototyp sestavit, spr´avnˇe propojit vnitˇrn´ı promˇenn´e a nastavit konstanty

(46)

Obr´azek 7: Prototyp logick´eho bloku

na poˇzadovan´e hodnoty. Tady uvedu zjednoduˇsen´y UML diagram tˇr´ıd pluginu 8. Neuv´ad´ım v´yˇcet metod tˇr´ıd, pouze v´yˇcet vnitˇrn´ıch promˇenn´ych tˇr´ıd.

Obr´azek 8: UML diagram commandu

Pˇriˇrazen´ı logick´eho bloku objektu robotu prob´ıh´a n´asledovnˇe. Nejprve je zkontrolov´ano, zda robot uˇz m´a pˇriˇrazen´y logick´y blok. Pokud ano, pracuje s t´ımto logick´ym blokem, pokud ne, je vytvoˇren nov´y logick´y blok (instance tˇr´ıdyTxPlcLogicBehavior). Vytvoˇren´ı instance tˇr´ıdyTxPlcLogicBehavior nelze prov´est prost´ym vol´an´ı kontruktoru tˇr´ıdy. Instanci lze vy- tvoˇrit jen pomoc´ı tov´arn´ı metodyCreateLogicBehavior( TxPlcLogicBehaviorCreationData data ) zavolan´e na instanci objektu implementuj´ıc´ıho rozhran´ıITxPlcLogicBehaviorCre-

(47)

3.5 Process Simulate Command

ation. Vstupn´ım parametrem je instance tˇr´ıdy TxPlcLogicBehaviorCreationData, kterou uˇz lze vytvoˇrit obvykl´ym vol´an´ım konstruktoru tˇr´ıdy. V t´eto instanci je nutn´e pˇred jej´ım pouˇzit´ım nastavit vˇsechny parametry, kter´e chceme nastavit instanciTxPlcLogicBehavior, pozdˇejˇs´ı zmˇeny parametr˚u jiˇz existuj´ıc´ı instance tˇr´ıdy TxPlcLogicBehavior vedou k nesta- bilitˇe prostˇred´ı PS. Tento postup vytv´aˇren´ı objekt˚u, kdy se nejprve vytvoˇr´ı datov´y objekt, kter´y vn´aˇs´ı do tov´arn´ı metody inicializaˇcn´ı informace, je v Tecnomatix.NET API zave- den´ym standardem a principi´alnˇe je vˇzdy stejn´y. Pouˇzit´ı tov´arn´ıch metod zde m´a zajistit, ˇze uˇzivatel nebude vytv´aˇret sirotˇc´ı objekty - tedy objekty, kter´e by nemˇely sv´eho majitele.

Pot´e se otevˇre .csv soubor, v nˇemˇz jsou uloˇzeny ˇcasy pˇrechod˚u mezi PE stavy a naˇctou se hodnoty ˇcasov´ych konstant s pevnˇe dan´ymi jm´eny, jak jsou uvedena v tabulce 2 v prvn´ım sloupci N´azev parametru. Soubor je ve form´atu .csv, hodnoty jsou oddˇelen´e ˇc´arkou a pro neceloˇc´ıseln´e hodnoty je pouˇzita desetinn´a teˇcka. V prvn´ım sloupci je pevnˇe dan´y n´azev ˇcasov´e konstanty, v druh´em sloupci pak jej´ı hodnota. Dalˇs´ı sloupce na ˇr´adku jsou igno- rov´any. Poˇrad´ı ˇr´adk˚u m˚uˇze b´yt libovoln´e a v pˇr´ıpadˇe, ˇze se na ˇr´adku vyskytuje nezn´am´y n´azev ˇcasov´e konstanty, je tento z´aznam ignorov´an. Vˇsechny nenalezen´e ˇcasov´e konstanty jsou v logick´em bloku nastaveny na hodnotu 0. Pˇr´ıklad obsahu souboru je vidˇet ve v´ypisu 1.

V logick´em bloku se pak hledaj´ı podle jm´ena v´yskyty konstant (instance tˇr´ıdy TxPlcLo-

timeToPsaving, 5.3 timeMustPsaving, 0 timeMustSleep, 10.0 timeToReadyFromSleep, 50

V´ypis 1: Pˇr´ıklad obsahu .csv souboru s PE ˇcasov´an´ım

gicBehaviorConstant), proch´az´ı se pole konstant, jehoˇz adresa je uloˇzena ve vlastnosti logick´eho bloku Constants. Pokud je nalezen prvn´ı v´yskyt dan´eho jm´ena konstanty, kter´e odpov´ıd´a n´azvu konstanty z .csv souboru s ˇcasov´an´ım, pˇriˇrad´ı se jej´ı vlastnosti Value pˇr´ısluˇsn´a hodnota ze souboru. Pokud konstanta nen´ı v logick´em bloku nastavena, je vy- tvoˇrena jej´ı nov´a instance s n´azvem, kter´y nebyl nalezen. Opˇet mus´ı b´yt pouˇzita tov´arn´ı funkce instance tˇr´ıdy TxPlcLogicBehavior s n´azvem CreateConstant za pouˇz´ıt´ıCreation-

Odkazy

Související dokumenty

Tato diplomov´ a pr´ ace si klade za c´ıl vyvinout v programovac´ım jazyce C++ n´ astroj pro simulaci 1D proudˇ en´ı pr˚ uchodu plynu radi´ aln´ım kompresorem turbodmychadla,

Ztr´ aty jsou charakterizov´ any pomoc´ı souˇ cinitele tlakov´ e ztr´ aty, pro kter´ y je navrˇ zena obyˇ cejn´ a di- ferenci´ aln´ı rovnice, kter´ a je pot´ e souˇ

Jedn´ım z posledn´ıch c´ıl ˚u diplomov´e pr´ace je odzkouˇsen´ı matematick´eho modelu i programu urˇcen´eho pro online nasazen´ı na re´aln ´ych datech, kter´e

Hlavn´ım c´ılem projektu je vytvoˇren´ı syst´ emu pro ´ udrˇ zbu digit´ aln´ıho re- pozit´ aˇre, kter´ y je pˇr´ıstupn´ y lidem bez technick´ eho z´ azem´ı, ale kter´

Hlavn´ı myˇslenkou diplomov´e pr´ace je interpretovat Yachimur˚ uv model coby kvan- tov´y hamiltoni´an a pouˇz´ıt know-how z teorie kvantov´ych vlnovod˚ u, kde se analo-

Jedn´ım ze z´ akladn´ıch c´ıl˚ u t´ eto pr´ ace bylo pr´ avˇ e vytvoˇren´ı hledaˇ cky dis- ponuj´ıc´ı displejem, na kter´ em by bylo moˇ zn´ e zobrazit vˇ etˇs´ı ˇ

C´ılem t´ eto pr´ ace je identifikovat vyv´ yˇ sen´ e liniov´ e stavby v digit´ aln´ım v´ yˇ skov´ em modelu, jako dalˇ s´ı vstup pro zpˇ resnˇ en´ı pouˇ

C´ılem pˇ redloˇ zen´ e pr´ ace je n´ avrh a implementace vizualizaˇ cn´ı metody, kter´ a kombinuje obraz z barevn´ e a term´ aln´ı kamery.. Pˇ redpokl´ ad´ a se, ˇ