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

Re: Fragen zum CAN-Bus Kategorie: CAN-Bus (von Markus H - 19.06.2010 15:45)
Als Antwort auf Re: Fragen zum CAN-Bus von reneforster - 17.06.2010 16:15
Ich nutze:
CC2-StarterBoard, OSOPT V3.0
> Hallo Markus,
>
> eigentlich kannst Du auch mit verschiedenen ID arbeiten. Aber die Abfrage und die entsprechende
> Schleifenanzahl wird immer mehr.
> Ich lasse zwei Controls sich immer auf einen festgelegten Kanal unterhalten. Um jetzt
> mehrere Daten zu verarbeiten nehme ich immer das data[0] als meine eigene ID.
>
> hier mein Beispiel:
>
>
> /******************************************************************************
> Datenübertragung per CAN auf Kanal 1 ID 100
> ******************************************************************************/

>
>
> // Modulvariablen ************************************************************
>
>
> thread cane1
> {
>
> // Varis definieren und setzen -------------------------------------------------
> byte data_e[7];
> data_e[0]=0;data_e[1]=0;data_e[2]=0;data_e[3]=0;data_e[4]=0;data_e[5]=0;data_e[6]=0;data_e[7]=0;
>
>
>
> can.expect (1,100);
>
>
> loop
> {
> data_e[0]=0;data_e[1]=0;data_e[2]=0;data_e[3]=0;
> data_e[4]=0;data_e[5]=0;data_e[6]=0;data_e[7]=0;
>
>
> wait can.rxd(1); // warte auf Nachrichten auf Kanal 1
> can.get(1,data_e);// hole Nachrichten ab
>
>
> // Keller +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> if data_e[0]==101 {
> global.SoMe1=data_e[1]*256+data_e[2];
> global.SoMe2=data_e[3]*256+data_e[4];
> global.SoMe3=data_e[5]*256+data_e[6];continue;}
>
> if data_e[0]==102 {
> global.SoMe4=data_e[1]*256+data_e[2];
> global.SoMe5=data_e[3]*256+data_e[4];
> global.SoMe6=data_e[5]*256+data_e[6];continue;}
>
> if data_e[0]==103 {
> global.SoMe7=data_e[1]*256+data_e[2];
> global.SoMe8=data_e[3]*256+data_e[4];
> global.HzMe1=data_e[5]*256+data_e[6];continue;}
>
> if data_e[0]==104 {
> global.HzMe2=data_e[1]*256+data_e[2];
> global.HzMe3=data_e[3]*256+data_e[4];
> global.HzMe4=data_e[5]*256+data_e[6];continue;}
>
> if data_e[0]==110 {
> global.HzMe5=data_e[1]*256+data_e[2];
> global.HzMe6=data_e[3]*256+data_e[4];
> global.HzMe7=data_e[5]*256+data_e[6];continue;}
>
> if data_e[0]==111 {
> global.HzMe8=data_e[1]*256+data_e[2];continue;}
>
>
> // Zustand Stellantriebe und Sonstiges +++++
> if data_e[0]==105 {
> global.ZuHzPuOg=data_e[1];global.ZuSoVe=data_e[2];
> global.ZuRuVe=data_e[3];global.ZuHzPuEg=data_e[4];
> global.ZuZiPuEg=data_e[5];global.ZuZiPuOg=data_e[6];
> global.ZuZiVeEg=data_e[7];continue;}
>
>
> if data_e[0]==106 {
> global.ZuZiVeOg=data_e[1];global.ZuSoPu=data_e[2];
> global.HZBrenner=data_e[3];global.ZWZuAV2=data_e[4];continue;}
>
> if data_e[0]==107 {
> global.ZPE=data_e[1];global.ZPO=data_e[2];
> global.ZVS=data_e[3];global.ZVE=data_e[4];
> global.ZVO=data_e[5];global.ZVR=data_e[6];
> global.ZPS=data_e[7];continue;}
>
> if data_e[0]==108 {
> global.ZHO=data_e[1];global.ZHE=data_e[2];
> global.ZBB=data_e[3];global.ZNK=data_e[4];
> global.HZNK=data_e[5];global.HZSoWi=data_e[6];
> global.LP2FR=data_e[7];continue;}
>
>
> if data_e[0]==109 {
> global.ZuSoVe2=data_e[1];global.ZuLP2=data_e[2];
> global.ZuAV1=data_e[3];global.ZuAV2=data_e[4];
> global.ZWZuSoVe2=data_e[5];global.ZWZuLP2=data_e[6];
> global.ZWZuAV1=data_e[7];continue;}
>
>
> if data_e[0]==112 {
> global.SoMi=data_e[1];global.SoMiEinlernen=data_e[2];
> global.ZuSoNK=data_e[3];global.ZWZuSoNK=data_e[4];continue;}
>
>
>
> continue;
>
>
> }}
>
>

>
>
> Rene

Hallo Rene,

vielen Dank für Deine Antwort, hilft mir gut weiter!
Du opferst praktisch ein Byte für die ID.

Aber wie sieht Dein Sender aus?
Hab hier mal eine Vermutung eingestellt:


/********************************
    can_send.c2
    Sender
    4 analoge Eingänge
********************************/


byte data_s[7];

//------------
  thread main
//------------
{
  can.init(can.SPEED_250,0x0000,0x0000);
  loop
  {
    sleep 1000;

    //Datenframe 1

    data_s[0] = 400;
    data_s[1] = globvar.p_Oel / 256;
    data_s[2] = globvar.p_Oel and 255;
    data_s[3] = globvar.Reskan1 / 256;
    data_s[4] = globvar.Reskan1 and 255;
    data_s[5] = globvar.Reskan2 / 256;
    data_s[6] = globvar.Reskan2 and 255;
    can.send(1,data_s[0],data_s,7);

    //Datenframe 2

    data_s[0] = 401;
    data_s[1] = globvar.Reskan4 / 256;
    data_s[2] = globvar.Reskan4 and 255;
    data_s[3] = globvar.Reskan5 / 256;
    data_s[4] = globvar.Reskan5 and 255;
    data_s[5] = globvar.Reskan6 / 256;
    data_s[6] = globvar.Reskan6 and 255;
    can.send(1,data_s[0],data_s,7);
  }
}


Hier wirds noch ein paar Tage dauern bis ich testen kann...

Danke und GruÃ?,
Markus H


    Antwort schreiben


Antworten:

Re: Fragen zum CAN-Bus (von reneforster - 19.06.2010 16:26)