Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ein_kleines_projekt [2014/11/25 18:04]
127.0.0.1 Externe Bearbeitung
ein_kleines_projekt [2019/02/07 09:45] (aktuell)
Zeile 1: Zeile 1:
 +====== Ein kleines Projekt ======
 +Das kleine Projekt soll in einem Überschaubaren Rahmen demonstrieren wie die Fähigkeiten von SiSy für die zeiteffiziente Entwicklung von PC-Anwendungen gekoppelt mit Mikrocontrollerlösung genutzt werden können.
  
 +
 +
 +
 +====== Aufgabenstellung ======
 +Es ist eine Lösung zu entwickeln die über einen längeren Zeitraum die Helligkeit an einem Standort aufzeichnet und als Datei für die weitere Verarbeitung speichert. Die Standorthelligkeit soll mit dem Lichtsensor auf einem Mikrocontroller-Board einmal pro Sekunde erfasst und an eine PC-Anwendung zur Aufzeichnung gesendet werden. Die PC-Anwendung empfängt den Helligkeitswert,​ visualisiert den Aktuellen Wert und den Verlauf die letzten Messwerte. Die empfangenen Werte soll an eine Log-Datei im CSV-Format erfasst werden.
 +
 +
 +
 +
 +====== Projektplanung ======
 +Wer eine SiSy Ausgabe //​Developer//​ oder //​Professional//​ hat kann das kleine Projekt gern mit den dort enthaltenen Planungswerkzeugen (Bild: Netzplan) begleiten.
 +
 +>>​{{:​projekt:​netzplan.png?​700|}}
 +
 +Zunächst soll mit ein wenig Methodik geklärt werden **//WAS//** zu tun ist. Die eigentliche Softwareentwicklung kann entweder Parallel oder in zwei Projektiterationen die geforderte Firmware für den Mikrocontroller und die PC-Anwendung erarbeiten.
 +
 +====== Analyse ======
 +Leider sind die Aktivitäten die gemeinhin als Analyse bezeichnet werden, also dem verstehenden Erarbeiten oder den erarbeitenden Verstehen **WAS** eine Anwendung leisten soll, oftmals auf das schnöde Aufstellen von Anforderungslisten mit mehr oder weniger leistungsfähigen Werkzeugen reduziert. Natürlich ist Requirements Management wichtig aber Requirements Engineering ist eben mehr als das und methodische Analyse noch ein bisschen mehr. Auch wenn unser kleines Projekt von einem erfahrenen Entwickler locker überblickt wird wollen wir eine gewisse Methodik des Eindringens in die Aufgabenstellung andeuten. Vielleicht erhalten Sie ja Anregungen für Ihre Projekte.
 +
 +===== User-Story / Storyboard =====
 +Eine der wichtigsten und effizientesten Analysewerkzeuge (das menschliche Gehirn setzen wir als //pre condition// mal voraus) sind Papier und Stift. "Der Mensch ist doch ein Augentier ..." <​sub>​Lyrics RAMMS+EIN</​sub>​ Als Beweis soll die in Projekten oft erhobene Forderung nach dem berühmt-berüchtigten //Big Picture// dienen. Wir lehnen uns an einer an Arbeitstechnik die aus der Filmbranche bekannt ist, dem [[http://​de.wikipedia.org/​wiki/​Storyboard|Story Board]] (vgl. //user story//, //​Papierprototyp//,​ //mock up//).
 +
 +
 +>>>​{{:​projekt:​storyboard.jpg|}}
 +
 +===== Anwendungsfälle =====
 +Etwas formaler geht es dann schon in der UML zu. Die bildliche Darstellung ist als Kommunikationsmittel zwischen Anwender/​Auftraggeber und Softwareentwickler schon mal ein erster Schritt aber muss trotzdem weiter präzisiert werden. Dazu bietet die UML als Einstiegspunkt die Modellierung von Anwendungsfällen. Das Anwendungsfalldiagramm beschreibt **WAS** ein Anwender mit einem System machen, also wozu er es benutzen (anwenden) kann. Die Ähnlichkeit des Anwendungsfallsiagramms mit der obigen Skizze sollte hier erkennbar sein.
 +
 +>​{{:​projekt:​anwendersicht.png?​700|}}
 +
 +===== Szenarios =====
 +Als Szenarien werden textuelle oder grafische Beschreibungen bezeichnet die verdeutlichen **WIE** ein System bestimmte Leistungen, in unserem Beispiel Anwendungsfälle,​ realisiert. Die UML bietet für die grafische Abbildung von Szenarien unter Anderem das Aktivitätsdiagramm an. Diese Darstellungsform ist deshalb besonders zur Präzisierung von Anwendungsfällen geeignet, da die Notation sehr stakt an Flussdiagramme (Programmablaufpläne) erinnert und diese sich einer recht hohe Akzeptanz auch bei //​Nichtprogrammierern//​ erfreuen.
 +
 +>​{{:​projekt:​szenariomc.png?​330|}}{{:​projekt:​szenariopc.png?​360|}}
 +
 +====== Entwurf und Realisierung der Mikrocontrollerlösung ======
 +Entwurf und Realisierung der Mikrocontrollerlösung soll hier nur kurz angedeutet werden. Für die nähere Auseinandersetzung mit der Programmierung von Mikrocontroller soll hier auf unsere Mikrocontroller-Tutorials verwiesen werden:
 +  * [[http://​www.avr-cpp.de|www.avr-cpp.de]]
 +  * [[http://​www.avr-uml.de|www.avr-uml.de]]
 +  * [[http://​www.mySTM32.de|www.mySTM32.de]]
 +  * [[http://​www.myXMC.de|www.myXMC.de]]
 +
 +Grundsätzlich kann die Controllerlösung mit allen drei angebotenen Systemen (myAVR, mySTM32, myXMC) realisiert werden. Das hier gezeigte Klassendiagramm verdeutlicht die Struktur einer Mikrocontrollerlösung basierend auf einem SiSy-Mikrocontroller-Framework.
 +
 +>>>​{{:​projekt:​classmcu.png?​650|}}
 +
 +Im Folgenden ist die Realisierung mit dem myAVR System, einem kleinen Programm und in einfachem C++.
 +
 +>>><​code cpp>
 +//​-----------------------------------------------------------------------------
 +// Titel     : Mikrocontrollerlösung für das kleine Projekt
 +//​-----------------------------------------------------------------------------
 +// Funktion ​ : erfasst ein mal pro Sekunde die Helligkeit und
 +//             ​sendet den Wert an die PC-Lösung
 +// Schaltung : Helligkeitssensor an PortC Bit0
 +//​-----------------------------------------------------------------------------
 +// Prozessor : ATmega8
 +// Takt      : 3686400
 +// Sprache ​  : AVR C++
 +// Datum     : 16.04.2014
 +// Version ​  : 1
 +// Autor     : Alexander Huwaldt
 +//​-----------------------------------------------------------------------------
 +class Application : public Controller
 +{
 +    // Bausteine und Attribute .........................................
 +    protected: uint8_t wert;
 + protected: Uart pc;
 + protected: AnalogDevice sensor;
 +
 +    // Funktionen ......................................................
 +    public: void onStart()
 +    {
 +        // Startwert festlegen
 +        wert=0;
 +        // Sensor auf ADC Chanel 0 konfigurieren
 +        sensor.config(0);​
 +        // UART Verbindung zum PC mit 9600 Baud konfigurieren
 +        pc.config(9600);​
 +    }
 +    ​
 +    public: void onWork()
 +    {
 +        // Helligkeitswert erfassen
 +        wert=sensor.getValue8();​
 +        // Wert an PC senden
 +        pc.sendByte(wert);​
 +        // 1 Sekunde warten
 +        waitMs(1000);​
 +    }
 +} app;  // Anwendungsinstanz
 +//​-----------------------------------------------------------------------------
 +</​code>​
 +
 +>>>>​{{:​projekt:​seqmc.png?​400|}}
 +
 +{{:​projekt:​elfmc.png|}}{{:​projekt:​mchex.png|}}{{:​projekt:​flash.png|}}
 +
 +Die Mikrocontrollerlösung muss gebildet und auf den Controller übertragen werden. Von dem moment an sendet der Controller einmal pro Sekunde einen Helligkeitswert,​ egal ob dieser empfangen oder ignoriert wird (asynchrone Datenübertragung). ​
 +
 +
 +
 +====== Entwurf der PC-Lösung ======
 +Die ersten Schritte für die PC-Lösung sind ein entsprechendes SVL-Projekt mit SiSy anzulegen, die aktuelle SVL aus dem LibStore zu laden und ein Klassendiagramm zu erstellen.
 +
 +>>>​{{:​projekt:​classsvlgg.png?​650|}}
 +
 +Der Klasse //MainWnd// sind über den ControlWizard folgende Steuerelemente (Controls) als Attribute hinzuzufügen.
 +  * [[http://​www.mysvl.de/​svl_dict/​SComPortControl.htm|SComPortControl]] Instanzname:​ //​controller//​
 +  * [[http://​www.mysvl.de/​svl_dict/​SProgressCtrl.htm|SProgressControl]] Instanzname:​ //​helligkeit//​
 +  * [[http://​www.mysvl.de/​svl_dict/​SChartControl.htm|SChartControl]] Instanzname:​ //verlauf//
 +
 +>>>​{{:​projekt:​classprojekt2.png?​650|}}
 +
 +Die Anwendung kann bereits gebildet und die Steuerelemente angeordnet werden.
 +
 +>>>​{{:​projekt:​pcanwendung1.png?​650|}}
 +
 +
 +====== Realisierung der PC-Lösung ======
 +
 +Für den Empfang und die Verarbeitung der Helligkeitswerte ist die Operation //​onComportData//​ zu überschreiben.
 +
 +>>>​{{:​projekt:​classprojekt3.png?​650|}}
 +
 +Der Quellcode der Operationen //​onInitWindow//​ und //​onComportData//​ sind wie folgt zu ergänzen:
 +
 +>>>​**mainWnd:​onInitWindow**<​code cpp>
 +// ...
 +// Wertebereich der Controls auf 8 Bit 0-255 konfigurieren
 +verlauf.setRange(0,​255);​
 +helligkeit.setRange(0,​255);​
 +// ProgressControl auf Style Rund konfigurieren
 +helligkeit.setStyle(2);​
 +
 +</​code>​
 +
 +>>>​**mainWnd:​onComportData**<​code cpp>
 +// emfangenen Wert an die Controls senden
 +helligkeit.setPos(newData);​
 +verlauf.addValue(newData);​
 +</​code>​
 +
 +
 +
 +====== Test, Weiterentwicklung und Übergabe ======
 +Vergleichen Sie die Quelltexte mit den oben modellierten Szenarien. Erstellen und Testen Sie die Anwendung.
 +
 +>>>​{{:​projekt:​pcanwendung2.png?​650|}}
 +
 +Die Weiterentwicklung umfasst die Aufzeichnung der Daten. Dazu ist der Klassenentwurf wie folgt zu erweitern:
 +
 +>>>​{{:​projekt:​classprojekt4.png?​650|}}
 +
 +Für die Dateiarbeit nutzen wir die Klasse [[http://​www.mysvl.de/​svl_dict/​SFile.htm|SFile]]. Die zu speichernden Datensätze sollen zusätzlich das datum und die Uhrzeit der erfassten Helligkeit enthalten. Dafür nutzen wir die Klasse [[http://​www.mysvl.de/​svl_dict/​STime.htm#​1251_Details|STime]]. Ergänzen Sie die Operationen wie folgt:
 +
 +>>>​**MainWnd::​onInitWindow**<​code cpp>
 +// ...
 +// Datei anlegen bzw überschreiben
 +log.open(dateiName,"​w+"​);​
 +// Dateikopf schreiben
 +log.writeText("​Zeitstempel;​ Helligkeit\r\n"​);​
 +log.close();​
 +</​code>​
 +
 +>>>​**MainWnd::​onComportData**<​code cpp>
 +// ...
 +// Helligkeitswerte Aufzeichen
 +SString datensatz;
 +STime time;
 +datensatz=time.getText("​%d.%m.%y %H:​%M:​%S"​);​
 +datensatz.formatAdd(";​ %d\r\n",​newData);​
 +if (log.open(dateiName,"​r+"​))
 +{
 + log.seek(0,​SEEK_END);​
 + log.writeText(datensatz);​
 + log.close();​
 +}
 +</​code>​
 +
 +Erstellen und Testen Sie die Anwendung. Die erstellte CSV-Datei kann zum Beispiel mit einer Tabellkalkulation weiter verarbeitet werden.
 +
 +>>>​{{:​projekt:​excellog.png?​650|}}
 +
 +
 +
 +===== Videozusammenfassung =====
 +
 +>>><​flashplayer width="​640"​ height="​500"​ position="​0">​file=http://​youtu.be/???</​flashplayer>​
 +
 +====== Nächstes Thema ======
 +  * [[das Sequenzdiagramm anwenden]]
 +  * [[http://​www.mysvl.de/​wiki/​doku.php?​id=start|zurück zur Übersicht]]
ein_kleines_projekt.txt · Zuletzt geändert: 2019/02/07 09:45 (Externe Bearbeitung)