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

Re: hwcom sync auf Datenrahmen Kategorie: Programmierung (von Newbie - 16.09.2011 15:32)
Als Antwort auf hwcom sync auf Datenrahmen von Newbie - 16.09.2011 12:05
Ich nutze:
C-Control II Station, OSOPT V3.1
Ignorieren bitte :-)

Der Fehler war mal wieder perfide. Ich hatte nicht in allen Modulen main umbenannt. Da half es auch
nicht, den run-Befehl im Hauptprogramm auszukommentieren - der zweite Thread startete trotzdem.

Deshalb der "Salat".

Funktioniert alles Tip-top.



> �ber die serielle Schnittstelle will ich regelmässige Datenrahmen empfangen. Bisher hat das ganz gut
> geklappt, wenn ich dies im Stile Anfrage -> Antwort gemacht habe.
> Ein anderes Gerät sendet regelmässig (ca. 1x pro Sekunde) einen Datenrahmen. In meinem Fall 9 Byte.
>
> Ich muss nun darauf synchronisieren und dann auswerten - aber irgendwie sehe ich den Wald vor lauter
> Bäumen nicht..
>
>
> thread COM
> {
> byte buffer[32];            //2ter serieller Buffer
> byte length;
> int Wert1;
> int Wert2;
> int Wert3;
> byte Flag1;
> byte Flag2;
> byte Flag3;
>
> long timer;
>
> mem.fill(buffer,32,0x00);   //Löschen
>
> loop
> {
>
> wait hwcom.ready();
>
> length=hwcom.receive(buffer,9,500);   //Kürzerer Horizont als der Sendetakt!!
> lcdext.clear();lcdext.zahl(length);   //Debug Info
> if length!=9                      //Wenn unkorrekte Anzahl - unsynchronisiert
>          {
>           mem.fill(buffer,9,0x00);
>           hwcom.flush();                //Buffer verwerfen
>           wait hwcom.rxd();             //Warten auf nächsten Rahmen
>           continue;
>          }                              //direkt weiter
> else
>             {
>            
>             Wert1=mem.getint(buffer,0);                        
>             Wert2=mem.getint(buffer,2);                    
>             Wert3=mem.getint(buffer,4);                  
>             Flag1=buffer[6];
>             Flag2=buffer[7];
>             Flag3=buffer[8];
>            
>             wait hwcom.ready();
>             hwcom.send(buffer,9);  //Echo
>
>    
>             }
>
> }
>
>

>
> Nun habe ich dies mit einem Terminal-Programm getestet - wie die anderen Funktionen auch.
>
> Aber es will einfach nicht klappen! Ich sende über ein Terminal folgendes im 1 Sekunden Takt (zum Testen):
>
> x01xF4x00xF0x01x2Cx01x01x01
>
> also 9 Byte. Eigentlich hätte ich gedacht, das ich spätestens beim 2ten Senden synchronisiert bin.
>
> Aber weit gefehlt. Klappt gar nicht. Auf dem Display wird angezeigt, das weniger Bytes empfangen wurden.
>
> Aber bei 9600Baud sollten doch 9 Byte wirklich viel Schneller übertragen werden als der Timeout?
>
> Wer hat sowas schon mal gemacht? Bessere Ansätze sind gern gesehen..


    Antwort schreiben


Antworten:

Re: hwcom sync auf Datenrahmen (von Newbie - 16.09.2011 16:26)