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

Re: Auslesen von Messwerten Kategorie: Programmierung (von KlaRa - 25.08.2002 20:49)
Als Antwort auf Auslesen von Messwerten von Guenter Nikl - 22.08.2002 7:12

Für das Auslesen des I2C-EEPROMs gibt es ja fertige Funktionen. Entweder Du sendest in bestimmten Zeitintervallen von der CC2 aus Messwerte auf die RS232 oder Du fragst gezielt Werte oder Wertebereiche ab.
Hierbei musst Du in Schleife, eigener Thread ist angebracht, die RS232 von der CC2 aus abfragen. So gibst Du Werte vom PC zur CC2. Darauf muss die CC2 reagieren.

Hier der Teil der ein Token in der CC2 erkennt. Der Rest ist reine Tipparbeit.


/*************************************************************/
// das ist der einzige Thread
// er wird zyklisch abgearbeitet

thread com

{
 int    i;                         // lokale Variable vom Typ Integer
 int    j;
 int    iAnzZeichen;
 int    iRetCode;
 byte   x;
 string s;                      
 string Token[12];
 int    MaxToken;
 
 Token[ 0] = "HKSEN";              // Zuordnung Heizkreis - Sensor übertragen
 Token[ 1] = "HKV";                // Vorgaben für Heizkreise übertragen
 Token[ 2] = "??";                 //
 Token[ 3] = "??";                 //
 Token[ 4] = "SE";                 // Speicherausgabe Ein
 Token[ 5] = "SA";                 // Speicherausgabe Aus
 Token[ 6] = "EE";                 // Einzelausgabe Ein
 Token[ 7] = "EA";                 // Einzelausgabe Aus
 Token[ 8] = "GD";                 // Datum ausgeben
 Token[ 9] = "GT";                 // Zeit ausgeben
 Token[10] = "SD";                 // Datum setzen
 Token[11] = "ST";                 // Zeit setzen

 MaxToken = 11;
 
 lcd.clear();                   // Loeschen des Display
 s= "Warten";                   // String s mit Zeichenkette laden
 lcd.print(s, str.length(s));   // Zeichenkette auf LC-Display ausgeben
 hwcom.setspeed(5);             // Baudrate einstellen, Standardeinstellung 9600 Baud

 // String t mit Zeichenkette laden, Text "Hallo COM" und neue Zeile (n)
 SendeMsg("C-Controll II ist bereit.rn");
 lcd.clear();                 // LCD-Anzeige loeschen

 s = "";                      // Zeichenkette leeren
 iAnzZeichen = 0;             // Zähler auf 0
 
 loop                          
 {
  // warten bis Zeichen auf HWCOM empfangen wurde
  // (Zeichen ist von PC-Terminalprogramm zu senden)
  wait hwcom.rxd();
  lcd.clear();                 // LCD-Anzeige loeschen

  // Variable i mit Wert des an HWCOM empfangenen Zeichens laden
  // get() liefert Wert des Typ INT
  i= hwcom.get();
  // empfangenen Wert in Zeichenkette umwandeln und an String s anhaengen
  str.putchar(s, i);
  // Ausgabe des empfangenen Zeichens auf das LC-Display
  lcd.print(s, str.length(s));
  // warten bis LCD-Ausgabe beendet ist
  wait lcd.ready();
  // Ausgabe des empfangenen Zeichens auf HWCOM (Echo)
  // (das PC-Terminalprogramm zeigt das Echo des gesendeten Zeichens an)
  hwcom.put(i);
 
  for j = 0 ... MaxToken
  {
      x = mystr.Compare(s,Token[j]);
      if x == 253 break;            // Teil eines Token gefunden.
      if x == 255                   // Token exact gefunden
      {
        s = "Befehl '";
        str.putstring(s, Token[j]);
        str.putstring(s, "'rn");
        SendeMsg(s);
        if j ==  0 {Token_0() ; break;}
        if j ==  1 {Token_1() ; break;}
        if j ==  2 {Token_2() ; break;}
        if j ==  3 {Token_3() ; break;}
        if j ==  4 {Token_4() ; break;}
        if j ==  5 {Token_5() ; break;}
        if j ==  6 {Token_6() ; break;}
        if j ==  7 {Token_7() ; break;}
        if j ==  8 {Token_8() ; break;}
        if j ==  9 {Token_9() ; break;}
        if j == 10 {Token_10(); break;}
        if j == 11 {Token_11(); break;}
        // Fehler, Token nicht behandelt
        SendeMsg("Fehler: Token '");
        SendeMsg(s);
        SendeMsg("' nicht behandelt.rn");
        s = "";
        break;
      }
  }
  if x == 255
  {
    s = "";                                // Token behandelt
  }
  else
  {
    if x == 0 or x == 254
    {
      SendeMsg("Fehler: Befehl '");
      SendeMsg(s);
      SendeMsg("' nicht vorhanden.rn");
      s = "";
      hwcom.flush();                     // Eingehede Zeichen löschen
    }
    if str.length(s) > 20                // Hänger so vermeiden?
    {
      SendeMsg("Fehler: Befehl '");
      SendeMsg(s);
      SendeMsg("' zu lang.rn");
      s = "";
      hwcom.flush();                     // Eingehede Zeichen löschen
    }
  }
 }
}


Hier noch die Compare-Function:


//*******************************************************************
//  Lib: MyStr.c2
//
// function Compare(byte string1[], byte string2[]) returns byte
// Getchar ( byte s[], int position ) returns byte
// Str2Int(byte Wert[]) returns int
//
//
/********************************************************************

    Vom "Das C-Control - 2 - Forum"
    Geschrieben von Reiner am 24. Dezember 2000 14:39:06:

    Funktion zum Vergleichen zweier Stringvariablen
    -> gibt 0 zurück wenn strings ungleich
    -> gibt 255 zurück wenn strings gleich
   
    // Beispiel
    thread main
    {
      string s1;
      string s2;
      byte x;

      s1 = "Halli";
      s2 = "Hallo";

       x = compare (s1,s2);

    }
    --------------------------------------
    Klaus Rawski, 09. Oktober 2001, Funktion leicht verbessert
   
                  14. Oktober 2001, Vergleich auf Excat und
                                    Str2 geht in Str1 auf.
                                    Begrenzung des Vergleichs wenn
                                    Str1 zu Ende ist.
   

********************************************************************/

function Compare(byte string1[], byte string2[]) returns byte
{
byte i;
byte RetCode;
byte b1;
byte b2;

RetCode = 255;                        // Exacter Vergleich OK
for i = 0 ... 29
{
 b1 = string1[i];
 b2 = string2[i];
    if string1[i] == 0 and string2[i] == 0
    {
       break;
    }
    if string1[i] == 0
    {
       RetCode = 253;                 // String 1 geht in String 2 auf
       break;
    }
    if string2[i] == 0
    {
       RetCode = 254;                 // String 2 geht in String 1 auf
       break;
    }
    if string1[i] != string2[i]
    {
       RetCode = 0;                   // Keine Ã?bereinstimmung
       break;
    }
}
return RetCode;
}





> Hallo,
>
> ich suche ein Beispiel mit dem ich Messergebnisse aus dem Speicher auf der RS232 auslesen kann!
>
> Ich wollte einen Speicher an der I2C-Schnittstelle verwenden.
>
> Kann mir jemand helfen?
>
>


    Antwort schreiben


Antworten: