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

Re: Nullwerte Kategorie: CAN-Bus (von André H. - 28.07.2004 13:49)
Als Antwort auf Nullwerte von Stefan - 27.07.2004 9:56
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT_V2, OSOPT V3.0
Hallo Stefan,

Zuerst: Ein kleines "Hallo" oder ähnliches am Anfang eines Postings kann nicht schaden.
           Auch ein kleines MfG oder ähnliches am Ende wäre nicht schlecht.
           Dann gibt's meistens auch schneller antworten und es gehört auch zur Netiquette(siehe Info).
           Und benutze bitte die Code-Tags für Quellcode, damit dieser richtig dargestellt wird
           und besser lesbar ist.

Nun zu Deinem Problem.

> Habe ein kleines grosses Problem. Ich setze mit der CC2-Unit RS232 Messwerte eines
> Datenloggers auf CAN Bus um.
> Hierzu sendet die CC2 zyklisch eine Anfrage an den Logger , dieser antwortet, die Daten aus dem
> Buffer werden in CAN Botschaften verpackt und auf den Bus gelegt.
> Soweit alles schön und gut, aber leider habe ich in unregelmaessigen Abstaenden auf allen
> gemessenen Kanälen Nullen , die definitiv nicht vom Messgerät kommen.
> Vieleicht hat ja jemand eine Idee was ich falsch gemacht habe. Evtl. das mit dem Flush des
> Empfangsbuffers??

Du machst einen grundlegenden Fehler !
Ich kann in Deinen Routinen keinerlei hwcom.get() oder hwcom.receive() erkennen,
sondern Du greifst auf den erweiterten Datenpuffer, den Du mit hwcom.setbuf() zugewiesen hast, zu.
Das kann nur Schief gehen.
Auf diesen Puffer darf man nicht direkt aus C2 zugreifen, da es sich um einen Ringpuffer handelt.
AuÃ?erdem solltest Du ein wenig mehr mit Arrays arbeiten. Dann wird der Thread um einiges kleiner:

z.B.:
function cpy(long src[], byte data[], byte offset)
{byte i,x;
 for i=offset ... offset+3
 { x=(i-offset) shl 1;
  data[x]  =src[i] shr 8;
  data[x+1]=src[i];
 }
}

thread main
{
 lcdext.init();
 lcdext.clear();
 lcdext.line(1);
 lcdext.print("Warten auf YOKO");
 sleep 15000;

 byte s[250], in[250],i;
 long b,k[31];

 byte data_t[7];
 byte data_u[7];
 byte data_v[7];
 byte data_w[7];
 byte data_x[7];
 byte data_y[7];
 byte data_z[7];
 byte data_s[7];

 hwcom.init ();
 hwcom.setspeed (5);
 hwcom.setbuf(s,250);
 can.init(can.SPEED_125,0x0000,0x0000);
 loop
 {
  hwcom.flush();
  hwcom.print("TS0");
  hwcom.put(10);
  hwcom.put(27);
  hwcom.put('T');
  hwcom.put(10);
  hwcom.print("FM1,001,030");
  hwcom.put(10);
  lcdext.clear();
  lcdext.line(1);
  lcdext.print("Yoko2CAN");
  wait hwcom.rxd();
  hwcom.receive(in,250,500);

  for i= 1 ...30
  {
   k[i]=mem.getlong(s,i*6 + 12);
  }
 
  lcdext.line(2);
  lcdext.print("Running");
 
  cpy(k,data_s,1);
  cpy(k,data_t,5);
  cpy(k,data_u,9);
  cpy(k,data_v,13);
  cpy(k,data_w,17);
  cpy(k,data_x,21);
  cpy(k,data_y,25);

  data_z[0]=k[29] shr 8;
  data_z[1]=k[29];
  data_z[2]=k[30] shr 8;
  data_z[3]=k[30];

  can.send(1,400,data_s,8);
  can.send(2,401,data_t,8);
  can.send(3,402,data_u,8);
  can.send(4,403,data_v,8);
  can.send(5,404,data_w,8);
  can.send(6,405,data_x,8);
  can.send(7,406,data_y,8);
  can.send(8,407,data_z,4);

  sleep 800;
 }
}

 

MfG André H.



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

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Nullwerte (von Stefan - 29.07.2004 10:18)
    Re: Nullwerte (von André H. - 4.08.2004 22:00)