• No results found

– dialog zobrazující pouze animaci

Obrázek 14 – ActionBar – akční panel

ActionBar obsahuje často jméno a ikonku aplikace, některá stálá tlačítka a především dynamická tlačítka, která se mění podle aktuálního použitého fragmentu. Tato část zobrazuje uživateli přehlednou kontextovou nabídku.

Některé z fragmentů jsou deklarovány pomocí XML, převážně ty, jejichž obsah se nemění.

Většina fragmentů však jsou naprogramována v klasickém kódu. Snahou je, aby splňovaly koncepci Model – View – Controller. To znamená, že fragment jako takový se obvykle stará o funkčnost jednotlivých grafických komponent, a svazuje je dohromady s daty. Grafické komponenty plní pouze zobrazovací funkci, všechny události jsou implementovány na vrstvě fragmentu. Fragment zároveň plní grafické komponenty daty. Data jsou deklarována ve speciálních třídách, naplněna jsou za pomocí zvláštních objektů, jež se starají jen o práci s nimi. Tento přístup má zajistit přehledný a krátký kód, kde každá třída má za úkol poměrně malý rozsah funkcí.

Obrázek 15 – MVC [7]

6.4. Struktura zdrojového kódu

Následující seznam ukazuje seznam použitých balíčků (package) v aplikaci. Celé řešení obsahuje 17 balíčků, 162 tříd, 33 rozhraní a 8195 řádků kódu. Statistiky nezahrnují layouty deklarované v XML.

com.android.graph.activities – aktivity, které jsou použity v aplikaci

com.android.graph.activities.graph – fragmenty a rozhraní, které jsou využity v prohlížeči projektů

com.android.graph.activities.project – fragmenty, které jsou využity pro tvorbu projektů com.android.graph.activities.storage – fragmenty, které jsou použity pro správce souborů com.android.graph.adapters – adaptéry nutné pro použité ListView

com.android.graph.controllers – různé třídy plnící funkční vrstvu v programu com.android.graph.controllers.dialogs – funkční vrstva dialogů

com.android.graph.data – pomocné třídy určené k práci s daty

com.android.graph.filemanager – třídy zajišťující funkci správce souborů com.android.graph.global – globální proměnné a konvertor datových typů com.android.graph.plot – třídy zajišťující vykreslování grafu

com.android.graph.project – datové struktury určující projekt – vrstva model pro aplikace com.android.graph.views – třídy dědící z třídy View nebo z jeho dětí

com.android.teco.espnet – návrh implementace protokolu Epsnet com.android.teco.epsnet.dataclass – datové typy použité v Epsnetu com.android.teco.epsnet.messagedata – příkazy použité v Epsnetu

com.android.teco.http – komunikační třídy zajišťující připojení k web serveru

6.5. Ukázky ze zdrojového kódu

6.5.1. TecoConnector

TecoConnector je třída, která se stará o HTTP komunikaci se zařízením Tecomat Foxtrot.

Tato třída obsahuje především privátní metodu makeConnection(), která je volána z veřejné metody connect(). Metoda makeConnection() má na starost připojení k PLC pomocí po sobě jdoucích dotazů na web server. Tyto dotazy jsou prováděny pomocí objektu třídy HttpClientHandler. Metoda makeConnection() se provádí vždy v novém vlákně, pokud do 12 sekund nedojde k úspěšnému navázání připojení, je vytvořen další pokus a starý ukončen.

Pokus o připojení je proveden maximálně třikrát.

Třída HttpClientHandler využívá dva objekty, jež jsou schovány za jeden pomocí abstrakce.

Tyto dva objekty mají na starost odesílání a přijímání HTTP zpráv; jeden objekt využívá GET a druhý SET. Mezi těmito objekty může HttpClientHandler libovolně přepínat. Obsahuje metody jako setCookie(), setHeader(), setHost(), getLocation(), getEntityContent().

Třída TecoConnector obsahuje následující veřejné metody:

 setITecoProgress() – metoda pro nastavení posluchače, posluchač zveřejňuje postup stáhnutí souboru

 isAvailable() – metoda ověřuje dostupnost hostitelského PLC

 connect() – metoda se připojuje k PLC po zadání přihlašovacích parametrů

 fileExists() – metoda ověřuje existenci souboru, jméno souboru se zadává jako parametr

 fileDownload() – metoda dokáže stáhnout soubor z hostitelského PLC

