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. TecoConnectorTecoConnector 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