Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: hwcom sync-Probleme? Kategorie: Programmierung (von Tom - 6.08.2003 21:55)
Als Antwort auf hwcom sync-Probleme? von skontox - 4.08.2003 11:59

Hallo Skontox,

ich denke das ein Thread sich nur um die Serielle Schnittstelle kümmern sollte.

1.Erkennen des Anfangs
2.Empfangen der Daten
3.Vergleichen der Daten mit dem letzten Frame
4.Daten in globalen Variablen zur Verfügung stellen
5.Globale Daten für geändert erklären
6.und das ganze von vorne

zu 3. Vergleichen der Daten mit dem letzten Frame
Da ich denke das sehr viele Frames gleich sind sollte der Empfäger die Daten mit
dem letzten Frame vergleichen, und nur bei �nderungen Punkt 4. und 5. ausführen.
Das hat den Vorteil das dein Thred, der auf die geänderten Daten reagieren soll nur
dann reagiert, wenn auch geänderte Daten vorhanden sind, und nicht auf jeden
Frame. Das sollte enorm Rechenzeit sparen. Bei den globalen Variablen muÃ?t Du nur
beachten das in einem Multi Thread Programm auch die Captures und Releases für
das eintragen und auslesen der Daten sauber sind, sonst gibt's Chaos.Wie Du schreibst
willst Du später mal einen 6-Achs Roboter steuern.Ich denke jedoch das dies wenn
überhaupt nur mit ASM gelingen wird.

Wenn Du noch Fragen zu den Globalen Variablen und Captures und Releases hast, poste
einfach wieder.

mfg Tom


> Ein wunderschönen Tag!
> Ich habe die CC2 mit einem Datenhandschuh über die RS232-Schnittstelle mit 9600 Baut gekoppelt!
> Problem ist, dass der Handschuh seine Daten permanent sendet (kein Empfang möglich!) und ich bei grö�eren
> Berechnungen mit den empfangenen Werten Probleme mit der Synkronisation mit dem Empfang habe.
> Bei kleineren Berechnungen läuft es ganz gut!
> Was kann man da machen? Wahrscheinlich ist mein Code auch nicht so super, aber auf die Schnelle
> viel mir nix besseres ein.
> Zum Testen habe ich hier einen ferngesteuerten Wagen über den Handschuh gesteuert.
> D.H der Handschuh hat einen Bewegungssensor. Wenn der Handschuh nach vorne kippt, dann würde
> der Wagen nach vorne fahren. Wenn der Handschuh nach hinten kippt nach hinten. Und nach rechts und links,
> dann würde der Wagen nach rechts und links fahren, das klappt auch fast immer, aber manchmal bekommt er halt
> Probleme mit der Synkronisation. Um den Wagen zusteuern, werden einfach Port 0,1,2,3 benutzt.
> Diese Ports ersetzen die Knöpfe an der Fernbedienung!
> Hier mal mein Beispiel-Code:
>
>
> function Glove_Miniwagen()
> {
>   setzte_int_Display("Glo-Mini"); //Funktion für die interne LCD-Anzeige
>   sleep 1000;
>
>   //# Glove_Erkennung #
>   Glove_Erkennung (); //Um zuerkennen, ob ein Handschuh angeschlossen ist.
>  
>   //Erneute Erkennung zur Synchronisation und Datenerfassung
>   // Variablen deklarieren  
>   int empfang1,empfang2,syncerror_flag,syncerror2_flag,poweron_flag;
>   int count,linkswert,rechtswert;
>   float links, rechts, wert;
>   string ueberwachung;
>   syncerror_flag=0;
>   syncerror2_flag=0;
>   poweron_flag=0;
>  
>   //Hardware-RS232-Schnittstelle initialisieren
>   hwcom.init();
>   hwcom.setspeed(5); //9600 Baud
>  
>   while syncerror_flag!=1
>   {
>     syncerror2_flag=0;
>     wait hwcom.rxd();
>     empfang1= hwcom.get();
>     if empfang1==1  //Endzeichen im Paket
>     {
>        wait hwcom.rxd();
>        empfang2= hwcom.get();
>        if empfang2==128  //Startzeichen im Paket
>        {
>           while syncerror2_flag!=1
>           {
>              for count = 1 ... 10
>              {
>                  wait hwcom.rxd();
>                  wert= hwcom.get();
>                  
>                  if count==6 //Enthält den "Pitch"-Wert Wert 255 ganz nach vorne gekippt!
>                                   //Wert 0 ganz nach hinten. 127 genau die Waage
>                  {
>                     if wert>=130 and wert<=155 //Der Wagen soll nicht fahren!
>                     {
>                        ports.set(0,0); //Vorwärts ist aus
>                        ports.set(1,0); //Rückwärts ist aus
>                     }
>                     if wert<130  //Der Wagen soll Rückwärts fahren
>                     {
>                        ports.set(0,0); //Vorwärts ist aus
>                        ports.set(1,1); //Rückwärts ist an
>                     }
>                     if wert>155 //Der Wagen soll Vorwärts fahren
>                     {
>                        ports.set(1,0); //Rückwärts ist aus
>                        ports.set(0,1); //Vorwärts ist an
>                     }
>                  }
>                  if count==7 //Enthält den "Roll"-Wert Wert 255 ganz nach vorne gekippt!
>                                   //Wert 0 ganz nach hinten. 127 genau die Waage
>                  {
>                     if wert>=100 and wert<=155 //Der Wagen soll nicht lenken!
>                     {
>                        ports.set(2,0); //Rechts ist aus
>                        ports.set(3,0); //Links ist aus
>                     }
>                     if wert<100
>                     {
>                        ports.set(2,0); //Rechts ist aus
>                        ports.set(3,1); //Links ist an
>                     }
>                     if wert>155
>                     {
>                        ports.set(3,0); //Links ist aus
>                        ports.set(2,1); //Rechts ist an
>                     }
>                  }
>                  if count==9 //Endzeichen des Paketes muÃ? 1 sein
>                  {
>                     if wert!=1
>                     {
>                        syncerror2_flag=1;
>                     }
>                  }
>              }
>           }
>        }
>     }
>   }
>   Portsoff(); //diese Funktion setzt die verwendeten Ausgangsport wieder auf 0
>   setzte_int_Display("Sy-Error"); //Funktion für die interne Anzeige
>   sleep 1000;
>   setzte_int_Display("Auswahl");
> }
>

>
> Vielleicht kann mir mal jemand einen Tipp geben, sprich bessere Vorgehensweise
> in Verbindung mit der hwcom-Schnittstelle!
>
> GruÃ? skontox
>  




    Antwort schreiben


Antworten:

Re: hwcom sync-Probleme? (von Fischi - 7.08.2003 18:40)
Re: hwcom sync-Probleme? (von Rolf - 6.08.2003 22:46)
    Re: hwcom sync-Probleme? (von Fischi - 7.08.2003 18:41)