6.5.2. FileManager

FileManager je jednoduchou implementací prohlížeče souboru. Objekt si pamatuje aktuální úroveň, dokáže vrátit seznam souborů a složek, přecházet mezi úrovněmi, mazat a přejmenovávat položky v souborovém systému. Tato třída zajišťuje pouze funkční vrstvu, grafická vrstva může být jakákoliv. Tento způsob je ukázkou využití konceptu

File newF = new File(currentFile.getPath() + "/" + name);

newF.mkdir();

File newF = new File(currentFile.getPath() + "/" + name);

try {

File newF = new File(currentFile.getPath() + "/" + name);

if (newF.exists()) {

deleteFolder(child);

fileOrDirectory.delete();

}

public boolean rename(String oldName, String newName){

if (currentFile.canWrite()) {

File oldF = new File(currentFile.getPath() + "/" + oldName);

if (oldF.exists()) {

File newF = new File(currentFile.getPath() + "/" + newName);

oldF.renameTo(newF);

if(!oldF.exists() && newF.exists()) return true;

}

dirLevel = new File(currentFile.getPath() + "/" + rPath);

}

if(dirLevel.isDirectory() && dirLevel.list() != null){

currentFile = dirLevel;

public int compare(File object1, File object2) {

if((object1.isDirectory() && object2.isDirectory()) ||

(object1.isFile() && object2.isFile())){

String ob1 = object1.getName().toLowerCase();

String ob2 = object2.getName().toLowerCase();

6.5.3. DialogAsyncWaiting

Třída DialogAsyncWaiting rozšiřuje třídu AsyncTask, což je velice přínosná třída umožňující jednoduché vytváření nových vláken. V zásadě AsyncTask obsahuje několik vhodných metod k přepsání:

onPreExecute() – tato metoda nastane v hlavním vlákně ještě před vytvořením nového doInBackground() – tato metoda je volána v novém vláknu a měla by obsahovat časově náročnější operace

onPostExecute() – metoda je zavolána z vlákna GUI po skončení operací v novém vlákně

onProgressUpdate() – tato metoda se vykonává ve vlákně GUI a může být zavolána pomocí publishProgress() odkudkoliv

Objekt třídy DialogAsyncWaiting má jediný účel, a to vykonat potřebné operace v pozadí zatímco uživatel uvidí vyčkávací dialog. Grafický dialog je vyvolán až po uplynutí 500ms.

Tato hodnota byla zvolena jako maximální, kdy uživatel ještě nepozná pomalou odezvu grafického rozhraní. Uživateli může nebo nemusí být umožněno dialog zavřít a pokračovat s prací v aplikaci, zatímco se vykonávají potřebné věci v pozadí.

public class DialogAsyncWaiting extends AsyncTask<Void, Integer, Void> implements IDialogAsync{

private Context ctx;

private Timer myTimer;

private ProgressDialog dialog;

private ITaskProvider taskProvider;

private boolean autoDialogCancel = true;

private boolean onBackground = false;

public DialogAsyncWaiting(Context ctx) {

public void onClick(DialogInterface dialog, int id) { if (cancel(true))

this.cancel(true);

protected void onProgressUpdate(Integer... values) { dialog.show();

super.onProgressUpdate(values);

}

@Override

protected void onPostExecute(Void result) { if (dialog != null && autoDialogCancel){

dialog.cancel();

protected Void doInBackground(Void... params) { if(taskProvider != null)

taskProvider.doInBackground();

return null;

} }

Kód 4 – třída DialogAsyncWaiting

7. Závěr

V rámci bakalářské práce se úspěšně podařilo navrhnout a vytvořit funkční aplikaci. Aplikace dokáže zpracovávat veškeré druhy CSV souborů, komunikovat s PLC Tecomat Foxtrot pomocí web serveru a zobrazovat veškerá data v grafech. Program funguje na mobilních telefonech a tabletech založených na operačním systému Android. Součástí práce je podrobný uživatelský manuál pro práci s programem, CD s přiloženými zdrojovými kódy a instalačním souborem.

Seznam použité literatury

[1] Monitoring experimentů ve štole Josef. TECO A.S.Tecomat[online]. [cit. 2012-05-12].

Dostupné z: http://www.tecomat.com/clanek-1389-reference---monitoring-experimentu-ve-stole-josef-.html

[2] Apache image directory. In:Ask Dave Taylor[online]. [cit. 2012-05-12]. Dostupné z:

http://www.askdavetaylor.com/create_apache_image_browser_script.html

[3] TECO A.S.Komunikační server PLCCOmS:uživatelská příručka[online]. 7. vyd. 2011 [cit. 2012-05-12]. Dostupné z:

http://www.tecomat.com/wpimages/other/DOCS/cze/TXV13863_01_PLCComS_cz.pdf

[4] Platform Versions. GOOGLE.Android Developers[online]. 1.5.2012. [cit. 2012-05-12].

Dostupné z: http://developer.android.com/resources/dashboard/platform-versions.html

[5] Activity: Activity Lifecycle. GOOGLE.Android Developers:Reference[online].

[cit. 2012-05-12]. Dostupné z:

http://developer.android.com/reference/android/app/Activity.html

[6] Fragments: Design Philosophy. GOOGLE.Android Developers:Reference[online].

[cit. 2012-05-12]. Dostupné z:

http://developer.android.com/guide/topics/fundamentals/fragments.html

[7] Model–view–controller. In:Wikipedia:the free encyclopedia[online]. San Francisco (CA):

Wikimedia Foundation, 2001- [cit. 2012-05-12]. Dostupné z:

http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

[8] Telnet. In:Wikipedia:the free encyclopedia[online]. San Francisco (CA): Wikimedia Foundation, 2001- [cit. 2012-05-12]. Dostupné z: http://cs.wikipedia.org/wiki/Telnet

[9] TECO A.S. Sériová komunikace programovatelných automatů Tecomat [online]. 17. vyd.

2010 [cit. 2012-05-14]. Dostupné z:

http://www.tecomat.com/wpimages/other/DOCS/cze/TXV00403_01_Comm_Serial32_cz.pdf

Seznam použitých obrázků

Obrázek 1 – areál štoly Josef [1] ... 7

Obrázek 2 – ukázka webového rozhraní používaného pro experimenty v Josefu ... 9

Obrázek 3 – ukázka možného výpisu souborů na web serverech Apache [2] ... 10

Obrázek 4 – komunikační schéma pro PLCComS [3] ... 11

Obrázek 5 – obrazovka správce souborů ... 15

Obrázek 6 – obrazovka prohlížeče grafu ... 16

Obrázek 7 - WireShark ... 17

Obrázek 8 - životní cyklus aktivity, podle [5] ... 21

Obrázek 9 – fragmenty, podle [6] ... 22

Obrázek 10 – obrazovka z aplikace ... 25

Obrázek 11 - aplikace spuštěná na zařízení s rozlišením 1280x800 a 480x800 ... 26

Obrázek 12 – dialog zobrazující pouze animaci ... 27

Obrázek 13 – dialog zobrazující stav operace ... 27

Obrázek 14 – ActionBar – akční panel ... 28

Obrázek 15 – MVC [7] ... 28

Seznam zkratek

API – Application Programming interface – programovací rozhranní

CSV – Comma Separated Values – hodnoty oddělené čárkou

GUI – Graphic User Interface – grafické rozhraní

HTTP – Hypertext Transfer Protocol – protokol určený na výměnu textových dokumentů

IDE – Integrated Development Enviroment – vývojové prostředí

IP – Internet Protocol – protokol zajišťující adresující vrstvu

OS – Operating System – operační systém

PLC – Programmable Logic Controller – řídicí programovatelné zařízení

SDK – Software Development Kit – nástroje pro programování

SQL – Structured Query Language – dotazovací jazyk

TCP – Transmission Control Protocol – protokol zajišťující spolehlivou transportní vrstvu

XML – Extensible Markup Language – rozšířený značkovací jazyk

Přílohy

Related documents