kramann.info
© Guido Kramann

Login: Passwort:










Robuste Systemintegration
1 Grundlagen
..1.1 Newton
....1.1.1 LinearSchwinger
....1.1.2 Daempfung
....1.1.4 ODE
....1.1.5 Saaluebung
..1.2 NewtonEuler
....1.2.1 Traegheitsmomente
....1.2.2 Modellgleichungen
....1.2.3 Einfachpendel
..1.3 Scilab
....1.3.1 Erste_Schritte
....1.3.2 Skripte
....1.3.3 Funktionen
..1.4 Laplace
....1.4.1 Eigenwerte
....1.4.2 PT1
..1.5 Regleroptimierung
....1.5.1 Guetefunktion
....1.5.2 Heuristiken
....1.5.3 Scilab
..1.6 Einstellregeln
....1.6.1 Totzeit
....1.6.2 Methode1
....1.6.3 Methode2
....1.6.4 Scilab
..1.7 Zustandsregler
..1.8 Polvorgabe
..1.8 Polvorgabe_alt
..1.9 Beobachter
....1.9.1 Haengependel
..1.10 Daempfungsgrad
..1.11 Processing
....1.11.1 Installation
....1.11.2 Erste_Schritte
....1.11.3 Mechatronik
....1.11.4 Bibliotheken
....1.11.5 Uebung
....1.11.6 Snippets
......1.11.6.1 Dateioperationen
......1.11.6.2 Bilder
......1.11.6.3 GUI
......1.11.6.4 Text
......1.11.6.5 PDF
......1.11.6.8 Maus
......1.11.6.10 Zeit
......1.11.6.13 Animation
......1.11.6.15 Simulation
....1.11.7 Referenzen
..1.12 Breakout
2 Beispiel
3 Beispielloesung
4 Praxis
5 javasci
6 Fehlertoleranz1
7 Reglerentwurf
..7.1 Sprungantwort
..7.2 Messdaten
..7.3 Systemidentifikation
..7.4 Polvorgabe
..7.5 Beobachter
..7.6 Robuster_Entwurf
..7.7 SIL
8 Systementwicklung
9 Arduino
..9.1 Lauflicht
..9.2 Taster
..9.3 Sensor
..9.12 Motor_PWM1
..9.13 Motor_PWM2_seriell
..9.14 Motor_PWM3_analogWrite
..9.15 Scheduler
..9.20 AV
..9.21 Mikrofon
..9.22 Universal
....9.22.1 Laborplatine
....9.22.2 LED_Leiste
....9.22.3 Motortreiber
....9.22.4 Sensoreingaenge
....9.22.5 Taster
....9.22.6 Tests
....9.22.7 Mikrofon
....9.22.8 Lautsprecher
....9.22.9 Fahrgestell
..9.23 Zauberkiste
..9.24 OOP
....9.24.1 Uebungen
..9.25 AVneu
....9.25.1 Tests
..9.26 DA_Wandler
..9.27 CompBoard
....9.27.1 Tastenmatrix
....9.27.2 ASCIIDisplay
..9.28 CTC
..9.29 Tonerzeugung
10 EvoFuzzy
..10.1 Fuzzy
....10.1.1 Fuzzylogik
....10.1.2 FuzzyRegler
....10.1.3 Uebung9
....10.1.5 Softwareentwicklung
......10.1.5.1 AgileSoftwareentwicklung
......10.1.5.2 FuzzyRegler
......10.1.5.3 Uebung
....10.1.6 Umsetzung
......10.1.6.1 FuzzyRegler
......10.1.6.2 Simulation
......10.1.6.3 Optimierung
......10.1.6.4 Uebung
....10.1.7 Haengependel
......10.1.7.1 Haengependel
......10.1.7.2 Simulation
......10.1.7.3 FuzzyRegler
......10.1.7.4 Optimierer
......10.1.7.5 Genetisch
....10.1.8 Information
....10.1.9 Energie
..10.2 Optimierung
....10.2.1 Gradientenverfahren
....10.2.2 Heuristiken
....10.2.3 ModifizierteG
....10.2.4 optim
..10.3 Genalgorithmus
..10.4 NeuronaleNetze
....10.4.1 Neuron
....10.4.2 Backpropagation
....10.4.3 Umsetzung
....10.4.4 Winkelerkennung
..10.5 RiccatiRegler
11 Agentensysteme
12 Simulation
20 Massnahmen
21 Kalmanfilter
..21.1 Vorarbeit
..21.2 Minimalversion
..21.3 Beispiel
30 Dreirad
31 Gleiter
..31.1 Fehlertoleranz
1.11.6.1 Dateioperationen bei Processing

String-Zeilen speichern und einlesen

Der Speicherort ist Default-mäßig der Ordner, in dem auch der aktuell laufende Sketch gespeichert ist. Es ist aber auch möglich, absolute Pfade anzugeben.

void setup()
{
    String text = "Zeile eins\nZeile zwei\n\n  \nZeile drei\n\n";

    saveStrings("test.txt",new String[] {text});
    
    String lines[] = loadStrings("test.txt");
  
    for(int i=0;i<lines.length;i++)
    {
        println(i+".:"+lines[i]);
    }  
}

Code 1.11.6.1-1: Beispiel

