kramann.info
© Guido Kramann

Login: Passwort:










Archiv
2 SoSe2022
..2.1 MIK
..2.2 SRT
..2.3 HDL
..2.4 AUT
..2.5 SLE
2 WS2020_21
..2.1 RTS
....2.1.1 day_by_day
..2.2 IE
....2.2.1 day_by_day
..2.3 ES
..2.4 EFSEE
....2.4.1 day_by_day
..2.5 KF
....2.5.1 day_by_day
....2.5.2 Haikus
....2.5.3 Haikus_en
..2.6 CC
....2.6.1 day_by_day
2 WS2021_22
..2.1 RTS
....2.1.1 day_by_day
....2.1.2 Versuch002
....2.1.3 Versuch003
....2.1.4 Versuch004
....2.1.5 Versuch005
....2.1.99 Material
..2.2 FTS
....2.2.1 day_by_day
..2.3 ESY
....2.3.1 day_by_day
..2.4 INFmecha5
....2.4.1 day_by_day
..2.5 REGmecha5
....2.5.1 day_by_day
2 WS2023_24
..2.1 day_by_day_RST
..2.2 day_by_day_SRT
..2.3 day_by_day_FTS
..2.4 day_by_day_KF
3 SoSe2021
..3.1 STR
....3.1.1 day_by_day
..3.2 SLE
....3.2.1 day_by_day
..3.3 HDL
....3.3.1 day_by_day
..3.4 MIK
....3.4.1 day_by_day
3 SoSe2024
..3.1 Mik_21_03_2024
..3.2 Mik_04_04_2024
..3.3 Mik_11_04_2024
..3.4 Mik_18_04_2024
..3.5 Mik_25_04_2024
..3.6 Mik_02_05_2024
..3.7 Mik_16_06_2024
..3.8 Mik_23_05_2024
..3.9 Mik_30_05_2024
..3.10 Mik_05_06_2024
..3.11 Mik_13_06_2024
3 WS2022_23
..3.1 day_by_day_RST_3MB
..3.2 day_by_day_RT2_5MT
..3.3 day_by_day_EMB_7MT
..3.4 day_by_day_ABP_7MT
..3.5 day_by_day_FTS_MMB
..3.6 day_by_day_KF
4 SoSe2023
..4.2 RTS_day_by_day
..4.3 MIK_day_by_day
..4.4 AUT_day_by_day
..4.5 HDL_day_by_day
4 WS2024_25
..4.1 ING_day_by_day
....4.1.1 ING_Do_26_09_2024
....4.1.2 ING_Do_10_10_2024
....4.1.3 ING_Do_17_10_2024
....4.1.4 ING_Do_24_10_2024
....4.1.5 ING_Do_07_11_2024
....4.1.6 ING_Do_14_11_2024
....4.1.7 ING_Do_21_11_2024
....4.1.8 ING_Do_28_11_2024
....4.1.9 ING_Do_05_12_2024
....4.1.10 ING_Do_12_12_2024
....4.1.11 ING_Do_19_12_2024
..4.2 INF_day_by_day
....4.2.1 INF_Fr_27_09_2024
....4.2.2 INF_Fr_04_10_2024
....4.2.3 INF_FR_18_10_2024
....4.2.4 INF_Fr_25_10_2024
....4.2.5 INF_Fr_08_11_2024
....4.2.6 INF_Fr_15_11_2024
....4.2.7 INF_Fr_22_11_2024
....4.2.8 INF_Fr_29_11_2024
....4.2.9 INF_Fr_06_12_2024
....4.2.10 INF_Fr_13_12_2024
....4.2.11 INF_Fr_20_12_2024
....4.2.12 INF_Fr_10_01_2025
..4.3 FTS_day_by_day
....4.3.1 FTS_Mi_25_09_2024
....4.3.2 FTS_Mi_02_10_2024
....4.3.3 FTS_Mi_09_10_2024
....4.3.4 FTS_Mi_16_10_2024
....4.3.5 FTS_Mi_23_10_2024
....4.3.6 FTS_Mi_30_10_2024
....4.3.7 FTS_Mi_06_11_2024
....4.3.8 FTS_Mi_13_11_2024
....4.3.9 FTS_Mi_20_11_2024
....4.3.10 FTS_Mi_27_11_2024
....4.3.11 FTS_Mi_04_12_2024
....4.3.12 FTS_Mi_11_12_2024
....4.3.13 FTS_Mi_18_12_2024
6 Ing
..6.1 Bauplan
....6.1.1 Bootstick
....6.1.2 Xubuntu
....6.1.3 Webserver
....6.1.4 Hotspot
....6.1.5 Videostream
....6.1.6 Lampe
....6.1.7 Chassis
....6.1.8 Akku
....6.1.9 Motore
....6.1.10 Laborsteckboard
....6.1.11 Antriebstest
7 007
..7.1 Einschalten
..7.2 Vorversuche
kramann.info
© Guido Kramann

Login: Passwort:




Inhalte zur Vorlesungswoche #2, Entwicklung fehlertoleranter Software für eingebettete Echtzeitsysteme im Wintersemester 2024/25

(EN google-translate)

(PL google-translate)

Beschäftigung im Falle einer Verspätung:
  • Arbeiten Sie sich in die Java-basierte Entwicklungsumgebung Processing ein.
processing.org
  • Gehen Sie dazu die folgenden Beispiele praktisch am PC unter Xubuntu durch:
78_Processing/02_Erste_Schritte
  • Gehen Sie in Processing die verschiedenen Testbeispiele aus den Libraries durch (z.B. Datei->Beispiele->Basics->Image->LoadDisplayImage).
  • Gehen Sie diesen Beitrag zu Objektorientierung mit Processing durch und sammeln Fragen dazu:
10_Informatik1/05_Softwareentwicklung/03_Objektorientierung
  • Versuchen Sie hier die Aufgabe 6.3 und später eventuell auch 6.4 zu lösen:
10_Informatik1/01_day_by_day/06_LV_06_05_2024

Themen heute:

  1. Quiz
  2. Wiederholung zu Pattern für fehlertoleranten Software-Entwurf
  3. Verteilung der Pattern auf die Gruppen zur seminaristischen Behandlung
  4. Start mit den PCs mit Bootstick unter Xubuntu
  5. Einstieg mit dem Arduino NANO 33 IoT
  6. Überblick zu Java / Processing
  7. Übung

1 Quiz

  1. Erklären Sie den Begriff FAILURE.
  2. Erklären Sie den Begriff ERROR.
  3. Erklären Sie den Begriff FAULT.
  4. Wie lassen sich die drei Begriffe ins Deutsche überstzen?
  5. Nennen Sie mögliche Ursachen für das Auftreten von ERRORs.

2 Wiederholung zu Pattern für fehlertoleranten Software-Entwurf

81_FTSD/05_Fehlertoleranz

3 Verteilung der Pattern auf die Gruppen zur seminaristischen Behandlung


Pattern:

Mi 09.10.24 GRUPPE: A
1 Units of Mitigation
2 Correcting Audits

Mi 16.10.24 GRUPPE: C
3 Redundancy
4 Recovery Block

Mi 23.10.24 GRUPPE: D
5 Minimize Human Interaction  
6 Maximize Human Participation

Mi 30.10.24 GRUPPE:  E
7 Maintenance Interface
8 Someone in Charge

Mi 06.11.24 GRUPPE: B,F,G
9 Escalation       // B
10 Fault Observer  // G
11 Software Update // F


Code 0-1: Aufteilung

Behandlung der Pattern
  • Deutsche Übersetzung
  • Kurzbeschreibung
  • Stellung innerhalb der Hierarchie der Pattern
  • Anwendungsfälle
  • Hinweise zur Umsetzung
  • Vorstellung und Diskussion von Szenarien zur Anwendung innerhalb des Projektthemas

4 Start mit den PCs mit Bootstick unter Xubuntu

Um mit den PCs im PC-Pool Hotspots erstellen zu können, ist es im Moment notwendig, an den USB-Ports sowohl einen Linux-Bootstick zu verwenden, als auch einen W-LAN-Stick.

Der Linux-Bootstick verhält sich dabei wie eine externe Festplatte und verändert nichts an der sonst verfügbaren Installation auf dem PC.

Über F8 gelangt man beim Start der PCs in das Bootmenü und kann dort den USB-Stick auswählen.

Legen Sie im HOME-Verzeichnis einen Ordner an, in dem Sie die von Ihnen entwickelten Materialien speichern. Sichern Sie sich das, was Sie in einer Sitzung erarbeitet haben am besten zusätzlich auf einem privaten USB-Stick.

Damit Daten vom Arduino an den PC gesendet und dort weiterverarbeitet werden können, müssen verschiedene Bedingungen erfüllt sein:

  • Ein Hotspot muss am PC erstellt worden sein.
  • Der PC muss bei dem Hotspot angemeldet sein.
  • Der Arduino muss bei dem Hotspot angemeldet sein.
  • Ein Processing-Programm muss eine Verbindung mit dem Arduino herdstellen.

Das funktioniert nur, wenn...

  1. Die Hotspot SSID und das Passwort in der Arduino-Software richtig eingetragen sind.
  2. Die IP-Adresse des Arduino im Hotspotnetz bekannt ist und im Processing-Programm richtig eingetragen ist.

Jede Gruppe muss einen Hotspot mit einem anderen Namen erstellen. Grundlage soll der Name der Gruppe sein, also A,B,C,D.



hotspotA
hotspotB
hotspotC
hotspotD


Code 0-2: Hotspotnamen.

So wird ein Hospot erstellt: kramann.info/06_Ing/01_Bauplan/04_Hotspot
ÜBUNG
  1. Starten Sie einen der PCs mit Bootstick und W-LAN-Stick.
  2. Richten Sie den passenden Hotspot ein.
  3. Nutzen Sie parallel einen benachbarten PC, um weiter ins Internet zu kommen und diese Seite offen halten zu können, oder öffnen Sie VOR dem Erstellen des Hotspots alle Anleitungen.
  4. Bringen Sie dann einen Arduino NANO 33 IoT zum Laufen und testn ihn mit der ebenfalls verfügbaren Processing-Software, um Beschleunigungsdaten abzurufen.

HINWEIS: Für diese Übung bleibt der Arduino die ganze Zeit einfach über USB-Kabel mit dem PC verbunden.

5 Einstieg mit dem Arduino NANO 33 IoT

Damit der Arduino NANO 33 IoT über die Arduino Entwicklungsumgebung programmiert werden kann, müssen dort zwei neue Libraries installiert werden, eine für den Crosscompiler und eine, die die Verwendung des IMU ermöglicht.

Unter nachfolgendem Link werden die grundlegenden Schritte gezeigt, um Beschleunigungsdaten mit dem Arduino NANO 33 IoT zu erfassen, per WiFi an einen Laptop zu senden und dort mit einem Java/Processing-Sketch weiter zu verarbeiten:

96_Arduino/30_Arduino_33_nano_IoT

Um diese Art der Datenkommunikation zu ermöglichen, ist es sinnvoll, dass auf dem Laptop ein Hotspot erzeugt wird und der Laptop als auch der Arduino sich mit diesem Hotspot verbinden. Wie das auf der Laptop-Seite unter Xubuntu geht, wird hier gezeigt:

06_Ing/01_Bauplan/04_Hotspot

6 Überblick zu Java / Processing

30_Informatik3/09_Java
78_Processing
92_Soundinstallation/03_material/11_Snippets
int x=0;
int y=0;
int z=0;

public void setup()
{
    size(600,300);
    frameRate(30);
}

public void draw()
{
    background(x,y,z);
    fill(255,0,0);
    rect(0,0,100,100);
    fill(0,255,0);
    rect(100,0,100,100);
}

public void mousePressed()
{
    if(mouseX<100 && mouseY<100)
    {
        x=255;
        y=0;
        z=0;
    }
    if(mouseX>100 && mouseX<200 && mouseY<100)
    {
        x=0;
        y=255;
        z=0;
    }
}

Code 0-3: Sketch, der auf Klicks die Hintergrundfarbe ändert. Im Unterricht eines früheren Kurses entstanden.

7 Übung

  • Analysieren und testen Sie das Arduino-Processing-Programm-Paar hier ganz unten unter "UPDATE 1 IMU Datenaustausch":
96_Arduino/30_Arduino_33_nano_IoT

HINWEIS: Passen Sie vor dem Test die SSID des Hotspots im Arduino-Part an Ihren eigenen Hotspot an.


  • Die Komponenten der Beschleunigungsdaten und die der Gyroskopdaten werden bei dem Processing-Programm im Fenster dargestellt.
  • Modifizieren Sie das Processing-Programm so, dass ein farbiger Kreis in seiner horizontalen und vertikalen Position im Fenster mittels zweier Komponenten der Beschleunigungsdaten gesteuert wird.
Im Unterricht entwickelte Sketche mit Processing:
public void setup()
{
    size(640,480);
    frameRate(30);
}

public void draw()
{
    background(0,0,255);
    fill(255,0,0);
    //stroke(0,255,0);
    noStroke();
    //noFill();
    ellipse(320,240,100,100);
}

Code 0-4: Test1001

int x = 0;
public void setup()
{
    int y = 0;
    size(640,480);
    frameRate(30);
}
public void draw()
{
    background(0,0,255);
    fill(255,0,0);
    //stroke(0,255,0);
    noStroke();
    //noFill();
    ellipse(x,240,100,100);
    x=x+5;
    if(x>640) x=0;
}

Code 0-5: Test1002

int x = 0;  // Variable für die horizontale Position des Kreises
public void setup()
{
    int y = 0;  // Lokale Variable 'y', wird jedoch nicht weiter verwendet
    size(640,480);  // Setzt die Größe des Fensters auf 640x480 Pixel
    frameRate(30);  // Setzt die Bildrate (fps) auf 30 Bilder pro Sekunde
}
public void draw()
{
    background(0,0,B);  // Setzt den Hintergrund mit einer blauen Farbkomponente, die durch 'B' gesteuert wird
    fill(255,0,0);  // Setzt die Füllfarbe auf Rot für die nächste Form
    //stroke(0,255,0);  // Kommentar: Grüne Kontur (nicht verwendet)
    noStroke();  // Deaktiviert jegliche Kontur für Formen
    //noFill();  // Kommentar: Kein Füllfarbmodus (nicht verwendet)
    ellipse(x, my, 100, 100);  // Zeichnet einen Kreis mit Durchmesser 100 an der Position (x, my)
    textSize(40);  // Setzt die Schriftgröße auf 40 Pixel
    fill(255,255,255);  // Setzt die Füllfarbe auf Weiß für den Text
    text("HALLO x=" + x, 60, 60);  // Zeigt den Text "HALLO x=<x-Wert>" an der Position (60, 60) an
    x = x + 5;  // Erhöht den Wert von x um 5, bewegt den Kreis nach rechts
    if (x > 640) x = 0;  // Setzt x zurück auf 0, wenn der Kreis den rechten Rand erreicht (beim Überschreiten der Fensterbreite)
}
int B = 255;  // Anfangswert für die blaue Hintergrundfarbe
int mx = 0;  // Variable für die x-Position der Maus (initial 0)
int my = 0;  // Variable für die y-Position der Maus (initial 0)
public void keyPressed()
{
    if (key == ' ')  // Wenn die Leertaste gedrückt wird
        B = 0;  // Setzt die blaue Hintergrundfarbe auf 0 (schwarz)
}
public void mouseClicked()
{
    mx = mouseX;  // Speichert die aktuelle x-Position der Maus bei einem Mausklick
    my = mouseY;  // Speichert die aktuelle y-Position der Maus bei einem Mausklick
}

Code 0-6: Test1003 -- mit chatGPT kommentiert.

Hinweise dazu von chatGPT:

  • Der Kreis bewegt sich in jedem Frame von links nach rechts, mit einer Geschwindigkeit von 5 Pixeln pro Frame. Wenn er den rechten Rand erreicht (x > 640), springt er zurück zum linken Rand (x = 0).
  • Der Kreis wird an der Position (x, my) gezeichnet, wobei my sich beim Klicken der Maus auf die y-Position der Maus setzt.
  • Wenn die Leertaste gedrückt wird, ändert sich die Hintergrundfarbe zu Schwarz (weil B = 0 gesetzt wird), ansonsten bleibt der Hintergrund blau (B = 255).
  • Auf dem Bildschirm wird zusätzlich der Text "HALLO x=" angezeigt, der den aktuellen x-Wert des Kreises ausgibt.