kramann.info
© Guido Kramann

Login: Passwort:










COACH2
1 Planung
2 Architektur
3 Anzeige
4 EEPROM
5 I2C
..5.1 MasterSendByte
..5.2 MasterSend2Bytes
..5.3 MasterReceiveByte
..5.4 MasterReceive2Bytes
6 UART
7 DFT
8 FFT
9 Planung2
10 Klassen
..10.1 AnzeigeTaster
..10.2 RS232
..10.3 MotorServo
..10.4 Drehgeber
..10.5 Sensor
..10.6 Funk
11 Adaption
..11.1 Programmiertechnik
..11.2 Evoopt
12 Fuzzy
..12.1 Uebungsaufgabe
..12.2 Fuzzygroesse
..12.3 Fuzzyset
..12.4 Lookuptable
13 Skript
..13.1 Funkkorrektur
..13.2 Skriptsprachen
..13.3 Anforderungen
..13.4 Agentensysteme
..13.5 Implementierung
..13.6 Experimente
14 Gesamtkonzept
..14.1 Skripterweiterung
..14.2 Makroverhalten
67 Echtzeitsysteme
..67.1 Einfuehrung
....67.1.1 Echtzeit
....67.1.2 Korrektheit
....67.1.3 Hardware
....67.1.4 Ziele
....67.1.5 Synchronprogramm
..67.2 Threads
....67.2.1 Java
....67.2.2 Synchronisierung
..67.3 COACH
....67.3.1 Kaskadenregler
....67.3.2 Zeitebene1
....67.3.3 Zeitebene2
....67.3.4 Zeitebene3
....67.3.5 Puck
....67.3.6 Puckschwarm
..67.4 RTAIlab
....67.4.1 Slax
....67.4.1 USB_Stick
....67.4.2 Sinus
..67.5 Semaphor
....67.5.1 Laufkatze
....67.5.2 Java
....67.5.3 Semaphor
..67.6 Audio
....67.6.1 wav
....67.6.2 Linux
..67.7 Lookup
....67.7.1 Fuzzy
....67.7.2 PWM
..67.8 NeuronaleNetze
....67.8.1 Neuron
....67.8.2 Backpropagation
....67.8.3 Umsetzung
....67.8.4 Winkelerkennung
..67.9 Internetprogrammierung
....67.9.1 Codegenerierung
....67.9.2 PHP_Programmierung
....67.9.3 PHP_OOP
....67.9.4 Java
....67.9.5 UDP
..67.10 DFT
..67.11 FFT
..67.12 Zustandsmaschine
..67.13 Fuzzy
....67.13.1 Fuzzylogik
....67.13.2 FuzzyRegler
....67.13.3 Uebung9
....67.13.5 Softwareentwicklung
......67.13.5.1 AgileSoftwareentwicklung
......67.13.5.2 FuzzyRegler
......67.13.5.3 Uebung
....67.13.6 Umsetzung
......67.13.6.1 FuzzyRegler
......67.13.6.2 Simulation
......67.13.6.3 Optimierung
......67.13.6.4 Uebung
....67.13.7 Haengependel
......67.13.7.1 Haengependel
......67.13.7.2 Simulation
......67.13.7.3 FuzzyRegler
......67.13.7.4 Optimierer
......67.13.7.5 Genetisch
....67.13.8 Information
....67.13.9 Energie

13.6 Experimente zu Skript und Funk für COACH 2.2

  • Ausgehend von dem letzten Projekt "coach2.2_06_funk_PA7_plus5Volt" werden zunächst ohne Einführung neuer Header-Dateien Experimente zu Funkübertragung und Skripten durchgeführt.

Senden und Empfangen

  • Bislang wurde das "Pollin-Evaluationsboard" als Empfangsstation verwendet.
  • Durch Verwendung des Funk- und RS232-Teile eines COACH2.2-Boards soll nun über das Hyperterminal Kommunikation in beide Richtungen möglich werden.
1. Von Vehikel an Station senden
experiment01_station_an_vehikel.zip - Projekt-Download.
    while(true)
    {
        funk.sendeText("Sensorwert:\n");
        for(pause=0;pause<5000000;pause++);
    }

Code 13.6-1: Wesentlicher Code bei Vehikel

    while(true)
    {
        text = funk.empfangeText();
        rs232.sendeText(text); 
        rs232.sendeText("\n\r"); 
    }

Code 13.6-2: Wesentlicher Code bei Station