0.:Zeile eins
1.:Zeile zwei
2.:
3.:  
4.:Zeile drei
5.:
6.:

Code 1.11.6.1-2: Konsolenausgabe

split() - Strings zerlegen

void setup()
{
    String text = "Zeile eins\nZeile zwei\n\n  \nZeile drei\n\n";

    String woerter[] = split(text,'\n');
  
    for(int i=0;i<woerter.length;i++)
    {
        println(i+".:"+woerter[i]);
    }  
}

Code 1.11.6.1-3: Beispiel

0.:Zeile eins
1.:Zeile zwei
2.:
3.:  
4.:Zeile drei
5.:
6.:

Code 1.11.6.1-4: Konsolenausgabe

splitTokens() - Strings zerlegen

Die split-Methode ist etwas störanfällig, wenn zwischen den Betriebssystemen gewechselt wird. Sicherer ist eine Methode splitTokens(), die auf White-Spaces zwischen den Wörtern prüft und danach zerlegt. Dies wird im folgenden umgesetzt:

void setup()
{
    String text = "Zeile eins\nZeile zwei\n\n  \nZeile drei\n\n";

    String woerter[] = splitTokens(text);
  
    for(int i=0;i<woerter.length;i++)
    {
        println(i+".:"+woerter[i]);
    }  
}

Code 1.11.6.1-5: Beispiel

0.:Zeile
1.:eins
2.:Zeile
3.:zwei
4.:Zeile
5.:drei

Code 1.11.6.1-6: Konsolenausgabe

Zahlen-Arrays mit Hilfe der Table-Methode speichern und laden

void setup()
{
    double[][] matrix = {{1.0,2.0},{3.0,4.0}};
    
    Table tabelle = createTable();
    for(int spalten = 0;spalten<matrix[0].length;spalten++)
        tabelle.addColumn("Spalte Nr."+spalten);
        
    for(int zeile=0;zeile<matrix.length;zeile++)
    {
        TableRow ts = tabelle.addRow(); 
        for(int spalte=0;spalte<matrix[zeile].length;spalte++)
        {
            ts.setDouble(spalte,matrix[zeile][spalte]);
        }
    }    
    
    saveTable(tabelle,"tabelle.csv");
    
    
    Table tabelle2 = loadTable("tabelle.csv", "header");
    
    println(tabelle2.getRowCount() + " Tabellenspalten");
    
    for(TableRow row : tabelle2.rows())
    { 
        for(int i=0;i<2;i++)
        {
            print(row.getDouble(i)+" ");
        }            
        println();            
    }            
}

Code 1.11.6.1-7: Beispiel

2 Tabellenspalten
1.0 2.0 
3.0 4.0 

Code 1.11.6.1-8: Konsolenausgabe

2 Tabellenspalten
Spalte Nr.0,Spalte Nr.1
1.0,2.0
3.0,4.0

Code 1.11.6.1-9: Datei tabelle.csv


Satt eines Dateinamens, kann als Quelle der Tabelle auch eine URL angegeben werden. Hier ein Test:


tabelle.csv wurde vorher nach /mnt-system/soja/htdocs kopiert und der lokale Server gestartet.

void setup()
{
    Table tabelle2 = loadTable("http://localhost:8000/tabelle.csv", "header");
    
    println(tabelle2.getRowCount() + " Tabellenspalten");
    
    for(TableRow row : tabelle2.rows())
    { 
        for(int i=0;i<2;i++)
        {
            print(row.getDouble(i)+" ");
        }            
        println();            
    }            
}

Code 1.11.6.1-10: Beispiel, bei dem eine Tabelle von einem Server geladen wird. Die Spalten müssen durch Kommata getrennt sein.

2 Tabellenspalten
1.0 2.0 
3.0 4.0 

Code 1.11.6.1-11: Konsolenausgabe

Tabellen und Strings (Beispiel aus Processing-Reference)

Table table;

void setup() 
{

  table = createTable();
  
  table.addColumn("id");
  table.addColumn("species");
  table.addColumn("name");
  
  TableRow newRow = table.addRow();
  newRow.setInt("id", table.getRowCount() - 1);
  newRow.setString("species", "Panthera leo");
  newRow.setString("name", "Lion");
  TableRow newRow2 = table.addRow();
  newRow2.setInt("id", table.getRowCount() - 1);
  newRow2.setString("species", "Kleines Nagetier");
  newRow2.setString("name", "Hamster Mopsi");
  
  saveTable(table, "tabelle2.csv");
  
  table = loadTable("tabelle2.csv", "header");

  println(table.getRowCount() + " total rows in table"); 

  for (TableRow row : table.rows()) 
  {
    
    int id = row.getInt("id");
    String species = row.getString("species");
    String name = row.getString("name");
    
    println(name + " (" + species + ") has an ID of " + id);
  }  
}

Code 1.11.6.1-12: Beispiel

2 total rows in table
Lion (Panthera leo) has an ID of 0
Hamster Mopsi (Kleines Nagetier) has an ID of 1

Code 1.11.6.1-13: Konsolenausgabe

id,species,name
0,Panthera leo,Lion
1,Kleines Nagetier,Hamster Mopsi

Code 1.11.6.1-14: Datei tabelle2.csv


Alternative zum CSV-Format mit Kommatrennung ist das tsv-Format mit Tab-Trennung.