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 Fischi - 7.08.2003 18:40)
Als Antwort auf Re: hwcom sync-Probleme? von Tom - 6.08.2003 21:55

Hallo Tom!
Dir auch besten Dank für Deine Idee. Hört sich gut an!
Ich werde das einfach mal mit einem Tread probieren.

GruÃ? Fischi alla skontox!

#########


> 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: