FI-24Wi-FIA-1P
Die Aufgabe ist sehr interessant und eine Inspiration für ein IoT- bzw. TGIT-Projekt, leider wurde die Aufgabenidee nicht zu Ende gebracht und enthält viele Stolpersteine (Verwaltet der µC die Akkudaten oder sendet er schlicht Messwerte an den PC?). Die Aufgabenstellung und Anlagen wurden von mir hier etwas verändert und angepasst, mangels Zeit habe ich viele Ungereimtheiten nicht auflösen können. Für mich war unklar ob nach Ende der Messung die gesamte Messreihe in einem Stück vom µC zum PC übertragen und dann eingefügt wird. Mein Ansatz ist eine kontinuierliche Übertragung der Daten während der Messung.
Kapazitätsmessung von Akkus
Akkus sind Verschleißteile. Um die noch verfügbare Kapazität von Akkus zu ermitteln, sollen sie an einem Messplatz vermessen werden. Zu diesem Zweck werden die Akkus zunächst voll geladen und dann kontrolliert entladen und dabei die verfügbare Kapazität ermittelt. Ein µC misst am Messplatz in Zeit-Intervallen den Entladestrom und die Akkuspannung und übermittelt die Daten mit Zeitmarke an den PC über die serielle Schnittstelle. Für jeden Akku werden Messreihen mit Messwerten abgespeichert, damit kann der Kapazitätsverlauf über die Zeit nachvollzogen werden.
Ablauf einer Messung:
- Akku anschließen und Messung über PC starten: starteMessung(). Die AkkuID wird abgefragt.
- Akku-ID am PC eingegeben und bei unbekannten Akku wird die Nennkapazität abgefragt und ein neuer Akkudatensatz angelegt.
- Der µC bekommt die ID (damit falls mehrere Akkus bearbeitet werden diese unterschieden werden können) und die Nennkapazität des Akkus, damit er den geeigneten Ladestrom ermitteln kann.
- Akku wird geladen und beim Entladen werden in Zeitintervallen Messdaten mit Zeitstempel an den PC als Text übermittelt z.B.:
- „ID 23; 125s; 4.0V“
- „ID 23; 125s; 123mA“
- Der PC speichert die Messwerte in einer Messreihe ab.
- Am Ende einer Messreihe wird die Ist-Kapazität mit berechneKapazitaet():FKZ ermittelt.
- Die Klasse Messwert ist als abstract gekennzeichnet. Erläutern Sie, welche Einschränkung damit verbunden ist.
- Während der Messung fallen zwei unterschiedliche Messwert-Typen an:
Stromwerte und Spannungswerte. Die Methode pruefeWert():bool der Klasse Messwert soll eine Plausibilitätsüberprüfung vornehmen, um Messfehler (Ausreißer) herauszufiltern. Da Strom- und Spannungswerte unterschiedliche Grenzwerte haben, soll die Prüfung in den entsprechend spezialisierten Klassen (siehe 1.2) durchgeführt werden.
Ergänzen Sie das Klassendiagramm um die Klassen Strom und Spannung mit notwendigen Operationen. - Jeder Messplatz kennt mehrere Akkus. Um den Alterungsprozess eines Akkus dokumentieren zu können, werden für jeden Akku mehrere Messreihen aufgenommen. Jede dieser Messreihen wiederum enthält mehrere Messwerte.
Ergänzen Sie auf der Grundlage dieser Informationen im Klassendiagramm die Assoziationen. Geben Sie jeweils Multiplizität und Rollenname an. - Gegeben ist das Struktogramm der Methode addMesswertListe() der Klasse Messplatz.
Ergänzen Sie alle Informationen, die sich daraus ergeben, im vorgegebenen Klassendiagramm. - Die Methode bereinigeMesswertliste():GZ filtert alle ungültigen Messwerte heraus und speichert deren Anzahl in dem Attribut anzahlFehler.
Implementieren Sie diese Methode in der an Ihrer Schule unterrichteten Programmiersprache und verwenden Sie dabei die Methode pruefeWert():bool. - Erläutern Sie zu welchem Zeitpunkt der Aufruf der Methode bereinigeMesswertliste():GZ, unter Berücksichtigung der Sichtbarkeitsstufe, erfolgen muss.
Lösungsvorschläge
1. Aufgabe
Es können von der Klasse Messwert keine Instanzen, Objekte erstellt werden. Zusatzinfo: Enthält eine Klasse eine abstrakte Methode, muss diese Klasse als abstract gekennzeichnet werden.
2..4. Aufgabe
5. Aufgabe
private int bereinigeMesswertliste(){
int fehler = 0;
for(int i=0;i< messwertliste.size();i++){
if(messwertliste.get(i).pruefeWert() == false){
messwertliste.remove(i);
fehler++;
}
}
anzahlFehler = fehler;
}
6. Aufgabe
Da die Sichtbarkeit private ist kann die Methode nur von einer Methode in der selben Klasse aufgerufen werden. Ein sinnvoller Zeitpunkt wäre in der Methode berechneKapazitaet() vor der Berechnung der Kapazität aus den Messwerten.