2. Beliebige Textzeile von Station an Vehikel senden und von dort wieder zurück
experiment02_befehl_quittieren.zip - Projekt-Download
        while(true)
    {
             text = funk.empfangeText();
             rs232.sendeText("Es wurde folgender Text empfangen:\n\r+++");
             rs232.sendeText(text);
             rs232.sendeText("+++\n\r");
             rs232.sendeText("Dieser wird gleich zurückgesendet.\n\r");
             for(pause=0;pause<5000000;pause++);
             funk.sendeText(text);
    }

Code 13.6-3: Wesentlicher Code bei Vehikel

        while(true)
    {
            for(pause = 0;pause<5000000;pause++);
            rs232.sendeText("Geben Sie eine Textzeile ein (Quittieren mit #):\n\r"); 
            text = rs232.holeText(true); 
            rs232.sendeText("Es wird nun folgender Text per Funk gesendet:\n\r+++"); 
            rs232.sendeText(text); 
            rs232.sendeText("+++\n\r"); 
            funk.sendeText(text);
            text = funk.empfangeText();
            rs232.sendeText("Das Vehikel hat folgendes empfangen:\n\r+++"); 
            rs232.sendeText(text); 
            rs232.sendeText("+++\n\r"); 
    }

Code 13.6-4: Wesentlicher Code bei Station

3. Übertragung eines rudimentären Skripts
experiment03_skript.zip - Projekt-Download
class Befehle
{
    private:
        unsigned long pause;
    public:
        void tudies()
        {
            rs232.sendeText("Tue dies.\n\r");
            funk.sendeText("Tue dies.");
            for(pause=0;pause<50000;pause++);
        }    
        void tudas()
        {
            rs232.sendeText("Tue das.\n\r");
            funk.sendeText("Tue das.");
            for(pause=0;pause<50000;pause++);
        }    
        void tujenes()
        {
            rs232.sendeText("Tue jenes.\n\r");
            funk.sendeText("Tue jenes.");
            for(pause=0;pause<50000;pause++);
        }    
};
...
int main(void)
{
...
    Befehle befehle;
    void (Befehle::*zeiger[3])(void) = {
                                         &Befehle::tudies,  
                                         &Befehle::tudas,
                                         &Befehle::tujenes,
                                       };    
...
    while(true)
    {
        //Skript empfangen
        text = funk.empfangeText();
        rs232.sendeText("Es wurde folgender Text empfangen:\n\r+++");
        rs232.sendeText(text);
        rs232.sendeText("+++\n\r");
        rs232.sendeText("Dieser wird gleich zurückgesendet.\n\r");
        for(pause=0;pause<5000000;pause++);
        funk.sendeText(text);
        //Skript 10 mal durcharbeiten:
        for(ii=0;ii<10;ii++)
        {
            rs232.sendeText("Durchlauf Nr.");
            rs232.sendeInteger(ii);
            rs232.sendeText("des Skripts:\n\r");
            funk.sendeText("Nächster Durchlauf des Skripts");
            kk=0;
            while(text[kk]!=';')
            {
               (befehle.*(zeiger[text[kk]-65]))();                
               kk++;
            }
            for(pause=0;pause<5000000;pause++);
        }
        funk.sendeText("????????????????");
    }
...

Code 13.6-5: Wesentlicher Code bei Vehikel

    while(true)
    {
        for(pause = 0;pause<5000000;pause++);
        rs232.sendeText("Geben Sie eine Skriptzeile ein (Quittieren mit #):\n\r"); 
        rs232.sendeText("Beispiel:ABABBCCA;\n\r"); 
        text = rs232.holeText(true); 
        rs232.sendeText("Es wird nun folgender Text per Funk gesendet:\n\r+++"); 
        rs232.sendeText(text); 
        rs232.sendeText("+++\n\r"); 
        rs232.sendeText("Das Vehikel zeigt an, wenn es bereit ist,\n\r"); 
        rs232.sendeText("das nächste Skript zu verarbeiten.\n\r"); 
        funk.sendeText(text);
        //Auf Rücksendung des Skripts warten:
        text = funk.empfangeText();
        rs232.sendeText("Das Vehikel hat folgendes empfangen:\n\r+++"); 
        rs232.sendeText(text); 
        rs232.sendeText("+++\n\r"); 
        //Auf Abschluß der Abarbeitung des Skripts warten:
        while(text[0]!='?')
        {
            text = funk.empfangeText();
            rs232.sendeText(text); 
            rs232.sendeText("\r"); 
        }
    }

Code 13.6-6: Wesentlicher Code bei Station