Komponente µSD

Mit der ersten Komponente soll auch das Klassendiagrammm für das kleine Projekt angelegt werden. Falls Sie jetzt noch ein altes Klassendiagramm geöffnet haben wählen Sie im Kontextmenü (rechte Maustaste) des Diagramms den Menüpunkt nach oben. Sollte das Projekt nicht mehr geöffnet sein, öffnen sie das SiSy UML-Projekt wieder. Legen Sie ein neues Klassendiagramm an und wählen Sie die Sprache ARM C++. Beachten Sie die Einstellungen für die Zielplattform STM32F4-Discovery. Beim Öffnen des Diagramms (rechte Maustaste, nach unten) laden Sie die Diagrammvorlage für eine ARM C++ Applikation.

Beachten Sie im Verlauf des Projektes für jeden erfolgreich realisierten Teilschritt ein gesondertes Projektarchiv (Menüpunkt Projekt/Archiv/Anlegen) anzulegen.

Komponente entwerfen

Der betreffende Teilausschnitt unseres Systems sieht wie folgt aus:

Im Tutorial haben wir das Speichern von Daten auf der µSD-Karte bereits erfolgreich realisiert. Das Paket für die Dateiarbeit bezogen wir uns aus dem SiSy-LibStore. Sollte das Paket FileSystem noch nicht im Projekt enthalten sein sollten Sie dieses jetzt aus dem LibStore laden. Die erfolgreiche Konstruktion der Komponente für eine Speicherkarte können wir als Vorbild benutzen. Für Testausgaben und zur Fehlersuche bauen wir noch ein Terminal vom Typ UART in bewährter Weise in den Entwurf ein. Damit ergibt sich für unseren ersten Entwurfsschritt folgende Klassenstruktur:

Manche Tabellenkalkulation kommt am Besten mit CSV-Dateien klar wenn das verwendete Trennzeichen kein Komma sondern ein Semikolon ist. Das sollte beim Festlegen der Struktur der Datei log.csv beachtet werden. Die folgende Darstellung zeigt den gewünschten Dateiinhalt der log.csv.

Zeit; Temperatur; Helligkeit; Lageveränderung
04.01.2012 12:37; 19,5; 1234; 0
04.01.2012 12:38; 19,0; 1234; 0
04.01.2012 12:39; 18,5; 1234; 0
04.01.2012 12:40; 17,5; 1200; 0
04.01.2012 12:41; 17,5; 1188; 0
04.01.2012 12:42; 17,0; 1198; 0
04.01.2012 12:43; 16,5; 1088; 0
04.01.2012 12:44; 16,5; 902; 1
04.01.2012 12:44; 16,5; 802; 1
04.01.2012 12:44; 16,5; 702; 1
...

Für die einzelnen Felder unseres CSV-Datensatzes bereiten wir in der Applikation Attribute vom Typ String vor. Lediglich das Feld Lageveränderung welches mit einer '0' oder einer '1' belegt wird sparen wir uns als explizites Attribut. Diese Erweiterung führt zu folgendem Klassendiagramm:

Vervollständigen Sie Ihren Entwurf entsprechend!

Komponente realisieren

Die Operation start hat die Aufgabe die µSD-Karte zu initialisieren und zu ermitteln ob sich eine Datei mit dem Namen log.csv im Wurzelverzeichnis der Karte befindet. Ist die Datei vorhanden soll im Weiteren an die bestehenden Datensätze angefügt werden. Ist keine Log-Datei vorhanden muss diese angelegt und der Tabellenkopf geschrieben werden.

onStart
sd.mount();
terminal.config(9600);
 
if(!sd.findFirst("/log.csv"))
{
	if (sd.logfile.create("/log.csv"))
	{
		sd.logfile.write("Zeit; Temperatur; Helligkeit; Lageveränderung\n");
		sd.logfile.close();
		terminal.sendString("\nDatei log.csv erzeugt!");
	}
	else
	{
		terminal.sendString("\nFehler beim Anlegen der Datei log.csv!");
	}
}
else
{
	terminal.sendString("\nDatei log.csv gefunden!");	
}

Da wir zur Zeit die entsprechenden Eingabegeräte noch nicht zur Verfügung haben simulieren wir diese durch fiktive Werte. Wichtig ist nur, dass Sie die Testdatengenerierung nach erfolgreichem Test wieder entfernen.

Komponente testen

Der fiktive, statische Datensatz soll in der Operation onWork an die Datei log.csv angefügt werden.

onWork:
String datensatz,lage="0",trennzeichen="; ",zeilenende="\n";
 
//Testdaten!!! -------------------------------------
zeit="04.01.2012 17:34";
helligkeit="1234";
temperatur="19,5";
//Testdaten Ende ----------------------------------- 
 
datensatz = zeit+trennzeichen
                    +temperatur+trennzeichen
                    +helligkeit+trennzeichen
                    +lage+zeilenende;
 
terminal.sendString(datensatz);
 
if (sd.logfile.open("/log.csv"))
{
	sd.logfile.append(datensatz);
	sd.logfile.close();
	terminal.sendString(" Datensatz angefügt! ");
}
}
else
{
	terminal.sendString("\nDatei konnte nicht geöffnet werden!");
}
// für Test 1 Sekunde Wartezeit je Zyklus
waitMs(1000);

Erstellen, Übersetzen und Übertragen Sie das Programm. Korrigieren Sie ggf. Schreibfehler im Quelltext. Achten sie darauf, dass eine µSD-Karte mit maximal 1 GB Kapazität und FAT16-Formatierung ordnungsgemäß in den SD-Kartenhalter eingelegt ist bevor das Programm startet. Lassen Sie die Anwendung einige Minuten laufen. Beobachten Sie die Protokollausgaben im SiSy-Controlcenter. Entnehmen sie die SD-Karte und überprüfen Sie den Inhalt der Datei log.csv.

Nächster Schritt

Bitte nicht vergessen ein Projektarciv von diesem Teilschritt anzulegen! Entfernen Sie den Test-Code in der Operation onWork.