ˇ ´ VYSOKE ´ UCEN ˇ ´I TECHNICKE ´ V PRAZE CESK E
Fakulta elektrotechnick´a
Diplomov´ a pr´ ace
Bc. Martin Ron Energetick´ eu ´ spory v simulaci digit´ aln´ı tov´ arny
Katedra ˇ r´ıdic´ı techniky Vedouc´ı pr´ace: Ing. Pavel Burget, Ph.D.
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.
Abstrakt Tato pr´ace se zab´ yv´a n´avrhem pluginu pro digit´aln´ı tov´arnu Tecnomatix - konkr´etnˇe pro jej´ı prostˇred´ı Process Simulate. Popisuji zde postup n´avrhu architektury pluginu pro modelov´an´ı a simulaci profilu 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 pluginu 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 ˇca´sti o programov´an´ı mimo jin´e vysvˇetluji chov´an´ı vybran´ ych funkc´ı knihovny Tecnomatix.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 ˇca´sti 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, Tecnomatix.NET API, virtu´aln´ı zprovoznˇen´ı, PROFIenergy
Abstract The scope of this thesis is about design of plugin for digital manufacturing tool Tecnomatix - with focus on its suite Process Simulate. I describe here procedure of designing architecture of plugin for modeling and simulation of PROFIenergy profile, its programming and its usage for virtual commissioning of demonstrative robotic cell. During description of design 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 robot, simulation of example and outputted data gained from simulation using developed plugin.
Keywords: Tecnomatix, Process Simulate, state automata, Tecnomatix.NET API, virtual commissioning, PROFIenergy
OBSAH
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
ˇ sen´ı 3 Reˇ
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
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
Postup pˇri aplikaci pluginu . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
3.6.1
Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
3.6.2
Pouˇzit´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
3.5
3.6
i
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
ii
´ U ˚ SEZNAM OBRAZK
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
iii
´ U ˚ SEZNAM OBRAZK
23
Graf simulovan´e spotˇreby . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
24
Graf zmˇeˇren´e spotˇreby . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
iv
SEZNAM TABULEK
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
v
´ ˚ KODU ´ SEZNAM VYPIS U
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
vi
´ 1 UVOD
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 automatizovan´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 u ´sporn´ y reˇzim elektrick´ ych spotˇrebiˇc˚ u nen´ı nic nov´eho a zvl´aˇstˇe v soukrom´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 vytvoˇrit profil, kter´ y by unifikoval principy v u ´sporn´ 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 problematikou 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 optimalizac´ı robotick´ ych cest pˇri zachov´an´ı prov´adˇen´ ych operac´ı, pl´anov´an´ım pohybu materi´al˚ u ve v´ yrobn´ı lince a optimalizac´ı sekvenc´ı v´ yrobn´ıch u ´kon˚ u a tak´e vyuˇzit´ım profilu PROFIenergy k u ´spoˇ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´ı. 1
Hlavn´ım c´ılem tedy bylo naprogramovat pro prostˇred´ı Process Simulate (souˇca´st digit´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.
2
´ ROZBOR 2 METODOLOGICKY
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
ˇ ızen´ı a monitorov´an´ı spotˇreby energie je poˇra´d d˚ R´ uleˇzitˇejˇs´ı ve vˇsech ˇca´stech automatizovan´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 u ´sporn´ 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 u ´sporn´ 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 u ´sporn´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ˇzn ˇuj´ı modelovat a simulovat pr˚ umyslovou v´ yrobu. Zab´ yv´a se ˇca´stmi v´ yroby nebo i cel´ ymi tov´arnami. Umoˇzn ˇuje 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 zkracuje 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´ı nejr˚ uznˇejˇs´ıch n´astroj˚ u rozˇclenˇen´ ych do nˇekolik aplikac´ı oznaˇcovan´ ych jako prostˇred´ı. D´ale 3
2.2 Tecnomatix
v sobˇe integruje datovou z´akladnu a tzv. eMServer, kter´ y zprostˇredkov´av´a pˇr´ıstup k datov´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 u ´rovn´ı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 u ´loˇ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 simulace apod., obvykle b´ yv´a SystemRoot na sd´ılen´em u ´loˇziˇsti, ale jeho um´ıstˇen´ı pro klienty nen´ı pevn´e a ˇcasto klientsk´e aplikace vyuˇz´ıvaj´ı lok´aln´ı kopii jen ˇca´sti 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 u ´kol˚ um ve v´ yrobˇe, umoˇzn ˇuje 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ˇzn ˇuje 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´ı u ´rovnˇe - hlediska cel´e tov´arny - aˇz po tu nejniˇzˇs´ı - u ´roveˇ n v´ yrobn´ı buˇ nky ˇc´ıtaj´ıc´ı tˇreba jedin´eho robota. Obsahuje n´astroje 4
´ ROZBOR 2 METODOLOGICKY
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´ ym CEE (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 u ´rovni jednotliv´ ych zaˇr´ızen´ı, a proto je simulaˇcn´ı prostˇred´ı PS v reˇzimu CEE vhodn´a volba. Simulace profilu 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ˇzn ˇuje 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 programov´an´ı. Je to v´ yhodn´ y postup i pro vysvˇetlen´ı hierarchie datov´e struktury studie v Tecnomatixu, 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 modelovan´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 objektovˇ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). Vztah tˇr´ıda - instance lze tedy ch´apat jako vztah typ - realizace. Instance tˇr´ıdy mus´ı b´ yt vytvoˇrena tzv. konstruktorem - speci´aln´ı metodou pro generaci instance. Pokud je konstruktor u ´myslnˇe znepˇr´ıstupnˇen, obvykle je nˇekde jinde vytvoˇ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 u ´kon˚ u pˇri vytv´aˇren´ı instance. Dalˇs´ı uˇziteˇcnou vlastnost´ı 5
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 deklarov´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´ın vlastnost 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´ı posluchaˇ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ˇe dˇed´ı vˇsechny tˇr´ıdy. Podobnˇe je tomu u datov´e struktury Tecnomatixu, kde je nejvyˇsˇs´ı u ´roveˇ 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 6
´ ROZBOR 2 METODOLOGICKY
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 pojem API, to znamen´a Application 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.
7
ˇ sen´ı Reˇ
3
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 programov´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 celkem 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 zapadalo 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 Tecnomatixu 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 u ´seky (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 8
ˇ SEN ˇ ´I 3 RE
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´ı tohoto 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 spolehliv´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´ı u ´rovni 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ˇzn ˇovat 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 9
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 simulov´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 ˇca´st mus´ı b´ yt co nejl´epe integrov´ana do PS a mus´ı s n´ım co nejm´enˇe interferovat. Dalˇs´ım stavebn´ım kamenem je ˇca´st pro z´aznam stav˚ u v ˇcase pro kaˇzd´e dotˇcen´e zaˇr´ızen´ı. Tato ˇca´st bude napojena na stavov´ y automat a na simul´ator integrovan´ y v PS. Nav´ıc bude podporovat export z´aznam˚ u do souboru. Tˇret´ı souˇc´ast´ı pluginu je spr´avce pˇredchoz´ıch dvou ˇc´ast´ı, kter´ y m´a za u ´kol pˇriˇrazovat zaˇr´ızen´ım ve studii PE funkˇcnost realizovanou stavov´ ym automatem a d´ale m´a za u ´kol spravovat z´aznam stav˚ u. Konfigurace stavov´eho automatu pro konkr´etn´ı ˇcasov´an´ı automatu 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
10
ˇ SEN ˇ ´I 3 RE
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 ˇca´steˇ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 kamen˚ 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 funkcionalitu. 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ˇzn ˇovat 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 simulace 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 adresovateln´ ych Energy-saving m´od˚ u, Sleep mode a Power off m´od. Diagram m´od˚ u a povolen´ 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ˇza´d´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 11
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 jednotliv´ ych Energy-saving m´od˚ u je moˇzno pˇrej´ıt zpˇet do stav˚ u Pˇ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 z Energy-saving m´od˚ u a alespoˇ n jeden pˇrechod vede z Energy-saving m´odu do Ready 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ˇe Sleep mode WOL. Ten m´a oproti standardn´ım Energysaving m´od˚ um zvl´aˇstn´ı chov´an´ı. Jedn´a se o u ´sporn´ y m´od vyvinut´ y p˚ uvodnˇe pro pr˚ umyslov´e 12
ˇ SEN ˇ ´I 3 RE
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 odpojen´ı sbˇernice a zaˇr´ızen´ı tak nem˚ uˇze pˇrij´ımat ˇza´dn´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 WOL nen´ı 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 a Go 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 Energysaving 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´ıkaz Start 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 nejvhodnˇ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 podporuje 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, ˇza´dn´ y z voliteln´ 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 nepovolen´e pˇrechody neuvaˇzoval. N´aˇs kontroler tak´e nedisponuje autonomn´ım rozhodov´an´ım o Energy-saving m´odech, volba u ´sporn´eho reˇzimu z´aleˇz´ı pouze na ˇr´ıdic´ım PLC. V doku13
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 do Operate
20s
50s
0
0
10s
0
150W
30W
220W
Minim´aln´ı doba setrv´an´ı Energetick´a spotˇreba
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 prostˇred´ı PS. Tato myˇslenka se uk´azal´a b´ yt z ˇca´sti chybn´a. V prvn´ı generaci pluginu jsem modeloval stavov´ y automat pomoc´ı non-sim operac´ı, kter´e umoˇzn ˇovaly vynutit v simulaci ˇcasovou prodlevu. Podm´ınky pˇrechodu mezi stavy pak zajiˇst’ovaly Transition 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´ı 14
ˇ SEN ˇ ´I 3 RE
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 condition operac´ı tak, jako to lze udˇelat manu´alnˇe v prostˇred´ı PS. Tato skuteˇcnost nebyla zpoˇca´tku 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 nastavovat Transition 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ˇzn ˇuje v PS pˇriˇrazovat urˇcit´ ym objekt˚ um jist´e logick´e chov´an´ı. Dokonce umoˇzn ˇuje pouˇz´ıvat vnitˇrn´ı promˇenn´e pro jednotliv´e bloky. Z m´eho hlediska pak nejpodstatnˇejˇs´ı vlastnost´ı logick´ ych blok˚ u byla moˇznost pozdrˇzet v´ ystupn´ı hodnotu o pˇresnˇe definovan´ y ˇcasov´ y u ´sek. 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´ı simuluje. 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 diagramu na obr´azku 2. Stavov´ y automat je realizov´an pomoc´ı uˇzivatelsk´e funkce. Prostˇred´ı Process Simulate umoˇzn ˇuje pouˇz´ıvat takzvan´e logick´e bloky - objekty, kter´e umoˇzn ˇuj´ı simulovat 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 detekce n´abˇeˇzn´e hrany (RE ( X ) - rising edge), detekce sestupn´e hrany (FE ( X ) - falling 15
3.3 V´ yvoj architektury pluginu
edge), dvˇe verze bistabiln´ıho klopn´eho ˇclenu (SR ( X Y ) - set-reset a RS ( X Y ) - resetset), 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 hodnotu true 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ˇzn ˇuje 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 u ´skal´ı 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 16
ˇ SEN ˇ ´I 3 RE
ale PS nepodporuje a vstupn´ım parametrem sm´ı b´ yt jedinˇe samotn´ y ˇcist´ y parametr. Kombinov´an´ı funkc´ı a vytv´aˇren´ı v´ yraz˚ u je jinak ale v poli Value Expression umoˇznˇeno a funguje v poˇra´dku. Jak je vidˇet na obr´azku 4, lze toto omezen´ı obej´ıt vytvoˇren´ım pomocn´eho parametru, 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 parametru requestedStateID, kter´ y je prvn´ım vstupn´ım parametrem funkce PEStateMachine v ˇcervenˇe zv´ yraznˇen´e oblasti. Pˇri tomto postupu je nutn´e br´at v u ´vahu, ˇze vnitˇrn´ı parametry logick´eho bloku jsou vyhodnocov´any postupnˇe podle hodnoty v pol´ıˇcku Index. Na obr´azku 4 je vidˇet, ˇze nejdˇr´ıve je vypoˇctena hodnota vnitˇrn´ıho parametru requestedStateID s indexem 1, a aˇz pot´e je poˇc´ıt´ana hodnota parametru currentState 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 knihovny Tecnomatix.Engineering.dll. Toto rozhran´ı ale vynucuje pouze funkci Evaluate(), coˇz samo o sobˇe nedostaˇcuje. Funkce Evaluate() 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 17
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(), ˇra´dek 12). D´ale je pˇri naˇcten´ı nˇejak´e studie, v n´ıˇz je uˇzivatelsk´a funkce pouˇzita, zavol´ana metoda ParametersTypes(), 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 ReturnValueType() 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 ˇra´dek 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ˇzn ˇuje 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 robotick´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´e Energy-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 Energysaving m´ody. 18
ˇ SEN ˇ ´I 3 RE
D´ale model na obr´azku 3 nemodeluje pomoc´ı stavu f´azi, kdy je zaˇr´ızen´ı v Energysaving 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 procedur´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 u ´sek. Tyto ˇcasov´e u ´seky se liˇs´ı zaˇr´ızen´ı od zaˇr´ızen´ı a je nutn´e umoˇznit uˇzivateli 19
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. Pokud 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´ı popisovaˇ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´ıda robot KUKA KRC5 a z nˇej je vytvoˇreno nˇekolik kus˚ u robot˚ 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´et20
ˇ SEN ˇ ´I 3 RE
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 a f 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 datov´ 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ˇzn ˇuje. T´ım je vylouˇceno pouˇzit´ı jiˇz existuj´ıc´ıch ID objekt˚ u kv˚ uli nekompatibilitˇ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 simulaci 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 blockID, kter´a pln´ı pˇresnˇe tuto u ´lohu. 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 21
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ˇzn ˇuje 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 deklarace Dictionary
myActualStatesDict;. V kaˇzd´em vol´an´ı funkce Evaluate(), 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 ˇza´dn´ y z´aznam, a tak je pˇrid´an s pˇredan´ ym blockID. 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´ı vstoupilo 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 rozhodov´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 ekvivalenty 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ˇcku PEStateMachine ( requestedStateID blockID timeToPsaving timeMustPsaving timeToReadyFromPsaving timeToSleep timeMustSleep timeToReadyFromSleep ), kter´a je pomˇernˇe dost dlouh´a, ale to je jen mal´a daˇ n za pˇrehlednost, kterou zapouzdˇ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 parame22
ˇ SEN ˇ ´I 3 RE
N´azev parametru
Popis ˇci PE ekvivalent
Hodnota [s]
timeToPsaving
Pˇrechod do Energy-saving
5
timeMustPsaving
Nezbytn´y Energy-saving
0
timeToReadyFromPsaving
Pˇrechod do Ready to operate
20
timeToSleep
Pˇrechod do Sleep mode WOL
50
timeMustSleep
Nezbytn´y Sleep mode WOL
10
timeToReadyFromSleep
Pˇrechod do Ready 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´ı u ´kony jsem zobrazil ve v´ yvojov´em diagramu 6. Pˇredposledn´ı blok je pops´an jako Podle 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 sloupci N´azev stavu. Pro stav Operating: • poˇzadovan´ y stav 6= Operating ⇒ nastav aktu´aln´ı stav na Ready Pro stav Ready 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 23
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 na toSleep • poˇzadovan´ y stav = Operating ⇒ nastav aktu´aln´ı stav na Operating Pro stav toPSaving: • (ˇcas simulace - ˇcasov´a zn´amka) ≥ timeToPsaving ⇒ – nastav aktu´aln´ı stav na mustPSaving – nastav ˇcasovou zn´amku na aktu´aln´ı ˇcas simulace Pro stav mustPSaving: • (ˇcas simulace - ˇcasov´a zn´amka) ≥ timeMustPsaving ⇒ nastav aktu´aln´ı stav na PSaving Pro stav PSaving: • poˇzadovan´ y stav = Ready ⇒ nastav aktu´aln´ı stav na toReadyFromPSaving 24
ˇ SEN ˇ ´I 3 RE
N´azev stavu
N´azev v PE diagramu
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
ID v programu
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 stav toReadyFromPSaving: • (ˇcas simulace - ˇcasov´a zn´amka) ≥ timeToReadyFromPSaving ⇒ nastav aktu´aln´ı stav na Ready Pro stav toSleep: • (ˇcas simulace - ˇcasov´a zn´amka) ≥ timeToSleep ⇒ – nastav aktu´aln´ı stav na mustSleep – nastav ˇcasovou zn´amku na aktu´aln´ı ˇcas simulace 25
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 na Ready 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 u ´sil´ı. 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 nastaven´ı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 u ´daj˚ 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 26
ˇ SEN ˇ ´I 3 RE
postup v´ yvoje pluginu, jak byl pops´an v u ´vodu 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ˇzn ˇuje vytv´aˇret komplexnˇejˇs´ı uˇzivatelsk´e rozhran´ı neˇz jen jedno tlaˇc´ıtko, umoˇzn ˇuje pouˇz´ıt vˇetˇsinu GUI (graphical user interface) prvk˚ u, kter´e v prostˇred´ı PS najdeme. 27
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ˇzivatelskou 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 LogicalRoot 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 podporuje. 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 implementaci vlastnosti LogicBehavior, 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´ıdou TxPlcLogicBehavior. 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´ı ITxPlcLogicResource 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 28
ˇ SEN ˇ ´I 3 RE
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´ıdy TxPlcLogicBehavior ). Vytvoˇren´ı instance tˇr´ıdy TxPlcLogicBehavior nelze prov´est prost´ ym vol´an´ı kontruktoru tˇr´ıdy. Instanci lze vytvoˇrit jen pomoc´ı tov´arn´ı metody CreateLogicBehavior( TxPlcLogicBehaviorCreationData data ) zavolan´e na instanci objektu implementuj´ıc´ıho rozhran´ı ITxPlcLogicBehaviorCre29
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 instanci TxPlcLogicBehavior, pozdˇejˇs´ı zmˇeny parametr˚ u jiˇz existuj´ıc´ı instance tˇr´ıdy TxPlcLogicBehavior vedou k nestabilitˇ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 zaveden´ 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 ˇra´dku jsou ignorov´any. Poˇrad´ı ˇr´adk˚ u m˚ uˇze b´ yt libovoln´e a v pˇr´ıpadˇe, ˇze se na ˇra´dku 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 vytvoˇ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´ı Creation30
ˇ SEN ˇ ´I 3 RE
Data, ve stejn´em smyslu, jako pˇri vytv´aˇren´ı instance logick´eho bloku. Stejn´ ym zp˚ usobem se pak vyhled´av´a konstanta blockID, a pokud nebyla nalezena, vytvoˇr´ı se s nulovou hodnotou. Nastaven´ı konstanty blockID je tenk´e m´ısto pluginu v souˇcasn´em stavu. Jak jsem vysvˇetlil dˇr´ıve, mus´ı to b´ yt unik´atn´ı hodnota alespoˇ n v r´amci jednoho kaˇzd´eho bˇehu simulace. Pˇripomenu tak´e, ˇze PS je objektovˇe orientovan´e modelovac´ı prostˇred´ı. Aby bylo moˇzn´e manu´alnˇe vytvoˇrit logick´ y blok a pˇriˇradit ho zaˇr´ızen´ı, kter´e to umoˇzn ˇuje, mus´ı b´ yt toto zaˇr´ızen´ı pˇrepnuto do tzv. modelovac´ıho m´odu. V tomto m´odu jsou umoˇznˇeny zmˇeny 3D modelu objektu a zmˇeny logick´eho bloku, to jsou oboj´ı data uloˇzen´a v souboru .cojt na sd´ılen´em u ´loˇziˇsti digit´aln´ı tov´arny (Tecnomatixu), a m˚ uˇzeme vyuˇz´ıt pˇredstavu, ˇze otevˇren´ım objektu pro modelov´an´ı se upravuje lok´aln´ı doˇcasn´a kopie tˇechto dat. Uzavˇren´ım modelov´an´ı objektu tato data pak pˇrep´ıˇs´ı ta p˚ uvodn´ı zdrojov´a. Protoˇze by bylo datovˇe n´aroˇcn´e ukl´adat do samostatn´eho .cojt souboru kaˇzdou instanci modelovac´ıho objektu v PS, naˇc´ıtaj´ı se pro vˇsechny instance 3D data a pˇriˇrazen´ y logick´ y blok z jednoho rodiˇcovsk´eho souboru. Kdyˇz se ted’ vr´at´ım zpˇet a zopakuji, ˇze potˇrebuji pro kaˇzdou instanci robota jednoho typu unik´atn´ı konstantu, kter´a je uloˇzena v .cojt zdrojov´em souboru, je jasn´e, ˇze pˇri manu´aln´ım vytvoˇren´ı a uloˇzen´ı logick´eho bloku (ukonˇcen´ım modelovac´ıho m´odu objektu) se pˇrep´ıˇs´ı vˇsem ostatn´ım v´ yskyt˚ um instanc´ı tohoto objektu hodnoty konstant blockID na tu posledn´ı nastavenou hodnotu. U ˇcasov´ ych konstant je to vhodn´e chov´an´ı, ale pro ID je to probl´em. Pˇrijal jsem tedy fakt, ˇze po uloˇzen´ı jsou hodnoty blockID pro vˇsechna zaˇr´ızen´ı s PE funkˇcnost´ı stejn´e. Musel jsem tedy vytvoˇrit funkci, kter´a projde dotˇcen´a zaˇr´ızen´ı a zajist´ı unik´atn´ı blockID. Zjistil jsem, ˇze pomoc´ı API lze mˇenit nastaven´ı logick´ ych blok˚ u, aniˇz by bylo zaˇr´ızen´ı otevˇreno pro modelov´an´ı, a po dokonˇcen´ı nastaven´ı si kaˇzd´e zaˇr´ızen´ı drˇz´ı ID, kter´e mu bylo nastaveno. Je to t´ım, ˇze sjednocen´ı hodnot je vyvol´ano aˇz pˇr´ıkazem k ukonˇcen´ı modelov´an´ı, a protoˇze objekt v˚ ubec nebyl pro modelov´an´ı otevˇren, ke sjednocov´an´ı nedojde. Prostˇred´ı PS si pro obdob´ı, kdy m´a naˇctenou studii, vytvoˇr´ı v pamˇeti doˇcasn´e kopie objekt˚ u a data v nich uchov´av´a v kaˇzd´em tomto objektu zvl´aˇst’, proto je toto chov´an´ı moˇzn´e. 31
3.5 Process Simulate Command
Napsal jsem tedy skript, kter´ y projde vˇsechny instance tˇr´ıdy TxPlcLogicBehavior ve studii a pokud v nich nalezne konstantu s n´azvem blockID, pˇrenastav´ı jej´ı hodnotu tak, ˇze ˇc´ısluje tato zaˇr´ızen´ı od nuly vzestupnˇe. Dokud uˇzivatel neotevˇre pro modelov´an´ı a opˇet nezavˇre nˇekter´ y dotˇcen´ y objekt, z˚ ust´avaj´ı ID unik´atn´ı. Tento skript probˇehne pˇred kaˇzd´ ym spuˇstˇen´ım simulace, ale pro pˇr´ıpad ˇspatn´eho pouˇzit´ı pluginu jsem umoˇznil uˇzivateli toto pˇreˇc´ıslov´an´ı vyvolat i nez´avisle na simulaci. T´ım jsou hotovy konstanty logick´eho bloku. Dalˇs´ı se vyhled´a parametr s n´azvem requestedStateID, nen´ı-li nalezen, je vytvoˇren obdobn´ ym postupem, jako konstanta nebo logick´ y blok. To, ˇze poˇzadovan´y PE stav v diagramu na obr´azku 7 je vstup, kter´ y nevede pˇr´ımo do uˇzivatelsk´e funkce PEStateMach, m´a sv˚ uj d˚ uvod. Obecnˇe m˚ uˇze uˇzivatel doj´ıt k v´ ysledn´emu poˇzadovan´emu PE stavu i za pomoci sestaven´ı nˇejak´e vnitˇrn´ı logiky v logick´em bloku. Kdyby vstup pˇr´ımo vedl do PEStateMach, vedlo by to k jeho vˇetˇs´ımu omezen´ı. Dalˇs´ı je na ˇradˇe parametr currentState, pokud nebyl nalezen, vytvoˇr´ı se a do nˇej se vloˇz´ı uˇzivatelsk´a funkce. Postup pro to je komplikovanˇejˇs´ı, jeho sch´ematick´e zobrazen´ı je na obr´azku 9. Pro pouˇzit´ı uˇzivatelsk´e funkce pomoc´ı API je tˇreba pˇripravit pomˇernˇe komplikovan´ y datov´ y objekt, kter´ y slouˇz´ı jako nosiˇc parametr˚ u pro tov´arn´ı funkci vytv´aˇrej´ıc´ı instanci uˇzivatelsk´e funkce. V popisu budu postupovat zvnˇejˇsku struktury dovnitˇr. Pˇredpokl´adejme, ˇze m´am instanci parametru logick´eho bloku. Tato instance m´a vlastnost n´azvu Expression, typu TxPlcExpression. Do t´eto vlastnosti se ukl´ad´a objekt, kter´ y lze z´ıskat jedinˇe z vlastnosti Expression objektu typu TxPlcExpressionBuilder. Tento objekt lze vytvoˇrit pˇr´ımo konstruktorem a jeho vlastnost Expression je naplnˇena pomoc´ı vol´an´ı jeho metody Add. T´ım se sestav´ı cel´ y matematickologick´ y v´ yraz. Potˇrebujeme do expressionBuilderu dosadit naˇsi uˇzivatelskou funkci. To se provede pˇret´ıˇzenou verz´ı metody Add( ”PEStateMach”, seznamParametru ). Prvn´ı parametr metody Add je atribut, kter´ y jsme pˇriˇradili naˇs´ı uˇzivatelsk´e funkci v kapitole 3.4.1, PS engine podle nˇej vyhled´a pˇr´ısluˇsnou tˇr´ıdu a pouˇzije ji k v´ ypoˇctu. Druh´ ym parametrem metody Add je seznamParametru typu ArrayList. ArrayList je podobnˇe jako Dictionary generick´a tˇr´ıda a nez´aleˇz´ı j´ı na typu objektu v n´ı uloˇzen´em, ale pˇresto v tomto pˇr´ıpadˇe v nˇem mus´ı b´ yt uloˇzen´ y typ TxPlcFunctionPara32
ˇ SEN ˇ ´I 3 RE
Obr´azek 9: Postup vytvoˇren´ı uˇzivatelsk´e funkce pomoc´ı API
meterData, jehoˇz instance je moˇzno vytvoˇrit pˇr´ım´ ym vol´an´ım jeho konstruktoru. Instance t´eto tˇr´ıdy disponuj´ı deseti metodami, kter´e j´ı nastavuj´ı funkci. M˚ uˇze to b´ yt funkce vstupu, konstanty, parametru, ˇci v´ ystupu logick´eho bloku a dalˇs´ı. Vˇsechny potˇrebn´e konstanty a parametry jsou zaˇrazeny do ArrayListu oznaˇcen´emu jako seznamParametru, a pak je Expression vyvol´an v jedin´em vol´an´ı vlastnosti expressionBuilderu. Je na m´ıstˇe upozornit na zvl´aˇstnosti chov´an´ı vlastnosti Expression, a totiˇz ˇze v okamˇziku vyvol´an´ı jej´ı hodnoty je jej´ı obsah smaz´an, takˇze tuto hodnotu lze vyvolat pouze jednou, o jej´ı zachycen´ı se mus´ı program´ator postarat. Druh´e u ´skal´ı spoˇc´ıv´a v pouˇzit´ı instanc´ı tˇr´ıdy TxPlcFunctionParameterData - pro kaˇzd´ y ”symbol”mus´ı b´ yt vytvoˇrena nov´a instance t´eto tˇr´ıdy, jinak by v ArrayListu byl uloˇzen´ y jen seznam ukazatel˚ u na stejnou instanci a vˇsechny vstupn´ı parametry uˇzivatelsk´e funkce by byly stejn´e jako posledn´ı pˇridan´ y parametr. 33
3.5 Process Simulate Command
Na konci prov´adˇen´ı cel´e sekvence se do stavov´eho ˇra´dku prostˇred´ı PS vyp´ıˇse zpr´ava o dokonˇcen´ı u ´lohy. D´ıky tomu, jak je tato sekvence naps´ana, se pˇri jej´ım opakovan´em spouˇstˇen´ı neduplikuj´ı ˇza´dn´e vnitˇrn´ı parametry logick´eho bloku, a pouze se pˇrenastavuj´ı hodnoty konstant a pˇr´ıpadnˇe se oprav´ı naruˇsen´e pospojov´an´ı uvnitˇr bloku.
3.5.2
Z´ aznam PE stav˚ u robot˚ u
P˚ uvodnˇe jsem zam´ yˇslel zaznamen´avat PE stavy pˇr´ımo v m´ıstˇe, kde se o nich rozhoduje v pr˚ ubˇehu simulace, to je v tˇr´ıdˇe uˇzivatelsk´e funkce, abych pˇr´ıliˇs nezvyˇsoval v´ ypoˇcetn´ı n´aroky na kaˇzd´ y krok simulace. Takov´e ˇreˇsen´ı nar´aˇz´ı na z´asadn´ı probl´em, a totiˇz nen´ı moˇzn´e na okamˇzit´ y pˇr´ıkaz uˇzivatele tento z´aznam uloˇzit do souboru. Bylo by sice moˇzn´e zav´est do uˇzivatelsk´e funkce dalˇs´ı vstupn´ı parametr, kter´ y by spouˇstˇel akci uloˇzen´ı do souboru, ale tato akce by mohla probˇehnout jedinˇe v pr˚ ubˇehu bˇeˇz´ıc´ı simulace, jindy funkce nen´ı vyhodnocov´ana. Ukl´ad´an´ı pˇri bˇeˇz´ıc´ı simulaci se rozch´az´ı s filozofi´ı prostˇred´ı PS, takˇze tento postup jsem zavrhl. Pˇri zkoum´an´ı chov´an´ı ud´alost´ı jsem na tomto m´ıstˇe tak´e zjistil, ˇze v API nefunguj´ı ud´alosti vyvolan´e koncem ˇci zaˇca´tkem simulace. Pˇristoupil jsem tedy k jin´emu ˇreˇsen´ı. Idea je takov´a, ˇze datab´aze vˇsech z´aznam˚ u PE stav˚ u bude uloˇzena v objektu commandu, a uˇzivatel tak bude moci se z´aznamy manipulovat obvykl´ ym zp˚ usobem, nejen pˇri bˇeˇz´ıc´ı simulaci. Bude se ovˇsem muset kaˇzd´ y krok simulace jednak simulovat PE stavov´ y automat a jednak zachyt´avat na v´ ystupu logick´eho bloku informaci o aktu´aln´ım PE stavu v dan´em kroku simulace. To ale nen´ı pˇr´ıliˇs v´ yznamn´e zv´ yˇsen´ı v´ ypoˇcetn´ı z´atˇeˇze, pˇri testov´an´ı na tˇrech robotech simulovan´ ych souˇcasnˇe nebyl rozpoznateln´ y rozd´ıl v zat´ıˇzen´ı pouˇzit´eho hardwaru. Protoˇze v bˇeˇz´ıc´ım PS m˚ uˇze existovat pouze jedna instance commandu, bude uchov´avan´a datab´aze tak´e jedin´a a z´aznamy vˇsech robot˚ u v t´eto dat´ab´azi mus´ı b´ yt indexov´any pro jednotliv´e roboty. Protoˇze command pˇristupuje k cel´ ym objekt˚ um a nemus´ı se podˇrizovat ˇz´adn´ ym omezen´ım datov´ ych typ˚ u na rozhran´ı, m˚ uˇze pouˇz´ıt jako popisovaˇc robot˚ u jejich atribut z eMServeru - jejich external ID. D´ıky tomu je indexov´an´ı logiˇctˇejˇs´ı a tak´e pˇrehlednˇejˇs´ı. Datab´azi stav˚ u v commandu realizuje opˇet instance generick´e tˇr´ıdy Dictionary s deklarac´ı typov´e dvojice hkl´ıˇc, prveki jako 34
ˇ SEN ˇ ´I 3 RE
hstring, ArrayListi. Pˇritom v pol´ıˇcku kl´ıˇc je zmiˇ novan´e extern´ı ID a v ArrayListu je uloˇzen seznam z´aznam˚ u ve formˇe instanc´ı m´e tˇr´ıdy PEStatesRecord. V kaˇzd´e instanci z´aznamu je uloˇzena ˇcasov´a zn´amka a k n´ı pˇr´ısluˇsn´ y PE stav, respektive jeho ID. Seznam jmen PE stav˚ u a jejich ID je vidˇet v tabulce 3. Metoda, v n´ıˇz se z´aznam v kroc´ıch simulace prov´ad´ı, je zaregistrov´ana jako posluchaˇc ud´alosti SimulationPlayer.TimeIntervalReached, pˇriˇcemˇz vlastnost SimulationPlayer typu TxSimulationPlayer je dostupn´a ze statick´e tˇr´ıdy TxApplication - z vlastnosti ActiveDocument. Registrov´an´ım a odregistrov´an´ım metody jako posluchaˇce t´eto ud´alosti je ovl´ad´ano zah´ajen´ı a ukonˇcen´ı nahr´av´an´ı PE stav˚ u. Naplnˇenou datab´azi je pak moˇzn´e uloˇzit do souboru, aby simulovan´a data mohla b´ yt pˇred´ana d´ale k extern´ı anal´ yze. Dohodli jsme se na form´atu .csv, pˇriˇcemˇz pro kaˇzd´ y robot je vytvoˇren samostatn´ y .csv soubor. Jednotliv´e soubory jsou pojmenov´any extern´ım ID pˇr´ısluˇsn´ ych robot˚ u, ˇc´ımˇz je zachov´ana filozofie soubor˚ u prostˇred´ı PS. Prvn´ı ˇra´dek souboru obsahuje ˇca´rkou oddˇelen´e popisy sloupc˚ u. D´ale pak jsou v prvn´ım sloupci ˇcasov´e zn´amky a v druh´em sloupci ID PE stavu podle tabulky 3. Pro neceloˇc´ıseln´e hodnoty je pouˇzita desetinn´a teˇcka. Uˇzivatel si m˚ uˇze pˇri vyvol´an´ı pˇr´ıkazu uloˇzen´ı vybrat um´ıstˇen´ı souboru, pˇr´ıpadnˇe je uloˇzen z´aznam automaticky do osobn´ı sloˇzky uˇzivatele moment´alnˇe pˇrihl´aˇsen´eho do syst´emu Windows. V osobn´ı sloˇzce je vytvoˇren adres´aˇr s n´azvem TecnomatixPEpluginData a v nˇem je vytvoˇrena sloˇzka s aktu´aln´ım datem, pokud uˇz tam pˇredt´ım tato adres´aˇrov´a struktura nebyla, uloˇz´ı se do t´eto sloˇzky vˇsechny .csv soubory s n´azvy extern´ıch ID sledovan´ ych robot˚ u. Pokud uˇz tam adres´aˇrov´ y strom se sloˇzkou s aktu´aln´ım datem existoval, .csv soubory se stejn´ ym jm´enem se pˇrep´ıˇs´ı.
3.5.3
Z´ aznam polohy kloub˚ u robot˚ u
Z´aznam poloh kloub˚ u robot˚ u jsem ˇreˇsil stejn´ ym pˇr´ıstupem jako z´aznam PE stav˚ u. Princip se liˇs´ı v nˇekolika detailech. Zaznamen´avan´a data nejsou typu sign´alu vystupuj´ıc´ıho z logick´eho bloku, ale typu TxPoseData. Instance t´eto tˇr´ıdy m´a jen jednu vlastnost - JointValues - a v t´eto vlastnosti ukl´ad´a ArrayList se seznamem aktu´aln´ıch hodnot poloh kloub˚ u robota. Tyto hodnoty maj´ı typ double a pro u ´hlov´e hodnoty maj´ı rozmˇer v radi´anech. 35
3.5 Process Simulate Command
Vytv´aˇren´ı z´aznamu jsem ˇreˇsil opˇet v metodˇe, kter´a je registrov´ana jako posluchaˇc ud´alosti SimulationPlayer.TimeIntervalReached. Aktivuje se tak´e registrov´an´ım a deaktivuje odregistrov´an´ım metody jakoˇzto posluchaˇce, stejnˇe jako pˇri z´aznamu PE stav˚ u. V kaˇzd´em kroku simulace se ukl´ad´a do datab´aze tvoˇren´e pomoc´ı Dictionaryhstring, ArrayListi do seznamu u kl´ıˇce extern´ıho ID robota instance datov´eho z´aznamu m´e tˇr´ıdy JointsRecord, kter´a v sobˇe uchov´av´a dvˇe vlastnosti - ˇcasovou zn´amku a ArraList, do nˇehoˇz se ukl´ad´a v´ yˇse zm´ınˇen´ y seznam JointValues s hodnotami natoˇcen´ı kloub˚ u robotu. Uloˇzen´ı dat z datab´aze je opˇet velmi podobn´e principu z pˇredchoz´ı kapitoly 3.5.2. Rozd´ıl je v tom, ˇze robot m˚ uˇze m´ıt obecnˇe r˚ uzn´ y poˇcet kloub˚ u, a tak .csv soubor, do nˇehoˇz data ukl´ad´am, m˚ uˇze m´ıt r˚ uzn´ y poˇcet sloupc˚ u. Soubor na prvn´ım ˇr´adku obsahuje ˇca´rkami oddˇelen´e popisky sloupc˚ u a v dalˇs´ıch ˇra´dc´ıch data. V prvn´ım sloupci je vˇzdy ˇcasov´a zn´amka a v dalˇs´ıch sloupc´ıch jsou pak hodnoty jednotliv´ ych kloub˚ u seˇrazen´e tak, jak jsou seˇrazen´e v seznamu JointValues v prostˇred´ı PS. Desetinn´ y oddˇelovaˇc je desetinn´a teˇcka. Pro upevnˇen´ı pˇredstavy o architektuˇre programu doporuˇcuji nahl´ednout do pˇriloˇzen´e dokumentace programu pluginu, kde je funkce kaˇzd´e metody pops´ana. Zde uveden´e vysvˇetlen´ı doprov´az´ı UML diagram na obr´azku 8.
3.5.4
Grafick´ e uˇ zivatelsk´ e rozhran´ı
Kdyˇz je funkˇcnost programu implementov´ana a byla navrˇzena i pˇredstava o postupu uˇzivatele pˇri pouˇzit´ı programu, je dalˇs´ım krokem vytvoˇren´ı uˇzivatelsk´eho rozhran´ı. Pro pouˇzit´ı standardn´ıch grafick´ ych ovl´adac´ıch prvk˚ u v prostˇred´ı PS je v Tecnomatix.NET API dostupn´a knihovna Tecnomatix.Engineering.Ui.dll. Tento soubor lze naj´ıt v instalaˇcn´ım adres´aˇri ../Tecnomatix/eMPower a po nastaven´ı reference na nˇej v programovac´ım prostˇred´ı MS Visual Studio je pak zpˇr´ıstupnˇen GUI Designer, s jehoˇz pomoc´ı lze efektivnˇe vytv´aˇret GUI commandu. Upozorn´ım zde ale, ˇze GUI Designer pro knihovnu komponent Tecnomatix.UI je dostupn´ y jen pro 32bitovou verzi knihovny, tedy jen pro 32bitovou verzi Tecnomatixu. V r´amci testov´an´ı jsem vyzkouˇsel, jak m˚ uj plugin funguje na 64bitov´e verzi Tecnomatix, kdyˇz byl zkompilov´an s 32bitov´ ymi knihovnami. Plugin fungoval norm´alnˇe, 36
ˇ SEN ˇ ´I 3 RE
jen nˇekter´e grafick´e prvky nebyly zcela spr´avnˇe napozicov´any, ovˇsem rozd´ıl byl minim´aln´ı. Co se t´ yˇce vnitˇrn´ı funkˇcnosti pluginu, funguje bez probl´em˚ u, ale takov´eto pouˇzit´ı kˇr´ıˇzem 32bit na 64bit je samozˇrejmˇe funkˇcn´ı bez jak´ ychkoli z´aruk. Tuto komplikaci jsem obeˇsel tak, ˇze kdyˇz jsem dokonˇcil veˇsker´e grafick´e u ´pravy rozhran´ı, pˇripojil jsem ke k´odu 64bitovou knihovnu Tecnomatixu a pˇreloˇzil jsem plugin naslepo bez zobrazen´ı GUI. T´ım by mˇela b´ yt vnitˇrn´ı funkˇcnost opˇet zaruˇcena, dan´ı za to je nutnost kompilovat dvˇe verze v´ ysledn´eho pluginu. Uˇzivatelsk´e rozhran´ı pluginu do znaˇcn´e m´ıry respektuje navrˇzenou architekturu z obr´azku 2. Na stranˇe commandu m´a plugin dvˇe z´akladn´ı funkce - nastaven´ı vlastnost´ı zaˇr´ızen´ı pro simulaci PE standardu a z´aznam simulace. Z´aznam simulace m´a pak dva pododd´ıly - z´aznam kloub˚ u robot˚ u a z´aznam PE stav˚ u. Na obr´azku 10 je vidˇet formul´aˇr pluginu. Z´aloˇzka Setting
Obr´azek 10: GUI - z´aloˇzka nastaven´ı ˇci vytvoˇren´ı logick´eho bloku pro PE
& Creating obsahuje n´astroje po pˇriˇrazen´ı PE standardu vybran´ ym robot˚ um. Sekce PE 37
3.5 Process Simulate Command
logic controls obsahuje pole pro hromadn´e vyb´ır´an´ı objekt˚ u popsan´e titulkem Objects, v textu budu tento typ grafick´e komponenty oznaˇcovat jako Picking List. Toto pole funguje tak, ˇze uˇzivatel do nˇej nejprve klikne kurzorem, t´ım se zamkne zamˇeˇren´ı na toto pole, a pak zaˇcne klikat kdekoli v prostˇred´ı PS na roboty, kter´ ym bude cht´ıt pˇriˇradit PE funkˇcnost. Vˇsechny zakliknutn´e objekty se pˇrid´avaj´ı do tohoto pole. Pˇri vyb´ır´an´ı se aplikuje na oznaˇcen´e objekty filtr, kter´ y umoˇzn ˇuje pˇrid´avat pouze roboty. Kdyˇz jsou vybr´ani vˇsichni roboti, uˇzivatel pomoc´ı tlaˇc´ıtka Browse... v doln´ı ˇca´sti okna vybere .csv soubor s PE ˇcasov´an´ım. Stiskem tlaˇc´ıtka Assign PE module pak spust´ı pˇr´ıkaz k vygenerov´an´ı ˇci pˇrenastaven´ı logick´eho bloku, pˇriˇcemˇz ˇcasov´e konstanty jsou nastaveny podle vybran´eho souboru s PE ˇcasov´an´ım. Pokud soubor s ˇcasov´an´ım nebyl vybr´an nebo na dan´e cestˇe neexistuje, objev´ı se chybov´a hl´aˇska (obr´azek 11) oznamuj´ıc´ı, ˇze ˇcasov´e konstanty byly nastaveny na nulov´e hodnoty, PE funkˇcnost je ale pˇresto vytvoˇrena. Jeˇstˇe zde je zaˇskrt´avac´ı
Obr´azek 11: GUI - chybov´a hl´aˇska - cesta k souboru neexistuje
pol´ıˇcko Apply on selected only - pokud je zaˇskrtnut´e, aplikuje se pˇriˇrazen´ı PE funkˇcnosti jen na roboty oznaˇcen´e v Picking Listu, roboti, co se nach´az´ı v Picking Listu, ale nejsou tam oznaˇceni, jsou ignorov´ani. Posledn´ı je tlaˇc´ıtko Overwrite IDs, stiskem tohoto tlaˇc´ıtka se provede pˇreps´an´ı konstant blockID ve vˇsech logick´ ych bloc´ıch tak, aby byla zajiˇstˇena jejich unik´atnost - tuto funkci jsem popisoval v kapitole 3.4.2. Nen´ı nutn´e m´ıt oznaˇcen´e ˇza´dn´e roboty, aby tato funkce v poˇra´dku probˇehla. Druh´a z´aloˇzka obsahuje n´astroje pro ovl´ad´an´ı z´aznamu simulace. Jsou zde vidˇet dvˇe sekce - Robot Joints logging controls, v n´ıˇz jsou n´astroje k ovl´ad´an´ı z´aznamu poloh kloub˚ u robot˚ u, a PE States logging controls pro z´aznam PE simulace. Obˇe sekce funguj´ı velice po38
ˇ SEN ˇ ´I 3 RE
Obr´azek 12: GUI - z´aloˇzka k ovl´ad´an´ı z´aznamu dat ze simulace
dobnˇe. Obsahuj´ı Picking List pole pro v´ ybˇer robot˚ u, kter´e se maj´ı sledovat v z´aznamu, trojici tlaˇc´ıtek a nˇekolik zaˇskrt´avac´ıch pol´ıˇcek. Tlaˇc´ıtka Start Capturing... zapne naslouch´an´ı dat˚ um, ale nespust´ı samo simulaci, tu mus´ı uˇzivatel bˇeˇzn´ ym zp˚ usobem spustit s´am. Kdyˇz je toto tlaˇc´ıtko stisknuto, znepˇr´ıstupn´ı se a naopak vedlejˇs´ı tlaˇc´ıtko Stop se povol´ı. Podle pˇr´ıstupnosti tlaˇc´ıtka uˇzivatel pozn´a, zda je z´aznam aktivovan´ y, ˇci nikoli. Stiskem Stop se z´aznam deaktivuje, ale simulace se nezastav´ı, pokud v dobˇe stisku bˇeˇzela. Doporuˇcuji simulaci nejprve zastavit a aˇz potom stisknout tlaˇc´ıtko Stop - v tomto duchu se nese filozofie ovl´ad´an´ı PS, je vhodn´e ji dodrˇzovat. Nicm´enˇe nen´ı nezbytnˇe nutn´e se t´ımto doporuˇcen´ım ˇr´ıdit, z´aznam je v poˇr´adku i kdyˇz se deaktivuje pˇri bˇeˇz´ıc´ı simulaci. 39
3.6 Postup pˇri aplikaci pluginu
Dalˇs´ı tlaˇc´ıtko Save... se chov´a podle zaˇskrtnut´ı pol´ıˇcka Save in Documents - pokud je pol´ıˇcko zaˇskrtnuto, pak stisk tlaˇc´ıtka uloˇz´ı z´aznamy do automatick´e adres´aˇrov´e struktury v osobn´ı sloˇzce pˇrihl´aˇsen´eho uˇzivatele Windows. Pokud pol´ıˇcko zaˇskrtnut´e nen´ı, stisk tlaˇc´ıtka vyvol´a dialogov´e okno pro v´ ybˇer sloˇzky, v n´ıˇz se uloˇz´ı sada soubor˚ u se z´aznamy. Zaˇskrt´avac´ı tlaˇc´ıtka Focus only on selected jsou br´any v potaz jen v okamˇziku aktivov´an´ı z´aznamu dat. Rozhoduj´ı o tom, zda se z´aznam aktivuje jen pro vybranou podmnoˇzinu robot˚ u v pˇr´ısluˇsn´em Picking Listu, nebo jestli se aktivuje pro vˇsechny roboty v pˇr´ısluˇsn´em Picking Listu. V sekci pro z´aznam natoˇcen´ı kloub˚ u robot˚ u je jeˇstˇe zaˇskrt´avac´ı pol´ıˇcko Save in degrees, kter´e v okamˇziku ukl´ad´an´ı dat o kloubech rozhoduje, zda se zaznamenan´e hodnoty pˇrevedou z implicitn´ıch radi´an˚ u na u ´hlov´e stupnˇe, informace o pouˇzit´e jednotce je uloˇzena v hlaviˇckov´em ˇr´adku .csv souboru a nav´ıc je zaznamen´ana na konci n´azvu souboru. Obˇe z´aloˇzky maj´ı jeˇstˇe spoleˇcn´e tlaˇc´ıtko v z´apat´ı okna - Lose Focus in Picking List. Toto tlaˇc´ıtko jsem pˇridal, abych tak vyˇreˇsil komplikaci s pouˇzit´ım Picking List˚ u, t´ım, ˇze umoˇzn ˇuj´ı vybrat v´ıce objekt˚ u ve studii najednou a v libovoln´ ych zobrazovac´ıch oknech - tzv. Viewerech, nerozpoznaj´ı, kdy uˇzivatel uˇz v´ ybˇer objekt˚ u dokonˇcil a chce nˇejak´ y jin´ y objekt jen upravit. M´ısto oznaˇcen´ı tak uˇzivatel objekt znovu pˇrid´av´a a zbavit se zamˇeˇren´ı Picking Listu je obt´ıˇzn´e. V´ yhody pouˇzit´ı tˇechto GUI prvk˚ u jsou vˇsak velk´e, takˇze jsem radˇeji vytvoˇril tlaˇc´ıtko, kter´e na stisk odebere zamˇeˇren´ı vˇsem tˇrem Picking List˚ um pouˇzit´ ym v m´em pluginu. Usnadˇ nuje se t´ım ovl´ad´an´ı pluginu.
3.6
Postup pˇ ri aplikaci pluginu
Plugin se skl´ad´a z nˇekolika soubor˚ u a aby mohl b´ yt v prostˇred´ı Process Simulate pouˇzit, je tˇreba jej nainstalovat a nˇekter´e souˇc´asti zaregistrovat v Tecnomatixu. Kdyˇz je pak uˇzivatel obezn´amen s GUI a funkcemi jednotliv´ ych prvk˚ u pluginu, m˚ uˇze dle sv´eho uv´aˇzen´ı plugin aplikovat se vˇs´ı volnost´ı, kter´a je mu v prostˇred´ı PS dopˇr´ana. Aby mohl ale ihned aplikovat plugin ve smyslu, pro jak´ y byl navrˇzen, sestavil jsem nˇekolik v´ yvojov´ ych diagram˚ u, podle nichˇz uˇzivatel rychle zavede plugin do sv´e studie. 40
ˇ SEN ˇ ´I 3 RE
3.6.1
Instalace
Nejprve je tˇreba zkop´ırovat soubor userFcn stateMach.dll do adres´aˇre v instalaˇcn´ı sloˇzce Tecnomatixu, typicky na adrese ../Program Files/Tecnomatix/eMPower/UserLBFunc, kde jsou uloˇzeny knihovny se vˇsemi uˇzivatelsk´ ymi funkcemi v PS. Od pˇr´ıˇst´ıho spuˇstˇen´ı PS je uˇzivatelsk´a funkce pˇr´ıstupn´a. D´ale je nutn´e zkop´ırovat soubor PEpl3g.dll do adres´aˇre v instalaˇcn´ı sloˇzce Tecnomatix na adrese ../Tecnomatix/eMPower/DotNetCommands, v t´eto sloˇzce jsou uloˇzeny vˇsechny commandy, kter´e jsou do PS pˇrid´any, ˇcasto uˇz od implicitn´ı instalace Tecnomatixu.
Obr´azek 13: Registrov´an´ı commandu pluginu
Pak je zapotˇreb´ı zaregistrovat command pro pouˇzit´ı v PS. To se provede pomoc´ı miniaplikace Register Command na adrese ../Tecnomatix/eMPower/CommandReg.exe. Na obr´azku 13 je vidˇet rozhran´ı t´eto miniaplikace. V ˇra´dku Assembly uˇzivatel vybere um´ıstˇen´ı souboru PEpl3g.dll, v poli oznaˇcen´em jako Product(s): vybere prostˇred´ı, v nichˇz chce plugin pouˇz´ıvat - plugin je vytvoˇren pro Process Simulate, zaˇskrtne tedy jen toto pol´ıˇcko. V posledn´ım ˇr´adku File: bud’to vybere .xml soubor jiˇz existuj´ıc´ı, nebo vytvoˇr´ı nov´ y. Tento .xml soubor je uloˇzen ve sloˇzce ../Tecnomatix/eMPower/DotNetExternalApplications a je moˇzn´e jej distribuovat spolu se soubory pluginu nam´ısto manu´aln´ıho registrov´an´ı pomoc´ı 41
3.6 Postup pˇri aplikaci pluginu
Obr´azek 14: Zaˇrazen´ı tlaˇc´ıtka pluginu v PS
miniaplikace Register Command. Pokud chce uˇzivatel t´eto moˇznosti vyuˇz´ıt, mus´ı zajistit, aby .xml soubor byl uloˇzen v pˇr´ısluˇsn´em adres´aˇri. Jakmile jednou zaregistrov´an´ı probˇehlo, je plugin nainstalov´an a uˇzivatel jej m˚ uˇze v prostˇred´ı PS pˇridat jako tlaˇc´ıtko na libovolnou n´astrojovou liˇstu. Tlaˇc´ıtko nalezne v PS Tools → Customize, zobraz´ı se okno na obr´azku 14. V z´aloˇzce Commands v Categories vybere API a zde uˇz je vidˇet jeho command v poli Commands. Pˇretaˇzen´ım na n´astrojovou liˇstu si uˇzivatel um´ıst´ı tlaˇc´ıtko pluginu, kam potˇrebuje. Nastaven´ı n´astroj˚ u si uˇzivatel m˚ uˇze tlaˇc´ıtkem Save Customization uloˇzit pro pˇr´ıˇst´ı relace. Stisknut´ım tlaˇc´ıtka se otevˇre GUI pluginu.
3.6.2
Pouˇ zit´ı
Pro pouˇzit´ı pluginu jsem pro nov´e uˇzivatele vytvoˇril v´ yvojov´e diagramy, podle nichˇz se m˚ uˇzou ˇr´ıdit. Jejich sledov´an´ım uˇzivatel zvl´adne prov´est vˇsechny z´akladn´ı operace, kter´e plugin poskytuje. Protoˇze kroky pro aktivov´an´ı z´aznamu otoˇcen´ı kloub˚ u robot˚ u a aktivov´an´ı z´aznamu PE stav˚ u jsou t´emˇeˇr stejn´e, vytvoˇril jsem pro nˇe spoleˇcn´ y v´ yvojov´ y diagram. Pro pˇriˇrazen´ı ˇci pˇrenastaven´ı PE funkˇcnosti jsem vytvoˇril diagram na obr´azku 16. Pro aktivaci z´aznamu diagram na obr´azku 17 a pro uloˇzen´ı z´aznam˚ u diagram na 42
ˇ SEN ˇ ´I 3 RE
Obr´azek 15: Workflow pro uloˇzen´ı z´aznam˚ u
obr´azku 15. Diagram popisuj´ıc´ı postup uloˇzen´ı z´aznamu pˇredpokl´ad´a, ˇze uˇzivatel v pr˚ ubˇehu z´aznamu nezavˇre okno pluginu. Tento pˇredpoklad mus´ı b´ yt splnˇen pro spr´avnou funkˇcnost z´aznamu. Pokud uˇzivatel v pr˚ ubˇehu z´aznamu okno zavˇre, ztrat´ı se aktu´aln´ı instance pluginu a s n´ı i vˇsechna doposud vygenerovan´a data ze simulace - tedy ztrat´ı se aktu´aln´ı datab´aze z´aznam˚ u. Znovuotevˇren´ım okna pluginu se vytvoˇr´ı nov´a instance pluginu s pr´azdn´ ymi datab´azemi. Tuto funkˇcnost jsem v pluginu zachoval, protoˇze ji lze i vyuˇz´ıt.
43
3.6 Postup pˇri aplikaci pluginu
Obr´azek 16: Workflow pro pˇriˇrazen´ı ˇci znovunastaven´ı PE funkˇcnosti
Obr´azek 17: Workflow pro aktivaci z´aznamu - stejn´ y postup pro klouby i PE stavy robotu
44
ˇ SEN ˇ ´I 3 RE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
using System; using System.Collections; using Tecnomatix.Engineering; namespace userFcn_stateMach{ [TxPlcLogicBehaviorFunctionAttribute("Nazev_funkce_v_prostredi_PS")] public class JmenoTridyUzivatelskeFunkce : ITxPlcLogicBehaviorFunction { ArrayList m_typesArray = new ArrayList(); ArrayList m_namesArray = new ArrayList(); TxPlcSignalDataType m_returnValueType; public JmenoTridyUzivatelskeFunkce() { m_typesArray.Add(TxPlcSignalDataType.Bool); m_namesArray.Add("VstupniParametr1"); m_returnValueType = TxPlcSignalDataType.Int; } public TxPlcValue Evaluate(ArrayList parameters) { TxPlcValue navratHodnota = new TxPlcValue(); return navratHodnota; } public ArrayList ParametersNames() { return m_namesArray; } public ArrayList ParametersTypes() { return m_typesArray; } public TxPlcSignalDataType ReturnValueType() { return m_returnValueType; } } }
V´ ypis 2: Pˇredloha pr´azdn´e uˇzivatelsk´e funkce 45
4
Virtu´ aln´ı zprovoznˇ en´ı V pr˚ ubˇehu vytv´aˇren´ı ˇca´sti pluginu, kter´a pln´ı funkci stavov´eho automatu, jsem co
nejpˇresnˇeji sledoval definice dan´e PROFIenergy (PE) standardem. Naprogramoval jsem tak stavov´ y automat ovladateln´ y pˇres rozhran´ı, do nˇehoˇz vstupuje pouze ID poˇzadovan´eho stavu a automat do tohoto stavu pˇrejde tak rychle, jak podle definovan´ ych ˇcasov´an´ı pˇrechod˚ u m˚ uˇze. Nicm´enˇe n´aˇs projekt je zamˇeˇren na v´ yrobn´ı linku, kde jsou pouˇzity robotick´e kontrolery KUKA VKRC, a tyto kontrolery nepodporuj´ı standardn´ı formu PE. Maj´ı zpracovan´ y vlastn´ı standard usp´av´an´ı robot˚ u do energeticky u ´sporn´ ych stav˚ u. M˚ uj plugin by mˇel umoˇzn ˇovat efektivnˇe modelovat prim´arnˇe tento VKRC standard. Pro potˇreby virtu´aln´ıho zprovoznˇen´ı jsem musel tedy pozmˇenit chov´an´ı automatu a implementovat konverzn´ı rozhran´ı, kter´e pˇrev´ad´ı zadan´e ˇr´ıd´ıc´ı sign´aly na ID poˇzadovan´eho stavu. V dalˇs´ım kroku jsme ve spolupr´aci s kolegou Vojtˇechem Pavl´ıkem navrhli demonstraˇcn´ı program pro PLC, kter´e v jednoduch´em sledu pˇr´ıkaz˚ u provede robota dvˇema demy v´ yrobn´ıch robotick´ ych program˚ u a pˇrevede robota do energeticky u ´sporn´eho reˇzimu a opˇet jej z nˇej probud´ı. Tento program jsme otestovali na re´aln´em robotu a z´ıskali jsme data o spotˇreb´ach energie v pr˚ ubˇehu demonstrace. Tato data jsem pak pouˇzil pro v´ ypoˇcet simulovan´e energetick´e spotˇreby. Pro pˇr´ıpravu virtu´aln´ıho zprovoznˇen´ı jsem pak st´ahl pouˇzit´e robotick´e programy z kontroleru robota a nahr´al je do prostˇred´ı Process Simulate (PS) a vytvoˇril jsem tak operace, kter´e lokacemi odpov´ıdaj´ı lokac´ım fyzick´eho robota v pr˚ ubˇehu tˇechto program˚ u. V prostˇred´ı PS jsem pak vygeneroval vˇsechny sign´aly, kter´e byly pouˇzity v re´aln´em pˇr´ıpadˇe k ovl´ad´an´ı robotick´eho kontroleru pˇres PLC. Vytvoˇril jsem logick´ y strom operac´ı reprezentuj´ıc´ı jednotliv´e programy a pomoc´ı sv´eho modifikovan´eho pluginu jsem pˇriˇradil robotu v simulaci VKRC PROFIenergy funkˇcnost. Nakonec jsem vˇse propojil pomoc´ı dˇr´ıve vytvoˇren´ ych sign´al˚ u. Sign´aly jsem pˇripojil k OPC serveru, kter´ y byl pˇripojen k ˇr´ıdic´ımu PLC. Naneˇstˇest´ı prostˇred´ı Process Simulate na stanici s pˇripojen´ım k PLC bylo z nezn´am´ ych d˚ uvod˚ u 46
´ ´I ZPROVOZNEN ˇ ´I 4 VIRTUALN
poˇskozen´e - nejsp´ıˇs instalac´ı OPC serveru na tent´ yˇz poˇc´ıtaˇc - takˇze jsem sp´ın´an´ı sign´al˚ u simuloval manu´aln´ım zad´av´an´ım sign´al˚ u ve smyslu vytvoˇren´eho programu. Ze simulace jsem z´ıskal jednak data o energetick´ ych stavech, v nichˇz se robot nach´azel, a jednak videoz´aznam simulovan´eho pohybu robota. Z tˇechto dat jsem sestavil graf simulovan´e spotˇreby robota a demonstraˇcn´ı videosekvenci.
4.1
Konverze VKRC ˇ r´ıdic´ıch sign´ al˚ u na PE-ID
Standard VKRC m´a definovan´e rozhran´ı v z´akladˇe jako dva jednobitov´e vstupn´ı sign´aly. • Drive Bus OFF • Hibernate Tyto dva sign´aly jsou re´alnˇe pˇritomny v KRC kontrolerech. Krom nich jsem jeˇstˇe pro potˇreby simulace musel zav´est tˇret´ı jednobitov´ y sign´al: • Operate Tento sign´al zde mus´ı b´ yt, protoˇze oproti re´aln´emu kontroleru, m´a simulace kontroler rozdˇelen´ y v podstatˇe na dvˇe ˇca´sti - jedna simuluj´ıc´ı PROFIenergy ˇcinnost a druh´a ˇca´st je zcela extern´ı a nezapouzdˇren´a, jedn´a se o simulace robotick´ ych program˚ u, kter´e kv˚ uli architektuˇre prostˇred´ı Process Simulate mus´ı b´ yt reprezentov´any jako operace, a jsou tedy nutnˇe mimo logick´e bloky, ve kter´ ych je simulov´ano PE. Kdyˇz PLC vyd´av´a pˇr´ıkaz ke spuˇstˇen´ı robotick´eho programu, je t´ımto sign´alem Operate pˇred´ana informace PE stavov´emu automatu informace o pˇrechodu do m´odu Operating. Pro takto popsan´e rozhran´ı jsem implementoval uˇzivatelskou funkci pro PS, jej´ımiˇz vstupy jsou tˇri v´ yˇse uveden´e sign´aly typu boolean, a jej´ım v´ ystupem je ID v´ ysledn´eho stavu. Funkce m´a vstupy mapov´any podle tabulky 4. Tuto funkci jsem zasadil do logick´eho bloku a jej´ı v´ ystup pouˇzil jako vstup pro funkci simuluj´ıc´ı stavov´ y automat, takˇze stavov´ y automat pˇrij´ım´a aˇz zprostˇredkovanˇe pˇreloˇzen´e ID stavu. 47
4.2 Vnitˇrn´ı odliˇsnosti VKRC PE stavov´eho stroje
Vstupy
V´ ystup
Drive Bus OFF
Hibernate
Operate
Jm´eno stavu
ID stavu
0
0
0
Ready-to-operate
0
0
0
1
Operating
1
1
0
x
Power-saving
4
0
1
x
Sleeping
8
1
1
x
Sleeping
8
Tabulka 4: Konverzn´ı funkce VKRC vstup˚ u na ID PE stavu
4.2
Vnitˇ rn´ı odliˇ snosti VKRC PE stavov´ eho stroje
Kontrolery VKRC se od korektn´ıho PE standardu liˇs´ı i ve vnitˇrn´ı struktuˇre stavov´eho automatu, konkr´etnˇe v pˇrechodov´ ych podm´ınk´ach. Korektn´ı PE standard jsem popsal v pˇredchoz´ıch kapitol´ach, jeho redukovanou nicm´enˇe korektn´ı verzi jsem implementoval jako prvn´ı generaci ˇc´asti pluginu se stavov´ ym automatem. Oproti zmiˇ novan´emu modelu nem´a VKRC standard zautomatizov´any nˇekter´e pˇrechody mezi stavy a veˇsker´a zodpovˇednost za spr´avn´e veden´ı kontroleru vhodnou cestou k poˇzadovan´emu stavu je zodpovˇedn´e ˇcistˇe programov´an´ı PLC. Napˇr´ıklad oˇcek´avan´a funkˇcnost kontroleru robotu je, ˇze kdyˇz se nach´az´ı v Power-saving m´odu a pˇrijde poˇzadavek na pˇrechod do m´odu Operating, kontroler se s´am postar´a, aby nejprve pˇreˇsel do m´odu Ready-to-operate a aˇz potom do m´odu Operating. Standard VKRC nicm´enˇe v pˇr´ıpadˇe poˇzadavku na pˇrechod z m´odu Power-saving pˇr´ımo do Operating jednoduˇse neprovede ˇza´dnou akci a z˚ ustane v p˚ uvodn´ım stavu. Je na zodpovˇednosti PLC, aby byl zasl´an vˇzdy v dan´ y ˇcas poˇzadavek na pˇrechod do bezprostˇrednˇe navazuj´ıc´ıho m´odu. Druh´ ym v´ yrazn´ ym omezen´ım je zde, ˇze pro pˇrechod ze stavu Operating je nutn´e poslat informaci o dokonˇcen´em robotick´em programu do PLC a poˇckat na pˇr´ıchod potvrzen´ı z PLC. Tato komunikace je provedena pomoc´ı sign´al˚ u so konec pr´ace a si konec pr´ace, prvn´ı je posl´an z kontroleru do PLC, druh´ y je potvrzen´ı z PLC do kontroleru. Tyto sign´aly 48
´ ´I ZPROVOZNEN ˇ ´I 4 VIRTUALN
jsem pˇridal jako vstupn´ı parametry uˇzivatelsk´e funkce pro PE stavov´ y automat. Nakonec bylo nutn´e pˇridat v´ ystupn´ı promˇennou logick´emu bloku, kter´a bude znaˇcit, kdy je PE stavov´ y automat v m´odu Operating, coˇz je sign´al, kter´ y jsem pouˇzil jako jednu podm´ınku ke spuˇstˇen´ı robotick´e operace, ˇc´ımˇz je simulovan´e spuˇstˇen´ı robotick´eho programu ve fyzick´em kontroleru. Za zm´ınˇen´ı stoj´ı tak´e to, ˇze VKRC standard m´a umoˇznˇen´ y pˇrechod ze stavu Powersaving pˇr´ımo do stavu Hibernate. Tento pˇrechod je v PE standardu uveden jako voliteln´ y. Na obr´azku 18 je pˇrehled vnitˇrn´ı struktury v´ ysledn´eho logick´eho bloku, kter´ y jsem pˇriˇradil robotu v simulaci.
Obr´azek 18: Pˇrehled logick´eho bloku VKRC PE standardu
49
4.3 Demonstraˇcn´ı PLC program
4.3
Demonstraˇ cn´ı PLC program
Pro demonstraci funkˇcnosti PE standardu a jeho zaˇclenˇen´ı do v´ yrobn´ıho procesu jsme vytvoˇrili snadno pochopitelnou jednoduchou sekvenci operac´ı. Nejprve obsluha spust´ı robota a provede pˇr´ıpadnˇe poˇzadovan´e kalibrace a testy (brzd, motor˚ u apod.). Potom pˇrevede robotick´ y kontroler do extern´ıho reˇzimu, to znamen´a, ˇze od t´e chv´ıle bude kontroler pˇrij´ımat pˇr´ıkazy z pˇripojen´eho PLC. Tyto prvn´ı kroky jsou na re´aln´e lince provedeny standardnˇe. Od t´e chv´ıle robot cyklicky kontroluje, zda po nˇem nen´ı vyˇzadov´ano spuˇstˇen´ı programu, a pokud ano, pak podle pˇredan´eho ˇc´ısla programu vybere ve sv´e pamˇeti pˇr´ısluˇsn´ y program a vykon´a jej. Po dokonˇcen´ı programu odeˇsle kontroler sign´al do PLC a ˇcek´a na potvrzovac´ı sign´al, jak je zm´ınˇeno v´ yˇse. Sekvenci jsme urˇcili tak, ˇze nejprve robot vykon´a prvn´ı robotick´ y program (ID programu je 2), pak pˇrejde do Power-saving m´odu, v nˇem setrv´a po dobu nˇekolika sekund, a pak se vyˇsle povel k probuzen´ı do m´odu Ready-to-operate, a pak se spust´ı druh´ y robotick´ y program (ID druh´eho programu je 9). T´ım sekvence konˇc´ı a lze ji opakovat na z´akladˇe povelu uˇzivatele.
4.4
Modelov´ an´ı pˇ r´ıpadu v Process Simulate
Jak jsem nast´ınil v´ yˇse, v prostˇred´ı Process Simulate nen´ı moˇzn´e modelovat robotick´ y kontroler jako jeden zapouzdˇren´ y celek, kter´ ym v re´alu je. Nen´ı moˇzn´e simulovat robotick´e programy jinak neˇz pomoc´ı robotick´ ych operac´ı a z´aroveˇ n nelze dostateˇcnˇe elegantnˇe simulovat energetick´e stavy PE standardu pomoc´ı operac´ı. Kontroler je tedy rozdˇelen na dvˇe z´akladn´ı ˇc´asti. • PE stavov´ y automat • Robotick´e operace Pˇritom je jeˇstˇe nutn´e zajistit, ˇze se v simulaci spust´ı vybran´ y robotick´ y program ze sady vˇsech dostupn´ ych. To jsem realizoval pomoc´ı vˇetven´ı operac´ı a pomocn´e operce s roz50
´ ´I ZPROVOZNEN ˇ ´I 4 VIRTUALN
hodovac´ım krit´eriem, jak je vidˇet na 19. Operace PG PICK se vˇetv´ı do dvou moˇznost´ı
Obr´azek 19: Struktura operac´ı v sekvenˇcn´ı editoru
podle sign´alu RQ PGNO. Tento sign´al z PLC spouˇst´ı v kontroleru robotick´ y program se zadan´ ym ˇc´ıslem. Nastaven´ı operace a krit´eria je vidˇet na obr´azku 20. Na obr´azku
Obr´azek 20: Nastaven´ı pˇrechodov´ ych podm´ınek operace
19 je tak´e vidˇet, ˇze vˇsechny robotick´e operace u ´st´ı do non-sim operace praceEnd. To je pomocn´a operace, kter´a pˇri sv´em konci vygeneruje sign´al napojen´ y na vstup logick´eho bloku si konec prace. Pˇr´ıpadn´e rozˇs´ıˇren´ı mnoˇziny robotick´ ych operac´ı potaˇzmo program˚ u pouˇzit´ ych ve virtu´aln´ım zprovoznˇen´ı by se vyˇreˇsilo n´asledovnˇe. Rozˇsiˇruj´ıc´ı robotick´e operace se pˇridaj´ı do studie a napoj´ı se na pomocnou non-sim operaci PG PICK a do vˇetvic´ıcho 51
4.5 Pˇripojen´ı sign´al˚ u
krit´eria t´eto pomocn´e operace se pˇrid´a jako alternativn´ı n´asledovn´ık s pˇr´ısluˇsn´ ym RQ PGNO. Pak se vˇsechny alternativn´ı operace pˇripoj´ı k ukonˇcovac´ı non-sim pomocn´e operaci praceEnd, t´ım je rozˇs´ıˇren´ı hotov´e.
4.5
Pˇ ripojen´ı sign´ al˚ u
ˇ ıdic´ı sign´aly pouˇzit´e ve studii v Process Simulate je moˇzn´e pˇripojit k OPC serveru R´ nebo aplikaci SIMIT a ˇr´ızen´ı jejich hodnot pˇrenechat PLC pˇr´ıpadnˇe simulaˇcn´ımu softwaru. My jsme zvolili moˇznost ovl´adat sign´aly z PLC a tedy pˇripojit sign´aly k OPC serveru, kter´ y by byl pˇripojen k PLC. K tomu jsme nainstalovali poˇc´ıtaˇc nejbl´ıˇze PLC OPC server SIATIC NET a namapovali vˇsechny potˇrebn´e sign´aly z PLC na OPC a pak jsem v Process Simulate simulovan´e sign´aly pˇripojil k OPC. K tomu je tˇreba prov´est nastaven´ı v Options v PS v z´aloˇzce PLC v odd´ılu Simulation. Pˇrepnout na PLC, a pak External Connection. Okno s nastaven´ım je vidˇet na obr´azku 21. Kliknut´ım na tlaˇc´ıtko Connection Settings... se otevˇre dialog, v nˇemˇz pˇrid´ame OPC Connection a zad´ame pro nˇe pˇr´ısluˇsn´a nastaven´ı. Pot´e je jeˇstˇe zapotˇreb´ı pˇripojit pˇr´ısluˇsn´e sign´aly v oknˇe Signal Viewer k OPC. Jak je vidˇet na obr´azku 22, zvol´ı se sign´al a ve sloupci PLC Connection se zaˇskrtne zaˇskrt´avac´ı pol´ıˇcko, a d´ale se ve sloupci External Connection vybere pˇr´ısluˇsn´ y OPC server, v nˇemˇz maj´ı b´ yt sign´aly pˇripojeny. Pˇri spuˇstˇen´ı simulace v PS vˇsechny sign´aly spr´avnˇe reagovaly na zmˇeny v PLC potaˇzmo v OPC sereveru, ale vznikl zde jin´ y probl´em. V sequence editoru se nespustila ˇza´dn´a operace a nebylo moˇzn´e spustit robotick´e operace. Prostˇred´ı Process Simulate tak´e od t´e chv´ıle nebylo schopn´e uloˇzit na eMServer zmˇeny ve studii. Domn´ıv´am se, ˇze nejsp´ıˇs pˇri instalaci OPC serveru na stejn´ y poˇc´ıtaˇc nˇekter´a komponenta PS musela b´ yt ovlivnˇena a funkˇcnost PS t´ım byla naruˇsena. Moˇznost, ˇze by chyba byla v nastaven´ı studie ˇci projektu, jsem vylouˇcil, protoˇze stejn´a studie se stejn´ ym nastaven´ım ˇcerstvˇe naˇcten´a z eMServeru na jin´em poˇc´ıtaˇci fungovala, jak bylo pl´anov´ano, zat´ımco i pˇri odpojen´ ych sign´alech na poˇc´ıtaˇci s OPC serverem PS nefungoval, jak m´a. 52
´ ´I ZPROVOZNEN ˇ ´I 4 VIRTUALN
Obr´azek 21: Nastaven´ı pˇripojen´ı k OPC serveru
Protoˇze v z´avˇeru nezb´ yval ˇcas na hled´an´ı ˇreˇsen´ı tohoto probl´emu, upustili jsme od zprovoznˇen´ı s pˇripojen´ım na OPC server a pˇr´ıkazy pˇrich´azej´ıc´ı z PLC jsem simuloval manu´aln´ım zad´av´an´ım. Jedn´a se o jednoduch´ y PLC program, takˇze zastoupit funkci PLC nebyl probl´em. 53
4.6 Simulovan´a spotˇreba
Obr´azek 22: Pˇripojen´ı sign´al˚ uv Process Simulate k OPC
4.6
Simulovan´ a spotˇ reba
Pˇri fyzick´em testov´an´ı demonstraˇcn´ı sekvence byla mˇeˇrena hodnota okamˇzit´eho pˇr´ıkonu kontoleru robota a z tˇechto dat jsme vypoˇcetli pr˚ umˇern´e spotˇreby v jednotliv´ ych reˇzimech. V´ ystup ze z´aznamu o PE stavech ze simulace se skl´ad´a z p´ar˚ u ˇcasov´e zn´amky a PE stavu v pˇr´ısluˇsnou dobu. Tento ˇretˇez dat je generov´an pro kaˇzd´eho sledovan´eho robota v simulaci zvl´aˇst’ a je uloˇzen v csv souboru. Pˇriˇrazen´ı simulovan´ ych hodnot spotˇreby jsem provedl externˇe v programu MATLAB. Hodnoty spotˇreby pro jednotliv´e PE m´ody jsou uvedeny v dokumentaci robota, stejnˇe tak i ˇcasov´an´ı tˇechto m´od˚ u (jak dlouho trv´a pˇrechod mezi jednotliv´ ymi m´ody, jak´a je minim´aln´ı doba setrv´an´ı v dan´ ych m´odech apod.). Jeˇstˇe ovˇsem zb´ yv´a odhadnout spotˇrebu robota pˇri vykon´av´an´ı jednotliv´ ych robotick´ ych operac´ı. Tato hodnota je silnˇe z´avisl´a na spotˇrebˇe motor˚ u robota a je tedy z´avisl´a na jeho pohybech. Energetick´a funkce, kter´a by na z´akladˇe u ´daj˚ u o pohybu kloub˚ u robota urˇcila pˇredpokl´adanou spotˇrebu dan´e operace, je v projektu ve v´ yvoji a nen´ı jeˇstˇe pouˇziteln´a. Nicm´enˇe pro moje potˇreby pro demonstraci virtu´aln´ıho zprovoznˇen´ı lze pouˇz´ıt pr˚ umˇernou spotˇrebu v pr˚ ubˇehu operace. Celkov´a vynaloˇzen´a energie na proveden´ı operace bude ekvivalentn´ı. Tuto pr˚ umˇernou spotˇrebu operace jsem vypoˇcetl z namˇeˇren´ ych dat. Podobnˇe tak´e pˇrechod mezi jednotliv´ ymi stavy nen´ı konstantn´ı funkce z hlediska spotˇreby energie, ale opˇet souhrn spotˇrebovan´e energie lze rovnomˇernˇe rozprostˇr´ıt na ˇcasov´ y interval 54
´ ´I ZPROVOZNEN ˇ ´I 4 VIRTUALN
Obr´azek 23: Graf simulovan´e spotˇreby
Obr´azek 24: Graf zmˇeˇren´e spotˇreby
55
4.6 Simulovan´a spotˇreba
trv´an´ı pˇrechodu - tedy pouˇz´ıt pr˚ umˇernou spotˇrebu na tomto intervalu. Po proveden´ı mˇeˇren´ı jsme ale zjistili, ˇze spotˇreba uveden´a v dokumentaci se m´ırnˇe liˇs´ı od skuteˇcn´e spotˇreby v jednotliv´ ych PE stavech. To si vysvˇetluji t´ım, ˇze u ´daje v dokumentaci jsou nejsp´ıˇse z´ısk´any mˇeˇren´ım jen mal´eho mnoˇzstv´ı r˚ uzn´ ych kontroler˚ u a tak´e za r˚ uzn´ ych podm´ınek, jako je teplota ve skˇr´ıni kontroleru, uplynul´a doba od zapnut´ı v okamˇziku mˇeˇren´ı apod. Dalˇs´ı nesrovnalosti tvoˇr´ı ˇcasov´an´ı PE pˇrechod˚ u. Podle namˇeˇren´ ych pr˚ ubˇeh˚ u energetick´e spotˇreby je pˇrechod proveden za kratˇs´ı dobu, neˇz jak´a je uv´adˇena v dokumentaci ke kontroleru. Tyto odliˇsnosti lze ovˇsem zahrnout do modelu zpr˚ umˇerov´an´ım spotˇreby pˇres cel´ y ˇcasov´ y interval uveden´ y v dokumentaci. Nevad´ı pˇritom, ˇze se do pˇrechodu zapoˇcte ˇ i chv´ıle, kdy uˇz kontroler pˇretrv´av´a v c´ılov´em stavu. Casov´ an´ı z dokumentace ch´apu jako korektn´ı a bezpeˇcn´e, a proto se ho drˇz´ım v simulaci. V´ ysledkem jsem z´ıskal simulaci, kter´a je vidˇet na obr´azku 23. Pro orientaˇcn´ı srovn´an´ı uv´ad´ım na obr´azku 24 i graf z namˇeˇren´ ych hodnot. ˇ Casov´ an´ı se liˇs´ı i proto, ˇze graf z namˇeˇren´ ych hodnot je sestaven z mˇeˇren´ı sekvence ˇr´ızen´e pomoc´ı PLC, zat´ımco simulace byla ˇcasov´ana manu´alnˇe. D´ale je vidˇet, ˇze robotick´e operace se vyznaˇcuj´ı ˇspiˇckami ve spotˇrebˇe, coˇz jsem uˇz vysvˇetlil v´ yˇse.
56
´ ER ˇ 5 ZAV
5
Z´ avˇ er C´ılem pr´ace bylo rozˇs´ıˇrit prostˇred´ı Process Simulate o funkˇcnost profilu PROFIenergy,
aby bylo moˇzn´e tento profil modelovat a simulovat. N´asleduj´ıc´ım logick´ ym krokem bylo otestov´an´ı t´eto funkˇcnosti na zaˇr´ızen´ı, kter´e je v r´amci projektu k testovac´ım u ´ˇcel˚ um urˇcen´e. Podaˇrilo se mi postupnˇe vyvinout plugin, kter´ y tyto poˇzadavky splˇ nuje, a otestovat ho na modelov´e studii. Provedl jsem v r´amci virtu´aln´ıho zprovoznˇen´ı tak´e simulaci uv´adˇen´ı robotu do u ´sporn´eho reˇzimu a v´ ysledky mˇeˇren´ı ze skuteˇcn´eho robota jsem srovnal se svou simulac´ı se slibn´ ymi v´ ysledky. Moje pr´ace byla jen jedn´ım stavebn´ım kamenem cel´eho projektu a z´avis´ı na v´ ysledc´ıch pr´ace dalˇs´ıch lid´ı. V souˇcasnosti je PE plugin tak´e jen prvn´ı funkˇcn´ı verz´ı s omezen´ ymi moˇznostmi, i kdyˇz ani v´ yrobci zaˇr´ızen´ı jeˇstˇe nedos´ahli u ´pln´e implementace vˇsech souˇca´st´ı profilu PROFIenergy. PE plugin moment´alnˇe pokr´ yv´a schopnosti robotu, na kter´ y bude aplikov´an a jeho v´ yvoj nejsp´ıˇs jeˇstˇe nen´ı u konce. I na to jsem pˇri jeho programov´an´ı myslel a snaˇzil jsem se udrˇzovat vˇsechny vrstvy program˚ u co nejjednoduˇsˇs´ı a nejpˇrehlednˇejˇs´ı, aby se v´ ysledek m´eho snaˇzen´ı neuzavˇrel s´am do sebe a byl snadno modifikovateln´ y. ˇ PE plugin mˇel b´ yt p˚ uvodnˇe aplikov´an na model v´ yrobn´ı linky v tov´arnˇe SKODA AUTO, ale tento pl´an se nepodaˇrilo splnit kv˚ uli komplikac´ım s datovou kompatibilitou jimi dodan´ ych PS studi´ı v´ yrobn´ı linky. Pˇrevod studi´ı je pr´ace rozsahem srovnateln´a s prac´ı na implementaci PE pluginu a bude vyˇzadovat pro naplnˇen´ı c´ıl˚ u projektu jeˇstˇe pozornost. Vˇeˇr´ım vˇsak, ˇze splnˇen´ı hlavn´ıch c´ıl˚ u diplomov´e pr´ace se mi podaˇrilo dos´ahnout.
57
REFERENCE
Reference [1] Siemens Industry Software. Tecnomatix 11.1 Administration Guide, 2013. [2] PROFIBUS & PROFINET International. Common Application Profile PROFIenergy, v1.1, August 2012. Technical Specification for PROFINET. [3] Siemens Industry Software. Process Simulate version 11.1 Reference Manual, 2013. [4] Siemens Industry Software. Process Designer 11.1 Reference Manual, 2013. [5] Siemens Industry Software. Tecnomatix.NET version 11.1, 2013.
58
Appendix Obsah pˇ riloˇ zen´ eho CD V tabulce 5 jsou uvedena jm´ena vˇsech koˇrenov´ ych adres´aˇr˚ u pˇriloˇzen´eho CD s popisem obsahu.
Jm´ eno adres´ aˇ re
Popis
diplomova prace
diplomov´a pr´ace ve form´atu .pdf
installable
pˇreloˇzen´e knihovny programu k instalaci
multimedia
videoprezentace Tabulka 5: Obsah CD