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: |