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

Re: große Datenmengen über Ser.Schnittst. auslesen Kategorie: Programmierung (von wernerAZ - 19.04.2007 16:04)
Als Antwort auf große Datenmengen über Ser.Schnittst. auslesen von wernerAZ - 16.04.2007 22:09
Ich nutze:
C164CI-ControllerBoard, CC2-Application-Board, OSOPT V3.1
Also das einlesen habe ich jetzt gelöst. Ich hatte Probleme mit dem Terminalprogramm.
Anbei auch meine Lösung.
Aber wie bekomme ich v24.auslesen und v24.auswertung in einen Thread?
Und vor allem, wie mache ich das mit der Ã?bergabe von buf[] und type gps?

//serielle Schnittstelle einlesen und auswerten
//GPS-Signal mit Modul v24 auswerten
//alphanum. Eingabe mit Ã?bernahme
//mit Modul menu
//grobe Richtung anzeigen
//Entfernung anzeigen
//Koordinate in Stunden umrechnen
//mit Himmelsrichtung
//gps - Programmaufteilung
//gps10 - Daten in Flash-Segment
//gps9 - mit Zeiger
//gps8 - Weitere Anzeigen
//gps7 - Anzeige Kompass
//gps6 - Anzeige Uhr
//gps5 - 3. Ebene im Menü (Eingabe)
//gps4 - 2. Ebene im Menü (Edit)
//gps3 - Auswahl im Menü
//gps2 - Menü für Datenbank
//gps1 - Datenbank vor und zurück blättern

string s,hs,s3;
float e;
byte buf[255];

//hier gehts los
thread main
{
v24.gpsData gps0;
int i0,anzahlDaten;
anzeige.gradMemory=360;
anzeige.zeigerMemory=0;
anzahlDaten=menu.datenbank();     //Anzahl Datensätze auslesen
//Programm initialisieren
lcdext.init();
touchlcd.init();
touchlcd.cursor(0);
i0=anzahlDaten-1;
hwcom.init();
hwcom.setspeed(hwcom.SPEED_4800);
//v24.initData(gps0);
//v24.zeigeData(gps0);
//sleep(3000);
//v24.testBuffer(gps0,buf);
//v24.auswertung(gps0,buf);
//v24.zeigeData(gps0);
v24.auslesen(gps0,buf);
//while(-1);

loop
    {
    touchlcd.textmodus(1,1);
    touchlcd.touchactive(1);
    touchlcd.touchevent(0,0);   //kein invers, kein Beep
    i0=menu.anzeigen(i0);       //letzter Datensatz auswählen
    }
}


//Serielle Schnittstelle einlesen
//Modul v24, GPS-Signal formatiert

type gpsData
{
string kennung;
string zeit;
string status;
string breite;
string breiteB;
string laenge;
string laengeL;
string speed;
string grad;
string datum;
string gradM;
string direction;
string mode;
string checksum;
}
//gpsData gps;

function initData(gpsData gps)
{
//gpsData definieren
gps.kennung="dgs,fgd,fgd$fds,k$GPRMC";
gps.zeit="135155.000";
gps.status="A";
gps.breite="4959.3687";
gps.breiteB="N";
gps.laenge="00813.8943";
gps.laengeL="E";
gps.speed="0.00";
gps.grad="258.97";
gps.datum="220307";
gps.gradM="";
gps.direction="";
gps.mode="A";
gps.checksum="*6c";
}

function zeigeData(gpsData gps)
{
touchlcd.clear();
touchlcd.textmodus(1,1);
touchlcd.font(3,1,1);
touchlcd.text2('L',1,0,gps.kennung);
touchlcd.text2('L',1,8,gps.zeit);
touchlcd.text2('L',1,16,gps.breiteB);
touchlcd.text2('L',8,16,gps.breite);
touchlcd.text2('L',1,24,gps.laengeL);
touchlcd.text2('L',8,24,gps.laenge);
touchlcd.text2('L',1,32,gps.speed);
touchlcd.text2('L',1,40,gps.grad);
touchlcd.text2('L',1,48,gps.datum);
}

//in das Byte-Array buf[255] wird ein GPS-Signal kopiert
function testBuffer(gpsData gps,byte buf[])
{
string k;
int l1,l2;

k=",";
l2=0;
l1=str.length(gps.kennung);
mem.copy(buf,0,gps.kennung,l1);
l2=l2+l1;
mem.copy(buf,l2,k,1);
l2=l2+1;
l1=str.length(gps.zeit);
mem.copy(buf,l2,gps.zeit,l1);
l2=l2+l1;
mem.copy(buf,l2,k,1);
l2=l2+1;
l1=str.length(gps.status);
mem.copy(buf,l2,gps.status,l1);
l2=l2+l1;
mem.copy(buf,l2,k,1);
l2=l2+1;
l1=str.length(gps.breite);
mem.copy(buf,l2,gps.breite,l1);
l2=l2+l1;
mem.copy(buf,l2,k,1);
l2=l2+1;
l1=str.length(gps.breiteB);
mem.copy(buf,l2,gps.breiteB,l1);
l2=l2+l1;
mem.copy(buf,l2,k,1);
l2=l2+1;
l1=str.length(gps.laenge);
mem.copy(buf,l2,gps.laenge,l1);
l2=l2+l1;
mem.copy(buf,l2,k,1);
l2=l2+1;
l1=str.length(gps.laengeL);
mem.copy(buf,l2,gps.laengeL,l1);
l2=l2+l1;
mem.copy(buf,l2,k,1);
l2=l2+1;
l1=str.length(gps.speed);
mem.copy(buf,l2,gps.speed,l1);
l2=l2+l1;
mem.copy(buf,l2,k,1);
l2=l2+1;
l1=str.length(gps.grad);
mem.copy(buf,l2,gps.grad,l1);
l2=l2+l1;
mem.copy(buf,l2,k,1);
l2=l2+1;
l1=str.length(gps.datum);
mem.copy(buf,l2,gps.datum,l1);
l2=l2+l1;
mem.copy(buf,l2,k,1);
l2=l2+1;
k=",,A,*6c";
l1=str.length(k);
mem.copy(buf,l2,k,l1);
l2=l2+l1;
buf[l2]=12;           //in Buf steht dann 13,???
buf[l2+1]=9;          //in buf steht dann 10,???
k="";                 //Wird einfach im Display angezeigt,???
}

function auswertung(gpsData gps,byte buf[])
{
string s14[14];
int zaehler,pos;
pos=0;
//strx.split(buf,s14,','); geht leider nicht
for zaehler=0 ... 127
    {
    if buf[zaehler]=='*' & pos==13
       break;            //zaehler=255;      //Schleife verlassen
    else if buf[zaehler]=='$'
       {
       for pos=0 ... 13
           s14[pos]="";      //str.clear(s14[pos]); geht nicht richtig!
       pos=0;
       }
    else if buf[zaehler]==','
       pos=pos+1;
    else
       str.putchar(s14[pos],buf[zaehler]);
    }
if strx.comp("GPRMC",s14[0])
   {
   gps.kennung=s14[0];
   if str.length(s14[1])==10    //Gültigkeit prüfen
      gps.zeit=s14[1];          //und zuweisen
   gps.status=s14[2];
   if str.length(s14[3])==9
      gps.breite=s14[3];
   if str.length(s14[4])==1
      gps.breiteB=s14[4];
   if str.length(s14[5])==10
      gps.laenge=s14[5];
   if str.length(s14[6])==1
      gps.laengeL=s14[6];
   if str.length(s14[7])>3
      gps.speed=s14[7];
   if str.length(s14[8])>3
      gps.grad=s14[8];
   if str.length(s14[9])==6
      gps.datum=s14[9];
   //zeigeData(gps.gpsData gps);
   }
}

function auslesen(gpsData gps,byte buf[])
{
byte buffer[1024];
byte c;
hwcom.setbuf(buffer,1024);
loop
  {
  //wait hwcom.rxd();
  wait hwcom.ready();
  c=hwcom.get();
  if c=='*'
     {
     hwcom.receive(buf,127,500);
     //hwcom.send(buf,127);
     auswertung(gps,buf);
     zeigeData(gps);
     hwcom.flush();
     }
  }
}

Bitte helt mir, ich würde zugern mein GPS am Wochenende mit dem schönen Wetter ausprobieren.
GruÃ? Werner



    Antwort schreiben


Antworten: