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

Re: Problem mit hwcom Sende und Empfangsthread Kategorie: Programmierung (von André H. - 8.01.2006 15:51)
Als Antwort auf Problem mit hwcom Sende und Empfangsthread von ACU - 30.12.2005 17:06
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
Hallo ACU,

Ich kenne das von dir genannte Funkmodul nicht.
Aber ich vermute, ohne Deine Routinen angesehen zu haben, daÃ? das Tranceivermodul
einfach keinen Voll-Duplex-Betrieb zulässt.
D.h., es kann nicht gleichzeitig gesendet und empfangen werden.
Wenn das so ist, darfst Du nur einen Thread für die Kommunikation verwenden und solltest
mit einem �bertragungsprotokoll arbeiten, bei dem eine Seite die Rolle des Masters übernimmt.
D.h., der PC sollte die Daten immer anfordern, anstatt, daÃ? die die CC2 non-stop von selbst sendet.
Die nächste Möglichkeit wäre, einfach mit zwei Funkmodulen auf unterschiedlichen Kanälen zu arbeiten.
Je eines für jede Datenrichtung. Allerdings sollten diese auf jeder seite räumlich nicht zu dicht
zusammen sein, damit das sendende Modul nicht das empfangene übersteuert.

MfG André H.



> Hallo!
>
> Ich übertrage zwischen meinem Roboter (C-Control2) und einem Windows Programm (in C++) Daten.
> Dazu verwende ich RNFUNK Module (Transceiver).
> Roboterseitig laufen zwei Threads für die Schnittstelle (serielle).
> Einer zum senden und einer zum empfangen.
> Wenn ich den Sendethread anhalte, kommen meine Befehle vom Roboter super rüber.
> Es gibt keine bzw. fast keine Ã?bertragungsfehler. Wenn ich aber den Sendethread parallel laufen
>  lasse, muÃ? ich alles 20zig Mal senden, bis einmal korrekt übertragen wurde.
> Ich hoffe ihr könnt mir helfen.
>
> Hier meine Threads:
>
>
> thread Empfang
> {
>  int Byte;
>  int Length;
>  int Switch;
>  int iDaten;
>  int Motorlinks,Motorrechts;
>  Switch=1;
>  string Header,Daten,Sendstring;
>  loop
>  {
>  wait hwcom.rxd();
>  lcdext.clear();
>  Byte=hwcom.get();
>  if (Byte==58)
>  {
>    iDaten=strx.getNum(Daten);
>   if strx.comp(Header,"Halt")
>   {
>    if (iDaten==1)
>    {
>     motor.speedl(0);
>     motor.speedr(0);
>    }
>
>    if (iDaten==0)
>    {
>     motor.speedl(1023);
>     motor.speedr(1023);
>    }
>   }
>     if strx.comp(Header,"Beep")
>   {
>        if (iDaten==1)
>        {
>         run Beep;
>        }
>        
>        if (iDaten==0)
>        {
>         halt Beep;
>         plm.beep(-1);
>        }
>  }
>  lcdext.clear();
>  lcdext.print(Header);
>  lcdext.line(2);
>  lcdext.print(Daten);
>  str.clear(Daten);
>  str.clear(Header);
>  Switch=1;
>  continue;
>  }
>
>  if (Byte==61)
>  {
>   Switch=2;
>    lcdext.clear();
>   continue;
>  }
>  if (Switch==1) Header=Header+Byte;
>  if (Switch==2) Daten=Daten+Byte;
>
>  }
>
>
>
> thread Senden
> {
> string Fertig,Daten;
> str.putfloat(Daten,sensor.RDistanz());
> Fertig="liS"+"="+Daten+":";
> hwcom.print(Fertig);
> str.clear(Daten);
> str.putfloat(Daten,sensor.LDistanz());
> Fertig="reS"+"="+Daten+":";
> hwcom.print(Fertig);
> str.clear(Daten);
> str.clear(Daten);
> str.putint(Daten,variablen.Ultra);
> Fertig="uS"+"="+Daten+":";
> hwcom.print(Fertig);
> Fertig="mli"+"="+variablen.Mlinks+":";
> hwcom.print(Fertig);
> Fertig="mre"+"="+variablen.Mrechts+":";
> hwcom.print(Fertig);
> str.clear(Daten);
> sleep 100;
> }
>
>

>
>
> Zum Verständis ist noch zu sagen, dass ich die Daten im Format:
> Ziel=Werte: übertrage.
> Wenn ein = empfangen wurde, werden die Bytes zu Daten hinzugefügt, wenn ein :
> empfangen wird, erfolgt die
> Auswertung und es wird zurückgesetzt.
>
>
> Wäre toll, wenn mir jemand helfen könnte.
>
> MfG ACU
>


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: