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

Empfang von CAN BUS Daten Kategorie: CAN-Bus (von Thomas Horn - 16.09.2002 16:34)


Hallo

ich möchte über einen CAN Bus mittels can.send(int channel, int id, byte buf[], int lenght ) Nachrichten senden, solange keine CAN BUS Nachrichten über can.rxd (int channel) empfangen werden. Wenn doch, dann
unterbreche das Senden von CAN BUS Nachrichten. Das Problem ist, wenn man ein Thread can_send
für das Senden und einen Thread can_rxd für das Empfangen von CAN BUS Daten verwendet, dann soll nach Ausführung von von can_rxd wieder der Thread can_send gestartet werden (Ausführung des Hauptprogramms
wie bei einer loop Anweisung ohne Neustart des Programms, soda� das entweder CAN BUS Daten ständig gesendet oder empfangen werden können). Neustart des Progrmms nur, wenn ein CAN BUS Fehler auftritt.

Au�erdem möchte ich eine Meldung über das Display der CC2 - Unit als Bestätigung ausgeben lassen,
wenn CAN BUS Nachrichten gesendet werden und eine Meldung über das LCD - Display ausgeben lassen,
wenn CAN BUS Daten empfangen werden

Wie kann man das am besten machen, so daÃ? ich nicht in einer loop Anweisung stecken bleibe beim Senden
von CAN BUS Daten, obwohl über can.rxd( ) schon wieder CAN BUS Daten empfangen werden können ?

Könnte man auch gleichzeitig zwei Threads ausführen lassen, soda� das quasi gleichzeitig CAN BUS Daten
gesendet und empfangen werden können ?

Hier mein Programm (Auszug) mit den wesentlichen Anweisungen:

int channel;        //Globale Variablen
int id;
byte data[7];

thread can_send
{
  int n;
  byte data[n];
  n == 7;
  id = 100;

  if can.ready(channel)
  loop
  {
  for channel = 0...6                            //Kanäle 0...6 dienen zum Senden,die restlichen zum Empfangen
  can.send(channel,id,data[n],8);
   lcdext.home();  
  lcdext.print(data,7);
//  lcdext.put(myconst.DPP);
   sleep 250;
  } while not can.rxd ( );

}

thread can_rxd

{   byte buffer[255];
     can.init(0,0x0000,0x0000);

     for channel = 7...13 & id = 0...999
     {
     if can.rxd(channel)                           // Sobald Nachrichten verfügbar sind, empfange jede Nachricht, egal
     can.expect (channel,id);                  // mit welcher id (Kanäle 7...13 dienen zum Empfangen)
     }    
     can.get(channel,buffer);
     s = "Daten empfangen";
     
    loop                         // Ausgabe auf dem LCD - Display
    {
    lcdext.print(s);       /* LCD - Display Ausgabe */
/*    sleep 1500;
    lcdext.clear();
    sleep 1500;
   } while not can.expect( );
}  


thread main
{
 lcdext.init();
 can.init(0,0x0000,0x0000);
 sleep 1000;

 loop
 {
 run can_send
 if can.rxd (channel );
 break;
 }

 sleep 1000;

 loop
 {
 run can_rxd;
 if can.ready ( )
 break;
 }  
 yield                         // Nach der dieser loop Anweisung soll wieder gesendet werden,ist das so richtig ?
                               
 if can.error( )              // falls unerwartet ein Ã?bertragungsfehler auftritt
 quit (- 1);
}



    Antwort schreiben


Antworten: